It's not about technology for its own sake. It's about being able to implement your own ideas.
Newest Entry
Complete Archives
Atom Feed
I'm a recovering programmer who has been designing video games since the 1980s, doing things that seem baroquely hardcore in retrospect, like writing Super Nintendo games entirely in assembly language. These days I use whatever tools are the most fun and give me the biggest advantage. Since 1999 one of those tools has been Erlang.
james.hague @ google mail
Where are the comments?
Finally: Data Structure Constants in Erlang
Here's a simple Erlang function to enclose some text in a styled paragraph, returning a deep list:para(Text) ->
["<p class=\"normal\">", Text, "</p>"].
Prior to the new R12B release of Erlang, this little function had some less than ideal behavior:
- Every time para was called, the two constant lists (a.k.a. strings) were created, which is to say that there weren't true data structure constants in Erlang.
- Each string was built-up, letter by letter, via a series of BEAM virtual machine instructions. The larger the constant, the more code there was to generate it, and the more time it took to generate.
- Because a new version of each string was created for each para call, there was absolutely no sharing of data. If para was called 200 times, 400 strings were created (200 of each). Remember, too, that each element of a list/string in 32-bit Erlang is 8 bytes. Doing the math on this example is mildly unsettling: 22 characters * 8 bytes per character * 200 instances = 35,200 bytes of "constant" string data.
- As a result of more data being created, garbage collection occurred more frequently and took longer (because there was more live data).
And now, finally, as of the December 2007 R12B release, true data structure constants are supported in BEAM.