From 60c8455253682cbda20a90950be3777f2d819ead Mon Sep 17 00:00:00 2001 From: shyouhei Date: Sun, 4 Sep 2011 12:22:46 +0000 Subject: Change encoding from EUC-JP to UTF-8. [Feature #5128] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@33181 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- COPYING.ja | 72 +- ChangeLog | 4 + README.EXT.ja | 1669 +++++++++++++++++++++++++--------------------- README.ja | 210 +++--- doc/etc.rd.ja | 76 +-- doc/forwardable.rd.ja | 44 +- doc/irb/irb-tools.rd.ja | 110 +-- doc/irb/irb.rd.ja | 350 +++++----- doc/pty/README.expect.ja | 28 +- doc/pty/README.ja | 86 +-- doc/rake/CHANGES | 2 +- doc/shell.rd.ja | 150 ++--- insns.def | 194 +++--- 13 files changed, 1577 insertions(+), 1418 deletions(-) diff --git a/COPYING.ja b/COPYING.ja index 5b5b91c149..e50d01c8d1 100644 --- a/COPYING.ja +++ b/COPYING.ja @@ -1,51 +1,51 @@ -$BK\%W%m%0%i%`$O%U%j!<%=%U%H%&%'%"$G$9!%(B2-clause BSDL -$B$^$?$O0J2<$K<($9>r7o$GK\%W%m%0%i%`$r:FG[I[$G$-$^$9(B -2-clause BSDL$B$K$D$$$F$O(BBSDL$B%U%!%$%k$r;2>H$7$F2<$5$$!%(B +本プログラムはフリーソフトウェアです.2-clause BSDL +または以下に示す条件で本プログラムを再配布できます +2-clause BSDLについてはBSDLファイルを参照して下さい. - 1. $BJ#@=$O@)8B$J$/<+M3$G$9!%(B + 1. 複製は制限なく自由です. - 2. $B0J2<$N>r7o$N$$$:$l$+$rK~$?$9;~$KK\%W%m%0%i%`$N%=!<%9$r(B - $B<+M3$KJQ99$G$-$^$9!%(B + 2. 以下の条件のいずれかを満たす時に本プログラムのソースを + 自由に変更できます. - (a) $B%M%C%H%K%e!<%:$K%]%9%H$7$?$j!$:nA0$rJQ99$9$k!%(B - $B$=$N%=%U%H%&%'%"$rG[I[$9$k;~$K$OJQ99A0$NK\%W%m%0%i(B - $B%`$bF1;~$KG[I[$9$k!%$^$?$OJQ99A0$NK\%W%m%0%i%`$N%=!<(B - $B%9$NF~$NJQ99>r7o$r:nr7o$N$$$:$l$+$rK~$?$9;~$KK\%W%m%0%i%`$r%3%s%Q%$(B - $B%k$7$?%*%V%8%'%/%H%3!<%I$dA0$rJQ99$7$?$&$(!$%*%j%8%J(B - $B%k$N%=!<%9%3!<%I$NF~$NG[I[>r7o$r:n$N%W%m%0%i%`$X$N0zMQ$O$$$+$J$kL\E*$G$"$l<+M3$G$9!%$?(B - $B$@$7!$K\%W%m%0%i%`$K4^$^$l$kB>$N:n$l$N:nl9g$,$"$j$^$9!%(B + 4. 他のプログラムへの引用はいかなる目的であれ自由です.た + だし,本プログラムに含まれる他の作者によるコードは,そ + れぞれの作者の意向による制限が加えられる場合があります. - $B$=$l$i%U%!%$%k$N0lMw$H$=$l$>$l$NG[I[>r7o$J$I$KIU$$$F$O(B - LEGAL$B%U%!%$%k$r;2>H$7$F$/$@$5$$!%(B + それらファイルの一覧とそれぞれの配布条件などに付いては + LEGALファイルを参照してください. - 5. $BK\%W%m%0%i%`$X$NF~NO$H$J$k%9%/%j%W%H$*$h$S!$K\%W%m%0%i(B - $B%`$+$i$N=PNO$N8"Mx$OK\%W%m%0%i%`$N:n(B - $B$l$NF~=PNO$r@8@.$7$??M$KB0$7$^$9!%$^$?!$K\%W%m%0%i%`$K(B - $BAH$_9~$^$l$k$?$a$N3HD%%i%$%V%i%j$K$D$$$F$bF1MM$G$9!%(B + 5. 本プログラムへの入力となるスクリプトおよび,本プログラ + ムからの出力の権利は本プログラムの作者ではなく,それぞ + れの入出力を生成した人に属します.また,本プログラムに + 組み込まれるための拡張ライブラリについても同様です. - 6. $BK\%W%m%0%i%`$OL5J]>Z$G$9!%:n + + * Change encoding from EUC-JP to UTF-8. [Feature #5128] + Sun Sep 4 00:47:39 2011 Kazuki Tsujimoto * test/ruby/test_fiber.rb (TestFiber#test_no_valid_cfp): diff --git a/README.EXT.ja b/README.EXT.ja index 9e0a7a2cb0..d061f16ff2 100644 --- a/README.EXT.ja +++ b/README.EXT.ja @@ -1,53 +1,53 @@ .\" README.EXT.ja - -*- Text -*- created at: Mon Aug 7 16:45:54 JST 1995 -Rubyγĥ饤֥κޤ +Rubyの拡張ライブラリの作り方を説明します. -1μ +1.基礎知識 -CѿˤϷꡤǡˤϷޤ󡥤Ǥ顤 -ȤХݥ󥿤intѿȡͤȤƼ -갷ޤդRubyѿˤϷʤǡ˷ -ΰ㤤ΤᡤCRubyߤѴʤСߤ -ǡ򥢥Ǥޤ +Cの変数には型があり,データには型がありません.ですから,た +とえばポインタをintの変数に代入すると,その値は整数として取 +り扱われます.逆にRubyの変数には型がなく,データに型がありま +す.この違いのため,CとRubyは相互に変換しなければ,お互いの +データをアクセスできません. -RubyΥǡVALUEȤCηɽޤVALUEΥǡ -ϤΥǡפʬΤäƤޤΥǡפ -Τϥǡ(֥)μºݤι¤̣ƤơRuby -Υ饹ȤϤޤäΤǤ +RubyのデータはVALUEというCの型で表現されます.VALUE型のデー +タはそのデータタイプを自分で知っています.このデータタイプと +いうのはデータ(オブジェクト)の実際の構造を意味していて,Ruby +のクラスとはまた違ったものです. -VALUECˤȤäựΤǡФˤ +VALUEからCにとって意味のあるデータを取り出すためには - (1) VALUEΥǡפΤ - (2) VALUECΥǡѴ + (1) VALUEのデータタイプを知る + (2) VALUEをCのデータに変換する -ξɬפǤ(1)˺ȴְäǡѴԤ -ơǰץबcore dumpޤ +の両方が必要です.(1)を忘れると間違ったデータの変換が行われ +て,最悪プログラムがcore dumpします. -1.1 ǡ +1.1 データタイプ -Rubyˤϥ桼ȤǽΤʲΥפޤ +Rubyにはユーザが使う可能性のある以下のタイプがあります. T_NIL nil - T_OBJECT ̾Υ֥ - T_CLASS 饹 - T_MODULE ⥸塼 - T_FLOAT ư - T_STRING ʸ - T_REGEXP ɽ - T_ARRAY - T_HASH Ϣ - T_STRUCT (Ruby)¤ - T_BIGNUM ¿Ĺ - T_FIXNUM Fixnum(31bitޤ63bitĹ) - T_COMPLEX ʣǿ - T_RATIONAL ͭ - T_FILE - T_TRUE - T_FALSE - T_DATA ǡ - T_SYMBOL ܥ - -¾ѤƤʲΥפޤ + T_OBJECT 通常のオブジェクト + T_CLASS クラス + T_MODULE モジュール + T_FLOAT 浮動小数点数 + T_STRING 文字列 + T_REGEXP 正規表現 + T_ARRAY 配列 + T_HASH 連想配列 + T_STRUCT (Rubyの)構造体 + T_BIGNUM 多倍長整数 + T_FIXNUM Fixnum(31bitまたは63bit長整数) + T_COMPLEX 複素数 + T_RATIONAL 有理数 + T_FILE 入出力 + T_TRUE 真 + T_FALSE 偽 + T_DATA データ + T_SYMBOL シンボル + +その他に内部で利用されている以下のタイプがあります. T_ICLASS T_MATCH @@ -55,249 +55,360 @@ Ruby T_NODE T_ZOMBIE -ۤȤɤΥפCι¤ΤǼƤޤ +ほとんどのタイプはCの構造体で実装されています. -1.2 VALUEΥǡפå +1.2 VALUEのデータタイプをチェックする -ruby.hǤTYPE()ȤޥƤơVALUEΥǡ -פΤ뤳ȤޤTYPE()ޥϾǾҲ𤷤T_XXXX -η֤ޤVALUEΥǡפ˱ƽ -ˤϡTYPE()ͤʬ뤳Ȥˤʤޤ +ruby.hではTYPE()というマクロが定義されていて,VALUEのデータ +タイプを知ることが出来ます.TYPE()マクロは上で紹介したT_XXXX +の形式の定数を返します.VALUEのデータタイプに応じて処理する +場合には,TYPE()の値で分岐することになります. switch (TYPE(obj)) { case T_FIXNUM: - /* FIXNUMν */ + /* FIXNUMの処理 */ break; case T_STRING: - /* ʸν */ + /* 文字列の処理 */ break; case T_ARRAY: - /* ν */ + /* 配列の処理 */ break; default: - /* 㳰ȯ */ + /* 例外を発生させる */ rb_raise(rb_eTypeError, "not valid value"); break; } -ȥǡפåơʤ㳰ȯ -ؿѰդƤޤ +それとデータタイプをチェックして,正しくなければ例外を発生す +る関数が用意されています. void Check_Type(VALUE value, int type) -δؿvaluetype̵С㳰ȯޤ -Ϳ줿VALUEΥǡפɤå -뤿ˤϡδؿȤޤ +この関数はvalueがtypeで無ければ,例外を発生させます.引数と +して与えられたVALUEのデータタイプが正しいかどうかチェックす +るためには,この関数を使います. -FIXNUMNIL˴ؤƤϤ®Ƚ̥ޥѰդƤޤ +FIXNUMとNILに関してはより高速な判別マクロが用意されています. FIXNUM_P(obj) NIL_P(obj) -1.3 VALUECΥǡѴ - -ǡפT_NILT_FALSET_TRUEǤǡϤ줾 -nilfalsetrueǤΥǡפΥ֥ȤϤҤ -ĤĤ¸ߤޤ - -ǡפT_FIXNUMλ31bitޤ63bitΥ -ǤlongΥ32bitΥץåȥեǤ -31bitˡlongΥ64bitΥץåȥեǤ63bit -ˤʤޤ. FIXNUM C Ѵ뤿ˤϥޥ -FIX2INT()פޤϡFIX2LONG()פȤޤΥޥ -Ѥݤˤϻ˥ǡפFIXNUMǤ뤳Ȥǧ -ɬפޤŪ®ѴԤȤǤޤ -FIX2LONG()פ㳰ȯޤ󤬡FIX2INT()פ -̤intΥ˼ޤʤˤ㳰ȯޤ -줫顤FIXNUM˸¤餺RubyΥǡѴ -NUM2INT()פӡNUM2LONG()פȤޥޤ -ΥޥϥޥϥǡפΥå̵ǻȤޤ -(ѴǤʤˤ㳰ȯ)Ʊͤ˥å̵ -ǻȤѴޥdoubleФNUM2DBL()פޤ - -char* Ф硤 StringValue() StringValuePtr() -Ȥޤ -StringValue(var) var String -Ǥв⤻Ǥʤ var var.to_str() η -֤ޥStringValuePtr(var) Ʊͤ var -String ֤Ƥ var ΥХɽФ char* -֤ޥǤvar Ƥľ֤Τǡ -var lvalue Ǥɬפޤ -ޤStringValuePtr() StringValueCStr() Ȥ -⤢ޤStringValueCStr(var) var String ֤ -Ƥ var ʸɽФ char* ֤ޤ֤ -ʸˤ nul ʸղäޤʤ nul -ʸޤޤ ArgumentError ȯޤ -StringValuePtr() Ǥϡ nul ʸݾڤϤʤ - nul ʸޤޤƤǽ⤢ޤ - -ʳΥǡפбCι¤Τޤб -빽¤ΤΤVALUEϤΤޤޥ㥹(Ѵ)й¤Τ -ݥ󥿤ѴǤޤ - -¤Τϡstruct RXxxxxפȤ̾ruby.hƤ -㤨ʸϡstruct RStringפǤºݤ˻Ȥǽ -Τʸ󤯤餤Ȼפޤ - -ruby.hǤϹ¤Τإ㥹ȤޥRXXXXX()(ʸ -ˤ)Ȥ̾󶡤Ƥޤ(: RSTRING()) - -¤ΤǡФޥ󶡤Ƥޤʸ -strĹ뤿ˤϡRSTRING_LEN(str)פȤʸstr -char*Ȥ뤿ˤϡRSTRING_PTR(str)פȤޤ -ˤϡ줾RARRAY_LEN(ary)סRARRAY_PTR(ary)פ -ʤޤ - -Rubyι¤Τľܥ˵ĤʤФʤʤ -Ȥϡʸι¤ΤȤϻȤǡľѹ -ʤȤǤľѹ硤֥ȤƤ -Ȥʤʤäơפ̥Хθˤʤޤ - -1.4 CΥǡVALUEѴ - -VALUEμºݤι¤ - - * FIXNUMξ - - 1bitեȤơLSBΩƤ롥 - - * ¾Υݥ󥿤ξ - - ΤޤVALUE˥㥹Ȥ롥 - -ȤʤäƤޤäơLSBåVALUEFIXNUM -狼櫓Ǥ(ݥ󥿤LSBΩäƤʤȤꤷ -) - -Ǥ顤FIXNUMʳRubyΥ֥Ȥι¤ΤñVALUE -˥㥹ȤVALUEѴޤǤդι¤ -ΤVALUE˥㥹Ƚ櫓ǤϤޤ󡥥㥹Ȥ -RubyΤäƤ빽¤(ruby.hƤstruct RXxxx -Τ)Ǥ - -FIXNUM˴ؤƤѴޥͳɬפޤC -VALUEѴޥϰʲΤΤޤɬפ˱ -ƻȤʬƤ - - INT2FIX() Ȥ31bitޤ63bit˼ޤ뼫 - - INT2NUM() ǤդVALUE - -INT2NUM()FIXNUMϰϤ˼ޤʤ硤BignumѴ -Ƥޤ(٤) - -1.5 RubyΥǡ - -Ҥ٤̤ꡤRubyι¤Τ򥢥Ƥι -ԤȤϴޤ󡥤ǡRubyΥǡˤ -RubyѰդƤؿѤƤ - -ǤϤäȤȤǤʸ/ -ؿ򤢤ޤ(ǤϤʤǤ) - - ʸФؿ +<<<<<<< HEAD +1.3 VALUEをCのデータに変換する + +データタイプがT_NIL,T_FALSE,T_TRUEである時,データはそれぞ +れnil,false,trueです.このデータタイプのオブジェクトはひと +つずつしか存在しません. + +データタイプがT_FIXNUMの時,これは31bitまたは63bitのサイズを +持つ整数です.longのサイズが32bitのプラットフォームであれば +31bitに,longのサイズが64bitのプラットフォームであれば63bit +になります. FIXNUM を C の整数に変換するためにはマクロ +「FIX2INT()」または「FIX2LONG()」を使います.これらのマクロ +を使用する際には事前にデータタイプがFIXNUMであることを確認す +る必要がありますが,比較的高速に変換を行うことができます.ま +た,「FIX2LONG()」は例外を発生しませんが,「FIX2INT()」は変 +換結果がintのサイズに収まらない場合には例外を発生します. +それから,FIXNUMに限らずRubyのデータを整数に変換する +「NUM2INT()」および「NUM2LONG()」というマクロがあります.こ +れらのマクロはマクロはデータタイプのチェック無しで使えます +(整数に変換できない場合には例外が発生する).同様にチェック無 +で使える変換マクロはdoubleを取り出す「NUM2DBL()」があります. + +char* を取り出す場合, StringValue() と StringValuePtr() +を使います. +StringValue(var) は var が String +であれば何もせず,そうでなければ var を var.to_str() の結果 +に置き換えるマクロ,StringValuePtr(var) は同様に var を +String に置き換えてから var のバイト列表現に対する char* を +返すマクロです.var の内容を直接置き換える処理が入るので, +var は lvalue である必要があります. +また,StringValuePtr() に類似した StringValueCStr() というマ +クロもあります.StringValueCStr(var) は var を String に置き +換えてから var の文字列表現に対する char* を返します.返され +る文字列の末尾には nul 文字が付加されます.なお,途中に nul +文字が含まれる場合は ArgumentError が発生します. +一方,StringValuePtr() では,末尾に nul 文字がある保証はなく, +途中に nul 文字が含まれている可能性もあります. + +それ以外のデータタイプは対応するCの構造体があります.対応す +る構造体のあるVALUEはそのままキャスト(型変換)すれば構造体の +ポインタに変換できます. + +構造体は「struct RXxxxx」という名前でruby.hで定義されていま +す.例えば文字列は「struct RString」です.実際に使う可能性が +あるのは文字列と配列くらいだと思います. + +ruby.hでは構造体へキャストするマクロも「RXXXXX()」(全部大文 +字にしたもの)という名前で提供されています(例: RSTRING()). + +構造体からデータを取り出すマクロが提供されています.文字列 +strの長さを得るためには「RSTRING_LEN(str)」とし,文字列strを +char*として得るためには「RSTRING_PTR(str)」とします.配列の +場合には,それぞれ「RARRAY_LEN(ary)」,「RARRAY_PTR(ary)」と +なります. + +Rubyの構造体を直接アクセスする時に気をつけなければならないこ +とは,配列や文字列の構造体の中身は参照するだけで,直接変更し +ないことです.直接変更した場合,オブジェクトの内容の整合性が +とれなくなって,思わぬバグの原因になります. + +1.4 CのデータをVALUEに変換する + +VALUEの実際の構造は + + * FIXNUMの場合 + + 1bit左シフトして,LSBを立てる. + + * その他のポインタの場合 + + そのままVALUEにキャストする. + +となっています.よって,LSBをチェックすればVALUEがFIXNUMかど +うかわかるわけです(ポインタのLSBが立っていないことを仮定して +いる). + +ですから,FIXNUM以外のRubyのオブジェクトの構造体は単にVALUE +にキャストするだけでVALUEに変換出来ます.ただし,任意の構造 +体がVALUEにキャスト出来るわけではありません.キャストするの +はRubyの知っている構造体(ruby.hで定義されているstruct RXxxx +のもの)だけです. + +FIXNUMに関しては変換マクロを経由する必要があります.Cの整数 +からVALUEに変換するマクロは以下のものがあります.必要に応じ +て使い分けてください. + + INT2FIX() もとの整数が31bitまたは63bit以内に収まる自信 + がある時 + INT2NUM() 任意の整数からVALUEへ + +INT2NUM()は整数がFIXNUMの範囲に収まらない場合,Bignumに変換 +してくれます(が,少し遅い). + +1.5 Rubyのデータを操作する + +先程も述べた通り,Rubyの構造体をアクセスする時に内容の更新を +行うことは勧められません.で,Rubyのデータを操作する時には +Rubyが用意している関数を用いてください. + +ここではもっとも使われるであろう文字列と配列の生成/操作を行 +い関数をあげます(全部ではないです). + + 文字列に対する関数 +======= +1.3 VALUEをCのデータに変換する + +データタイプがT_NIL,T_FALSE,T_TRUEである時,データはそれぞ +れnil,false,trueです.このデータタイプのオブジェクトはひと +つずつしか存在しません. + +データタイプがT_FIXNUMの時,これは31bitまたは63bitのサイズを +持つ整数です.longのサイズが32bitのプラットフォームであれば +31bitに,longのサイズが64bitのプラットフォームであれば63bit +になります. FIXNUM を C の整数に変換するためにはマクロ +「FIX2INT()」または「FIX2LONG()」を使います.これらのマクロ +を使用する際には事前にデータタイプがFIXNUMであることを確認す +る必要がありますが,比較的高速に変換を行うことができます.ま +た,「FIX2LONG()」は例外を発生しませんが,「FIX2INT()」は変 +換結果がintのサイズに収まらない場合には例外を発生します. +それから,FIXNUMに限らずRubyのデータを整数に変換する +「NUM2INT()」および「NUM2LONG()」というマクロがあります.こ +れらのマクロはマクロはデータタイプのチェック無しで使えます +(整数に変換できない場合には例外が発生する).同様にチェック無 +で使える変換マクロはdoubleを取り出す「NUM2DBL()」があります. + +char* を取り出す場合, StringValue() と StringValuePtr() +を使います. +StringValue(var) は var が String +であれば何もせず,そうでなければ var を var.to_str() の結果 +に置き換えるマクロ,StringValuePtr(var) は同様に var を +String に置き換えてから var のバイト列表現に対する char* を +返すマクロです.var の内容を直接置き換える処理が入るので, +var は lvalue である必要があります. +また,StringValuePtr() に類似した StringValueCStr() というマ +クロもあります.StringValueCStr(var) は var を String に置き +換えてから var の文字列表現に対する char* を返します.返され +る文字列の末尾には nul 文字が付加されます.なお,途中に nul +文字が含まれる場合は ArgumentError が発生します. +一方,StringValuePtr() では,末尾に nul 文字がある保証はなく, +途中に nul 文字が含まれている可能性もあります. + +それ以外のデータタイプは対応するCの構造体があります.対応す +る構造体のあるVALUEはそのままキャスト(型変換)すれば構造体の +ポインタに変換できます. + +構造体は「struct RXxxxx」という名前でruby.hで定義されていま +す.例えば文字列は「struct RString」です.実際に使う可能性が +あるのは文字列と配列くらいだと思います. + +ruby.hでは構造体へキャストするマクロも「RXXXXX()」(全部大文 +字にしたもの)という名前で提供されています(例: RSTRING()). + +構造体からデータを取り出すマクロが提供されています.文字列 +strの長さを得るためには「RSTRING_LEN(str)」とし,文字列strを +char*として得るためには「RSTRING_PTR(str)」とします.配列の +場合には,それぞれ「RARRAY_LEN(ary)」,「RARRAY_PTR(ary)」と +なります. + +Rubyの構造体を直接アクセスする時に気をつけなければならないこ +とは,配列や文字列の構造体の中身は参照するだけで,直接変更し +ないことです.直接変更した場合,オブジェクトの内容の整合性が +とれなくなって,思わぬバグの原因になります. + +1.4 CのデータをVALUEに変換する + +VALUEの実際の構造は + + * FIXNUMの場合 + + 1bit左シフトして,LSBを立てる. + + * その他のポインタの場合 + + そのままVALUEにキャストする. + +となっています.よって,LSBをチェックすればVALUEがFIXNUMかど +うかわかるわけです(ポインタのLSBが立っていないことを仮定して +いる). + +ですから,FIXNUM以外のRubyのオブジェクトの構造体は単にVALUE +にキャストするだけでVALUEに変換出来ます.ただし,任意の構造 +体がVALUEにキャスト出来るわけではありません.キャストするの +はRubyの知っている構造体(ruby.hで定義されているstruct RXxxx +のもの)だけです. + +FIXNUMに関しては変換マクロを経由する必要があります.Cの整数 +からVALUEに変換するマクロは以下のものがあります.必要に応じ +て使い分けてください. + + INT2FIX() もとの整数が31bitまたは63bit以内に収まる自信 + がある時 + INT2NUM() 任意の整数からVALUEへ + +INT2NUM()は整数がFIXNUMの範囲に収まらない場合,Bignumに変換 +してくれます(が,少し遅い). + +1.5 Rubyのデータを操作する + +先程も述べた通り,Rubyの構造体をアクセスする時に内容の更新を +行うことは勧められません.で,Rubyのデータを操作する時には +Rubyが用意している関数を用いてください. + +ここではもっとも使われるであろう文字列と配列の生成/操作を行 +い関数をあげます(全部ではないです). + + 文字列に対する関数 +>>>>>>> Change encoding from EUC-JP to UTF-8. [Feature #5128] rb_str_new(const char *ptr, long len) - Rubyʸ롥 + 新しいRubyの文字列を生成する. rb_str_new2(const char *ptr) rb_str_new_cstr(const char *ptr) - Cʸ󤫤Rubyʸ롥δؿεǽ - rb_str_new(ptr, strlen(ptr))ƱǤ롥 + Cの文字列からRubyの文字列を生成する.この関数の機能は + rb_str_new(ptr, strlen(ptr))と同等である. rb_tainted_str_new(const char *ptr, long len) - ޡղä줿Rubyʸ롥 - Υǡ˴Ťʸˤϱޡղä٤ - Ǥ롥 + 汚染マークが付加された新しいRubyの文字列を生成する.外部 + からのデータに基づく文字列には汚染マークが付加されるべき + である. rb_tainted_str_new2(const char *ptr) rb_tainted_str_new_cstr(const char *ptr) - Cʸ󤫤ޡղä줿Rubyʸ롥 + Cの文字列から汚染マークが付加されたRubyの文字列を生成する. rb_sprintf(const char *format, ...) rb_vsprintf(const char *format, va_list ap) - Cʸformat³printf(3)ΥեޥåȤˤä - Rubyʸ롥 + Cの文字列formatと続く引数をprintf(3)のフォーマットにしたがって + 整形し,Rubyの文字列を生成する. rb_str_cat(VALUE str, const char *ptr, long len) - RubyʸstrlenХȤʸptrɲä롥 + Rubyの文字列strにlenバイトの文字列ptrを追加する. rb_str_cat2(VALUE str, const char* ptr) - RubyʸstrCʸptrɲä롥δؿεǽ - rb_str_cat(str, ptr, strlen(ptr))ƱǤ롥 + Rubyの文字列strにCの文字列ptrを追加する.この関数の機能は + rb_str_cat(str, ptr, strlen(ptr))と同等である. rb_str_catf(VALUE str, const char* format, ...) rb_str_vcatf(VALUE str, const char* format, va_list ap) - Cʸformat³printf(3)ΥեޥåȤˤä - Rubyʸstrɲä롥δؿεǽϡ줾 - rb_str_cat2(str, rb_sprintf(format, ...)) - rb_str_cat2(str, rb_vsprintf(format, ap)) ƱǤ롥 + Cの文字列formatと続く引数をprintf(3)のフォーマットにしたがって + 整形し,Rubyの文字列strに追加する.この関数の機能は,それぞれ + rb_str_cat2(str, rb_sprintf(format, ...)) や + rb_str_cat2(str, rb_vsprintf(format, ap)) と同等である. rb_enc_str_new(const char *ptr, long len, rb_encoding *enc) +<<<<<<< HEAD - ꤵ줿󥳡ǥ󥰤Rubyʸ. + 指定されたエンコーディングでRubyの文字列を生成する. +======= + + 指定されたエンコーディングでRubyの文字列を生成する. + +>>>>>>> Change encoding from EUC-JP to UTF-8. [Feature #5128] rb_usascii_str_new(const char *ptr, long len) rb_usascii_str_new_cstr(const char *ptr) - 󥳡ǥ󥰤US-ASCIIRubyʸ. + エンコーディングがUS-ASCIIのRubyの文字列を生成する. rb_str_resize(VALUE str, long len) - RubyʸΥlenХȤѹ롥strĹ - ʤƥåȤƤʤФʤʤlenĹû - ϡlenХȤۤʬƤϼΤƤ롥len - ĹĹϡĹۤʬƤ¸ - ʤǥߤˤʤδؿθƤӽФˤä - RSTRING_PTR(str)ѹ뤫⤷ʤȤա + Rubyの文字列のサイズをlenバイトに変更する.strの長さは前 + 以てセットされていなければならない.lenが元の長さよりも短 + い時は,lenバイトを越えた部分の内容は捨てられる.lenが元 + の長さよりも長い時は,元の長さを越えた部分の内容は保存さ + れないでゴミになるだろう.この関数の呼び出しによって + RSTRING_PTR(str)が変更されるかもしれないことに注意. rb_str_set_len(VALUE str, long len) - RubyʸΥlenХȤ˥åȤ롥strѹ - ǽǤʤ㳰ȯ롥RSTRING_LEN(str)Ȥ̵طˡ - lenХȤޤǤƤ¸롥lenstr̤ۤƤ - ƤϤʤʤ + Rubyの文字列のサイズをlenバイトにセットする.strが変更可 + 能でなければ例外が発生する.RSTRING_LEN(str)とは無関係に, + lenバイトまでの内容は保存される.lenはstrの容量を越えてい + てはならない. - Фؿ + 配列に対する関数 rb_ary_new() - Ǥ0롥 + 要素が0の配列を生成する. rb_ary_new2(long len) - Ǥ0롥lenʬΰ򤢤餫 - ƤƤ + 要素が0の配列を生成する.len要素分の領域をあらかじめ割り + 当てておく. rb_ary_new3(long n, ...) - ǻꤷnǤޤ롥 + 引数で指定したn要素を含む配列を生成する. rb_ary_new4(long n, VALUE *elts) - ͿnǤ롥 + 配列で与えたn要素の配列を生成する. rb_ary_to_ary(VALUE obj) - ֥ȤѴ. - Object#to_aryƱǤ. + オブジェクトを配列に変換する. + Object#to_aryと同等である. - ¾ˤؿ¿. - aryϤʤФʤʤ. ʤ - Ǥ. + 他にも配列を操作する関数が多数ある. これらは + 引数aryに配列を渡さなければならない. さもないと + コアを吐く. rb_ary_aref(argc, VALUE *argv, VALUE ary) - Array#[]Ʊ. + Array#[]と同等. rb_ary_entry(VALUE ary, long offset) @@ -312,45 +423,45 @@ Ruby rb_ary_shift(VALUE ary) rb_ary_unshift(VALUE ary, VALUE val) -2RubyεǽȤ +2.Rubyの機能を使う -ŪRubyǽ񤱤뤳ȤCǤ񤱤ޤRubyΤΤCǵ -ҤƤǤ顤ȤʤǤɡ -Rubyγĥ˻ȤȤ¿ͽ¬뵡ǽ濴˾ -𤷤ޤ +原理的にRubyで書けることはCでも書けます.RubyそのものがCで記 +述されているんですから,当然といえば当然なんですけど.ここで +はRubyの拡張に使うことが多いだろうと予測される機能を中心に紹 +介します. -2.1 Ruby˵ǽɲä +2.1 Rubyに機能を追加する -Ruby󶡤ƤؿȤRuby󥿥ץ꥿˿ǽ -ɲä뤳ȤǤޤRubyǤϰʲεǽɲäؿ -󶡤Ƥޤ +Rubyで提供されている関数を使えばRubyインタプリタに新しい機能 +を追加することができます.Rubyでは以下の機能を追加する関数が +提供されています. - * 饹⥸塼 - * ᥽åɡðۥ᥽åɤʤ - * + * クラス,モジュール + * メソッド,特異メソッドなど + * 定数 -ǤϽ˾Ҳ𤷤ޤ +では順に紹介します. -2.1.1 饹/⥸塼 +2.1.1 クラス/モジュール定義 -饹⥸塼뤿ˤϡʲδؿȤޤ +クラスやモジュールを定義するためには,以下の関数を使います. VALUE rb_define_class(const char *name, VALUE super) VALUE rb_define_module(const char *name) -δؿϿ줿饹⥸塼֤ޤ -᥽åɤˤͤɬפʤΤǡۤȤɤξ -ͤѿ˳ǼƤɬפǤ礦 +これらの関数は新しく定義されたクラスやモジュールを返します. +メソッドや定数の定義にこれらの値が必要なので,ほとんどの場合 +は戻り値を変数に格納しておく必要があるでしょう. -饹⥸塼¾Υ饹˥ͥȤ -ϰʲδؿȤޤ +クラスやモジュールを他のクラスの内部にネストして定義する時に +は以下の関数を使います. VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super) VALUE rb_define_module_under(VALUE outer, const char *name) -2.1.2 ᥽å/ðۥ᥽å +2.1.2 メソッド/特異メソッド定義 -᥽åɤðۥ᥽åɤˤϰʲδؿȤޤ +メソッドや特異メソッドを定義するには以下の関数を使います. void rb_define_method(VALUE klass, const char *name, VALUE (*func)(), int argc) @@ -359,365 +470,365 @@ Ruby VALUE (*func)(), int argc) -ǰΤȡðۥ᥽åɡפȤϡΥ֥ -ȤФƤͭʥ᥽åɤǤRubyǤϤ褯Smalltalkˤ -륯饹᥽åɤȤơ饹Фðۥ᥽åɤȤ -ޤ +念のため説明すると「特異メソッド」とは,その特定のオブジェク +トに対してだけ有効なメソッドです.RubyではよくSmalltalkにお +けるクラスメソッドとして,クラスに対する特異メソッドが使われ +ます. -δؿ argcȤCδؿϤο( -)ޤargc0ʾλϴؿ˰Ϥο -̣ޤ16İʾΰϻȤޤ(פޤ͡ -ʤ)ºݤδؿˤƬΰȤselfͿޤ -ǡꤷ1¿ĤȤˤʤޤ +これらの関数の argcという引数はCの関数へ渡される引数の数(と +形式)を決めます.argcが0以上の時は関数に引き渡す引数の数を意 +味します.16個以上の引数は使えません(が,要りませんよね,そ +んなに).実際の関数には先頭の引数としてselfが与えられますの +で,指定した数より1多い引数を持つことになります. -argcλϰοǤϤʤꤷȤˤʤޤ -argc-1λϰϤޤargc-2λϰ -RubyȤϤޤ +argcが負の時は引数の数ではなく,形式を指定したことになります. +argcが-1の時は引数を配列に入れて渡されます.argcが-2の時は引 +数はRubyの配列として渡されます. -᥽åɤؿϤޤĤޤ. ҤȤĤϥ᥽å -̾ȤIDޤ. IDˤĤƤ2.2.2򻲾. +メソッドを定義する関数はまだいくつかあります. ひとつはメソッド +名としてIDを取ります. IDについては2.2.2を参照. void rb_define_method_id(VALUE klass, ID name, VALUE (*func)(ANYARGS), int argc) -private/protectedʥ᥽åɤդĤδؿޤ. +private/protectedなメソッドを定義するふたつの関数があります. void rb_define_private_method(VALUE klass, const char *name, VALUE (*func)(), int argc) void rb_define_protected_method(VALUE klass, const char *name, VALUE (*func)(), int argc) -private᥽åɤȤϴؿǤƤӽФȤνʤ᥽ -ɤǤ +privateメソッドとは関数形式でしか呼び出すことの出来ないメソッ +ドです. -Ǹˡ rb_define_moduleؿϥ⥸塼ؿޤ -⥸塼ؿȤϥ⥸塼ðۥ᥽åɤǤꡤƱ -private᥽åɤǤ⤢ΤǤ򤢤Math⥸塼 -sqrt()ʤɤޤΥ᥽åɤ +最後に, rb_define_module関数はモジュール関数を定義します. +モジュール関数とはモジュールの特異メソッドであり,同時に +privateメソッドでもあるものです.例をあげるとMathモジュール +のsqrt()などがあげられます.このメソッドは Math.sqrt(4) -ȤǤ +という形式でも include Math sqrt(4) -ȤǤȤޤ⥸塼ؿؿϰʲ -̤Ǥ +という形式でも使えます.モジュール関数を定義する関数は以下の +通りです. void rb_define_module_function(VALUE module, const char *name, VALUE (*func)(), int argc) -ؿŪ᥽å(Kernel⥸塼private method)뤿 -δؿϰʲ̤Ǥ +関数的メソッド(Kernelモジュールのprivate method)を定義するた +めの関数は以下の通りです. void rb_define_global_function(const char *name, VALUE (*func)(), int argc) -᥽åɤ̾뤿δؿϰʲ̤Ǥ +メソッドの別名を定義するための関数は以下の通りです. void rb_define_alias(VALUE module, const char* new, const char* old); -°μ᥽åɤˤ +属性の取得・設定メソッドを定義するには void rb_define_attr(VALUE klass, const char *name, int read, int write) -饹᥽åallocateꤹ뤿δؿ -ʲ̤Ǥ +クラスメソッドallocateを定義したり削除したりするための関数は +以下の通りです. void rb_define_alloc_func(VALUE klass, VALUE (*func)(VALUE klass)); void rb_undef_alloc_func(VALUE klass); -funcϥ饹ȤƼäơƤ줿 -󥹤֤ʤƤϤʤޤ󡥤Υ󥹥󥹤ϡ -ʤɤޤޤʤǤֶפΤޤޤˤƤۤ -褤Ǥ礦 +funcはクラスを引数として受け取って,新しく割り当てられたイン +スタンスを返さなくてはなりません.このインスタンスは,外部リ +ソースなどを含まない,できるだけ「空」のままにしておいたほう +がよいでしょう. -2.1.3 +2.1.3 定数定義 -ĥ饤֥꤬ɬפϤ餫Ƥɤ -Ǥ礦ؿĤޤ +拡張ライブラリが必要な定数はあらかじめ定義しておいた方が良い +でしょう.定数を定義する関数は二つあります. void rb_define_const(VALUE klass, const char *name, VALUE val) void rb_define_global_const(const char *name, VALUE val) -ԤΥ饹/⥸塼°Ρ -ԤϥХΤǤ +前者は特定のクラス/モジュールに属する定数を定義するもの,後 +者はグローバルな定数を定義するものです. -2.2 RubyεǽCƤӽФ +2.2 Rubyの機能をCから呼び出す -ˡ1.5 RubyΥǡ٤ǰҲ𤷤褦ʴؿ -ȤСRubyεǽ¸ƤؿľܸƤӽФȤ -ޤ +既に『1.5 Rubyのデータを操作する』で一部紹介したような関数を +使えば,Rubyの機能を実現している関数を直接呼び出すことが出来 +ます. -# Τ褦ʴؿΰɽϤޤΤȤޤ󡥥 -# 뤷ʤǤ͡ +# このような関数の一覧表はいまのところありません.ソースを見 +# るしかないですね. -ʳˤRubyεǽƤӽФˡϤĤޤ +それ以外にもRubyの機能を呼び出す方法はいくつかあります. -2.2.1 RubyΥץeval +2.2.1 Rubyのプログラムをevalする -CRubyεǽƤӽФäȤñˡȤơʸ -Ϳ줿RubyΥץɾʲδؿޤ +CからRubyの機能を呼び出すもっとも簡単な方法として,文字列で +与えられたRubyのプログラムを評価する以下の関数があります. VALUE rb_eval_string(const char *str) -ɾϸߤδĶǹԤޤĤޤꡤߤΥѿ -ʤɤѤޤ +この評価は現在の環境で行われます.つまり,現在のローカル変数 +などを受け継ぎます. -ɾ㳰ȯ뤫⤷ʤȤդޤ礦. -ʴؿ⤢ޤ. +評価は例外を発生するかもしれないことに注意しましょう. より安全 +な関数もあります. VALUE rb_eval_string_protect(const char *str, int *state) -δؿϥ顼ȯnil֤ޤơˤ -*stateϥˡʤ󥼥ˤʤޤ +この関数はエラーが発生するとnilを返します.そして,成功時には +*stateはゼロに,さもなくば非ゼロになります. -2.2.2 IDޤϥܥ +2.2.2 IDまたはシンボル -CʸͳRubyΥ᥽åɤƤӽФȤǤ -ˡRuby󥿥ץ꥿ǥ᥽åɤѿ̾ꤹ -˻ȤƤIDˤĤƤޤ礦 +Cから文字列を経由せずにRubyのメソッドを呼び出すこともできま +す.その前に,Rubyインタプリタ内でメソッドや変数名を指定する +時に使われているIDについて説明しておきましょう. -IDȤѿ̾᥽å̾ɽǤRubyǤ +IDとは変数名,メソッド名を表す整数です.Rubyの中では - :̻ -ޤ - :"Ǥդʸ" + :識別子 +または + :"任意の文字列" -ǥǤޤC餳뤿ˤϴؿ +でアクセスできます.Cからこの整数を得るためには関数 rb_intern(const char *name) -ȤޤRubyȤͿ줿ܥ(ޤʸ -)IDѴˤϰʲδؿȤޤ +を使います.Rubyから引数として与えられたシンボル(または文字 +列)をIDに変換するには以下の関数を使います. rb_to_id(VALUE symbol) -2.2.3 CRubyΥ᥽åɤƤӽФ +2.2.3 CからRubyのメソッドを呼び出す -CʸͳRubyΥ᥽åɤƤӽФˤϰʲ -δؿȤޤ +Cから文字列を経由せずにRubyのメソッドを呼び出すためには以下 +の関数を使います. VALUE rb_funcall(VALUE recv, ID mid, int argc, ...) -δؿϥ֥recvmidǻꤵ᥽åɤƤӽ -ޤ¾˰λλ㤦ʲδؿ⤢ޤ +この関数はオブジェクトrecvのmidで指定されるメソッドを呼び出 +します.その他に引数の指定の仕方が違う以下の関数もあります. VALUE rb_funcall2(VALUE recv, ID mid, int argc, VALUE *argv) VALUE rb_apply(VALUE recv, ID mid, VALUE args) -applyˤϰȤRubyͿޤ +applyには引数としてRubyの配列を与えます. -2.2.4 ѿ/򻲾/ +2.2.4 変数/定数を参照/更新する -CؿȤäƻȡǤΤϡ󥹥 -ǤѿϰΤΤCѿȤƥǤ -ޤѿ򻲾ȤˡϸƤޤ +Cから関数を使って参照・更新できるのは,定数,インスタンス変 +数です.大域変数は一部のものはCの大域変数としてアクセスでき +ます.ローカル変数を参照する方法は公開していません. -֥ȤΥ󥹥ѿ򻲾ȡؿϰʲ -Ǥ +オブジェクトのインスタンス変数を参照・更新する関数は以下の通 +りです. VALUE rb_ivar_get(VALUE obj, ID id) VALUE rb_ivar_set(VALUE obj, ID id, VALUE val) -idrb_intern()ΤȤäƤ +idはrb_intern()で得られるものを使ってください. -򻲾ȤˤϰʲδؿȤäƤ +定数を参照するには以下の関数を使ってください. VALUE rb_const_get(VALUE obj, ID id) -򿷤뤿ˤϡ2.1.3 ٤ǾҲ -ƤؿȤäƤ +定数を新しく定義するためには『2.1.3 定数定義』で紹介さ +れている関数を使ってください. -3RubyCȤξͭ +3.RubyとCとの情報共有 -CRubyδ֤ǾͭˡˤĤƲ⤷ޤ +C言語とRubyの間で情報を共有する方法について解説します. -3.1 C黲ȤǤRuby +3.1 Cから参照できるRubyの定数 -ʲRubyCΥ٥뤫黲ȤǤޤ +以下のRubyの定数はCのレベルから参照できます. Qtrue Qfalse - ͡QfalseCǤ⵶Ȥߤʤޤ(Ĥޤ0) + 真偽値.QfalseはC言語でも偽とみなされます(つまり0). Qnil - C줫鸫nilס + C言語から見た「nil」. -3.2 CRubyǶͭѿ +3.2 CとRubyで共有される大域変数 -CRubyѿȤäƾͭǤޤͭǤ -ѿˤϤĤμबޤΤʤǤäȤɤȤ -ȻפΤrb_define_variable()Ǥ +CとRubyで大域変数を使って情報を共有できます.共有できる大域 +変数にはいくつかの種類があります.そのなかでもっとも良く使わ +れると思われるのはrb_define_variable()です. void rb_define_variable(const char *name, VALUE *var) -δؿRubyCȤǶͭѿޤѿ̾ -`$'ǻϤޤʤˤϼưŪɲäޤѿͤ -ȼưŪRubyбѿͤѤޤ +この関数はRubyとCとで共有する大域変数を定義します.変数名が +`$'で始まらない時には自動的に追加されます.この変数の値を変 +更すると自動的にRubyの対応する変数の値も変わります. -ޤRuby¦ϹǤʤѿ⤢ޤread only -ѿϰʲδؿޤ +またRuby側からは更新できない変数もあります.このread onlyの +変数は以下の関数で定義します. void rb_define_readonly_variable(const char *name, VALUE *var) -ѿ¾hookĤѿǤޤhookդ -ѿϰʲδؿѤޤhookդѿ -ͤλȤhookǹԤɬפޤ +これら変数の他にhookをつけた大域変数を定義できます.hook付き +の大域変数は以下の関数を用いて定義します.hook付き大域変数の +値の参照や設定はhookで行う必要があります. void rb_define_hooked_variable(const char *name, VALUE *var, VALUE (*getter)(), void (*setter)()) -δؿCδؿˤähookΤĤ줿ѿ -ѿȤ줿ˤϴؿgetterѿͤåȤ -ˤϴؿsetterƤФ롥hookꤷʤgetter -setter0ꤷޤ -# gettersetter0ʤrb_define_variable()Ʊˤʤ롥 +この関数はCの関数によってhookのつけられた大域変数を定義しま +す.変数が参照された時には関数getterが,変数に値がセットされ +た時には関数setterが呼ばれる.hookを指定しない場合はgetterや +setterに0を指定します. +# getterもsetterも0ならばrb_define_variable()と同じになる. -gettersetterλͤϼ̤Ǥ +getterとsetterの仕様は次の通りです. VALUE (*getter)(ID id, VALUE *var); void (*setter)(VALUE val, ID id, VALUE *var); -줫顤бCѿʤRubyѿ -ȤǤޤ. ѿͤϥեåؿΤߤˤäƼ -ޤ. +それから,対応するCの変数を持たないRubyの大域変数を定義する +こともできます. その変数の値はフック関数のみによって取得・設定 +されます. void rb_define_virtual_variable(const char *name, VALUE (*getter)(), void (*setter)()) -δؿˤä줿RubyѿȤ줿ˤ -getterѿͤåȤ줿ˤsetterƤФޤ +この関数によって定義されたRubyの大域変数が参照された時には +getterが,変数に値がセットされた時にはsetterが呼ばれます. -gettersetterλͤϰʲ̤Ǥ +getterとsetterの仕様は以下の通りです. (*getter)(ID id); (*setter)(VALUE val, ID id); -3.3 CΥǡRuby֥Ȥˤ +3.3 CのデータをRubyオブジェクトにする -C줿ǡ(¤)RubyΥ֥ȤȤ -갷礬ꤨޤΤ褦ʾˤϡDataȤ -Ruby֥ȤCι¤(ؤΥݥ)򤯤ळȤRuby -֥ȤȤƼ갷褦ˤʤޤ +Cの世界で定義されたデータ(構造体)をRubyのオブジェクトとして +取り扱いたい場合がありえます.このような場合には,Dataという +RubyオブジェクトにCの構造体(へのポインタ)をくるむことでRuby +オブジェクトとして取り扱えるようになります. -Data֥Ȥƹ¤ΤRuby֥Ȥ˥ץ -뤿ˤϡʲΥޥȤޤ +Dataオブジェクトを生成して構造体をRubyオブジェクトにカプセル +化するためには,以下のマクロを使います. Data_Wrap_Struct(klass, mark, free, ptr) -Υޥͤ줿Data֥ȤǤ +このマクロの戻り値は生成されたDataオブジェクトです. -klassϤData֥ȤΥ饹Ǥptrϥץ벽 -Cι¤ΤؤΥݥ󥿤ǤmarkϤι¤ΤRubyΥ֥ -ȤؤλȤ˻ȤؿǤΤ褦ʻȤޤޤʤ -ˤ0ꤷޤ +klassはこのDataオブジェクトのクラスです.ptrはカプセル化する +Cの構造体へのポインタです.markはこの構造体がRubyのオブジェ +クトへの参照がある時に使う関数です.そのような参照を含まない +時には0を指定します. -# Τ褦ʻȤϴޤ +# そのような参照は勧められません. -freeϤι¤Τ⤦פˤʤä˸ƤФؿǤ -ؿ١쥯ƤФޤ줬-1ξϡñ -˳ޤ +freeはこの構造体がもう不要になった時に呼ばれる関数です.この +関数がガーベージコレクタから呼ばれます.これが-1の場合は,単 +純に開放されます. -markfreeؿGC¹˸ƤӽФޤ. -ʤ, GC¹Ruby֥ȤΥ϶ػߤ -. ä, markfreeؿRuby֥ȤΥ -ϹԤʤǤ. +markおよびfree関数はGC実行中に呼び出されます. +なお, GC実行中はRubyオブジェクトのアロケーションは禁止されま +す. よって, markおよびfree関数でRubyオブジェクトのアロケーシ +ョンは行わないでください. -Cι¤ΤγData֥ȤƱ˹Ԥޥ -ưʲΤΤ󶡤Ƥޤ +Cの構造体の割当とDataオブジェクトの生成を同時に行うマクロと +して以下のものが提供されています. Data_Make_Struct(klass, type, mark, free, sval) -Υޥͤ줿Data֥ȤǤ +このマクロの戻り値は生成されたDataオブジェクトです. -klass, mark, freeData_Wrap_StructƱƯ򤷤ޤtype -ϳƤC¤ΤηǤƤ줿¤Τѿsval -ޤѿη (type*) Ǥɬפޤ +klass, mark, freeはData_Wrap_Structと同じ働きをします.type +は割り当てるC構造体の型です.割り当てられた構造体は変数sval +に代入されます.この変数の型は (type*) である必要があります. -Data֥Ȥݥ󥿤ФΤϰʲΥޥѤ -ޤ +Dataオブジェクトからポインタを取り出すのは以下のマクロを用い +ます. Data_Get_Struct(obj, type, sval) -Cι¤ΤؤΥݥ󥿤ѿsvalޤ +Cの構造体へのポインタは変数svalに代入されます. -DataλȤϤäʬˤΤǡ -򻲾ȤƤ +これらのDataの使い方はちょっと分かりにくいので,後で説明する +例題を参照してください. -4 - dbmѥå +4.例題 - dbmパッケージを作る -ޤǤǤȤꤢĥ饤֥ϺϤǤ -Rubyextǥ쥯ȥˤǤ˴ޤޤƤdbm饤֥ -ʳŪޤ +ここまでの説明でとりあえず拡張ライブラリは作れるはずです. +Rubyのextディレクトリにすでに含まれているdbmライブラリを例に +して段階的に説明します. -(1) ǥ쥯ȥ +(1) ディレクトリを作る % mkdir ext/dbm -Ruby 1.1ǤդΥǥ쥯ȥǥʥߥå饤֥ -뤳ȤǤ褦ˤʤޤRubyŪ˥󥯤 -RubyŸǥ쥯ȥβextǥ쥯ȥ˳ĥ -饤֥ѤΥǥ쥯ȥɬפޤ̾Ŭ -ǹޤ +Ruby 1.1からは任意のディレクトリでダイナミックライブラリを作 +ることができるようになりました.Rubyに静的にリンクする場合に +はRubyを展開したディレクトリの下,extディレクトリの中に拡張 +ライブラリ用のディレクトリを作る必要があります.名前は適当に +選んで構いません. -(2) ߷פ +(2) 設計する -ޤʤǤɡɤǽ¸뤫ɤޤ -פɬפޤɤʥ饹Ĥ뤫Υ饹ˤ -ɤʥ᥽åɤ뤫饹󶡤ʤɤˤĤ߷ -ޤ +まあ,当然なんですけど,どういう機能を実現するかどうかまず設 +計する必要があります.どんなクラスをつくるか,そのクラスには +どんなメソッドがあるか,クラスが提供する定数などについて設計 +します. -(3) Cɤ +(3) Cコードを書く -ĥ饤֥ΤȤʤCΥ񤭤ޤCΥ -ҤȤĤλˤϡ֥饤֥̾.cפ֤ɤǤ礦C -Υʣξˤϵդˡ֥饤֥̾.cפȤե -̾򤱤ɬפޤ֥ȥեȥ⥸塼 -Ū֥饤֥̾.oפȤե -Ȥͤ뤫ǤޤҤ mkmf 饤֥Τ -δؿѥפƥȤΤˡconftest.cפȤ -ե̾Ѥ뤳ȤդƤե -̾Ȥơconftest.cפѤƤϤʤޤ +拡張ライブラリ本体となるC言語のソースを書きます.C言語のソー +スがひとつの時には「ライブラリ名.c」を選ぶと良いでしょう.C +言語のソースが複数の場合には逆に「ライブラリ名.c」というファ +イル名は避ける必要があります.オブジェクトファイルとモジュー +ル生成時に中間的に生成される「ライブラリ名.o」というファイル +とが衝突するからです.また,後述する mkmf ライブラリのいくつ +かの関数がコンパイルを要するテストのために「conftest.c」とい +うファイル名を使用することに注意してください.ソースファイル +名として「conftest.c」を使用してはなりません. -Rubyϳĥ饤֥ɤˡInit_饤֥̾פ -ؿưŪ˼¹Ԥޤdbm饤֥ξInit_dbm -Ǥδؿǥ饹⥸塼롤᥽åɡʤɤ -Ԥޤdbm.cѤޤ +Rubyは拡張ライブラリをロードする時に「Init_ライブラリ名」と +いう関数を自動的に実行します.dbmライブラリの場合「Init_dbm」 +です.この関数の中でクラス,モジュール,メソッド,定数などの +定義を行います.dbm.cから一部引用します. -- void Init_dbm(void) { - /* DBM饹 */ + /* DBMクラスを定義する */ cDBM = rb_define_class("DBM", rb_cObject); - /* DBMEnumerate⥸塼򥤥󥯥롼ɤ */ + /* DBMはEnumerateモジュールをインクルードする */ rb_include_module(cDBM, rb_mEnumerable); - /* DBM饹Υ饹᥽åopen(): CǼ */ + /* DBMクラスのクラスメソッドopen(): 引数はCの配列で受ける */ rb_define_singleton_method(cDBM, "open", fdbm_s_open, -1); - /* DBM饹Υ᥽åclose(): Ϥʤ */ + /* DBMクラスのメソッドclose(): 引数はなし */ rb_define_method(cDBM, "close", fdbm_close, 0); - /* DBM饹Υ᥽å[]: 1 */ + /* DBMクラスのメソッド[]: 引数は1個 */ rb_define_method(cDBM, "[]", fdbm_fetch, 1); : - /* DBMǡǼ륤󥹥ѿ̾ΤID */ + /* DBMデータを格納するインスタンス変数名のためのID */ id_dbm = rb_intern("dbm"); } -- -DBM饤֥dbmΥǡб륪֥ȤˤʤϤ -顤CdbmRuby˼ɬפޤ +DBMライブラリはdbmのデータと対応するオブジェクトになるはずで +すから,Cの世界のdbmをRubyの世界に取り込む必要があります. -dbm.cǤData_Make_StructʲΤ褦˻ȤäƤޤ +dbm.cではData_Make_Structを以下のように使っています. -- struct dbmdata { @@ -729,12 +840,12 @@ struct dbmdata { obj = Data_Make_Struct(klass, struct dbmdata, 0, free_dbm, dbmp); -- -Ǥdbmstruct¤ΤؤΥݥ󥿤Data˥ץ벽Ƥ -ޤDBM*ľܥץ벽ʤΤclose()ν -ƤΤȤǤ +ここではdbmstruct構造体へのポインタをDataにカプセル化してい +ます.DBM*を直接カプセル化しないのはclose()した時の処理を考 +えてのことです. -Data֥Ȥdbmstruct¤ΤΥݥ󥿤Ф -˰ʲΥޥȤäƤޤ +Dataオブジェクトからdbmstruct構造体のポインタを取り出すため +に以下のマクロを使っています. -- #define GetDBM(obj, dbmp) {\ @@ -743,14 +854,14 @@ Data } -- -äʣʥޥǤפdbmdata¤ΤΥݥ -μФȡcloseƤ뤫ɤΥåޤȤƤ -Ǥ +ちょっと複雑なマクロですが,要するにdbmdata構造体のポインタ +の取り出しと,closeされているかどうかのチェックをまとめてい +るだけです. -DBM饹ˤϤ᥽åɤޤʬह3 -μޤҤȤĤϰοΤΤǡ -Ƥdelete᥽åɤޤdelete᥽åɤƤ -fdbm_delete()ϤΤ褦ˤʤäƤޤ +DBMクラスにはたくさんメソッドがありますが,分類すると3種類の +引数の受け方があります.ひとつは引数の数が固定のもので,例と +してはdeleteメソッドがあります.deleteメソッドを実装している +fdbm_delete()はこのようになっています. -- static VALUE @@ -760,13 +871,13 @@ fdbm_delete(VALUE obj, VALUE keystr) } -- -οΥפ1self2ʹߤ᥽å -ΰȤʤޤ +引数の数が固定のタイプは第1引数がself,第2引数以降がメソッド +の引数となります. -οΤΤCǼΤRubyǼ -ΤȤޤdbm饤֥ǡCǼ -DBMΥ饹᥽åɤǤopen()ǤƤ -fdbm_s_open()ϤʤäƤޤ +引数の数が不定のものはCの配列で受けるものとRubyの配列で受け +るものとがあります.dbmライブラリの中で,Cの配列で受けるもの +はDBMのクラスメソッドであるopen()です.これを実装している関 +数fdbm_s_open()はこうなっています. -- static VALUE @@ -780,18 +891,18 @@ fdbm_s_open(int argc, VALUE *argv, VALUE klass) } -- -Υפδؿ1Ϳ줿ο2Ϳ -줿äƤˤʤޤself3ȤͿ -ޤ +このタイプの関数は第1引数が与えられた引数の数,第2引数が与え +られた引数の入っている配列になります.selfは第3引数として与 +えられます. -Ϳ줿Ϥ뤿δؿopen()ǤȤ -Ƥrb_scan_args()Ǥ3˻ꤷեޥåȤ˽ -4ѿʹߤ˻ꤷVALUEؤλȤͤƤ - +この配列で与えられた引数を解析するための関数がopen()でも使わ +れているrb_scan_args()です.第3引数に指定したフォーマットに従 +い,第4変数以降に指定したVALUEへの参照に値を代入してくれま +す. -RubyȤƼ᥽åɤˤ -Thread#initializeޤϤǤ +引数をRubyの配列として受け取るメソッドの例には +Thread#initializeがあります.実装はこうです. -- static VALUE @@ -801,141 +912,141 @@ thread_initialize(VALUE thread, VALUE args) } -- -1self2RubyǤ +第1引数はself,第2引数はRubyの配列です. -** ջ +** 注意事項 -RubyȶͭϤʤRubyΥ֥ȤǼǽΤ -CѿϰʲδؿȤäRuby󥿥ץ꥿ѿ¸ -򶵤ƤƤǤʤGCǥȥ֥򵯤ޤ +Rubyと共有はしないがRubyのオブジェクトを格納する可能性のある +Cの大域変数は以下の関数を使ってRubyインタプリタに変数の存在 +を教えてあげてください.でないとGCでトラブルを起こします. void rb_global_variable(VALUE *var) -(4) extconf.rbѰդ +(4) extconf.rbを用意する -Makefileοˤʤextconf.rbȤե -ޤextconf.rbϥ饤֥ΥѥɬפʾΥ -ʤɤԤȤŪǤޤ +Makefileを作る場合の雛型になるextconf.rbというファイルを作り +ます.extconf.rbはライブラリのコンパイルに必要な条件のチェッ +クなどを行うことが目的です.まず, require 'mkmf' -extconf.rbƬ֤ޤextconf.rbǤϰʲRuby -ȤȤޤ +をextconf.rbの先頭に置きます.extconf.rbの中では以下のRuby関 +数を使うことが出来ます. - have_library(lib, func): 饤֥¸ߥå - have_func(func, header): ؿ¸ߥå - have_header(header): إåե¸ߥå - create_makefile(target): Makefile + have_library(lib, func): ライブラリの存在チェック + have_func(func, header): 関数の存在チェック + have_header(header): ヘッダファイルの存在チェック + create_makefile(target): Makefileの生成 -ʲѿȤȤǤޤ +以下の変数を使うことができます. - $CFLAGS: ѥɲŪ˻ꤹե饰(-Oʤ) - $CPPFLAGS: ץץåɲŪ˻ꤹե饰(-I-Dʤ) - $LDFLAGS: 󥯻ɲŪ˻ꤹե饰(-Lʤ) - $objs: 󥯤륪֥ȥե̾Υꥹ + $CFLAGS: コンパイル時に追加的に指定するフラグ(-Oなど) + $CPPFLAGS: プリプロセッサに追加的に指定するフラグ(-Iや-Dなど) + $LDFLAGS: リンク時に追加的に指定するフラグ(-Lなど) + $objs: リンクされるオブジェクトファイル名のリスト -֥ȥեΥꥹȤϡ̾ϥե򸡺 -ƼưŪޤmakeǥ褦 -Ū˻ꤹɬפޤ +オブジェクトファイルのリストは,通常はソースファイルを検索し +て自動的に生成されますが,makeの途中でソースを生成するような +場合は明示的に指定する必要があります. -饤֥򥳥ѥ뤹郎·鷺Υ饤֥򥳥 -ѥ뤷ʤˤcreate_makefileƤФʤMakefile -줺ѥԤޤ +ライブラリをコンパイルする条件が揃わず,そのライブラリをコン +パイルしない時にはcreate_makefileを呼ばなければMakefileは生 +成されず,コンパイルも行われません. -(5) dependѰդ +(5) dependを用意する -⤷ǥ쥯ȥdependȤե뤬¸ߤС -Makefile¸طåƤޤ +もし,ディレクトリにdependというファイルが存在すれば, +Makefileが依存関係をチェックしてくれます. % gcc -MM *.c > depend -ʤɤǺ뤳Ȥޤä»̵Ǥ礦 +などで作ることが出来ます.あって損は無いでしょう. -(6) Makefile +(6) Makefileを生成する -Makefileºݤ뤿ˤ +Makefileを実際に生成するためには ruby extconf.rb -Ȥޤextconf.rb require 'mkmf' ιԤʤˤϥ顼 -ˤʤޤΤǡɲä +とします.extconf.rbに require 'mkmf' の行がない場合にはエラー +になりますので,引数を追加して ruby -r mkmf extconf.rb -ȤƤ +としてください. -site_ruby ǥ쥯ȥǤʤ -vendor_ruby ǥ쥯ȥ˥󥹥ȡ뤹ˤ -ʲΤ褦 --vendor ץäƤ +site_ruby ディレクトリでなく, +vendor_ruby ディレクトリにインストールする場合には +以下のように --vendor オプションを加えてください. ruby extconf.rb --vendor -ǥ쥯ȥextʲѰդˤRubyΤmakeλ -ưŪMakefileޤΤǡΥƥåפפǤ +ディレクトリをext以下に用意した場合にはRuby全体のmakeの時に +自動的にMakefileが生成されますので,このステップは不要です. -(7) make +(7) makeする -ưŪ󥯥饤֥ˤϤξmakeƤ -ɬפǤ make install ǥ󥹥ȡ뤵ޤ +動的リンクライブラリを生成する場合にはその場でmakeしてくださ +い.必要であれば make install でインストールされます. -extʲ˥ǥ쥯ȥѰդϡRubyΥǥ쥯ȥ -make¹ԤMakefilemakeɬפˤäƤϤΥ -塼RubyؤΥ󥯤ޤǼưŪ˼¹ԤƤޤ -extconf.rb񤭴ʤɤMakefileκɬפʻϤ -Rubyǥ쥯ȥmakeƤ +ext以下にディレクトリを用意した場合は,Rubyのディレクトリで +makeを実行するとMakefileを生成からmake,必要によってはそのモ +ジュールのRubyへのリンクまで自動的に実行してくれます. +extconf.rbを書き換えるなどしてMakefileの再生成が必要な時はま +たRubyディレクトリでmakeしてください. -ĥ饤֥make installRuby饤֥Υǥ쥯ȥ -˥ԡޤ⤷ĥ饤֥ȶĴƻȤRubyǵ -Ҥ줿ץबꡤRuby饤֥֤ˤϡ -ĥ饤֥ѤΥǥ쥯ȥβ lib Ȥǥ쥯ȥ -ꡤ ĥ .rb Υե֤ƤƱ˥ -ȡ뤵ޤ +拡張ライブラリはmake installでRubyライブラリのディレクトリの +下にコピーされます.もし拡張ライブラリと協調して使うRubyで記 +述されたプログラムがあり,Rubyライブラリに置きたい場合には, +拡張ライブラリ用のディレクトリの下に lib というディレクトリ +を作り,そこに 拡張子 .rb のファイルを置いておけば同時にイン +ストールされます. -(8) ǥХå +(8) デバッグ -ޤǥХåʤưʤǤ礦͡ext/Setup˥ǥ -ȥ̾񤯤Ū˥󥯤ΤǥǥХåȤ褦ˤ -ޤʬѥ뤬٤ʤޤɡ +まあ,デバッグしないと動かないでしょうね.ext/Setupにディレ +クトリ名を書くと静的にリンクするのでデバッガが使えるようにな +ります.その分コンパイルが遅くなりますけど. -(9) Ǥ +(9) できあがり -ϤäȤʤꡤʤꡤʤꡤͳˤ -ȤRubyκԤϳĥ饤֥˴ؤưڤθ -ĥޤ +後はこっそり使うなり,広く公開するなり,売るなり,ご自由にお +使いください.Rubyの作者は拡張ライブラリに関して一切の権利を +主張しません. -Appendix A. RubyΥɤʬ +Appendix A. Rubyのソースコードの分類 -RubyΥϤĤʬह뤳ȤޤΤ -饤֥ʬϴŪ˳ĥ饤֥Ʊˤʤ -ƤޤΥϺޤǤǤۤȤǤ -פޤ +Rubyのソースはいくつかに分類することが出来ます.このうちクラ +スライブラリの部分は基本的に拡張ライブラリと同じ作り方になっ +ています.これらのソースは今までの説明でほとんど理解できると +思います. -RubyΥ +Ruby言語のコア - class.c : 饹ȥ⥸塼 - error.c : 㳰饹㳰 - gc.c : ΰ - load.c : 饤֥Υ - object.c : ֥ - variable.c : ѿ + class.c : クラスとモジュール + error.c : 例外クラスと例外機構 + gc.c : 記憶領域管理 + load.c : ライブラリのロード + object.c : オブジェクト + variable.c : 変数と定数 -Rubyιʸϴ - parse.y : ϴȹʸ - -> parse.c : ư - keywords : ͽ - -> lex.c : ư +Rubyの構文解析器 + parse.y : 字句解析器と構文定義 + -> parse.c : 自動生成 + keywords : 予約語 + -> lex.c : 自動生成 -Rubyɾ (̾YARV) +Rubyの評価器 (通称YARV) compile.c eval.c eval_error.c eval_jump.c eval_safe.c - insns.def : ۵ - iseq.c : VM::ISeqμ - thread.c : åɴȥƥڤؤ - thread_win32.c : åɼ - thread_pthread.c : Ʊ + insns.def : 仮想機械語の定義 + iseq.c : VM::ISeqの実装 + thread.c : スレッド管理とコンテキスト切り替え + thread_win32.c : スレッド実装 + thread_pthread.c : 同上 vm.c vm_dump.c vm_eval.c @@ -943,14 +1054,14 @@ Ruby vm_insnhelper.c vm_method.c - opt_insns_unif.def : ̿ͻ - opt_operand.def : ŬΤ + opt_insns_unif.def : 命令融合 + opt_operand.def : 最適化のための定義 - -> insn*.inc : ư - -> opt*.inc : ư - -> vm.inc : ư + -> insn*.inc : 自動生成 + -> opt*.inc : 自動生成 + -> vm.inc : 自動生成 -ɽ󥸥 () +正規表現エンジン (鬼車) regex.c regcomp.c regenc.c @@ -959,15 +1070,15 @@ Ruby regparse.c regsyntax.c -桼ƥƥؿ +ユーティリティ関数 - debug.c : CǥХåѤΥǥХåܥ - dln.c : ưŪǥ - st.c : ѥϥåɽ - strftime.c : - util.c : ¾Υ桼ƥƥ + debug.c : Cデバッガ用のデバッグシンボル + dln.c : 動的ローディング + st.c : 汎用ハッシュ表 + strftime.c : 時刻整形 + util.c : その他のユーティリティ -Rubyޥɤμ +Rubyコマンドの実装 dmyext.c dmydln.c @@ -981,7 +1092,7 @@ Ruby gem_prelude.rb prelude.rb -饹饤֥ +クラスライブラリ array.c : Array bignum.c : Bignum @@ -1000,7 +1111,7 @@ Ruby pack.c : Array#pack, String#unpack proc.c : Binding, Proc process.c : Process - random.c : + random.c : 乱数 range.c : Range rational.c : Rational re.c : Regexp, MatchData @@ -1010,69 +1121,74 @@ Ruby struct.c : Struct time.c : Time - defs/known_errors.def : 㳰饹 Errno::* - -> known_errors.inc : ư + defs/known_errors.def : 例外クラス Errno::* + -> known_errors.inc : 自動生成 -¿첽 +多言語化 encoding.c : Encoding transcode.c : Encoding::Converter - enc/*.c : 󥳡ǥ󥰥饹 - enc/trans/* : ɥݥбɽ + enc/*.c : エンコーディングクラス群 + enc/trans/* : コードポイント対応表 -gorubyޥɤμ +<<<<<<< HEAD +gorubyコマンドの実装 +======= +gorubyコマンドの実装 + +>>>>>>> Change encoding from EUC-JP to UTF-8. [Feature #5128] goruby.c - golf_prelude.rb : gorubyͭΥ饤֥ - -> golf_prelude.c : ư + golf_prelude.rb : goruby固有のライブラリ + -> golf_prelude.c : 自動生成 -Appendix B. ĥѴؿե +Appendix B. 拡張用関数リファレンス -C줫RubyεǽѤAPIϰʲ̤Ǥ롥 +C言語からRubyの機能を利用するAPIは以下の通りである. -** +** 型 VALUE - Ruby֥Ȥɽ뷿ɬפ˱ƥ㥹ȤѤ롥 - Ȥ߹߷ɽCηruby.h˵ҤƤRǻϤޤ빽¤ - ΤǤ롥VALUE򤳤˥㥹Ȥ뤿RǻϤޤ빽¤ - ̾ʸˤ̾ΥޥѰդƤ롥 + Rubyオブジェクトを表現する型.必要に応じてキャストして用いる. + 組み込み型を表現するCの型はruby.hに記述してあるRで始まる構造 + 体である.VALUE型をこれらにキャストするためにRで始まる構造体 + 名を全て大文字にした名前のマクロが用意されている. -** ѿ +** 変数・定数 Qnil - : nil֥ + 定数: nilオブジェクト Qtrue - : true֥(Υǥե) + 定数: trueオブジェクト(真のデフォルト値) Qfalse - : false֥ + 定数: falseオブジェクト -** CǡΥץ벽 +** Cデータのカプセル化 Data_Wrap_Struct(VALUE klass, void (*mark)(), void (*free)(), void *sval) - CǤդΥݥ󥿤򥫥ץ벽Ruby֥Ȥ֤ - Υݥ󥿤Ruby饢ʤʤäfreeǻꤷ - ؿƤФ롥ޤΥݥ󥿤λؤǡ¾Ruby - ȤؤƤ硤mark˻ꤹؿǥޡɬ - 롥 + Cの任意のポインタをカプセル化したRubyオブジェクトを返す.こ + のポインタがRubyからアクセスされなくなった時,freeで指定した + 関数が呼ばれる.また,このポインタの指すデータが他のRubyオブ + ジェクトを指している場合,markに指定する関数でマークする必要 + がある. Data_Make_Struct(klass, type, mark, free, sval) - typeΥmallocѿsval塤򥫥ץ - 벽ǡ֤ޥ + type型のメモリをmallocし,変数svalに代入した後,それをカプセ + ル化したデータを返すマクロ. Data_Get_Struct(data, type, sval) - datatypeΥݥ󥿤Фѿsvalޥ + dataからtype型のポインタを取り出し変数svalに代入するマクロ. -** å +** 型チェック TYPE(value) FIXNUM_P(value) @@ -1080,7 +1196,7 @@ NIL_P(value) void Check_Type(VALUE value, int type) void Check_SafeStr(VALUE value) -** Ѵ +** 型変換 FIX2INT(value), INT2FIX(i) FIX2LONG(value), LONG2FIX(l) @@ -1100,105 +1216,114 @@ StringValuePtr(value) StringValueCStr(value) rb_str_new2(s) -** 饹/⥸塼 +** クラス/モジュール定義 VALUE rb_define_class(const char *name, VALUE super) - superΥ֥饹ȤƿRuby饹롥 + superのサブクラスとして新しいRubyクラスを定義する. VALUE rb_define_class_under(VALUE module, const char *name, VALUE super) - superΥ֥饹ȤƿRuby饹module - Ȥ롥 + superのサブクラスとして新しいRubyクラスを定義し,moduleの + 定数として定義する. VALUE rb_define_module(const char *name) - Ruby⥸塼롥 + 新しいRubyモジュールを定義する. VALUE rb_define_module_under(VALUE module, const char *name) - Ruby⥸塼moduleȤ롥 + 新しいRubyモジュールを定義し,moduleの定数として定義する. void rb_include_module(VALUE klass, VALUE module) - ⥸塼򥤥󥯥롼ɤ롥classǤmodule򥤥 - 롼ɤƤˤϲ⤷ʤ(¿ť󥯥롼ɤζػ) + モジュールをインクルードする.classがすでにmoduleをインク + ルードしている時には何もしない(多重インクルードの禁止). void rb_extend_object(VALUE object, VALUE module) - ֥Ȥ⥸塼(Ƥ᥽å)dzĥ롥 + オブジェクトをモジュール(で定義されているメソッド)で拡張する. -** ѿ +** 大域変数定義 void rb_define_variable(const char *name, VALUE *var) - RubyCȤǶͭ륰Хѿ롥ѿ̾`$' - ϤޤʤˤϼưŪɲä롥nameȤRubyμ̻ - ȤƵʤʸ(㤨` ')ޤˤRubyץ - फϸʤʤ롥 + RubyとCとで共有するグローバル変数を定義する.変数名が`$'で + 始まらない時には自動的に追加される.nameとしてRubyの識別子 + として許されない文字(例えば` ')を含む場合にはRubyプログラ + ムからは見えなくなる. void rb_define_readonly_variable(const char *name, VALUE *var) - RubyCȤǶͭread onlyΥХѿ롥 - read onlyǤ뤳Ȱʳrb_define_variable()Ʊ + RubyとCとで共有するread onlyのグローバル変数を定義する. + read onlyであること以外はrb_define_variable()と同じ. void rb_define_virtual_variable(const char *name, VALUE (*getter)(), void (*setter)()) - ؿˤäƼ¸Rubyѿ롥ѿȤ줿 - ˤgetterѿͤåȤ줿ˤsetterƤФ - 롥 + 関数によって実現されるRuby変数を定義する.変数が参照された + 時にはgetterが,変数に値がセットされた時にはsetterが呼ばれ + る. void rb_define_hooked_variable(const char *name, VALUE *var, VALUE (*getter)(), void (*setter)()) - ؿˤähookΤĤ줿Хѿ롥ѿ - Ȥ줿ˤgetterؿͤåȤ줿ˤ - setterƤФ롥gettersetter0ꤷˤhook - ꤷʤΤƱˤʤ롥 + 関数によってhookのつけられたグローバル変数を定義する.変数 + が参照された時にはgetterが,関数に値がセットされた時には + setterが呼ばれる.getterやsetterに0を指定した時にはhookを + 指定しないのと同じ事になる. void rb_global_variable(VALUE *var) - GCΤᡤRubyץफϥʤ, Ruby - Ȥޤѿޡ롥 + GCのため,Rubyプログラムからはアクセスされないが, Rubyオブ + ジェクトを含む大域変数をマークする. -** +** 定数 void rb_define_const(VALUE klass, const char *name, VALUE val) - 롥 + 定数を定義する. void rb_define_global_const(const char *name, VALUE val) - 롥 + 大域定数を定義する. rb_define_const(rb_cObject, name, val) - Ʊ̣ + と同じ意味. -** ᥽å +** メソッド定義 rb_define_method(VALUE klass, const char *name, VALUE (*func)(), int argc) - ᥽åɤ롥argcselfοargc-1λ, - ؿˤϰο(selfޤޤʤ)1, 2 - ȤͿ(3self)argc-2λ, - 1self, 2args(argsϰޤRuby) - Ϳ롥 - +<<<<<<< HEAD + メソッドを定義する.argcはselfを除く引数の数.argcが-1の時, + 関数には引数の数(selfを含まない)を第1引数, 引数の配列を第2 + 引数とする形式で与えられる(第3引数はself).argcが-2の時, + 第1引数がself, 第2引数がargs(argsは引数を含むRubyの配列)と + いう形式で与えられる. + +======= + メソッドを定義する.argcはselfを除く引数の数.argcが-1の時, + 関数には引数の数(selfを含まない)を第1引数, 引数の配列を第2 + 引数とする形式で与えられる(第3引数はself).argcが-2の時, + 第1引数がself, 第2引数がargs(argsは引数を含むRubyの配列)と + いう形式で与えられる. + +>>>>>>> Change encoding from EUC-JP to UTF-8. [Feature #5128] rb_define_private_method(VALUE klass, const char *name, VALUE (*func)(), int argc) - private᥽åɤ롥rb_define_method()Ʊ + privateメソッドを定義する.引数はrb_define_method()と同じ. rb_define_singleton_method(VALUE klass, const char *name, VALUE (*func)(), int argc) - ðۥ᥽åɤ롥rb_define_method()Ʊ + 特異メソッドを定義する.引数はrb_define_method()と同じ. rb_scan_args(int argc, VALUE *argv, const char *fmt, ...) - argc, argvͿ줿ꤵ줿եޥåȤ˽äư - ʬ򤷡³VALUEؤλȤ˥åȤޤΥեޥ - ȤϡABNFǵҤȰʲ̤Ǥ + argc, argv形式で与えられた指定されたフォーマットに従って引 + 数を分解し,続くVALUEへの参照にセットします.このフォーマッ + トは,ABNFで記述すると以下の通りです. -- scan-arg-spec := param-arg-spec [option-hash-arg-spec] [block-arg-spec] @@ -1210,186 +1335,196 @@ pre-opt-post-arg-spec := num-of-leading-mandatory-args num-of-optional-args num- option-hash-arg-spec := sym-for-option-hash-arg block-arg-spec := sym-for-block-arg -num-of-leading-mandatory-args := DIGIT ; Ƭ֤άǽʰο -num-of-optional-args := DIGIT ; ³֤άǽʰο -sym-for-variable-length-args := "*" ; ³֤Ĺ - ; RubyǼ뤿λ -num-of-trailing-mandatory-args := DIGIT ; ü֤άǽʰο -sym-for-option-hash-arg := ":" ; ץϥå - ; λ; άǽʰ - ; ¿ΰꤵ졤 - ; Ǹΰϥåʤޤ - ; #to_hashѴǽˤξ - ; 롥Ǹΰnil - ; 硤Ĺ꤬ʤ - ; άǽο¿ - ; ꤵ줿˼ -sym-for-block-arg := "&" ; ƥ졼֥å뤿 - ; +num-of-leading-mandatory-args := DIGIT ; 先頭に置かれる省略不能な引数の数 +num-of-optional-args := DIGIT ; 続いて置かれる省略可能な引数の数 +sym-for-variable-length-args := "*" ; 続いて置かれる可変長引数を + ; Rubyの配列で取得するための指定 +num-of-trailing-mandatory-args := DIGIT ; 終端に置かれる省略不能な引数の数 +sym-for-option-hash-arg := ":" ; オプションハッシュを取得する + ; ための指定; 省略不能な引数の + ; 数よりも多くの引数が指定され, + ; 最後の引数がハッシュ(または + ; #to_hashで変換可能)の場合に + ; 取得される.最後の引数がnilの + ; 場合,可変長引数指定がなく, + ; 省略不能引数の数よりも多くの + ; 引数が指定された場合に取得される +sym-for-block-arg := "&" ; イテレータブロックを取得するための + ; 指定 -- - եޥåȤ"12"ξ硤Ϻ1Ĥǡ3(1+2)ޤǵ - Ȥ̣ˤʤޤäơեޥåʸ³ - 3ĤVALUEؤλȤ֤ɬפޤˤϼ - ѿåȤޤѿؤλȤNULLꤹ - ȤǤξϼͤϼΤƤޤʤ - άǽά줿ѿͤnil(CΥ٥Ǥ - Qnil)ˤʤޤ + フォーマットが"12"の場合,引数は最低1つで,3つ(1+2)まで許さ + れるという意味になります.従って,フォーマット文字列に続い + て3つのVALUEへの参照を置く必要があります.それらには取得した + 変数がセットされます.変数への参照の代わりにNULLを指定する + こともでき,その場合は取得した引数の値は捨てられます.なお, + 省略可能引数が省略された時の変数の値はnil(C言語のレベルでは + Qnil)になります. - ֤ͤͿ줿οǤץϥå太ӥ - ƥ졼֥åϿޤ + 返り値は与えられた引数の数です.オプションハッシュおよびイ + テレータブロックは数えません. -** Ruby᥽åɸƤӽФ +** Rubyメソッド呼び出し VALUE rb_funcall(VALUE recv, ID mid, int narg, ...) - ᥽åɸƤӽФʸ󤫤mid뤿ˤrb_intern() - Ȥ + メソッド呼び出し.文字列からmidを得るためにはrb_intern()を + 使う. VALUE rb_funcall2(VALUE recv, ID mid, int argc, VALUE *argv) - ᥽åɸƤӽФargc, argvϤ + メソッド呼び出し.引数をargc, argv形式で渡す. VALUE rb_eval_string(const char *str) - ʸRubyץȤȤƥѥ롦¹Ԥ롥 + 文字列をRubyスクリプトとしてコンパイル・実行する. ID rb_intern(const char *name) - ʸбID֤ + 文字列に対応するIDを返す. char *rb_id2name(ID id) - IDбʸ֤(ǥХå) + IDに対応する文字列を返す(デバッグ用). char *rb_class2name(VALUE klass) - 饹֤̾(ǥХå)饹̾ʤ - , ̤ä̾ĥ饹֤̾ + クラスの名前を返す(デバッグ用).クラスが名前を持たない時に + は, 祖先を遡って名前を持つクラスの名前を返す. int rb_respond_to(VALUE obj, ID id) - objidǼ᥽åɤĤɤ֤ + objがidで示されるメソッドを持つかどうかを返す. -** 󥹥ѿ +** インスタンス変数 VALUE rb_iv_get(VALUE obj, const char *name) - objΥ󥹥ѿͤ롥`@'ǻϤޤʤ󥹥 - ѿ Rubyץफ饢Ǥʤֱ줿ץ - ѿˤʤ롥ʸ̾ĥ饹(ޤ - ⥸塼)Υ󥹥ѿȤƼƤ롥 + objのインスタンス変数の値を得る.`@'で始まらないインスタン + ス変数は Rubyプログラムからアクセスできない「隠れた」イン + スタンス変数になる.定数は大文字の名前を持つクラス(または + モジュール)のインスタンス変数として実装されている. VALUE rb_iv_set(VALUE obj, const char *name, VALUE val) - objΥ󥹥ѿval˥åȤ롥 + objのインスタンス変数をvalにセットする. -** 湽¤ +** 制御構造 VALUE rb_block_call(VALUE obj, ID mid, int argc, VALUE * argv, VALUE (*func) (ANYARGS), VALUE data2) - func֥åȤꤷobj쥷Сargcargv - Ȥmid᥽åɤƤӽФfuncyield줿͡ - data2롥ʣͤyield줿(CǤ - rb_yield_values()rb_yield_values2(), rb_yield_splat()) - data2ArrayȤƥѥåƤ롥軰, Ͱargc - argvˤäyield줿ͤФȤǤ롥 + funcをブロックとして設定し,objをレシーバ,argcとargvを引数 + としてmidメソッドを呼び出す.funcは第一引数にyieldされた値, + 第二引数にdata2を受け取る.複数の値がyieldされた場合(Cでは + rb_yield_values()とrb_yield_values2(), rb_yield_splat()), + data2はArrayとしてパックされている.第三, 第四引数のargcと + argvによってyieldされた値を取り出すことができる. [OBSOLETE] VALUE rb_iterate(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2) - func2֥åȤꤷ, func1򥤥ƥ졼ȤƸƤ֡ - func1ˤ arg1ȤϤ, func2ˤ1˥ƥ졼 - Ϳ줿, 2arg2Ϥ롥 - - 1.9rb_iterateȤ, func1Ruby٥Υ᥽å - ƤӽФʤФʤʤ. - 1.9obsoleteȤʤä. rb_block_callѰդ줿. +<<<<<<< HEAD + func2をブロックとして設定し, func1をイテレータとして呼ぶ. + func1には arg1が引数として渡され, func2には第1引数にイテレー + タから与えられた値, 第2引数にarg2が渡される. + + 1.9でrb_iterateを使う場合は, func1の中でRubyレベルのメソッド + を呼び出さなければならない. + 1.9でobsoleteとなった. 代わりにrb_block_callが用意された. +======= + func2をブロックとして設定し, func1をイテレータとして呼ぶ. + func1には arg1が引数として渡され, func2には第1引数にイテレー + タから与えられた値, 第2引数にarg2が渡される. + + 1.9でrb_iterateを使う場合は, func1の中でRubyレベルのメソッド + を呼び出さなければならない. + 1.9でobsoleteとなった. 代わりにrb_block_callが用意された. +>>>>>>> Change encoding from EUC-JP to UTF-8. [Feature #5128] VALUE rb_yield(VALUE val) - valͤȤƥƥ졼֥åƤӽФ + valを値としてイテレータブロックを呼び出す. VALUE rb_rescue(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2) - ؿfunc1arg1˸ƤӽФfunc1μ¹㳰ȯ - ˤ func2arg2ȤƸƤ֡ͤ㳰ȯ - ʤäfunc1, 㳰ȯˤfunc2 - ͤǤ롥 + 関数func1をarg1を引数に呼び出す.func1の実行中に例外が発生 + した時には func2をarg2を引数として呼ぶ.戻り値は例外が発生 + しなかった時はfunc1の戻り値, 例外が発生した時にはfunc2の戻 + り値である. VALUE rb_ensure(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2) - ؿfunc1arg1ȤƼ¹Ԥ, ¹Խλ(Ȥ㳰 - ȯƤ) func2arg2ȤƼ¹Ԥ롥ͤfunc1 - ͤǤ(㳰ȯʤ) + 関数func1をarg1を引数として実行し, 実行終了後(たとえ例外が + 発生しても) func2をarg2を引数として実行する.戻り値はfunc1 + の戻り値である(例外が発生した時は戻らない). VALUE rb_protect(VALUE (*func) (VALUE), VALUE arg, int *state) - ؿfuncargȤƼ¹Ԥ, 㳰ȯʤФ - ֤ͤ㳰ȯ, *state0򥻥åȤ - Qnil֤ + 関数funcをargを引数として実行し, 例外が発生しなければその戻 + り値を返す.例外が発生した場合は, *stateに非0をセットして + Qnilを返す. void rb_jump_tag(int state) - rb_protect()rb_eval_string_protect()ª줿㳰 - 롥stateϤδؿ֤줿ͤǤʤФʤʤ - δؿľܤθƤӽФʤ + rb_protect()やrb_eval_string_protect()で捕捉された例外を再 + 送する.stateはそれらの関数から返された値でなければならない. + この関数は直接の呼び出し元に戻らない. -** 㳰顼 +** 例外・エラー void rb_warning(const char *fmt, ...) - rb_verboseɸ२顼Ϥ˷ٹɽ롥 - printf()Ʊ + rb_verbose時に標準エラー出力に警告情報を表示する.引数は + printf()と同じ. void rb_raise(rb_eRuntimeError, const char *fmt, ...) - RuntimeError㳰ȯ롥printf()Ʊ + RuntimeError例外を発生させる.引数はprintf()と同じ. void rb_raise(VALUE exception, const char *fmt, ...) - exceptionǻꤷ㳰ȯ롥fmtʲΰ - printf()Ʊ + exceptionで指定した例外を発生させる.fmt以下の引数は + printf()と同じ. void rb_fatal(const char *fmt, ...) - ̿Ū㳰ȯ롥̾㳰ϹԤʤ줺, 󥿡 - ץ꥿λ(ensureǻꤵ줿ɤϽλ - ¹Ԥ) + 致命的例外を発生させる.通常の例外処理は行なわれず, インター + プリタが終了する(ただしensureで指定されたコードは終了前に + 実行される). void rb_bug(const char *fmt, ...) - 󥿡ץ꥿ʤɥץΥХǤȯϤΤʤ - λƤ֡󥿡ץ꥿ϥפľ˽λ롥 - 㳰ϰڹԤʤʤ + インタープリタなどプログラムのバグでしか発生するはずのない + 状況の時呼ぶ.インタープリタはコアダンプし直ちに終了する. + 例外処理は一切行なわれない. -** Rubyν¹ +** Rubyの初期化・実行 -Ruby򥢥ץꥱˤϰʲΥ󥿥ե -Ȥ̾γĥ饤֥ˤɬפʤ +Rubyをアプリケーションに埋め込む場合には以下のインタフェース +を使う.通常の拡張ライブラリには必要ない. void ruby_init() - Ruby󥿥ץ꥿νԤʤ + Rubyインタプリタの初期化を行なう. void ruby_options(int argc, char **argv) - Ruby󥿥ץ꥿Υޥɥ饤νԤʤ + Rubyインタプリタのコマンドライン引数の処理を行なう. void ruby_run() - Ruby󥿥ץ꥿¹Ԥ롥 + Rubyインタプリタを実行する. void ruby_script(char *name) - RubyΥץ̾($0)ꤹ롥 + Rubyのスクリプト名($0)を設定する. -** 󥿥ץ꥿Υ٥ȤΥեå +** インタプリタのイベントのフック void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data) -ꤵ줿󥿥ץ꥿Υ٥ȤФեåؿɲäޤ -eventsϰʲͤorǤʤФʤޤ: +指定されたインタプリタのイベントに対するフック関数を追加します. +eventsは以下の値のorでなければなりません: RUBY_EVENT_LINE RUBY_EVENT_CLASS @@ -1401,167 +1536,173 @@ events RUBY_EVENT_RAISE RUBY_EVENT_ALL -rb_event_hook_func_tϰʲ̤Ǥ: +rb_event_hook_func_tの定義は以下の通りです: typedef void (*rb_event_hook_func_t)(rb_event_t event, VALUE data, VALUE self, ID id, VALUE klass) -rb_add_event_hook() 3 data ϡեåؿ2 -Ϥޤ1.8ǤϸߤNODEؤΥݥ󥿤Ǥ - RB_EVENT_HOOKS_HAVE_CALLBACK_DATA ⻲ȤƤ +rb_add_event_hook() の第3引数 data は,フック関数の第2引数と +して渡されます.これは1.8では現在のNODEへのポインタでした.以 +下の RB_EVENT_HOOKS_HAVE_CALLBACK_DATA も参照してください. int rb_remove_event_hook(rb_event_hook_func_t func) -ꤵ줿եåؿޤ +指定されたフック関数を削除します. -** ߴΤΥޥ +** 互換性のためのマクロ -APIθߴå뤿˰ʲΥޥǥեȤƤޤ +APIの互換性をチェックするために以下のマクロがデフォルトで定義されています. NORETURN_STYLE_NEW - NORETURN ޥؿޥȤƤ뤳Ȥ̣롥 + NORETURN マクロが関数型マクロとして定義されていることを意味する. HAVE_RB_DEFINE_ALLOC_FUNC - rb_define_alloc_func() ؿ󶡤Ƥ뤳ȡĤޤ - allocation framework Ȥ뤳Ȥ̣롥 + rb_define_alloc_func() 関数が提供されていること,つまり + allocation framework が使われることを意味する. have_func("rb_define_alloc_func", "ruby.h") - η̤Ʊ + の結果と同じ. HAVE_RB_REG_NEW_STR - String֥ȤRegexp֥Ȥ - rb_reg_new_str() ؿ󶡤Ƥ뤳Ȥ̣롥 + StringオブジェクトからRegexpオブジェクトを作る + rb_reg_new_str() 関数が提供されていることを意味する. have_func("rb_reg_new_str", "ruby.h"). - η̤Ʊ + の結果と同じ. HAVE_RB_IO_T - rb_io_t 󶡤Ƥ뤳Ȥ̣롥 + rb_io_t 型が提供されていることを意味する. USE_SYMBOL_AS_METHOD_NAME - ᥽å֤̾᥽åɡModule#methods, #singleton_methods - ʤɤSymbol֤Ȥ̣롥 + メソッド名を返すメソッド,Module#methods, #singleton_methods + などがSymbolを返すことを意味する. HAVE_RUBY_*_H - ruby.h Ƥ롥бإå󶡤Ƥ뤳 - ̣롥ȤСHAVE_RUBY_ST_H Ƥ - ñʤ st.h ǤϤʤ ruby/st.h Ѥ롥 + ruby.h で定義されている.対応するヘッダが提供されていること + を意味する.たとえば,HAVE_RUBY_ST_H が定義されている場合は + 単なる st.h ではなく ruby/st.h を使用する. RB_EVENT_HOOKS_HAVE_CALLBACK_DATA - rb_add_event_hook() եåؿϤ data 3Ȥ - 뤳Ȥ̣롥 + rb_add_event_hook() がフック関数に渡す data を第3引数として + 受け取ることを意味する. -Appendix C. extconf.rbǻȤؿ +Appendix C. extconf.rbで使える関数たち -extconf.rbǤѲǽʥѥåδؿϰ -̤Ǥ롥 +extconf.rbの中では利用可能なコンパイル条件チェックの関数は以 +下の通りである. have_macro(macro, headers) - إåեheader򥤥󥯥롼ɤƥޥmacro - Ƥ뤫ɤå롥ޥƤtrue - ֤ + ヘッダファイルheaderをインクルードしてマクロmacroが定義さ + れているかどうかチェックする.マクロが定義されている時true + を返す. have_library(lib, func) - ؿfuncƤ饤֥lib¸ߤå롥 - 饤֥꤬¸ߤtrue֤ + 関数funcを定義しているライブラリlibの存在をチェックする. + ライブラリが存在する時,trueを返す. find_library(lib, func, path...) - ؿfuncƤ饤֥lib¸ߤ -Lpath ɲ - ʤå롥饤֥꤬դätrue֤ + 関数funcを定義しているライブラリlibの存在を -Lpath を追加 + しながらチェックする.ライブラリが見付かった時,trueを返す. have_func(func, header) - إåեheader򥤥󥯥롼ɤƴؿfunc¸ߤ - å롥funcɸǤϥ󥯤ʤ饤֥ΤΤ - ˤhave_libraryǤΥ饤֥åƤ - ؿ¸ߤtrue֤ + ヘッダファイルheaderをインクルードして関数funcの存在をチェ + ックする.funcが標準ではリンクされないライブラリ内のもので + ある時には先にhave_libraryでそのライブラリをチェックしてお + く事.関数が存在する時trueを返す. have_var(var, header) - إåեheader򥤥󥯥롼ɤѿvar¸ߤ - 롥varɸǤϥ󥯤ʤ饤֥ΤΤǤ - ˤhave_libraryǤΥ饤֥åƤ - ѿ¸ߤtrue֤ + ヘッダファイルheaderをインクルードして変数varの存在をチェッ + クする.varが標準ではリンクされないライブラリ内のものであ + る時には先にhave_libraryでそのライブラリをチェックしておく + 事.変数が存在する時trueを返す. have_header(header) - إåե¸ߤå롥إåե뤬¸ߤ - true֤ + ヘッダファイルの存在をチェックする.ヘッダファイルが存在す + る時trueを返す. find_header(header, path...) - إåեheader¸ߤ -Ipath ɲäʤå - 롥إåե뤬դätrue֤ + ヘッダファイルheaderの存在を -Ipath を追加しながらチェック + する.ヘッダファイルが見付かった時,trueを返す. have_struct_member(type, member, header) - إåեheader򥤥󥯥롼ɤƷtype˥member - ¸ߤ뤫å롥typeƤơmember - Ĥtrue֤ + ヘッダファイルheaderをインクルードして型typeにメンバmember + が存在するかをチェックする.typeが定義されていて,memberを + 持つする時trueを返す. have_type(type, header, opt) - إåեheader򥤥󥯥롼ɤƷtype¸ߤ뤫 - å롥typeƤtrue֤ + ヘッダファイルheaderをインクルードして型typeが存在するかを + チェックする.typeが定義されている時trueを返す. check_sizeof(type, header) - إåեheader򥤥󥯥롼ɤƷtypecharñ̥ - Ĵ٤롥typeƤΥ֤ - ƤʤȤnil֤ + ヘッダファイルheaderをインクルードして型typeのchar単位サイ + ズを調べる.typeが定義されている時そのサイズを返す.定義さ + れていないときはnilを返す. create_makefile(target) - ĥ饤֥ѤMakefile롥δؿƤФʤ - ФΥ饤֥ϥѥ뤵ʤtargetϥ⥸塼̾ - ɽ + 拡張ライブラリ用のMakefileを生成する.この関数を呼ばなけれ + ばそのライブラリはコンパイルされない.targetはモジュール名 + を表す. find_executable(command, path) - ޥcommandFile::PATH_SEPARATORǶڤ줿ѥ̾ - ꥹpathõpathnilޤϾά줿ϡĶ - ѿPATHͤѤ롥¹ԲǽʥޥɤĤä - ϥѥޤե̾Ĥʤänil֤ + コマンドcommandをFile::PATH_SEPARATORで区切られたパス名の + リストpathから探す.pathがnilまたは省略された場合は,環境 + 変数PATHの値を使用する.実行可能なコマンドが見つかった場合 + はパスを含むファイル名,見つからなかった場合はnilを返す. with_config(withval[, default=nil]) - ޥɥ饤--with-ǻꤵ줿ץ - 롥 + コマンドライン上の--with-で指定されたオプション値 + を得る. enable_config(config, *defaults) disable_config(config, *defaults) - ޥɥ饤--enable-ޤ - --disable-ǻꤵ줿ͤ롥 - --enable-ꤵƤtrue - --disable-ꤵƤfalse֤ - ɤꤵƤʤϡ֥åĤǸƤӽФ - *defaultsyield̡֥åʤʤ - *defaults֤ + コマンドライン上の--enable-または + --disable-で指定された真偽値を得る. + --enable-が指定されていた場合はtrue, + --disable-が指定されていた場合はfalseを返す. + どちらも指定されていない場合は,ブロックつきで呼び出されて + いる場合は*defaultsをyieldした結果,ブロックなしなら + *defaultsを返す. dir_config(target[, default_dir]) dir_config(target[, default_include, default_lib]) - ޥɥ饤--with--dir, --with--include, - --with--libΤ줫ǻꤵǥ쥯ȥ - $CFLAGS $LDFLAGS ɲä롥--with--dir=/path + コマンドライン上の--with--dir, --with--include, + --with--libのいずれかで指定されるディレクトリを + $CFLAGS や $LDFLAGS に追加する.--with--dir=/pathは --with--include=/path/include --with--lib=/path/lib - Ǥ롥ɲä줿 include ǥ쥯ȥ lib ǥ - ȥ֤ ([include_dir, lib_dir]) + と等価である.追加された include ディレクトリと lib ディレ + クトリの配列を返す. ([include_dir, lib_dir]) pkg_config(pkg) - pkg-configޥɤѥåpkgξ롥 - pkg-configμºݤΥޥ̾ϡ--with-pkg-configޥ - 饤󥪥ץǻǽ +<<<<<<< HEAD + pkg-configコマンドからパッケージpkgの情報を得る. + pkg-configの実際のコマンド名は,--with-pkg-configコマンド + ラインオプションで指定可能. +======= + pkg-configコマンドからパッケージpkgの情報を得る. + pkg-configの実際のコマンド名は,--with-pkg-configコマンド + ラインオプションで指定可能. +>>>>>>> Change encoding from EUC-JP to UTF-8. [Feature #5128] /* * Local variables: diff --git a/README.ja b/README.ja index 1f6ac6c062..a4a0213a49 100644 --- a/README.ja +++ b/README.ja @@ -1,123 +1,137 @@ -* RubyȤ - -Rubyϥץ뤫ĶϤʥ֥ȻظץȸǤ -RubyϺǽ餫ʥ֥ȻظȤ߷פƤ -顤֥Ȼظץߥ󥰤ڤ˹Ԥ -̾μ³Υץߥ󥰤ǽǤ - -RubyϥƥȽطǽϤʤɤͥ졤PerlƱ餤 -Ǥ˥ץʸˡȡ㳰䥤ƥ졼ʤɤε -ˤäơʬ䤹ץߥ󥰤ޤ - - -* RubyĹ - - + ץʸˡ - + ̤Υ֥Ȼظǽ(饹᥽åɥʤ) - + üʥ֥Ȼظǽ(Mixin, ðۥ᥽åɤʤ) - + 黻ҥС - + 㳰ǽ - + ƥ졼ȥ - + ١쥯 - + ʥߥåǥ (ƥˤ) - + ܿ⤤¿Unix-like/POSIXߴץåȥե - ưǤʤWindows Mac OS XBeOSʤɤξǤư +* Rubyとは + +Rubyはシンプルかつ強力なオブジェクト指向スクリプト言語です. +Rubyは最初から純粋なオブジェクト指向言語として設計されていま +すから,オブジェクト指向プログラミングを手軽に行う事が出来ま +す.もちろん通常の手続き型のプログラミングも可能です. + +Rubyはテキスト処理関係の能力などに優れ,Perlと同じくらい強力 +です.さらにシンプルな文法と,例外処理やイテレータなどの機構 +によって,より分かりやすいプログラミングが出来ます. + + +* Rubyの特長 + + + シンプルな文法 + + 普通のオブジェクト指向機能(クラス,メソッドコールなど) + + 特殊なオブジェクト指向機能(Mixin, 特異メソッドなど) + + 演算子オーバーロード + + 例外処理機能 + + イテレータとクロージャ + + ガーベージコレクタ + + ダイナミックローディング (アーキテクチャによる) + + 移植性が高い.多くのUnix-like/POSIX互換プラットフォーム上で + 動くだけでなく,Windows, Mac OS X,BeOSなどの上でも動く cf. http://redmine.ruby-lang.org/wiki/ruby-19/SupportedPlatformsJa -* ˡ +* 入手法 -** FTP +** FTPで -ʲξˤƤޤ +以下の場所においてあります. ftp://ftp.ruby-lang.org/pub/ruby/ -** Subversion +** Subversionで -ȯüΥɤϼΥޥɤǼǤޤ +開発先端のソースコードは次のコマンドで取得できます. $ svn co http://svn.ruby-lang.org/repos/ruby/trunk/ ruby -¾˳ȯΥ֥ΰϼΥޥɤǸޤ +他に開発中のブランチの一覧は次のコマンドで見られます. $ svn ls http://svn.ruby-lang.org/repos/ruby/branches/ -* ۡڡ +* ホームページ -RubyΥۡڡURL +RubyのホームページのURLは http://www.ruby-lang.org/ -Ǥ +です. -* ᡼󥰥ꥹ +* メーリングリスト -RubyΥ᡼󥰥ꥹȤޤô˾ +Rubyのメーリングリストがあります。参加希望の方は ruby-list-ctl@ruby-lang.org -ޤʸ +まで本文に subscribe YourFirstName YourFamilyName +<<<<<<< HEAD -Ƚ񤤤äƲ +と書いて送って下さい。 +======= + +と書いて送って下さい。 +>>>>>>> Change encoding from EUC-JP to UTF-8. [Feature #5128] -RubyȯԸ᡼󥰥ꥹȤ⤢ޤǤrubyΥ -λͳĥʤɼˤĤƵƤޤ -ô˾ +Ruby開発者向けメーリングリストもあります。こちらではrubyのバ +グ、将来の仕様拡張など実装上の問題について議論されています。 +参加希望の方は ruby-dev-ctl@ruby-lang.org -ޤruby-listƱͤˡǥ᡼뤷Ƥ +<<<<<<< HEAD +までruby-listと同様の方法でメールしてください。 -Rubyĥ⥸塼ˤĤä礦ruby-ext᡼󥰥ꥹȤ -شطˤĤä礦ruby-math᡼󥰥ꥹȤ -Ѹä礦ruby-talk᡼󥰥ꥹȤ⤢ޤˡ -ϤɤƱǤ +Ruby拡張モジュールについて話し合うruby-extメーリングリストと +数学関係の話題について話し合うruby-mathメーリングリストと +英語で話し合うruby-talkメーリングリストもあります。参加方法 +はどれも同じです。 +======= +までruby-listと同様の方法でメールしてください。 +Ruby拡張モジュールについて話し合うruby-extメーリングリストと +数学関係の話題について話し合うruby-mathメーリングリストと +英語で話し合うruby-talkメーリングリストもあります。参加方法 +はどれも同じです。 +>>>>>>> Change encoding from EUC-JP to UTF-8. [Feature #5128] -* ѥ롦󥹥ȡ -ʲμǹԤäƤ +* コンパイル・インストール - 1. ⤷configureե뤬Ĥʤ⤷ - configure.inŤ褦ʤ顢autoconf¹Ԥ - configure +以下の手順で行ってください. - 2. configure¹ԤMakefileʤɤ + 1. もしconfigureファイルが見つからない、もしくは + configure.inより古いようなら、autoconfを実行して + 新しくconfigureを生成する - ĶˤäƤϥǥեȤCѥѥץդ - ޤconfigureץ optflags=.. warnflags=.. - Ǿ񤭤Ǥޤ + 2. configureを実行してMakefileなどを生成する - 3. (ɬפʤ)defines.hԽ + 環境によってはデフォルトのCコンパイラ用オプションが付き + ます.configureオプションで optflags=.. warnflags=.. 等 + で上書きできます. - ¿ʬɬ̵Ȼפޤ + 3. (必要ならば)defines.hを編集する - 4. (ɬפʤ)ext/SetupŪ˥󥯤ĥ⥸塼 - ꤹ + 多分,必要無いと思います. - ext/Setup˵Ҥ⥸塼Ū˥󥯤ޤ + 4. (必要ならば)ext/Setupに静的にリンクする拡張モジュールを + 指定する - ʥߥåǥ󥰤򥵥ݡȤƤʤƥ - ǤSetup1ܤΡoption nodynamicפȤԤΥ - Ȥ򳰤ɬפޤޤΥƥ - ĥ⥸塼Ѥ뤿ˤϡ餫Ū˥ - Ƥɬפޤ + ext/Setupに記述したモジュールは静的にリンクされます. - 5. make¹Ԥƥѥ뤹 + ダイナミックローディングをサポートしていないアーキテク + チャではSetupの1行目の「option nodynamic」という行のコ + メントを外す必要があります.また,このアーキテクチャで + 拡張モジュールを利用するためには,あらかじめ静的にリン + クしておく必要があります. - 6. make testǥƥȤԤ + 5. makeを実行してコンパイルする - test succeededפɽǤƥ - ƤⴰݾڤƤǤϤޤ + 6. make testでテストを行う. + + 「test succeeded」と表示されれば成功です.ただしテスト + に成功しても完璧だと保証されている訳ではありません. 7. make install - ʲΥǥ쥯ȥäơ˥ե򥤥󥹥ȡ - 뤷ޤ + 以下のディレクトリを作って,そこにファイルをインストー + ルします. * ${DESTDIR}${prefix}/bin * ${DESTDIR}${prefix}/include/ruby-${MAJOR}.${MINOR}.${TEENY} @@ -136,48 +150,48 @@ Ruby * ${DESTDIR}${prefix}/share/man/man1 * ${DESTDIR}${prefix}/share/ri/${MAJOR}.${MINOR}.${TEENY}/system - RubyAPIС`x.y.z'ǤС((|${MAJOR}|)) - `x'ǡ((|${MINOR}|))`y'((|${TEENY}|))`z'Ǥ + RubyのAPIバージョンが`x.y.z'であれば,((|${MAJOR}|))は + `x'で,((|${MINOR}|))は`y',((|${TEENY}|))は`z'です. - : APIСteenyϡRubyץΥС - Ȥϰۤʤ뤳Ȥޤ + 注意: APIバージョンのteenyは,Rubyプログラムのバージョ + ンとは異なることがあります. - rootǺȤɬפ뤫⤷ޤ + rootで作業する必要があるかもしれません. -⤷ѥ˥顼ȯˤϥ顼Υȥ -OSμޤǤܤݡȤԤäƤ -¾Τˤʤޤ +もし,コンパイル時にエラーが発生した場合にはエラーのログとマ +シン,OSの種類を含むできるだけ詳しいレポートを作者に送ってく +ださると他の方のためにもなります. -* ܿ +* 移植 -UNIXǤconfigureۤȤɤκۤۼƤϤ -פ̸Ȥä(˰㤤ʤ)Ԥˤ -ȤݡȤСǤ뤫Τޤ +UNIXであればconfigureがほとんどの差異を吸収してくれるはずで +すが,思わぬ見落としがあった場合(あるに違いない),作者にその +ことをレポートすれば,解決できるかも知れません. -ƥˤäȤ¸ΤGCǤRubyGCо -Υƥ㤬setjmp()ޤgetcontext()ˤäƤΥ -jmp_bufucontext_t˳Ǽ뤳Ȥȡjmp_buf -ucontext_tȥå32bit饤ȤƤ뤳Ȥ -ƤޤäԤΩʤб˺Ǥ -ԤβŪñǡgc.cǥåޡƤ -ʬ˥饤ȤΥХȿ餷ƥޡ륳ɤ -ɲäǺѤߤޤdefined(__mc68000__)פdzƤ -ʬ򻲹ͤˤƤ +アーキテクチャにもっとも依存するのはGC部です.RubyのGCは対象 +のアーキテクチャがsetjmp()またはgetcontext()によって全てのレ +ジスタをjmp_bufやucontext_tに格納することと,jmp_bufや +ucontext_tとスタックが32bitアラインメントされていることを仮定 +しています.特に前者が成立しない場合の対応は非常に困難でしょ +う.後者の解決は比較的簡単で,gc.cでスタックをマークしている +部分にアラインメントのバイト数だけずらしてマークするコードを +追加するだけで済みます.「defined(__mc68000__)」で括られてい +る部分を参考にしてください. -쥸ɥCPUǤϡ쥸ɥ򥹥 -˥եå夹륢֥饳ɤɲäɬפ뤫 -ޤ +レジスタウィンドウを持つCPUでは,レジスタウィンドウをスタッ +クにフラッシュするアセンブラコードを追加する必要があるかも知 +れません. -* ۾ +* 配布条件 -COPYING.jaե򻲾ȤƤ +COPYING.jaファイルを参照してください。 -* +* 著者 -ȡХݡȤ¾ matz@netlab.jp ޤǡ +コメント,バグレポートその他は matz@netlab.jp まで. ------------------------------------------------------- created at: Thu Aug 3 11:57:36 JST 1995 Local variables: diff --git a/doc/etc.rd.ja b/doc/etc.rd.ja index 39a1efbff1..b36e05c994 100644 --- a/doc/etc.rd.ja +++ b/doc/etc.rd.ja @@ -1,75 +1,75 @@ # etc.rd.ja - -*- mode: rd; coding: euc-jp; -*- created at: Fri Jul 14 00:47:15 JST 1995 =begin -= Etc(⥸塼) += Etc(モジュール) -¹ԤƤOSξ뤿Υ⥸塼롥饹˥󥯥롼 -ƻȤȤǤ롥 +実行しているOSからの情報を得るためのモジュール.クラスにインクルード +して使うこともできる. == Module Function --- getlogin - ʬlogin֤̾줬Ԥgetpwuid()Ѥ - ɤ + 自分のlogin名を返す.これが失敗した場合はgetpwuid()を用いると + 良い. --- getpwnam(name) - /etc/passwdե(뤤DBMեNISǡ١) - name̾passwdȥ֤ͤpasswd¤ - ΤǰʲΥФġ + /etc/passwdファイル(あるいはDBMファイルやNISデータベース)を検 + 索し,nameの名前を持つpasswdエントリを返す.戻り値はpasswd構造 + 体で以下のメンバを持つ. struct passwd - name # 桼̾(ʸ) - passwd # ѥ(ʸ) - uid # 桼ID() - gid # 롼ID() - gecos # gecosե(ʸ) - dir # ۡǥ쥯ȥ(ʸ) - shell # 󥷥(ʸ) - # ʹߤΥФϥƥˤäƤ󶡤ʤ - change # ѥѹ() - quota # () - age # () - class # 桼饹(ʸ) - comment # (ʸ) - expire # ͭ() + name # ユーザ名(文字列) + passwd # パスワード(文字列) + uid # ユーザID(整数) + gid # グループID(整数) + gecos # gecosフィールド(文字列) + dir # ホームディレクトリ(文字列) + shell # ログインシェル(文字列) + # 以降のメンバはシステムによっては提供されない. + change # パスワード変更時間(整数) + quota # クォータ(整数) + age # エージ(整数) + class # ユーザアクセスクラス(文字列) + comment # コメント(文字列) + expire # アカウント有効期限(整数) end - ܺ٤getpwnam(3)򻲾ȤΤȡ + 詳細はgetpwnam(3)を参照のこと. --- getpwuid([uid]) - uid桼IDȤpasswdȥ֤ͤgetpwnam() - ƱͤǤ롥άˤgetuid()ͤѤ롥ܺ٤ - getpwuid(3)򻲾ȤΤȡ + uidをユーザIDとするpasswdエントリを返す.戻り値はgetpwnam()と + 同様である.引数を省略した場合にはgetuid()の値を用いる.詳細は + getpwuid(3)を参照のこと. --- getgrgid(gid) - /etc/groupե(뤤ϡgetpwnam)򸡺gid򥰥롼 - IDȤ륰롼ץȥ֤ͤgroup¤Τǰʲ - Фġ + /etc/groupファイル(あるいは…getpwnam参照)を検索し,gidをグルー + プIDとするグループエントリを返す.戻り値はgroup構造体で以下の + メンバを持つ. struct group - name # 롼̾(ʸ) - passwd # 롼פΥѥ(ʸ) - gid # 롼ID() - mem # 롼ץ̾ + name # グループ名(文字列) + passwd # グループのパスワード(文字列) + gid # グループID(整数) + mem # グループメンバ名の配列 end - ܺ٤getgrgid(3)򻲾ȤΤȡ + 詳細はgetgrgid(3)を参照のこと. --- getgrnam(name) - nameȤ̾Υ롼ץȥ֤ͤgetgrgid()Ʊ - ͤǤ롥ܺ٤getgrnam(3)򻲾ȡ + nameという名前のグループエントリを返す.戻り値はgetgrgid()と同 + 様である.詳細はgetgrnam(3)を参照. --- group - ƤΥ롼ץȥ˥뤿Υƥ졼 + 全てのグループエントリを順にアクセスするためのイテレータ. --- passwd - Ƥpasswdȥ˥뤿Υƥ졼 + 全てのpasswdエントリを順にアクセスするためのイテレータ. =end diff --git a/doc/forwardable.rd.ja b/doc/forwardable.rd.ja index 48186b111f..6a5ff2e236 100644 --- a/doc/forwardable.rd.ja +++ b/doc/forwardable.rd.ja @@ -5,11 +5,11 @@ =begin = Forwardable -饹Ф᥽åɤΰѾǽޤ. +クラスに対しメソッドの委譲機能を定義します. -== Ȥ +== 使い方 -饹ФextendƻȤޤ. +クラスに対してextendして使います. class Foo extend Forwardable @@ -23,58 +23,58 @@ f.gets f.content_at(1) -== ᥽å +== メソッド --- Forwardable#def_instance_delegators(accessor, *methods) - ((|methods|))Ϥ줿᥽åɤΥꥹȤ((|accessor|))Ѿ - 褦ˤޤ. + ((|methods|))で渡されたメソッドのリストを((|accessorに|))委譲する + ようにします. --- Forwardable#def_instance_delegator(accessor, method, ali = method) - ((||method|))Ϥ줿᥽åɤ((|accessor|))˰Ѿ褦ˤ - ޤ. ((|ali|))ȤϤ줿Ȥ, ᥽å((|ali|))Ƥ - 줿Ȥˤ, ((|accessor|))Ф((|method|))ƤӽФޤ. + ((||method|))で渡されたメソッドを((|accessor|))に委譲するようにし + ます. ((|ali|))が引数として渡されたときは, メソッド((|ali|))が呼ば + れたときには, ((|accessor|))に対し((|method|))を呼び出します. --- Forwardable#def_delegators(accessor, *methods) - ((|Forwardable#def_instance_delegators|))̾Ǥ. + ((|Forwardable#def_instance_delegators|))の別名です. --- Forwardable#def_delegator(accessor, method, ali = method) - ((|Forwardable#def_instance_delegator|))̾Ǥ. + ((|Forwardable#def_instance_delegator|))の別名です. = SingleForwardable -֥ȤФ, ᥽åɤΰѾǽޤ. +オブジェクトに対し, メソッドの委譲機能を定義します. -== Ȥ +== 使い方 -֥ȤФ((|extend|))ƻȤޤ. +オブジェクトに対して((|extend|))して使います. g = Goo.new g.extend SingleForwardable g.def_delegator("@out", :puts) g.puts ... -== ᥽å +== メソッド --- SingleForwardable#def_singleton_delegators(accessor, *methods) - ((|methods|))Ϥ줿᥽åɤΥꥹȤ((|accessor|))˰Ѿ - 褦ˤޤ. + ((|methods|))で渡されたメソッドのリストを((|accessor|))に委譲する + ようにします. --- SingleForwardable#def_singleton_delegator(accessor, method, ali = method) - ((|method|))Ϥ줿᥽åɤ((|accessor|))˰Ѿ褦ˤ - . ((|ali|))ȤϤ줿Ȥ, ᥽å((|ali|))ƤФ - Ȥˤ, ((|accessor|))Ф((|method|))ƤӽФޤ. + ((|method|))で渡されたメソッドを((|accessor|))に委譲するようにしま + す. ((|ali|))が引数として渡されたときは, メソッド((|ali|))が呼ばれ + たときには, ((|accessor|))に対し((|method|))を呼び出します. --- SingleForwardable#def_delegators(accessor, *methods) - ((|SingleForwardable#def_singleton_delegators|))̾Ǥ. + ((|SingleForwardable#def_singleton_delegators|))の別名です. --- SingleForwardable#def_delegator(accessor, method, ali = method) - ((|SingleForwardable#def_singleton_delegator|))̾Ǥ. + ((|SingleForwardable#def_singleton_delegator|))の別名です. =end diff --git a/doc/irb/irb-tools.rd.ja b/doc/irb/irb-tools.rd.ja index 7711f96e08..3c95faeb8a 100644 --- a/doc/irb/irb-tools.rd.ja +++ b/doc/irb/irb-tools.rd.ja @@ -1,70 +1,70 @@ -irbϢޤޥɤȥ饤֥ +irb関連おまけコマンドとライブラリ $Release Version: 0.7.1 $ $Revision$ by Keiju ISHITSUKA(Nihon Rational Co.,Ltd.) =begin -:ޥ: +:コマンド: * rtags -- ruby tags command -:ؿ饤֥: +:関数ライブラリ: * xmp -- irb version of gotoken xmp-function -:饹饤֥: +:クラスライブラリ: * frame.rb -- frame tracer * completion.rb -- irb completor = rtags -rtagsemacsڤviѤ, TAGեĤ륳ޥɤǤ. +rtagsはemacs及びvi用の, TAGファイルをつくるコマンドです. -== Ȥ +== 使い方 rtags [-vi] file.... -ȥǥ쥯ȥemacsѤTAGSե뤬Ǥޤ. -viץ -ĤˤviѤtagsեޤ. +カレントディレクトリにemacs用のTAGSファイルができます. -viオプションを +つけた時にはvi用のtagsファイルを作成します. -emacsξ, ̾etags.elΤޤ޻Ȥޤ. ǽʤΤ, +emacsの場合, 通常のetags.elがそのまま使えます. 検索可能なのは, -* 饹 -* ᥽å -* ðۥ᥽å +* クラス +* メソッド +* 特異メソッド * alias -* attr줿(ѥ᡼ܥ뤫ʸƥ˸¤) -* attr_XXX줿(ѥ᡼ܥ뤫ʸƥ˸¤) +* attrで宣言されたアクセサ(パラメータがシンボルか文字列リテラルに限る) +* attr_XXXで宣言されたアクセサ(パラメータがシンボルか文字列リテラルに限る) -Ǥ. +です. -CʤɤǻȤäƤΤȰ㤦Τ, ץ꡼˴ؤʬ, +Cなどで使っているのと違うのは, コンプリーションに関する部分で, -ؿ̾, +関数名は, - ؿ̾( + 関数名( -饹, +クラスは, - ::饹̾::....::饹̾ + ::クラス名::....::クラス名 -᥽åɤ, +メソッドは, - ::饹̾::....::饹̾#᥽å̾ + ::クラス名::....::クラス名#メソッド名 -ðۥ᥽å(饹᥽å) +特異メソッド(クラスメソッド)は - ::饹̾::....::饹̾.᥽å̾ + ::クラス名::....::クラス名.メソッド名 -ǥץ꡼ԤʤȤǤ. +でコンプリーションを行なうところです. = xmp.rb -Ȥxmpξ̸ߴСǤ. , ˽ŤΤǤȤxmp -бǤʤ, ѤɤǤ礦. +ごとけんxmpの上位互換バージョンです. ただ, 非常に重いのでごとけんxmpで +は対応できない時に, 使用すると良いでしょう. -== Ȥ +== 使い方 -=== ؿȤƻȤ. +=== 関数として使う. require "irb/xmp" xmp <1 -=== XMP󥹥󥹤Ѥ. +=== XMPインスタンスを用いる. -ξ, XMPƥȾĤΤ, ѿͤʤɤݻƤ -ޤ. +この場合は, XMPがコンテキスト情報を持つので, 変数の値などを保持してい +ます. require "irb/xmp" xmp = XMP.new @@ -99,50 +99,50 @@ C foo ==>1 -== ƥȤ˴ؤ +== コンテキストに関して -XMP᥽åɷΥƥȤ, ƤӽФΥƥȤɾޤ. -Ū˥ƥȤꤹȤΥƥȤɾޤ. +XMPメソッド群のコンテキストは, 呼び出す前のコンテキストで評価されます. +明示的にコンテキストを指定するとそのコンテキストで評価します. -: +例: xmp "foo", an_binding -:: -ޥåɤˤбƤޤ. +:注: +マルチスレッドには対応していません. = frame.rb -߼¹Υե졼갷Υ饹Ǥ. +現在実行中のフレーム情報を取り扱うためのクラスです. * IRB::Frame.top(n = 0) - 夫nܤΥƥȤФޤ. n0Ǿ̤ˤʤޤ. + 上からn番目のコンテキストを取り出します. nは0が最上位になります. * IRB::Frame.bottom(n = 0) - nܤΥƥȤФޤ. n0Dz̤ˤʤޤ. + 下からn番目のコンテキストを取り出します. nは0が最下位になります. * IRB::Frame.sender - ˤʤäƤ륪֥ȤФޤ. Ȥ, Υ᥽ - ɤƤӽФ¦selfΤȤǤ. + センダになっているオブジェクトを取り出します. センダとは, そのメソッ + ドを呼び出した側のselfのことです. -:: -set_trace_funcѤRubyμ¹Ԥȥ졼Ƥޤ. ޥåɤ -бƤޤ. +:注: +set_trace_funcを用いてRubyの実行をトレースしています. マルチスレッドに +は対応していません. = completion.rb -irbcompletionǽ󶡤ΤǤ. +irbのcompletion機能を提供するものです. -== Ȥ +== 使い方 % irb -r irb/completion -Ȥ뤫, ~/.irbrc +とするか, ~/.irbrc 中に require "irb/completion" -Ƥ. irb¹ require "irb/completion" Ƥ褤Ǥ. +を入れてください. irb実行中に require "irb/completion" してもよいです. -irb¹ (TAB) 򲡤ȥץ졼󤷤ޤ. +irb実行中に (TAB) を押すとコンプレーションします. -ȥåץ٥(TAB)򲡤Ȥ٤Ƥιʸ, 饹, ᥽åɤθ䤬 -ޤ. 䤬ͣʤд䴰ޤ. +トップレベルで(TAB)を押すとすべての構文要素, クラス, メソッドの候補がで +ます. 候補が唯一ならば完全に補完します. irb(main):001:0> in in inspect instance_eval @@ -153,8 +153,8 @@ irb irb(main):002:0> foo = Object.new # - ((|ѿ̾.|))θ(TAB)򲡤, Υ֥ȤΥ᥽åɰǤ - . + ((|変数名.|))の後に(TAB)を押すと, そのオブジェクトのメソッド一覧がでま + す. irb(main):003:0> foo. foo.== foo.frozen? foo.protected_methods diff --git a/doc/irb/irb.rd.ja b/doc/irb/irb.rd.ja index 6e3abd7b3c..6c213a178c 100644 --- a/doc/irb/irb.rd.ja +++ b/doc/irb/irb.rd.ja @@ -3,23 +3,23 @@ irb -- interactive ruby $Revision$ by Keiju ISHITSUKA(keiju@ruby-lang.org) =begin -= irbȤ? += irbとは? -irbinteractive rubyάǤ. rubyμɸϤñ/¹Ԥ -ΥġǤ. +irbはinteractive rubyの略です. rubyの式を標準入力から簡単に入力/実行する +ためのツールです. -= ư += 起動 % irb -ǹԤʤޤ. +で行ないます. -= Ȥ += 使い方 -irbλȤ, RubyΤäƤФäƴñǤ. Ūˤ irb -ޥɤ¹ԤǤ. irb¹Ԥ, ʲΤ褦ʥץ -ȤɽƤޤ. , rubyμƲ. 뤷Ǽ¹ -ޤ. +irbの使い方は, Rubyさえ知っていればいたって簡単です. 基本的には irb と +いうコマンドを実行するだけです. irbを実行すると, 以下のようなプロンプ +トが表れてきます. 後は, rubyの式を入れて下さい. 式が完結した時点で実行 +されます. dim% irb irb(main):001:0> 1+2 @@ -32,55 +32,55 @@ irb nil irb(main):007:0> -ޤ, irbReadline⥸塼ˤбƤޤ. Readline⥸塼뤬 -󥹥ȡ뤵Ƥˤ, ȤΤɸưˤʤޤ. +また, irbはReadlineモジュールにも対応しています. Readlineモジュールが +インストールされている時には, それを使うのが標準の動作になります. -= ޥɥץ += コマンドオプション irb.rb [options] file_name opts options: - -f ~/.irbrc ɤ߹ޤʤ. - -m bc⡼(ʬ, η׻Ǥ) - -d $DEBUG trueˤ(ruby -d Ʊ) - -Kc ruby -KcƱ - -r load-module ruby -r Ʊ. - --verbose 줫¹ԤԤɽ(ǥե) - --noverbose 줫¹ԤԤɽʤ - --echo ¹Է̤ɽ(ǥե) - --noecho ¹Է̤ɽʤ - --inspect ̽ϤinspectѤ(bc⡼ɰʳϥǥե). - --noinspect ̽ϤinspectѤʤ. - --readline readline饤֥Ѥ. - --noreadline readline饤֥Ѥʤ. ǥեȤư, - inf-ruby-modeʳreadline饤֥Ѥ褦 - Ȥ. + -f ~/.irbrc を読み込まない. + -m bcモード(分数, 行列の計算ができる) + -d $DEBUG をtrueにする(ruby -d と同じ) + -Kc ruby -Kcと同じ + -r load-module ruby -r と同じ. + --verbose これから実行する行を表示する(デフォルト) + --noverbose これから実行する行を表示しない + --echo 実行結果を表示する(デフォルト) + --noecho 実行結果を表示しない + --inspect 結果出力にinspectを用いる(bcモード以外はデフォルト). + --noinspect 結果出力にinspectを用いない. + --readline readlineライブラリを利用する. + --noreadline readlineライブラリを利用しない. デフォルトの動作は, + inf-ruby-mode以外でreadlineライブラリを利用しよう + とする. --prompt prompt-mode --prompt-mode prompt-mode - ץץȥ⡼ɤؤޤ. Ƥ - ץȥ⡼ɤ, default, simple, xmp, inf-ruby - ѰդƤޤ. ǥեȤdefaultץץȥ⡼ - ɤˤʤäƤޤ. + プロンプトモードを切替えます. 現在定義されているプ + ロンプトモードは, default, simple, xmp, inf-rubyが + 用意されています. デフォルトはdefaultプロンプトモー + ドになっています. - --inf-ruby-mode emacsinf-ruby-modeѤΥץץɽԤʤ. - ˻꤬ʤ¤, readline饤֥ϻȤʤʤ. + --inf-ruby-mode emacsのinf-ruby-mode用のプロンプト表示を行なう. 特 + に指定がない限り, readlineライブラリは使わなくなる. --simple-prompt - ˥ץʥץץȤѤ⡼ɤǤ. - --noprompt ץץɽԤʤʤ. - --tracer ޥɼ¹Ի˥ȥ졼Ԥʤ. + 非常にシンプルなプロンプトを用いるモードです. + --noprompt プロンプト表示を行なわない. + --tracer コマンド実行時にトレースを行なう. --back-trace-limit n - Хåȥ졼ɽХåȥ졼Ƭ n, - nԤʤ. ǥեȤ16 - --irb_debug n irbΥǥХåǥХå٥nꤹ(Ѥ - ̵Ǥ礦). - -v, --version irbΥСɽ + バックトレース表示をバックトレースの頭から n, 後ろ + からnだけ行なう. デフォルトは16 + --irb_debug n irbのデバッグデバッグレベルをnに設定する(利用しな + い方が無難でしょう). + -v, --version irbのバージョンを表示する -= ե졼 += コンフィギュレーション -irbư``~/.irbrc''ɤ߹ߤޤ. ⤷¸ߤʤ, -``.irbrc'', ``irb.rc'', ``_irbrc'', ``$irbrc''νloadߤޤ. +irb起動時に``~/.irbrc''を読み込みます. もし存在しない場合は, +``.irbrc'', ``irb.rc'', ``_irbrc'', ``$irbrc''の順にloadを試みます. -ץꤹ, ʲΥޥɤǤǥեȤư -Ǥޤ. +オプションを設定する代わりに, 以下のコマンドでもデフォルトの動作を設定 +できます. IRB.conf[:IRB_NAME]="irb" IRB.conf[:MATH_MODE]=false @@ -101,43 +101,43 @@ irb IRB.conf[:DEBUG_LEVEL]=0 IRB.conf[:VERBOSE]=true -== ץץȤ +== プロンプトの設定 -ץץȤ򥫥ޥˤ, +プロンプトをカスタマイズしたい時には, IRB.conf[:PROMPT] -Ѥޤ. 㤨, .irbrcDzΤ褦ʼ򵭽Ҥޤ: +を用います. 例えば, .irbrcの中で下のような式を記述します: - IRB.conf[:PROMPT][:MY_PROMPT] = { # ץץȥ⡼ɤ̾ - :PROMPT_I => nil, # ̾Υץץ - :PROMPT_N => nil, # ³ԤΥץץ - :PROMPT_S => nil, # ʸʤɤη³ԤΥץץ - :PROMPT_C => nil, # ³ƤΥץץ - :RETURN => " ==>%s\n" # ꥿Υץץ + IRB.conf[:PROMPT][:MY_PROMPT] = { # プロンプトモードの名前 + :PROMPT_I => nil, # 通常のプロンプト + :PROMPT_N => nil, # 継続行のプロンプト + :PROMPT_S => nil, # 文字列などの継続行のプロンプト + :PROMPT_C => nil, # 式が継続している時のプロンプト + :RETURN => " ==>%s\n" # リターン時のプロンプト } -ץץȥ⡼ɤꤷˤ, +プロンプトモードを指定したい時には, irb --prompt my-prompt -ǤΥץץȥ⡼ɤǵưޤ. ޤ, .irbrc˲򵭽ҤƤ -OKǤ. +でそのプロンプトモードで起動されます. または, .irbrcに下式を記述しても +OKです. IRB.conf[:PROMPT_MODE] = :MY_PROMPT -PROMPT_I, PROMPT_N, PROMPT_S, PROMPT_C, եޥåȤꤷޤ. +PROMPT_I, PROMPT_N, PROMPT_S, PROMPT_Cは, フォーマットを指定します. - %N ưƤ륳ޥ̾Ϥ. - %m main֥(self)to_sǽϤ. - %M main֥(self)inspectƽϤ. - %l ʸΥפɽ(", ', /, ], `]'%wλ) - %NNi ǥȤΥ٥ɽ. NNϿprintf%NNdƱ. - άǽ - %NNn ֹɽޤ. + %N 起動しているコマンド名が出力される. + %m mainオブジェクト(self)がto_sで出力される. + %M mainオブジェクト(self)がinspectされて出力される. + %l 文字列中のタイプを表す(", ', /, ], `]'は%wの中の時) + %NNi インデントのレベルを表す. NNは数字が入りprintfの%NNdと同じ. 省 + 略可能 + %NNn 行番号を表します. %% % -㤨, ǥեȤΥץץȥ⡼ɤ: +例えば, デフォルトのプロンプトモードは: IRB.conf[:PROMPT_MODE][:DEFAULT] = { :PROMPT_I => "%N(%m):%03n:%i> ", @@ -147,175 +147,175 @@ PROMPT_I, PROMPT_N, PROMPT_S, PROMPT_C :RETURN => "%s\n" } -ȤʤäƤޤ. +となっています. -RETURN, ߤΤȤprintfǤ. ͤѤ뤫Τޤ. +RETURNは, 現在のところprintf形式です. 将来仕様が変わるかも知れません. -== irb +== サブirbの設定 -ޥɥ饤󥪥ץ󤪤IRB.conf()irbưΥǥեȤ -Τ, `5. ޥ'ˤconfǸ̤()irb꤬ -褦ˤʤäƤޤ. +コマンドラインオプションおよびIRB.confは(サブ)irb起動時のデフォルトの +設定を決めるもので, `5. コマンド'にあるconfで個別の(サブ)irbの設定がで +きるようになっています. -IRB.conf[:IRB_RC]procꤵƤ, irbưˤ -procirbΥƥȤȤƸƤӽФޤ. ˤäƸ̤Υ -irbȤѤ뤳ȤǤ褦ˤʤޤ. +IRB.conf[:IRB_RC]にprocが設定されていると, サブirbを起動する時にその +procをirbのコンテキストを引数として呼び出します. これによって個別のサ +ブirbごとに設定を変えることができるようになります. -= ޥ += コマンド -irbĥޥɤ, ñ̾Ƭ`irb_'Ĥ̾ξ -ޤ. , ñ̾override줿ΤǤ. +irb拡張コマンドは, 簡単な名前と頭に`irb_'をつけた名前と両方定義されて +います. これは, 簡単な名前がoverrideされた時のためです. --- exit, quit, irb_exit - λ. - irbξ, Υirbλ. + 終了する. + サブirbの場合, そのサブirbを終了する. --- conf, irb_context - irbθߤɽ. ѹ, conf˥å뤳 - ȤˤäƹԤʤ. + irbの現在の設定を表示する. 設定の変更は, confにメッセージを送るこ + とによって行なえる. --- conf.eval_history = N - ¹Է̤Υҥȥ굡ǽ. - nnnil nn>0 ǤФοҥȥˤ롣nn==0λ - ̵¤˵롢nilȥҥȥ굡ǽϤ(ǥե). + 実行結果のヒストリ機能の設定. + nnは整数かnilで nn>0 であればその数だけヒストリにためる。nn==0の時は + 無制限に記憶する、nilだとヒストリ機能はやめる(デフォルト). --- Conf.back_trace_limit - Хåȥ졼ɽХåȥ졼Ƭn, nԤʤ. - ǥեȤ16 + バックトレース表示をバックトレースの頭からn, 後ろからnだけ行なう. + デフォルトは16 --- conf.debug_level = N - irbѤΥǥХå٥ + irb用のデバッグレベルの設定 --- conf.ignore_eof = true/false - ^DϤ줿ưꤹ. trueλ^D̵뤹, false - irbλ. + ^Dが入力された時の動作を設定する. trueの時は^Dを無視する, falseの + 時はirbを終了する. --- conf.ignore_sigint= true/false - ^CϤ줿ưꤹ. false, irbλ. true - ưϰʲΤ褦ˤʤ: - : ޤϤΤ򥭥󥻥뤷ȥåץ٥. - ¹: ¹Ԥߤ. + ^Cが入力された時の動作を設定する. false時は, irbを終了する. trueの + 時の動作は以下のようになる: + 入力中: これまで入力したものをキャンセルしトップレベルに戻る. + 実行中: 実行を中止する. --- conf.inf_ruby_mode = true/false - inf-ruby-modeѤΥץץɽԤʤ. ǥեȤfalse. + inf-ruby-mode用のプロンプト表示を行なう. デフォルトはfalse. --- conf.inspect_mode = true/false/nil - 󥹥ڥȥ⡼ɤꤹ. - true: 󥹥ڥȤɽ. - false: ̾printɽ. - nil: ̾⡼ɤǤ, inspect modeȤʤ, math⡼ɤλ, non - inspect modeȤʤ. + インスペクトモードを設定する. + true: インスペクトして表示する. + false: 通常のprintで表示する. + nil: 通常モードであれば, inspect modeとなり, mathモードの時は, non + inspect modeとなる. --- conf.math_mode - ȤΤ. bc⡼(ʬ, η׻Ǥޤ)ɤ? + 参照のみ. bcモード(分数, 行列の計算ができます)かどうか? --- conf.use_loader = true/false - load/requireirbfileɤ߹ߵǽѤ⡼ɤΥå(ǥե - ȤѤʤ). Υ⡼ɤIRBΤȿǤ. + load/require時にirbのfile読み込み機能を用いるモードのスイッチ(デフォ + ルトは用いない). このモードはIRB全体に反映される. --- conf.prompt_c - ifľʤ, Ԥ³ƤΥץץ. + ifの直後など, 行が継続している時のプロンプト. --- conf.prompt_i - ̾Υץץ. + 通常のプロンプト. --- conf.prompt_s - ʸʤɤɽץץ. + 文字列中などを表すプロンプト. --- conf.rc - ~/.irbrcɤ߹ɤ? + ~/.irbrcを読み込んだかどうか? --- conf.use_prompt = true/false - ץץɽ뤫ɤ? ǥեȤǤϥץץȤɽ. + プロンプト表示するかどうか? デフォルトではプロンプトを表示する. --- conf.use_readline = true/false/nil - readlineȤɤ? - true: readlineȤ. - false: readlineȤʤ. - nil: (ǥե)inf-ruby-modeʳreadline饤֥Ѥ - Ȥ. + readlineを使うかどうか? + true: readlineを使う. + false: readlineを使わない. + nil: (デフォルト)inf-ruby-mode以外でreadlineライブラリを利用しよ + うとする. # #--- conf.verbose=T/F -# irb餤ʥåϤ뤫? +# irbからいろいろなメッセージを出力するか? --- cws, chws, irb_cws, irb_chws, irb_change_workspace [obj] - objselfȤ. objά줿Ȥ, home workspace, ʤ - irbưȤmain objectselfȤ. + objをselfとする. objが省略されたときは, home workspace, すなわち + irbを起動したときのmain objectをselfとする. --- pushws, irb_pushws, irb_push_workspace [obj] - UNIX륳ޥɤpushdƱ. + UNIXシェルコマンドのpushdと同様. --- popws, irb_popws, irb_pop_workspace - UNIX륳ޥɤpopdƱ. + UNIXシェルコマンドのpopdと同様. --- irb [obj] - irbΩ. objꤵ줿, objselfȤ. + サブirbを立ちあげる. objが指定された時は, そのobjをselfとする. --- jobs, irb_jobs - irbΥꥹ + サブirbのリスト --- fg n, irb_fg n - ꤷirb˥å. n, ΤΤꤹ. + 指定したサブirbにスイッチする. nは, 次のものを指定する. - irbֹ - å - irb֥ - self(irb objǵưobj) + irb番号 + スレッド + irbオブジェクト + self(irb objで起動した時のobj) --- kill n, irb_kill n - irbkill. nfgƱ. + サブirbをkillする. nはfgと同じ. --- source, irb_source path - UNIX륳ޥɤsourceȻƤ. ߤδĶpathΥ - ץȤɾ. + UNIXシェルコマンドのsourceと似ている. 現在の環境上でpath内のスクリ + プトを評価する. --- irb_load path, prev - Rubyloadirb. + Rubyのloadのirb版. -= ƥѿ += システム変数 --- _ - η׻μ¹Է̤ФƤ(ѿ). + 前の計算の実行結果を覚えている(ローカル変数). --- __ - ¹Է̤ФƤ. - __[line_no]ǡιԤǼ¹Ԥ̤뤳ȤǤ. line_no - ˤϡǿη̤-line_noη̤뤳ȤǤ. + 実行結果の履歴を覚えている. + __[line_no]で、その行で実行した結果を得ることができる. line_noが負の + 時には、最新の結果から-line_no前の結果を得ることができる. -= += 使用例 -ʲΤ褦ʴǤ. +以下のような感じです. dim% ruby irb.rb - irb(main):001:0> irb # irbΩ - irb#1(main):001:0> jobs # irbΥꥹ + irb(main):001:0> irb # サブirbの立ちあげ + irb#1(main):001:0> jobs # サブirbのリスト #0->irb on main (# : stop) #1->irb#1 on main (# : running) nil - irb#1(main):002:0> fg 0 # jobΥå + irb#1(main):002:0> fg 0 # jobのスイッチ nil irb(main):002:0> class Foo;end nil - irb(main):003:0> irb Foo # Foo򥳥ƥȤirb - # Ω - irb#2(Foo):001:0> def foo # Foo#foo + irb(main):003:0> irb Foo # Fooをコンテキストしてirb + # 立ちあげ + irb#2(Foo):001:0> def foo # Foo#fooの定義 irb#2(Foo):002:1> print 1 irb#2(Foo):003:1> end nil - irb#2(Foo):004:0> fg 0 # job򥹥å + irb#2(Foo):004:0> fg 0 # jobをスイッチ nil - irb(main):004:0> jobs # jobΥꥹ + irb(main):004:0> jobs # jobのリスト #0->irb on main (# : running) #1->irb#1 on main (# : stop) #2->irb#2 on Foo (# : stop) nil - irb(main):005:0> Foo.instance_methods # Foo#foo - # Ƥ + irb(main):005:0> Foo.instance_methods # Foo#fooがちゃんと定義さ + # れている ["foo"] - irb(main):006:0> fg 2 # job򥹥å + irb(main):006:0> fg 2 # jobをスイッチ nil - irb#2(Foo):005:0> def bar # Foo#bar + irb#2(Foo):005:0> def bar # Foo#barを定義 irb#2(Foo):006:1> print "bar" irb#2(Foo):007:1> end nil @@ -325,36 +325,36 @@ irb nil irb(main):007:0> f = Foo.new # - irb(main):008:0> irb f # FooΥ󥹥󥹤irb - # Ω. + irb(main):008:0> irb f # Fooのインスタンスでirbを + # 立ちあげる. irb#3(#):001:0> jobs #0->irb on main (# : stop) #1->irb#1 on main (# : stop) #2->irb#2 on Foo (# : stop) #3->irb#3 on # (# : running) nil - irb#3(#):002:0> foo # f.fooμ¹ + irb#3(#):002:0> foo # f.fooの実行 nil - irb#3(#):003:0> bar # f.barμ¹ + irb#3(#):003:0> bar # f.barの実行 barnil - irb#3(#):004:0> kill 1, 2, 3# jobkill + irb#3(#):004:0> kill 1, 2, 3# jobのkill nil irb(main):009:0> jobs #0->irb on main (# : running) nil - irb(main):010:0> exit # λ + irb(main):010:0> exit # 終了 dim% -= Ѿ += 使用上の制限 -irb, ɾǤ(Ĥ)Ǥ༡¹ԤԤʤޤ. -, rubyľܻȤä, 㴳ۤʤưԤʤ礬ޤ. +irbは, 評価できる時点(式が閉じた時点)での逐次実行を行ないます. したがっ +て, rubyを直接使った時と, 若干異なる動作を行なう場合があります. -餫ˤʤäƤޤ. +現在明らかになっている問題点を説明します. -== ѿ +== ローカル変数の宣言 -rubyǤ, ʲΥץϥ顼ˤʤޤ. +rubyでは, 以下のプログラムはエラーになります. eval "foo = 0" foo @@ -363,24 +363,24 @@ ruby --- NameError -Ȥ, irbѤ +ところが, irbを用いると >> eval "foo = 0" => 0 >> foo => 0 -Ȥʤ, 顼򵯤ޤ. , rubyǽ˥ץΤ򥳥 -ѥ뤷ƥѿꤹ뤫Ǥ. Ф, irbϼ¹Բǽ -ʤ(Ĥ)ȼưŪɾƤ뤫Ǥ. 嵭Ǥ, +となり, エラーを起こしません. これは, rubyが最初にスクリプト全体をコン +パイルしてローカル変数を決定するからです. それに対し, irbは実行可能に +なる(式が閉じる)と自動的に評価しているからです. 上記の例では, evel "foo = 0" -ԤʤäɾԤʤ, λѿ뤿, -ѿfooƤ뤫Ǥ. +を行なった時点で評価を行ない, その時点で変数が定義されるため, 次式で +変数fooは定義されているからです. -Τ褦rubyirbưΰ㤤褷, begin...enddzä -ХåŪ˼¹ԤƲ: +このようなrubyとirbの動作の違いを解決したい場合は, begin...endで括って +バッチ的に実行して下さい: >> begin ?> eval "foo = 0" @@ -390,14 +390,14 @@ ruby (irb):3 (irb_local_binding):1:in `eval' -== ҥɥ +== ヒアドキュメント -ߤΤȤҥɥȤμԴǤ. +現在のところヒアドキュメントの実装は不完全です. -== ܥ +== シンボル -ܥǤ뤫ɤȽǤְ㤨뤳Ȥޤ. Ūˤϼλ -ƤΤ˷³ԤȸʤȤޤ. +シンボルであるかどうかの判断を間違えることがあります. 具体的には式が完了 +しているのに継続行と見なすことがあります. =end diff --git a/doc/pty/README.expect.ja b/doc/pty/README.expect.ja index db84695ee5..7c0456f24f 100644 --- a/doc/pty/README.expect.ja +++ b/doc/pty/README.expect.ja @@ -1,21 +1,21 @@ README for expect by A. Ito, 28 October, 1998 - Expect饤֥ϡtcl expect ѥåȻ褦ʵǽ -IO饹ɲäޤ + Expectライブラリは,tcl の expect パッケージと似たような機能を +IOクラスに追加します. - ɲä᥽åɤλȤϼ̤Ǥ + 追加されるメソッドの使い方は次の通りです. IO#expect(pattern,timeout=9999999) -pattern String Regexp Υ󥹥󥹡timeout Fixnum -Υ󥹥󥹤Ǥtimeout ϾάǤޤ - Υ᥽åɤ֥åʤǸƤФ줿硤ޤ쥷ФǤ -IO֥Ȥ pattern ˥ޥåѥɤߤޤ -ޤԤޤѥ줿顤Υѥ˴ؤ -֤ޤκǽǤϡpattern ˥ޥåޤǤɤߤ -ޤ줿ƤʸǤ2ܰʹߤǤϡpattern ɽ -˥󥫡äˡΥ󥫡˥ޥåʬǤ -⤷ॢȤϡΥ᥽åɤnil֤ޤ - Υ᥽åɤ֥åդǸƤФ줿ˤϡޥåǤ -󤬥֥åȤϤ졤֥åɾޤ +pattern は String か Regexp のインスタンス,timeout は Fixnum +のインスタンスです.timeout は省略できます. + このメソッドがブロックなしで呼ばれた場合,まずレシーバである +IOオブジェクトから pattern にマッチするパターンが読みこまれる +まで待ちます.パターンが得られたら,そのパターンに関する配列を +返します.配列の最初の要素は,pattern にマッチするまでに読みこ +まれた内容の文字列です.2番目以降の要素は,pattern の正規表現 +の中にアンカーがあった場合に,そのアンカーにマッチする部分です. +もしタイムアウトが起きた場合は,このメソッドはnilを返します. + このメソッドがブロック付きで呼ばれた場合には,マッチした要素の +配列がブロック引数として渡され,ブロックが評価されます. diff --git a/doc/pty/README.ja b/doc/pty/README.ja index ca2a01442a..9b9d306bf7 100644 --- a/doc/pty/README.ja +++ b/doc/pty/README.ja @@ -1,76 +1,76 @@ -pty ĥ⥸塼 version 0.3 by A.ito +pty 拡張モジュール version 0.3 by A.ito -1. Ϥ +1. はじめに -γĥ⥸塼ϡtty (pty) ̤Ŭʥޥɤ -¹Ԥ뵡ǽ ruby 󶡤ޤ +この拡張モジュールは,仮想tty (pty) を通して適当なコマンドを +実行する機能を ruby に提供します. -2. 󥹥ȡ +2. インストール -Τ褦ˤƥ󥹥ȡ뤷Ƥ +次のようにしてインストールしてください. (1) ruby extconf.rb - ¹Ԥ Makefile ޤ + を実行すると Makefile が生成されます. -(2) make; make install ¹ԤƤ +(2) make; make install を実行してください. -3. Ǥ뤫 +3. 何ができるか -γĥ⥸塼ϡPTY Ȥ⥸塼ޤ -ˤϡΤ褦ʥ⥸塼ؿޤޤƤޤ +この拡張モジュールは,PTY というモジュールを定義します.その中 +には,次のようなモジュール関数が含まれています. getpty(command) spawn(command) - δؿϡttyݤꤵ줿ޥɤ򤽤βtty - θǼ¹Ԥ֤ޤͤ3ĤǤʤ - ǤǽǤϲttyɤ߽ФIO֥ȡ - 2ܤϽ񤭤िIO֥ȡ3ܤϻҥץΥץ - IDǤδؿƥ졼ȤƸƤФ줿硤 - Ǥϥ֥åѥ᡼ȤϤ졤ؿΤnil֤ޤ - - ҥץλߤˤϡ㳰ȯޤδ - ֥åѥ᡼դǸƤФ줿ˤϡΥ֥å - Τ㳰ȯޤҥץ˥Ƥ륹åɤϥ֥ - ȴȤ˽λޤ + この関数は,仮想ttyを確保し,指定されたコマンドをその仮想tty + の向こうで実行し,配列を返します.戻り値は3つの要素からなる + 配列です.最初の要素は仮想ttyから読み出すためのIOオブジェクト, + 2番目は書きこむためのIOオブジェクト,3番目は子プロセスのプロ + セスIDです.この関数がイテレータとして呼ばれた場合,これらの + 要素はブロックパラメータとして渡され,関数自体はnilを返します. + + 子プロセスが終了したり停止した場合には,例外が発生します.この関 + 数がブロックパラメータ付きで呼ばれた場合には,そのブロックの中で + のみ例外が発生します.子プロセスをモニターしているスレッドはブロッ + クを抜けるときに終了します. protect_signal reset_signal - ѻͽǤ + 廃止予定です. PTY.open - ttyݤޥ¦бIO֥Ȥȥ졼¦ - бFile֥Ȥ֤ޤ֥åդǸƤӽФ - 줿ϡǤϥ֥åѥ᡼ȤϤ졤֥ - ֤줿̤֤ޤޤΥޥIOȥ졼File - ϡ֥åȴȤ˥ѤߤǤʤХޤ + 仮想ttyを確保し,マスター側に対応するIOオブジェクトとスレーブ側に + 対応するFileオブジェクトの配列を返します.ブロック付きで呼び出さ + れた場合は,これらの要素はブロックパラメータとして渡され,ブロッ + クから返された結果を返します.また、このマスターIOとスレーブFile + は、ブロックを抜けるときにクローズ済みでなければクローズされます. PTY.check(pid[, raise=false]) - pidǻꤵ줿ҥץξ֤å¹Ǥnil - ֤ޤλƤ뤫ߤƤ硢ǤС - бProcess::Status֥Ȥ֤ޤǤ - PTY::ChildExited㳰ȯޤ + pidで指定された子プロセスの状態をチェックし,実行中であればnilを + 返します.終了しているか停止している場合、第二引数が偽であれば、 + 対応するProcess::Statusオブジェクトを返します。真であれば + PTY::ChildExited例外が発生します. -4. ѤˤĤ +4. 利用について -ƣ§ͭޤ +伊藤彰則が著作権を保有します. -ץޤϥɥȤ˸ɽѤ줺 -ɽƤ˸¤ꡤïǤ⡤Υեȥ̵ -Ԥ̵ǤѡۡѤǤޤŪϸꤵƤޤ - +ソースプログラムまたはドキュメントに元の著作権表示が改変されずに +表示されている場合に限り,誰でも,このソフトウェアを無償かつ著作 +権者に無断で利用・配布・改変できます.利用目的は限定されていませ +ん. -Υץѡۤ¾Υץ˴ط԰٤ˤ -äʤ»ФƤ⡤ԤϰǤ餤ޤ +このプログラムの利用・配布その他このプログラムに関係する行為によ +って生じたいかなる損害に対しても,作者は一切責任を負いません. -5. Х +5. バグ報告等 -ХݡȤϴޤޤ +バグレポートは歓迎します. aito@ei5sun.yz.yamagata-u.ac.jp -ޤŻҥ᡼ǥХݡȤ꤯ +まで電子メールでバグレポートをお送りください. diff --git a/doc/rake/CHANGES b/doc/rake/CHANGES index 3b1a02b812..ae6349eb78 100644 --- a/doc/rake/CHANGES +++ b/doc/rake/CHANGES @@ -66,7 +66,7 @@ symbol/string differences. (Patch supplied by Edwin Pratomo) * Fixed bug with rules involving multiple source (Patch supplied by - Emanuel Indermhle) + Emanuel Indermle) * Switched from getoptlong to optparse (patches supplied by Edwin Pratomo) diff --git a/doc/shell.rd.ja b/doc/shell.rd.ja index 33e5a9ed9b..053b11fb99 100644 --- a/doc/shell.rd.ja +++ b/doc/shell.rd.ja @@ -5,142 +5,142 @@ =begin -= Ū += 目的 -rubysh/cshΤ褦˥ޥɤμ¹Եڤӥե륿󥰤ڤ˹Ԥ. -sh/cshʸrubyεǽѤƼ¸. +ruby上でsh/cshのようにコマンドの実行及びフィルタリングを手軽に行う. +sh/cshの制御文はrubyの機能を用いて実現する. -= ʥ饹 += 主なクラス一覧 == Shell -Shell֥Ȥϥȥǥ쥯ȥ, ޥɼ¹ԤϤ -Хѥˤʤޤ. +Shellオブジェクトはカレントディレクトリを持ち, コマンド実行はそこからの +相対パスになります. --- Shell#cwd --- Shell#dir --- Shell#getwd --- Shell#pwd - ȥǥ쥯ȥ֤ + カレントディレクトリを返す。 --- Shell#system_path - ޥɥѥ֤ + コマンドサーチパスの配列を返す。 --- Shell#umask - umask֤ + umaskを返す。 == Filter -ޥɤμ¹Է̤Ϥ٤FilterȤƤޤ. Enumerableinclude -Ƥޤ. +コマンドの実行結果はすべてFilterとしてかえります. Enumerableをincludeし +ています. -= ʥ᥽åɰ += 主なメソッド一覧 -== ޥ +== コマンド定義 -OSΥޥɤ¹ԤˤϤޤ, ShellΥ᥽åɤȤޤ. +OS上のコマンドを実行するにはまず, Shellのメソッドとして定義します. -) ޥɤʤȤľܼ¹ԤǤShell#systemޥɤ⤢ޤ. +注) コマンドを定義しなくとも直接実行できるShell#systemコマンドもあります. --- Shell.def_system_command(command, path = command) - ShellΥ᥽åɤȤcommandϿޤ. + Shellのメソッドとしてcommandを登録します. - ) + 例) Shell.def_system_command "ls" - ls + ls を定義 Shell.def_system_command "sys_sort", "sort" - sortޥɤsys_sortȤ + sortコマンドをsys_sortとして定義 --- Shell.undef_system_command(command) - commandޤ. + commandを削除します. --- Shell.alias_command(ali, command, *opts) {...} - commandalias򤷤ޤ. + commandのaliasをします. - ) + 例) Shell.alias_command "lsC", "ls", "-CBF", "--show-control-chars" Shell.alias_command("lsC", "ls"){|*opts| ["-CBF", "--show-control-chars", *opts]} --- Shell.unalias_command(ali) - commandaliasޤ. + commandのaliasを削除します. --- Shell.install_system_commands(pre = "sys_") - system_pathˤƤμ¹ԲǽեShell. ᥽ - ̾ϸΥե̾ƬpreĤΤȤʤ. + system_path上にある全ての実行可能ファイルをShellに定義する. メソッ + ド名は元のファイル名の頭にpreをつけたものとなる. -== +== 生成 --- Shell.new - ץΥȥǥ쥯ȥ򥫥ȥǥ쥯ȥȤShell - ֥Ȥޤ. + プロセスのカレントディレクトリをカレントディレクトリとするShellオ + ブジェクトを生成します. --- Shell.cd(path) - path򥫥ȥǥ쥯ȥȤShell֥Ȥޤ. + pathをカレントディレクトリとするShellオブジェクトを生成します. -== ץ +== プロセス管理 --- Shell#jobs - 塼󥰤Ƥjobΰ֤. + スケジューリングされているjobの一覧を返す. --- Shell#kill sig, job - job˥ʥsig + jobにシグナルsigを送る -== ȥǥ쥯ȥ +== カレントディレクトリ操作 --- Shell#cd(path, &block) --- Shell#chdir - ȥǥ쥯ȥpathˤ. ƥ졼ȤƸƤФ줿Ȥˤ - ֥å¹Τߥȥǥ쥯ȥѹ. + カレントディレクトリをpathにする. イテレータとして呼ばれたときには + ブロック実行中のみカレントディレクトリを変更する. --- Shell#pushd(path = nil, &block) --- Shell#pushdir - ȥǥ쥯ȥǥ쥯ȥꥹåˤĤ, ȥǥ쥯 - ȥpathˤ. pathά줿Ȥˤ, ȥǥ쥯ȥ - ǥ쥯ȥꥹåΥȥåפ򴹤. ƥ졼ȤƸƤФ줿 - ˤ, ֥å¹Τpushd. + カレントディレクトリをディレクトリスタックにつみ, カレントディレク + トリをpathにする. pathが省略されたときには, カレントディレクトリと + ディレクトリスタックのトップを交換する. イテレータとして呼ばれたと + きには, ブロック実行中のみpushdする. --- Shell#popd --- Shell#popdir - ǥ쥯ȥꥹåݥåפ, 򥫥ȥǥ쥯ȥˤ. + ディレクトリスタックからポップし, それをカレントディレクトリにする. -== ե/ǥ쥯ȥ +== ファイル/ディレクトリ操作 --- Shell#foreach(path = nil, &block) - pathեʤ, File#foreach - pathǥ쥯ȥʤ, Dir#foreach + pathがファイルなら, File#foreach + pathがディレクトリなら, Dir#foreach --- Shell#open(path, mode) - pathեʤ, File#open - pathǥ쥯ȥʤ, Dir#open + pathがファイルなら, File#open + pathがディレクトリなら, Dir#open --- Shell#unlink(path) - pathեʤ, File#unlink - pathǥ쥯ȥʤ, Dir#unlink + pathがファイルなら, File#unlink + pathがディレクトリなら, Dir#unlink --- Shell#test(command, file1, file2) --- Shell#[command, file1, file2] - եƥȴؿtestƱ. - ) + ファイルテスト関数testと同じ. + 例) sh[?e, "foo"] sh[:e, "foo"] sh["e", "foo"] @@ -149,75 +149,75 @@ OS --- Shell#mkdir(*path) - Dir.mkdirƱ(ʣ) + Dir.mkdirと同じ(複数可) --- Shell#rmdir(*path) - Dir.rmdirƱ(ʣ) + Dir.rmdirと同じ(複数可) -== ޥɼ¹ +== コマンド実行 --- System#system(command, *opts) - command¹Ԥ. - ) + commandを実行する. + 例) print sh.system("ls", "-l") sh.system("ls", "-l") | sh.head > STDOUT --- System#rehash - ϥå夹 + リハッシュする --- Shell#transact &block - ֥åǤshellselfȤƼ¹Ԥ. - ) + ブロック中ではshellをselfとして実行する. + 例) sh.transact{system("ls", "-l") | head > STDOUT} --- Shell#out(dev = STDOUT, &block) - transactƤӽФη̤dev˽Ϥ. + transactを呼び出しその結果をdevに出力する. -== ޥ +== 内部コマンド --- Shell#echo(*strings) --- Shell#cat(*files) --- Shell#glob(patten) --- Shell#tee(file) - ϼ¹Ԥ, ƤȤFilter֥Ȥ֤ޤ. + これらは実行すると, それらを内容とするFilterオブジェクトを返します. --- Filter#each &block - ե륿ΰԤĤblockϤ. + フィルタの一行ずつをblockに渡す. --- Filter#<(src) - srcե륿ϤȤ. src, ʸʤХե, IOǤ - Ф򤽤ΤޤϤȤ. + srcをフィルタの入力とする. srcが, 文字列ならばファイルを, IOであれ + ばそれをそのまま入力とする. --- Filter#>(to) - srcե륿νϤȤ. to, ʸʤХե, IOǤ - Ф򤽤Τޤ޽ϤȤ. + srcをフィルタの出力とする. toが, 文字列ならばファイルに, IOであれ + ばそれをそのまま出力とする. --- Filter#>>(to) - srcե륿ɲä. to, ʸʤХե, IOǤ - 򤽤Τޤ޽ϤȤ. + srcをフィルタに追加する. toが, 文字列ならばファイルに, IOであれば + それをそのまま出力とする. --- Filter#|(filter) - ѥ׷ + パイプ結合 --- Filter#+(filter) - filter1 + filter2 filter1νϤθ, filter2νϤԤ. + filter1 + filter2 は filter1の出力の後, filter2の出力を行う. --- Filter#to_a --- Filter#to_s -== ȹߥޥ +== 組込みコマンド --- Shell#atime(file) --- Shell#basename(file, *opt) @@ -239,7 +239,7 @@ OS --- Shell#truncate(file, length) --- Shell#utime(atime, mtime, *file) - File饹ˤƱ̾Υ饹᥽åɤƱǤ. + これらはFileクラスにある同名のクラスメソッドと同じです. --- Shell#blockdev?(file) --- Shell#chardev?(file) @@ -263,7 +263,7 @@ OS --- Shell#writable_real?(file) --- Shell#zero?(file) - FileTest饹ˤƱ̾Υ饹᥽åɤƱǤ. + これらはFileTestクラスにある同名のクラスメソッドと同じです. --- Shell#syscopy(filename_from, filename_to) --- Shell#copy(filename_from, filename_to) @@ -273,9 +273,9 @@ OS --- Shell#makedirs(*filenames) --- Shell#install(filename_from, filename_to, mode) - FileTools饹ˤƱ̾Υ饹᥽åɤƱǤ. + これらはFileToolsクラスにある同名のクラスメソッドと同じです. - ¾, ʲΤΤꥢƤޤ. + その他, 以下のものがエイリアスされています. --- Shell#cmp <- Shell#compare --- Shell#mv <- Shell#move @@ -283,7 +283,7 @@ OS --- Shell#rm_f <- Shell#safe_unlink --- Shell#mkpath <- Shell#makedirs -= ץ += サンプル == ex1 diff --git a/insns.def b/insns.def index 4d406fdec8..a3bec2f434 100644 --- a/insns.def +++ b/insns.def @@ -47,7 +47,7 @@ nop /** @c variable @e get local variable value (which is pointed by idx). - @j idx Ŏw肳ꂽ[JϐX^bNɒuB + @j idx で指定されたローカル変数をスタックに置く。 */ DEFINE_INSN getlocal @@ -61,7 +61,7 @@ getlocal /** @c variable @e set local variable value (which is pointed by idx) as val. - @j idx Ŏw肳ꂽ[Jϐ val ɐݒ肷B + @j idx で指定されたローカル変数を val に設定する。 */ DEFINE_INSN setlocal @@ -75,7 +75,7 @@ setlocal /** @c variable @e get special local variable ($~, $_, ..) value. - @j ȃ[Jϐi$~, $_, ...j̒l𓾂B + @j 特殊なローカル変数($~, $_, ...)の値を得る。 */ DEFINE_INSN getspecial @@ -89,7 +89,7 @@ getspecial /** @c variable @e set special local variable ($~, $_, ...) value as obj. - @j ʂȃ[Jϐi$~, $_, ...j̒lݒ肷B + @j 特別なローカル変数($~, $_, ...)の値を設定する。 */ DEFINE_INSN setspecial @@ -104,8 +104,8 @@ setspecial @c variable @e get block local variable(which is pointed by idx and level). level means nest level of block, and specify how above this variable. - @j level, idx Ŏw肳ꂽubN[Jϐ̒lX^bNɒuB - level ̓ubÑlXgxŁAiォB + @j level, idx で指定されたブロックローカル変数の値をスタックに置く。 + level はブロックのネストレベルで、何段上かを示す。 */ DEFINE_INSN getdynamic @@ -125,8 +125,8 @@ getdynamic @c variable @e set block local variable(which is pointed by 'idx') as val. level means nest level of block, and specify how above this variable. - @j level, idx Ŏw肳ꂽubN[Jϐ̒l val ɂB - level ̓ubÑlXgxŁAiォB + @j level, idx で指定されたブロックローカル変数の値を val にする。 + level はブロックのネストレベルで、何段上かを示す。 */ DEFINE_INSN setdynamic @@ -146,7 +146,7 @@ setdynamic @c variable @e get instance variable id of obj. if is_local is not 0, search as class local variable. - @j self ̃CX^Xϐ id ̒l𓾂B + @j self のインスタンス変数 id の値を得る。 */ DEFINE_INSN getinstancevariable @@ -161,7 +161,7 @@ getinstancevariable @c variable @e set instance variable id of obj as val. if is_local is not 0, search as class local variable. - @j self ̃CX^Xϐ id val ɂB + @j self のインスタンス変数 id を val にする。 */ DEFINE_INSN setinstancevariable @@ -175,7 +175,7 @@ setinstancevariable /** @c variable @e get class variable id of klass as val. - @j ݂̃XR[ṽNXϐ id ̒l𓾂B + @j 現在のスコープのクラス変数 id の値を得る。 */ DEFINE_INSN getclassvariable @@ -190,7 +190,7 @@ getclassvariable /** @c variable @e set class variable id of klass as val. - @j klass ̃NXϐ id val ɂB + @j klass のクラス変数 id を val にする。 */ DEFINE_INSN setclassvariable @@ -209,10 +209,10 @@ setclassvariable are searched in current scope. if klass is Qfalse, constant as top level constant. otherwise, get constant under klass class or module. - @j 萔 id ̒l𓾂B - klass Qnil ȂÃXR[vœ萔̒l𓾂B - Qfalse ȂAgbvxXR[v𓾂B - ȊOȂAklass NX̉̒萔𓾂B + @j 定数 id の値を得る。 + klass が Qnil なら、そのスコープで得られる定数の値を得る。 + Qfalse なら、トップレベルスコープを得る。 + それ以外なら、klass クラスの下の定数を得る。 */ DEFINE_INSN getconstant @@ -231,10 +231,10 @@ getconstant top level constant. otherwise, set constant under klass class or module. - @j 萔 id ̒l val ɂB - klass Qfalse ȂÃXR[vœ萔 id ̒lݒ肷B - Qnil ȂAgbvxXR[v̒lݒ肷B - ȊOȂAklass NX̉̒萔ݒ肷B + @j 定数 id の値を val にする。 + klass が Qfalse なら、そのスコープで得られる定数 id の値を設定する。 + Qnil なら、トップレベルスコープの値を設定する。 + それ以外なら、klass クラスの下の定数を設定する。 */ DEFINE_INSN setconstant @@ -250,7 +250,7 @@ setconstant /** @c variable @e get global variable id. - @j O[oϐ id ̒l𓾂B + @j グローバル変数 id の値を得る。 */ DEFINE_INSN getglobal @@ -264,7 +264,7 @@ getglobal /** @c variable @e set global variable id as val. - @j O[oϐ id ̒lݒ肷B + @j グローバル変数 id の値を設定する。 */ DEFINE_INSN setglobal @@ -283,7 +283,7 @@ setglobal /** @c put @e put nil to stack. - @j X^bN nil vbVB + @j スタックに nil をプッシュする。 */ DEFINE_INSN putnil @@ -297,7 +297,7 @@ putnil /** @c put @e put self. - @j X^bN self vbVB + @j スタックに self をプッシュする。 */ DEFINE_INSN putself @@ -312,7 +312,7 @@ putself @c put @e put some object. i.e. Fixnum, true, false, nil, and so on. - @j IuWFNg val X^bNɃvbVB + @j オブジェクト val をスタックにプッシュする。 i.e. Fixnum, true, false, nil, and so on. */ DEFINE_INSN @@ -327,8 +327,8 @@ putobject /** @c put @e put special object. "value_type" is for expansion. - @j ʂȃIuWFNg val X^bNɃvbVB - IuWFNg̎ނ value_type ɂD + @j 特別なオブジェクト val をスタックにプッシュする。 + オブジェクトの種類は value_type による. */ DEFINE_INSN putspecialobject @@ -370,7 +370,7 @@ putiseq /** @c put @e put string val. string will be copied. - @j Rs[ăX^bNɃvbVB + @j 文字列をコピーしてスタックにプッシュする。 */ DEFINE_INSN putstring @@ -384,7 +384,7 @@ putstring /** @c put @e put concatenate strings - @j X^bNgbv̕ n ˜ACʂX^bNɃvbVB + @j スタックトップの文字列を n 個連結し,結果をスタックにプッシュする。 */ DEFINE_INSN concatstrings @@ -405,7 +405,7 @@ concatstrings /** @c put @e to_str - @j to_str ̌ʂX^bNɃvbVB + @j to_str の結果をスタックにプッシュする。 */ DEFINE_INSN tostring @@ -419,8 +419,8 @@ tostring /** @c put @e to Regexp - @j str 𐳋K\ɃRpCăX^bNɃvbVB - RpCCopt 𐳋K\̃IvVƂB + @j 文字列 str を正規表現にコンパイルしてスタックにプッシュする。 + コンパイル時,opt を正規表現のオプションとする。 */ DEFINE_INSN toregexp @@ -442,7 +442,7 @@ toregexp /** @c put @e put new array. - @j VzX^bN num ‚̒lŏĐvbVB + @j 新しい配列をスタック上の num 個の値で初期化して生成しプッシュする。 */ DEFINE_INSN newarray @@ -457,7 +457,7 @@ newarray /** @c put @e dup array - @j z ary dup ăX^bNɃvbVB + @j 配列 ary を dup してスタックにプッシュする。 */ DEFINE_INSN duparray @@ -471,13 +471,13 @@ duparray /** @c put @e expand array to num objects. - @j X^bNgbṽIuWFNgzł΁AWJB - zIuWFNg̗vf numȉȂ΁A nil ςށBnumȏȂA - numȏ̗vf͐؂̂ĂB - zIuWFNgłȂ΁Anum - 1 ‚ nil ςށB - flag ^ȂAcvf̔zς - flag: 0x01 - Ōz - flag: 0x02 - postarg p + @j スタックトップのオブジェクトが配列であれば、それを展開する。 + 配列オブジェクトの要素数が num以下ならば、代わりに nil を積む。num以上なら、 + num以上の要素は切り捨てる。 + 配列オブジェクトでなければ、num - 1 個の nil を積む。 + もし flag が真なら、残り要素の配列を積む + flag: 0x01 - 最後を配列に + flag: 0x02 - postarg 用 flag: 0x04 - reverse? */ DEFINE_INSN @@ -492,7 +492,7 @@ expandarray /** @c put @e concat two arrays - @j ‚̔z ary1, ary2 AX^bNփvbVB + @j 二つの配列 ary1, ary2 を連結しスタックへプッシュする。 */ DEFINE_INSN concatarray @@ -521,7 +521,7 @@ concatarray /** @c put @e splat array - @j z ary ɑ΂ to_a ĂяoB + @j 配列 ary に対して to_a を呼び出す。 */ DEFINE_INSN splatarray @@ -539,7 +539,7 @@ splatarray /** @c put @e check value is included in ary - @j z ary ɗvf obj Ă邩ǂ`FbNBcase/when ŗpB + @j 配列 ary に要素 obj が入っているかどうかチェック。case/when で利用する。 */ DEFINE_INSN checkincludearray @@ -579,8 +579,8 @@ checkincludearray /** @c put @e put new Hash. - @j VnbVX^bNgbv n ‚lƂĐB - n ̓L[ƒl̃yAȂ̂ 2 ̔{łȂ΂ȂȂB + @j 新しいハッシュをスタックトップの n 個を初期値として生成する。 + n はキーと値のペアなので 2 の倍数でなければならない。 */ DEFINE_INSN newhash @@ -602,7 +602,7 @@ newhash /** @c put @e put new Range object.(Range.new(low, high, flag)) - @j Range.new(low, high, flag) ̂悤ȃIuWFNg𐶐X^bNɃvbVB + @j Range.new(low, high, flag) のようなオブジェクトを生成しスタックにプッシュする。 */ DEFINE_INSN newrange @@ -620,7 +620,7 @@ newrange /** @c stack @e pop from stack. - @j X^bNƒ|bvB + @j スタックから一つポップする。 */ DEFINE_INSN pop @@ -635,7 +635,7 @@ pop /** @c stack @e duplicate stack top. - @j X^bNgbvRs[ăX^bNɃvbVB + @j スタックトップをコピーしてスタックにプッシュする。 */ DEFINE_INSN dup @@ -649,7 +649,7 @@ dup /** @c stack @e duplicate stack top n elements - @j X^bNgbv n ‚Rs[ăX^bNɃvbVB + @j スタックトップの n 個をコピーしてスタックにプッシュする。 */ DEFINE_INSN dupn @@ -669,7 +669,7 @@ dupn /** @c stack @e swap top 2 vals - @j X^bNgbv 2 ‚̒lB + @j スタックトップの 2 つの値を交換する。 */ DEFINE_INSN swap @@ -683,7 +683,7 @@ swap /** @c stack @e for stack caching. - @j X^bNLbVȌԂ𒲐邽߂ɕKvȖ߁B + @j スタックキャッシングの状態を調整するために必要な命令。 */ DEFINE_INSN reput @@ -697,7 +697,7 @@ reput /** @c stack @e get nth stack value from stack top - @j X^bNgbv n –ڂX^bNɃvbVB + @j スタックトップから n 個目をスタックにプッシュする。 */ DEFINE_INSN topn @@ -711,7 +711,7 @@ topn /** @c stack @e set Nth stack entry to stack top - @j X^bNgbv̒l n –ڂ̃X^bNɃRs[ + @j スタックトップの値を n 個目のスタックにコピー */ DEFINE_INSN setn @@ -725,7 +725,7 @@ setn /** @c stack @e empt current stack - @j current stack ɂB + @j current stack を空にする。 */ DEFINE_INSN adjuststack @@ -744,7 +744,7 @@ adjuststack /** @c setting @e defined? - @j defined? sB + @j defined? を行う。 */ DEFINE_INSN defined @@ -862,7 +862,7 @@ defined /** @c setting @e trace - @j trace p̖߁B + @j trace 用の命令。 */ DEFINE_INSN trace @@ -884,9 +884,9 @@ trace @e enter class definition scope. if super is Qfalse, and clsas "klass" is defined, it's redefine. otherwise, define "klass" class. - @j NX`XR[vֈڍsB - super Qfalse klassNX`Ă΍Ē`łB - łȂ΁Aklass NX`B + @j クラス定義スコープへ移行する。 + もし super が Qfalse で klassクラスが定義されていれば再定義である。 + そうでなければ、klass クラスを定義する。 */ DEFINE_INSN defineclass @@ -986,7 +986,7 @@ defineclass /** @c method/iterator @e obj.send(id, args..) # args.size => num - @j \bhĂяosB + @j メソッド呼び出しを行う。 obj.send(id, args..) # args.size => num flag & VM_CALL_ARGS_SPLAT_BIT != 0 -> splat last arg flag & VM_CALL_ARGS_BLOCKARG_BIT != 0 -> Proc as Block @@ -1018,9 +1018,9 @@ send /** @c method/iterator @e super(args) # args.size => num - @j super sB + @j super を実行する。 super(args) # args.size => num - flag IyḧӖ send ƓB + flag 等オペランドの意味は send と同じ。 */ DEFINE_INSN invokesuper @@ -1054,7 +1054,7 @@ invokesuper /** @c method/iterator @e yield(args) # args.size => num, flag shows expand argument or not - @j yield sB + @j yield を実行する。 yield(args) # args.size => num */ DEFINE_INSN @@ -1073,7 +1073,7 @@ invokeblock /** @c method/iterator @e return from this scope. - @j ̃XR[v甲B + @j このスコープから抜ける。 */ DEFINE_INSN leave @@ -1096,7 +1096,7 @@ leave /** @c method/iterator @e return from this vm loop - @j VM loop 甲B + @j VM loop から抜ける。 */ DEFINE_INSN finish @@ -1119,7 +1119,7 @@ finish /** @c exception @e longjump - @j WvsB + @j 大域ジャンプを行う。 */ DEFINE_INSN throw @@ -1140,7 +1140,7 @@ throw /** @c jump @e set PC to (PC + dst). - @j PC (PC + dst) ɂB + @j PC を (PC + dst) にする。 */ DEFINE_INSN jump @@ -1155,7 +1155,7 @@ jump /** @c jump @e if val is not false or nil, set PC to (PC + dst). - @j val false nil łȂ΁APC (PC + dst) ɂB + @j もし val が false か nil でなければ、PC を (PC + dst) にする。 */ DEFINE_INSN branchif @@ -1172,7 +1172,7 @@ branchif /** @c jump @e if val is false or nil, set PC to (PC + dst). - @j val false nil Ȃ΁APC (PC + dst) ɂB + @j もし val が false か nil ならば、PC を (PC + dst) にする。 */ DEFINE_INSN branchunless @@ -1194,7 +1194,7 @@ branchunless /** @c optimize @e inline cache - @j CCLbVLȂAlX^bNɃvbV dst փWvB + @j インラインキャッシュが有効なら、値をスタックにプッシュして dst へジャンプする。 */ DEFINE_INSN getinlinecache @@ -1215,7 +1215,7 @@ getinlinecache /** @c optimize @e inline cache (once) - @j once B + @j once を実現する。 */ DEFINE_INSN onceinlinecache @@ -1244,7 +1244,7 @@ onceinlinecache /** @c optimize @e set inline cache - @j CCLbV̒lݒ肷B + @j インラインキャッシュの値を設定する。 */ DEFINE_INSN setinlinecache @@ -1263,7 +1263,7 @@ setinlinecache /** @c optimize @e case dispatcher - @j case ŁA”\Ȃ\ŃWvB + @j case 文で、可能なら表引きでジャンプする。 */ DEFINE_INSN opt_case_dispatch @@ -1304,7 +1304,7 @@ opt_case_dispatch /** @c optimize @e check environment - @j ̊gpB + @j 将来の拡張用。 */ DEFINE_INSN opt_checkenv @@ -1326,7 +1326,7 @@ opt_checkenv /** @c optimize @e optimized X+Y. - @j œKꂽ X+YB + @j 最適化された X+Y。 */ DEFINE_INSN opt_plus @@ -1402,7 +1402,7 @@ opt_plus /** @c optimize @e optimized X-Y. - @j œKꂽ X-YB + @j 最適化された X-Y。 */ DEFINE_INSN opt_minus @@ -1451,7 +1451,7 @@ opt_minus /** @c optimize @e optimized X*Y. - @j œKꂽ X*YB + @j 最適化された X*Y。 */ DEFINE_INSN opt_mult @@ -1505,7 +1505,7 @@ opt_mult /** @c optimize @e optimized X/Y. - @j œKꂽ X/YB + @j 最適化された X/Y。 */ DEFINE_INSN opt_div @@ -1569,7 +1569,7 @@ opt_div /** @c optimize @e optimized X%Y. - @j œKꂽ X%YB + @j 最適化された X%Y。 */ DEFINE_INSN opt_mod @@ -1648,7 +1648,7 @@ opt_mod /** @c optimize @e optimized X==Y. - @j œKꂽ X==YB + @j 最適化された X==Y。 */ DEFINE_INSN opt_eq @@ -1669,7 +1669,7 @@ opt_eq /** @c optimize @e optimized X!=Y. - @j œKꂽ X!=YB + @j 最適化された X!=Y。 */ DEFINE_INSN opt_neq @@ -1700,7 +1700,7 @@ opt_neq /** @c optimize @e optimized XY. - @j œKꂽ X>YB + @j 最適化された X>Y。 */ DEFINE_INSN opt_gt @@ -1830,7 +1830,7 @@ opt_gt /** @c optimize @e optimized X>=Y. - @j œKꂽ X>=YB + @j 最適化された X>=Y。 */ DEFINE_INSN opt_ge @@ -1859,7 +1859,7 @@ opt_ge /** @c optimize @e << - @j œKꂽ X<