argra****@users*****
argra****@users*****
2009年 1月 4日 (日) 04:46:48 JST
Index: docs/perl/5.8.8/perlxs.pod diff -u docs/perl/5.8.8/perlxs.pod:1.8 docs/perl/5.8.8/perlxs.pod:1.9 --- docs/perl/5.8.8/perlxs.pod:1.8 Sat Jan 3 03:53:34 2009 +++ docs/perl/5.8.8/perlxs.pod Sun Jan 4 04:46:48 2009 @@ -726,9 +726,8 @@ =end original -When you're returning an C<AV *> or a C<HV *>, you have make sure -their reference count is decremented by making the AV or HV mortal: -(TBT) +C<AV *> や C<HV *> を返すとき、AV や HV を揮発性にすることによって、 +確実に参照カウントを減らしてください: AV * array() @@ -799,8 +798,8 @@ =end original -XS ソースファイルに関数がある場合には、キーワード PACKAGE を使ってパッケージに -分割しなければなりません。 +XS ソースファイルの関数をパッケージに分割しなければならないとき、 +キーワード PACKAGE を使うべきです。 このキーワードは MODULE キーワードと共に使われ、かつ、そのすぐ後に なければなりません。 @@ -824,10 +823,8 @@ =end original -The same package name can be used more than once, allowing for -non-contiguous code. This is useful if you have a stronger ordering -principle than package names. -(TBT) +同じパッケージ名を複数回使えるので、連続していないコードも可能です。 +これは、パッケージ名よりより強い順序原則を持っている場合に有用です。 =begin original @@ -969,12 +966,13 @@ =end original -B<xsubpp> emits an automatic C<SvSETMAGIC()> for all parameters in the -OUTPUT section of the XSUB, except RETVAL. This is the usually desired -behavior, as it takes care of properly invoking 'set' magic on output -parameters (needed for hash or array element parameters that must be -created if they didn't exist). If for some reason, this behavior is -not desired, the OUTPUT section may contain a C<SETMAGIC: DISABLE> line +B<xsubpp> は、XSUB の OUTPUT セクション中、RETVAL を除く全てのパラメータに +大して自動的に C<SvSETMAGIC()> を出力します。 +これは普通は望ましい振る舞いです; なぜなら出力パラメータに適切に +'set' magic を起動する面倒を見るからです(ハッシュや配列の要素が +存在しなかったとき、作成しなければならないので必要です)。 +もし何らかの理由でこの振る舞いが望ましくないなら、 +the OUTPUT section may contain a C<SETMAGIC: DISABLE> line to disable it for the remainder of the parameters in the OUTPUT section. Likewise, C<SETMAGIC: ENABLE> can be used to reenable it for the remainder of the OUTPUT section. See L<perlguts> for more details @@ -1207,11 +1205,10 @@ 構成されています。 しかしプログラマは、typemap をオーバーライドすることや別の (もしくは追加の)初期化コードを提供することができます。 -Initialization code starts with the first -C<=>, C<;> or C<+> on a line in the INPUT: section. The only -exception happens if this C<;> terminates the line, then this C<;> -is quietly ignored. -(TBT) +初期化コードは INPUT: セクションの行で最初の +C<=>, C<;>, C<+> から始まります。 +唯一の例外はこの C<;> が行を終端している場合で、この C<;> は +暗黙に無視されます。 =begin original @@ -1408,11 +1405,10 @@ パラメータとして発行した typemap のコードに従うことになります。 これは C コードが終わった後の結果となることがあり、C の構文エラーと なります。 -Similar -errors may happen with an explicit C<;>-type or C<+>-type initialization of -parameters is used (see L<"Initializing Function Parameters">). Declaring -these variables in an INIT: section will not help. -(TBT) +同様のエラーは、明示的に C<;>-型や C<+>-型のパラメータの初期化が使われた +場合にも起こります +(L<"Initializing Function Parameters"> を参照してください)。 +これらの変数を INIT: セクションで宣言することは助けにはなりません。 =begin original @@ -1435,7 +1431,7 @@ =end original 以下の例は、等価であるけれども複雑な typemap を使った場合には最初の例が -安全である、という例です。 +より安全である、という例です。 bool_t rpcb_gettime(timep) @@ -1455,10 +1451,9 @@ =end original -For this particular case an INIT: keyword would generate the -same C code as the PREINIT: keyword. +この特定の場合のために、INIT: キーワードは PREINIT: キーワードと同じ +C コードを生成します。 もう一つの、正しいがエラーになりやすい例です: -(TBT) bool_t rpcb_gettime(timep) @@ -2053,11 +2048,11 @@ =end original -The C_ARGS: keyword allows creating of XSUBS which have different -calling sequence from Perl than from C, without a need to write -CODE: or PPCODE: section. The contents of the C_ARGS: paragraph is -put as the argument to the called C function without any change. -(TBT) +C_ARGS: キーワードは、Perl からの呼び出し手順ではなく C からの呼び出し手順を +持つ XSUBS を、CODE: や PPCODE: セクションを書くことなく作成することを +可能にします。 +C_ARGS: 段落の内容は、呼び出される C 関数の引数として、何の変更もなく +使われます。 =begin original @@ -2077,10 +2072,9 @@ =end original -and that the default flags are kept in a global C variable -C<default_flags>. Suppose that you want to create an interface which -is called as -(TBT) +そしてデフォルトのフラグは C のグローバル変数 C<default_flags> に +保管されているとします。 +以下のようにして呼び出すインターフェースを作りたいとします: $second_deriv = $function->nth_derivative(2); @@ -2092,7 +2086,6 @@ これをするためには、XSUB を以下のように宣言します: - symbolic nth_derivative(function, n) symbolic function @@ -2287,7 +2280,7 @@ 返したいというときがあるでしょう。 rpcb_gettime() 関数はまさにこういった状況を提示しています。 関数が成功したときには私たちは関数が時刻を返すことを望み、失敗したときには -undefを返して欲しいと望んでいます。 +undef を返して欲しいと望んでいます。 以下に示す Perl プログラムでは、$timep の値は undef か正しい時刻のいずれかに なります。 @@ -2303,7 +2296,7 @@ =end original -以下のXSUB は、C<SV *> を ニーモニック(mnemonic)のみの戻り値の型として +以下の XSUB は、C<SV *> を ニーモニック(mnemonic)のみの戻り値の型として 使っていて、CODE: ブロックをコンパイラに対してプログラマが必要な コードすべてを提供していることを示すために使っています。 sv_newmortal() の呼び出しは戻り値を undef で初期化して、それをデフォルトの @@ -2378,7 +2371,7 @@ =end original -一部には、上記のXSUB において、最後の文へfall through するように +一部には、上記のXSUB において、最後の文へ fall through するように 制御するよりは陽に C<return> を含めるようにしたいと考える人もいるでしょう。 そういった場合には、代わりに C<XSRETURN_EMPTY> を使います。 これは XSUB スタックが適切に調整されることを保証します。 @@ -2478,11 +2471,10 @@ =end original -This keyword can be used when an XSUB requires special procedures -executed after the C subroutine call is performed. When the POSTCALL: -keyword is used it must precede OUTPUT: and CLEANUP: blocks which are -present in the XSUB. -(TBT) +このキーワードは、C サブルーチンを実行した後に特別な手続きが必要な XSUB に +使います。 +POSTCALL: キーワードを使う時は、XSUB に存在する +OUTPUT: と CLEANUP: ブロックの前になければなりません。 =begin original @@ -2500,9 +2492,8 @@ =end original -The POSTCALL: block does not make a lot of sense when the C subroutine -call is supplied by user by providing either CODE: or PPCODE: section. -(TBT) +The POSTCALL: ブロックは、C サブルーチン呼び出しがユーザーから +CODE: や PPCODE: セクションによって提供される場合はあまり意味はありません。 =head2 The BOOT: Keyword @@ -2520,7 +2511,7 @@ キーワード BOOT: はエクステンションのブートストラップ関数のためにコードを 追加するのに使われます。 -ブートストラップ関数は B<xsubpp>コンパイラによって生成され、通常は +ブートストラップ関数は B<xsubpp> コンパイラによって生成され、通常は Perl に登録するような XSUB に必要な文を保持します。 BOOT: キーワードによってプログラマはコンパイラに対して、 ブートストラップ関数にコードを追加することを指示できます。 @@ -3160,10 +3151,10 @@ =end original -The C<&> unary operator in the INPUT: section is used to tell B<xsubpp> -that it should convert a Perl value to/from C using the C type to the left -of C<&>, but provide a pointer to this value when the C function is called. -(TBT) +INPUT: セクションにある C<&> 単項演算子は、 +Perl の値と C を、C<&> の左にある C の型を使って変換する必要があるけれども、 +C 関数が呼び出されたときはこの値へのポインタが提供されることを +B<xsubpp> に伝えるために使われます。 =begin original @@ -3187,7 +3178,7 @@ =end original -次のXSUB は正しくない C コードを生成してしまいます。 +次の XSUB は正しくない C コードを生成してしまいます。 B<xsubpp> コンパイラはこれを、C<(char *host, time_t timep)> という引数を 伴って C<rpcb_gettime()> を呼ぶコードに変換しますが、実際に C<rpcb_gettime()> が C<timep> パラメータの型として要求しているのは @@ -3248,14 +3239,14 @@ コメントは MODULE キーワードの後の任意の場所で使えます。 コンパイラはプリプロセッサ指示子をいじらずにそのまま出力し、 コメント行は削除します。 -POD documentation is allowed at any point, both in the -C and XS language sections. POD must be terminated with a C<=cut> command; -C<xsubpp> will exit with an error if it does not. It is very unlikely that -human generated C code will be mistaken for POD, as most indenting styles -result in whitespace in front of any line starting with C<=>. Machine -generated XS files may fall into this trap unless care is taken to -ensure that a space breaks the sequence "\n=". -(TBT) +POD 文書は C と XS の両方のセクションで、どの地点でも利用できます。 +POD は C<=cut> コマンドで終端されなければなりません; +これがないと C<xsubpp> はエラーを出して終了します。 +ほとんどのインデントスタイルは C<=> で始まる行の先頭には空白を +入れることになるので、人間が生成した C コードが間違って POD と +みなされることはほとんどありそうにないことです。 +機械が生成した XS ファイルは、空白を "\n=" で区切らないように気を付けないと、 +同じ罠に引っかかるかもしれません。 =begin original @@ -3562,11 +3553,11 @@ Identify the C functions which use some inband info as an indication of failure. これらは関数が失敗したときには空リストや undef を返す候補です。 -If the -failure may be detected without a call to the C function, you may want to use -an INIT: section to report the failure. For failures detectable after the C -function returns one may want to use a POSTCALL: section to process the -failure. In more complicated cases use CODE: or PPCODE: sections. +もし C 関数の呼び出しなしに失敗が検出されるなら、 +失敗を報告するのに INIT: セクションを使いたいかもしれません。 +C 関数から返った後で検出可能な失敗については、失敗を処理するために +POSTCALL: セクションを使いたいかもしれません。 +もっと複雑な場合では CODE: か PPCODE: のセクションを使ってください。 (TBT) =begin original @@ -3591,11 +3582,11 @@ =end original -near the beginning of XS file, and create an OUTPUT typemap entry -for C<negative_is_failure> which converts negative values to C<undef>, or -maybe croak()s. After this the return value of type C<negative_is_failure> -will create more Perl-like interface. -(TBT) +XS ファイルの先頭近くに置き、負の数を C<undef> に変換するか、おそらく +croak() するような C<negative_is_failure> のための OUTPUT typemap エントリを +作成します。 +この後、C<negative_is_failure> 型の返り値は、より Perl 風の +インターフェースを作ります。 =begin original @@ -3627,13 +3618,11 @@ C の関数に対する引数リストや戻り値の中にあるポインターを見つけ出します。 一部のポインターは、入出力や出力のパラメータのために使われており、 -they can be handled in XS with the C<&> unary operator, -and, possibly, using the NO_INIT keyword. -Some others will require handling of types like C<int *>, and one needs -to decide what a useful Perl translation will do in such a case. When -the semantic is clear, it is advisable to put the translation into a typemap -file. -(TBT) +これらは C<&> 単項演算子で扱うことができ、おそらくは、NO_INIT キーワードが +使えます。 +その他のいくつかは C<int *> の方を扱う必要があり、 +このような場合に便利な Perl 変換をするかを決定する必要があります。 +意味論が明確な場合、変換を typemap ファイルに置くことが望ましいです。 =begin original @@ -3659,11 +3648,11 @@ =end original -If the same C type is used in several different contexts which require -different translations, C<typedef> several new types mapped to this C type, -and create separate F<typemap> entries for these new types. Use these -types in declarations of return type and parameters to XSUBs. -(TBT) +同じ C の型が、異なった変換を必要とする異なった複数のコンテキストで +使われる場合、この C の型にマッピングされる新しいいくつかの型を +C<typedef> して、これらの新しい型に対して別々の F<typemap> エントリを +作成します。 +これらの型を返り値の宣言と XSUB への引数に使います。 =head2 Perl Objects And C Structures @@ -3948,11 +3937,11 @@ =end original -The INT2PTR macro (defined in perl.h) casts an integer to a pointer, -of a given type, taking care of the possible different size of integers -and pointers. There are also PTR2IV, PTR2UV, PTR2NV macros, -to map the other way, which may be useful in OUTPUT sections. -(TBT) +(perl.h に定義されている) INT2PTR マクロは、整数から与えられた型の +ポインタへのキャストを、整数とポインタとのサイズが異なる可能性を +考慮しつつ行います。 +また、OUTPUT セクションで有用かもしれない、他の方法でマッピングする、 +PTR2IV, PTR2UV, PTR2NV マクロもあります。 =head2 Safely Storing Static Data in XS Index: docs/perl/5.8.8/perlxstut.pod diff -u docs/perl/5.8.8/perlxstut.pod:1.8 docs/perl/5.8.8/perlxstut.pod:1.9 --- docs/perl/5.8.8/perlxstut.pod:1.8 Sat Jan 3 03:53:34 2009 +++ docs/perl/5.8.8/perlxstut.pod Sun Jan 4 04:46:48 2009 @@ -936,9 +936,7 @@ 関数の値が関数の戻り値として返されるのではなく、関数に渡された 変数の値を変更することで返されます。 -You might have guessed that when you saw that the return value -of round is of type "void". -(TBT) +round の返り値の型は "void" であると推測したかもしれません。 =back @@ -1799,11 +1797,10 @@ =end original -While Perl passes arguments to functions by reference, -C passes arguments by value; to implement a C function which modifies data -of one of the "arguments", the actual argument of this C function would be -a pointer to the data. Thus two C functions with declarations -(TBT) +Perl は関数に引数を参照渡ししますが、C は引数を値渡しします; 「引数」の +一つのデータを修正する C 関数を実装するには、この C 関数の実際の引数は +そのデータへのポインタになります。 +従って、2 つの C 関数宣言: int string_length(char *s); int upper_case_char(char *cp);