Parrot

Article on other languages:

del.icio.us del.icio.us
Digg Digg
Furl Furl
Reddit Reddit
Rojo Rojo
Add to OnlyWire
Parrot virtual machine
最新版 0.7.1 / 2008年9月16日
対応OS クロスプラットフォーム
サポート状況 仮想機械
ライセンス Artistic License 2.0
公式サイト http://www.parrotcode.org/
  

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という名前は、「新しい想像上の言語 ParrotPythonPerlを統一するとアナウンスされた」という、エイプリルフールのジョークに由来している[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にコンパイルできるようにすることが次々に計画されている。 APLBASICBefungeBrainfuckColaForthJakoLISPm4MiniperlParakeetOpenComalPHPPlot、Pheme、PuniePythonRubySchemeSpanTcl(別名partcl)、URMYALZork 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種類のレジスタを提供する。

  • I: ネイティブの整数
  • N: 浮動小数点数
  • S: Unicodeをサポートする先進的な文字列レジスタ
  • P: Parrotのオブジェクト型であるPMC(あるいは Parrot Magic Cookie

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 Salzenberg2006年半ば開発者のリードとなったときにこれを引き継いだ。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.


Giant Panda

Mercedes Car
James Bond Guide
This site monitored by SitePinger.net