argra****@users*****
argra****@users*****
2008年 12月 19日 (金) 02:17:18 JST
Index: docs/perl/5.10.0/perlembed.pod diff -u docs/perl/5.10.0/perlembed.pod:1.1 docs/perl/5.10.0/perlembed.pod:1.2 --- docs/perl/5.10.0/perlembed.pod:1.1 Thu Dec 18 03:49:03 2008 +++ docs/perl/5.10.0/perlembed.pod Fri Dec 19 02:17:18 2008 @@ -87,8 +87,7 @@ =end original -Read on... -(TBT) +読み続けてください… =back @@ -484,12 +483,10 @@ 通常は C<perl_parse> はその最終引数として C<env> を取りますが、 ここではカレントの環境をそのまま使うことを示す C<NULL> に置き換えられています。 -The macros -PERL_SYS_INIT3() and PERL_SYS_TERM() provide system-specific tune up -of the C runtime environment necessary to run Perl interpreters; since -PERL_SYS_INIT3() may change C<env>, it may be more appropriate to provide -C<env> as an argument to perl_parse(). -(TBT) +PERL_SYS_INIT3() と PERL_SYS_TERM() のマクロは、Perl インタプリタを +実行するのに必要な C ランタイム環境の、システム固有の調整を提供します; +PERL_SYS_INIT3() は C<env> を変更するかもしれないので、perl_parse() の +引数として C<env> を提供する方がより適切です。 =begin original @@ -650,11 +647,9 @@ =end original -この特殊な状況では、私たちは I<perl_run> を呼ぶ必要はありませんが、 -, as we set -the PL_exit_flag PERL_EXIT_DESTRUCT_END which executes END blocks in -perl_destruct. -(TBT) +この特殊な状況では、私たちは I<perl_run> を呼ぶ必要はありません; +perl_destruct で END ブロックを実行する +PL_exit_flag PERL_EXIT_DESTRUCT_END をセットしているからです。 =begin original @@ -1087,11 +1082,9 @@ =end original -スタックを説明しようとするとき、ほとんどのコンピューター科学の教 -科書はばね仕掛けの columns of cafeteria plates のようなはっきりとしない -解説をします。 -最後にスタックに押し込んだ(push)ものが最初に -取り出す(pop)ものです。 +スタックを説明しようとするとき、ほとんどのコンピュータ科学の教科書は +食堂のプレート皿のばね仕掛けの仕切りのようなはっきりとしない解説をします。 +最後にスタックに押し込んだ(push)ものが最初に取り出す(pop)ものです。 これが、私たちの目的のために行うことです。 あなたの C プログラムでは、幾つかの引数を「Perl スタック」へプッシュして、 魔法が掛かる間に目を閉じれば結果、つまりあなたの使った @@ -1496,6 +1489,8 @@ =head2 Execution of END blocks +(END ブロックの実行) + =begin original Traditionally END blocks have been executed at the end of the perl_run. @@ -1506,15 +1501,17 @@ =end original -Traditionally END blocks have been executed at the end of the perl_run. -This causes problems for applications that never call perl_run. Since -perl 5.7.2 you can specify C<PL_exit_flags |= PERL_EXIT_DESTRUCT_END> -to get the new behaviour. This also enables the running of END blocks if -the perl_parse fails and C<perl_destruct> will return the exit value. -(TBT) +伝統的に END ブロックは perl_run の最後に実行されてきました。 +これは、perl_run を呼び出さないアプリケーションで問題となります。 +perl 5.7.2 から、新しい振る舞いを取らせるために +C<PL_exit_flags |= PERL_EXIT_DESTRUCT_END> を指定できます。 +これはまた、もし perl_parse が失敗して C<perl_destruct> が終了値を返した +ときにも END ブロックを実行するようにします。 =head2 $0 assignments +($0 への代入) + =begin original When a perl script assigns a value to $0 then the perl runtime will @@ -1527,14 +1524,12 @@ =end original -When a perl script assigns a value to $0 then the perl runtime will -try to make this value show up as the program name reported by "ps" by -updating the memory pointed to by the argv passed to perl_parse() and -also calling API functions like setproctitle() where available. This -behaviour might not be appropriate when embedding perl and can be -disabled by assigning the value C<1> to the variable C<PL_origalen> -before perl_parse() is called. -(TBT) +perl スクリプトが $0 に値を代入すると、perl のランタイムは、perl_parse() に +渡された argv が指すメモリを更新して、利用可能なら setproctitle() のような +API 関数も呼び出すことによって、その値を "ps" で報告される +プログラム名として表示させようとします。 +この振る舞いは組み込み perl では不適切かもしれないので、perl_parse() が +呼び出される前に C<PL_origalen> に C<1> を代入することで無効にできます。 =begin original @@ -1545,11 +1540,11 @@ =end original -The F<persistent.c> example above is for instance likely to segfault -when $0 is assigned to if the C<PL_origalen = 1;> assignment is -removed. This because perl will try to write to the read only memory -of the C<embedding[]> strings. -(TBT) +例えば、上述の F<persistent.c> の例は、もし C<PL_origalen = 1;> 代入を +取り除くと、$0 が代入されたときにおそらくセグメンテーションフォルトが +起きるでしょう。 +これは C<embedding[]> 文字列の読み込み専用メモリに +書き込もうとするからです。 =head2 Maintaining multiple interpreter instances @@ -1581,12 +1576,10 @@ プログラムは次のインタプリタが構築されるよりB<前に>、解放が 発生することに注意を払い、それを保証しなければなりません。 -デフォルトでは、, when perl is not -built with any special options, -グローバル変数 C<PL_perl_destruct_level> は C<0> に設定されています。 +デフォルトでは、perl が特殊なオプション付きでビルドされていなければ、 +グローバル変数 C<PL_perl_destruct_level> は C<0> に設定されています; これはプログラムが生涯ただ一つのインタプリタを作っただけの -ときには余分な後始末が不要であるからです。 -(TBT) +ときには、普通は余分な後始末が不要であるからです。 =begin original @@ -1621,10 +1614,8 @@ I<perl_destruct()> が呼ばれたとき、インタプリタの構文解析木と シンボルテーブルは始末され、そしてグローバル変数がリセットされます。 -The -second assignment to C<PL_perl_destruct_level> is needed because -perl_construct resets it to C<0>. -(TBT) +C<PL_perl_destruct_level> への第 2 引数は、perl_construct を C<0> に +リセットするために必要です。 =begin original @@ -1648,18 +1639,15 @@ これは可能なことですが、Perlビルドしたときに Configure オプション C<-Dusemultiplicity> か C<-Dusethreads -Duseithreads> を 使ったときのみです。 -デフォルトでは、 -enabling one of these Configure options -sets the per-interpreter global variable -C<PL_perl_destruct_level> が C<1> に設定され、 -so that thorough cleaning is automatic and interpreter variables -are initialized correctly. Even if you don't intend to run two or -more interpreters at the same time, but to run them sequentially, like -in the above example, it is recommended to build perl with the -C<-Dusemultiplicity> option otherwise some interpreter variables may -not be initialized correctly between consecutive runs and your -application may crash. -(TBT) +デフォルトでは、これらの Configure オプションの一つが有効になると +インタプリタ単位のグローバル変数 C<PL_perl_destruct_level> が C<1> に +設定され、これによって徹底的なクリーニングは自動的で、インタプリタ変数は +正しく初期化されます。 +同時に複数のインタプリタを実行するつもりがない場合でも、上述の例のように +順番に実行させるつもりなら、C<-Dusemultiplicity> オプションをつけて +perl をビルドすることを推奨します; さもなければ連続した実行の間に +インタプリタ変数が正しく初期化されずに、アプリケーションが +クラッシュするかもしれません。 =begin original @@ -1667,8 +1655,7 @@ =end original -See also L<perlxs/Thread-aware system interfaces>. -(TBT) +L<perlxs/Thread-aware system interfaces> も参照してください。 =begin original @@ -1679,11 +1666,10 @@ =end original -Using C<-Dusethreads -Duseithreads> rather than C<-Dusemultiplicity> -is more appropriate if you intend to run multiple interpreters -concurrently in different threads, because it enables support for -linking in the thread libraries of your system with the interpreter. -(TBT) +もし、異なるスレッドで同時に複数のインタプリタを実行するつもりなら、 +C<-Dusemultiplicity> ではなく C<-Dusethreads -Duseithreads> がより適切です; +なぜならこれはインタプリタにシステムのスレッドライブラリを +リンクすることへの対応を有効にするからです。 =begin original @@ -1691,8 +1677,7 @@ =end original -Let's give it a try: -(TBT) +試してみましょう: #include <EXTERN.h> #include <perl.h> @@ -1749,12 +1734,12 @@ =end original -Note the calls to PERL_SET_CONTEXT(). These are necessary to initialize -the global state that tracks which interpreter is the "current" one on -the particular process or thread that may be running it. It should -always be used if you have more than one interpreter and are making -perl API calls on both interpreters in an interleaved fashion. -(TBT) +PERL_SET_CONTEXT() の呼び出しに注意してください。 +実行されている個々のプロセスやスレッドで、どのインタプリタが +「カレント」なのかを追跡するグローバルな状態を初期化するために必要です。 +the particular process or thread that may be running it. +もし複数のインタプリタがあって、両方のインタプリタに交互に perl API +呼び出しを行うなら、常にこれを行うべきです。 =begin original @@ -1764,10 +1749,9 @@ =end original -PERL_SET_CONTEXT(interp) should also be called whenever C<interp> is -used by a thread that did not create it (using either perl_alloc(), or -the more esoteric perl_clone()). -(TBT) +(perl_alloc() か、より難解な perl_clone() を使って、) C<interp> を +作ったのではないスレッドによって使われるときはいつでも、 +PERL_SET_CONTEXT(interp) も呼び出されるべきです。 =begin original @@ -1956,9 +1940,7 @@ =end original -In general, all of the source code shown here should work unmodified under -Windows. -(TBT) +一般的に、ここで示した全てのコードは Windows でも無変更で動作するはずです。 =begin original @@ -1970,13 +1952,12 @@ =end original -However, there are some caveats about the command-line examples shown. +しかし、コマンドラインの例についてはいくつかの問題があります。 まず、バッククォートは、Win32 ネイティブのコマンドシェルでは働きません。 CPAN にある ExtUtils::Embed キットには、B<genmake> という単一の C の ソースファイルからプログラムをビルドするための単純な makefile を生成する スクリプトが一緒にあります。 これは以下のように使います: -(TBT) C:\ExtUtils-Embed\eg> perl genmake interp.c C:\ExtUtils-Embed\eg> nmake @@ -2020,6 +2001,8 @@ =head1 Hiding Perl_ +(Perl_ を隠す) + =begin original If you completely hide the short forms forms of the Perl public API, @@ -2028,10 +2011,9 @@ =end original -If you completely hide the short forms forms of the Perl public API, -add -DPERL_NO_SHORT_NAMES to the compilation flags. This means that -for example instead of writing -(TBT) +もし Perl public API の短い形式を完全に隠したいなら、 +コンパイルオプションに -DPERL_NO_SHORT_NAMES を追加してください。 +これは、例えば以下のように書く代わりに: warn("%d bottles of beer on the wall", bottlecount); @@ -2041,8 +2023,7 @@ =end original -you will have to write the explicit full form -(TBT) +以下のように明示的に完全な形式で書く必要があります: Perl_warn(aTHX_ "%d bottles of beer on the wall", bottlecount); @@ -2056,12 +2037,11 @@ =end original -(See L<perlguts/Background and PERL_IMPLICIT_CONTEXT for the explanation -of the C<aTHX_>.> ) Hiding the short forms is very useful for avoiding -all sorts of nasty (C preprocessor or otherwise) conflicts with other -software packages (Perl defines about 2400 APIs with these short names, -take or leave few hundred, so there certainly is room for conflict.) -(TBT) +(C<aTHX_> の説明については +L<perlguts/Background and PERL_IMPLICIT_CONTEXT> を参照してください。) +短い形式を隠すことは、その他のソフトウェアパッケージとのあらゆる種類の +不快なもの(C プリプロセッサやその他のもの)との衝突を避けるためにとても +便利です。 =head1 MORAL @@ -2073,8 +2053,8 @@ =end original -あなたはCでB<より速いコードを>書くことができるかもしれません。 -でも、あなた常にPerlでB<コードをより早く>書くことができるのです。 +あなたは時々 C で B<より速いコードを> 書くことができるかもしれませんが、 +あなた常に Perl で B<コードをより早く> 書くことができるのです。 これは片方でもう片方のものを作ることができ、望むままに 組み合わせることができるからです。 @@ -2089,11 +2069,10 @@ =end original -Jon Orwant <F<orwan****@media*****>> and Doug MacEachern -<F<dougm****@coval*****>>, with small contributions from Tim Bunce, Tom -Christiansen, Guy Decoux, Hallvard Furuseth, Dov Grobgeld, and Ilya -Zakharevich. -(TBT) +Jon Orwant <F<orwan****@media*****>> と Doug MacEachern +<F<dougm****@coval*****>>; さらに Tim Bunce, Tom Christiansen, +Guy Decoux, Hallvard Furuseth, Dov Grobgeld, Ilya Zakharevich からの +小さな貢献によります。 =begin original @@ -2107,14 +2086,13 @@ =end original -Doug MacEachern has an article on embedding in Volume 1, Issue 4 of -The Perl Journal ( http://www.tpj.com/ ). Doug is also the developer of the -most widely-used Perl embedding: the mod_perl system -(perl.apache.org), which embeds Perl in the Apache web server. -Oracle, Binary Evolution, ActiveState, and Ben Sugars's nsapi_perl -have used this model for Oracle, Netscape and Internet Information -Server Perl plugins. -(TBT) +Doug MacEachern は The Perl Journal ( http://www.tpj.com/ ) の +Volume 1, Issue 4 に組み込みの記事を書いています。 +Doug はまた、もっとも広く使われている Perl 組み込みの作者です: +mod_perl (perl.apache.org) は Apache ウェブサーバに Perl を組み込みます。 +Oracle, Binary Evolution, ActiveState, Ben Sugars の nsapi_perl は +このモデルを Oracle, Netscape, Internet Information Server の +Perl プラグインに使っています。 =head1 COPYRIGHT