argra****@users*****
argra****@users*****
2009年 1月 1日 (木) 04:45:26 JST
Index: docs/perl/5.8.8/perlpacktut.pod diff -u docs/perl/5.8.8/perlpacktut.pod:1.7 docs/perl/5.8.8/perlpacktut.pod:1.8 --- docs/perl/5.8.8/perlpacktut.pod:1.7 Mon Dec 29 02:53:23 2008 +++ docs/perl/5.8.8/perlpacktut.pod Thu Jan 1 04:45:25 2009 @@ -69,10 +69,9 @@ C<pack> 関数は、値を、「テンプレート」引数と呼ばれる使用に従った表現を含む バイト列に変換します。 C<unpack> は逆処理で、バイトの並びから値を引き出します。 -(Be cautioned, -however, that not all that has been packed together can be neatly unpacked - -a very common experience as seasoned travellers are likely to confirm.) -(TBT) +(しかし、pack された全てのデータがうまく unpack できるというわけでは +ないということは注意してください - 経験豊かな旅人が確認しそうな、とても +一般的な経験です。) =begin original @@ -90,13 +89,13 @@ あなたはどうしてバイナリ表現の中に値が含まれているメモリの塊が必要なのか、と 問うかもしれません。 -One good reason is input and output accessing +よい理由の一つは、input and output accessing some file, a device, or a network connection, whereby this binary representation is either forced on you or will give you some benefit in processing. もう一つの原因は、Perl 関数として利用できないシステムコールにデータを -渡すときです: C<syscall> requires you to provide -parameters stored in the way it happens in a C program. +渡すときです: C<syscall> は C プログラムでのような形で保管された引数を +提供することを要求します。 (以下の章で示すように) テキスト処理ですら、これら 2 つの関数を賢明に 使うことで単純化できます。 (TBT) @@ -117,8 +116,8 @@ (un)pack がどのように働くのかを見るために、変換がのろのろと行われる単純な テンプレートコードから始めましょう: バイトシーケンスと 16 進数の文字列との 変換です。 -Let's use C<unpack>, since -this is likely to remind you of a dump program, or some desperate last +C<unpack> を使いましょう; なぜならこれはダンププログラムを +思い出させそうであるか、or some desperate last message unfortunate programs are wont to throw at you before they expire into the wild blue yonder. 変数 C<$mem> に、その意味について何の仮定もおかずに調査したいバイト列が @@ -486,7 +485,8 @@ =end original -うはあ。当たり前です。 +うはあ。 +当たり前です。 文字コード 0 の「ヌル文字」と、文字コード 32 の「空白」は全然違います。 Perl は日付と説明の間に何かを書いたのです - しかし残念ながら、 それは見えません! @@ -1267,10 +1267,9 @@ =end original -Although the C<%> code is documented as returning a "checksum": -don't put your trust in such values! Even when applied to a small number -of bytes, they won't guarantee a noticeable Hamming distance. -(TBT) +C<%> コードは「チェックサム」を返すと文書化されていますが: +このような値に信頼を置いてはいけません! +少量のバイト列に適用する場合ですら、顕著なハミング距離を保証できません。 =begin original @@ -1403,9 +1402,8 @@ The pack code C<w> has been added to support a portable binary data encoding scheme that goes way beyond simple integers. (詳細については Scarab プロジェクト L<Casbah.org> にあります。) -BER (Binary Encoded Representation) 圧縮符号なし整数は -stores base 128 -digits, most significant digit first, with as few digits as possible. +BER (Binary Encoded Representation) 圧縮符号なし整数は 128 を基数として、 +最上位ビットを最初にして、可能な限り少ない桁になるように保管します。 ビット 8 (最上位ビット) は、最後以外のバイトでセットされます。 BER エンコーディングにはサイズ制限がありませんが、Perl は極端なことは しません。 @@ -1491,9 +1489,8 @@ =end original -(Note that the template C<A*> would only have packed C<$str[0]> in full -length.) -(TBT) +(テンプレートは C<A*> 完全な長さでのみ C<$str[0]> を pack することに +注意してください。) =begin original @@ -1677,10 +1674,10 @@ =end original -C</> is not implemented in Perls before 5.6, so if your code is required to -work on older Perls you'll need to C<unpack( 'Z* Z* C')> to get the length, -then use it to make a new unpack string. For example -(TBT) +C</> は 5.6 以前の Perl には実装されていないので、もし、より古い Perl で +動作することが要求される場合は、長さを得るために C<unpack( 'Z* Z* C')> を +使って、それから新しい unpack 文字列を作ってそれを使う必要があります。 +例えば: # pack a message: ASCIIZ, ASCIIZ, length, string, byte (5.005 compatible) my $msg = pack( 'Z* Z* C A* C', $src, $dst, length $sm, $sm, $prio ); @@ -1833,11 +1830,11 @@ =end original -In previous sections we have seen how to pack numbers and character -strings. If it were not for a couple of snags we could conclude this +前のセクションで、数値と文字列を pack する方法を見ました。 +If it were not for a couple of snags we could conclude this section right away with the terse remark that C structures don't contain anything else, and therefore you already know all there is to it. -Sorry, no: read on, please. +すみません、違います: どうか読み進めてください。 (TBT) =head2 The Alignment Pit @@ -1945,8 +1942,9 @@ =end original -The natural question: "Why can't Perl compensate for the gaps?" warrants -an answer. One good reason is that C compilers might provide (non-ANSI) +自然な質問: 「なぜ Perl は隙間を埋め合わせられないの?」は答えるのが +当然です。 +One good reason is that C compilers might provide (non-ANSI) extensions permitting all sorts of fancy control over the way structures are aligned, even at the level of an individual structure field. And, if this were not enough, there is an insidious thing called C<union> where @@ -2399,10 +2397,10 @@ =end original -Be very careful with Perl operations that change the value of the -variable. Appending something to the variable, for instance, might require -reallocation of its storage, leaving you with a pointer into no-man's land. -(TBT) +変数の値を変更する Perl 操作にとても注意してください。 +例えば、値に何かを追加すると、その保管場所を再配置することになって、 +ポインタを誰もいないところにしたままにすることに +なるかもしれません。 =item * Index: docs/perl/5.8.8/perlxs.pod diff -u docs/perl/5.8.8/perlxs.pod:1.6 docs/perl/5.8.8/perlxs.pod:1.7 --- docs/perl/5.8.8/perlxs.pod:1.6 Sat Dec 27 04:58:23 2008 +++ docs/perl/5.8.8/perlxs.pod Thu Jan 1 04:45:25 2009 @@ -107,10 +107,10 @@ =end original -Of course, one could write such glue code directly in C. However, this -would be a tedious task, especially if one needs to write glue for -multiple C functions, and/or one is not familiar enough with the Perl -stack discipline and other such arcana. XS comes to the rescue here: +もちろん、このような糊コードを直接 C で書くこともできます。 +しかし、これはつまらない仕事です; 特に複数の C 関数に対する糊を書く +必要があったり、Perl スタックの分野やその奥義に親しくない場合はそうです。 +XS はこれを助けます: instead of writing this glue C code in long-hand, one can write a more concise short-hand I<description> of what should be done by the glue, and let the XS compiler B<xsubpp> handle the rest. @@ -131,8 +131,9 @@ =end original -The XS language allows one to describe the mapping between how the C -routine is used, and how the corresponding Perl routine is used. It +XS 言語は、どのように C ルーチンが使うのかと、どのように対応する Perl +ルーチンが使うのかとのマッピングを記述できます。 +It also allows creation of Perl routines which are directly translated to C code and which are not related to a pre-existing C function. In cases when the C interface coincides with the Perl interface, the XSUB @@ -177,9 +178,10 @@ =end original -A file in XS format starts with a C language section which goes until the -first C<MODULE =Z<>> directive. Other XS directives and XSUB definitions -may follow this line. The "language" used in this part of the file +XS 形式のファイルは、最初の C<MODULE =Z<>> 指示子が現れるまで C 言語 +セクションから開始します。 +その他の XS 指示子と XSUB 定義はこの行に続きます。 +The "language" used in this part of the file is usually referred to as the XS language. B<xsubpp> recognizes and skips POD (see L<perlpod>) in both the C and XS language sections, which allows the XS file to contain embedded documentation. @@ -511,14 +513,14 @@ =end original -More complicated XSUBs may contain many other sections. Each section of -an XSUB starts with the corresponding keyword, such as INIT: or CLEANUP:. -However, the first two lines of an XSUB always contain the same data: -descriptions of the return type and the names of the function and its -parameters. Whatever immediately follows these is considered to be -an INPUT: section unless explicitly marked with another keyword. -(See L<The INPUT: Keyword>.) -(TBT) +もっと複雑な XSUB は多くのその他のセクションを含んでいるかもしれません。 +XSUB のそれぞれのセクションは、INIT: や CLEANUP: のような、対応する +キーワードで始まります。 +しかし、XSUB の最初の 2 行はいつも同じデータからなります: +返り値の種類の記述と、関数およびその引数の名前です。 +これらに引き続くものはなんでも、明示的にその他のキーワードがない限りは +INPUT: セクションと考えられます。 +(L<The INPUT: Keyword> を参照してください。) =begin original @@ -3976,10 +3978,9 @@ =end original -Starting with Perl 5.8, a macro framework has been defined to allow -static data to be safely stored in XS modules that will be accessed from -a multi-threaded Perl. -(TBT) +Perl 5.8 から、マクロフレームワークは、マルチスレッド Perl から +アクセスされる XS モジュールで安全に保管される静的データを許すように +定義されています。 =begin original @@ -3988,9 +3989,8 @@ =end original -Although primarily designed for use with multi-threaded Perl, the macros -have been designed so that they will work with non-threaded Perl as well. -(TBT) +マクロは基本的にはマルチスレッド Perl で使えるように設計されていますが、 +非スレッド Perl でも動作するように設計されています。 =begin original @@ -3999,9 +3999,8 @@ =end original -It is therefore strongly recommended that these macros be used by all -XS modules that make use of static data. -(TBT) +従って、静的データを使う全ての XS モジュールではこれらのマクロを使うことが +強く推奨されます。 =begin original @@ -4010,9 +4009,9 @@ =end original -The easiest way to get a template set of macros to use is by specifying -the C<-g> (C<--global>) option with h2xs (see L<h2xs>). -(TBT) +使うマクロのテンプレートを得るための最も簡単な方法は、h2xs に +C<-g> (C<--global>) オプションを指定することです +(L<h2xs> を参照してください)。 =begin original @@ -4022,7 +4021,6 @@ 以下はマクロを使ったサンプルモジュールです。 - #include "EXTERN.h" #include "perl.h" #include "XSUB.h" @@ -4154,8 +4152,7 @@ =end original -The MY_CXT_INIT macro initialises storage for the C<my_cxt_t> struct. -(TBT) +MY_CXT_INIT マクロは C<my_cxt_t> 構造体のための保存場所を初期化します。 =begin original @@ -4163,8 +4160,8 @@ =end original -It I<must> be called exactly once -- typically in a BOOT: section. -(TBT) +これは正確に I<1 回だけ> 呼び出されなければなりません -- 典型的には +BOOT: セクションでです。 =item dMY_CXT @@ -4175,9 +4172,7 @@ =end original -Use the dMY_CXT macro (a declaration) in all the functions that access -MY_CXT. -(TBT) +MY_CXT にアクセスする全ての関数で dMY_CXT マクロ(宣言) を使います。 =item MY_CXT @@ -4188,9 +4183,8 @@ =end original -Use the MY_CXT macro to access members of the C<my_cxt_t> struct. For -example, if C<my_cxt_t> is -(TBT) +C<my_cxt_t> 構造体のメンバにアクセスするために MY_CXT マクロを使います。 +例えば、もし C<my_cxt_t> が typedef struct { int index; @@ -4202,7 +4196,7 @@ =end original -それからこれを C<index> メンバのアクセスに使います: +なら、これを C<index> メンバのアクセスに使います: dMY_CXT; MY_CXT.index = 2; Index: docs/perl/5.8.8/perlxstut.pod diff -u docs/perl/5.8.8/perlxstut.pod:1.6 docs/perl/5.8.8/perlxstut.pod:1.7 --- docs/perl/5.8.8/perlxstut.pod:1.6 Mon Dec 29 02:53:23 2008 +++ docs/perl/5.8.8/perlxstut.pod Thu Jan 1 04:45:25 2009 @@ -360,10 +360,9 @@ =end original -It is okay for the lines starting at the "CODE:" line to not be indented. -However, for readability purposes, it is suggested that you indent CODE: -one level and the lines following one more level. -(TBT) +"CODE:" で始まる行がインデントされていないのは問題ありません。 +しかし、読みやすさの観点から、CODE: を 1 レベルインデントして、 +引き続く行をさらに 1 レベルインデントすることを勧めます。 =begin original @@ -372,7 +371,7 @@ =end original -ここで、“C<perl Makefile.PL>”を実行します。 +ここで、"C<perl Makefile.PL>" を実行します。 これで make が必要とする本当の Makefile が生成されます。 この出力は以下のようになります: @@ -432,11 +431,11 @@ Win32 システムの場合で、C ライブラリ中の関数に関するリンカのエラーで ビルド処理が失敗する場合、Perl が PerlCRT を使うように設定されているかを 調べて見てください (この場合、B<perl -V:libc> を実行すればわかるはずです)。 -If Perl is configured to use PerlCRT, you have to make sure -PerlCRT.lib is copied to the same location that msvcrt.lib lives in, -so that the compiler can find it on its own. msvcrt.lib is usually -found in the Visual C compiler's lib directory (e.g. C:/DevStudio/VC/lib). -(TBT) +もし Perl が PerlCRT を使うように設定されているなら、PerlCRT.lib を +msvcrt.lib と同じ位置にコピーして、コンパイラがこれを見つけられるように +する必要があります。 +msvcrt.lib は普通 Visual C コンパイラの lib ディレクトリ (例えば +C:/DevStudio/VC/lib) にあります。 =begin original @@ -1528,7 +1527,7 @@ =end original L<"EXAMPLE 4"> の .xs ファイルにはいくつか新しい要素を含んでいます。 -これらの要素をノ意味を理解するために、以下の行に注目してください +これらの要素の意味を理解するために、以下の行に注目してください MODULE = Mytest2 PACKAGE = Mytest2 @@ -1629,8 +1628,9 @@ Note that in contrast with L<"EXAMPLE 1">, L<"EXAMPLE 2"> and L<"EXAMPLE 3">, this description does not contain the actual I<code> for what is done -is done during a call to Perl function foo(). To understand what is going -on here, one can add a CODE section to this XSUB: +is done during a call to Perl function foo(). +ここで何が起きているのかを理解するために、この XSUB に CODE セクションを +追加できます: (TBT) double @@ -1697,10 +1697,11 @@ =end original で出来るでしょうか? -To do this, one needs to define a C function C<int -is_even(int input)>. As we saw in L<Anatomy of .xs file>, a proper place -for this definition is in the first part of .xs file. In fact a C function -(TBT) +これをするためには、C 関数 C<int is_even(int input)> を定義する必要が +あります。 +L<Anatomy of .xs file> で見たように、この定義に適切な場所は .xs ファイルの +最初の部分です。 +実際、C 関数 int is_even(int arg) @@ -1834,10 +1835,10 @@ =end original -One conveys this info to B<xsubpp> by replacing C<*> before the -argument by C<&>. C<&> means that the argument should be passed to a library -function by its address. The above two function may be XSUB-ified as -(TBT) +C<&> による引数の前に C<*> を置き換えることで、この情報を B<xsubpp> に +伝えられます。 +C<&> は、引数がアドレスでライブラリ関数に渡されることを意味します。 +上記の 2 つの関数は以下のように XSUB 化できます int string_length(s) @@ -1965,8 +1966,8 @@ =end original -The actual values on the argument stack are pointers to the values passed -in. When an argument is listed as being an OUTPUT value, its corresponding +引数スタックの実際の値は渡された値へのポインタです。 +When an argument is listed as being an OUTPUT value, its corresponding value on the stack (i.e., ST(0) if it was the first argument) is changed. You can verify this by looking at the C code generated for Example 3. The code for the round() XSUB routine contains lines that look like this: @@ -2702,6 +2703,8 @@ =head2 EXAMPLE 9 Passing open files to XSes +(例 9 オープンしたファイルを XS に渡す) + =begin original You would think passing files to an XS is difficult, with all the @@ -2709,9 +2712,8 @@ =end original -You would think passing files to an XS is difficult, with all the -typeglobs and stuff. Well, it isn't. -(TBT) +型グロブなどで、XS にファイルを渡すのは難しいと考えるかもしれません。 +えっと、そうではありません。 =begin original @@ -2720,9 +2722,9 @@ =end original -Suppose that for some strange reason we need a wrapper around the -standard C library function C<fputs()>. This is all we need: -(TBT) +標準 C ライブラリ関数 C<fputs()> のラッパーが必要、という不思議な +理由があるとしましょう。 +必要なものは以下のものだけです: #define PERLIO_NOT_STDIO 0 #include "EXTERN.h" @@ -2742,8 +2744,7 @@ =end original -The real work is done in the standard typemap. -(TBT) +実際の作業は標準の typemap で行われます。 =begin original @@ -2752,9 +2753,8 @@ =end original -B<But> you loose all the fine stuff done by the perlio layers. This -calls the stdio function C<fputs()>, which knows nothing about them. -(TBT) +B<しかし>、perlio 層で行われる素晴らしい機能全てを手放すことになります。 +これは stdio 関数 C<fputs()> を呼び出すので、それらについては何もしません。 =begin original @@ -2827,9 +2827,8 @@ =end original -Now, suppose you want to use perlio layers in your XS. We'll use the -perlio C<PerlIO_puts()> function as an example. -(TBT) +ここで、XS で perlio 層を使いたいとしましょう。 +例のように、perlio の C<PerlIO_puts()> 関数を使います。 =begin original @@ -2838,9 +2837,7 @@ =end original -In the C part of the XS file (above the first MODULE line) you -have -(TBT) +XS ファイルの C の部分 (最初の MODULE 行の上) に以下のようにします #define OutputStream PerlIO * or @@ -2853,8 +2850,7 @@ =end original -And this is the XS code: -(TBT) +そして XS コードはこれです: int perlioputs(s, stream) @@ -2872,9 +2868,8 @@ =end original -We have to use a C<CODE> section because C<PerlIO_puts()> has the arguments -reversed compared to C<fputs()>, and we want to keep the arguments the same. -(TBT) +C<PerlIO_puts()> は C<fputs()> と比較する予約された引数を持っていて、 +引数は同じままにしたいので、C<CODE> セクションを使う必要があります。 =begin original @@ -2884,10 +2879,8 @@ =end original -Wanting to explore this thoroughly, we want to use the stdio C<fputs()> -on a PerlIO *. This means we have to ask the perlio system for a stdio -C<FILE *>: -(TBT) +これを完全に探索するために、PerlIO * に stdio の C<fputs()> を使いたいです。 +これは、perlio システムに stdio の C<FILE *> を問い合わせる必要があります: int perliofputs(s, stream) @@ -2932,12 +2925,14 @@ =end original -This applies to the perlio system only. For versions before 5.7, -C<PerlIO_exportFILE()> is equivalent to C<PerlIO_findFILE()>. -(TBT) +これは perlio システムにのみ適用されます。 +5.7 以前のバージョンでは、C<PerlIO_exportFILE()> は C<PerlIO_findFILE()> と +等価です。 =head2 Troubleshooting these Examples +(これらの例のトラブルシューティング) + =begin original As mentioned at the top of this document, if you are having problems with @@ -2945,9 +2940,8 @@ =end original -As mentioned at the top of this document, if you are having problems with -these example extensions, you might see if any of these help you. -(TBT) +この文書の最初に触れたように、もしこれらの例のエクステンションで問題が +あった場合、以下が参考になるかもしれません。 =over 4 @@ -2961,8 +2955,8 @@ =end original -γバージョン以前のバージョン 5.002 では、Example 1にあるテストスクリプトは -正しく動作しません。 +γバージョン以前のバージョン 5.002 では、L<Example 1> にあるテスト +スクリプトは正しく動作しません。 "use lib" という行を以下の様に変更する必要があります。 use lib './blib';