argra****@users*****
argra****@users*****
2015年 11月 19日 (木) 03:37:52 JST
Index: docs/perl/5.20.1/perlxs.pod diff -u docs/perl/5.20.1/perlxs.pod:1.3 docs/perl/5.20.1/perlxs.pod:1.4 --- docs/perl/5.20.1/perlxs.pod:1.3 Tue Nov 17 05:01:57 2015 +++ docs/perl/5.20.1/perlxs.pod Thu Nov 19 03:37:52 2015 @@ -1991,9 +1991,8 @@ =end original -C 関数への入力引数の 1 つが文字列引数 C<NAME> の長さの場合、 -XSUB 宣言において長さ引数の名前を C<length(NAME)> で置き換えることが -できます。 +C 関数への入力引数の 1 つが文字列引数 C<NAME> の長さの場合、XSUB 宣言において +長さ引数の名前を C<length(NAME)> で置き換えることができます。 この引数は、生成された Perl 関数が呼び出されるときには 省略されなければなりません。 例えば: @@ -2048,8 +2047,8 @@ この省略記法の仕様は ANSI C にあるものと似ています。 プログラマは XSUB に渡された引数の数を、B<xsubpp> コンパイラがすべての XSUB に提供する C<items> という変数をチェックすることによって決定できます。 -この機構を使うことによって、長さが不定の引数リストを -受け付ける XSUB を作成できます。 +この機構を使うことによって、長さが不定の引数リストを受け付ける XSUB を +作成できます。 =begin original @@ -4066,8 +4065,7 @@ このマクロは、XS モジュールのための静的データを参照するためのユニークな キーを定義するために使われます。 h2xs で使われている、推奨される命名スキームは、モジュール名、 -文字列 "::_guts"、モジュールのバージョン番号、からなる文字列を -使うことです。 +文字列 "::_guts"、モジュールのバージョン番号、からなる文字列を使うことです。 #define MY_CXT_KEY "MyModule::_guts" XS_VERSION @@ -4466,34 +4464,32 @@ =end original -One area where there has been conflict is in regards to C locales. (See -L<perllocale>.) perl, with one exception and unless told otherwise, -sets up the underlying locale the program is running in to that passed -into it from the environment. -v5.20 から、this underlying locale is -completely hidden from pure perl code outside the lexical scope of -C<S<use locale>>; except a couple of function calls in the POSIX -module of necessity use it. But the underlying locale, with that one -exception is exposed to XS code, affecting all C library routines whose -behavior is locale-dependent. +衝突のある分野の一つは C ロケールです。 +(L<perllocale> 参照。) +perl は、一つの例外と、他で言及されていない限り、プログラムの実行時に +環境から渡された基となるロケールを設定します。 +v5.20 から、この基となるロケールは C<S<use locale>> のレキシカルスコープの +外側のピュア perl コードからは完全に隠されます; 例外は、これを使う必要がある +POSIX モジュールのいくつかの関数呼び出しです。 +しかし基となるロケールは、XS コードに公開される一つの例外を除いて、 +振る舞いがロケール依存である全ての C ライブラリルーチンに影響を与えます。 例外は L<C<LC_NUMERIC>|perllocale/Category LC_NUMERIC: Numeric Formatting> -ロケールカテゴリで、これが例外である理由は、that experience -has shown that it can be problematic for XS code, whereas we have not -had reports of problems with the -L<other locale categories|perllocale/WHAT IS A LOCALE>. And the reason -for this one category being problematic is that the character used as a -decimal point can vary. +ロケールカテゴリで、これが例外である理由は、経験上これが XS コードにとって +問題になることがある一方、 +L<他のロケールカテゴリ|perllocale/WHAT IS A LOCALE> では問題の報告を +受けていないからです。 +そしてこの一つのカテゴリが問題になる理由は、小数点として使われる文字が +異なるからです。 英語を含む多くのヨーロッパ言語はカンマを使うので、 Perl はドット (U+002E: FULL STOP) を想定します。 多くのモジュールは小数点としてドットのみを扱えるので、perl は そうしようと試みます。 Perl v5.20 まで、その試みは、単に起動時に C<LC_NUMERIC> を C<"C"> ロケールに 設定することでした。 -一方 L<setlocale()|perllocale/setlocale 関数> はこれをへこうします; これは +一方 L<setlocale()|perllocale/setlocale 関数> はこれを変更します; これは 失敗を引き起こしました。 従って、v5.22 から、perl は XS コードでは常に C<LC_NUMERIC> を C<"C"> に 保とうとします。 -(TBT) =begin original @@ -4508,6 +4504,8 @@ =item Non-locale-aware XS code +(ロケールを認識しない XS コード) + =begin original Keep in mind that even if you think your code is not locale-aware, it @@ -4519,7 +4517,6 @@ 自分のコードがロケールを認識しないと考えていても、ロケールを認識する C ライブラリ関数を呼び出すかも知れないことを心に留めておいてください。 -may call a C library function that is. うまくいけばのような関数の man ページには依存性について示していますが、 文書は不完全です。 @@ -4550,24 +4547,23 @@ =end original -Up through v5.20, Perl initializes things on start-up so that -C<LC_NUMERIC> is set to the "C" locale. But if any code anywhere -changes it, it will stay changed. This means that your module can't -count on C<LC_NUMERIC> being something in particular, and you can't -expect floating point numbers (including version strings) to have dots -in them. +v5.20 まで、Perl は起動時に C<LC_NUMERIC> を "C" ロケールに +初期化していました。 +しかしどこかのコードがこれを変更すると、これは変更されたままになります。 +これは、あなたのモジュールが、C<LC_NUMERIC> の値が特に何かであることを +頼れないということであり、(バージョン文字列を含む) 浮動小数点数にドットを +含むことを想定できないということです。 ドット以外を認めていない場合、あなたのコードは誰かがどこかでロケールを 変更すると壊れます。 -この理由により、v5.22 is changing -the behavior so that Perl tries to keep C<LC_NUMERIC> in the "C" locale -except around the operations internally where it should be something -else. Misbehaving XS code will always be able to change the locale -anyway, but the most common instance of this is checked for and -handled. -(TBT) +この理由により、Perl は v5.22 では、内部で違う値であるべき場所の付近を除いて、 +C<LC_NUMERIC> を "C" ロケールで維持しようとします。 +それでも不作法な XS コードは常にロケールを変更することができますが、ほとんどの +場合はチェックされて扱われます。 =item Locale-aware XS code +(ロケールを認識する XS コード) + =begin original If the locale from the user's environment is desired, there should be no @@ -4583,17 +4579,16 @@ =end original -If the locale from the user's environment is desired, there should be no -need for XS code to set the locale except for C<LC_NUMERIC>, as perl has -already set it up. XS code should avoid changing the locale, as it can -adversely affect other, unrelated, code and may not be thread safe. -However, some alien libraries that may be called do set it, such as -C<Gtk>. +ユーザー環境からのロケールを求める場合、XS コードで C<LC_NUMERIC> 以外の +ロケールを設定する必要はないはずです; perl が既に設定しているからです。 +XS コードはロケールの変更を避けるべきです; そうすると他の無関係なコードに +逆流して影響を与えることがあり、スレッドセーフでなくなるかも知れないからです。 +しかし、呼び出だされるかもしれない C<Gtk> のような外部ライブラリは +変更することがあります。 これは perl コアとその他のモジュールに問題を引き起こすかもしれません。 v5.20.1 から、XS からの L<sync_locale()|perlapi/sync_locale> 関数の 呼び出しは、これらの問題のほとんどを回避するのに十分なはずです。 これ以前では、次のようなピュア Perl 処理が必要です: -(TBT) POSIX::setlocale(LC_ALL, POSIX::setlocale(LC_ALL)); @@ -4654,7 +4649,7 @@ Translate: KIMURA Koichi Update: SHIRAKATA Kentaro <argra****@ub32*****> (5.8.8-) -Status: in progress +Status: completed =end meta