New EEP draft: Pinning operator ^ in patterns

Richard Carlsson carlsson.richard@REDACTED
Fri Jan 15 13:48:42 CET 2021

Sorry, I just did a quick hack instrumenting the compiler to emit the
variable info, then built OTP from scratch using this.


Den fre 15 jan. 2021 kl 13:39 skrev Fernando Benavides <

> Hey, Richard
> Do you mind sharing the code you used to analyze OTP's codebase? I would
> like to use it to analyze other large codebases as well :)
> Cheers!
> On Fri, Jan 15, 2021 at 1:34 PM Richard Carlsson <
> carlsson.richard@REDACTED> wrote:
>> There have been many strong reactions in this thread, so let me give you
>> some statistics to show how much this feature of using bound variables is
>> actually used in practice. I checked the entire OTP codebase: there are
>> just over 1300 modules, and in total about 595000 variable occurrences in
>> patterns, of which only 3350 are already bound.. That makes 0.56% of all
>> variables in patterns - about once in 200 to make it simple. On average,
>> that's 2-3 usages per module - some modules using it more and some not
>> using it at all.
>> I find it hard to see, then, why it should be a big issue to ask
>> programmers to annotate these few occurrences for readability and
>> maintainability. It's certainly not as big of a change as for example when
>> the warning for unused variables, unless prefixed with _, was made the
>> default.
>> Imagine a world where Erlang had not allowed already-bound variables in
>> patterns (forcing you to use the idiom "X1 when X1 =:= X -> ...", as in
>> e.g. Haskell), and that someone now came with the suggestion that to make
>> things simpler, we could just implicitly match on the value of X if X is
>> already bound. The old me from my university days would probably have said
>> "that's really elegant, let's do it". But the
>> maintainability-and-readability me, with experience of very large code
>> bases, large numbers of developers, and many relative newcomers to the
>> language, would say "aw hell no". This is a cute feature, but it carries a
>> large cognitive cost and is not worth having compared to how relatively
>> little it is used. Being explicit about intention is much more important.
>>         /Richard
>> Den tors 24 dec. 2020 kl 21:10 skrev Richard Carlsson <
>> carlsson.richard@REDACTED>:
>>> The ^ operator allows you to annotate already-bound pattern variables as
>>> ^X, like in Elixir. This is less error prone when code is being refactored
>>> and moved around so that variables previously new in a pattern may become
>>> bound, or vice versa, and makes it easier for the reader to see the intent
>>> of the code.
>>> See also
>>> Ho ho ho,
>>>         /Richard & the good folks at WhatsApp
> --
> <>
> Brujo Benavides
> <>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the erlang-questions mailing list