argra****@users*****
argra****@users*****
2011年 12月 14日 (水) 01:17:19 JST
Index: docs/perl/5.10.1/perlpragma.pod diff -u docs/perl/5.10.1/perlpragma.pod:1.1 docs/perl/5.10.1/perlpragma.pod:1.2 --- docs/perl/5.10.1/perlpragma.pod:1.1 Tue Sep 13 05:58:08 2011 +++ docs/perl/5.10.1/perlpragma.pod Wed Dec 14 01:17:19 2011 @@ -22,14 +22,16 @@ =end original -A pragma is a module which influences some aspect of the compile time or run -time behaviour of Perl, such as C<strict> or C<warnings>. With Perl 5.10 you -are no longer limited to the built in pragmata; you can now create user -pragmata that modify the behaviour of user functions within a lexical scope. -(TBT) +プラグマは、C<strict> や C<warnings> のように、コンパイル時や実行時の Perl の +振る舞いにある種の影響を与えるモジュールです。 +Perl 5.10 から、プラグマは組み込みのものに制限されません; レキシカル +スコープ内のユーザー関数の振る舞いを変えるユーザープラグマを +作れるようになりました。 =head1 A basic example +(基本的な例) + =begin original For example, say you need to create a class implementing overloaded @@ -38,10 +40,10 @@ =end original -For example, say you need to create a class implementing overloaded -mathematical operators, and would like to provide your own pragma that -functions much like C<use integer;> You'd like this code -(TBT) +例えば、オーバーロードされた算術演算子を実装するクラスを作る必要が +あるとして、C<use integer;> のように働く独自のプラグマを提供したいと +します。 +以下のようなコードで use MyMaths; @@ -69,8 +71,7 @@ =end original -to give the output -(TBT) +以下のように出力されます A: 4.6 B: 4 @@ -86,10 +87,9 @@ =end original -I<i.e.>, where C<use myint;> is in effect, addition operations are forced -to integer, whereas by default they are not, with the default behaviour being -restored via C<no myint;> -(TBT) +I<つまり>、C<use myint;> が有効のときには家宝演算子は整数に強制され、 +一方デフォルトではそうではありませんし、デフォルトの振る舞いは +C<no myint;> で復元されています。 =begin original @@ -98,9 +98,7 @@ =end original -The minimal implementation of the package C<MyMaths> would be something like -this: -(TBT) +C<MyMaths> パッケージの最低限の実装は以下のようなものです: package MyMaths; use warnings; @@ -130,9 +128,8 @@ =end original -Note how we load the user pragma C<myint> with an empty list C<()> to -prevent its C<import> being called. -(TBT) +C<import> が呼び出されないようにユーザープラグマ C<myint> を空リスト +C<()> 付きで呼び出す方法に注意してください。 =begin original @@ -140,8 +137,7 @@ =end original -The interaction with the Perl compilation happens inside package C<myint>: -(TBT) +Perl コンパイラとの相互作用はパッケージ C<myint> の内側で起こります: package myint; @@ -171,9 +167,8 @@ =end original -As pragmata are implemented as modules, like any other module, C<use myint;> -becomes -(TBT) +他のモジュールと同様、プラグマもモジュールとして実装され、C<use myint;> は +以下のようになり: BEGIN { require myint; @@ -186,8 +181,7 @@ =end original -and C<no myint;> is -(TBT) +C<no myint;> は以下のようになります: BEGIN { require myint; @@ -201,9 +195,8 @@ =end original -Hence the C<import> and C<unimport> routines are called at B<compile time> -for the user's code. -(TBT) +従って C<import> と C<unimport> のルーチンはユーザーコードの +B<コンパイル時> に呼び出されます。 =begin original @@ -220,20 +213,21 @@ =end original -User pragmata store their state by writing to the magical hash C<%^H>, -hence these two routines manipulate it. The state information in C<%^H> is -stored in the optree, and can be retrieved at runtime with C<caller()>, at -index 10 of the list of returned results. In the example pragma, retrieval -is encapsulated into the routine C<in_effect()>, which takes as parameter -the number of call frames to go up to find the value of the pragma in the -user's script. This uses C<caller()> to determine the value of -C<$^H{myint}> when each line of the user's script was called, and -therefore provide the correct semantics in the subroutine implementing the -overloaded addition. -(TBT) +ユーザープラグマは、マジカルなハッシュ C<%^H> に書き込むことで状態を +保持するので、これらの二つのサブルーチンはこれを操作します。 +C<%^H> の状態情報は構文木に保管され、C<caller()> から返されたリストの +インデックス 10 の要素としてして実行中に取得できます。 +例のプラグマでは、返されたものはユーザースクリプトのプラグマの値を +見つけるために上がっていく呼び出しフレームの数をパラメータとして受け取る +C<in_effect()> ルーチンでカプセル化されます。 +これはユーザーのスクリプトの各行が呼び出されるときに C<$^H{myint}> の +値を決定するために C<caller()> を使うので、オーバーロードされた加算を +実装しているサブルーチン内で正しい意味論を提供します。 =head1 Implementation details +(実装の詳細) + =begin original The optree is shared between threads. This means there is a possibility that @@ -249,17 +243,17 @@ =end original -The optree is shared between threads. This means there is a possibility that -the optree will outlive the particular thread (and therefore the interpreter -instance) that created it, so true Perl scalars cannot be stored in the -optree. Instead a compact form is used, which can only store values that are -integers (signed and unsigned), strings or C<undef> - references and -floating point values are stringified. If you need to store multiple values -or complex structures, you should serialise them, for example with C<pack>. -The deletion of a hash key from C<%^H> is recorded, and as ever can be -distinguished from the existence of a key with value C<undef> with -C<exists>. -(TBT) +構文木はスレッド間で共有されます。 +つまり、構文木はそれを作った特定のスレッド(従ってインタプリタ実体)よりも +長生きする可能性があると言うことです。 +従って、真の Perl スカラを構文木に保管することが出来ません。 +圧縮形式を使う代わりに、整数(符号付きと符号なし)、文字列、C<undef> の +いずれかの値のみを保管できます - リファレンスと浮動小数点数は +文字列化されます。 +もし複数の値や複雑な構造体を保管する必要があるなら、例えば C<pack> などを +使って直列化するべきです。 +C<%^H> からのハッシュキーの削除は記録され、いままで通り C<exists> を使うことで +値が C<undef> でキーが存在することと区別できます。 =begin original @@ -272,10 +266,16 @@ =end original -B<Don't> attempt to store references to data structures as integers which -are retrieved via C<caller> and converted back, as this will not be threadsafe. -Accesses would be to the structure without locking (which is not safe for -Perl's scalars), and either the structure has to leak, or it has to be -freed when its creating thread terminates, which may be before the optree -referencing it is deleted, if other threads outlive it. -(TBT) +リファレンスをC<caller> 経由で取得して変換し直した整数としてデータ構造に +保管しようとしてはいけません; これはスレッドセーフではないからです。 +アクセスはロックなしでの構造体に対してであり(これは Perl のスカラに対しては +安全ではありません)、構造体がメモリリークするか、作成したスレッドが終了時に +解放され、もしもし他のスレッドが長生きしすぎると、構文木が削除されたものを +参照することになります。 + +=begin meta + +Translate: SHIRAKATA Kentaro <argra****@ub32*****> + +=end meta +