Although Parrot is currently still under development,
Parrot has been usable for a long time.
The primary way to use Parrot is to write Parrot Intermediate Representation (PIR),
described in PDD19.
PIR is a high-level assembly language.
See the examples directory.

While the languages that are shipped with our pre-release versions of parrot are in varying states of development,
many of them are quite functional.
See https://trac.parrot.org/parrot/wiki/Languages for information about the various languages that are targeting parrot.

Stack-based virtual machines and interpreters (JVM,
.NET,
Perl5,
etc) are both common and successful.
However,
register-based implementations give us a number of benefits: Less code needed to manipulate the stack frequently,
access to decades of optimization for register-based hardware,
and a minimization of stack overflow security problems.
For many programmers,
our register architecture just feels more normal than doing everything on a stack too.

Parrot has to work on most of Perl 5's platforms,
as well as a few of its own.
Perl 5 runs on eighty platforms; Parrot must run on Unix,
Windows,
Mac OS (X and Classic),
VMS,
Crays,
Windows CE,
and Palm OS,
just to name a few.
Among its processor architectures will be x86,
SPARC,
Alpha,
IA-64,
ARM,
and 68x00 (Palms and old Macs).
If something doesn't work on all of these,
we can't use it in core Parrot.