オープンソース・ソフトウェアの開発とダウンロード

CVS リポジトリの参照

Contents of /perldocjp/docs/perl/5.10.0/perlcompile.pod

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph


Revision 1.3 - (show annotations) (download)
Wed Jan 26 06:26:03 2011 UTC (13 years, 3 months ago) by iwai
Branch: MAIN
CVS Tags: HEAD
Changes since 1.2: +1 -1 lines
fix charset for encoding tag

1
2 *****************************************************
3 * GENERATED FILE, DO NOT EDIT *
4 * THIS IS NO SOURCE FILE, BUT RESULT OF COMPILATION *
5 *****************************************************
6
7 This file was generated by po4a(7). Do not store it (in cvs, for example),
8 but store the po file used as source file by po4a-translate.
9
10 In fact, consider this as a binary, and the po file as a regular .c file:
11 If the po get lost, keeping this translation up-to-date will be harder.
12
13 =encoding utf-8
14
15 =head1 NAME
16
17 perlcompile - Perlコンパイラ・トランスレータの解説
18
19 =head1 概説
20
21 Perlは常にコンパイラを持っています:ソースコードは内部コード(パースされたツリー)に変換され実行する前に最適化されます。バージョン5.005以来、Perlは最適化されたパースされたツリー(C<B>)を調査できる能力があるモジュールとともに配布されいます。そして、このツールは様々な便利なユーティリティを記述するのに用いられています。モジュールを内包し、PerlからCのコードに変換されネイティブに実行可能なファイルにコンパイルされるのです。
22
23 C<B>モジュールはパースされた構文木にアクセスすることを可能にします、又、その他のモジュール("back
24 ends")はその構文木を利用します。又、いくらか読みやすく出力します。その他の用途としてはサブルーチンの繋がりや変数がどこで使用されているかなどのクロスリファレンスを生成するのに用いられています。またコードのチェックにも用いられています。もう一つのバックエンドとしてコードを整頓し美しく読みやすいPerlソースとして再出力します。
25
26 なぜなら本来の目的がPerlプログラムと等価なC言語のコードを提供し、ネイティブで実行可能にすることにあるからです。C<B>モジュールは本来何もコンパイルはしないのですが、現在コンパイラとして知られています。このコンパイラは正確に言うとトランスレータやインスペクターに近いです。しかし、人々はPerlにインスペクタ・ツールではなくコンパイラーオプションを持ってほしいと思っています。あなたには何ができますか?
27
28 このドキュメントはPerlコンパイラについて解説しています。:Perlコンパイラを構成しているモジュール、バックエンドモジュールの使い方、そしてそこにどのような問題があるか、
29
30 =head2 構成
31
32 コンパイラのバックエンドはC<B::>以下に入っています。、またフロントエンド(あなたや、コンパイラユーザーが使うであろう)はOモジュールです。
33
34 重要なバックエンドのリスト。それぞれの0(今後実装するためのアウトラインの段階)から10(完璧に仕事を完了したはずで、バグがあるとは考えられません)のステータスナンバーは作業進行度を表しています。
35
36 =over 4
37
38 =item B::Lint
39
40 あなたのコードのに疑わしい部分があれば警告するバックエンドステータス:
41 6
42 (適切に動作しますが、限られたエリアしかチェックしません。).
43
44 =item B::Deparse
45
46 フォーマットが一貫しているか注意しながらのPerlソースの再構成を行うバックエンドステータス8:ほぼ正確に動作しますが、いくつかの不明瞭なものは失われるでしょう。
47
48 =item B::Xref
49
50 変数やサブルーチンの宣言のレポートステータス8:正しく働いているが、まだいくつかの根深いバグがあります。
51
52 =back
53
54 =head1 バックエンドを使用する
55
56 これらの章はどのようにコンパイラのバックエンドを利用するかを解説します。これらのバックエンドは開発が盛んに行われています。そこで、まず初めに十分に検証されているバックエンドについて解説し、そのあと開発中のバックエンドについて解説したいと思います。
57
58 OモジュールはB<-c>フラグをPerlに渡すことで自動的に有効になります。このフラグを有効にするとPerlはコードを実行せずにコンパイルだけを行います。バックエンドの出力の解説:
59
60 myperlprogram syntax OK
61
62 すべての出力に先立ってこのような表示がなされます。
63
64 =head2 クロスリファレンスのバックエンド
65
66 クロスリファレンスを作成するバックエンド(B::Xref)は変数の宣言やサブルーチンの使用法などの分析を行ったレポートを作成します。れいとして、I<pod2man>プログラムのレポートを掲載します:
67
68 Subroutine clear_noremap
69 Package (lexical)
70 $ready_to_print i1069, 1079
71 Package main
72 $& 1086
73 $. 1086
74 $0 1086
75 $1 1087
76 $2 1085, 1085
77 $3 1085, 1085
78 $ARGV 1086
79 %HTML_Escapes 1085, 1085
80
81 これはC<clear_noremap>で用いられている変数を表示しています。C<$ready_to_print>という変数はmy()(レキシカル)変数で、1069行目でmyで宣言されおり、1079行目で使用されております。メインパッケージのC<$&>という変数は1086行目で使われております。変数の後に続く数値はこの様な意味を表しています。
82
83 行番号は以下のプレフィックスを伴って出力されます。
84
85 =over 4
86
87 =item i
88
89 my()で宣言されたレキシカル変数
90
91 =item &
92
93 サブルーチンまたはメソッド呼び出し
94
95 =item s
96
97 サブルーチンの定義
98
99 =item r
100
101 フォーマットの定義
102
103 =back
104
105 クロスリファレンスを作成するにあたり有用なオプションとしてレポートを複数のファイルに分割して保存するというものがあります。たとえばI<myperlprogram>のレポートとI<report>ファイルに保存するには以下のようにします:
106
107 $ perl -MO=Xref,-oreport myperlprogram
108
109 =head2 デコンパイルバックエンド
110
111 デパースバックエンドはあなたのPerlソースがPerlコンパイラにどのようにパースされたかを表示します.
112 この出力は読みやすいように整形することができます。基本的な使用法は以下の通りです:
113
114 $ perl -MO=Deparse myperlprogram
115
116 出力を見るとあなたはPerlがコードをどのように整形すべきか分かっていないことが分かるでしょう。あなたはコードのブロックごとに自分で改行することになるでしょうしかし、その作業は以下のワンライナーで可能です:
117
118 $ perl -MO=Deparse -e '$op=shift||die "usage: $0
119 code [...]";chomp(@ARGV=<>)unless@ARGV; for(@ARGV){$was=$_;eval$op;
120 die$@ if$@; rename$was,$_ unless$was eq $_}'
121 -e syntax OK
122 $op = shift @ARGV || die("usage: $0 code [...]");
123 chomp(@ARGV = <ARGV>) unless @ARGV;
124 foreach $_ (@ARGV) {
125 $was = $_;
126 eval $op;
127 die $@ if $@;
128 rename $was, $_ unless $was eq $_;
129 }
130
131 デコンパイラは生成するコードに対するオプションを持っています例えば、あなたはインデントとのサイズを4から2に変更できます:
132
133 $ perl -MO=Deparse,-si2 myperlprogram
134
135 B<-p>オプションは可能なところにはカッコを挿入します:
136
137 $ perl -MO=Deparse -e 'print "Hello, world\n"'
138 -e syntax OK
139 print "Hello, world\n";
140 $ perl -MO=Deparse,-p -e 'print "Hello, world\n"'
141 -e syntax OK
142 print("Hello, world\n");
143
144 その他のフォーマットオプションはL<B::Deparse>を参照してください。
145
146 =head2 Lintバックエンド
147
148 Lintバックエンド(B::Lint)はプログラムを調査します他のプログラマの間違ったスタイルは他のプログラマの学習を促進します、よってどのような事について警告するかオプションで設定できます。
149
150 スタイルチェッカーをあなたのコードにたいして走らせるには以下のようにします:
151
152 $ perl -MO=Lint myperlprogram
153
154 無効な構文や、定義されていないサブルーチンをチェックするには以下のようにします:
155
156 $ perl -MO=Lint,-context,-undefined-subs myperlprogram
157
158 その他のオプションについてはL<B::Lint>を参照してください。
159
160 =head1 コンパイラに関するモジュールのリスト
161
162 =over 4
163
164 =item B
165
166 このモジュールはPerlプログラム内の機構を内省すること他できます。(Javaでは"reflective"といいます。)バックエンドモジュールはパースされた構文木にアクセスする機能を提供します。バックエンドモジュールのユーザーはBに関する経験は問われません。
167
168 =item O
169
170 このモジュールはコンパイラのバックエンドのフロントエンドモジュールです。通常では以下のように利用します:
171
172 $ perl -MO=Deparse myperlprogram
173
174 C<use
175 O'Deparse'>があなたのプログラムに含まれているように表示します。
176
177 =item B::Concise
178
179 このモジュールは簡潔な(かつ完璧な)パース済みのPerl構文木を表示します。このモジュールの出力はB::TerseやB::Debugよりもカスタマイズ可能です。(またそれらをエミュレートすることも可能です。)このモジュールはバックエンドを書いている人や、Perlの内部構造を学びたい人に役立つでしょう。しかし、このモジュールは平均的なプログラマには役に立たないでしょう。
180
181 =item B::Debug
182
183 このモジュールはPerlパースツリーを詳細にSTDOUTに表示します。このモジュールはバックエンドを書いている人やPerlの内部構造を学びたい人には役立つでしょう。しかし、このモジュールは平均的なプログラマには役に立たないでしょう。
184
185 =item B::Deparse
186
187 このモジュールはPerlコードのコンパイル済みのパースされた構文木を提供します。このモジュールは他人の書いたコードをデバッグ・再構成しようとしている人に役立つでしょう。また自分のコードを綺麗に出力するのにも役立ちます。使用法の詳細はL</"The
188 Decompiling Back End">を参照してください。
189
190 =item B::Lint
191
192 このモジュールはコンパイルされたあなたのソースコードを分析します。例えば、配列をC<scalar(@array)>することなくスカラーとして扱おうとしているとき使用法の詳細はL</"The
193 Lint Back End">を参照してください。
194
195 =item B::Showlex
196
197 このモジュールは関数内およびファイルないで使用されているmyで宣言された変数を表示します。myperlprogram内で定義されたmysub()サブルーチンないで使用されているmy()で宣言された変数を取得するには以下のようにします:
198
199 $ perl -MO=Showlex,mysub myperlprogram
200
201 myperlprogram内で使用されているmy()で宣言された変数を取得するには以下のようにします:
202
203 $ perl -MO=Showlex myperlprogram
204
205 [BROKEN]
206
207 =item B::Terse
208
209 このモジュールはパースされた構文木を出力しますが、B::Debugより得られる情報は少ないです。比較のための例としてC<print
210 "Hello,
211 world.">についてB::Debugは96行もの情報を出力しますが、B::Terseは6行しか出力しません。
212
213 このモジュールは自分のプログラムのバックエンドを書いている人及びPerlの内部について学ぼうとしている人に役立つでしょう。しかし、このモジュールは平均的なプログラマには役に立たないでしょう。
214
215 =item B::Xref
216
217 このモジュールは変数、サブルーチン、プログラム内で使用されたフォーマット、モジュールのロードそれぞれの場所についてレポートを出力します。使用法の詳細はL</"The
218 Cross Referencing Back End">を参照してください。
219
220 =back
221
222 =head1 既知の不具合
223
224 BEGIN{}ブロックはコードがコンパイルされる段階で実行されてしまいます。BEGIN{}内でのファイルを開閉、データベースの処理などの処理は通常どおりに動作しません。これにうまく対処するには、PerlのINIT{}ブロック構文を使います。この構文はあなたのコードがコンパイルされたあと、実行されるまえに処理されます。実行される順序:BEGIN{}ブロック、(コンパイラのバックエンドを用いて状態を保存できます)、INIT{}ブロック、コードの実行、END{}ブロック
225
226 =head1 著者
227
228 このドキュメントはNathan
229 Torkingtonによって書かれ、現在は
230 perl5-portersのメーリングリストI<perl5-porters@perl.org>によって保守されています。
231

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26