Search code examples
architectureelixiracronymbeamlightweight-processes

What does BEAM stand for in iex for the Elixir programming language?


What do the letters B. E. A. and M. stand for? I recall seeing an explanation of the acronym "BEAM", but I have not managed to find it again.

It comes up in error codes:

➜  gentoo  iex
Erlang/OTP 17 [erts-6.4.1] [source] [64-bit] [smp:8:8] [async-threads:10] [kernel-poll:false]

Interactive Elixir (1.0.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> import Math

08:05:02.839 [error] Loading of /var/opt/proj/elx/ubuntu/Elixir.Math.beam failed: :badfile

** (CompileError) iex:1: module Math is not loaded and could not be found

08:05:02.846 [error] beam/beam_load.c(1104): Error loading module 'Elixir.Math':
  non-ascii garbage '78705400' instead of chunk type id


    (elixir) src/elixir_exp.erl:123: :elixir_exp.expand/2
iex(1)> 

So, it looks like there's some sort of problem with a .beam file, probably due to my use of vi. (Note to notive Elixir programmers: Do not edit .beam files, it is painful.)

This question explains what the BEAM virtual machine is, but not what the letters stand for. And it seems difficult to find out much about the etymology quick or to the point on Erlang central. Supposedly BEAM is the secret sauce of Erlang and Elixir both.


Solution

  • It stands for "Bogdan/Björn's Erlang Abstract Machine" - it is just the name of the VM, much like JVM (Java Virtual Machine).

    Almost everyone uses "the new BEAM", where BEAM stands for Bogdan/Björn's Erlang Abstract Machine. This is the virtual machine supported in the commercial release.

    http://www.erlang.org/faq/implementations.html

    The name probably finds its routes from the Warren Abstract Machine - an abstract instruction set for Prolog which you can read about at: http://en.wikipedia.org/wiki/Warren_Abstract_Machine

    The WAM influenced JAM (Joe Abstract Machine - named after Joe Armstrong) which was the precursor to BEAM.

    You can read more in the "the development of Erlang" article on the Erlang website.