[erlang-questions] Bit syntax matching gotchas

Björn Gustavsson bjorn@REDACTED
Wed Feb 3 16:06:49 CET 2016

On Wed, Feb 3, 2016 at 12:00 PM, José Valim
<jose.valim@REDACTED> wrote:
> Björn, in solution #1, would you warn only when matching or also when
> constructing? Is the warning only at compile-time or also at runtime? For
> example, would you warn for:
>     X = -1.
>     <<X>>.

Yes, I have considered warning for construction too.
The warnings would only occur at compile-time.

There would NOT be a warning for your example, though.
More on that below.

> We may have a third option which is to control the masking behaviour with a
> new flag. From Erlang 19, we could warn if you are relying on masking and
> you would need to pick to mask (/integer-mask) or fix your code. The default
> after the warning is removed is to always raise. The mask option wouldn't be
> supported when matching, making it clear the masking behaviour is
> construction only.

How could the compiler warn you that you depend on masking?

Consider this code:

f(A) ->

The compiler has no way of knowing whether masking is
needed or not.

We have no plans for changing how construction works in
OTP 19.

Regarding construction, note that signed/unsigned is
ignored. All of the following examples construct the
same binary:


Since signed/unsigned has never been enforced
for construction, starting to warn for <<-1>> and
<<-1/unsigned>> would cause many new annoying
warnings. Therefore, no warnings should be

However, the following examples should produce


The two values above cannot be represented in
8 bits, which points to a real bug.


Björn Gustavsson, Erlang/OTP, Ericsson AB

More information about the erlang-questions mailing list