<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Parrot</id>
	<title>Parrot - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Parrot"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Parrot&amp;action=history"/>
	<updated>2026-05-28T04:22:14Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Parrot&amp;diff=90381&amp;oldid=prev</id>
		<title>imported&gt;FlMcc: /* growthexperiments-addlink-summary-summary:3|0|0 */</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Parrot&amp;diff=90381&amp;oldid=prev"/>
		<updated>2025-01-06T18:40:45Z</updated>

		<summary type="html">&lt;p&gt;&lt;span class=&quot;autocomment&quot;&gt;growthexperiments-addlink-summary-summary:3|0|0&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{Begriffsklärungshinweis}}&lt;br /&gt;
[[Datei:Parrot VM.png|mini|Parrot Logo]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Parrot&amp;#039;&amp;#039;&amp;#039; ist eine in Entwicklung befindliche registerbasierte [[virtuelle Maschine]], die vor allem auf die Bedürfnisse dynamischer Programmiersprachen wie [[Perl (Programmiersprache)|Perl]] oder [[Python (Programmiersprache)|Python]] ausgerichtet ist. Parrot wurde von Dan Sugalski vor allem als Interpreter für [[Perl (Programmiersprache)#Raku (Perl 6)|Perl 6]] entworfen. Die Entwicklung wird von Allison Randal geleitet und von der Parrot Foundation unterstützt und koordiniert.&lt;br /&gt;
&lt;br /&gt;
== Etymologie/Wortherkunft ==&lt;br /&gt;
Während der Planungsphase von Parrot veröffentlichte Simon Cozens am [[1. April]] 2001 auf der Perl-Website des O’Reilly-Verlags einen aufwändigen Scherz-Artikel&amp;lt;ref&amp;gt;[ftp://ftp.ntua.gr/mirror/python/parrot.html &amp;#039;&amp;#039;Parrot Press Release&amp;#039;&amp;#039;]&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;[https://www.perl.com/media/_pub_2001_09_18_parrot/parrot.htm &amp;#039;&amp;#039;Scherz-Interview mit  Larry &amp;amp; Guido&amp;#039;&amp;#039;], perl.com&amp;lt;/ref&amp;gt; (samt Buchankündigung&amp;lt;ref&amp;gt; {{Webarchiv|url=http://www.oreilly.com/parrot/|text=Programming Parrot in a Nutshell|wayback=20141010183943}}&amp;lt;/ref&amp;gt;), mit der offiziellen Ankündigung von [[Larry Wall]] und [[Guido van Rossum]], dass [[Perl (Programmiersprache)|Perl]] und [[Python (Programmiersprache)|Python]] in Zukunft zu einer gemeinsamen Sprache namens Parrot verschmelzen würden. Diese Verschmelzung fand selbstverständlich nicht statt, aber der Name einer virtuellen Maschine, die für verschiedene Sprachen verwendbar sein soll, war geboren.&lt;br /&gt;
&lt;br /&gt;
== Entwicklung ==&lt;br /&gt;
Ursprünglich wurde Parrot von Dan Sugalski entworfen und mehrere Jahre geleitet. Es war von Anfang an ein [[Open Source|freies Softwareprojekt]] und wird unter der [[Artistic License|Artistic License 2.0]] veröffentlicht. [[Allison Randal]] führt jetzt die Arbeit der Freiwilligen an, wobei die im Herbst 2008 gegründete und ebenfalls von ihr geführte Parrot Foundation im November die Unterstützung erster Firmen gewinnen konnte. Patrick Michaud, Hauptautor der PGE, leitet die Entwicklung der PCT (Parrot Compiler Tools) und Rakudo (Perl 6 Compiler).&lt;br /&gt;
&lt;br /&gt;
Das Projekt befindet sich bereits seit mehreren Jahren in aktiver Entwicklung. Einzelne Teile wurden mehrmals neu geschrieben, bis eine zufriedenstellende [[Implementierung]] erreicht war. Es sind jedoch noch nicht alle Fähigkeiten für eine komplette VM vollständig implementiert. Aktuell ist Version 5.0.0, veröffentlicht am 29. Januar 2013&amp;lt;ref&amp;gt;http://www.parrot.org/news/parrot-5.0.0-johnny-five-alive-released&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Das bei O’Reilly erschienene Buch „Perl 6 and Parrot Essentials, 2nd edition“ bietet einen mittlerweile veralteten Überblick über Parrot und ist inzwischen unter einer Creative-Commons-Lizenz freigegeben worden, damit es leichter aktuell gehalten werden kann&amp;lt;ref&amp;gt;{{Webarchiv|url=http://use.perl.org/articles/07/06/26/2159246.shtml |wayback=20080807124715 |text=„Perl 6 and Parrot Essentials, 2nd edition“ |archiv-bot=2019-05-06 05:12:13 InternetArchiveBot }}&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Architektur ==&lt;br /&gt;
Im Gegensatz zu anderen virtuellen Maschinen, wie der [[Java Virtual Machine|JVM]] für Java, die [[Stapelspeicher|stapelorientiert]] sind (0-Adress-Maschine), ist Parrot eine [[Registermaschine]] (3-Adress-Maschine). Dadurch erhofft man sich bessere Optimierungsmöglichkeiten und Parallelverarbeitung von Befehlen sowohl innerhalb eines Prozessors als auch verteilt auf mehreren Prozessoren.&lt;br /&gt;
&lt;br /&gt;
Parrot erlaubt es, beliebig viele Register zu [[Allokation (Informatik)|allozieren]]. Register sind nach Typen unterschieden, es gibt Register für ganze Zahlen, [[Gleitkommazahl]]en, [[Zeichenkette]]n und für beliebige Objekte, sogenannte PMC. Soweit es die Plattform erlaubt, werden sie auf Hardwareregister abgebildet, um die Ausführungsgeschwindigkeit zu erhöhen.&lt;br /&gt;
&lt;br /&gt;
Parrot ist in [[C (Programmiersprache)|C]] geschrieben, um möglichst auf allen Plattformen verfügbar zu sein, auf denen auch Perl 5 läuft.&lt;br /&gt;
&lt;br /&gt;
== Zwischencodes ==&lt;br /&gt;
Beim Kompilieren kann ein Programm mehrere Zwischenstufen durchlaufen. Im ersten Arbeitsschritt wird der [[Quelltext]] in den [[Syntaxbaum]] überführt, der noch sehr stark die Struktur des Quelltextes widerspiegelt. Der zweite Schritt besteht üblicherweise in der Übersetzung in einen [[Abstract Syntax Tree]] (AST), der sich mehr an der logischen als an der textuellen Struktur des Programms orientiert.&lt;br /&gt;
&lt;br /&gt;
Parrot definiert eine Form des AST namens PAST &amp;#039;&amp;#039;(Parrot Abstract Syntax Tree)&amp;#039;&amp;#039;, die von fast allen Programmiersprachen genutzt werden kann. Diese Form kann über eine weitere Zwischenstufe namens POST &amp;#039;&amp;#039;(Parrot Opcode Syntax Tree)&amp;#039;&amp;#039; in [[Bytecode]] umgewandelt werden. POST dient als Schnittstelle für Bytecodeoptimierer und Konverter in und aus Bytecode anderer virtueller Maschinen.&lt;br /&gt;
&lt;br /&gt;
Wie bei Perl 5 kommt letztendlich ein Bytecode zur Ausführung, der direkt vor der Ausführung aus einem Quelltext oder [[Zwischencode]] erzeugt wird oder in einem separaten Schritt kompiliert werden kann. Neu ist für Perl mit Parrot die Möglichkeit, den Bytecode in Dateien (meist mit Endung .pbc) abzuspeichern, um sie später auszuführen.&lt;br /&gt;
&lt;br /&gt;
Während PAST und POST als Datenstrukturen ohne direkte textuelle Repräsentation definiert sind, gibt es noch für Menschen schreibbare Zwischencodes namens PIR (Parrot Intermediate Representation) und PASM (Parrot Assembler). PIR ist in der Lesbarkeit des Codes traditionellen Programmiersprachen ähnlich, verzichtet jedoch auf Kontrollstrukturen. PASM hat die gleiche Struktur wie Bytecode und ist sehr stark Parrots interner Struktur angepasst.&lt;br /&gt;
&lt;br /&gt;
== Werkzeuge ==&lt;br /&gt;
Die &amp;#039;&amp;#039;Parrot Compiler Tools (kurz PCT)&amp;#039;&amp;#039; sind eine größtenteils in PIR geschriebene Sammlung von Software, die mit Parrot ausgeliefert wird, um die Erzeugung von Parsern und Compiler für Parrot erheblich zu erleichtern.&lt;br /&gt;
&lt;br /&gt;
PCT besteht aus folgenden Bestandteilen:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Parrot Grammar Engine&amp;#039;&amp;#039;&amp;#039; (kurz PGE), einer Bibliothek, die mit Hilfe von [[Kontextfreie Sprache|Kontextfreien Sprachen]] (meist &amp;#039;&amp;#039;[[Perl 6 rules]]&amp;#039;&amp;#039;) Quelltext in einen Syntaxbaum umwandeln kann&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;Not Quite Perl&amp;#039;&amp;#039;&amp;#039; (NQP), einer Untermenge von Perl 6, die benutzt wird, um aus einem Syntaxbaum einen Abstract Syntax Tree zu erzeugen und statische Analysen durchführen zu können&lt;br /&gt;
* Einem Compiler, der PAST in POST übersetzt&lt;br /&gt;
* Einem Compiler, der POST in Bytecode übersetzt&lt;br /&gt;
&lt;br /&gt;
Alle diese Komponenten sind modular gehalten und können unabhängig voneinander benutzt werden.&lt;br /&gt;
&lt;br /&gt;
== Unterstützung anderer Programmiersprachen ==&lt;br /&gt;
Parrot wurde entworfen, um auch eine große Anzahl anderer [[Programmiersprache|Sprachen]] wie [[Python (Programmiersprache)|Python]], [[Ruby (Programmiersprache)|Ruby]], [[Tcl]] oder [[BASIC]] zu unterstützen. Compiler, die diese Programmiersprachen in Perl6-Zwischencode übersetzen, der von Parrot ausgeführt wird, wurden in Angriff genommen. Da Parrot selbst jedoch noch nicht vollständig war und von diesen Compilern verwendete Features teilweise wieder entfernt wurden, funktionieren nicht mehr alle diese Compiler und deren Entwicklung wurde auch teilweise wieder eingestellt. Trotzdem sind noch viele andere Compiler für den Parrot-Zwischencode in Arbeit, wie Parrot selbst sind jedoch nur wenige fertiggestellt.&lt;br /&gt;
&lt;br /&gt;
In der finalen Version sollen alle diese Sprachen gemeinsam verwendbar sein, das heißt jede Sprache soll die Module jeder anderen Sprache verwenden können.&lt;br /&gt;
&lt;br /&gt;
Die Entwicklung von [[Ponie]], einem Übersetzer, der existierenden Perl5-Code unter Parrot ausführbar machen sollte, wurde mittlerweile abgebrochen.&lt;br /&gt;
&lt;br /&gt;
== Stand November 2006 ==&lt;br /&gt;
Parrot ist derzeit:&lt;br /&gt;
* Ein hochoptimierter [[Interpreter]], der wesentlich effizienter als der aktuelle Perl5-Interpreter arbeitet. Optimierten Zwischencode führt er derzeit je nach [[Benchmark]] zum Beispiel dreimal so schnell aus wie perl5 ein entsprechendes Perl-Programm. Er ist zwar noch etwas langsamer als nativ ausgeführter C-Code, jedoch in manchen Benchmarks nicht mehr um mehrere Faktoren langsamer, als es das derzeitige Perl 5 ist.&lt;br /&gt;
* Es war ein [[JIT-Compiler]] vorhanden, der Code zur Laufzeit in Maschinencode umwandelte, der das Programm schneller ausführen sollte. Jedoch hatte die JIT-Implementierung praktisch keine Performancesteigerung bewirkt.  Da ihr Design außerdem die Entwicklung der restlichen Komponenten von Parrot behinderte, wurde sie vor dem Release von Parrot 1.7 entfernt. Seit September 2009 besteht der Plan, den JIT-Compiler von [[LLVM]] in Parrot zu verwenden.&amp;lt;ref&amp;gt;{{Webarchiv|url=http://use.perl.org/~Whiteknight/journal/38827 |wayback=20100115035855 |text=Archivierte Kopie |archiv-bot=2019-05-06 05:12:13 InternetArchiveBot }}&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;http://lists.parrot.org/pipermail/parrot-dev/2009-September/002811.html&amp;lt;/ref&amp;gt;&amp;lt;ref&amp;gt;http://wknight8111.blogspot.com/2009/09/jit-first-project-challenge.html&amp;lt;/ref&amp;gt;&lt;br /&gt;
* Ein Code-Generator für kompilierte, ausführbare [[Datei]]en. Dieser Generator verwendet den JIT-Compiler und kann daher nur auf Plattformen zur Verfügung stehen, auf denen es auch einen JIT-Compiler gibt. Derzeit gibt es dieses „Native exec“ genannte Funktion nur auf i386/[[Linux]] und i386/[[Berkeley Software Distribution|BSD]]. Zumindest auf i386/Linux, scheint diese Funktion derzeit jedoch einen Fehler zu haben: Programme die von dem JIT-Compiler einwandfrei kompiliert werden, lösen bei der Umwandlung in [[Objektcode]] einen [[Schutzverletzung|Segmentierungsfehler]] in Parrot aus.&lt;br /&gt;
&lt;br /&gt;
== Weblinks ==&lt;br /&gt;
* [http://www.parrot.org parrot.org – offizielle Homepage]&lt;br /&gt;
&lt;br /&gt;
== Einzelnachweise ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Perl (Programmiersprache)]]&lt;br /&gt;
[[Kategorie:Virtuelle Maschine]]&lt;/div&gt;</summary>
		<author><name>imported&gt;FlMcc</name></author>
	</entry>
</feed>