Arrays vs tuples / lists

Bjorn Gustavsson <>
Wed May 19 09:23:43 CEST 2004


erts_debug:df(Module) can be used to disassemble a loaded
module to see what the loader has done to it. (The result will
be written to the file Module.dis.)

The hd/1 and tl/1 BIFs used to be specially optimized in early
versions of Beam, but since they are not used much in real programs,
I removed the optimizations (and optimized other things instead in
better of optimizations).

In my own code, I have sometimes used hd/1 in early drafts, but as
the code evolves, it almost always turn out that I'll need to handle
an empty list or that the data type should not be a list; therefore,
almost all hd calls disappear from my code.

/Bjorn

Tony Rogvall <> writes:

> tisdagen den 18 maj 2004 kl 17.23 skrev Carsten Schultz:
> 
> > Sorry, I must have been half asleep :-)
> >
> > I then modify my statement that I would be worried if
> >     [X|_] = List
> > was less efficient than
> >     X = head(List).
> >
> > Indeed I would hope both to produce exactly the same code.
> >
> They can not generate the SAME code, since
> 
> hd(x)	will crash with badarg
> 
> and
> 
> [X|_] = x	will crash with badmatch
> 
> by running erlc -S you can inspect what kind of code is generated, for
> BEAM the loader
> phase has to be taken into account (where Björn G has added some
> transformations)
> I could however not find any transformations for hd/1 and tl/1 and
> assume we
> have to live with the match version for best speed (if not badarg is
> wanted in the crash case)
> 
> Regards
> 
> /Tony
> 

-- 
Björn Gustavsson, Erlang/OTP, Ericsson AB



More information about the erlang-questions mailing list