OT? -NO! Essay: Programming as if Performance Mattered

Peter-Henry Mander erlang@REDACTED
Fri May 7 10:17:45 CEST 2004

Hehe :-) how does it feel to be flamebait James?

After reading the article, I had a poke around for myself, and found
this in lists.erl (R9C) which made me curious:

%% reverse(L) reverse all elements in the list L. Is now a BIF!

reverse([] = L) ->
reverse([_] = L) ->
reverse([A, B]) ->
    [B, A];
reverse([A, B | L]) ->
    lists:reverse(L, [B, A]).

Is it a BIF, or is it not? What is the purpose of these four
clauses? Surely the BIF should handle these cases, or is this a tweak
for optimisation? How does Erlang know to call this definition of
lists:reverse/1 in lists.erl instead of the BIF definition?

Another thing in http://www.dadgum.com/james/shootout.html mentioned the
cost of inter-module calls, where replacing lists:append/2 with ++.
Surely this cost must be vanishingly small, specially if the module is
loaded and ready to go?

And a third: "Changing element 50 of a 1,000,000 element tuple results
in a new 1,000,000 element tuple." I've written some code to seek and
replace tagged tuples in a tree-like Erlang term by following a path
defined as a list of tag atoms which lead to the tagged tuple to

Is there a way I can represent a potentially large term in a way that
avoids copying the whole term for each replacement e.g. using ets to
represent the tree allowing in-place changes, followed by recreating the
whole modified term when modifications are finished?

Or maybe I should write an algorithm that makes multiple modifications
in a single sweep...

It's Friday. Maybe I need to relax and try not to worry! :-)


On Fri, 07 May 2004 10:20:00 +1200
Kurt at DBC <kurtw@REDACTED> wrote:

> Roger Larsson wrote:
> > http://www.dadgum.com/james/performance.html
> > http://developers.slashdot.org/developers/04/05/06/032213.shtml?tid=126&tid=156
> > 
> > /RogerL
> > 
> D'oh beaten!
> And thanks James, a good read.
> How does it feel to be /.famous ? (:
> Cheers, Kurt.

"The Tao of Programming
 flows far away 
 and returns 
 on the wind of morning."

More information about the erlang-questions mailing list