[erlang-questions] byte_size/1 vs variable access
Wed Feb 26 14:46:34 CET 2014
On 02/26/2014 02:30 PM, Björn Gustavsson wrote:
> On Wed, Feb 26, 2014 at 1:42 PM, Loïc Hoguin <essen@REDACTED> wrote:
>> Is there any optimization when it's done inside a function clause guard? For
>> example say, 5 of my 6 clauses need to check byte_size(Bin) to decide what
>> to do. I am reading some code I wrote a few days ago and I see I
>> instinctively used a single clause, creating a variable to hold the size and
>> then used a if inside it. Perhaps the compiler is doing something about it
>> in this case?
> No. The compiler currently does not do much optimizations of guards.
>> I know it doesn't matter 99% of the time, but I got one or two modules that
>> deal with binaries where the smallest improvement means I can handle a bunch
>> more traffic. To be honest it would be really nice if the compiler would
>> automatically create a variable when it sees me use byte_size/1 more than
>> once as I can then stop writing all this extra code. And I'm guessing it
>> could probably do the same with length/1 and others.
> Is any of that code open-source? I occasionally look
> through BEAM assembly code looking for things
> that the BEAM compiler could handle better. Pointers
> to real-world code that is performance critical
> are appreciated.
That particular byte_size/1 related code isn't online yet. I am
finishing it up. I do have two very performance critical modules online,
one that I optimized to death and then some, here:
It uses a single binary match context for the whole thing (as far as I
can tell, anyway).
And one where I simply reimplemented my own supervisor here:
If you can make any of these faster than they currently are, then I
believe you will make happy a big part of the Erlang community.
More information about the erlang-questions