Privacy Policy Cookie Policy Terms and Conditions Parrot - Wikipedia

Parrot

aus Wikipedia, der freien Enzyklopädie

Dieser Artikel befasst sich mit der virtuellen Maschine Parrot. Für Informationen zum Erstbesteiger des Berges Ararat siehe: Friedrich Parrot. Für den französischen Vorderasiatischen Archäologen André Parrot (1901-1980) siehe André Parrot.

Parrot ist eine in Entwicklung befindliche registerbasierte virtuelle Maschine, die vor allem auf die Bedürfnisse dynamischer Programmiersprachen wie Perl oder Python ausgerichtet ist. Parrot wurde von Dan Sugalski vor allem als Interpreter für Perl 6 entworfen und seine Entwicklung wird von der Perl Foundation unterstützt und koordiniert.

Parrot führt jedoch nicht direkt Perl6-Quellcode aus, dafür ist zusätzlich ein Compiler (derzeit nur Pugs) erforderlich, der einen der von Parrot unterstützten Zwischencodes als Ausgabe liefert.

Inhaltsverzeichnis

[Bearbeiten] Zwischencodes

Parrot unterstützt mehrere Zwischencodes als Eingabe. Einer dieser Zwischencodes basiert auf einer abstrakten Baumstrukur, andere sind der Assemblersprache sehr ähnlich. Es kann auch direkt in diesen Zwischencodes programmiert werden. Die dafür verwendete Syntax ist sehr einfach. Der Zwischencode ist in der Lesbarkeit dem Code traditioneller Programmiersprachen sehr ähnlich und wesentlich besser lesbar als Assembler. Er steht funktional auf Assemblerebene, verwendet jedoch statt statischer Typen die von Perl bekannte dynamische Typisierung. D. h., ein benanntes Register wird wie eine dynamisch typisierte Variable verwendet.

Wie bei Perl5 kommt letztendlich ein Bytecode zur Ausführung, der entweder direkt vor der Ausführung aus dem Zwischencode erzeugt wird oder in einem separaten Schritt kompiliert werden kann, und als Parrot-Bytecode abgespeichert und später direkt ausgeführt werden kann.

[Bearbeiten] Aktueller Stand (November 2006)

Parrot ist derzeit:

  • Ein hochoptimierter Interpreter, der wesentlich effizienter als der aktuelle Perl5-Interpreter arbeitet. Optimierten Zwischencode führt er derzeit je nach Benchmark zum Beispiel drei mal so schnell aus als perl5 ein entsprechendes Perl-Programm. Er ist zwar noch etwas langsamer als nativ ausgeführter C-Code, jedoch in manchen Benchmarks nicht mehr mehrere Faktoren langsamer, wie das Perl5 derzeit ist.
  • Ein hochoptimierender JIT-Compiler, der den Zwischencode komplett vor der Ausführung übersetzt, der Performance-Nachteil liegt derzeit auf i386 bei einzelnen Benchmarks im niedrigen zweistelligen Prozentbereich, während der Entwicklung wurde sogar eine Optimierung erreicht, bei dem ein Testfall sogar schneller als mit -O3 optmierter C-Code ausgeführt wurde. JITs gibt es derzeit für: AXP, ARM, PA-RISC, i386, IA64, MIPS, PowerPC und SPARC.
  • Ein Code-Generator für kompilierte, ausführbare Dateien. 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/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 Segementierungsfehler in Parrot aus.

Ebenfalls in Entwicklung befindet sich auch Ponie, ein Übersetzer, der existierenden Perl5-Code unter Parrot ausführbar machen soll.

[Bearbeiten] Unterstützung anderer Programmiersprachen

Parrot wurde von Dan Sugalski entworfen um auch eine große Anzahl anderer Sprachen wie Python, 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.

In der finalen Version sollen alle diese Sprachen gemeinsam verwendbar sein, d.h. jede Sprache soll die Module jeder anderen Sprache verwenden können.

Parrot wird wahlweise unter der GNU General Public License oder der Artistic License veröffentlicht und ist somit frei verfügbar.

[Bearbeiten] Entstehung

Ursprünglich war Parrot ein aufwändiger Scherz von Simon Cozens zum 1. April 2001. Ein eigener Artikel (samt Buchankündigung) wurde auf der Perl-Website des O'Reilly-Verlags veröffentlicht, mit der "offiziellen" Ankündigung von Larry Wall und Guido van Rossum, dass Perl und Python in Zukunft zu einer gemeinsamen Sprache namens Parrot verschmelzen würden.

Diese Verschmelzung fand nicht statt, aber die Idee zu einer generellen virtuellen Machine, die für verschiedene Sprachen verwendbar sein soll, war geboren.

[Bearbeiten] Entwicklung

Parrot ist Open Source und wird von Freiwilligen, unter der Leitung von Chip Salzenburg (Nachfolger von Dan Sugalski) und Leopold Tötsch, entwickelt.

Das Projekt befindet sich schon mehrere Jahre in aktiver Entwicklung. Einzelne Teile wurden mehrmals neu geschrieben, bis eine zufriedenstellende Implementierung erreicht war. Es sind jedoch noch nicht alle Features für eine komplette VM vollständig implementiert. Die aktuelle Version ist 0.4.7 (veröffentlicht am 14. November 2006). In dieser Version sind Objekte, Subroutinen, Namensräume und lexikalische Variablen bereits implementiert. Es sind viele Beispielprogramme und Benchmarks enthalten, die beeindruckende Performance zeigen.

Das bei O'Reilly erschienene Buch „Perl 6 and Parrot Essentials, 2nd edition“ bietet einen sehr gut geschriebenen Überblick über den aktuellen Stand und soll auch die Weiterentwicklung in jährlich neuen Auflagen begleiten.

[Bearbeiten] Architektur

Im Gegensatz zu anderen virtuellen Maschinen, wie der JVM für Java, die 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.

[Bearbeiten] Weblinks

THIS WEB:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2008 (no images)

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - bcl - be - be_x_old - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - co - cr - crh - cs - csb - cu - cv - cy - da - de - diq - dsb - dv - dz - ee - el - eml - en - eo - es - et - eu - ext - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gan - gd - gl - glk - gn - got - gu - gv - ha - hak - haw - he - hi - hif - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kaa - kab - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mdf - mg - mh - mi - mk - ml - mn - mo - mr - mt - mus - my - myv - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - quality - rm - rmy - rn - ro - roa_rup - roa_tara - ru - rw - sa - sah - sc - scn - sco - sd - se - sg - sh - si - simple - sk - sl - sm - sn - so - sr - srn - ss - st - stq - su - sv - sw - szl - ta - te - tet - tg - th - ti - tk - tl - tlh - tn - to - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu -

Static Wikipedia 2007:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu

Static Wikipedia 2006:

aa - ab - af - ak - als - am - an - ang - ar - arc - as - ast - av - ay - az - ba - bar - bat_smg - be - bg - bh - bi - bm - bn - bo - bpy - br - bs - bug - bxr - ca - cbk_zam - cdo - ce - ceb - ch - cho - chr - chy - closed_zh_tw - co - cr - cs - csb - cu - cv - cy - da - de - diq - dv - dz - ee - el - eml - en - eo - es - et - eu - fa - ff - fi - fiu_vro - fj - fo - fr - frp - fur - fy - ga - gd - gl - glk - gn - got - gu - gv - ha - haw - he - hi - ho - hr - hsb - ht - hu - hy - hz - ia - id - ie - ig - ii - ik - ilo - io - is - it - iu - ja - jbo - jv - ka - kg - ki - kj - kk - kl - km - kn - ko - kr - ks - ksh - ku - kv - kw - ky - la - lad - lb - lbe - lg - li - lij - lmo - ln - lo - lt - lv - map_bms - mg - mh - mi - mk - ml - mn - mo - mr - ms - mt - mus - my - mzn - na - nah - nap - nds - nds_nl - ne - new - ng - nl - nn - no - nov - nrm - nv - ny - oc - om - or - os - pa - pag - pam - pap - pdc - pi - pih - pl - pms - ps - pt - qu - rm - rmy - rn - ro - roa_rup - roa_tara - ru - ru_sib - rw - sa - sc - scn - sco - sd - se - searchcom - sg - sh - si - simple - sk - sl - sm - sn - so - sq - sr - ss - st - su - sv - sw - ta - te - test - tet - tg - th - ti - tk - tl - tlh - tn - to - tokipona - tpi - tr - ts - tt - tum - tw - ty - udm - ug - uk - ur - uz - ve - vec - vi - vls - vo - wa - war - wo - wuu - xal - xh - yi - yo - za - zea - zh - zh_classical - zh_min_nan - zh_yue - zu