parrot事始め

昨日は嘘ばっかり書いていた。pasmじゃなく pir形式だったりとか、 pbcは言語の実体じゃなくpirとかの形式をコンパイルした後のバイトコードだったり*1。とりあえずまとめ。

Parrotとは

ParrotはレジスタベースのVM。まあこのアタリは言うまでもなく。2001年のエイプリルフールが誕生日。動的型付き言語をターゲットに設計されている。

ファイル形式

ファイル形式は4タイプある。

  1. PIR (Parrot Intermediate Representation)
  2. PASM(Parrot Assembly)
  3. PAST(Parrot Abstract Syntax Tree)
  4. PBC(Parrot Bytecode)

下に行くほど抽象度が低い。
1.は昨日見ていたヤツ。抽象度がある程度あってサブルーチンコールみたいなのベースとかいろいろ糖衣構文があるやつ。手書きとコンパイラ出力両方を念頭にいれている。
2.はもう少し抽象度が低い。1.だと = とか callみたいなのが使えていたが、このレベルでは昨日見たようにfind_subみたいな事をしないといけない。
3.はまさにコンパイラ用の形式で抽象構文木をそのまま入力できるらしい。

そして最後の4.は最終的にparrotに入力されたコードはこれに変換される、という終着駅。これもプラットフォーム非依存

レジスタ

レジスタには Integer, Number, String, PMCsの4種類(4が多いなあ)。前三つは説明の必要もなさそうだけど、 PMCのみ

PMC

Polymorphic Container でいわゆる compositeな構造体とか(配列やハッシュなんかも)。

しかし説明を見ているとIntegerはそのマシンのワードであるとか、本当にプラットフォーム非依存なのかいな、と不思議に思ってしまう事もちらほら。

うあ、時間がない。後で書く。かも。

で昨日のは

どうやらperl 6コード部分で出ているメッセージではなく、perl 6 本体が出しているメッセージらしい。そこだけわかった。どうやって解析するのかはさぱーり。しかし面白そう。
会社さぼりてー

*1:こういうのを直感で分かるようになりたいものです