<div dir="ltr">I can tell a wonderful example of how _leaving_ integers in compressed form in binary could speedup our code from 1000 milliseconds per request to 5 milliseconds<div><br></div><div>But it is is a complicated story because it is about unpacking compressed structure vs working with packed representation.</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Sat, Jun 4, 2016 at 1:52 PM, Loïc Hoguin <span dir="ltr"><<a href="mailto:essen@ninenines.eu" target="_blank">essen@ninenines.eu</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On 06/04/2016 09:41 AM, Björn Gustavsson wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On Sat, Jun 4, 2016 at 9:07 AM, Valentin Micic <<a href="mailto:valentin@pixie.co.za" target="_blank">valentin@pixie.co.za</a>> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
On 04 Jun 2016, at 8:13 AM, Björn Gustavsson wrote:<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
"I thought binaries were always faster than lists, so why is binary<br>
matching slower than list matching?"<br>
<br>
</blockquote>
<br>
Stated this way, the myth may be confusing to some people (well, it is for me).<br>
So, what is the myth? Is it that binaries are faster than lists,  or that binary matching is slower then list matching?<br>
<br>
</blockquote>
<br>
Yes, the myth needs some polishing.<br>
<br>
Here are some more details of what I had in mind.<br>
<br>
It is often recommended to use binaries (for example in this mailing)<br>
instead of lists.<br>
<br>
Someone read this recommendation, tries it, and is then surprised that<br>
this code:<br>
<br>
f(<<B:/8,T/binary>>) -><br>
    %% Do something with B.<br>
    f(T);<br>
f(<<>>) -><br>
    %% Return something.<br>
<br>
is slower than:<br>
<br>
f([B|T]) -><br>
    %% Do something with B.<br>
    f(T);<br>
f([]) -><br>
    %% Return something.<br>
<br>
Fact is, it is hard to beat the speed of lists, and that can be surprising.<br>
</blockquote>
<br></div></div>
On the other hand, if your input is a binary, converting + looping might be slower than just looping through the binary. Not to mention the extra garbage created.<br>
<br>
This section should point this out, otherwise we'll end up with users converting binaries to list "because lists are faster for this".<br>
<br>
Also I think there are too few cases where lists win, especially in that kind of comparison. You are basically comparing binaries-as-string vs strings, and when using those it's frequent to match against <<"abcdef", T/binary>> forms (vs [$a, $b, $c, $d, $e, $f|T]) and as you pointed out, in that case binaries win.<br>
<br>
IMO the myth is that list strings are efficient at all when in fact parsing them or even just having them in memory is inefficient. They have their use cases (Unicode related mostly).<br>
<br>
Of course if the section is about people storing lists of integers in a binary then it makes perfect sense, but I haven't seen that one yet. :-)<span class="HOEnZb"><font color="#888888"><br>
<br>
-- <br>
Loïc Hoguin<br>
<a href="http://ninenines.eu" rel="noreferrer" target="_blank">http://ninenines.eu</a><br>
Author of The Erlanger Playbook,<br>
A book about software development using Erlang</font></span><div class="HOEnZb"><div class="h5"><br>
_______________________________________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</div></div></blockquote></div><br></div>