argra****@users*****
argra****@users*****
2014年 12月 27日 (土) 18:35:38 JST
Index: docs/perl/5.16.1/perlxstypemap.pod diff -u docs/perl/5.16.1/perlxstypemap.pod:1.1 docs/perl/5.16.1/perlxstypemap.pod:1.2 --- docs/perl/5.16.1/perlxstypemap.pod:1.1 Sun Oct 27 03:44:08 2013 +++ docs/perl/5.16.1/perlxstypemap.pod Sat Dec 27 18:35:37 2014 @@ -3,8 +3,14 @@ =head1 NAME +=begin original + perlxstypemap - Perl XS C/Perl type mapping +=end original + +perlxstypemap - Perl XS C/Perl 型マッピング + =head1 DESCRIPTION =begin original @@ -19,14 +25,13 @@ =end original -The more you think about interfacing between two languages, the more -you'll realize that the majority of programmer effort has to go into -converting between the data structures that are native to either of -the languages involved. This trumps other matter such as differing -calling conventions because the problem space is so much greater. -There are simply more ways to shove data into memory than there are -ways to implement a function call. -(TBT) +二つの言語の間のインターフェースについて考えれば考えるほど、プログラマの +努力の大半はどちらかの言語にネイティブなデータ構造の変換に費やされることに +気付くことになります。 +これは呼び出し規則の違いといったものより重要です; 問題空間が遥かに +大きいからです。 +単純に、関数呼び出しを実装する方法よりデータをメモリに納める方法の方が遥かに +多いです。 =begin original @@ -42,16 +47,14 @@ =end original -Perl XS' attempt at a solution to this is the concept of typemaps. -At an abstract level, a Perl XS typemap is nothing but a recipe for -converting from a certain Perl data structure to a certain C -data structure and vice versa. Since there can be C types that -are sufficiently similar to warrant converting with the same logic, -XS typemaps are represented by a unique identifier, henceforth -called an <XS type> in this document. You can then tell the XS -compiler that multiple C types are to be mapped with the same -XS typemap. -(TBT) +これに対する Perl XS での解決の試みは、typemap という概念です。 +抽象レベルでは、Perl の XS typemap はある種の Perl データ構造からある種の +C データ構造、およびその逆への変換のためのレシピ以外の何者でもありません。 +同じロジックでの変換を保証することと十分に似ている C 型もあるので、 +XS typemap はユニークな識別子として表現され、以降この文書では「XS 型」 +<XS type> と呼ばれます。 +それから複数の C 型が同じ XS typemap にマッピングされるように XS コンパイラに +伝えることができます。 =begin original @@ -62,11 +65,9 @@ =end original -In your XS code, when you define an argument with a C type or when -you are using a C<CODE:> and an C<OUTPUT:> section together with a -C return type of your XSUB, it'll be the typemapping mechanism that -makes this easy. -(TBT) +XS コード中で、C 型の引数を定義したり、XSUB の C 返り型と +C<CODE:> と C<OUTPUT:> の節を共に使ったりする場合、 +これらを簡単にするために typemap 機構があります。 =head2 Anatomy of a typemap @@ -90,7 +91,7 @@ =end original -より実際的な用語として、typemap は C 関数の引数と値を Perl の値に +より実際的な用語としては、typemap は C 関数の引数と値を Perl の値に マッピングするために B<xsubpp> コンパイラによって使われるコード片の集合 (collection)です。 typemap ファイルは C<TYPEMAP>, C<INPUT>, C<OUTPUT> というラベルの付いた @@ -182,6 +183,8 @@ =head2 The Role of the typemap File in Your Distribution +(配布の中の typemap ファイルの役割) + =begin original The default typemap in the F<lib/ExtUtils> directory of the Perl source @@ -203,15 +206,15 @@ これらの追加された typemap はメインの typemap にある INPUT や OUTPUT の マッピングを参照することができます。 B<xsubpp> コンパイラは、エクステンションに固有の typemap が -デフォルトのtypemapにあるマッピングをオーバーライドすることを許しています。 -Instead of using -an additional F<typemap> file, typemaps may be embedded verbatim in XS -with a heredoc-like syntax. See the documentation on the C<TYPEMAP:> XS -keyword. -(TBT) +デフォルトの typemap にあるマッピングをオーバーライドすることを許しています。 +追加の F<typemap> ファイルを使う代わりに、typemap はヒヤドキュメント風の +文法を使って XS にそのまま組み込むことができます。 +C<TYPEMAP:> XS キーワードの文書を参照してください。 =head2 Sharing typemaps Between CPAN Distributions +(CPAN 配布間で typemap を共有する) + =begin original Starting with ExtUtils::ParseXS version 3.13_01 (comes with perl 5.16 @@ -272,6 +275,8 @@ =head2 Writing typemap Entries +(typemap エントリを書く) + =begin original Each INPUT or OUTPUT typemap entry is a double-quoted Perl string that @@ -436,6 +441,8 @@ =head2 Full Listing of Core Typemaps +(コア typemap の完全な一覧) + =begin original Each C type is represented by an entry in the typemap file that