| 最終リリース | 8.1.0 / 2016年2月16日[1] |
|---|---|
| リポジトリ |
|
| 書かれた | C |
| オペレーティング·システム | クロスプラットフォーム |
| 後継 | MoarVM (Raku 用) |
| タイプ | 仮想マシン |
| ライセンス | 芸術的ライセンス2.0 |
| Webサイト | 詳しくはこちら |
Parrotは、動的言語を効率的に実行するために設計された、廃止されたレジスタベースの プロセス仮想マシンです。Parrotアセンブリ言語とParrot中間表現(PIR、中間言語)をParrotバイトコードにコンパイルして実行することができます。Parrotは無料のオープンソースソフトウェアです。[2]
Parrot はPerlコミュニティによって開始され、オープンソースおよびフリーソフトウェア コミュニティの支援を受けて開発されました。その結果、Perl とのライセンス互換性( Artistic License 2.0 )、さまざまなシステム間でのプラットフォーム互換性、ほとんどの最新プロセッサ間でのプロセッサ アーキテクチャ互換性、実行速度、小さいサイズ (プラットフォームによって異なりますが約 700k)、 Rakuやその他の最新の動的言語によるさまざまな要求に対応できる柔軟性に重点が置かれました。
開発用の安定したアプリケーションプログラミングインターフェース(API)を備えたバージョン 1.0 は、2009 年 3 月 17 日にリリースされました。[3]最後のバージョンはリリース 8.1.0「Andean Parakeet」です。[1] Parrot は、主な用途 (Raku) でMoarVMに取って代わられ、サポートされている他の言語のいずれでも主流の VM になることはなかったため、2021 年 8 月に正式に廃止されました。[4]
歴史
Parrotという名前は、 PythonとPerlを統合する架空の言語Parrotを発表したエイプリルフールのジョークに由来しています。[5] [6]この名前は後に、Raku、Python、およびその他のプログラミング言語のサポートを目的としたParrotプロジェクト(当初はRaku開発プロジェクトの一部)によって採用されました。
Parrot Foundationは2014年に解散しました。[7] Foundationは、 Parrotプロジェクトの著作権と商標を保持し、言語実装とコアコードベースの開発を推進し、Parrotコミュニティの成長の基盤を提供し、他の言語コミュニティに働きかけるために2008年に設立されました。[8]
過去の設計上の決定は、Parrotリポジトリ内のParrot設計文書(PDD)の形式で文書化されています。[9]
2005年後半まで、ダン・スガルスキがパロットの主任設計者兼チーフアーキテクトを務めた。長年のPerl、Linuxカーネル、C++ハッカーであるチップ・ザルゼンバーグが2006年半ばまで引き継ぎ、その後主任開発者となった。パロットのコンパイラツールの主任アーキテクトでPunieの主任開発者であるアリソン・ランドルは、2010年10月中旬までチーフアーキテクトを務めたが、その後辞任し、クリストフ・オットーを新しいチーフアーキテクトに選んだ。[10]
言語
Parrot 仮想マシンの目標は、クライアント言語をホストし、それらの間の相互運用を可能にすることでした。この目標を達成するには、いくつかのハードルがあり、特に、言語間で高レベルの概念、データ、およびデータ構造をマッピングすることが困難です。
静的言語と動的言語
静的型付け言語と動的型付け言語の異なる特性がParrot の設計の動機となりました。Java仮想マシンや.NETプラットフォームのCommon Language Runtimeなど、現在普及している仮想マシンは静的型付け言語用に設計されていますが、Parrot が対象とする言語は動的型付け言語です。
Java 仮想マシンや現在の Perl 5 仮想マシンなどの仮想マシンもスタックベースです。Parrot の開発者は、ハードウェア設計により近いという理由でレジスタベースの設計を選択しました。これにより、コンパイラ最適化に関する膨大な文献を使用して、マシンコードに近い速度で実行できる Parrot 仮想マシンのバイトコードを生成することができます。[要出典] LLVM、Lua VM、Inferno のDisなど、他のレジスタベースの仮想マシンは、Parrot の設計の一部に影響を与えました。
機能概念
Parrot は、クロージャや継続など、関数型プログラミングのさまざまな機能を豊富にサポートしています。これらはどちらも、例外処理やスレッドと組み合わせると特に正しく移植可能な実装が困難になることがあります。最大の利点は、メソッドを持つオブジェクトの動的な拡張性です。これにより、ポリモーフィック コンテナー(PMC) と関連するオペコードが可能になります。これらの問題に対するソリューションを仮想マシン レベルで実装すると、個々のクライアント言語で問題を解決する必要がなくなります。
コンパイラツール
Parrotは、コンパイラ作成ツールスイート[11]を提供しています。その中には、再帰下降パーサーと演算子優先順位パーサーを表現できるハイブリッドパーサージェネレーターであるパーサー文法エンジン(PGE)が含まれており、単一の文法で2つのパーサーを自由に遷移できます。PGEはツリー文法エンジン(TGE)に入力され、ツリー文法エンジンはPGEによって生成された構文解析ツリーをさらに変換して最適化し、最終的にはコード生成を行います。
実装
Parrot VM をターゲットとした最も完成度の高い言語実装は、Raku (当時は Rakudo Perl 6 として知られていた)、Lua、および「Winxed」と呼ばれる新しい言語でした。[12] PHP、Python、Rubyなどの他の多くの言語を実装するプロジェクトが開始されました。また、 Befungeや「squaak」チュートリアル言語などの難解なデモンストレーション言語も開始されました。 [13]これらのプロジェクトのいずれも、それぞれの言語の主要な実装になることには成功しませんでした。[4]
内部
Parrot のプログラム コードには 3 つの形式があります。
- バイトコード[14]はバイナリであり、Parrotによってネイティブに解釈されます。バイトコードは通常、ファイル名拡張子が「.pbc」のファイルに保存されます。
- Parrot アセンブリ言語(PASM) は、バイトコードにコンパイルされる低レベル言語です。PASM コードは通常、ファイル名拡張子が「.pasm」のファイルに保存されます。
- Parrot中間表現(PIR [15])はPASMよりわずかに高水準の言語であり、バイトコードにコンパイルされます。これは言語実装の主なターゲットです。PIRはParrotのルーチン間呼び出し規約を透過的に管理し、構文の改善、レジスタ割り当てなどを提供します。PIRコードは通常、ファイル名拡張子「.pir」のファイルに保存されます。
例
レジスター
Parrot は、ほとんどのハードウェアCPUと同様にレジスタベースであり、スタックベースのほとんどの仮想マシンとは異なります。Parrot は、次の 4 種類のレジスタを提供します。
Parrot は任意の数のレジスタを提供します。この数はサブルーチンごとにコンパイル時に固定されます。
算術演算
PASMでは
set I1 , 4 inc I1 # I1 は現在 5 ですadd I1 , 2 # I1 は現在 7 ですset N1 , 42 .0 dec N1 # N1 は現在 41.0 ですsub N1 , 2 .0 # N1 は現在 39.0 ですprint I1 print ' , ' print N1 print "\ n " end
PIRでは
. sub 'main' : main
$I1 = 4
inc $I1 # $I1 は現在 5
$I1 += 2 # $I1 は現在 7
$N1 = 42.0
dec $N1 # $N1 は現在 41.0
$N1 -= 2.0 # $N1 は現在 39.0
print $I1
print ', '
print $N1
print "\n"
. end
モッドパロット
mod_parrotは、 Apache Web サーバーのオプション モジュールです。Apache サーバーに Parrot 仮想マシン インタープリターを組み込み、Apache API へのアクセスを提供して、ハンドラーをParrot アセンブリ言語、または Parrot を対象とした任意の高水準言語 で記述できるようにします。
参照
参考文献
- ^ ab 「新しくサポートされたリリース 8.1.0「Andean Parakeet」」。Parrot Foundation。2016 年 2 月 16 日。2016 年 9 月 26 日閲覧。
- ^ 「Parrot Contributor License Agreement 1.0」(PDF) 。Parrot Foundation。2010年 8 月 16 日時点のオリジナル(PDF)からアーカイブ。2009年 3 月 18 日閲覧。
- ^ 「Parrot Roadmap」。Parrot Foundation。2008年11月20日。2010年4月15日時点のオリジナルよりアーカイブ。2008年11月20日閲覧。
- ^ ab 「非アクティブなParrot | Parrot VM」。www.parrot.org。
- ^ 「オウムいたずらの裏話 - O'Reilly Media」 Oreilly.com 2001-04-06 . 2014-02-25閲覧。
- ^ 「Programming Parrot」。Perl.com。2010年7月18日時点のオリジナルよりアーカイブ。2014年2月25日閲覧。
- ^ 「Corporations Advanced Search」ワシントン州ライセンス局。UBI 602 839 536。2021年4月9日閲覧。
- ^ Parrot Foundation の発表 2008 年 6 月 29 日アーカイブ、Wayback Machineより
- ^ 「Parrot 6.1.0 - Parrot 設計ドキュメント (PDD)」。Docs.parrot.org。2014年 2 月 25 日閲覧。
- ^ Otto, Christoph (2010-10-21). 「reparrot: Parrot に新しいアーキテクトが誕生。次は何か?」 Reparrot.blogspot.com . 2014-02-25閲覧。
- ^ [1] 2009年5月9日アーカイブ、Wayback Machine
- ^ 「言語 - Parrot VM」。parrot.org 。 2023年11月18日閲覧。
- ^ 「言語 – Parrot」。Parrot 開発 wiki 。2023年 11 月 18 日閲覧。
- ^ 「Parrot Bytecode (PBC) フォーマット - parrotcode」。2008 年 12 月 24 日時点のオリジナルよりアーカイブ。2009年 7 月 15 日閲覧。
- ^ [2] 2009年7月20日アーカイブ、Wayback Machine
外部リンク
- 公式サイト
- Perl 6 と Parrot のリンク
- mod_parrotの場合:
- 「Mod_parrot ウェブサイト」。parrot.org。Jeff Horwitz。2023年 8 月 18 日閲覧。
- Horwitz , Jeff (2004 年 12 月 22 日)。「mod_parrot の紹介」。perl.com。O'Reilly Media 。
- Josh McAdams (2008 年 6 月 3 日)。「Jeff Horwitz on mod_parrot」。Perlcast。Perlcast.com。2008年 9 月 7 日にオリジナルからアーカイブ。2008年 6 月 9 日に取得。
