Abstract machines for programming language implementation