Virtuelle Parrot-Maschine - Parrot virtual machine

Parrot virtuelle Maschine
Logo der Parrot Foundation
Endgültige Veröffentlichung
8.1.0 / 16. Februar 2016 ; vor 5 Jahren ( 2016-02-16 )
Repository
Geschrieben in C
Betriebssystem Plattformübergreifend
Nachfolger MoarVM (für Raku)
Typ Virtuelle Maschine
Lizenz Künstlerische Lizenz 2.0
Webseite Papagei .org Bearbeite dies bei Wikidata

Parrot war eine registerbasierte virtuelle Prozessmaschine, die entwickelt wurde, um dynamische Sprachen effizient auszuführen . Es ist möglich, die Parrot-Assemblersprache und die Parrot-Zwischendarstellung (PIR, eine Zwischensprache) in Parrot- Bytecode zu kompilieren und auszuführen. Parrot ist kostenlos und Open - Source - Software.

Parrot wurde von der Perl- Community gegründet und wird mit Hilfe der Open-Source- und Free-Software-Community entwickelt . Als Ergebnis konzentriert es sich auf Lizenzkompatibilität mit Perl ( Artistic License 2.0 ), Plattformkompatibilität über eine breite Palette von Systemen, Prozessorarchitekturkompatibilität über die meisten modernen Prozessoren, Ausführungsgeschwindigkeit, geringe Größe (ca. 700.000 je nach Plattform) und die Flexibilität, die unterschiedlichen Anforderungen von Raku und anderen modernen dynamischen Sprachen zu erfüllen .

Version 1.0, mit einer stabilen Anwendungsprogrammierschnittstelle (API) für die Entwicklung, wurde am 17. März 2009 veröffentlicht. Die letzte Version ist die Version 8.1.0 "Andean Parakeet". Parrot wurde im August 2021 offiziell eingestellt, nachdem es von MoarVM in seiner Hauptverwendung (Raku) abgelöst wurde und nie zu einer Mainstream-VM für eine seiner anderen unterstützten Sprachen wurde.

Geschichte

Der Name Parrot stammt von einem Aprilscherz, der eine hypothetische Sprache namens Parrot ankündigte , die Python und Perl vereinen würde . Der Name wurde später von diesem Projekt übernommen (ursprünglich ein Teil der Raku-Entwicklungsbemühungen), das darauf abzielt, Raku, Python und andere Programmiersprachen zu unterstützen. Mehrere Sprachen werden portiert , um auf der virtuellen Maschine von Parrot ausgeführt zu werden.

Die Parrot Foundation wurde 2014 aufgelöst. Die Foundation wurde 2008 gegründet, um die Urheberrechte und Marken des Parrot-Projekts zu halten, die Entwicklung von Sprachimplementierungen und der Kerncodebasis voranzutreiben, eine Basis für das Wachstum der Parrot-Community zu schaffen und auf andere Sprachgemeinschaften aus.

Sprachen

Das Ziel der virtuellen Parrot-Maschine besteht darin, Clientsprachen zu hosten und die Interoperation zwischen ihnen zu ermöglichen. Um dieses Ziel zu erreichen, bestehen mehrere Hürden, insbesondere die Schwierigkeit, Konzepte, Daten und Datenstrukturen auf hoher Ebene zwischen Sprachen abzubilden .

Statische und dynamische Sprachen

Die unterschiedlichen Eigenschaften von statisch und dynamisch typisierten Sprachen haben das Design von Parrot motiviert. Aktuelle beliebte virtuelle Maschinen wie die Java Virtual Machine und die Common Language Runtime für die .NET-Plattform wurden für statisch typisierte Sprachen entwickelt, während die von Parrot angestrebten Sprachen dynamisch typisiert werden.

Virtuelle Maschinen wie die Java Virtual Machine und die aktuelle Perl 5 Virtual Machine sind ebenfalls Stack-basiert . Parrot-Entwickler sehen darin einen Vorteil, dass Parrot Register einschließt, da es daher eher einem Hardware-Design ähnelt, das es ermöglicht, die umfangreiche Literatur zur Compiler-Optimierung zur Generierung von Bytecode für die virtuelle Parrot-Maschine zu verwenden, die mit Geschwindigkeiten näher am Maschinencode laufen könnte . Andere registerbasierte virtuelle Maschinen haben Teile des Designs von Parrot inspiriert, darunter LLVM , die Lua VM und Infernos Dis .

Funktionskonzepte

Parrot bietet umfassende Unterstützung für verschiedene Funktionen der funktionalen Programmierung, einschließlich Closures und Fortsetzungen , die beide besonders schwer korrekt und portabel zu implementieren sein können, insbesondere in Verbindung mit Ausnahmebehandlung und Threading . Der größte Vorteil ist die dynamische Erweiterbarkeit von Objekten mit Methoden, die polymorphe Container (PMCs) und zugehörige Opcodes ermöglicht . Das Implementieren von Lösungen für diese Probleme auf der Ebene der virtuellen Maschine vermeidet die Notwendigkeit, diese Probleme in den einzelnen Client-Sprachen zu lösen.

Compiler-Tools

Parrot bietet eine Reihe von Tools zum Schreiben von Compilern, zu denen die Parser Grammar Engine (PGE) gehört, ein hybrider Parser-Generator, der einen rekursiven Abstiegs-Parser sowie einen Operator-Präzedenz-Parser ausdrücken kann , der einen freien Übergang zwischen den beiden in einer einzigen Grammatik ermöglicht . Die PGE speist in die Tree Grammar Engine (TGE) ein, die den von PGE generierten Parse-Baum zur Optimierung und schließlich zur Codegenerierung weiter transformiert.

Bestehende Kundensprachen

Viele Sprachen haben bereits Compiler-Frontends für Parrot entwickelt; viele von ihnen sind jedoch noch immer nur teilweise funktionsfähig. Ab Juli 2013 sind aktiv gepflegte Sprachen:

Inaktive Sprachen (Stand Juli 2013) sind die folgenden:

Die folgenden esoterischen Programmiersprachen wurden ebenfalls implementiert:

Einbauten

Es gibt drei Formen von Programmcode für Parrot:

  • Bytecode ist binär und wird von Parrot nativ interpretiert. Bytecode wird normalerweise in Dateien mit der Dateinamenerweiterung ".pbc" gespeichert.
  • Parrot Assemblersprache (PASM) ist die Low-Level-Sprache, die in Bytecode kompiliert wird. PASM-Code wird normalerweise in Dateien mit der Dateinamenerweiterung ".pasm" gespeichert.
  • Parrot Intermediate Repräsentation (PIR) ist eine etwas höhere Sprache als PASM und wird auch in Bytecode kompiliert. Es ist das primäre Ziel von Sprachimplementierungen. PIR verwaltet transparent Parrots Inter-Routinen-Aufrufkonventionen, bietet verbesserte Syntax, Registerzuordnung und mehr. PIR-Code wird normalerweise in Dateien mit der Dateinamenerweiterung ".pir" gespeichert.

Beispiele

Register

Parrot ist wie die meisten Hardware- CPUs registerbasiert und im Gegensatz zu den meisten virtuellen Maschinen, die Stack-basiert sind. Parrot bietet vier Arten von Registern:

  • I: nativer Integer- Typ
  • N: Fließkommazahlen
  • S: erweiterte Stringregister mit Unicode- Unterstützung
  • P: PMC oder polymorpher Container – Objekttyp Papagei

Parrot bietet eine beliebige Anzahl von Registern; diese Zahl wird zur Kompilierzeit pro Unterprogramm festgelegt.

Rechenoperationen

In PASM

    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 I1
    print ', '
    print N1
    print "\n"
    end

In PIR

 .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 $I1
    print ', '
    print $N1
    print "\n"
 .end

Entwicklung

Bis Ende 2005 war Dan Sugalski leitender Designer und Chefarchitekt von Parrot. Chip Salzenberg , ein langjähriger Perl-, Linux-Kernel- und C++-Hacker, übernahm bis Mitte 2006 die Leitung und wurde dann leitender Entwickler. Allison Randal , die leitende Entwicklerin von Punie und Chefarchitektin der Compiler-Tools von Parrot, war bis Mitte Oktober 2010 die Chefarchitektin, als sie zurücktrat und Christoph Otto als neuen Chefarchitekten wählte.

Entwicklungsdiskussionen finden hauptsächlich auf dem #parrot-Kanal auf irc.perl.org statt. Darüber hinaus gibt es wöchentliche moderierte Treffen für Parrot und Sprachentwickler, die in #parrotsketch im selben Netzwerk veranstaltet werden. Viele Diskussionen finden auch auf der parrot-dev-Mailingliste statt, die von parrot.org gehostet wird.

Designdiskussionen existieren in Form von Parrot Design Documents oder PDDs im Parrot Repository. Der Chefarchitekt oder ein anderer designierter Designer erstellt diese Dokumente, um die Philosophie eines Features sowie seine Benutzeroberfläche und Designhinweise zu erläutern. Parrot-Hacker verwandeln diese Dokumente in ausführbare Tests und dann in vorhandene Funktionen.

Das Parrot-Team veröffentlicht jeden dritten Dienstag im Monat eine neue stabile Version der Software. Core-Committer produzieren abwechselnd Releases in einem revolvierenden Zeitplan, bei dem kein einzelner Committer für mehrere Releases hintereinander verantwortlich ist.

Siehe auch

Verweise

Externe Links