argra****@users*****
argra****@users*****
2014年 12月 27日 (土) 22:54:00 JST
Index: docs/perl/5.14.1/perlguts.pod diff -u docs/perl/5.14.1/perlguts.pod:1.3 docs/perl/5.14.1/perlguts.pod:1.4 --- docs/perl/5.14.1/perlguts.pod:1.3 Wed Apr 3 01:17:04 2013 +++ docs/perl/5.14.1/perlguts.pod Sat Dec 27 22:54:00 2014 @@ -68,7 +68,7 @@ =end original -Perl では、符号付き整数でもポインタでも十分に入れることのできる特別な +Perl では、符号付き整数でもポインタでも十分に入れることのできる特別な typedef である IV を使います。 更に、単に符号なしの IV である UV もあります。 @@ -211,10 +211,10 @@ C<sv_vsetpvfn> は C<vsprintf> と同じようなものですが、可変引数リストに対する ポインタか SV の配列のアドレスと長さのいずれかを指定することができます。 -最後の引数はブール値を指し示します; 関数から返ってきたときにこれが -true であれば、フォーマット文字列としてロカール固有の情報が使われているので +最後の引数は真偽値を指し示します; 関数から返ってきたときにこれが +真であれば、フォーマット文字列としてロケール固有の情報が使われているので その文字列の内容は信頼するできないことを表わしています(L<perlsec> を参照)。 -ロカールに関する情報が重要でないのなら、このポインタは NULL であっても +ロケールに関する情報が重要でないのなら、このポインタは NULL であっても かまいません。 この関数はフォーマットの長さを要求していることに注意してください。 @@ -225,7 +225,7 @@ =end original -C<sv_set*()> 関数群は“magic”を持っている値に対する +C<sv_set*()> 関数群は "magic" を持っている値に対する 操作に対して充分に一般化されたものではありません。 後述する L<Magic Virtual Tables> を参照してください。 @@ -355,7 +355,7 @@ もし必要なら、このマクロが C<sv_grow>を呼びます。 C<SvGROW> は SV に割り当てたメモリを増やすだけで、減らすことは できないということと、終端の NUL の分のバイトが自動的に加算されない -(perl自身の文字列関数は 大概 C<SvGROW(sv, len + 1)> としています)と +(perl 自身の文字列関数は 大概 C<SvGROW(sv, len + 1)> としています)と いうことに注意してください。 =begin original @@ -365,7 +365,7 @@ =end original -手元にある SV の、 Perl から見たデータの種類を知りたいときには、 +手元にある SV の、Perl から見たデータの種類を知りたいときには、 その SV の型をチェックするのに SvIOK(SV*) @@ -379,8 +379,8 @@ =end original -SV に納められた文字列の現在の長さを取得したり設定したりするのに -は以下のマクロが使えます。 +SV に納められた文字列の現在の長さを取得したり設定したりするのには以下の +マクロが使えます。 SvCUR(SV*) SvCUR_set(SV*, I32 val) @@ -437,13 +437,10 @@ 最初の関数は C<strlen> を使って追加する文字列の長さを計算します。 二番目の関数では、関数を使用する人が文字列の長さを指定します。 -三番目の関数はその引数を C<sprintf> の様に処理し、整形された結果を -追加します。 +三番目の関数はその引数を C<sprintf> の様に処理し、整形された結果を追加します。 四番目の関数は C<vsprintf> のように動作します。 -va_list 引数の代わりに、SV の配列のアドレスと長さを指定することが -できます。 -五番目の関数は最初の SV にある文字列を二番目の SV にある文字列で -拡張します。 +va_list 引数の代わりに、SV の配列のアドレスと長さを指定できます。 +五番目の関数は最初の SV にある文字列を二番目の SV にある文字列で拡張します。 また、この関数は二番目の SV を強制的に文字列として解釈します。 =begin original @@ -453,7 +450,7 @@ =end original -C<sv_cat*()> 関数群は“magic”を持っている値に対する +C<sv_cat*()> 関数群は "magic" を持っている値に対する 操作に対して充分に一般化されたものではありません。 後述する L<Magic Virtual Tables> を参照してください。 @@ -551,7 +548,7 @@ =end original -ブール値の真と偽を表わす、C<PL_sv_yes> や C<PL_sv_no> という値もあります。 +真偽値の真と偽を表わす、C<PL_sv_yes> や C<PL_sv_no> という値もあります。 C<PL_sv_undef> と同様に、これらのアドレスも C<SV*> が必要なところで 使うことができます。 @@ -963,10 +960,9 @@ (Perl にキーの長さを計算させるために、C<klen> の値として 0 を渡すことは できないということに注意してください)。 引数 C<val> は、設定されるスカラへの SV ポインタを入れ、hash は、 -あらかじめ計算したハッシュ値 (C<hv_store> に計算させる場合には、 -ゼロ) です。 +あらかじめ計算したハッシュ値 (C<hv_store> に計算させる場合にはゼロ) です。 引数 C<lval> で、このフェッチ操作が実はストア操作の一部であるかどうかを -示します; ストア操作であれば、新たなundefind value が与えられたキーを伴って +示します; ストア操作であれば、新たな未定義値が与えられたキーを伴って HV に追加され、C<hv_fetch> はその値が既に存在していたかのように リターンします。 @@ -1136,9 +1132,8 @@ =end original -tie されたハッシュに対するハッシュアクセス関数の使い方に -関する詳細は、L<Understanding the Magic of Tied Hashes and Arrays> を -参照してください。 +tie されたハッシュに対するハッシュアクセス関数の使い方に関する詳細は、 +L<Understanding the Magic of Tied Hashes and Arrays> を参照してください。 =head2 Hash API Extensions @@ -1402,7 +1397,7 @@ C<thing> には、C<SV*>, C<AV*>, C<HV*> のいずれかを置くことができます。 これら二つの関数は、C<newRV_inc> が C<thing> の参照カウントを -インクリメントするが C<newRV_noinc> はインクリメントしないという点を +インクリメントするけれども C<newRV_noinc> はインクリメントしないという点を 除き、同一です。 歴史的な理由により、C<newRV> は C<newRV_inc> の同義語となっています。 @@ -1504,8 +1499,7 @@ =end original -リファレンスはオブジェクト指向プログラミングをサポートするためにも -使われます。 +リファレンスはオブジェクト指向プログラミングをサポートするためにも使われます。 perl のオブジェクト指向用語では、オブジェクトとはパッケージ (もしくはクラス)に bless された単純なリファレンスです。 一度 bless されれば、プログラマーはそのリファレンスをクラスにおける様々な @@ -1657,9 +1651,8 @@ =end original -undef という値を持つあなたの Perl スクリプトからアクセスできる新たな -Perl の変数を生成するには、以下に示すルーチンを変数の型に応じて -使います。 +Perl スクリプトからアクセスできる未定義値を持つ新たな Perl の変数を +生成するには、以下に示すルーチンを変数の型に応じて使います。 SV* get_sv("package::varname", GV_ADD); AV* get_av("package::varname", GV_ADD); @@ -1673,8 +1666,7 @@ =end original 二番目のパラメータとして GV_ADD を使っているということに注意してください。 -新しい変数はここでデータ型に対する適切なルーチンを使うことで -設定することができます。 +新しい変数はここでデータ型に対する適切なルーチンを使うことで設定できます。 =begin original @@ -1738,8 +1730,7 @@ =end original -パッケージ名を指定しなかった場合、変数はカレントパッケージで -生成されます。 +パッケージ名を指定しなかった場合、変数はカレントパッケージで生成されます。 =head2 Reference Counts and Mortality @@ -1756,11 +1747,10 @@ Perl は参照カウント駆動(reference count-driven)のガベージコレクション 機構を使用しています。 -SV、AV、そしてHV(以下 xV と省略します) +SV、AV、そしてHV(以下 xV と省略します) はその一生を参照カウント 1 から始めます。 -xV の参照カウントが0まで落ちた場合、そのリファレンスは破棄されて、 -それが使っていたメモリは -再利用できるようにされます。 +xV の参照カウントが 0 まで落ちた場合、そのリファレンスは破棄されて、 +それが使っていたメモリは再利用できるようにされます。 =begin original @@ -1774,8 +1764,7 @@ これは、Perl レベルにおいては、変数が undef されるとかリファレンスを 保持している最後の変数が変更されたとか上書きされるということがない限りは 起こりません。 -しかし内部的には、参照カウントは以下に挙げるマクロを使って -操作することができます。 +しかし内部的には、参照カウントは以下に挙げるマクロを使って操作できます。 int SvREFCNT(SV* sv); SV* SvREFCNT_inc(SV* sv); @@ -1837,9 +1826,8 @@ ここでの正しい手順は、C<newRV_inc> ではなく C<newRV_noinc> を 使うということです。 -これによって、最後のリファレンスが破棄されたときに -SV のリファレンスカウントは0となってその SV が破棄されて、メモリ -リークを食い止めます。 +これによって、最後のリファレンスが破棄されたときに SV の参照カウントは +0 となってその SV が破棄されて、メモリリークを食い止めます。 =begin original @@ -1857,13 +1845,11 @@ xV を破棄するのを助けるような便利な関数が幾つかあります。 これらの関数は「揮発性」(mortality) のコンセプトを導入します。 ある揮発性の xV はその参照カウントをデクリメントするようにマークしますが、 -実際には「ちょっと後」(a short time later)までデクリメントが -行なわれません。 +実際には「ちょっと後」(a short time later)までデクリメントが行なわれません。 一般的には、「ちょっと後」とは、XSUB 関数の呼び出しのような Perl の一つの文です。 -揮発性の xV が持っている参照カウントの -デクリメントを行うタイミングの決定は二つのマクロ、SAVETMPS と -FREETMPS に依存しています。 +揮発性の xV が持っている参照カウントのデクリメントを行うタイミングの決定は +二つのマクロ、SAVETMPS と FREETMPS に依存しています。 これら二つのマクロについての説明は L<perlcall> と L<perlxs> を参照してください。 @@ -2013,10 +1999,9 @@ C<main> パッケージにあるアイテムを保持する C<PL_defstash> と呼ばれる スタッシュがあります。 -他のパッケージにあるアイテムを取得するため -には、パッケージ名に「::」を付加します。 -C<Foo> というパッケージにあるアイテムは C<Foo::> という -PL_defstash の中にあります。 +他のパッケージにあるアイテムを取得するには、パッケージ名に「::」を付加します。 +C<Foo> というパッケージにあるアイテムは PL_defstash の C<Foo::> という +スタッシュの中にあります。 パッケージ C<Bar::Baz> にあるアイテムは C<Bar::> のスタッシュの中の C<Baz::> のスタッシュの中にあります。 @@ -2151,10 +2136,9 @@ =end original -SV に複数のデータ値を入れるようにするには、二つのことを -しなくてはなりません: スカラ型を別に追加するために C<sv_set*v> ルーチンを -使用すること; それから、フラグを設定して Perl に複数のデータを -持っていることを知らせることです。 +SV に複数のデータ値を入れるようにするには、二つのことをしなくてはなりません: +スカラ型を別に追加するために C<sv_set*v> ルーチンを使用すること; それから、 +フラグを設定して Perl に複数のデータを持っていることを知らせることです。 フラグを設定するための四つのマクロは以下のものです: SvIOK_on @@ -2287,13 +2271,12 @@ =end original -C<sv> がまだマジカルでなければ、Perl は C<sv> を C<SVt_PVMG> に変換 -するために C<SvUPGRADE> を使います。 +C<sv> がまだマジカルでなければ、Perl は C<sv> を C<SVt_PVMG> に +変換するために C<SvUPGRADE> を使います。 Perl はそれから、マジック機能のリンクリストの先頭にそれを追加します。 以前に存在していた同じタイプのマジックは削除されます。 -これはオーバーライドすることができ、 -複数の同じ型のマジックのインスタンスを一つの SV に -結び付けることができるということに注意してください。 +これはオーバーライドすることができ、複数の同じ型のマジックのインスタンスを +一つの SV に結び付けることができるということに注意してください。 =begin original @@ -2413,10 +2396,10 @@ =end original -However, note that C<sv_unmagic> removes all magic of a certain C<type> from the -C<SV>. If you want to remove only certain magic of a C<type> based on the magic -virtual table, use C<sv_unmagicext> instead: -(TBT) +しかし、C<sv_unmagic> は C<SV> から、ある C<type> の全てのマジックを +削除することに注意してください。 +マジック下層テーブルを基に C<type> の特定のマジックのみを削除したい場合は、 +代わりに C<sv_unmagicext> を使ってください: int sv_unmagicext(SV *sv, int type, MGVTBL *vtbl); @@ -2688,9 +2671,8 @@ =end original -マジック型 C<PERL_MAGIC_ext> と C<PERL_MAGIC_uvar> は -エクステンションから使われ、Perl 自身からは使われないように特別に -定義されています。 +マジック型 C<PERL_MAGIC_ext> と C<PERL_MAGIC_uvar> はエクステンションから +使われ、Perl 自身からは使われないように特別に定義されています。 エクステンションは C<PERL_MAGIC_ext> マジックを、 プライベート情報を変数(典型的なオブジェクト)に「アタッチ」(attach) するために使うことができます。 @@ -2706,8 +2688,7 @@ =end original 同様に、C<PERL_MAGIC_uvar> マジックは、スカラの値が使われたり -変更されたりしたときに C 関数を呼び出すという、tie() とよく似た形で -使えます。 +変更されたりしたときに C 関数を呼び出すという、tie() とよく似た形で使えます。 C<MAGIC> の C<mg_ptr> フィールドは C<ufuncs> 構造体へのポインタです: struct ufuncs { @@ -2728,8 +2709,7 @@ SV が読み書きされたとき、C<uf_index> を最初の引数、SV へのポインタを 2 番目の引数として C<uf_val> または C<uf_set> 関数が呼び出されます。 -どのように C<PERL_MAGIC_uvar> マジックを追加するかの簡単な例を以下に -示します。 +どのように C<PERL_MAGIC_uvar> マジックを追加するかの簡単な例を以下に示します。 ufuncs 構造体は sv_magic によってコピーされるので、スタック上に安全に 割り当てられることに注意してください。 @@ -2796,13 +2776,11 @@ 重要であることに注意してください。 典型的には、これはオブジェクトをエクステンションが扱えるように同じクラスに bless するときにのみ使います。 -C<PERL_MAGIC_ext> マジックでは、 -it is usually a good idea to define an -C<MGVTBL>, even if all its fields will be C<0>, so that individual -C<MAGIC> pointers can be identified as a particular kind of magic -using their magic virtual table. C<mg_findext> provides an easy way -to do that: -(TBT) +C<PERL_MAGIC_ext> マジックでは、たとえ全てのフィールドが C<0> でも、 +C<MGVTBL> を定義するのが普通はよい考えです; 個々の C<MAGIC> ポインタは +それぞれのマジック仮想テーブルを使ったある種のマジックとして +識別されるからです。 +C<mg_findext> はそうするための簡単な方法を提供します: STATIC MGVTBL my_vtbl = { 0, 0, 0, 0, 0, 0, 0, 0 }; @@ -2834,15 +2812,12 @@ これには、ユーザーが C<svSETMAGIC> マクロを呼び出した後でこれらの関数を 呼び出すか、あるいは C<sv_set*_mg()> か C<sv_cat*_mg()> の何れかの関数を使わなければなりません。 -同様に、一般的な C コードは、 -それがマジックを扱っていないような関数から得られた -SV を使っているのであれば、 -'get' マジックを起動するために +同様に、一般的な C コードは、それがマジックを扱っていないような関数から +得られたSV を使っているのであれば、'get' マジックを起動するために C<SvGETMAGIC> を呼び出さなければなりません。 これらの関数については L<perlapi> を参照してください。 -例えば、C<sv_cat*()> 関数群の -呼び出しは通常引き続いて C<SvSETMAGIC()> を呼び出す必要がありますが、 -C<SvGETMAGIC> が先行している必要はありません; +例えば、C<sv_cat*()> 関数群の呼び出しは通常引き続いて C<SvSETMAGIC()> を +呼び出す必要がありますが、 C<SvGETMAGIC> が先行している必要はありません; なぜなら、その実装は 'get' マジックを扱うからです。 =head2 Finding Magic @@ -2861,8 +2836,7 @@ =end original -このルーチンは SV に格納されている C<MAGIC> 構造体へのポインタを -返します。 +このルーチンは SV に格納されている C<MAGIC> 構造体へのポインタを返します。 SV がマジカル機能を持っていなければ、C<NULL> が返されます。 SV にマジカル機能を複数持っている場合、最初の物が返されます。 C<mg_findext> は、マジック型とマジック仮想表の両方を元とする SV の @@ -2918,8 +2892,8 @@ =end original -警告: リリース 5.004 以降、配列やハッシュに対するアクセス -関数の正しい使い方は、幾つかの注意点を理解していることを要求しています。 +警告: リリース 5.004 以降、配列やハッシュに対するアクセス関数の正しい使い方は、 +幾つかの注意点を理解していることを要求しています。 これら幾つかの注意点は実際には API におけるバグとして みなされるものであって、将来のリリースにおいては修正されます; また、注意点は [MAYCHANGE] というブラケットで囲まれています。 @@ -3002,7 +2976,7 @@ =end original -先のパラグラフの説明は、tie されたハッシュにアクセスするのに使用する +先の段落の説明は、tie されたハッシュにアクセスするのに使用する C<hv_store> と C<hv_store_ent> についても同様です。 =begin original @@ -3023,9 +2997,8 @@ 実際には C<mg_copy> を使って初期化が行なわれている未定義の揮発値を返します。 返された値はすでに揮発性なので、解放する必要がないことに注意してください。 [MAYCHANGE] -しかし、TIE オブジェクトに対応した perl レベルの -"FETCH" メソッドを実行するには、返されたその値に対して -C<mg_get()> を呼び出す必要があるでしょう。 +しかし、TIE オブジェクトに対応した perl レベルの "FETCH" メソッドを +実行するには、返されたその値に対してC<mg_get()> を呼び出す必要があるでしょう。 同様に、TIE オブジェクトに対する "STORE" メソッドの起動である C<sv_setsv> を使って適切な値を代入した後で、返された値に対して C<mg_set()> を呼び出すことができます。 @@ -3166,10 +3139,9 @@ 非局所的な脱出(die() を使ったもの)でもかまいません。 ブロックに似たこの構造は C<ENTER>/C<LEAVE> マクロのペアによって 生成されます(L<perlcall/"Returning a Scalar"> を参照してください)。 -このような構造ではなにか重要なローカル化された -タスクのための特別なものを作成したり、あるいは -既に存在しているもの(Perl のサブルーチン/ブロックに束縛されたものとか、 -あるいは解放する一時変数のペア)を使うことも可能です +このような構造ではなにか重要なローカル化されたタスクのための特別なものを +作成したり、あるいは既に存在しているもの(Perl のサブルーチン/ブロックに +束縛されたものとか、あるいは解放する一時変数のペア)を使うことも可能です (二番目のケースでは、ローカル化するためのオーバーヘッドはほとんど 無視できるものです)。 すべての XSUB は自動的に C<ENTER>/C<LEAVE> の @@ -3216,8 +3188,7 @@ =end original -これらのマクロは、ポインタC<s>もしくは C<p> の値を -リストアします。 +これらのマクロは、ポインタC<s>もしくは C<p> の値をリストアします。 C<s> は C<SV*> に対する型変換をできるポインタでなければなりません; C<p> は C<char*> への型変換が可能であるべきものです。 @@ -3234,8 +3205,7 @@ =end original -I<擬似ブロック> の終端において C<sv> の参照カウントは -デクリメントされます。 +I<擬似ブロック> の終端において C<sv> の参照カウントはデクリメントされます。 これは、遅延した C<SvREFCNT_dec> を行うための機構という意味で C<sv_2motral> に似たものです。 しかし、C<sv_2mortal> は C<sv> の生存時間を次の文の始めまで延ばす一方、 @@ -3297,8 +3267,7 @@ =end original -B<擬似ブロック> の終端において、 -C<sv> に対応している +B<擬似ブロック> の終端において、C<sv> に対応している カレントのスクラッチパッドにおけるスロットをクリアします。 =item C<SAVEDELETE(HV *hv, char *key, I32 length)> @@ -3367,8 +3336,7 @@ =end original 以下の API リストは、変更可能なデータを指し示すポインタ -(C のポインタか、Perl 的な C<GV *> のいずれか) -を必要とする関数群です。 +(C のポインタか、Perl 的な C<GV *> のいずれか)を必要とする関数群です。 前述の C<int> を引数に取るマクロに似て、 C<int *> を引数に取る関数があります。 @@ -3743,8 +3711,8 @@ malloc の変種です。 これは様々な大きさの未割り付けのメモリをプールしておき、 より早く割り付け要求に応えようとするものです。 -しかしながら一部のプラットフォームでは、これは不法なmallocエラーや -freeエラーを引き起こす可能性があります。 +しかしながら一部のプラットフォームでは、これは不法な malloc エラーや +free エラーを引き起こす可能性があります。 =begin original @@ -3765,8 +3733,7 @@ =end original -1 番目の引数 C<pointer> は、新たにメモリを割り付けられる変数の -名前にします。 +1 番目の引数 C<pointer> は、新たにメモリを割り付けられる変数の名前にします。 =begin original @@ -3813,7 +3780,7 @@ 上記の三つのマクロは、メモリのバッファーサイズを変更したりもう 使わなくなったメモリ領域を解放するために使われます。 -C<Renew> とC<Renewc> の引数は、“魔法のクッキー”引数が必要ないと +C<Renew> とC<Renewc> の引数は、"魔法のクッキー" 引数が必要ないと いうことを除きそれぞれ C<New> と C<Newc> に一致します。 =head3 Moving @@ -3836,8 +3803,7 @@ この三つのマクロは、それぞれ割り付けたメモリ領域に対する移動、 複写、ゼロで埋めるといったことに使われます。 -C<source> と C<dest> という引数は、転送元と転送先の開始番地への -ポインタです。 +C<source> と C<dest> という引数は、転送元と転送先の開始番地へのポインタです。 Perl は、構造体 C<type> の大きさ (C<sizeof> 関数を使います)のインスタンスの C<number> 個分だけ、移動、複写、ゼロ埋めを行います。 @@ -4045,9 +4011,8 @@ =end original オペコードと I<target>s の間の対応は一対一ではありません。 -あるユニットの翻訳木 (compile tree)にある異なるオペコードは、 -これが一時変数の expected life と衝突していなければ同じ target を使うことが -できます。 +あるユニットの翻訳木 (compile tree)にある異なるオペコードは、これが一時変数の +expected life と衝突していなければ同じ target を使うことができます。 =head2 Scratchpads and recursion @@ -4293,8 +4258,7 @@ 二項演算子 (C<BINOP>) は C<op_first> フィールドだけでなく C<op_last> フィールドも持ちます。 最も複雑な op の型は C<LISTOP> で、任意の数の子を持ちます。 -この場合、最初の子は C<op_first> で示され、最後の子は C<op_last> で -示されます。 +この場合、最初の子は C<op_first> で示され、最後の子は C<op_last> で示されます。 その間の子は、最初の子から最後の子まで C<op_sibling> ポインタを反復的に 辿ることで見つけられます。 @@ -4459,7 +4423,7 @@ =end original コンテキストに依存した最適化はこのときに行なわれます。 -この動作では解析木が(“スレッド”ポインタを通じて)後方参照を含んでいるので、 +この動作では解析木が("スレッド" ポインタを通じて)後方参照を含んでいるので、 ノードをこの時に free() することはできません。 このステージでノードを最適化するのを許すために、対象となるノードは free() されるかわりに null() されます(つまり、そのノードの型が OP_NULL に @@ -4498,15 +4462,15 @@ =end original -Peephole optimizations are done by calling the function pointed to -by the global variable C<PL_peepp>. By default, C<PL_peepp> just -calls the function pointed to by the global variable C<PL_rpeepp>. -By default, that performs some basic op fixups and optimisations along -the execution-order op chain, and recursively calls C<PL_rpeepp> for -each side chain of ops (resulting from conditionals). Extensions may -provide additional optimisations or fixups, hooking into either the -per-subroutine or recursive stage, like this: -(TBT) +大域変数 C<PL_peepp> で示されている関数を呼び出すことによって、覗き穴最適化が +行われます。 +デフォルトでは、C<PL_peepp> は単に大域変数 C<PL_rpeepp> で示されている +関数を呼び出します。 +デフォルトでは、これは実行順 op チェーンに対する基本的な op の修正と最適化を +行い、また(条件文の結果の) op のチェーンの両側に対して再帰的に C<PL_rpeepp> を +呼び出します。 +エクステンションは、以下のように、サブルーチン毎か再帰ステージのどちらかに +フックすることでさらなる最適化や修正を提供できます: static peep_t prev_peepp; static void my_peep(pTHX_ OP *o) @@ -4579,6 +4543,8 @@ =head2 Compile-time scope hooks +(コンパイル時スコープフック) + =begin original As of perl 5.14 it is possible to hook into the compile-time lexical @@ -4587,10 +4553,9 @@ =end original -As of perl 5.14 it is possible to hook into the compile-time lexical -scope mechanism using C<Perl_blockhook_register>. This is used like -this: -(TBT) +perl 5.14 から、C<Perl_blockhook_register> を使って、コンパイル時 +レキシカルスコープ機構にフックすることができるようになりました。 +これは次のようにして使います: STATIC void my_start_hook(pTHX_ int full); STATIC BHK my_hooks; @@ -4606,9 +4571,9 @@ =end original -This will arrange to have C<my_start_hook> called at the start of -compiling every lexical scope. The available hooks are: -(TBT) +これは、レキシカルスコープのコンパイルを開始する毎に C<my_start_hook> が +呼び出されるように設定します。 +利用可能なフックは: =over 4 @@ -4621,9 +4586,8 @@ =end original -This is called just after starting a new lexical scope. Note that Perl -code like -(TBT) +これは新しいレキシカルスコープの開始の直後に呼び出されます。 +次のような Perl コードは if ($x) { ... } @@ -4637,12 +4601,13 @@ =end original -creates two scopes: the first starts at the C<(> and has C<full == 1>, -the second starts at the C<{> and has C<full == 0>. Both end at the -C<}>, so calls to C<start> and C<pre/post_end> will match. Anything -pushed onto the save stack by this hook will be popped just before the -scope ends (between the C<pre_> and C<post_end> hooks, in fact). -(TBT) +二つのスコープを作ることに注意してください: 一つ目は C<(> の場所で +C<full == 1> を持って始まり、二つ目は C<{> の場所で C<full == 0> を持って +始まります。 +両方の末尾は C<}> なので、C<start> と C<pre/post_end> の呼び出しは +一致します。 +このフックで保存スタックにプッシュされたあらゆるものはスコープが終わる直前 +(実際には C<pre_> と C<post_end> のフックの間) にポップされます。 =item C<void bhk_pre_end(pTHX_ OP **o)> @@ -4654,10 +4619,9 @@ =end original -This is called at the end of a lexical scope, just before unwinding the -stack. I<o> is the root of the optree representing the scope; it is a -double pointer so you can replace the OP if you need to. -(TBT) +これはレキシカルスコープの終わり、スタックを巻き戻す直前に呼び出されます。 +I<o> はスコープを表現する op 木のルートです; これはダブルポインタなので +必要なら OP を入れ替えることができます。 =item C<void bhk_post_end(pTHX_ OP **o)> @@ -4670,11 +4634,10 @@ =end original -This is called at the end of a lexical scope, just after unwinding the -stack. I<o> is as above. Note that it is possible for calls to C<pre_> -and C<post_end> to nest, if there is something on the save stack that -calls string eval. -(TBT) +これはレキシカルスコープの終わり、スタックを巻き戻した直後に呼び出されます。 +I<o> は上述の通りです。 +保存スタック上に文字列 eval を呼び出すものがあった場合、C<pre_> と +C<post_end> がネストして呼び出される可能性があることに注意してください。 =item C<void bhk_eval(pTHX_ OP *const o)> @@ -4687,11 +4650,10 @@ =end original -This is called just before starting to compile an C<eval STRING>, C<do -FILE>, C<require> or C<use>, after the eval has been set up. I<o> is the -OP that requested the eval, and will normally be an C<OP_ENTEREVAL>, -C<OP_DOFILE> or C<OP_REQUIRE>. -(TBT) +これは C<eval STRING>, C<do FILE>, C<require>, C<use> のコンパイルを始める +直前、eval が設定された後に呼び出されます。 +I<o> は eval を要求した OP で、通常は C<OP_ENTEREVAL>, C<OP_DOFILE>, +C<OP_REQUIRE> のいずれかです。 =back @@ -4707,14 +4669,12 @@ =end original -Once you have your hook functions, you need a C<BHK> structure to put -them in. It's best to allocate it statically, since there is no way to -free it once it's registered. The function pointers should be inserted -into this structure using the C<BhkENTRY_set> macro, which will also set -flags indicating which entries are valid. If you do need to allocate -your C<BHK> dynamically for some reason, be sure to zero it before you -start. -(TBT) +フック関数を持つと、それを入れる C<BHK> 構造体が必要です。 +これは静的に割り当てるのが最良です; 一度登録すると解放する方法はないからです。 +関数ポインタは C<BhkENTRY_set> マクロを使ってこの構造体に挿入されます; +これはまたどのエントリが有効化を示すフラグを設定します。 +何らかの理由で C<BHK> を動的に割り当てる必要がある場合、開始前にゼロで +埋めておく必要があります。 =begin original @@ -4729,15 +4689,14 @@ =end original -Once registered, there is no mechanism to switch these hooks off, so if -that is necessary you will need to do this yourself. An entry in C<%^H> -is probably the best way, so the effect is lexically scoped; however it -is also possible to use the C<BhkDISABLE> and C<BhkENABLE> macros to -temporarily switch entries on and off. You should also be aware that -generally speaking at least one scope will have opened before your -extension is loaded, so you will see some C<pre/post_end> pairs that -didn't have a matching C<start>. -(TBT) +フックが一旦登録されると、無効にするための機構はないので、それが必要な +場合は自分自身でそうする必要があります。 +C<%^H> のエントリはおそらく最良の方法です; 効果はレキシカルスコープを +持つからです; しかし一時的にエントリを有効または無効にするために +C<BhkDISABLE> と C<BhkENABLE> マクロを使うことも可能です。 +また、一般的に言ってエクステンションが読み込まれる前に最低一つのスコープが +開いているので、対になる C<start> のない C<pre/post_end> の組を見ることにも +注意するべきです。 =head1 Examining internal data structures with the C<dump> functions @@ -4946,8 +4905,7 @@ =end original これら全ては明らかに、Perl 内部関数を、ある種の構造体を最初の引数として取る -サブルーチンか、最初の引数に何も取らないサブルーチンにする方法が -必要です。 +サブルーチンか、最初の引数に何も取らないサブルーチンにする方法が必要です。 インタプリタのビルドをかなり異なった方法でこれら二つを有効にするために、 Perl ソースは(その他の多くの状況で行うのと同様) マクロとサブルーチンの 命名規則を激しく使っています。 @@ -5110,7 +5068,7 @@ =end original -しかし、可変長関数ではそれほどきれいには動作しません; マクロは事前に +しかし、可変長引数関数ではそれほどきれいには動作しません; マクロは事前に 引数の数が分かっていることを仮定しているからです。 どちらかを完全に綴る必要があるようにする代わりに、最初の引数として C<aTHX_> を渡す(Perl コアは Perl_warner のような関数でこれをする @@ -5162,8 +5120,7 @@ =end original -C<dTHR> は、古いスレッドモデルに対応するために perl 5.005 で -導入されました。 +C<dTHR> は、古いスレッドモデルに対応するために perl 5.005 で導入されました。 古いスレッドモデルは今ではコンテキストのポインタを渡すのに C<THX> 機構を 使うので、C<dTHR> はもはや有用ではありません。 Perl 5.6.0 以降では、ソースの後方互換性のためにまだ存在していますが、 @@ -5183,9 +5140,8 @@ =end original -Perl が PERL_IMPLICIT_CONTEXT 付きでビルドされると、Perl API の -関数を呼び出すエクステンションは何か初期コンテキスト引数を渡す必要が -あります。 +Perl が PERL_IMPLICIT_CONTEXT 付きでビルドされると、Perl API の関数を +呼び出すエクステンションは何か初期コンテキスト引数を渡す必要があります。 キッカーは、Perl が PERL_IMPLICIT_CONTEXT を有効にせずにビルドされたときにも エクステンションがコンパイルできるようにそれを書く方法が必要ということです。 @@ -5201,9 +5157,8 @@ これをするには三つの方法があります。 最初に、簡単だけれども効率的ではない方法ですが、エクステンションのソース -互換性を維持するために、これがデフォルトです: F<XSUB.h> が -#include されると、コンテキストを返す関数を呼び出すように aTHX と aTHX_ の -マクロを再定義します。 +互換性を維持するために、これがデフォルトです: F<XSUB.h> が #include されると、 +コンテキストを返す関数を呼び出すように aTHX と aTHX_ のマクロを再定義します。 従って、以下のようなものが: sv_setiv(sv, num); @@ -5239,8 +5194,7 @@ =end original これをするためにエクステンション何の新しいこともする必要はありません; -Perl ライブラリは Perl_get_context() を提供するので、全てうまく -動作します。 +Perl ライブラリは Perl_get_context() を提供するので、全てうまく動作します。 =begin original @@ -5294,8 +5248,8 @@ インクルードする前に C<#define PERL_NO_GET_CONTEXT> を追加して、 Perl API を呼び出す全ての関数の先頭に C<dTHX;> 宣言を書くということに 注意してください。 -(どの関数にこれが必要なのかは分かります; これらの関数に未宣言の識別子が -あると C コンパイラがエラーを出すからです。) +(どの関数にこれが必要なのかは分かります; これらの関数に未宣言の識別子があると +C コンパイラがエラーを出すからです。) XSUB 自身には変更は必要荒れません; なぜなら XS() マクロは、もし必要なら 暗黙のコンテキストを渡すように正しく定義されるからです。 @@ -5767,6 +5721,8 @@ フォーマッティングコードではなく表示したいなら、互換性のために以下の マクロを使うべきです +=begin original + IVdf IV in decimal UVuf UV in decimal UVof UV in octal @@ -5775,6 +5731,16 @@ NVff NV %f-like NVgf NV %g-like +=end original + + IVdf IV を 10 進で + UVuf UV を 10 進で + UVof UV を 8 進で + UVxf UV を 16 進で + NVef NV を %e 風に + NVff NV を %f 風に + NVgf NV を %g 風に + =begin original These will take care of 64-bit integers and long doubles. @@ -5858,8 +5824,7 @@ =end original -XS モジュールでのとても基本的な例外処理を行うためのいくつかのマクロが -あります。 +XS モジュールでのとても基本的な例外処理を行うためのいくつかのマクロがあります。 これらのマクロを使えるようにするために F<XSUB.h> をインクルードする前に C<NO_XSLOCKS> を定義する必要があります: @@ -5941,8 +5906,7 @@ =end original -ソース文書は、以下のように、C ソースに POD コメントを書くことで -作成されます: +ソース文書は、以下のように、C ソースに POD コメントを書くことで作成されます: /* =for apidoc sv_setiv @@ -5976,8 +5940,7 @@ =end original Perl API は時が経つにつれて変わります。 -新しい関数が追加されたり、既にある関数のインターフェースが -変更されたりします。 +新しい関数が追加されたり、既にある関数のインターフェースが変更されたりします。 C<Devel::PPPort> モジュールはこれらの変更の一部に関して互換コードを 提供しようとするので、XS 作者は複数バージョンの Perl に対応するときに そのためのコードを自分自身で作る必要はありません。 @@ -6114,8 +6077,7 @@ 保管されるからです。 Unicode 文字 200 (16 進数で書くなら C<0xC8>) である、 大文字 E(重アクセント記号付) は 2 バイト C<v196.172> で表現されます。 -残念ながら、非 Unicode 文字列 C<chr(196).chr(172)> も同じバイト並びを -持ちます。 +残念ながら、非 Unicode 文字列 C<chr(196).chr(172)> も同じバイト並びを持ちます。 従って、見ただけで判断することは出来ません - これが Unicode 入力を 興味深い問題にしているものです。 @@ -6267,8 +6229,7 @@ =end original -現在のところ、Perl は Unicode 文字列と非 Unicode 文字列を少し違う形で -扱います。 +現在のところ、Perl は Unicode 文字列と非 Unicode 文字列を少し違う形で扱います。 SV のフラグ C<SVf_UTF8> は、文字列が内部で UTF-8 で エンコードされていることを示します。 これがない場合は、バイトの値が符号位置で、逆も成り立ちます (言い換えると、 @@ -6425,8 +6386,7 @@ これは、元の SV に影響を与えることなく、比較などに使えるデータを作るのに 有用です。 また、逆方向を自然に行う C<utf8_to_bytes> もあります; これは文字列に -単一バイトで表現できない、番号 255 を超える文字が含まれていると -失敗します。 +単一バイトで表現できない、番号 255 を超える文字が含まれていると失敗します。 =head2 Is there anything else I need to know? @@ -6554,8 +6514,7 @@ これは Perl に直接新しい文法を追加するものではありません。 これは直接新しいキーワードを追加するものではありません。 実際のところ、Perl がプログラムする方法を何も変えません。 -これらの変更は、Perl がプログラムをコンパイルした後、自分でする -必要があります。 +これらの変更は、Perl がプログラムをコンパイルした後、自分でする必要があります。 これは、C<CHECK> ブロックと C<B::Generate> モジュールを使って op 木を 操作するか、C<optimize> モジュールでカスタム覗き穴最適化器を追加することで 行います。 @@ -6596,12 +6555,12 @@ 一つの「論理」op 型 C<OP_CUSTOM> に複数のカスタム op を 含めることができるので、Perl はどのカスタム op を扱うかを決定するのに C<< o->op_ppaddr >> の値を使います。 -Perl uses the value of C<< o->op_ppaddr >> to determine which custom op -it is dealing with. You should create an C<XOP> structure for each -ppaddr you use, set the properties of the custom op with -C<XopENTRY_set>, and register the structure against the ppaddr using -C<Perl_custom_op_register>. A trivial example might look like: -(TBT) +Perl は、どのカスタム op を扱うのかを決定するために C<< o->op_ppaddr >> を +使います。 +使用する ppaddr 毎に C<XOP> 構造体を作成し、カスタム op のプロパティに +C<XopENTRY_set> を設定し、C<Perl_custom_op_register> を使って構造体の ppaddr を +登録するべきです。 +典型的な例は次のようなものです: static XOP my_xop; static OP *my_pp(pTHX); @@ -6617,8 +6576,7 @@ =end original -The available fields in the structure are: -(TBT) +この構造体で利用可能なフィールドは: =over 4 @@ -6632,10 +6590,10 @@ =end original -A short name for your op. This will be included in some error messages, -and will also be returned as C<< $op->name >> by the L<B|B> module, so -it will appear in the output of module like L<B::Concise|B::Concise>. -(TBT) +op のための短い名前です。 +これは一部のエラーメッセージに含まれ、また L<B|B> モジュールによって +C<< $op->name >> として返されるので、L<B::Concise|B::Concise> のような +モジュールの出力として現れます。 =item xop_desc @@ -6645,8 +6603,7 @@ =end original -A short description of the function of the op. -(TBT) +この op の関数の短い説明。0l =item xop_class @@ -6657,9 +6614,8 @@ =end original -Which of the various C<*OP> structures this op uses. This should be one of -the C<OA_*> constants from F<op.h>, namely -(TBT) +この op が様々な C<*OP> 構造体のどれを使うか。 +これは F<op.h> の C<OA_*> 定数のいずれかです; つまり =over 4 @@ -6688,9 +6644,9 @@ =end original -This should be interpreted as 'C<PVOP>' only. The C<_OR_SVOP> is because -the only core C<PVOP>, C<OP_TRANS>, can sometimes be a C<SVOP> instead. -(TBT) +これは 'C<PVOP>' のみとして解釈されるべきです。 +なぜなら C<_OR_SVOP> はコアの C<PVOP> のみで、C<OP_TRANS> は時々代わりに +C<SVOP> になります。 =item OA_LOOP @@ -6704,8 +6660,7 @@ =end original -The other C<OA_*> constants should not be used. -(TBT) +その他の C<OA_*> 定数は使われるべきではありません。 =item xop_peep @@ -6719,12 +6674,12 @@ =end original -This member is of type C<Perl_cpeep_t>, which expands to C<void -(*Perl_cpeep_t)(aTHX_ OP *o, OP *oldop)>. If it is set, this function -will be called from C<Perl_rpeep> when ops of this type are encountered -by the peephole optimizer. I<o> is the OP that needs optimizing; -I<oldop> is the previous OP optimized, whose C<op_next> points to I<o>. -(TBT) +このメンバは C<Perl_cpeep_t> 型で、 +C<void (*Perl_cpeep_t)(aTHX_ OP *o, OP *oldop)> に展開されます。 +これが設定されていると、この型の op が覗き穴最適化器に遭遇したときに +この関数が C<Perl_rpeep> から呼び出されます。 +I<o> は最適化が必要な OP です; I<oldop> は最適化された以前の OP で、これの +C<op_next> は I<o> を指しています。 =back @@ -6773,7 +6728,7 @@ Translate: KIMURA Koichi Update: Kentaro Shirakata <argra****@ub32*****> (5.10.0-) -Status: in progress +Status: completed =end meta