The execution mechanisms listed above are provided by Erlang abstract machine. Programs which use those mechanisms are completely portable between implementations of Erlang running on different operating systems and processors. Erlang started (ARE92a) as a Prolog metainterpretor which added a notion of concurrency to Prolog. Having started s a set of extensions to functional school of programming. Erlang slowly drifted from the logic to functional language (higher order functions list comprehensions etc) If differs from most modern functional languages by having a dynamic type system (inherited from prolog) and an eager evaluator.