Erlang bytecodes and/or VM description?

Serge Aleynikov <>
Thu Jun 1 13:26:48 CEST 2006


Thanks.  What a difference!

This works as well if single quoted:

erlc +\'S\' module.erl

Serge

Matthias Lang wrote:
> Try -S
> 
> Matthias
> 
> Serge Aleynikov writes:
>  > Thomas,
>  > 
>  > Which compiler version supports "+S" switch?  On R10B-11 I get:
>  > 
>  > $ erlc +S test.erl
>  > bad term: S
>  > Runtime error: {{nocatch,error},
>  >                  [{erl_compile,make_term,1},
>  >                   {erl_compile,compile1,3},
>  >                   {erl_compile,compiler_runner,1}]}
>  > 
>  > =ERROR REPORT==== 1-Jun-2006::06:45:19 ===
>  > Error in process <0.20.0> with exit value: 
>  > {{nocatch,error},[{erl_compile,make_term,1},{erl_compile,compile1,3},{erl_compile,compiler_runner,1}]}
>  > 
>  > Serge
>  > 
>  > Thomas Lindgren wrote:
>  > > 
>  > > --- Andrew Lentvorski <> wrote:
>  > > 
>  > > 
>  > >>Is there a concise reference of the Erlang
>  > >>bytescodes and/or VM 
>  > >>description somewhere?
>  > >>
>  > >>It seems like I have to go back to about R7B to look
>  > >>at an emulator that 
>  > >>is clean (as opposed to having lots of HiPE stuff
>  > >>scattered inside).
>  > > 
>  > > 
>  > > It depends on what you want to do. There used to be a
>  > > BEAM bytecode reference, but I think the format and
>  > > instructions change mildly every now and then, both
>  > > with new releases and with different targets. 
>  > > 
>  > > For example, I believe some instruction sequences can
>  > > be merged into superinstructions by the loader, and/or
>  > > otherwise specialized or optimized. This can lead to
>  > > hundreds of nearly identical instruction variants, so
>  > > some patience and experience is needed to decipher
>  > > them.
>  > > 
>  > > If you just want to learn the high level BEAM
>  > > instruction set, then that is more straightforward. To
>  > > see what code compiles to, use "erlc +S mod.erl",
>  > > which emits a file "mod.S" with symbolic BEAM code in
>  > > it.
>  > > 
>  > > Historically, the BEAM instruction set has its root in
>  > > the elegant and subtle Warren Abstract Machine (for
>  > > Prolog). Bogdan Hausman, the original designer, has
>  > > his roots in the Prolog world, and started from a
>  > > simplification of the WAM instruction set. Here is one
>  > > of the original documents:
>  > > 
>  > > http://www.erlang.se/publications/Erlang_to_C.pdf
>  > > 
>  > > But basically it's not so hard: the VM is register
>  > > based, and there are two kinds of temporaries,
>  > > "registers" (x-regs) and "stack slots" (y-regs). There
>  > > are instructions to dispatch on register value or
>  > > type, to speed up clause selection. There are function
>  > > calls, including last calls (jumps with arguments).
>  > > There are instructions to take apart and put together
>  > > terms. And maybe a few more that I've forgotten about.
>  > > 
>  > > If you want to learn about the ancestral WAM, Hassan
>  > > Ait-Kaci wrote a good tutorial (MIT Press, 1991),
>  > > which can be found here:
>  > > 
>  > > http://archive.bibalex.org/web/*/http://www.isg.sfu.ca/~hak/documents/wambook.pdf
>  > > 
>  > > Best,
>  > > Thomas
>  > > 
>  > > 
>  > > __________________________________________________
>  > > Do You Yahoo!?
>  > > Tired of spam?  Yahoo! Mail has the best spam protection around 
>  > > http://mail.yahoo.com 
>  > > 
>  > 
> 




More information about the erlang-questions mailing list