|
Article on other languages:
|
Parrot はレジスタベースの仮想機械(仮想マシン)で、動的プログラミング言語を効率的に動作させるために開発されており、C言語で記述されている。Parrot はインタプリタのオーバーヘッドを削減するために、JITコンパイルを用いている。現在のところ Parrot アセンブリ言語とPIR(Parrot中間言語)をParrotのバイトコードに変換し、実行することができる。 ParrotプロジェクトはPerlのコミュニティにより開始され、Parrotはオープンソースとフリーソフトウェアのコミュニティの協力により開発されている。結果として、Parrotはライセンスの互換性 (Artistic License 2.0)、非常に広い範囲のプラットフォーム互換性、現代的なほとんどのプロセッサアーキテクチャに対する互換性、実行速度、サイズ(プラットフォームによるが 700K 程度)、Perlおよび全てではないがほとんどの現代的な動的プログラミング言語の様々な要求に対して柔軟に対応できること、に焦点を置いている。また、イントロスペクション、デバッガの機能、コンパイル時のセマンティックの調節 (semantic modulation) にも焦点を置いている。
歴史プロジェクトはPerl 6を実装するために始まり、非常に長い時間、「Perl 6 を動作させるために開発中のソフトウェア」であった。Parrotという名前は、「新しい想像上の言語 Parrot がPythonとPerlを統一するとアナウンスされた」という、エイプリルフールのジョークに由来している[1]。後に、PerlとPythonをサポートすることが目的で、プロジェクトはこの名前を採用した。 Parrot仮想マシンで動作するよう、複数の言語がParrotとともに開発されている。 プロジェクトの現在のバージョンは 0.7.1 であり、2008年9月16日にリリースされた。"Manu Aloha" とコードネームがついている。 過去のバージョンのリリースの日付は、Parrot のウェブサイト[2]に記載されている。 対応言語Parrot仮想マシンの目標はクライアントの言語をホストし、それらの相互運用を可能にすることである。目標を実現するには多数のハードルが存在する。 静的な言語と動的な言語静的な型付けと動的な型付け言語の異なる性質がParrotの開発の動機となっている。 現在のJava仮想マシンや共通言語ランタイム (CLR) などの人気のある仮想マシンは、静的に型付けされた言語のために開発されているが、Parrotが対象としている言語は動的な型付けのものである。 また、Java仮想マシンや現行のPerl 5 仮想マシンはスタックマシンである。Parrotの開発者達は、Parrotがレジスタを備えているため実際のハードウェアの設計に近く、バイトコードを機械語に近い速度で動作させるためにこれまでの膨大なコンパイラ最適化の学術的な資産をParrot仮想マシン用のコード生成に利用できる利点があると考えている。 関数言語的な概念Parrotは、クロージャや継続などの、いずれも例外処理やマルチスレッドと組み合わせた場合には、正しくかつ移植性を保って実現するのが特に難しいような関数型プログラミングの機能を数多くサポートしている。こうした問題を仮想マシンのレベルで解決することにより、Parrotのクライアント言語で実現する労力を著しく軽減することができる。 コンパイラツールParrotはコンパイラ作成ツールセットを提供している。再帰下降構文解析や演算子順位パーサーを表現できるハイブリッドのParser Grammar Engine (PGE) を備えており、この2つを同じ文法で自由に遷移できる。 PGEはTree Grammar Engine (TGE) に解析結果を与え、TGE は最適化のため、究極的にはコード生成のために、PGE が作成した解析構文木を変換する。 クライアントの言語予定されているPerl 6のサブセットに加えて、多数のプログラム言語がParrot assembly languageにコンパイルできるようにすることが次々に計画されている。 APL、BASIC、Befunge、Brainfuck、Cola、Forth、Jako、LISP、m4、Miniperl、Parakeet、OpenComal、PHP、Plot、Pheme、Punie、 Python、Ruby、Scheme、Span、Tcl(別名partcl)、URM、YAL、Zork Z-codeなどである。しかし、これらの言語の実装のほとんどは、まだ不完全であったり、実験的であったり、さらに放棄されてしまったりしている。 将来可能性のある言語やプロジェクトRubyコミュニティの一部にParrotに対する強い興味がある。すでにPythonからマシンコードへのJITコンパイラPsycoや、Python からバイドコードへのコンパイラJython、.NETプラットフォームへのコンパイラ IronPython、現在開発中の高レベルの最適化や静的なコード生成を目的としたPyPyなどがあるため、Pythonコミュニティは見守る様子を見せている。 Parrot の内部Parrot のコードには3つの形態がある。バイトコードはネイティブでParrotに解釈される。 Parrot Assembly Language (PASM) はバイトコードにコンパイルされる低レベルの言語である。 Parrot Intermediate Representation (PIR) はPASMより若干高レベルの言語であり、やはりバイトコードにコンパイルされる。PIRが各言語の実装の第一の目標である。PIRはParrotのルーチン間の呼び出し規約を透過的に管理し、よりよい文法、レジスタの割り当て、レジスタ溢れなどを提供する。PIRコードは通常拡張子 ".pir" のファイルに保存される。 IMCCがParrot向けの中間コードコンパイラで、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 Parrot の文化Parrot のキャッチフレーズは、"1つのバイトコードは全てを統べる"であり、J・R・R・トールキンのホビットの冒険や指輪物語の一つの指輪からの引用となっている。 2005年後半まで、Dan SugalskiがParrotの設計者のリードでありチーフアーキテクトであった。 長年のPerl、Linuxカーネル、C++のハッカーである Chip Salzenbergが2006年半ば開発者のリードとなったときにこれを引き継いだ。Punie のリードであり、Parrotのコンパイラツールのチーフアーキテクトである Allison Randal が現在のチーフアーキテクトである。開発に関する議論はparrot-portersメーリングリストで行われている。 また、 irc.perl.orgの#parrotsketchで毎週Parrotおよび言語開発者のためのIRCミーティングが開かれている。同じネットワークの#ParrotチャンネルはよくParrotのハッカーで溢れかえっている。 Parrotの設計上の議論はParrotのリポジトリ[3]に Parrot設計文書、PDDの形で存在している。チーフアーキテクトや指名された設計者が、ある機能についての考えや、インタフェース、設計メモを説明するためにこれらのドキュメントを記述している。Parrotハッカーは、これらの文書を実行可能なテストに変換し、次に実在する機能に変えて行く。 ライセンスParrot はフリーソフトウェアプロジェクトであり、Artistic License Version 2.0 の元配布されている。 関連項目外部リンク |
|||||||||||||||||||||||||||||
This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.
Mercedes Car
This site monitored by SitePinger.net