Okay, I think I see what you are getting at. Less copying, more slicing. <div>I've taken this approach, and designed another mini-test, this time emulating the parsing task more closely. The first two are the equivalent of the previous binary and list string copying functions. The third takes the approach of counting the binary length before finally returning a slice of it. My approach is a bit simpler than yours Dmitry. I realize that yours would keep on counting from the beginning of the binary and not return a Rest of the binary, but since I tested with a simple string "field:value" I don't think there would be a difference. </div>
<div><br></div><div>Anyway, for this test the counting method was actually slower. Maybe a real world test where the parser is dealing with longer strings and multiple tokens</div><div><br></div><div><div>test_bin_parse(Bin, StopperChar) -></div>
<div>    test_bin_parse(Bin, StopperChar, <<>>).</div><div>test_bin_parse(<<Char, Rest/binary>>, Char, Accum) -></div><div>    {Accum, Rest};</div><div>test_bin_parse(<<Char, Rest/binary>>, Stopper, Accum) -></div>
<div>    test_bin_parse(Rest, Stopper, <<Accum/binary, Char>>).</div></div><div><br></div><div><div>test_string_parse(String, StopperChar) -></div><div>    test_string_parse(String, StopperChar, []).</div><div>
test_string_parse([Char|_Rest], Char, Accum) -></div><div>    {lists:reverse(Accum), Rest};</div><div>test_string_parse([Char|Rest], Stopper, Accum) -></div><div>    test_string_parse(Rest, Stopper, [Char|Accum]).</div>
<div><br></div><div><div>test_bin_parse2(Bin, StopperChar) -></div><div>    test_bin_parse2(Bin, StopperChar, 0).</div><div>test_bin_parse2(Bin, Stopper, Len) -></div><div>    case Bin of </div><div><span class="Apple-tab-span" style="white-space:pre">      </span><<_Field:Len/binary>> -></div>
<div><span class="Apple-tab-span" style="white-space:pre">      </span>    undefined;</div><div><span class="Apple-tab-span" style="white-space:pre">       </span><<Field:Len/binary, Stopper, Rest/binary>> -></div><div>
<span class="Apple-tab-span" style="white-space:pre"> </span>    {Field, Rest};</div><div><span class="Apple-tab-span" style="white-space:pre">   </span>_Else -></div><div><span class="Apple-tab-span" style="white-space:pre">  </span>    test_bin_parse2(Bin, Stopper, Len+1)</div>
<div>    end.</div></div><div><br></div><div>BTW I couldn't get the binary length to pattern match in a function head, so had to do it in a case instead.</div><div><br></div><div>Erik.</div><div><br></div><div><br></div>
<div><br><div class="gmail_quote">On Tue, Oct 23, 2012 at 8:34 AM, Dmitry Kolesnikov <span dir="ltr"><<a href="mailto:dmkolesnikov@gmail.com" target="_blank">dmkolesnikov@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<div style="word-wrap:break-word"><div>Hello,</div><div><br></div><div>I believe you should trade-off between memory utilization and performance.</div><div>Yes, lists are faster then binary but requires more memory.</div>
<div><br></div><div>I have figure out that binary parsing might be efficient if you scan it by changing index and capture tokens instead of single byte.</div><div>, e.g.:</div><div><br></div><div><span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;font-weight:bold;padding:0px;line-height:16px;color:rgb(153,0,0);text-transform:none;font-size:12px;white-space:pre-wrap;margin:0px;font-family:Consolas,'Liberation Mono',Courier,monospace;border:0px;word-spacing:0px">parse</span><span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;font-weight:normal;padding:0px;line-height:16px;color:rgb(51,51,51);text-transform:none;font-size:12px;white-space:pre-wrap;margin:0px;font-family:Consolas,'Liberation Mono',Courier,monospace;border:0px;word-spacing:0px">(</span><span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;font-weight:normal;padding:0px;line-height:16px;color:rgb(0,128,128);text-transform:none;font-size:12px;white-space:pre-wrap;margin:0px;font-family:Consolas,'Liberation Mono',Courier,monospace;border:0px;word-spacing:0px">In</span><span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;font-weight:normal;padding:0px;line-height:16px;color:rgb(51,51,51);text-transform:none;font-size:12px;white-space:pre-wrap;margin:0px;font-family:Consolas,'Liberation Mono',Courier,monospace;border:0px;word-spacing:0px">,</span><span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;display:inline!important;font-weight:normal;float:none;line-height:16px;color:rgb(51,51,51);text-transform:none;font-size:12px;white-space:pre-wrap;font-family:Consolas,'Liberation Mono',Courier,monospace;word-spacing:0px"> </span><span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;font-weight:normal;padding:0px;line-height:16px;color:rgb(0,128,128);text-transform:none;font-size:12px;white-space:pre-wrap;margin:0px;font-family:Consolas,'Liberation Mono',Courier,monospace;border:0px;word-spacing:0px">Pos</span><span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;font-weight:normal;padding:0px;line-height:16px;color:rgb(51,51,51);text-transform:none;font-size:12px;white-space:pre-wrap;margin:0px;font-family:Consolas,'Liberation Mono',Courier,monospace;border:0px;word-spacing:0px">,</span><span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;display:inline!important;font-weight:normal;float:none;line-height:16px;color:rgb(51,51,51);text-transform:none;font-size:12px;white-space:pre-wrap;font-family:Consolas,'Liberation Mono',Courier,monospace;word-spacing:0px"> </span><span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;font-weight:normal;padding:0px;line-height:16px;color:rgb(0,128,128);text-transform:none;font-size:12px;white-space:pre-wrap;margin:0px;font-family:Consolas,'Liberation Mono',Courier,monospace;border:0px;word-spacing:0px">Len</span><span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;font-weight:normal;padding:0px;line-height:16px;color:rgb(51,51,51);text-transform:none;font-size:12px;white-space:pre-wrap;margin:0px;font-family:Consolas,'Liberation Mono',Courier,monospace;border:0px;word-spacing:0px">,</span><span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;display:inline!important;font-weight:normal;float:none;line-height:16px;color:rgb(51,51,51);text-transform:none;font-size:12px;white-space:pre-wrap;font-family:Consolas,'Liberation Mono',Courier,monospace;word-spacing:0px"> </span><span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;font-weight:normal;padding:0px;line-height:16px;color:rgb(0,128,128);text-transform:none;font-size:12px;white-space:pre-wrap;margin:0px;font-family:Consolas,'Liberation Mono',Courier,monospace;border:0px;word-spacing:0px">Line</span><span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;font-weight:normal;padding:0px;line-height:16px;color:rgb(51,51,51);text-transform:none;font-size:12px;white-space:pre-wrap;margin:0px;font-family:Consolas,'Liberation Mono',Courier,monospace;border:0px;word-spacing:0px">,</span><span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;display:inline!important;font-weight:normal;float:none;line-height:16px;color:rgb(51,51,51);text-transform:none;font-size:12px;white-space:pre-wrap;font-family:Consolas,'Liberation Mono',Courier,monospace;word-spacing:0px"> </span><span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;font-weight:normal;padding:0px;line-height:16px;color:rgb(0,128,128);text-transform:none;font-size:12px;white-space:pre-wrap;margin:0px;font-family:Consolas,'Liberation Mono',Courier,monospace;border:0px;word-spacing:0px">Fun</span><span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;font-weight:normal;padding:0px;line-height:16px;color:rgb(51,51,51);text-transform:none;font-size:12px;white-space:pre-wrap;margin:0px;font-family:Consolas,'Liberation Mono',Courier,monospace;border:0px;word-spacing:0px">,</span><span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;display:inline!important;font-weight:normal;float:none;line-height:16px;color:rgb(51,51,51);text-transform:none;font-size:12px;white-space:pre-wrap;font-family:Consolas,'Liberation Mono',Courier,monospace;word-spacing:0px"> </span><span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;font-weight:normal;padding:0px;line-height:16px;color:rgb(0,128,128);text-transform:none;font-size:12px;white-space:pre-wrap;margin:0px;font-family:Consolas,'Liberation Mono',Courier,monospace;border:0px;word-spacing:0px">Acc0</span><span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;font-weight:normal;padding:0px;line-height:16px;color:rgb(51,51,51);text-transform:none;font-size:12px;white-space:pre-wrap;margin:0px;font-family:Consolas,'Liberation Mono',Courier,monospace;border:0px;word-spacing:0px">) -></span></div>
<div><pre style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;border-style:initial;border-color:initial;font-size:12px;font-family:Consolas,'Liberation Mono',Courier,monospace;font-variant:normal;letter-spacing:normal;line-height:16px;text-align:-webkit-auto;text-indent:0px;text-transform:none;word-spacing:0px">
<div style="font-weight:normal;color:rgb(51,51,51);font-style:normal;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:10px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;border-style:initial;border-color:initial">
<span style="margin:0px;padding:0px;border:0px;font-weight:bold">case</span> <span style="margin:0px;padding:0px;border:0px;color:rgb(0,128,128)">In</span> <span style="margin:0px;padding:0px;border:0px;font-weight:bold">of</span></div>
<div style="font-weight:normal;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:10px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;border-style:initial;border-color:initial">
<font color="#333333">   </font><span style="color:rgb(153,153,136);font-style:italic">% end of field</span></div><pre style="margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:0px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;border-style:initial;border-color:initial;font-size:12px;font-family:Consolas,'Liberation Mono',Courier,monospace;font-variant:normal;letter-spacing:normal;line-height:16px;text-align:-webkit-auto;text-indent:0px;text-transform:none;word-spacing:0px">
<div style="font-weight:normal;color:rgb(51,51,51);font-style:normal;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:10px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;border-style:initial;border-color:initial">
   <span style="margin:0px;padding:0px;border:0px;font-weight:bold"><<</span><span style="margin:0px;padding:0px;border:0px">_:</span><span style="margin:0px;padding:0px;border:0px;color:rgb(0,128,128)">Pos</span><span style="margin:0px;padding:0px;border:0px;font-weight:bold">/</span><span style="margin:0px;padding:0px;border:0px">binary</span><span style="margin:0px;padding:0px;border:0px">,</span> <span style="margin:0px;padding:0px;border:0px;color:rgb(0,128,128)">Tkn</span><span style="margin:0px;padding:0px;border:0px">:</span><span style="margin:0px;padding:0px;border:0px;color:rgb(0,128,128)">Len</span><span style="margin:0px;padding:0px;border:0px;font-weight:bold">/</span><span style="margin:0px;padding:0px;border:0px">binary</span><span style="margin:0px;padding:0px;border:0px">,</span> <span style="margin:0px;padding:0px;border:0px;font-weight:bold">?</span><span style="margin:0px;padding:0px;border:0px;color:rgb(0,128,128)">FIELD_BY</span><span style="margin:0px;padding:0px;border:0px">,</span>  <span style="margin:0px;padding:0px;border:0px">_</span><span style="margin:0px;padding:0px;border:0px;font-weight:bold">/</span><span style="margin:0px;padding:0px;border:0px">binary</span><span style="margin:0px;padding:0px;border:0px;font-weight:bold">>></span> <span style="margin:0px;padding:0px;border:0px;font-weight:bold">-></span></div>
<div style="font-weight:normal;color:rgb(51,51,51);font-style:normal;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:10px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;border-style:initial;border-color:initial">
         <span style="margin:0px;padding:0px;border:0px">parse</span><span style="margin:0px;padding:0px;border:0px">(</span><span style="margin:0px;padding:0px;border:0px;color:rgb(0,128,128)">In</span><span style="margin:0px;padding:0px;border:0px">,</span> <span style="margin:0px;padding:0px;border:0px;color:rgb(0,128,128)">Pos</span> <span style="margin:0px;padding:0px;border:0px;font-weight:bold">+</span> <span style="margin:0px;padding:0px;border:0px;color:rgb(0,128,128)">Len</span> <span style="margin:0px;padding:0px;border:0px;font-weight:bold">+</span> <span style="margin:0px;padding:0px;border:0px;color:rgb(0,153,153)">1</span><span style="margin:0px;padding:0px;border:0px">,</span> <span style="margin:0px;padding:0px;border:0px;color:rgb(0,153,153)">0</span><span style="margin:0px;padding:0px;border:0px">,</span> <span style="margin:0px;padding:0px;border:0px">[</span><span style="margin:0px;padding:0px;border:0px;color:rgb(0,128,128)">Tkn</span> <span style="margin:0px;padding:0px;border:0px">|</span> <span style="margin:0px;padding:0px;border:0px;color:rgb(0,128,128)">Line</span><span style="margin:0px;padding:0px;border:0px">],</span> <span style="margin:0px;padding:0px;border:0px;color:rgb(0,128,128)">Fun</span><span style="margin:0px;padding:0px;border:0px">,</span> <span style="margin:0px;padding:0px;border:0px;color:rgb(0,128,128)">Acc0</span><span style="margin:0px;padding:0px;border:0px">);</span></div>
<div style="font-weight:normal;color:rgb(51,51,51);font-style:normal;margin-top:0px;margin-right:0px;margin-bottom:0px;margin-left:0px;padding-top:0px;padding-right:0px;padding-bottom:0px;padding-left:10px;border-top-width:0px;border-right-width:0px;border-bottom-width:0px;border-left-width:0px;border-style:initial;border-color:initial">
<span style="margin:0px;padding:0px;border:0px">   ...</span></div></pre><div style="font-weight:normal"><pre style="margin:0px;padding:0px;border:0px;font-size:12px;font-family:Consolas,'Liberation Mono',Courier,monospace;color:rgb(51,51,51);font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:16px;text-align:-webkit-auto;text-indent:0px;text-transform:none;word-spacing:0px">
<div style="margin:0px;padding:0px 0px 0px 10px;border:0px"><span style="margin:0px;padding:0px;border:0px">   _</span> <span style="margin:0px;padding:0px;border:0px;font-weight:bold">-></span></div><div style="margin:0px;padding:0px 0px 0px 10px;border:0px">
      <span style="margin:0px;padding:0px;border:0px;color:rgb(153,153,136);font-style:italic">% no match increase token</span></div><div style="margin:0px;padding:0px 0px 0px 10px;border:0px">      <span style="margin:0px;padding:0px;border:0px">parse</span><span style="margin:0px;padding:0px;border:0px">(</span><span style="margin:0px;padding:0px;border:0px;color:rgb(0,128,128)">In</span><span style="margin:0px;padding:0px;border:0px">,</span> <span style="margin:0px;padding:0px;border:0px;color:rgb(0,128,128)">Pos</span><span style="margin:0px;padding:0px;border:0px">,</span> <span style="margin:0px;padding:0px;border:0px;color:rgb(0,128,128)">Len</span> <span style="margin:0px;padding:0px;border:0px;font-weight:bold">+</span> <span style="margin:0px;padding:0px;border:0px;color:rgb(0,153,153)">1</span><span style="margin:0px;padding:0px;border:0px">,</span> <span style="margin:0px;padding:0px;border:0px;color:rgb(0,128,128)">Line</span><span style="margin:0px;padding:0px;border:0px">,</span> <span style="margin:0px;padding:0px;border:0px;color:rgb(0,128,128)">Fun</span><span style="margin:0px;padding:0px;border:0px">,</span> <span style="margin:0px;padding:0px;border:0px;color:rgb(0,128,128)">Acc0</span><span style="margin:0px;padding:0px;border:0px">)</span></div>
<div style="margin:0px;padding:0px 0px 0px 10px;border:0px"><span style="margin:0px;padding:0px;border:0px;font-weight:bold">end</span><span style="margin:0px;padding:0px;border:0px">;</span></div><div><br></div></pre></div>
</pre></div><div>- Dmitry</div><div><div class="h5"><br><div><div>On Oct 23, 2012, at 6:11 PM, Erik Pearson wrote:</div><br><blockquote type="cite">I used a simple thing like:<div><br></div><div><div><div>test_iter(Mod, Fun, Args, Iters) -></div>
<div>    test_iter(Mod, Fun, Args, now(), Iters, Iters).</div><div><br></div><div>test_iter(_Mod, _Fun, _Args, Start, Iters, 0) -></div>
<div>    Iters/(timer:now_diff(now(), Start)/1000000);</div><div><br></div><div>test_iter(Mod, Fun, Args, Start, Iters, CountDown) -></div><div>    erlang:apply(Mod, Fun, Args),</div><div>    test_iter(Mod, Fun, Args, Start, Iters, CountDown-1).</div>

</div><div><br></div><div>And was just looking at total iterations per sec. I would just repeat this several times until I found a relatively stable reading. Sure, there was variation, but I'm looking to simulate the pattern I use in this library, which is iterating through and copying many small bits of text (json keys and values.)</div>

<div><br></div><div>Since there was such a large difference in overall performance (string being more than twice as fast), I didn't feel the need to be more precise before posing the question.</div><div><br></div><div>

E.g.<br><br></div><div><div>20> json:test_iter(json, test_bin_copy, [<<"hi, my name is erik">>], 1000).</div><div>232018.5614849188</div><div>21> json:test_iter(json, test_bin_copy, [<<"hi, my name is erik">>], 1000).</div>

<div>224870.69934787496</div><div>22> json:test_iter(json, test_bin_copy, [<<"hi, my name is erik">>], 1000).</div><div>226193.16896629723</div><div>23> </div><div>23> json:test_iter(json, test_string_copy, ["hi, my name is erik"], 100000).</div>

<div>650732.3993154295</div><div>24> json:test_iter(json, test_string_copy, ["hi, my name is erik"], 100000).</div><div>608076.4716970806</div><div>25> json:test_iter(json, test_string_copy, ["hi, my name is erik"], 100000).</div>

<div>567359.7912115968</div></div><div><br></div><div>Many of the follow up observations and questions have been stimulating, so I'm now interested as well in a more detailed analysis.</div><div><br></div><div>However, in the end what I'm looking at is the differences in performance between list and binary string processing under what I believe is idiomatic Erlang for such problems.</div>

<div><br></div><div>Thanks,</div><div><br></div><div>Erik.</div><br><div class="gmail_quote">On Tue, Oct 23, 2012 at 1:07 AM, Martynas Pumputis <span dir="ltr"><<a href="mailto:martynasp@gmail.com" target="_blank">martynasp@gmail.com</a>></span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi,<br>
<br>
Could you show the exact steps of your simulation? Binary version should be faster, because some extra memory allocation is avoided per each iteration and large binaries aren't being copied.<br>
<br>
Take a look at: <a href="http://www.erlang.org/doc/efficiency_guide/binaryhandling.html" target="_blank">http://www.erlang.org/doc/<u></u>efficiency_guide/<u></u>binaryhandling.html</a><br>
<br>
Martynas<div><div><br>
<br>
On 10/23/2012 12:18 AM, Erik Pearson wrote:<br>
</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div>
Hi,<br>
I've read from advice given many years ago that processing binaries byte<br>
by byte (e.g. a recursive parser), performance is better using a list to<br>
accumulate the bytes, rather than using binary concatenation. So<br>
[B|Accum] rather than <<Accum/binary, B>>. There seems to be<br>
a consensus  however, on the efficiency of Binaries compared to List<br>
strings.<br>
<br>
My own quick test, which was just to copy a list or binary element by<br>
element, showed much better performance for the list version. The test<br>
was basically to pass an arbitrary string or binary, and copy it some<br>
number of thousands of times, and output the complete copies per second.<br>
<br>
I tried list based accumulation for a binary, using binary destructuring<br>
in the function head, and that sped things up, but it was still slower<br>
than the equivalent list string copy.<br>
<br>
Are there any tips for binaries? Of is this not a good use case for<br>
binaries.<br>
<br>
test_bin_copy(Bin) -><br>
     test_bin_copy(Bin, <<>>).<br>
test_bin_copy(<<>>, Accum) -><br>
     Accum;<br>
test_bin_copy(<<Char, Rest/binary>>, Accum) -><br>
     test_bin_copy(Rest, <<Accum/binary, Char>>).<br>
<br>
test_string_copy(Bin) -><br>
     test_string_copy(Bin, []).<br>
test_string_copy([], Accum) -><br>
     lists:reverse(Accum);<br>
test_string_copy([Char|Rest], Accum) -><br>
     test_string_copy(Rest, [Char|Accum]).<br>
<br>
For what its worth this is part of a json module. The current practice<br>
in json libraries seems to  favor binaries, so I assumed there were<br>
inherent performance advantages. I can imagine, e.g., that an empty<br>
binary would be stored as a modest sized buffer that would be appended<br>
in place until there was a need to expand it or copy (e.g. if an older<br>
version of it was being appended), and that operations on it would be<br>
fast compared to arbitrary consing (which is however highly optimized.)<br>
<br>
I think some of the favoritism for binaries in json libs is because it<br>
makes it easy to differentiate json strings (as erlang binaries) from<br>
json arrays (as erlang lists), but my implementation is using tagged<br>
tuples to contain each json value, so this is not a concern. Of course<br>
there are the memory concerns, but in my tests any memory concerns with<br>
list char size vs binary bytes is erased by the performance gains.<br>
<br>
I'm sure I've put my foot in my mouth at least once, but, anyway, advice<br>
appreciated.<br>
<br>
Thanks,<br>
Erik.<br>
<br>
<br></div></div>
______________________________<u></u>_________________<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" target="_blank">http://erlang.org/mailman/<u></u>listinfo/erlang-questions</a><br>
<br>
</blockquote>
<br>
</blockquote></div><br></div>
_______________________________________________<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" target="_blank">http://erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div><br></div></div></div></blockquote></div><br></div></div>