<div>Maybe LazyByteStrings and Erlang binaries approach the performance of randomly aligned heap blocks in C.</div><div> </div><div>But, if I do data streaming processing (say, transforming vertices for 3D graphcs, transcoding media in multimedia, detecting intersections in rigid body dynamics, etc) then the specific alignment and stride of my data matters. Neither Erlang nor Haskell allows me to specify that "the first byte of this byte string is always aligned on a multiple of 16 bytes" (for architecture-specific SIMD exploitation) or "the first byte of this byte string is always aligned on a multiple of 64 bytes" (for architecture-specific cache line exploitation) or "no word within this binary will share a L3 cache line with any other word allocated in the same manner" (for architecture-specific cache contention reduction for spinlocks).</div>
<div> </div><div>C allows you to control these things. That's why it's a systems programming language, and Erlang isn't (although it's a language for programming systems :-)</div><div> </div><div>Sincerely,</div>
<div> </div><div>jw</div><div><br clear="all"><br>--<br>Americans might object: there is no way we would sacrifice our living standards for the benefit of people in the rest of the world. Nevertheless, whether we get there willingly or not, we shall soon have lower consumption rates, because our present rates are unsustainable. <br>
<br>
<br><br></div><div class="gmail_quote">On Thu, Sep 22, 2011 at 1:46 PM, Jesper Louis Andersen <span dir="ltr"><<a href="mailto:jesper.louis.andersen@gmail.com">jesper.louis.andersen@gmail.com</a>></span> wrote:<br>
<blockquote style="margin: 0px 0px 0px 0.8ex; padding-left: 1ex; border-left-color: rgb(204, 204, 204); border-left-width: 1px; border-left-style: solid;" class="gmail_quote"><div class="im">On Thu, Sep 22, 2011 at 17:49, max tan <<a href="mailto:maxtqm@gmail.com">maxtqm@gmail.com</a>> wrote:<br>

<br>
><br>
> I just found Haskell has "Data.ByteString.Lazy", according to a paper titled<br>
> "Rewriting Haskell Strings":<br>
><br>
>   A library for ByteStrings is implemented,   providing a purely functional<br>
> interface, which approaches the speed of low-level mutable arrays in C.<br>
</div>> _______________________________________________<br>
<br>
This is true. In many ways, a Lazy ByteString in Haskell corresponds<br>
to a list of binaries in Erlang, which is a subset of the iolist()<br>
type in Erlang. If Haskells Lazy Bytestring implementation approaches<br>
the speed of low-level mutable arrays, so does binaries in Erlang.<br>
<br>
My experience is they perform at about the same speed. I don't know<br>
what happened in my brain when I called Haskell a dynamic language<br>
though. It is statically typed, and very much so.<br>
<font color="#888888"><br>
<br>
--<br>
J.<br>
</font></blockquote></div><br>