Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@kikofernandez
Copy link
Contributor

The size/1 BIF is not optimized by the JIT, and its use can result in worse types for Dialyzer.

When one knows that the value being tested must be a tuple, tuple_size/1 should always be preferred.

When one knows that the value being tested must be a binary, byte_size/1 should be preferred. However, byte_size/1 also accepts a bitstring (rounding up size to a whole number of bytes), so one must make sure that the call to byte_size/ is preceded by a call to is_binary/1 to ensure that bitstrings are rejected. Note that the compiler removes redundant calls to is_binary/1, so if one is not sure whether previous code had made sure that the argument is a binary, it does not harm to add an is_binary/1 test immediately before the call to byte_size/1.

Replaces #6776 due to the naming convention.

@kikofernandez kikofernandez added team:PS Assigned to OTP team PS enhancement testing currently being tested, tag is used by OTP internal CI labels Feb 6, 2023
@kikofernandez kikofernandez added this to the OTP-26.0-rc1 milestone Feb 6, 2023
@kikofernandez kikofernandez self-assigned this Feb 6, 2023
@github-actions
Copy link
Contributor

github-actions bot commented Feb 6, 2023

CT Test Results

    2 files    24 suites   48m 9s ⏱️
492 tests 466 ✔️   26 💤 0
644 runs  513 ✔️ 131 💤 0

Results for commit 4a5e5e4.

♻️ This comment has been updated with latest results.

To speed up review, make sure that you have read Contributing to Erlang/OTP and that all checks pass.

See the TESTING and DEVELOPMENT HowTo guides for details about how to run test locally.

Artifacts

// Erlang/OTP Github Action Bot

The <c>size/1</c> BIF is not optimized by the JIT, and its use can
result in worse types for Dialyzer.

When one knows that the value being tested must be a tuple,
<c>tuple_size/1</c> should always be preferred.

When one knows that the value being tested must be a binary,
<c>byte_size/1</c> should be preferred. However, <c>byte_size/1</c> also
accepts a bitstring (rounding up size to a whole number of bytes), so
one must make sure that the call to <c>byte_size/</c> is preceded by a
call to <c>is_binary/1</c> to ensure that bitstrings are rejected. Note
that the compiler removes redundant calls to <c>is_binary/1</c>, so if
one is not sure whether previous code had made sure that the argument is
a binary, it does not harm to add an <c>is_binary/1</c> test immediately
before the call to <c>byte_size/1</c>.
@kikofernandez kikofernandez force-pushed the kiko/snmp/replace-size-by-xxx_size/GH-6672/OTP-18432 branch from 987a712 to 4a5e5e4 Compare February 6, 2023 10:35
@IngelaAndin IngelaAndin requested review from bmk and removed request for IngelaAndin February 6, 2023 16:04
@kikofernandez kikofernandez merged commit f858e4a into erlang:maint Feb 6, 2023
@kikofernandez kikofernandez deleted the kiko/snmp/replace-size-by-xxx_size/GH-6672/OTP-18432 branch February 6, 2023 19:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement team:PS Assigned to OTP team PS testing currently being tested, tag is used by OTP internal CI

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants