[erlang-questions] How small could an Erlang emulator be?

ok ok@REDACTED
Wed Mar 14 00:38:10 CET 2007


When someone asks "how small could AN Erlang emulator be",
that means something quite different from "how small could THE Erlang  
emulator be".

On 14 Mar 2007, at 11:36 am, Robert Virding wrote:
> As Kenneth mentioned if you want a really small emulator it would be
> best to build a completely new one with that as the first priority.

Yes, exactly.  That's why the question used the indefinite article (AN
Erlang emulator), not the definite one (THE Erlang emulator that we  
have now).
[Yes, I remember JAM, and I think someone did another as well, plus  
of course
there's EtoS and GERL.  is anything but BEAM seeing active use/ 
development?]

> I wonder if the most compact wouldn't be to have a small byte code
> emulator based on a stack machine. No registers and stuff just
> operations on the top stack. Very regular and minimal. You would
> probably have to have a serious think about the memory model as  
> well to
> keep the memory management code small.

There is previous work on Scheme implementations for tiny machines.   
It did
seem possible that someone might have actually tried to make a small  
Erlang VM
at some point.  As for GC, it seemed to me that the simplest thing  
might be to
have a micro-engine dedicated to GC, and a thread that wants a GC  
would drop
out of the active thread pool into the GC thread pool.  Indeed, in a  
larger
system, one might have multiple micro-engines running GCs.  The  
possibility of
Erlang processes without shared heaps makes this architecturally  
pleasant.

> Trimming BIFs and library functions implemented in C would save some
> space removing network stuff and the general port mechanism. Maybe  
> even
> ETS but then would have difficulty running OTP.

If the question were "given a goal of running Erlang/OTP, how could  
these
machines be made to supply that need", running OTP would be an  
interesting
question.  Since my question is "given a goal of running concurrent
communication stuff on these machines, could Erlang be made to supply  
that
need", OTP is not interesting at all.  It would be much more useful  
to have
a library that could use the on-chip hashing support than ETS.

Think of an Erlang/IXP "system" as coming in pairs of nodes.  Each  
IXP chip
would have an Erlang/OTP node running a normal distribution, plus an IXP
node running on the micro-engines.  Processes in the IXP node would  
be able
to talk to each other, to the wires, and to the OTP node on the same  
chip.
If an IXP process wanted ETS services it would have a helper process  
running
on the OTP node acting on its behalf.  There's no need, therefore, to  
put
*everything* on the micro-engines.  The question is whether one can put
*enough* to make a pleasant language for doing packet filtering and  
routing
and whatever else people do with these chips.




More information about the erlang-questions mailing list