Papagei virtuelle Maschine

Papagei ist ein Register-basierter Prozess virtuelle Maschine hat vorgehabt, dynamische Sprachen effizient zu führen. Es ist zurzeit möglich, Papagei-Zusammenbau-Sprache und PIR (eine Zwischensprache) zum Papageien bytecode zu kompilieren und es durchzuführen. Papagei ist freie und offene Quellsoftware.

Papagei wurde mit der Gemeinschaft von Perl angefangen und wird mit der Hilfe von der offenen Quelle und den Gemeinschaften der kostenlosen Software entwickelt. Infolgedessen wird es auf die Lizenzvereinbarkeit (Künstlerische Lizenz 2.0), Plattform-Vereinbarkeit über eine breite Reihe von Systemen, Verarbeiter-Architektur-Vereinbarkeit über die meisten modernen Verarbeiter, Geschwindigkeit der Ausführung, kleine Größe (um 700k abhängig von der Plattform), und die Flexibilität eingestellt, um die unterschiedlichen Anforderungen zu behandeln, dass Perl 6, und die meisten anderen modernen dynamischen Sprachen machen. Andere Absichten schließen sich verbessernde Selbstbeobachtung, Testhilfeprogramm-Fähigkeiten, und Übersetzungszeit semantische Modulation ein.

Version 1.0, mit einer stabilen API für die Entwicklung, wurde am 17. März 2009 veröffentlicht. Die aktuelle Entwicklungsausgabe des Papageien ist Version 4.3.0", In Der... ", am 17. April 2012 veröffentlicht hat.

Geschichte

Der Name Papagei ist aus einem Aprilscherz gekommen, der eine hypothetische Sprache, genannt Papageien bekannt gegeben hat, der Python und Perl vereinigen würde. Der Name wurde später durch dieses Projekt angenommen (am Anfang ein Teil von Perl 6 Entwicklungsaufwand), der zum Ziel hat, Perl 6, Pythonschlange und andere Programmiersprachen zu unterstützen. Mehrere Sprachen werden getragen, um auf dem Papageien virtuelle Maschine zu führen.

Das Papagei-Fundament wurde 2008 geschaffen, um das Copyright und die Handelsmarken des Papagei-Projektes zu halten, zu helfen, Entwicklung von Sprachdurchführungen und dem Kern codebase zu steuern, eine Basis zur Verfügung zu stellen, für die Papagei-Gemeinschaft zu wachsen, und andere Sprachgemeinschaften hinauszureichen.

Sprachen

Die Absicht des Papageien virtuelle Maschine soll Kundensprachen veranstalten und Zwischenoperation zwischen ihnen erlauben. Mehrere Hürden bestehen in der Vollendung dieser Absicht, insbesondere die Schwierigkeit, Konzepte auf höchster Ebene, Daten und Datenstrukturen zwischen Sprachen kartografisch darzustellen.

Statische und dynamische Sprachen

Die sich unterscheidenden Eigenschaften statisch und dynamisch getippte Sprachen haben das Design des Papageien motiviert. Aktuelle populäre virtuelle Maschinen wie Java virtuelle Maschine und die Durchlaufzeit der Gemeinsamen Sprache sind für statisch getippte Sprachen entworfen worden, während die vom Papageien ins Visier genommenen Sprachen dynamisch getippt werden.

Virtuelle Maschinen wie Java virtuelle Maschine und aktueller Perl 5 virtuelle Maschine sind auch gestützter Stapel. Papagei-Entwickler sehen die Einschließung des Papageien von Registern als ein Vorteil, weil sie deshalb näher einem Hardware-Design ähnelt, die riesengroße Literatur auf der Bearbeiter-Optimierung erlaubend, im Erzeugen bytecode für den Papageien virtuelle Maschine verwendet zu werden, die mit am Maschinencode näheren Geschwindigkeiten laufen konnte. Andere Register-basierte virtuelle Maschinen haben Teile des Designs des Papageien, einschließlich des Lua VM und des Dis des Infernos begeistert.

Funktionelle Konzepte

Papagei hat reiche Unterstützung für mehrere Eigenschaften der funktionellen Programmierung einschließlich Verschlüsse und Verlängerungen, von denen beide besonders schwierig sein können, richtig und tragbar, besonders in Verbindung mit dem Ausnahme-Berühren und Einfädeln durchzuführen. Das Einführen von Lösungen dieser Probleme am virtuellen Maschinenniveau verhindert wiederholte Anstrengungen, diese Probleme auf den individuellen Kundensprachen zu beheben.

Bearbeiter-Werkzeuge

Papagei stellt ein Gefolge von Bearbeiter schreibenden Werkzeugen zur Verfügung, das Parser Grammar Engine (PGE), ein hybrider Parser-Generator einschließt, der einen rekursiven Abstieg parser sowie eine Maschinenbediener-Priorität parser ausdrücken kann, freien Übergang zwischen den zwei in einer einzelnen Grammatik erlaubend. Der PGE frisst in Tree Grammar Engine (TGE), der weiter den Syntaxanalyse-Baum umgestaltet, der durch PGE für die Optimierung und schließlich für die Codegeneration erzeugt ist.

Vorhandene Kundensprachen

Viele Sprachen ließen bereits Bearbeiter-Vorderenden für den Papageien entwerfen; jedoch sind viele von ihnen noch nur teilweise funktionell. Die Sprachen zurzeit implementable, teilweise und völlig, auf dem Papageien sind:

Internals

Es gibt drei Formen des Programm-Codes für den Papageien:

  • Bytecode ist binär und wird vom Papageien heimisch interpretiert. Bytecode wird gewöhnlich in Dateien mit dem Dateiformat ".pbc" versorgt.
  • Papagei-Zusammenbau-Sprache (PASM) ist die Sprache der niedrigen Stufe, die unten zu bytecode kompiliert. PASM Code wird gewöhnlich in Dateien mit dem Dateiformat ".pasm" versorgt.
  • Parrot Intermediate Representation (PIR) ist eine ein bisschen höhere Niveau-Sprache als PASM und kompiliert auch unten zu bytecode. Es ist das primäre Ziel von Sprachdurchführungen.

PIR führt durchsichtig das zwischenalltägliche Benennen des Papageien der Vereinbarung, stellt verbesserte Syntax, Register-Zuteilung, und mehr zur Verfügung. PIR Code wird gewöhnlich in Dateien mit dem Dateiformat ".pir" versorgt.

Beispiele

Register

Papagei ist wie die meisten Hardware-Zentraleinheiten, und verschieden von den meisten virtuellen Maschinen Register-basiert, die Stapel-basiert sind. Papagei stellt vier Typen von Registern zur Verfügung:

  • I: heimischer Typ der ganzen Zahl
  • N: Schwimmpunkt-Zahlen
  • S: fortgeschrittene Schnur-Register mit Unicode unterstützen
  • P: PMC oder Polymorpher Behälter — Papagei-Objektart

Papagei stellt eine beliebige Zahl von Registern zur Verfügung; diese Zahl wird während der Übersetzung pro Unterprogramm befestigt.

Arithmetische Operationen

In PASM

Satz I1, 4

inc I1 # I1 ist jetzt 5

fügen Sie I1, 2 # hinzu I1 ist jetzt 7

Satz N1, 42.0

Dez N1 # N1 ist jetzt 41.0

U-Boot N1 2.0 # ist N1 jetzt 39.0

drucken Sie I1

drucken Sie','

drucken Sie N1

drucken Sie "\n"

Ende

In PIR

'Wichtiger'.sub: wichtiger

$I1 = 4

Inc-$I1 # $I1 ist jetzt 5

$I1 + = 2 # $I1 ist jetzt 7

$N1 = 42.0

$N1 im Dez # $N1 ist jetzt 41.0

$N1 - = 2.0 # $N1 jetzt 39.0

Druck-$I1

drucken Sie','

Druck-$N1

drucken Sie "\n"

.end

Entwicklung

Bis zum Ende 2005 war Dan Sugalski der Leitungsentwerfer und Hauptarchitekt des Papageien. Chip Salzenberg, langfristiger Perl, Kern von Linux, und C ++ Hacker, hat bis zur Mitte 2006 übernommen, als er der Leitungsentwickler geworden ist. Allison Randal, der Leitungsentwickler von Punie und Hauptarchitekt der Bearbeiter-Werkzeuge des Papageien, war der Hauptarchitekt bis zur Mitte des Oktobers 2010, als sie zurückgetreten ist und Christoph Otto als der neue Hauptarchitekt gewählt hat.

Entwicklungsdiskussionen finden in erster Linie auf #parrot Kanal auf irc.perl.org statt. Außerdem gibt es wöchentlich gemäßigte Sitzungen für den Papageien und die Sprachentwickler, die in #parrotsketch in demselben Netz veranstaltet sind. Viel Diskussion kommt auch auf der Adressenliste des Papageien-dev vor, die durch parrot.org veranstaltet ist.

Designdiskussionen bestehen in der Form von Papagei-Designdokumenten oder PDDs im Papagei-Behältnis. Der Hauptarchitekt oder ein anderer benannter Entwerfer erzeugen diese Dokumente, um die Philosophie einer Eigenschaft sowie seiner Schnittstelle und Designzeichen zu erklären. Papagei-Hacker verwandeln diese Dokumente in rechtskräftige Tests, und dann vorhandene Eigenschaften.

Die Papagei-Mannschaft veröffentlicht eine neue stabile Version der Software am dritten Dienstag jedes Monats. Kern committers wechselt sich ab, Ausgaben in einer Drehliste erzeugend, wo kein einzelner committer für vielfache Ausgaben hintereinander verantwortlich ist. Diese Praxis hat die Geschwindigkeit und Stabilität des Projektes verbessert.

Siehe auch

Links


198 V. CHR. / 197 V. CHR.
Impressum & Datenschutz