# Pugs

Pugs ist ein alternativer Interpreter und Compiler für Perl 6, der in Haskell (GHC) geschrieben wurde. Das Softwareprojekt wurde am 1. Februar 2005 von Audrey Tang begonnen, um die Entstehung von Perl 6 zu unterstützen. Es ist eine freie Software, die wahlweise unter der GPL oder der Artistic License verwendet werden darf.

## Zweck

Zum einen dient Pugs als Testimplementierung für den Perl 6-Parser. Wesentliche Fehler, die in Pugs gemacht wurden, können dann später vermieden werden, aber es wird auch Syntax-Schwächen im Entwurf der Sprache Perl 6 zu einem Zeitpunkt aufzeigen, an dem Korrekturen noch relativ einfach möglich sind.
Zum anderen wird der eigentliche (in Perl 6 geschriebene) Perl 6-Parser ein Programm sein, das von Pugs zu Parrot-Bytecode kompiliert wird. Bereits heute ist es möglich, mit Pugs Parrot-Code zu erzeugen, oder von Parrot erzeugten Parrot-Code mit Pugs zu kompilieren. Ab Version 6.2.8 kann Pugs auch Perl 6-Code zu Perl 5 kompilieren. Das half, Engpässe zu umgehen, als sowohl die Sprache als auch Parrot deutliche Lücken hatten.
Mit der Version 6.2.8 haben sich die Ziele des Projektes leicht geändert. Pugs soll ein vollständiger Perl 6-Compiler werden, der Perl 6 nach Parrot (PIR), Haskell oder Perl 5 und weiteren Sprachen, z. B. JavaScript, übersetzen kann. Dabei werden so viel Bestandteile von Pugs wie möglich von Haskell zu später weiterverwendbaren Perl 6-Modulen umgeschrieben.

## Name

Pugs bedeutet auf Englisch Möpse und ein Mops dient auch als Logo des Projektes. Offiziell ist Pugs ein Akronym für Perl6 User Golfing System was eine Anspielung auf Perl-Golf ist.

## Versionen

Die Versionierung von Pugs beginnt mit 6.0, und es wird mit jedem neuen Meilenstein eine Ziffer hinzukommen, so dass die Versionsnummer das Doppelte von Pi nachbildet. Dies geht auf einen Scherz von Larry Wall zurück, der auf die Frage nach einem Perl 7 erklärte, warum Perl in seiner Version 2*Pi nicht überschreiten sollte. Aktuell ist Version 6.2.13.20130611 (11. Juni 2013).

## Status

Pugs kann man in einige Subprojekte gliedern.
* Pugs' Parser ist in der Lage „Standard-Perl“ zu parsen. Auch werden benutzerdefinierte Operatoren unterstützt, aber eine komplette Neugestaltung der Grammatik ist noch nicht möglich.
* Pugs' Evaluator unterstützt die meisten Builtins und auch viele objektorientierte Routinen. Sein Hauptproblem ist zurzeit seine vergleichbar niedrige Geschwindigkeit.
* Pugs' Compiler zu PIL steht und ist stabil.
* Für die weitere Arbeit an Pugs' Compiler zu PIR (Parrot) wartet man auf einige Features von Parrot.
* Pugs' Compiler zu JavaScript ist noch ein sehr junges Subprojekt; viele Builtins werden bereits unterstützt, allerdings ist die Geschwindigkeit des resultierenden JavaScript-Codes sehr gering.

## Bedeutung

Auch wenn seit Mitte 2007 nur noch die nötigsten Wartungen geschehen, war Pugs für das Erreichen des heutigen Standes von Perl 6 wesentlich. Während einer Phase, in der es trotz mehrjähriger Arbeit an Parrot und Rakudo kaum sichtbare Ergebnisse gab, schaffte es Audrey Tang in kurzer Zeit, die Diskussionen um syntaktische Einzelheiten mit praktischen Erfahrungen zu konfrontieren, was die Arbeit fruchtbarer machte und die Moral hob. In der Folge entstand die heute noch bestehende und für alle Implementationen gültige Testsuite sowie erste Module und Beispielprogramme. Durch einen frischen und einladenden Kommunikationsstil entstand aus Pugs eine große Anzahl von Teilprojekten, welche die Machbarkeit etlicher Gedankenexperimente überprüften. Das heute bedeutendste ist sicher Moose, das verbreitetste und mächtigste OOP-Rahmenwerk für Perl 5. Hauptentwickler Stefan Little sieht darin die logische Fortführung seiner Erfahrungen mit Pugs.