Parrot is a register-based virtual machine being developed using the C programming language and intended to run dynamic languages efficiently. It uses just-in-time compilation for speed to reduce the interpretation overhead. It is currently possible to compile Parrot assembly language and PIR (an intermediate language) to Parrot bytecode and execute it.
Parrot was started by the Perl community, and is developed with help from the open source and free software communities. As a result, it is focused on license compatibility (Artistic License 2.0), platform compatibility across a broad array of systems, processor architectures compatibility across most modern processors, speed of execution, small size (around 700k depending on platform), and being flexible enough to handle the varying demands of Perl, and most, if not all, other modern dynamic languages. It is also focusing on improving introspection, debugger capabilities, and compile-time semantic modulation.
Several languages are being developed along with it which target the Parrot virtual machine.
The Parrot Foundation has been recently created to hold the copyright and trademarks of the Parrot project, to help drive development of language implementations and the core codebase, to provide a base for growing the Parrot community, and to reach out to other language communities. As with the Parrot design documents, the bylaws and articles of incorporation were drafted on the mailing list and in the wiki.
Virtual machines such as the Java virtual machine and the current Perl 5 virtual machine are also stack based. Parrot developers see it as an advantage of the Parrot machine that it has registers, and therefore more closely resembles an actual hardware design, allowing the vast literature on compiler optimization to be used generating code for the Parrot virtual machine so that it will run bytecode at speeds closer to machine code.
Parrot provides a suite of compiler-writing tools which includes the Parser Grammar Engine (PGE), a hybrid parser-generator that can express a recursive descent parser as well as a operator-precedence parser, allowing free transition between the two in a single grammar. The PGE feeds into the Tree Grammar Engine (TGE) which further transforms the parse-tree generated by PGE for optimization and ultimately for code generation.
Parrot provides an arbitrary number of registers; this number is fixed at compile time per subroutine.
set I1, 4
inc I1 # I1 is now 5
add I1, 2 # I1 is now 7
set N1, 42.0
dec N1 # N1 is now 41.0
sub N1, 2.0 # N1 is now 39.0
print ', '
.sub 'main' :main
$I1 = 4
inc $I1 # $I1 is now 5
$I1 += 2 # $I1 is now 7
$N1 = 42.0
dec $N1 # $N1 is now 41.0
$N1 -= 2.0 # $N1 now 39.0
print ', '
Until late 2005, Dan Sugalski was the lead designer and chief architect of Parrot. Chip Salzenberg, a longtime Perl, Linux kernel, and C++ hacker, took over until mid-2006, when he became the lead developer. Allison Randal, the lead developer of Punie and chief architect of Parrot's compiler tools, is now the chief architect.
Development discussions take place primarily on the parrot-porters mailing list, hosted by perl.org. In addition, there are weekly moderated meetings for Parrot and language developers hosted in #parrotsketch on irc.perl.org. The #parrot channel on the same network is often full of Parrot hackers.
Design discussions exist in the form of Parrot Design Documents, or PDDs, in the Parrot repository The chief architect or another designated designer produces these documents to explain the philosophy of a feature as well as its interface and design notes. Parrot hackers turn these documents into executable tests, and then existing features.
The Parrot team releases a new stable version of the software on the third Tuesday of every month. Core committers take turns producing releases in a revolving schedule, where no single committer is responsible for multiple releases in a row. This practice has improved the project's velocity and stability.