[erlang-questions] Fwd: Is there a good source for documentation on BEAM?

Richard O'Keefe ok@REDACTED
Tue May 8 08:05:12 CEST 2012

On 8/05/2012, at 5:35 PM, Michael Turner wrote:

> "(b) We learn only at the end of those 5 pages that there are
> really TWO different things called BEAM:
>       - the 'high level abstract instructions' generated
>         by the compiler, which is pretty stable, and
>       - the 'internal form' meant for execution, generated
>         by the loader, which 'has changed many times'."
> Then there's the recommendation I read somewhere (I believe by a HiPE
> implementor) that it makes more sense to target Core Erlang. So, in a
> way, there are three levels you could target, two of them plausibly
> called "BEAM".

If you want to compile an extended syntax into something that is
already supported in Core Erlang, no worries.  For example,
implementing list comprehensions with out-of-line code, as
currently done, could be done that way.

If you want to compile list comprehensions into inline code,
I believe it can be done using high-level BEAM, but you can't
do it through Core Erlang.

If you want to compile something like frames, you need to
 - extend HiPE if you want the new feature to go fast *and*
 - extend low level BEAM *and*
 - extend high level BEAM *and*
 - extend Core Erlang *and*
 - extend source Erlang (probably the easiest step) *and*
 - extend the AST form (not too hard) *and*
 - extend the tools that process the AST form *and*
 - last but very much not least, you need to
   extend the documentation.

The more levels you have the harder it gets, unless the design
is very modular.  Here I will say that Quintus never really
got this as organised as they should have.  Adding a new
instruction required editing upwards of a dozen files.

The nearest I've seen to a well-structured emulator was the
Icon one, where the various C files that were used were generated
from an annotated master.

More information about the erlang-questions mailing list