argra****@users*****
argra****@users*****
2009年 1月 28日 (水) 20:46:34 JST
Index: docs/perl/5.8.8/perlpacktut.pod diff -u docs/perl/5.8.8/perlpacktut.pod:1.10 docs/perl/5.8.8/perlpacktut.pod:1.11 --- docs/perl/5.8.8/perlpacktut.pod:1.10 Tue Jan 20 01:17:32 2009 +++ docs/perl/5.8.8/perlpacktut.pod Wed Jan 28 20:46:34 2009 @@ -1,3 +1,6 @@ + +=encoding euc-jp + =head1 NAME =begin original @@ -816,20 +819,23 @@ =end original -Each of the integer pack codes C<sSlLqQ> results in a fixed number of bytes, -no matter where you execute your program. This may be useful for some -applications, but it does not provide for a portable way to pass data -structures between Perl and C programs (bound to happen when you call -XS extensions or the Perl function C<syscall>), or when you read or -write binary files. What you'll need in this case are template codes that -depend on what your local C compiler compiles when you code C<short> or -C<unsigned long>, for instance. These codes and their corresponding -byte lengths are shown in the table below. Since the C standard leaves -much leeway with respect to the relative sizes of these data types, actual -values may vary, and that's why the values are given as expressions in -C and Perl. (If you'd like to use values from C<%Config> in your program -you have to import it with C<use Config>.) -(TBT) +整数 pack コード C<sSlLqQ> のそれぞれは、どこでプログラムが +実行されたとしても固定長のバイト列となります。 +これは一部のアプリケーションでは有用ですが、(XS エクステンションや +Perl 関数 C<syscall> を呼び出すときに必要となる) +Perl と C のプログラムの間でデータ構造を渡す場合や、バイナリファイルを +読み書きするときの、移植性のある手段は提供しません +この場合に必要なものは、例えば、C<short> や C<unsigned long> と書いたときに +ローカルの C コンパイラがどのようにコンパイルするかに依存する +テンプレートコードです。 +これらのコードと、それに対応するバイト長は以下のテーブルの様になります。 +C 標準はそれぞれのデータ型の大きさの点で多くの自由裁量を残しているので、 +実際の値は異なるかもしれず、そしてこれがなぜ値が C と Perl の式として +与えられているかの理由です。 +(もしプログラムで C<%Config> の値を使いたい場合は、C<use Config> として +これをインポートする必要があります。) + +=begin original signed unsigned byte length in C byte length in Perl s! S! sizeof(short) $Config{shortsize} @@ -837,6 +843,14 @@ l! L! sizeof(long) $Config{longsize} q! Q! sizeof(long long) $Config{longlongsize} +=end original + + 符号付き 符号なし C でのバイト長 Perl でのバイト長 + s! S! sizeof(short) $Config{shortsize} + i! I! sizeof(int) $Config{intsize} + l! L! sizeof(long) $Config{longsize} + q! Q! sizeof(long long) $Config{longlongsize} + =begin original The C<i!> and C<I!> codes aren't different from C<i> and C<I>; they are @@ -975,15 +989,15 @@ =end original -The pack code for big-endian (high order byte at the lowest address) is -C<n> for 16 bit and C<N> for 32 bit integers. You use these codes -if you know that your data comes from a compliant architecture, but, -surprisingly enough, you should also use these pack codes if you -exchange binary data, across the network, with some system that you -know next to nothing about. +ビッグエンディアン(最下位アドレスが最上位バイト)での pack コードは、 +16 ビット整数が C<n>、 32 ビット整数が C<N> です。 +もし準拠したアーキテクチャからデータが来ることが分かっているなら +これらのコードを使います; +もしネットワークを通して何も知らない他のシステムとバイナリデータを +交換する場合にもこれらの pack コードを使うべきです。 理由は単純で、この順序が I<ネットワーク順序> として選ばれていて、標準を 恐れる全てのプログラムがこの慣例に従っているはずだからです。 -(This is, of course, a stern +(This is, of course, a stern backing for one of the Lilliputian parties and may well influence the political development there.) それで、もし何バイトあるかの長さを先に送ることでメッセージを送ることを @@ -1035,11 +1049,10 @@ 浮動小数点数を pack するには、you have the choice between the pack codes C<f> and C<d> which pack into (or unpack from) single-precision or -double-precision representation as it is provided by your system. (There -is no such thing as a network representation for reals, so if you want -to send your real numbers across computer boundaries, you'd better stick -to ASCII representation, unless you're absolutely sure what's on the other -end of the line.) +double-precision representation as it is provided by your system. +(実数に対してはネットワーク表現のようなものはないので、もし他の +コンピュータに実数を送りたい場合は、ネットワークの向こう側で何が起きるかが +完全に分かっているのでない限りは、ASCII 表現で我慢した方がよいです。) (TBT) =head1 Exotic Templates Index: docs/perl/5.8.8/perlxs.pod diff -u docs/perl/5.8.8/perlxs.pod:1.10 docs/perl/5.8.8/perlxs.pod:1.11 --- docs/perl/5.8.8/perlxs.pod:1.10 Fri Jan 16 04:56:10 2009 +++ docs/perl/5.8.8/perlxs.pod Wed Jan 28 20:46:34 2009 @@ -657,15 +657,14 @@ =end original -When you're using RETVAL to return an C<SV *>, there's some magic -going on behind the scenes that should be mentioned. When you're -manipulating the argument stack using the ST(x) macro, for example, -you usually have to pay special attention to reference counts. (For -more about reference counts, see L<perlguts>.) To make your life -easier, the typemap file automatically makes C<RETVAL> mortal when -you're returning an C<SV *>. Thus, the following two XSUBs are more -or less equivalent: -(TBT) +C<SV *> を返すために RETVAL を使うとき、言及しておくべき魔法が舞台裏で +行われます。 +例えば、ST(x) マクロを使って引数スタックを操作するとき、普通は +参照カウントに特別な注意を払う必要があります。 +(参照カウントに関しては、L<perlguts> を参照してください。) +人生をより簡単にするために、C<SV *> を返そうとしているときは +typemap ファイルは自動的に C<RETVAL> を揮発性にします。 +従って、以下の 2 つの XSUB はだいたい等価です: void alpha() @@ -690,11 +689,10 @@ =end original -This is quite useful as it usually improves readability. While -this works fine for an C<SV *>, it's unfortunately not as easy -to have C<AV *> or C<HV *> as a return value. You I<should> be -able to write: -(TBT) +これは普通可読性を改善するのでかなり有用です。 +これは C<SV *> ではうまく動作する一方、残念ながら返り値として +C<AV *> や C<HV *> を使うときには簡単ではありません。 +以下のように書ける I<べき> です: AV * array() @@ -713,11 +711,11 @@ =end original -But due to an unfixable bug (fixing it would break lots of existing -CPAN modules) in the typemap file, the reference count of the C<AV *> -is not properly decremented. Thus, the above XSUB would leak memory -whenever it is being called. The same problem exists for C<HV *>. -(TBT) +しかし typemap ファイルにある修正されていないバグのために(これを +修正すると既存の多くの CPANモジュールが動かなくなります)、 +C<AV *> の参照カウントは適切にデクリメントされません。 +従って、上述の XSUB は、呼び出されるごとにメモリリークします。 +同じ問題は C<HV *> にもあります。 =begin original @@ -972,12 +970,11 @@ '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 -about 'set' magic. -(TBT) +OUTPUT セクションの残りのパラメータでこれを無効にするために、 +OUTPUT セクションには C<SETMAGIC: DISABLE> という行を含めることが出来ます。 +同様に、C<SETMAGIC: ENABLE> は OUTPUT セクションの残りのために +再有効化するために使えます。 +'set' マジックに関するさらなる詳細については L<perlguts> を参照してください。 =head2 The NO_OUTPUT Keyword @@ -992,11 +989,10 @@ =end original -The NO_OUTPUT can be placed as the first token of the XSUB. This keyword -indicates that while the C subroutine we provide an interface to has -a non-C<void> return type, the return value of this C subroutine should not -be returned from the generated Perl subroutine. -(TBT) +NO_OUTPUT キーワードは XSUB の最初のトークンとして置くことが出来ます。 +このキーワードは、インターフェースを提供する C サブルーチンが C<void> でない +返り値を持ちますが、この C サブルーチンからの返り値は生成された Perl +サブルーチンから返されるべきではないことを示します。 =begin original @@ -1006,10 +1002,9 @@ =end original -With this keyword present L<The RETVAL Variable> is created, and in the -generated call to the subroutine this variable is assigned to, but the value -of this variable is not going to be used in the auto-generated code. -(TBT) +このキーワードが存在すると L<The RETVAL Variable> は作成され、 +サブルーチンへの生成された呼び出しの中でこの変数に代入されますが、 +この変数の値は自動生成されたコードの中では使われません。 =begin original @@ -1020,11 +1015,11 @@ =end original -This keyword makes sense only if C<RETVAL> is going to be accessed by the -user-supplied code. It is especially useful to make a function interface -more Perl-like, especially when the C return value is just an error condition -indicator. For example, -(TBT) +このキーワードは、C<RETVAL> がユーザーが追加したコードによって +アクセスされる場合にのみ意味があります。 +これは、関数インターフェースをより Perl 風にする場合、 +特に C の返り値が単にエラーを示すだけのものの場合に特に有用です。 +例えば、 NO_OUTPUT int delete_file(char *name) @@ -1267,18 +1262,14 @@ =end original -If the initialization begins with C<=>, then it is output in -the declaration for the input variable, replacing the initialization -supplied by the typemap. If the initialization -begins with C<;> or C<+>, then it is performed after -all of the input variables have been declared. In the C<;> -case the initialization normally supplied by the typemap is not performed. -For the C<+> case, the declaration for the variable will include the -initialization from the typemap. A global -variable, C<%v>, is available for the truly rare case where -information from one initialization is needed in another -initialization. -(TBT) +初期化が C<=> で始まっていると、入力変数の宣言中に出力され、 +typemap によって提供された初期化を置き換えます。 +初期化が C<;> か C<+> で始まっていると、これは全ての入力変数が +宣言された後に実行されます。 +C<;> の場合、typemap によって通常提供される初期化は実行されません。 +C<+> の場合、変数の宣言は typemap からの初期化に含まれます。 +グローバル変数 C<%v> は、ある初期化からの情報は他の初期化に必要になるという +本当に珍しい場合のために利用可能です。 =begin original @@ -1307,14 +1298,13 @@ =end original -The construct C<\$v{timep}=@{[$v{timep}=$arg]}> used in the above -example has a two-fold purpose: first, when this line is processed by -B<xsubpp>, the Perl snippet C<$v{timep}=$arg> is evaluated. Second, -the text of the evaluated snippet is output into the generated C file -(inside a C comment)! During the processing of C<char *host> line, -$arg will evaluate to C<ST(0)>, and C<$v{timep}> will evaluate to -C<ST(1)>. -(TBT) +上述の例で使われている C<\$v{timep}=@{[$v{timep}=$arg]}> という構文は +2 つの目的があります: 1 つ目に、この行が B<xsubpp> によって処理されると、 +Perl スニペット C<$v{timep}=$arg> が評価されます。 +2 つ目に、評価されたスニペットのテキストは生成された C ファイル +(C コメントの内側) へ出力されます! +C<char *host> の行の処理中に、$arg は C<ST(0)> に評価され、C<$v{timep}> は +C<ST(1)> に評価されます。 =head2 Default Parameter Values @@ -1494,10 +1484,8 @@ =end original -The ability to put additional declarations before the typemap entries are -processed is very handy in the cases when typemap conversions manipulate -some global state: -(TBT) +typemap エントリが処理される前に追加の宣言を置く能力は、typemap 変換が +グローバルな状態を操作する場合にはとても便利です: MyObject mutate(o) @@ -1517,11 +1505,10 @@ =end original -Here we suppose that conversion to C<MyObject> in the INPUT: section and from -MyObject when processing RETVAL will modify a global variable C<global_state>. -After these conversions are performed, we restore the old value of -C<global_state> (to avoid memory leaks, for example). -(TBT) +ここで、RETVAL の処理がグローバル変数 C<global_state> を変更するときに +MyObject から INPUT: セクションで C<MyObject> に変換するとします。 +これらの変換が行われた後、(例えば、メモリリークを避けるために) +C<global_state> の古い値を戻します。 =begin original @@ -1531,10 +1518,10 @@ =end original -There is another way to trade clarity for compactness: INPUT sections allow -declaration of C variables which do not appear in the parameter list of -a subroutine. Thus the above code for mutate() can be rewritten as -(TBT) +ここにはもう一つの明快さと簡潔さのトレードオフがあります: +INPUT セクションはサブルーチンの引数リストに現れない C 変数の宣言も +許しています。 +従って mutate() のための上述のコードは以下のように書き直せます MyObject mutate(o) @@ -1686,9 +1673,8 @@ =end original -Since INPUT sections allow declaration of C variables which do not appear -in the parameter list of a subroutine, this may be shortened to: -(TBT) +INPUT セクションはサブルーチンの引数リストに現れない C 変数の宣言も +許しているので、これは以下のように短く出来ます: bool_t rpcb_gettime(host,timep) @@ -1712,11 +1698,10 @@ =end original -(We used our knowledge that input conversion for C<char *> is a "simple" one, -thus C<host> is initialized on the declaration line, and our assignment -C<h = host> is not performed too early. Otherwise one would need to have the -assignment C<h = host> in a CODE: or INIT: section.) -(TBT) +(C<char *> のための入力変換は「単純な」ものであるという知識を使っているので、 +C<host> は宣言行で初期化され、C<h = host> の代入は早すぎることはありません。 +さもなければ C<h = host> の代入は CODE: か INIT: のセクションで +行う必要があります。) =head2 The IN/OUTLIST/IN_OUTLIST/OUT/IN_OUT Keywords @@ -1731,11 +1716,10 @@ =end original -In the list of parameters for an XSUB, one can precede parameter names -by the C<IN>/C<OUTLIST>/C<IN_OUTLIST>/C<OUT>/C<IN_OUT> keywords. -C<IN> keyword is the default, the other keywords indicate how the Perl -interface should differ from the C interface. -(TBT) +XSUB の引数リストの中で、引数名の前に +C<IN>/C<OUTLIST>/C<IN_OUTLIST>/C<OUT>/C<IN_OUT> キーワードを前置できます。 +C<IN> キーワードがデフォルトで、他のキーワードは Perl インターフェースが +C インターフェースとどのように異なるかを示します。 =begin original @@ -1747,12 +1731,11 @@ =end original -Parameters preceded by C<OUTLIST>/C<IN_OUTLIST>/C<OUT>/C<IN_OUT> -keywords are considered to be used by the C subroutine I<via -pointers>. C<OUTLIST>/C<OUT> keywords indicate that the C subroutine -does not inspect the memory pointed by this parameter, but will write -through this pointer to provide additional return values. -(TBT) +C<OUTLIST>/C<IN_OUTLIST>/C<OUT>/C<IN_OUT> が前置された引数は +C サブルーチンから I<ポインタ経由で> 使われるとみなされます。 +C<OUTLIST>/C<OUT> キーワードは、C サブルーチンは +この引数で示されているメモリを検査しないが、追加の返り値を +このポインタを通して書き込むということを示しています。 =begin original @@ -1761,9 +1744,8 @@ =end original -Parameters preceded by C<OUTLIST> keyword do not appear in the usage -signature of the generated Perl function. -(TBT) +C<OUTLIST> キーワードが前置された引数は、生成された Perl 関数の使用法 +シグネチャに現れません。 =begin original @@ -1776,13 +1758,11 @@ =end original -Parameters preceded by C<IN_OUTLIST>/C<IN_OUT>/C<OUT> I<do> appear as -parameters to the Perl function. With the exception of -C<OUT>-parameters, these parameters are converted to the corresponding -C type, then pointers to these data are given as arguments to the C -function. It is expected that the C function will write through these -pointers. -(TBT) +C<IN_OUTLIST>/C<IN_OUT>/C<OUT> が前置された引数は Perl 関数の引数として +I<現れます>。 +C<OUT>-引数の例外として、これらの引数は対応する C 型に変換され、それから +それらのデータへのポインタが C 関数への引数として与えられます。 +これは C 関数がこれらのポインタを通して書き込むことを想定しています。 =begin original @@ -1795,13 +1775,13 @@ =end original -The return list of the generated Perl function consists of the C return value -from the function (unless the XSUB is of C<void> return type or -C<The NO_OUTPUT Keyword> was used) followed by all the C<OUTLIST> -and C<IN_OUTLIST> parameters (in the order of appearance). On the -return from the XSUB the C<IN_OUT>/C<OUT> Perl parameter will be -modified to have the values written by the C function. -(TBT) +生成された Perl 関数の返り値リストは、関数からの C の返り値 +(XSUB の返り値型が C<void> であるか、 +C<The NO_OUTPUT Keyword> が使わた場合を除く)に、 +全ての C<OUTLIST> および C<IN_OUTLIST> 引数を(出現順に) +続けたものとなります。 +XSUB からの返り時に、C<IN_OUT>/C<OUT> Perl 引数は C 関数によって書かれた +値に変更されます。 =begin original @@ -1869,13 +1849,11 @@ =end original -The C<IN_OUT> parameters are identical with parameters introduced with -L<The & Unary Operator> and put into the C<OUTPUT:> section (see -L<The OUTPUT: Keyword>). The C<IN_OUTLIST> parameters are very similar, -the only difference being that the value C function writes through the -pointer would not modify the Perl parameter, but is put in the output -list. -(TBT) +C<IN_OUT> 引数は、L<The & Unary Operator> で導入されて +C<OUTPUT:> セクション (L<The OUTPUT: Keyword> を参照してください) に +置かれた引数と同じです。 +C<IN_OUTLIST> 引数はとても似ていて、唯一の違いは、C 関数がポインタを +通して書いた値は Perl 引数を変更せず、出力リストに置かれるということです。 =begin original @@ -1887,12 +1865,10 @@ =end original -The C<OUTLIST>/C<OUT> parameter differ from C<IN_OUTLIST>/C<IN_OUT> -parameters only by the initial value of the Perl parameter not -being read (and not being given to the C function - which gets some -garbage instead). For example, the same C function as above can be -interfaced with as -(TBT) +C<OUTLIST>/C<OUT> 引数は、Perl 引数の初期値が読み込まれない +(そして C 関数に渡されない - 代わりに何らかのごみが渡されます)という +点においてだけ、C<IN_OUTLIST>/C<IN_OUT> 引数と異なります。 +例えば、上述の同じ C 関数は以下のようなインターフェースか: void day_month(OUT int day, int unix_time, OUT int month); @@ -1937,11 +1913,12 @@ =end original -If one of the input arguments to the C function is the length of a string -argument C<NAME>, one can substitute the name of the length-argument by -C<length(NAME)> in the XSUB declaration. This argument must be omitted when -the generated Perl function is called. E.g., -(TBT) +C 関数への入力引数の 1 つが文字列引数 C<NAME> の長さの場合、 +XSUB 宣言において長さ引数の名前を C<length(NAME)> で置き換えることが +できます。 +この引数は、生成された Perl 関数が呼び出されるときには +省略されなければなりません。 +例えば: void dump_chars(char *s, short l) @@ -1975,7 +1952,7 @@ =head2 Variable-length Parameter Lists -(可変長パラメータリスト) +(可変長引数リスト) =begin original @@ -1988,12 +1965,12 @@ =end original -XSUB は、パラメータリストで C<(...)> という省略記法で指定することによって、 -可変長のパラメータリストを取ることができます。 +XSUB は、引数リストで C<(...)> という省略記法で指定することによって、 +可変長の引数リストを取ることができます。 この省略記法の仕様は ANSI C にあるものと似ています。 プログラマは XSUB に渡された引数の数を、B<xsubpp> コンパイラがすべての XSUB に提供する C<items> という変数をチェックすることによって決定できます。 -この機構を使うことによって、長さが不定のパラメータリストを +この機構を使うことによって、長さが不定の引数リストを 受け付ける XSUB を作成できます。 =begin original @@ -2005,8 +1982,8 @@ =end original -rpcb_gettime() XSUB に対する I<host> パラメータは省略できるので、XSUB が -パラメータの変化する個数を取ることを示すために省略記法が使えます。 +rpcb_gettime() XSUB に対する I<host> 引数は省略できるので、XSUB が +引数の変化する個数を取ることを示すために省略記法が使えます。 Perl はこの XSUB を以下に示す文のいずれかで呼び出すことができます。 $status = rpcb_gettime( $timep, $host ); @@ -4070,11 +4047,11 @@ =end original -This macro is used to define a unique key to refer to the static data -for an XS module. The suggested naming scheme, as used by h2xs, is to -use a string that consists of the module name, the string "::_guts" -and the module version number. -(TBT) +このマクロは、XS モジュールのための静的データを参照するためのユニークな +キーを定義するために使われます。 +h2xs で使われている、推奨される命名スキームは、モジュール名、 +文字列 "::_guts"、モジュールのバージョン番号、からなる文字列を +使うことです。 #define MY_CXT_KEY "MyModule::_guts" XS_VERSION @@ -4097,9 +4074,8 @@ =end original -Declare a typedef named C<my_cxt_t> that is a structure that contains -all the data that needs to be interpreter-local. -(TBT) +インタプリタローカルにする必要がある全てのデータを含む構造体である +C<my_cxt_t> という名前の typedef を宣言します。 typedef struct { int some_value; @@ -4114,9 +4090,7 @@ =end original -Always place the START_MY_CXT macro directly after the declaration -of C<my_cxt_t>. -(TBT) +C<my_cxt_t> の宣言の直後には常に START_MY_CXT マクロを置きます。 =item MY_CXT_INIT