argra****@users*****
argra****@users*****
2012年 12月 28日 (金) 18:59:26 JST
Index: docs/perl/5.12.1/perlmroapi.pod diff -u /dev/null docs/perl/5.12.1/perlmroapi.pod:1.1 --- /dev/null Fri Dec 28 18:59:25 2012 +++ docs/perl/5.12.1/perlmroapi.pod Fri Dec 28 18:59:25 2012 @@ -0,0 +1,225 @@ + +=head1 NAME + +=begin original + +perlmroapi - Perl method resolution plugin interface + +=end original + +perlmroapi - Perl メソッド解決プラグインインターフェース + +=head1 DESCRIPTION + +=begin original + +As of Perl 5.10.1 there is a new interface for plugging and using method +resolution orders other than the default (linear depth first search). +The C3 method resolution order added in 5.10.0 has been re-implemented as +a plugin, without changing its Perl-space interface. + +=end original + +Perl 5.10.1 から、デフォルト(深さ優先線形検索)以外のメソッド解決順序を +プラグインとして使うための新しいインターフェースがあります。 +5.10.0 で追加された C3 メソッド解決順序は、Perl 側のインターフェースを +変更することなくプラグインとして再実装されました。 + +=begin original + +Each plugin should register itself with C<Perl_mro_register> by providing +the following structure + +=end original + +それぞれのプラグインは以下の構造体を提供することで C<Perl_mro_register> で +自分自身を登録します + + struct mro_alg { + AV *(*resolve)(pTHX_ HV *stash, U32 level); + const char *name; + U16 length; + U16 kflags; + U32 hash; + }; + +=over 4 + +=item resolve + +=begin original + +Pointer to the linearisation function, described below. + +=end original + +後述する線形化関数へのポインタ + +=item name + +=begin original + +Name of the MRO, either in ISO-8859-1 or UTF-8. + +=end original + +MRO の名前 (ISO-8859-1 か UTF-8 のどちらか)。 + +=item length + +=begin original + +Length of the name. + +=end original + +名前の長さ。 + +=item kflags + +=begin original + +If the name is given in UTF-8, set this to C<HVhek_UTF8>. The value is passed +direct as the parameter I<kflags> to C<hv_common()>. + +=end original + +名前が UTF-8 で与えられた場合、これを C<HVhek_UTF8> に設定します。 +この値は C<hv_common()> の I<kflags> に直接渡されます。 + +=item hash + +=begin original + +A precomputed hash value for the MRO's name, or 0. + +=end original + +MRO 名のための事前に計算されたハッシュ値、または 0。 + +=back + +=head1 Callbacks + +=begin original + +The C<resolve> function is called to generate a linearised ISA for the +given stash, using this MRO. It is called with a pointer to the stash, and +a I<level> of 0. The core always sets I<level> to 0 when it calls your +function - the parameter is provided to allow your implementation to track +depth if it needs to recurse. + +=end original + +C<resolve> 関数は、与えられたスタッシュのための線形化された ISA を +この MRO を使って生成するために呼び出されます。 +これはスタッシュへのポインタおよび、0 を入れた I<level> で呼び出されます。 +この関数を呼び出すときにはコアは常に I<level> に 0 を設定します - +この引数は再帰が必要なときに深さを記録できるようにします。 + +=begin original + +The function should return a reference to an array containing the parent +classes in order. The caller is responsible for incrementing the reference +count if it wants to keep the structure. Hence if you have created a +temporary value that you keep no pointer to, C<sv_2mortal()> to ensure that +it is disposed of correctly. If you have cached your return value, then +return a pointer to it without changing the reference count. + +=end original + +関数は親クラスを並べたものが入った配列へのリファレンスを返します。 +呼び出し元は、構造体を保持したいなら参照カウントをインクリメントする責任を +負います。 +従って、ポインタで指していない一時的な値を作った場合、正しく捨てられるために +C<sv_2mortal()> します。 +返り値をキャッシュする場合、参照カウントを変更することなくポインタを +返します。 + +=head1 Caching + +(キャッシュ) + +=begin original + +Computing MROs can be expensive. The implementation provides a cache, in +which you can store a single C<SV *>, or anything that can be cast to +C<SV *>, such as C<AV *>. To read your private value, use the macro +C<MRO_GET_PRIVATE_DATA()>, passing it the C<mro_meta> structure from the +stash, and a pointer to your C<mro_alg> structure: + +=end original + +MRO の計算は高く付くことがあります。 +実装は、単一の C<SV *>、または C<AV *> のような C<SV *> にキャッシュできる +もののキャッシュを提供します。 +プライベートな値を読み込むには、 +C<MRO_GET_PRIVATE_DATA()> マクロを使って、スタッシュと C<mro_alg> 構造体への +ポインタから C<mro_meta> 構造体を渡します: + + meta = HvMROMETA(stash); + private_sv = MRO_GET_PRIVATE_DATA(meta, &my_mro_alg); + +=begin original + +To set your private value, call C<Perl_mro_set_private_data()>: + +=end original + +プライベートな値を設定するには、C<Perl_mro_set_private_data()> を +呼び出します: + + Perl_mro_set_private_data(aTHX_ meta, &c3_alg, private_sv); + +=begin original + +The private data cache will take ownership of a reference to private_sv, +much the same way that C<hv_store()> takes ownership of a reference to the +value that you pass it. + +=end original + +プライベートデータキャッシュは private_sv へのリファレンスの所有権を +取ります; C<hv_store()> が渡された値へのリファレンスの所有権を取るのと +同様です。 + +=head1 Examples + +(例) + +=begin original + +For examples of MRO implementations, see C<S_mro_get_linear_isa_c3()> +and the C<BOOT:> section of F<mro/mro.xs>, and C<S_mro_get_linear_isa_dfs()> +in F<mro.c> + +=end original + +MRO 実装の例については、F<mro/mro.xs> の C<S_mro_get_linear_isa_c3()> と +C<BOOT:> の節、および F<mro.c> の C<S_mro_get_linear_isa_dfs()> を +参照してください。 + +=head1 AUTHORS + +=begin original + +The implementation of the C3 MRO and switchable MROs within the perl core was +written by Brandon L Black. Nicholas Clark created the pluggable interface, +refactored Brandon's implementation to work with it, and wrote this document. + +=end original + +C3 MRO と perl コア内の切り替え可能な MRO の実装は Brandon L Black によって +書かれました。 +Nicholas Clark はプラグイン可能なインターフェースを作成し、これで動くように +Brandon の実装をリファクタリングし、この文書を書きました。 + +=begin meta + +Translate: SHIRAKATA Kentaro <argra****@ub32*****> +Status: completed + +=end meta + +=cut +