Programming
in the 21st
Century
in the 21st
Century
I've been designing and programming video games since the 1980s, doing things that seem baroquely hardcore in retrospect, like writing Super Nintendo games entirely in assembly language. I also have an interest in very high-level languages and have been programming in Erlang since 1999. Go figure.
james.hague @ google mail
- Programming as if Performance Mattered (2004)
- Halcyon Days: Interviews with Classic Computer and Video Game Programmers (1997, 2002)
- Newest Entry -
- Complete Archives -
- Atom Feed -
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.
Previously
Two Stories of SimplicityDeriving Forth
Trapped! Inside a Recursive Data Structure
Sending Modern Languages Back to 1980s Game Programmers
Erlang as a Target for Imperative DSLs