2008-09-22 14 views
23

Ich verstehe, dass Parrot eine virtuelle Maschine ist, aber ich habe das Gefühl, dass ich die dahinter stehende Idee nicht vollständig verstehe.Was genau ist Papagei?

Wie ich es verstehe, handelt es sich um eine virtuelle Maschine, die mehrere Sprachen verarbeiten kann. Ist das richtig?

Welche Vorteile bietet die Verwendung einer virtuellen Maschine statt nur eines Interpreters?

Was genau macht Parrot, das macht es so eine große Sache?

Antwort

13

Parrot ist ein Bytecode-Interpreter (möglicherweise mit einem JIT in einer zukünftigen Phase). Denken Sie an Java und seine virtuelle Maschine, außer dass Java (im Moment) mehr auf statische Sprachen ausgerichtet ist und Parrot von Anfang an auf dynamische Sprachen ausgerichtet ist.

Siehe auch Codys ausgezeichnete Antwort! Sehr empfehlenswert.

+0

Ein weiterer Import sein Ant Point zu erwähnen ist, dass Parrot Register-basierten Intad Stack-basierte ist, im Gegensatz zu JVM und CLR. Dies kann theoretisch die Optimierung erleichtern, da wir viel mehr Erfahrung mit registerbasierten Systemen haben. –

+0

Cody: Du solltest das posten, damit ich deinen Kommentar +1 geben kann. :-) –

+0

Eigentlich hatte Papagei jit, zumindest für x86 Systeme, schon eine Weile. –

21

Chris deckte die Unterschiede gegenüber den Benutzern ab, also werde ich die andere Seite abdecken.

Parrot ist registerbasiert und nicht stapelbasiert. Das bedeutet, dass Compilerentwickler die Art und Weise, wie die Register für einen bestimmten Codeabschnitt zugewiesen werden sollen, einfacher optimieren können. Darüber hinaus kann die Kompilierung von Parrot-Bytecode zu Maschinencode theoretisch schneller als Stack-basierter Code sein, da wir registerbasierte Systeme ausführen und viel mehr Erfahrung darin haben, diese zu optimieren.

36

Parrot ist eine virtuelle Maschine, die speziell für mehrere Sprachen entwickelt wurde, insbesondere für dynamische Sprachen. Trotz einiger interessanter Technologien wird es in der Lage sein, Sprachgrenzen zu überschreiten, da es mehr als eine Sprache beherrscht. Zum Beispiel, sobald es Ruby, Perl und Python kompilieren kann, sollte es einfach sein, diese Grenzen zu überschreiten, damit ich eine Ruby-Bibliothek in Python, eine Perl-Bibliothek von Python, verwenden kann, also welche Kombination ich auch mag.

Papagei begann in der Perl-Welt und viele der Leute, die daran arbeiten, sind erfahrene Perl-Leute. Anstatt den aktuellen Perl-Interpreter zu verwenden, der sein Alter anzeigt, erlaubt Parrot es Perl, Funktionen wie verteilbare vorkompilierte Module (die alle anderen schon lange hatten) und einen intelligenteren Garbage Collector zu haben.

+1

Danke für eine gute Antwort von einem Mitglied der Perl-Community! Ich hatte keine Stimmen mehr, aber sobald der Tag vorüber ist (in 15 Minuten), werde ich Sie wählen. :-) –

+0

Perl hat verteilbare vorkompilierte Module für eine lange Zeit gehabt; Sie haben sich einfach nie durchgesetzt (vor allem, weil sie nur ein Speicherauszug des In-Memory-Formats des kompilierten Codes sind, so dass sie groß genug sind, dass die Zeit, sie von der Festplatte zu laden, länger sein kann als die Zeit, die sie benötigen würde regeneriere sie aus dem Quellcode) – ysth

+0

Von dem, an das ich mich erinnere, funktionierten die PMCs auch nur in bestimmten Situationen. Ich habe sie nie erforscht, weil ich mich daran erinnere, sie schnell zu brechen. Ich vergesse die Details jedoch. –

8

Andere haben ausgezeichnete Antworten gegeben, was mir bleibt, ist zu erklären, was "dynamische" Sprachen eigentlich bedeuten.

Im Kontext einer virtuellen Maschine bedeutet dies, dass der Typ einer Variablen zur Kompilierzeit nicht bekannt ist. In "statischen" Sprachen ist der Typ (oder zumindest eine Elternklasse davon) zur Kompilierungszeit bekannt, und viele Optimierungen bauen auf diesem Wissen auf.

Auf der anderen Seite wissen Sie vielleicht in dynamischen Sprachen, ob eine Variable einen Containertyp (wie ein Array) oder einen Skalar (String, Zahl, ...) enthält, aber Sie haben viel weniger Typinformationen zur Kompilierzeit.

Ein weiteres Merkmal ist, dass dynamische Sprachen normalerweise Typkonvertierungen viel einfacher machen, zum Beispiel in Perl und Javascript, wenn Sie eine Zeichenkette als Zahl verwenden, wird sie automatisch in eine Zahl umgewandelt.

Parrot wurde entwickelt, um solche Operationen einfach und schnell zu machen und Optimierungen zu ermöglichen, ohne dass beim Kompilieren Typinformationen bekannt sind.

+0

Es geht nicht nur um Typen. Dynamische Sprachen ermöglichen es Ihnen, verschiedene nicht typisierte Dinge nach dem Kompilieren neu zu definieren. –

2

Hier ist die Official Parrot Wiki.

Dort finden Sie viele Informationen und Links.

Der untere Teil der Parrot-Wiki-Homepage zeigt auch die neuesten Überschriften aus dem Feed-Aggregator Planet Parrot an.

Zusätzlich zu der VM erstellt das Parrot-Projekt eine sehr mächtige Werkzeugkette, um es einfacher zu machen, vorhandene Sprachen zu portieren oder neue zu entwickeln.

Die Parrot VM bietet auch andere Sprachen für die Unterstützung vieler leistungsstarker neuer Perl 6-Funktionen (weitere Informationen zu Perl 6 finden Sie unter Official Perl 6 Wiki).

Parrot wird die Interoperabilität zwischen Modulen verschiedener Sprachen ermöglichen, so dass beispielsweise andere Sprachen die mächtige Perl 6-Version von CPAN (das umfangreiche Perl 5-Modularchiv, das Perl 6 verwenden kann) nutzen können Zugriff über die kommende Perl 5.12).

1

Ehrlich gesagt wusste ich nicht, dass es so groß war. Es hat einen langen Weg zurückgelegt, sieht aber nur wenig Nutzen. Die Hauptzielsprache muss erst noch wirklich erreicht werden und hat unter den Branchenprofis einen großen Anteil verloren. Andere Lösungen wie .Net und Projekte wie Jython zeigen uns, dass das Hier und Jetzt jeden wahrgenommenen Hype aus dem Weg räumen kann.

1
  • Parrot wird, was java für, aber nie erreicht strebt werden - für alle OS und Plattformen eine vm
  • Parrot umsetzen wird, die Ideen hinter der
  • Common Language Runtime für jede dynamische Sprache und wirklich Cross-Plattform von Microsoft
  • Obendrein Parrot und wird kostenlos und Open-Source-
  • Parrot wird zum de-facto-Standard für Open-Source-Programmierung mit dynamischen Sprachen