I think it all boils down to what you are going to *do* with these strings. If you are just going to store them somewhere for later then converting them to a binary definitely save space. If, however, you are going to *work* with them then having them as lists is definitely much better. It is so much easier than having fixed sequence of octets. Also most, if not all declarative languages functional and logic, have very optimised list handling because lists are so practical to work with.<br>
<br>As mentioned in the next mail you can also keep them as iolists while processing to make it efficient to send the strinigs into the big wide world. This is sort best of both worlds.<br><br>Also having them as lists means you get UTF-16 and 32 for free, and most of your libraries still work straight out of the bag. This, UTF-16/32, I think will become much more important in the future when the number of internet users who don't have a latin charset as their base increases. Think of the influence of a few hundred million indians and chinese who want 32 bit charsets. :-)<br>
<br>Robert<br><br><div><span class="gmail_quote">On 12/02/2008, <b class="gmail_sendername">Masklinn</b> <<a href="mailto:masklinn@masklinn.net">masklinn@masklinn.net</a>> wrote:</span><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">
<br>On 12 Feb 2008, at 17:19 , tsuraan wrote:<br><br>> Why does erlang internally represent strings as lists?  In every<br>> language<br>> I've used other than Java, a string is a sequence of octets, just like<br>
> Erlang's binary type.  I know that you can represent a string<br>> efficiently by<br>> using <<"string">> rather than just "string", but why doesn't erlang<br>> do this<br>
> by default?  Is it just because pre-12B binary handling wasn't as<br>> efficient<br>> as list handling, or is Erlang intended to support UTF-32?<br>><br><br>A lot of functional languages represent strings as lists rather than<br>
arrays (Haskell also does that, and only recently got bytestrings)<br>because lists are their basic collection datatype (due to being a<br>recursive structure and everything), and this allows the use of all<br>the list-related functions on strings.<br>
<br>Representing strings as arrays of bytes or character (which is pretty<br>much also what Java does, by the way) is an attribute of imperative<br>languages whose basic collection datatype is the array.<br><br>My guess is that's the reason why: a lot of string operations were<br>
already implemented on lists (reduces code duplication) and string<br>efficiency wasn't really of importance in the erlang world until<br>fairly recently, so strings being represented as lists of integers<br>wasn't much of a problem.<br>
_______________________________________________<br>erlang-questions mailing list<br><a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br><a href="http://www.erlang.org/mailman/listinfo/erlang-questions">http://www.erlang.org/mailman/listinfo/erlang-questions</a><br>
</blockquote></div><br>