argra****@users*****
argra****@users*****
2009年 1月 30日 (金) 22:20:00 JST
Index: docs/perl/5.8.8/perlxs.pod diff -u docs/perl/5.8.8/perlxs.pod:1.11 docs/perl/5.8.8/perlxs.pod:1.12 --- docs/perl/5.8.8/perlxs.pod:1.11 Wed Jan 28 20:46:34 2009 +++ docs/perl/5.8.8/perlxs.pod Fri Jan 30 22:20:00 2009 @@ -64,7 +64,7 @@ =end original 糊のコードは Perl スタックから引数を取り出し、Perl の値を C 関数が -想定している形式に変換し、C 関数を酔いだし、C 関数の返り値を Perl に +想定している形式に変換し、C 関数を呼び出し、C 関数の返り値を Perl に 返します。 ここでの返り値は、伝統的な C の返り値か、出力パラメータの役目をする C 関数引数です。 @@ -194,7 +194,7 @@ =end original -注意: エクステンションによっては、エクステンション貼り付けコードの作成には +注意: エクステンションによっては、エクステンションの糊コードの作成には Dave Beazley の SWIG システムがはるかに便利な機構を提供するでしょう。 さらなる情報については http://www.swig.org/ を参照してください。 @@ -213,9 +213,9 @@ この後で出てくる例の多くは、Perl と ONC+ RPC bind ライブラリ関数との間の インターフェースを具体的に生成します。 rpcb_gettime() という関数が、XS 言語の多くの機能を説明するために使われます。 -この関数は二つの引数を取ります。 +この関数は二つの引数を取ります; 最初のものは入力パラメータで、二番目のものは出力パラメータです。 -関数の戻り値はステータスを表わす値です。 +関数はステータス値も返します。 bool_t rpcb_gettime(const char *host, time_t *timep); @@ -299,9 +299,9 @@ =end original -Perl に対する任意のエクステンションは、このような XSUB も含めて、 -Perl にエクステンションを押し込むブートストラップとしての Perl モジュールを -持つべきです。 +Perl に対する全てのエクステンションは、このような XSUB も含めて、 +Perl にエクステンションを押し込むブートストラップとして働く +Perl モジュールを持つべきです。 このモジュールはエクステンションの関数と変数とをエクスポートし、 Perl プログラムや Perl にリンクされるエクステンションの XSUB を起動します。 以下のモジュールはこのドキュメントのほとんどの例で使われるもので、 @@ -332,7 +332,7 @@ =end original このドキュメントを通して、rpcb_gettime() XSUB に対する様々な -インターフェースが調査されます。 +インターフェースが検討されます。 XSUB はパラメータを違った順番で受け取ったり、異なる個数のパラメータを とったりします。 それぞれの場合において XSUB は Perl と実際の C の rpcb_gettime 関数の間の @@ -379,7 +379,7 @@ =end original -オプションとして、型の技術と引数の名前のリストを結合できます; +オプションとして、型の記述と引数の名前のリストを結合できます; これを以下のように書き換えます: double @@ -455,7 +455,7 @@ =end original -関数名と、その戻り値の型は別々の行に分けておかなければなりません; +関数名と、その返り値の型は別々の行に分けておかなければなりません; また左揃えにするべきです。 =begin original @@ -557,7 +557,7 @@ I<x> が示している XSUB のスタック上にある位置の参照を行います。 関数に対する位置 0 は ST(0) となります。 XSUB に対するパラメータと XSUB から返される値は常に ST(0) から始まります。 -多くの単純な場合においては、B<xsubpp>コンパイラは typemaps にある +多くの単純な場合においては、B<xsubpp>コンパイラは typemap にある 埋め込みコード片(embedding code fragments)から引数スタックを扱う コードを生成します。 もっと複雑な場合には、プログラマがコードを提供しなければなりません。 @@ -584,8 +584,8 @@ B<xsubpp> コンパイラは各 XSUB の非 C<void> 返り値に対してこの変数を 宣言します。 デフォルトでは生成された C 関数は RETVAL を C ライブラリ関数が呼ばれたときの -戻り値の型を保持するのに使われます。 -単純な場合には、RETVAL の値は Perl から XSUB の戻り値として +返り値の型を保持するのに使われます。 +単純な場合には、RETVAL の値は Perl から XSUB の返り値として 受け取ることのできる引数スタックの ST(0) に置かれます。 =begin original @@ -597,10 +597,9 @@ =end original -XSUB の戻り値の方が C<void> であった場合には、コンパイラは +XSUB の返り値の方が C<void> であった場合には、コンパイラは その関数に対して変数 RETVAL を宣言しません。 -PPCODE: セクションをを使う場合、 -RETVAL 変数の操作を操作する必要がないので、 +PPCODE: セクションをを使う場合、RETVAL 変数の操作を操作する必要がないので、 このセクションはスタックに出力値を置くためにスタックを直接操作します。 =begin original @@ -611,9 +610,9 @@ =end original -PPCODE: 指示子を使わないのであれば、C<void> な戻り値は -CODE: 指示子がST(0)へ陽にセットするのに使われていたと -しても、値を返さないサブルーチンに対してのみ使うべきです。 +PPCODE: 指示子を使わないのであれば、C<void> な返り値は +CODE: 指示子が ST(0) へ陽にセットするのに使われていたとしても、 +値を返さないサブルーチンに対してのみ使うべきです。 =begin original @@ -628,16 +627,16 @@ =end original -このドキュメントの以前のものでは、そういった場合に戻り値として C<void> を +このドキュメントの以前のものでは、そういった場合に返り値として C<void> を 使うことを勧めていました。 これは XSUB が I<本当に> C<void> であるときにセグメンテーション違反を起こす 可能性があることが確認されました。 このやり方は今では使わないことが推奨されていて、将来のバージョンで サポートされなくなるでしょう。 -こういった場合、戻り値 C<SV *> を使います(現在 C<xsubpp> は +こういった場合、返り値 C<SV *> を使います(現在 C<xsubpp> は "truely-void" な関数と"old-practice-declared-as-void" な関数とを明確に しようとする経験則的なコードが入っています。 -このためあなたのプログラムはあなたが戻り値として C<SV *> を使わない限り、 +このためあなたのプログラムはあなたが返り値として C<SV *> を使わない限り、 この経験則の振る舞いに左右されます。) =head2 Returning SVs, AVs and HVs through RETVAL @@ -851,7 +850,7 @@ キーワード PREFIX は Perl の関数名から取り除かれるべきプリフィクスを 指定するものです。 -C 関数が C<rpcb_gettime()> で、その PREFIX の値がC <rpcb_> であったとすると、 +C 関数が C<rpcb_gettime()> で、その PREFIX の値が C<rpcb_> であったとすると、 Perl はこの関数を C<gettime()> として見ます。 =begin original @@ -886,7 +885,7 @@ =end original -キーワード OUTPUT: は 幾つかの関数パラメータが XSUB が終了するときに +キーワード OUTPUT: は、幾つかの関数パラメータが XSUB が終了するときに 更新されるべき(Perl のために新しい値を見えるようにする)ものであることや、 幾つかの値が呼び出し元の Perl 関数に戻されるべきものであることを示します。 前述の sin() のような CODE: や PPCODE: セクションのない単純な関数には、変数 @@ -965,9 +964,9 @@ =end original B<xsubpp> は、XSUB の OUTPUT セクション中、RETVAL を除く全てのパラメータに -大して自動的に C<SvSETMAGIC()> を出力します。 +対して自動的に C<SvSETMAGIC()> を出力します。 これは普通は望ましい振る舞いです; なぜなら出力パラメータに適切に -'set' magic を起動する面倒を見るからです(ハッシュや配列の要素が +'set' マジックを起動する面倒を見るからです(ハッシュや配列の要素が 存在しなかったとき、作成しなければならないので必要です)。 もし何らかの理由でこの振る舞いが望ましくないなら、 OUTPUT セクションの残りのパラメータでこれを無効にするために、 @@ -1050,8 +1049,8 @@ =end original -このキーワードは、C の関数に対して特殊な操作を必要とするようなより複雑な -XSUB で使われます。 +このキーワードは、C の関数に対して特殊な操作を必要とするような、 +より複雑なXSUB で使われます。 変数 RETVAL はまだ宣言されていますが、セクション OUTPUT: を使って陽に 指定しない限りは値を戻すことはありません。 @@ -1062,7 +1061,7 @@ =end original -以下に示す XSUB は パラメータに対する特殊な操作を必要とする C 関数の +以下に示す XSUB はパラメータに対する特殊な操作を必要とする C 関数の ためのものです。 Perl での使い方を最初に示します。 @@ -1119,7 +1118,7 @@ =end original -INIT: セクションのもう一つの利用法は C 関数を呼び出す前の前提条件を +INIT: セクションのもう一つの利用法は、C 関数を呼び出す前の前提条件を チェックすることです: long long @@ -1152,7 +1151,7 @@ キーワード NO_INIT は関数のパラメータが出力値としてのみ使われることを 示すのに使われます。 B<xsubpp> コンパイラは通常、すべての関数パラメータの値を引数スタックから -読み取って、関数の入り口でCの変数にそれを代入するようなコードを生成します。 +読み取って、関数の入り口で C の変数にそれを代入するようなコードを生成します。 NO_INIT は、コンパイラに一部のパラメータが入力としてではなく出力として 使われることと、それらが関数を終了する前に操作されることを示します。 @@ -1222,7 +1221,7 @@ 評価されるので、たとえばダブルクォートのようなリテラルとして 評価されるようなもの [mainly C<$>, C<@>, or C<\\>]であれば、 バックスラッシュを使って保護しなければなりません。 -変数 $var, $arg, $type は typemaps として使われます。 +変数 $var, $arg, $type は typemap として使われます。 bool_t rpcb_gettime(host,timep) @@ -1777,7 +1776,7 @@ 生成された Perl 関数の返り値リストは、関数からの C の返り値 (XSUB の返り値型が C<void> であるか、 -C<The NO_OUTPUT Keyword> が使わた場合を除く)に、 +L<The NO_OUTPUT Keyword> が使わた場合を除く)に、 全ての C<OUTLIST> および C<IN_OUTLIST> 引数を(出現順に) 続けたものとなります。 XSUB からの返り時に、C<IN_OUT>/C<OUT> Perl 引数は C 関数によって書かれた @@ -2026,7 +2025,7 @@ =end original C_ARGS: キーワードは、Perl からの呼び出し手順ではなく C からの呼び出し手順を -持つ XSUBS を、CODE: や PPCODE: セクションを書くことなく作成することを +持つ XSUB を、CODE: や PPCODE: セクションを書くことなく作成することを 可能にします。 C_ARGS: 段落の内容は、呼び出される C 関数の引数として、何の変更もなく 使われます。 @@ -2051,7 +2050,7 @@ そしてデフォルトのフラグは C のグローバル変数 C<default_flags> に 保管されているとします。 -以下のようにして呼び出すインターフェースを作りたいとします: +以下のようにして呼び出されるインターフェースを作りたいとします: $second_deriv = $function->nth_derivative(2); @@ -2087,7 +2086,7 @@ =end original キーワード PPCODE: は キーワード CODE: の代替であり、B<xsubpp> コンパイラに -プログラマが XSUB の戻り値のための引数スタックを制御するコードを +プログラマが XSUB の返り値のための引数スタックを制御するコードを 提供しているということを指示するのに使われます。 ある XSUB で、一つの値ではなく値のリストを返したいというときに必要になります。 この場合 PPCODE: を使わなければならず、また、値のリストを陽にスタックへ @@ -2108,16 +2107,14 @@ =end original -The actual difference between PPCODE: and CODE: sections is in the -initialization of C<SP> macro (which stands for the I<current> Perl -stack pointer), and in the handling of data on the stack when returning -from an XSUB. In CODE: sections SP preserves the value which was on -entry to the XSUB: SP is on the function pointer (which follows the -last parameter). In PPCODE: sections SP is moved backward to the -beginning of the parameter list, which allows C<PUSH*()> macros -to place output values in the place Perl expects them to be when -the XSUB returns back to Perl. -(TBT) +PPCODE: と CODE: セクションの実際の違いは、 +(I<現在の> Perl のスタックポインタである) C<SP> マクロの初期化と、 +XSUB から返るときのスタックのデータの扱いです。 +CODE: セクションでは SP は XSUB に入ったときの値を保存します: +SP は(最後の引数に続く)関数ポインタを指します。 +PPCODE: セクションでは、SP は引数リストの先頭に戻るので、 +XSUB が Perl に戻るときに、Perl が想定している場所に C<PUSH*()> マクロが +出力値を置くことが出来ます。 =begin original @@ -2130,13 +2127,12 @@ =end original -The generated trailer for a CODE: section ensures that the number of return -values Perl will see is either 0 or 1 (depending on the C<void>ness of the -return value of the C function, and heuristics mentioned in -L<"The RETVAL Variable">). The trailer generated for a PPCODE: section -is based on the number of return values and on the number of times -C<SP> was updated by C<[X]PUSH*()> macros. -(TBT) +CODE: セクションの末尾に生成されるコードは、Perl が受け取る返り値の数が +(C 関数の返り値が C<void> かどうか、および +L<"The RETVAL Variable"> で記述した経験則に依存して)0 か 1 であることを +保証します。 +PPCODE: セクションの末尾に生成されるコードは、返り値の数と +C<SP> が C<[X]PUSH*()> マクロで更新された回数に基づきます。 =begin original @@ -2145,8 +2141,8 @@ =end original -マクロ C<ST(i)>, C<XST_m*()>, C<XSRETURN*()> は CODE: セクションで - PPCODE: セクションでも同じようにうまく動作することに注意してください。 +マクロ C<ST(i)>, C<XST_m*()>, C<XSRETURN*()> は CODE: セクションでも +PPCODE: セクションでも同じようにうまく動作することに注意してください。 =begin original @@ -2179,7 +2175,7 @@ =end original -プログラマは、rbcb_gettime を実際に呼び出すコードと、戻り値を引数スタックの +プログラマは、rbcb_gettime を実際に呼び出すコードと、返り値を引数スタックの 適切な場所にプッシュするコードを提供しなければならないことに 注意してください。 @@ -2192,10 +2188,10 @@ =end original -この関数に対する戻り値の型 C<void> は、B<xsubpp> コンパイラに変数 +この関数に対する返り値の型 C<void> は、B<xsubpp> コンパイラに変数 RETVAL が必要ないとか、使われないので(RETVAL を)生成すべきではないことを 指示します。 -ほとんどの場合、戻り値の型 C<void> は PPCODE: 指示子と共に使うべきです。 +ほとんどの場合、返り値の型 C<void> は PPCODE: 指示子と共に使うべきです。 =begin original @@ -2211,7 +2207,7 @@ 引数スタックに二つの値を置くための場所を作るのに EXTEND()という マクロが使われています。 PPCODE: 指示子は B<xsubpp>コンパイラに C<SP> と呼ばれる -スタックポインターを生成させ、このポインターは EXTEND() マクロに使われます。 +スタックポインタを生成させ、このポインタは EXTEND() マクロに使われます。 値のスタックに対するプッシュは、PUSHs() というマクロを使います。 =begin original @@ -2252,7 +2248,7 @@ =end original -ときとしてプログラマには、関数が失敗したときに(戻り値とは)別に +ときとしてプログラマには、関数が失敗したときに(返り値とは)別に ステータスを表わす値を返すよりは、単純に C<undef> や空リストを 返したいというときがあるでしょう。 rpcb_gettime() 関数はまさにこういった状況を提示しています。 @@ -2273,11 +2269,11 @@ =end original -以下の XSUB は、C<SV *> を ニーモニック(mnemonic)のみの戻り値の型として +以下の XSUB は、C<SV *> を ニーモニック(mnemonic)のみの返り値の型として 使っていて、CODE: ブロックをコンパイラに対してプログラマが必要な コードすべてを提供していることを示すために使っています。 -sv_newmortal() の呼び出しは戻り値を undef で初期化して、それをデフォルトの -戻り値とします。 +sv_newmortal() の呼び出しは返り値を undef で初期化して、それをデフォルトの +返り値とします。 SV * rpcb_gettime(host) @@ -2297,7 +2293,7 @@ =end original -次の例は、戻り値の中で陽に undef をどのように置き、arise (発生する、起こる) +次の例は、返り値の中で陽に undef をどのように置き、arise (発生する、起こる) する必要があるかという例です。 SV * @@ -2323,7 +2319,7 @@ =end original 空リストを返すには、PPCODE: ブロックを使わなければならず、 -かつその後でスタックに戻り値をプッシュしてはいけません。 +かつその後でスタックに返り値をプッシュしてはいけません。 void rpcb_gettime(host) @@ -2567,7 +2563,7 @@ キーワード PROTOTYPES: は B<xsubpp> の C<-prototypes> や C<-noprototypes> といったオプションに相当します。 -このキーワードはコマンドラインオプションをオーバーライドします。 +このキーワードはコマンドラインオプションを上書きします。 デフォルトではプロトタイプが有効になっています。 プロトタイプが有効になっているとき、XSUB は Perl にプロトタイプを与えます。 このキーワードはXSモジュールの中で、モジュールの異なった部分で何回でも @@ -2611,7 +2607,7 @@ XSUB に対する特定のプロトタイプを使うのに B<xsubpp> を強制的に 使うことができます。 このキーワードは他のすべてのプロトタイプオプションやキーワードを -上書き(override)しますが、カレントの XSUB にのみ影響します。 +上書きしますが、カレントの XSUB にのみ影響します。 Perl のプロトタイプについては L<perlsub/Prototypes> を参照してください。 bool_t @@ -2707,15 +2703,14 @@ =end original -Instead of writing an overloaded interface using pure Perl, you -can also use the OVERLOAD keyword to define additional Perl names -for your functions (like the ALIAS: keyword above). However, the -overloaded functions must be defined with three parameters (except -for the nomethod() function which needs four parameters). If any -function has the OVERLOAD: keyword, several additional lines -will be defined in the c file generated by xsubpp in order to -register with the overload magic. -(TBT) +pure Perl を使ったオーバーロードインターフェースを書く代わりに、 +(上述の ALIAS: キーワードと同様に)関数のための追加の Perl の名前を +定義するための OVERLOAD キーワードも使えます。 +しかし、オーバーロードした関数は (4 つの引数が必要な nomethod() 関数を +除いて)3 つの引数で定義しなければなりません +関数に OVERLOAD: キーワードがあると、オーバーロードしたマジックを +登録するために、いくつかの追加の行がxsubpp によって生成された +c ファイルで定義されます。 =begin original @@ -2726,11 +2721,10 @@ =end original -Since blessed objects are actually stored as RV's, it is useful -to use the typemap features to preprocess parameters and extract -the actual SV stored within the blessed RV. See the sample for -T_PTROBJ_SPECIAL below. -(TBT) +bless されたオブジェクトは実際には RV として保管されるので、 +引数を前処理して bless された RV に保管されている実際の SV を取り出すという +typemap の昨日を使うのが便利です。 +以下の T_PTROBJ_SPECIAL の例を参照してください。 =begin original @@ -2761,12 +2755,11 @@ =end original -In this case, the function will overload both of the three way -comparison operators. For all overload operations using non-alpha -characters, you must type the parameter without quoting, seperating -multiple overloads with whitespace. Note that "" (the stringify -overload) should be entered as \"\" (i.e. escaped). -(TBT) +この場合、関数は比較演算子の 3 つの方法全てをオーバーロードします。 +非英字を使った全てのオーバーロード操作に関して、引数をクォートなしで +タイプする必要があり、複数のオーバーロードは空白で分けられます。 +"" (文字列化のオーバーロード) は \"\" と入力する(エスケープする) +必要があります。 =head2 The FALLBACK: Keyword @@ -2780,10 +2773,10 @@ =end original -In addition to the OVERLOAD keyword, if you need to control how -Perl autogenerates missing overloaded operators, you can set the -FALLBACK keyword in the module header section, like this: -(TBT) +OVERLOAD キーワードに追加して、省略したオーバーロード演算子を +Perl がどのように自動生成するかを制御したい場合は、以下のように +モジュールヘッダセクションに FALLBACK キーワードをセットできます: + MODULE = RPC PACKAGE = RPC @@ -2800,12 +2793,13 @@ =end original -where FALLBACK can take any of the three values TRUE, FALSE, or -UNDEF. If you do not set any FALLBACK value when using OVERLOAD, -it defaults to UNDEF. FALLBACK is not used except when one or -more functions using OVERLOAD have been defined. Please see -L<overload/Fallback> for more details. -(TBT) +ここで FALLBACK は TRUE, FALSE, UNDEF の 3 つの値のいずれかを +取ることができます。 +OVERLOAD を使うときに FALLBACK 値がセットされていないと、デフォルトとして +UNDEF となります。 +1 つまたは複数の関数で OVERLOAD を使っている場合以外は FALLBACK は +使えません。 +さらなる詳細については L<overload/Fallback> を参照してください。 =head2 The INTERFACE: Keyword @@ -2820,11 +2814,11 @@ =end original -This keyword declares the current XSUB as a keeper of the given -calling signature. If some text follows this keyword, it is -considered as a list of functions which have this signature, and -should be attached to the current XSUB. -(TBT) +このキーワードは現在の XSUB を与えられた呼び出しシグネチャの持ち主として +宣言します。 +キーワードになんらかの文字列が続いていると、それはこのシグネチャを +持っている関数のリストとして扱われ、現在の XSUB に付加されたものと +扱われます。 =begin original @@ -2873,11 +2867,11 @@ =end original -The advantage of this approach comparing to ALIAS: keyword is that there -is no need to code a switch statement, each Perl function (which shares -the same XSUB) knows which C function it should call. Additionally, one -can attach an extra function remainder() at runtime by using -(TBT) +ALIAS: キーワードと比べた場合のこの手法の有利な点は、switch 文を +コーディングする必要がなく、それぞれの Perl 関数はどの C 関数を +呼び出すべきかを知っている、ということです。 +更に、以下のように使うことで実行時に追加の関数 remainder() を +他の XSUB から付加できます: CV *mycv = newXSproto("Symbolic::remainder", XS_Symbolic_interface_s_ss, __FILE__, "$$"); @@ -2891,10 +2885,9 @@ =end original -say, from another XSUB. (This example supposes that there was no -INTERFACE_MACRO: section, otherwise one needs to use something else instead of -C<XSINTERFACE_FUNC_SET>, see the next section.) -(TBT) +(この例は、INTERFACE_MACRO: セクションがないことを想定しています; +さもなければ、C<XSINTERFACE_FUNC_SET> 以外の何かを使う必要があります; +次の章を参照してください。) =head2 The INTERFACE_MACRO: Keyword @@ -2911,13 +2904,13 @@ =end original -This keyword allows one to define an INTERFACE using a different way -to extract a function pointer from an XSUB. The text which follows -this keyword should give the name of macros which would extract/set a -function pointer. The extractor macro is given return type, C<CV*>, -and C<XSANY.any_dptr> for this C<CV*>. The setter macro is given cv, -and the function pointer. -(TBT) +このキーワードは、XSUB から関数ポインタを取り出すために異なった方法を +使って INTERFACE を定義できるようにします。 +このキーワードに引き続く文字列は、関数ポインタを展開/セットする +マクロの名前になります。 +展開マクロは、返り値、C<CV*>、この C<CV*> のための C<XSANY.any_dptr> が +渡されます。 +セッターマクロは cv と関数ポインタが渡されます。 =begin original @@ -2927,10 +2920,9 @@ =end original -The default value is C<XSINTERFACE_FUNC> and C<XSINTERFACE_FUNC_SET>. -An INTERFACE keyword with an empty list of functions can be omitted if -INTERFACE_MACRO keyword is used. -(TBT) +デフォルト値は C<XSINTERFACE_FUNC> と C<XSINTERFACE_FUNC_SET> です。 +空の関数リストのINTERFACE キーワードは、INTERFACE_MACRO キーワードが +使われたときは省略できます。 =begin original @@ -2941,11 +2933,10 @@ =end original -Suppose that in the previous example functions pointers for -multiply(), divide(), add(), subtract() are kept in a global C array -C<fp[]> with offsets being C<multiply_off>, C<divide_off>, C<add_off>, -C<subtract_off>. Then one can use -(TBT) +前述の例で、multiply(), divide(), add(), subtract() の関数ポインタが +C 配列 C<fp[]> にオフセット C<multiply_off>, C<divide_off>, C<add_off>, +C<subtract_off> で保管されていると仮定します。 +以下のように #define XSINTERFACE_FUNC_BYOFFSET(ret,cv,f) \ ((XSINTERFACE_CVT(ret,))fp[CvXSUBANY(cv).any_i32]) @@ -3143,7 +3134,7 @@ これはパラメータを参照渡しする C 関数のための CODE: ブロックを避けるときに 有用です。 -典型的には、パラメータがポインター型でないとき(C<int*> や C<long*> ではなく、 +典型的には、パラメータがポインタ型でないとき(C<int*> や C<long*> ではなく、 C<int> か C<long>)に使われます。 =begin original @@ -3235,8 +3226,8 @@ =end original -コメントは XSUB に、行の最初にある空白でないキャラクタとしてC<#>を -使うことで追加できます。 +行の最初にある空白でないキャラクタとしてC<#>を使うことで、 +XSUB にコメントを追加できます。 コメントを C のプリプロセッサ指示子と取り違えられないように 注意してください。 これを防ぐ単純な方法は、C<#> の前に空白を置くことです。 @@ -3300,11 +3291,11 @@ XSUB 名に C<::> が含まれている場合、C++ のメソッドとして扱われます。 生成された Perl 関数は、その関数に対する第一引数がオブジェクト -ポインターであると仮定されます。 -このオブジェクトポインターは THIS と呼ばれる変数に格納されます。 +ポインタであると仮定されます。 +このオブジェクトポインタは THIS と呼ばれる変数に格納されます。 オブジェクトは C++ の new() を使って作成されたものであるべきで、かつ、 sv_setref_pv() マクロによって Perl から bless されているべきものです。 -Perl によるオブジェクトの blessing は tyepmap によって扱うことができます。 +Perl によるオブジェクトの bless は typemap で扱えます。 typemap の例はこのセクションの最後にあります。 =begin original @@ -3369,10 +3360,10 @@ =end original -両方の Perl 関数ともその第一引数としてオブジェクトを期待しています。 +両方の Perl 関数とも第一引数としてオブジェクトを期待しています。 生成された C++ コードではオブジェクトは C<THIS> と呼ばれ、メソッド呼び出しは このオブジェクトで実行されます。 -このため、C++コード blue(), set_blue() メソッドは以下のようにして +このため、C++ コード blue(), set_blue() メソッドは以下のようにして 呼び出されます: RETVAL = THIS->blue(); @@ -3405,7 +3396,7 @@ =end original -関数名が B<DESTROY> である場合、C++の C<delete> 関数が呼び出されて、 +関数名が B<DESTROY> である場合、C++ の C<delete> 関数が呼び出されて、 C<THIS> はそれに対するパラメータとして与えられます。 このような生成されたコードは: @@ -3433,7 +3424,7 @@ =end original -関数名が B<new> であった場合、動的にC++オブジェクトを作成するために +関数名が B<new> であった場合、動的に C++ オブジェクトを作成するために C++ の C<new> 関数が呼び出されます。 XSUB は C<CLASS> と呼ばれる変数に保持されるクラス名が、第一引数として 与えられることを期待します。 @@ -3495,10 +3486,11 @@ =end original -Perl と C ライブラリとの間のインターフェースをストレートに C から X Sへの -変換とデザインした場合、大概はそれで十分です。 +Perl と C ライブラリとの間のインターフェースを設計するとき、 +しばしば (C<h2xs -x> によって生成されるように) ストレートに +C から XS への変換することで十分となります。 しかし、時々インターフェースは非常に C に似たものに見え、 -時折、特に C の関数がそのパラメータを変更したり、(「返り値が負の場合は +特に C の関数がそのパラメータを変更したり、(「返り値が負の場合は 失敗を意味します」のような) 範囲内の失敗を返すような場合には 直感的でないものになります。 プログラマがもっと Perl 的なインターフェースを作りたいと望んでいる場合には、 @@ -3512,7 +3504,7 @@ =end original -入出力や出力のパラメータのある C の関数を見つける。 +入出力や出力のパラメータのある C の関数を見つけ出します。 こういった関数に対する XSUB は Perl にリストを返すことができます。 =begin original @@ -3527,7 +3519,7 @@ =end original -失敗を示すのに範囲内の情報を使う C 関数を識別します。 +失敗を示すのに範囲内の情報を使う C 関数を見つけ出します。 これらは関数が失敗したときには空リストや undef を返す候補です。 もし C 関数の呼び出しなしに失敗が検出されるなら、 失敗を報告するのに INIT: セクションを使いたいかもしれません。 @@ -3591,8 +3583,8 @@ =end original -C の関数に対する引数リストや戻り値の中にあるポインターを見つけ出します。 -一部のポインターは、入出力や出力のパラメータのために使われており、 +C の関数に対する引数リストや返り値の中にあるポインタを見つけ出します。 +一部のポインタは、入出力や出力のパラメータのために使われており、 これらは C<&> 単項演算子で扱うことができ、おそらくは、NO_INIT キーワードが 使えます。 その他のいくつかは C<int *> の方を扱う必要があり、 @@ -3648,7 +3640,7 @@ C の構造体を扱うときには、XS の型として B<T_PTROBJ> か B<T_PTRREF> の いずれかを選択すべきです。 -これら二つの型は複雑なオブジェクトへのポインターを扱うために +これら二つの型は複雑なオブジェクトへのポインタを扱うために デザインされました。 T_PTRREF 型は T_PTROBJ 型が bless されたオブジェクトを要求するのに対して、 bless されていない Perl オブジェクトも使うことができます。 @@ -3672,17 +3664,17 @@ 以下に示す XS コードは ONC+ TIRPC と共に使われた 関数 getnetconfigent() です。 -関数 getnetconfigent() は C の構造体へのポインターを返し、以下にあるような +関数 getnetconfigent() は C の構造体へのポインタを返し、以下にあるような C のプロトタイプを持ちます。 -この例はどのようにして C のポインターを Perl のリファレンスにするかを +この例はどのようにして C のポインタを Perl のリファレンスにするかを 示します。 Perl はこのリファレンスを bless されたオブジェクトへのリファレンスと -みなし、そしてオブジェクトに対するデストラクターの呼び出しを試みます。 -デストラクターは XS のソースで、getnetconfigent() が使ったメモリを +みなし、そしてオブジェクトに対するデストラクタの呼び出しを試みます。 +デストラクタは XS のソースで、getnetconfigent() が使ったメモリを 解放するために提供されます。 -XS にあるデストラクターは、B<DESTROY>で終わる名前の XSUB 関数を +XS にあるデストラクタは、B<DESTROY>で終わる名前の XSUB 関数を 指定することで作成することができます。 -XS デストラクターは別の XSUB によって割り当てられた (malloc された) +XS デストラクタは別の XSUB によって割り当てられた (malloc された) メモリを解放するために使うこともできます。 struct netconfig *getnetconfigent(const char *netid); @@ -3699,12 +3691,12 @@ =end original -C<typedef> は、C<struct netconfig> を生成するためにあります。 +C<typedef> が C<struct netconfig> のために生成されます。 Perl のオブジェクトは C の型の名前とマッチするクラスにおいて( C<Ptr>と -いうタグが付加されて) blessされます。 +いうタグが付加されて) bless されます。 その名前は、Perl のパッケージ名として使うのであれば空白を 含むべきではありません。 -デストラクターは オブジェクトのクラスに対応するクラスに置かれて、 +デストラクタはオブジェクトのクラスに対応するクラスに置かれて、 キーワード PREFIX は Perl が期待するようにワード DESTOROY の名前を 切り詰めるのに使われます。 @@ -3760,7 +3752,8 @@ =end original -Perl が $netconf によって参照されるオブジェクトを始末する (destroy)とき、 +Perl が $netconf によってリファレンスされるオブジェクトを +始末(destroy)するとき、 そのオブジェクトに (そのオブジェクトのための) XSUB DESTROY が送られます。 Perl はそのオブジェクトが C の構造体なのか、Perl のオブジェクトでなのかを 決定することは出来ませんし、気にすることもありません。 @@ -3769,6 +3762,8 @@ =head2 The Typemap +(typemap) + =begin original The typemap is a collection of code fragments which are used by the B<xsubpp> @@ -3838,9 +3833,9 @@ TYEPMAPセクションだけを必要としています。 カスタム typemap は getnetconfigent() の例で拡張 typemap の典型的な 使用例として使われています。 -そういった typemap は C の構造体とT_PTROBJ tyepmap の equate のために +そういった typemap は C の構造体を T_PTROBJ tyepmap と一致させるために 使われています。 -getnetconfigent() で使われるtypemap はここにあります。 +getnetconfigent() で使われる typemap をここで示します。 C の型は XS の型とタブで分けられていて、C の単項演算子 C<*> は C の型名の 一部としてみなされることに注意してください。 @@ -3856,7 +3851,7 @@ =end original もっと複雑な例を挙げましょう。 -C<struct netconfig> を C<Net::Config> というクラスにblessしたいと +C<struct netconfig> を C<Net::Config> というクラスに bless したいと 考えていると仮定しましょう。 これを行うやり方の一つは、アンダースコア(_)を以下の様にパッケージ名を 区切るために使うというものです。 @@ -4248,7 +4243,6 @@ print "time = $a\n"; print "netconf = $netconf\n"; - =head1 XS VERSION (XS バージョン)