The interpreter is the engine that actually runs the code emitted by the parser, compiler, and optimizer modules. The Parrot execution engine is a virtual CPU done completely in software. We’ve drawn on research in CPU and interpreter design over the past forty years to try and build the best engine to run dynamic languages.
That emphasis on dynamic languages is important. We are not trying to build the fastest C, Forth, Lisp, or Prolog engine. Each class of languages has its own quirks and emphasis, and no single engine will handle all the different types of languages well. Trying to design an engine that works equally well for all languages will get you an engine that executes all of them poorly.
That doesn’t mean that we’ve ignored languages outside our area of primary focus—far from it. We’ve worked hard to make sure that we can accommodate as many languages as possible without compromising the performance of our core language set. We feel that even though we may not run Prolog or Scheme code as fast as a dedicated engine would, the flexibility Parrot provides to mix and match languages more than makes up for that.
Parrot’s core design is that of a register rich CISC CPU, like many of the CISC machines of the past, such as the VAX, Motorola 68000, and IBM System/3x0. Many of Parrot’s basic instructions perform complex operations. It also bears some resemblance to modern RISC CPUs such as the IBM Power series and Intel Alpha, as it does all its operations ...