O - Perl コンパイラバックエンドへの汎用インターフェース

目次


名前

O - Perl コンパイラバックエンドへの汎用インターフェース


概要

	perl -MO=[-q,]Backend[,OPTIONS] foo.pl

説明

これは Perl コンパイラへのフロントエンドとして使われる モジュールです.

モジュールに対して -q オプションを渡すと, コンパイル中 STDOUT ファイルハンドルが $O::BEGIN_output に対してリダイレクトされます. これによって BEGIN ブロックや use されたモジュールから STDOUT への出力が, 出力される代わりにこの変数に格納されます. これは結果を出力するバックエンド (Deparse, Concise 等)を使う際に便利です. そしてその出力はコンパイル されているコードから生成される出力と混同しません.

-qq オプションは -q と同じように振る舞います. 違いは deparse 終了時に STDERR を閉じることです. これは通常 perl が通常生成する "Syntax OK" メッセージを抑制します.


慣例

多くのコンパイラバックエンドは次のような慣例を持っています: OPTIONS はコンマで区切られた(空白を持たない)単語のリストから成る. -v オプションは大抵バックエンドを verbose モードにする. -ofile オプションは出力を標準出力ではなく file に生成する. 様々な文字が続く -D オプションは内部でバッグフラグを有効にする. 欲しているバックエンドに関するドキュメントも読んでください. (以下ではB::Backendとします.)


実装

このセクションではこのモジュールを通して使うことができる コンパイラバックエンドモジュールを書こうとしている人にのみ 必要となります.

SYNOPSIS(概要)セクションにかかれているコマンドラインは以下のような Perl コードに対応します.

    use O ("Backend", OPTIONS);

importと呼ばれる関数で適切なB::Backendモジュールをロードし, そのパッケージのcompile関数を OPTIONS を渡して呼び出します. この関数は CALLBACK と呼ばれる関数リファレンスを返す必要があります. 次に, "コンパイルのみ" フラグ(コマンドラインオプション -c と 等価です)が設定され, CALLBACK を呼び出すCHECKブロックが登録されます. そしてコマンドラインで指定されているメインPerlプログラムが読み込まれ, parse, そして内部構文木形式へとコンパイルされます. -cフラグが 設定されているときは, プログラムは実行を開始されません(もちろん BEGINブロックは除いて)が, コンパイラバックエンドによって登録された CALLBACK 関数は呼び出されます.

要約すると, コンパイラバックエンドモジュールは "B::Foo" として 呼ばれるべきで, その名前に対応するディレクトリに配置します. そして compile という関数を定義しなければ成りません. ユーザが次のように入力すると,

    perl -MO=Foo,OPTIONS foo.pl

その関数が呼び出され, OPTIONS (をコンマで切り分けた物)が引数として 渡されます. この関数はメインコンパイル関数となる関数リファレンスを 返さなければなりません. ユーザのプログラムがロード, そしてparseされ ると, 関数が返した関数リファレンスが呼び出され, コンパイルを実行します. コンパイルは大抵 B モジュールの機能を使って行われるでしょう.


バグ

perl が PerlIO のサポート付きでコンパイルされていないと -q 及び -qq オプションは正しく動作しません : $O::BEGIN_output にリダイレクトされる代わりに STDOUT が閉じられるでしょう.


著者

Malcolm Beattie, mbeattie@sable.ox.ac.uk

O - Perl コンパイラバックエンドへの汎用インターフェース

索引

O - Perl コンパイラバックエンドへの汎用インターフェース