[erlang-questions] Optimization for the ++ operator

Björn Gustavsson <>
Fri Jun 1 10:28:12 CEST 2012

On Thu, May 31, 2012 at 1:55 PM, José Valim <> wrote:
> I thought Erlang would optimize the ++ operator when the left side is known
> at compile time.
> For example, if the compiler sees the following outside of a function
> signature:
>     "Foo" ++ Bar
> It could rewrite it as:
>     [$F, $o, $o | assert_list(Bar)]

The '++' operator does not verify that the second argument is a list.
Therefore, the compiler will rewrite the first expression to simply:


> However, I ran some benchmarks and it seems the optimization does not happen
> (on R15B).
> With a local dummy implementation of assert_list(Bar), I got that the first
> format is 50% slower than the second one.

Have you made sure that you run each test in a newly spawned process?
Do you run the test for long enough time?

If you have set up your benchmark environment properly, and your second
example is still faster, I can only assume that the code sits better in cache.

Björn Gustavsson, Erlang/OTP, Ericsson AB

More information about the erlang-questions mailing list