Virtuelle Papageienmaschine

Virtuelle Papageienmaschine
Parrot Foundation logo
Endgültige Veröffentlichung
8.1.0 / 16. Februar 2016; vor 6 Jahren[1]
Repository
Geschrieben in C
Betriebssystem Plattformübergreifend
Nachfolger Moarvm (für Raku)
Typ Virtuelle Maschine
Lizenz Künstlerische Lizenz 2.0
Webseite www.Papagei.org Edit this at Wikidata

Papagei war ein Registerbasiert Virtuelle Maschine verarbeiten entworfen, um zu laufen Dynamische Sprachen effizient. Es ist möglich zu kompilieren Papageienversammlungssprache und Papageienmediate -Darstellung (PIR, eine Zwischensprache) zu Papagei Bytecode und es ausführen. Papagei ist frei und Open Source Software.[2]

Papagei wurde von der begonnen Perl Gemeinschaft und wird mit Hilfe von der entwickelt Open Source und kostenlose Software -Communities. Infolgedessen konzentriert es sich auf Lizenzkompatibilität mit Perl (Künstlerische Lizenz 2.0), Plattformkompatibilität über ein breites Anteil von Systemen, Kompatiturenkompatibilität der Prozessorarchitektur in den meisten modernen Prozessoren, die Geschwindigkeit der Ausführung, kleine Größe (je nach Plattform) und die Flexibilität, die unterschiedlichen Anforderungen zu erfüllen Raku und andere moderne Dynamische Sprachen.

Version 1.0 mit einem Stall Programmierschnittstelle (API) für die Entwicklung wurde am 17. März 2009 veröffentlicht.[3] Die letzte Version ist Release 8.1.0 "Andean Shotet".[1] Papagei wurde im August 2021 offiziell eingestellt Moarvm in seiner Hauptverwendung (RAKU) und nie ein Mainstream -VM für eine seiner anderen unterstützten Sprachen.[4]

Geschichte

Der Name Papagei kam von einem Aprilscherz Witz, der eine hypothetische Sprache bekannt gab, benannt Papagei, das würde sich vereinen lassen Python und Perl.[5][6] Der Name wurde später von diesem Projekt (zunächst Teil der Raku -Entwicklungsbemühungen) übernommen, das darauf abzielt, Raku, Python und andere Programmiersprachen zu unterstützen. Es sind mehrere Sprachen portiert auf der virtuellen Maschine der Papagei laufen.[7]

Die Parrot Foundation wurde 2014 aufgelöst.[8] Die Stiftung wurde 2008 gegründet, um die zu halten Urheberrechte © und Warenzeichen des Papageienprojekts, um die Entwicklung von zu fördern Sprachimplementierungen und die Kern -Codebasis, um eine Basis für den Wachstum der Parrot -Community zu bieten und sich an andere Sprachgemeinschaften zu wenden.[9]

Sprachen

Das Ziel der virtuellen Papageienmaschine ist es, Clientsprachen zu hosten und zwischen ihnen eine Interoperation zu ermöglichen. Bei der Erreichung dieses Ziels gibt es mehrere Hürden, insbesondere die Schwierigkeit, Konzepte, Daten und Konzepte von hoher Ebene zu kartieren Datenstrukturen zwischen Sprachen.

Statische und dynamische Sprachen

Die unterschiedlichen Eigenschaften von statisch und dynamisch getippt Sprachen haben das Design von Papagei motiviert. Aktuelle beliebte virtuelle Maschinen wie die Java virtuelle Maschine und die Gemeinsame SprachlaufzeitFür die .NET -Plattform wurden für staatlich typisierte Sprachen konzipiert, während die von Papageien abgestimmten Sprachen dynamisch getippt werden.

Virtuelle Maschinen wie die virtuelle Java und die aktuelle Perl 5 Virtual Machine sind ebenfalls Stackbasiert. Papageienentwickler sehen Parrots Aufnahme von Registern als Vorteil, da sie daher einem Hardwaredesign ähnlich ähnelt, was der riesigen Literatur zulässt Compiler -Optimierung zum Erzeugen von Bytecode für die virtuelle Papagei verwendet werden Maschinensprache. Andere registrierungsbasierte virtuelle Maschinen haben Teile des Entwurfs von Parrot inspiriert, einschließlich Llvm, das Lua VM und Inferno Dis.

Funktionale Konzepte

Parrot hat eine reichhaltige Unterstützung für mehrere Funktionen von Funktionelle Programmierung einschließlich Schließungen und KontinuationenBeide können besonders schwer korrekt und portabel zu implementieren sein Ausnahmebehandlung und Fäden. Der größte Vorteil ist die dynamische Erweiterbarkeit von Objekten mit Methoden, die es zulässt polymorphe Behälter (PMCS) und zugehörige Opcodes. Das Implementieren von Lösungen für diese Probleme auf der Ebene der virtuellen Maschine muss diese Probleme in den einzelnen Kundensprachen lösen.

Compiler -Werkzeuge

Der Papagei bietet eine Reihe von Compiler-Schreibwerkzeugen[10] welches die Parser -Grammatikmotor (PGE), ein Hybrid-Parser-Generator, der a ausdrücken kann rekursiver Abstammungsparser sowie eine Bediener-Präzizitätsparser, was den freien Übergang zwischen den beiden in einer einzelnen Grammatik ermöglichen. Die PGE füttert die Baumgrammatikmotor (TGE), die den von PGE erzeugten Parse-Baum für die Optimierung und letztendlich für die Codeerzeugung weiter verwandelt.

Bestehende Kundensprachen

Viele Sprachen haben bereits Compiler Frontends für Papagei. Viele von ihnen sind jedoch nur teilweise funktionsfähig.[11] Ab Juli 2013 [Benötigt Update], aktiv gepflegte Sprachen sind:[12]

Inaktive Sprachen sind ab Juli 2013 Folgendes:

Folgende Esoterische Programmiersprachen wurden auch implementiert:

Interna

Es gibt drei Formen von Programmcode für Papageien:

  • Bytecode[14] ist binär und wird durch Papagei nativ interpretiert. Bytecode wird normalerweise in Dateien mit dem gespeichert Dateiname Erweiterung ".pbc".
  • Papageienversammlungssprache (Pasm) ist die niedrige Sprache, die kompiliert unten nach Bytecode. Der PASM -Code wird normalerweise in Dateien mit der Dateiname -Erweiterung ".Pasm" gespeichert.
  • Papageienmediate -Darstellung (Pir[15]) ist eine etwas höhere Sprache als das PASM und kompiliert auch bis zu Bytecode. Es ist das Hauptziel von Sprachimplementierungen. PIR verwaltet transparent die Interroutine-Aufrufkonventionen von Parrot, bietet eine verbesserte Syntax, Registerzuweisung und mehr. PIR -Code wird normalerweise in Dateien mit der Dateiname -Erweiterung ".pir" gespeichert.

Beispiele

Register

Papagei ist registriert wie die meisten Hardware CPUsund im Gegensatz zu den meisten virtuellen Maschinen, die stapelbasiert sind. Papagei bietet vier Arten von Registern:

  • I: Eingeborener ganze Zahl Typ
  • N: Schwimmpunkt Zahlen
  • S: Fortgeschritten Saite Register mit Unicode Unterstützung
  • P: PMC oder Polymorpher Behälter - Papageienobjekttyp

Papagei bietet eine willkürliche Anzahl von Registern; Diese Zahl wird zur Kompilierungszeit pro Unterroutine festgelegt.

Rechenoperationen

In Pasm

  einstellen I1, 4  Inc. I1  # I1 ist jetzt 5  hinzufügen I1, 2  # I1 ist jetzt 7  einstellen N1, 42.0  dez N1  # N1 ist jetzt 41.0  Sub N1, 2.0  # N1 ist jetzt 39.0  drucken I1  drucken ', '  drucken N1  drucken "\ \n"  Ende 

In Pir

 .Sub 'hauptsächlich':hauptsächlich  $ I1 = 4  Inc. $ I1  # $ I1 ist jetzt 5  $ I1 += 2  # $ I1 ist jetzt 7  $ N1 = 42.0  dez $ N1  # $ N1 ist jetzt 41.0  $ N1 -= 2.0  # $ N1 jetzt 39.0  drucken $ I1  drucken ','  drucken $ N1  drucken "\n"  .Ende 

Entwicklung

Bis Ende 2005, Dan Sugalski war der Hauptdesigner und Chefarchitekt von Papagei. Chip Salzenberg, ein langjähriger Perl, Linux-Kernel und C ++-Hacker, übernahm bis Mitte 2006, als er der Hauptentwickler wurde. Allison Randal, der leitende Entwickler von Punie und Chefarchitekt der Compiler-Werkzeuge von Parrot war bis Mitte Oktober 2010 der Hauptarchitekt, als sie sich als neuer Chefarchitekt entschied und Christoph Otto entschied.[16]

Entwicklungsdiskussionen finden hauptsächlich auf dem #Parrot -Kanal auf irc.perl.org statt. Darüber hinaus gibt es wöchentliche moderierte Besprechungen für Papageien- und Sprachentwickler, die in #Parrotsketch im selben Netzwerk gehostet werden. Auf der von pAPROT.org gehosteten Papagei-Dev-Mailingliste findet auch viel Diskussion statt.

Entwurfsdiskussionen existieren in Form von Papageienentwurfsdokumenten oder PDDs im Papagei -Repository.[17] Der Chefarchitekt oder ein anderer ausgewiesener Designer erstellt diese Dokumente, um die Philosophie eines Merkmals sowie seine Schnittstellen- und Designnotizen zu erklären. Papageienhacker verwandeln diese Dokumente in ausführbare Tests und dann vorhandene Funktionen.

Das Parrot -Team veröffentlicht jeden dritten Dienstag im Monat eine neue stabile Version der Software. Core Committers wechseln abwechselnd Releases in einem revolvierenden Zeitplan, bei dem kein einziger Kommitter für mehrere Veröffentlichungen in einer Reihe verantwortlich ist.

Siehe auch

Verweise

  1. ^ a b "Neu unterstützte Release 8.1.0" Andean Shotet "". Parrot Foundation. 2016-02-16. Abgerufen 2016-09-26.
  2. ^ "Papageienwerbung für die Lizenzvereinbarung 1.0" (PDF). Parrot Foundation. Abgerufen 2009-03-18.
  3. ^ "Parrot Roadmap". Parrot Foundation. 2008-11-20. Abgerufen 2008-11-20.
  4. ^ "Inaktiver Papagei | Papagei VM". www.parrot.org.
  5. ^ "Die Geschichte hinter dem Papageienstreich - O'Reilly Media". Oreilly.com. 2001-04-06. Abgerufen 2014-02-25.
  6. ^ "Programmierpapagei". Perl.com. Archiviert von das Original Am 2010-07-18. Abgerufen 2014-02-25.
  7. ^ "Sprachen | Papagei VM". Paperot.org. 2006-02-14. Abgerufen 2014-02-25.
  8. ^ "Unternehmen Fortgeschrittene Suche". Washington State Department of Lizenzierung. UBI 602 839 536. Abgerufen 2021-04-09.{{}}: CS1 Wartung: URL-Status (Link)
  9. ^ Ankündigung der Parrot Foundation Archiviert 29. Juni 2008 bei der Wayback -Maschine
  10. ^ [1] Archiviert 9. Mai 2009 bei der Wayback -Maschine
  11. ^ "Sprachen - Papagei". Trac.Parrot.org. Abgerufen 2014-02-25.
  12. ^ "Sprachen - Papagei VM". paperot.org. Abgerufen 19. April 2018.
  13. ^ Weißer Ritter. "WhiteKnight/Matrixy - Github". Github.com. Abgerufen 2014-02-25.
  14. ^ "Archivierte Kopie". Archiviert von das Original am 2008-12-24. Abgerufen 2009-07-15.{{}}: CS1 Wartung: Archiviertes Kopie als Titel (Link)
  15. ^ [2] Archiviert 20. Juli 2009 bei der Wayback -Maschine
  16. ^ Otto, Christoph (2010-10-21). "Reparrot: Papagei hat einen neuen Architekten. Was jetzt?". Reparrot.blogspot.com. Abgerufen 2014-02-25.
  17. ^ "Papagei 6.1.0 - Papageienentwurfsdokumente (PDDs)". Docs.parrot.org. Abgerufen 2014-02-25.

Externe Links