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 --- README.EXT.ja | 1669 +++++++++++++++++++++++++++++++-------------------------- 1 file changed, 905 insertions(+), 764 deletions(-) (limited to 'README.EXT.ja') 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の変数には型がなく,データに型がありま -す.この違いのため,CとRubyは相互に変換しなければ,お互いの -データをアクセスできません. +C紊違鐚若帥障鐚с鐚 +違ゃ潟帥int紊違篁eャ鐚ゃ贋違 +宴障鐚Ruby紊違鐚若帥 +鐚鐚CRuby娯紊逸篋 +若帥≪祉鴻с障鐚 -RubyのデータはVALUEというCの型で表現されます.VALUE型のデー -タはそのデータタイプを自分で知っています.このデータタイプと -いうのはデータ(オブジェクト)の実際の構造を意味していて,Ruby -のクラスとはまた違ったものです. +Ruby若帥VALUECц;憗障鐚VALUE +帥若帥帥ゃхャc障鐚若帥帥ゃ +若(吾с)絎罕潟鐚Ruby +鴻障cс鐚 -VALUEからCにとって意味のあるデータを取り出すためには +VALUECc潟若帥冴 - (1) VALUEのデータタイプを知る - (2) VALUEをCのデータに変換する + (1) VALUE若帥帥ゃャ + (2) VALUEC若帥紊 -の両方が必要です.(1)を忘れると間違ったデータの変換が行われ -て,最悪プログラムがcore dumpします. +筝≧鴻綽荀с鐚(1)綽c若帥紊茵 +鐚違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 罩h頫 + T_ARRAY + T_HASH f渇 + 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; } -それとデータタイプをチェックして,正しくなければ例外を発生す -る関数が用意されています. +若帥帥ゃс鐚罩c遺紊榊 +∽違障鐚 void Check_Type(VALUE value, int type) -この関数はvalueがtypeで無ければ,例外を発生させます.引数と -して与えられたVALUEのデータタイプが正しいかどうかチェックす -るためには,この関数を使います. +∽違valuetypeх<逸箴紊榊障鐚綣違 +筝VALUE若帥帥ゃ罩cс +鐚∽違篏帥障鐚 -FIXNUMとNILに関してはより高速な判別マクロが用意されています. +FIXNUMNIL≪蕭ゅャ障鐚 FIXNUM_P(obj) NIL_P(obj) -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が用意している関数を用いてください. - -ここではもっとも使われるであろう文字列と配列の生成/操作を行 -い関数をあげます(全部ではないです). - - 文字列に対する関数 +<<<<<<< HEAD +1.3 VALUEC若帥紊 + +若帥帥ゃ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泣ゃ冴障翫箴紊榊障鐚 +鐚FIXNUMRuby若帥贋違紊 +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障障c鴻(紊)井篏 +ゃ潟帥紊с障鐚 + +罕篏struct RXxxxxruby.hу臂 +鐚箴井絖struct RStringс鐚絎篏帥醇с +絖障鐚 + +ruby.hс罕篏吾c鴻RXXXXX()(紊ф +絖)ф箴障(箴: RSTRING())鐚 + +罕篏若帥冴箴障鐚絖 +str激緇RSTRING_LEN(str)鐚絖str +char*緇RSTRING_PTR(str)障鐚 +翫鐚RARRAY_LEN(ary)鐚RARRAY_PTR(ary) +障鐚 + +Ruby罕篏贋・≪祉鴻羂ゃ違 +鐚絖罕篏筝荳сэ贋・紊眼 +с鐚贋・紊眼翫鐚吾с絎鴻翫с +c鐚違障鐚 + +1.4 C若帥VALUE紊 + +VALUE絎罕 + + * FIXNUM翫 + + 1bit綏激鐚LSB腴鐚 + + * 篁ゃ潟帥翫 + + 障VALUEc鴻鐚 + +c障鐚c鐚LSBсVALUEFIXNUM +с(ゃ潟帥LSB腴c篁絎 +)鐚 + +с鐚FIXNUM篁ュRuby吾с罕篏VALUE +c鴻VALUE紊堺ャ障鐚鐚篁紙罕 +篏VALUEc鴻堺ャс障鐚c鴻 +Rubyャc罕篏(ruby.hу臂struct RXxxx +)с鐚 + +FIXNUM≪紊腟宴綽荀障鐚C贋 +VALUE紊篁ヤ障鐚綽荀綽 +篏帥鐚 + + INT2FIX() 贋違31bit障63bit篁ュ障篆 + + INT2NUM() 篁紙贋違VALUE + +INT2NUM()贋違FIXNUM膀蚊障翫鐚Bignum紊 +障(鐚絨)鐚 + +1.5 Ruby若帥篏 + +腮菴違鴻鐚Ruby罕篏≪祉鴻絎鴻贋違 +茵с障鐚эRuby若帥篏 +Ruby∽違鐚 + +сc篏帥с絖/篏茵 +∽違障(сс)鐚 + + 絖絲障∽ +======= +1.3 VALUEC若帥紊 + +若帥帥ゃ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泣ゃ冴障翫箴紊榊障鐚 +鐚FIXNUMRuby若帥贋違紊 +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障障c鴻(紊)井篏 +ゃ潟帥紊с障鐚 + +罕篏struct RXxxxxruby.hу臂 +鐚箴井絖struct RStringс鐚絎篏帥醇с +絖障鐚 + +ruby.hс罕篏吾c鴻RXXXXX()(紊ф +絖)ф箴障(箴: RSTRING())鐚 + +罕篏若帥冴箴障鐚絖 +str激緇RSTRING_LEN(str)鐚絖str +char*緇RSTRING_PTR(str)障鐚 +翫鐚RARRAY_LEN(ary)鐚RARRAY_PTR(ary) +障鐚 + +Ruby罕篏贋・≪祉鴻羂ゃ違 +鐚絖罕篏筝荳сэ贋・紊眼 +с鐚贋・紊眼翫鐚吾с絎鴻翫с +c鐚違障鐚 + +1.4 C若帥VALUE紊 + +VALUE絎罕 + + * FIXNUM翫 + + 1bit綏激鐚LSB腴鐚 + + * 篁ゃ潟帥翫 + + 障VALUEc鴻鐚 + +c障鐚c鐚LSBсVALUEFIXNUM +с(ゃ潟帥LSB腴c篁絎 +)鐚 + +с鐚FIXNUM篁ュRuby吾с罕篏VALUE +c鴻VALUE紊堺ャ障鐚鐚篁紙罕 +篏VALUEc鴻堺ャс障鐚c鴻 +Rubyャc罕篏(ruby.hу臂struct RXxxx +)с鐚 + +FIXNUM≪紊腟宴綽荀障鐚C贋 +VALUE紊篁ヤ障鐚綽荀綽 +篏帥鐚 + + INT2FIX() 贋違31bit障63bit篁ュ障篆 + + INT2NUM() 篁紙贋違VALUE + +INT2NUM()贋違FIXNUM膀蚊障翫鐚Bignum紊 +障(鐚絨)鐚 + +1.5 Ruby若帥篏 + +腮菴違鴻鐚Ruby罕篏≪祉鴻絎鴻贋違 +茵с障鐚эRuby若帥篏 +Ruby∽違鐚 + +сc篏帥с絖/篏茵 +∽違障(сс)鐚 + + 絖絲障∽ +>>>>>>> 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)若c + 翫就鐚Ruby絖鐚 rb_str_cat(VALUE str, const char *ptr, long len) - Rubyの文字列strにlenバイトの文字列ptrを追加する. + Ruby絖strlenゃ絖ptr菴遵鐚 rb_str_cat2(VALUE str, const char* ptr) - Rubyの文字列strにCの文字列ptrを追加する.この関数の機能は - rb_str_cat(str, ptr, strlen(ptr))と同等である. + Ruby絖strC絖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)若c + 翫就鐚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の文字列を生成する. + 絎潟潟若c潟違Ruby絖. +======= + + 絎潟潟若c潟違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-ASCIIのRubyの文字列を生成する. + 潟潟若c潟違US-ASCIIRuby絖. rb_str_resize(VALUE str, long len) - Rubyの文字列のサイズをlenバイトに変更する.strの長さは前 - 以てセットされていなければならない.lenが元の長さよりも短 - い時は,lenバイトを越えた部分の内容は捨てられる.lenが元 - の長さよりも長い時は,元の長さを越えた部分の内容は保存さ - れないでゴミになるだろう.この関数の呼び出しによって - RSTRING_PTR(str)が変更されるかもしれないことに注意. + Ruby絖泣ゃ冴lenゃ紊眼鐚str激 + 篁ャ祉違鐚len激 + 鐚lenゃ莇絎鴻鐚len + 激激鐚激莇絎鴻篆絖 + с眼鐚∽違若喝冴c + RSTRING_PTR(str)紊眼羈鐚 rb_str_set_len(VALUE str, long len) - Rubyの文字列のサイズをlenバイトにセットする.strが変更可 - 能でなければ例外が発生する.RSTRING_LEN(str)とは無関係に, - lenバイトまでの内容は保存される.lenはstrの容量を越えてい - てはならない. + Ruby絖泣ゃ冴lenゃ祉鐚str紊翫 + 純с遺紊榊鐚RSTRING_LEN(str)♂≫鐚 + lenゃ障с絎鴻篆絖鐚lenstr絎拷莇 + 鐚 - 配列に対する関数 + 絲障∽ 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) -2.Rubyの機能を使う +2鐚Ruby罘純篏帥 -原理的にRubyで書けることはCでも書けます.RubyそのものがCで記 -述されているんですから,当然といえば当然なんですけど.ここで -はRubyの拡張に使うことが多いだろうと予測される機能を中心に紹 -介します. +Rubyф吾Cс吾障鐚RubyCц +菴違с鐚綵吟医吟с鐚 +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の関数へ渡される引数の数(と -形式)を決めます.argcが0以上の時は関数に引き渡す引数の数を意 -味します.16個以上の引数は使えません(が,要りませんよね,そ -んなに).実際の関数には先頭の引数としてselfが与えられますの -で,指定した数より1多い引数を持つことになります. +∽違 argc綣違C∽違御検綣違( +綵√)羆冴障鐚argc0篁ヤ∽違綣羝<綣違違 +潟障鐚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鴻綣違c鐚違蚊綵ゃ +鴻帥潟鴻菴障鐚ゃ潟鴻帥潟鴻鐚紊 +純若鴻障鐚с腥冴障障祉 +с鐚 -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 -CからRubyの機能を呼び出すもっとも簡単な方法として,文字列で -与えられたRubyのプログラムを評価する以下の関数があります. +CRuby罘純若喝冴c膂≦号鐚絖 +筝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 CからRubyのメソッドを呼び出す +2.2.3 CRuby<純若喝冴 -Cから文字列を経由せずにRubyのメソッドを呼び出すためには以下 -の関数を使います. +C絖腟宴Ruby<純若喝冴篁ヤ +∽違篏帥障鐚 VALUE rb_funcall(VALUE recv, ID mid, int argc, ...) -この関数はオブジェクトrecvのmidで指定されるメソッドを呼び出 -します.その他に引数の指定の仕方が違う以下の関数もあります. +∽違吾сrecvmidф絎<純若喝 +障鐚篁綣違絎篁鴻篁ヤ∽違障鐚 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с紙贋違с鐚絎逸ゃ潟鴻帥潟劫 +違с鐚紊у紊違筝C紊у紊違≪祉鴻с +障鐚若紊違с号障鐚 -オブジェクトのインスタンス変数を参照・更新する関数は以下の通 -りです. +吾сゃ潟鴻帥潟劫違с紙贋違∽違篁ヤ +с鐚 VALUE rb_ivar_get(VALUE obj, ID id) VALUE rb_ivar_set(VALUE obj, ID id, VALUE val) -idはrb_intern()で得られるものを使ってください. +idrb_intern()у篏帥c鐚 -定数を参照するには以下の関数を使ってください. +絎違с篁ヤ∽違篏帥c鐚 VALUE rb_const_get(VALUE obj, ID id) -定数を新しく定義するためには『2.1.3 定数定義』で紹介さ -れている関数を使ってください. +絎違違鎘臂2.1.3 絎医臂х換篁 +∽違篏帥c鐚 -3.RubyとCとの情報共有 +3鐚RubyC怨掩 -C言語とRubyの間で情報を共有する方法について解説します. +C荐茯Rubyф宴掩号ゃ茹h障鐚 -3.1 Cから参照できるRubyの定数 +3.1 CссRuby絎 -以下のRubyの定数はCのレベルから参照できます. +篁ヤRuby絎違Cсс障鐚 Qtrue Qfalse - 真偽値.QfalseはC言語でも偽とみなされます(つまり0). + 遵わQfalseC荐茯с純帥障(ゃ障0)鐚 Qnil - C言語から見た「nil」. + C荐茯荀nil鐚 -3.2 CとRubyで共有される大域変数 +3.2 CRubyу掩紊у紊 -CとRubyで大域変数を使って情報を共有できます.共有できる大域 -変数にはいくつかの種類があります.そのなかでもっとも良く使わ -れると思われるのはrb_define_variable()です. +CRubyуぇ紊違篏帥c宴掩с障鐚掩с紊у +紊違ゃ腮蕁障鐚сc鋎帥 +rb_define_variable()с鐚 void rb_define_variable(const char *name, VALUE *var) -この関数はRubyとCとで共有する大域変数を定義します.変数名が -`$'で始まらない時には自動的に追加されます.この変数の値を変 -更すると自動的にRubyの対応する変数の値も変わります. +∽違RubyCу掩紊у紊違絎臂障鐚紊医 +`$'у障菴遵障鐚紊違ゃ紊 +眼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や -setterに0を指定します. -# getterもsetterも0ならばrb_define_variable()と同じになる. +∽違C∽違chookゃ紊у紊違絎臂 +鐚紊違с∽getter鐚紊違ゃ祉 +∽setter若違鐚hook絎翫getter +setter0絎障鐚 +# gettersetter0rb_define_variable()鐚 -getterとsetterの仕様は次の通りです. +gettersetter篁罕罨<с鐚 VALUE (*getter)(ID id, VALUE *var); void (*setter)(VALUE val, ID id, VALUE *var); -それから,対応するCの変数を持たないRubyの大域変数を定義する -こともできます. その変数の値はフック関数のみによって取得・設定 -されます. +鐚絲上C紊違Ruby紊у紊違絎臂 +с障. 紊違ゃ∽違帥c緇肢┃絎 +障. void rb_define_virtual_variable(const char *name, VALUE (*getter)(), void (*setter)()) -この関数によって定義されたRubyの大域変数が参照された時には -getterが,変数に値がセットされた時にはsetterが呼ばれます. +∽違c絎臂Ruby紊у紊違с +getter鐚紊違ゃ祉setter若違障鐚 -getterとsetterの仕様は以下の通りです. +gettersetter篁罕篁ヤс鐚 (*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を指定します. +klassData吾с鴻с鐚ptr祉 +C罕篏吾ゃ潟帥с鐚mark罕篏Ruby吾 +吾с篏帥∽違с鐚с障 +0絎障鐚 -# そのような参照は勧められません. +# сс障鐚 -freeはこの構造体がもう不要になった時に呼ばれる関数です.この -関数がガーベージコレクタから呼ばれます.これが-1の場合は,単 -純に開放されます. +free罕篏筝荀c若違∽違с鐚 +∽違若若吾潟帥若違障鐚-1翫鐚 +膣障障鐚 -markおよびfree関数はGC実行中に呼び出されます. -なお, GC実行中はRubyオブジェクトのアロケーションは禁止されま -す. よって, markおよびfree関数でRubyオブジェクトのアロケーシ -ョンは行わないでください. +markfree∽違GC絎茵筝若喝冴障. +, GC絎茵筝Ruby吾с≪宴若激с潟胼罩≪ +. c, markfree∽違Ruby吾с≪宴若 +с潟茵с. -Cの構造体の割当とDataオブジェクトの生成を同時に行うマクロと -して以下のものが提供されています. +C罕篏峨Data吾с茵 +篁ヤ箴障鐚 Data_Make_Struct(klass, type, mark, free, sval) -このマクロの戻り値は生成されたDataオブジェクトです. +祉ゃData吾сс鐚 -klass, mark, freeはData_Wrap_Structと同じ働きをします.type -は割り当てるC構造体の型です.割り当てられた構造体は変数sval -に代入されます.この変数の型は (type*) である必要があります. +klass, mark, freeData_Wrap_Struct障鐚type +蚊綵C罕篏с鐚蚊綵罕篏紊sval +篁eャ障鐚紊違 (type*) с綽荀障鐚 -Dataオブジェクトからポインタを取り出すのは以下のマクロを用い -ます. +Data吾сゃ潟帥冴篁ヤ +障鐚 Data_Get_Struct(obj, type, sval) -Cの構造体へのポインタは変数svalに代入されます. +C罕篏吾ゃ潟帥紊sval篁eャ障鐚 -これらのDataの使い方はちょっと分かりにくいので,後で説明する -例題を参照してください. +Data篏帥鴻<cэ緇ц +箴蕁с鐚 -4.例題 - dbmパッケージを作る +4鐚箴蕁 - dbm宴若吾篏 -ここまでの説明でとりあえず拡張ライブラリは作れるはずです. -Rubyのextディレクトリにすでに含まれているdbmライブラリを例に -して段階的に説明します. +障с茯с≦宍ゃ篏с鐚 +Rubyextcс障dbmゃ箴 +罧級茯障鐚 -(1) ディレクトリを作る +(1) c篏 % mkdir ext/dbm -Ruby 1.1からは任意のディレクトリでダイナミックライブラリを作 -ることができるようになりました.Rubyに静的にリンクする場合に -はRubyを展開したディレクトリの下,extディレクトリの中に拡張 -ライブラリ用のディレクトリを作る必要があります.名前は適当に -選んで構いません. +Ruby 1.1篁紙cсゃゃ篏 +с障鐚Ruby潟翫 +Ruby絮c筝鐚extc筝≦宍 +ゃc篏綽荀障鐚綵 +吾ф障鐚 -(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); - /* DBMはEnumerateモジュールをインクルードする */ + /* DBMEnumerate≪吾ャ若ゃ潟若 */ 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のデータと対応するオブジェクトになるはずで -すから,Cの世界のdbmをRubyの世界に取り込む必要があります. +DBMゃdbm若帥絲上吾с +鐚C筝dbmRuby筝莨若綽荀障鐚 -dbm.cではData_Make_Structを以下のように使っています. +dbm.cсData_Make_Struct篁ヤ篏帥c障鐚 -- 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罕篏ゃ潟帥冴 +篁ヤ篏帥c障鐚 -- #define GetDBM(obj, dbmp) {\ @@ -743,14 +854,14 @@ Data } -- -ちょっと複雑なマクロですが,要するにdbmdata構造体のポインタ -の取り出しと,closeされているかどうかのチェックをまとめてい -るだけです. +<c茲с鐚荀dbmdata罕篏ゃ潟 +冴鐚closeс障 +с鐚 -DBMクラスにはたくさんメソッドがありますが,分類すると3種類の -引数の受け方があります.ひとつは引数の数が固定のもので,例と -してはdeleteメソッドがあります.deleteメソッドを実装している -fdbm_delete()はこのようになっています. +DBM鴻<純障鐚蕁3腮蕁 +綣違鴻障鐚蚊ゃ綣違違阪э箴 +delete<純障鐚delete<純絎茖 +fdbm_delete()c障鐚 -- static VALUE @@ -760,13 +871,13 @@ fdbm_delete(VALUE obj, VALUE keystr) } -- -引数の数が固定のタイプは第1引数がself,第2引数以降がメソッド -の引数となります. +綣違違阪帥ゃ膃1綣違self鐚膃2綣遺札<純 +綣違障鐚 -引数の数が不定のものはCの配列で受けるものとRubyの配列で受け -るものとがあります.dbmライブラリの中で,Cの配列で受けるもの -はDBMのクラスメソッドであるopen()です.これを実装している関 -数fdbm_s_open()はこうなっています. +綣違違筝絎CуRubyу +障鐚dbmゃ筝эCу +DBM鴻<純сopen()с鐚絎茖 +fdbm_s_open()c障鐚 -- static VALUE @@ -780,18 +891,18 @@ fdbm_s_open(int argc, VALUE *argv, VALUE klass) } -- -このタイプの関数は第1引数が与えられた引数の数,第2引数が与え -られた引数の入っている配列になります.selfは第3引数として与 -えられます. +帥ゃ∽違膃1綣違筝綣違逸膃2綣違筝 +綣違ャc障鐚self膃3綣違筝 +障鐚 -この配列で与えられた引数を解析するための関数がopen()でも使わ -れているrb_scan_args()です.第3引数に指定したフォーマットに従 -い,第4変数以降に指定したVALUEへの参照に値を代入してくれま -す. +т綣違茹f∽違open()с篏帥 +rb_scan_args()с鐚膃3綣違絎若緇 +鐚膃4紊遺札絎VALUE吾сゃ篁eャ +鐚 -引数をRubyの配列として受け取るメソッドの例には -Thread#initializeがあります.実装はこうです. +綣違Ruby<純箴 +Thread#initialize障鐚絎茖с鐚 -- static VALUE @@ -801,141 +912,141 @@ thread_initialize(VALUE thread, VALUE args) } -- -第1引数はself,第2引数はRubyの配列です. +膃1綣違self鐚膃2綣違Rubyс鐚 -** 注意事項 +** 羈鋋 -Rubyと共有はしないがRubyのオブジェクトを格納する可能性のある -Cの大域変数は以下の関数を使ってRubyインタプリタに変数の存在 -を教えてあげてください.でないとGCでトラブルを起こします. +Ruby掩Ruby吾с主醇с +C紊у紊違篁ヤ∽違篏帥cRubyゃ潟帥帥紊違絖 +鐚с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が依存関係をチェックしてくれます. +鐚cdepend<ゃ絖逸 +Makefile箴絖≫с障鐚 % gcc -MM *.c > depend -などで作ることが出来ます.あって損は無いでしょう. +т堺ャ障鐚c<с鐚 -(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 cс鐚 +vendor_ruby cゃ潟鴻若翫 +篁ヤ --vendor 激с潟鐚 ruby extconf.rb --vendor -ディレクトリをext以下に用意した場合にはRuby全体のmakeの時に -自動的にMakefileが生成されますので,このステップは不要です. +cext篁ヤ翫Ruby篏make +Makefile障э鴻筝荀с鐚 -(7) makeする +(7) make -動的リンクライブラリを生成する場合にはその場でmakeしてくださ -い.必要であれば make install でインストールされます. +潟ゃ翫眼make +鐚綽荀с make install сゃ潟鴻若障鐚 -ext以下にディレクトリを用意した場合は,Rubyのディレクトリで -makeを実行するとMakefileを生成からmake,必要によってはそのモ -ジュールのRubyへのリンクまで自動的に実行してくれます. -extconf.rbを書き換えるなどしてMakefileの再生成が必要な時はま -たRubyディレクトリでmakeしてください. +ext篁ヤc翫鐚Rubyc +make絎茵Makefilemake鐚綽荀c +吾ャ若Ruby吾潟障ц絎茵障鐚 +extconf.rb吾Makefile綽荀 +Rubycmake鐚 -拡張ライブラリはmake installでRubyライブラリのディレクトリの -下にコピーされます.もし拡張ライブラリと協調して使うRubyで記 -述されたプログラムがあり,Rubyライブラリに置きたい場合には, -拡張ライブラリ用のディレクトリの下に lib というディレクトリ -を作り,そこに 拡張子 .rb のファイルを置いておけば同時にイン -ストールされます. +≦宍ゃmake installRubyゃc +筝潟若障鐚≦宍ゃ茯帥篏帥Rubyц +菴違違鐚Rubyゃ臀翫鐚 +≦宍ゃc筝 lib c +篏鐚 ≦宍絖 .rb <ゃ臀医ゃ +鴻若障鐚 -(8) デバッグ +(8) -まあ,デバッグしないと動かないでしょうね.ext/Setupにディレ -クトリ名を書くと静的にリンクするのでデバッガが使えるようにな -ります.その分コンパイルが遅くなりますけど. +障鐚違с鐚ext/Setupc +吾潟с篏帥 +障鐚潟潟ゃ障鐚 -(9) できあがり +(9) с -後はこっそり使うなり,広く公開するなり,売るなり,ご自由にお -使いください.Rubyの作者は拡張ライブラリに関して一切の権利を -主張しません. +緇c篏帥鐚綺鐚紕蚊鐚宴 +篏帥鐚Ruby篏≦宍ゃ≪筝罔 +筝糸宍障鐚 -Appendix A. Rubyのソースコードの分類 +Appendix A. Ruby純若鴻潟若蕁 -Rubyのソースはいくつかに分類することが出来ます.このうちクラ -スライブラリの部分は基本的に拡張ライブラリと同じ作り方になっ -ています.これらのソースは今までの説明でほとんど理解できると -思います. +Ruby純若鴻ゃ蕁堺ャ障鐚< +鴻ゃ堺≦宍ゃ篏鴻 +障鐚純若鴻篁障с茯с祉茹cс +障鐚 -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罕茹f + 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 : -正規表現エンジン (鬼車) +罩h頫憗潟吾 (薔取) regex.c regcomp.c regenc.c @@ -959,15 +1070,15 @@ Ruby regparse.c regsyntax.c -ユーティリティ関数 +若ci∽ - debug.c : Cデバッガ用のデバッグシンボル - dln.c : 動的ローディング - st.c : 汎用ハッシュ表 - strftime.c : 時刻整形 - util.c : その他のユーティリティ + debug.c : C違激潟 + dln.c : 若c潟 + st.c : 羆激ヨ; + strftime.c : 紙翫就 + util.c : 篁若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 : 潟潟若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鴻鐚 + 腟粋昭水茵憗Cruby.h荐菴違Rу障罕 + 篏с鐚VALUEc鴻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≪祉鴻c鐚freeф絎 + ∽違若違鐚障鐚ゃ潟帥若帥篁Ruby + 吾с翫鐚mark絎∽違с若綽荀 + 鐚 Data_Make_Struct(klass, type, mark, free, sval) - type型のメモリをmallocし,変数svalに代入した後,それをカプセ - ル化したデータを返すマクロ. + type<≪malloc鐚紊sval篁eャ緇鐚 + 若帥菴鐚 Data_Get_Struct(data, type, sval) - dataからtype型のポインタを取り出し変数svalに代入するマクロ. + datatypeゃ潟帥冴紊sval篁eャ鐚 -** 型チェック +** с 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) - オブジェクトをモジュール(で定義されているメソッド)で拡張する. + 吾с≪吾ャ若(у臂<純)ф≦宍鐚 -** 大域変数定義 +** 紊у紊医臂 void rb_define_variable(const char *name, VALUE *var) - RubyとCとで共有するグローバル変数を定義する.変数名が`$'で - 始まらない時には自動的に追加される.nameとしてRubyの識別子 - として許されない文字(例えば` ')を含む場合にはRubyプログラ - ムからは見えなくなる. + RubyCу掩違若紊違絎臂鐚紊医`$' + 紮障菴遵鐚nameRuby茘ュ + 荐宴絖(箴` ')翫Ruby違 + 荀鐚 void rb_define_readonly_variable(const char *name, VALUE *var) - RubyとCとで共有するread onlyのグローバル変数を定義する. - read onlyであること以外はrb_define_variable()と同じ. + RubyCу掩read only違若紊違絎臂鐚 + read onlyс篁ュrb_define_variable()鐚 void rb_define_virtual_variable(const char *name, VALUE (*getter)(), void (*setter)()) - 関数によって実現されるRuby変数を定義する.変数が参照された - 時にはgetterが,変数に値がセットされた時にはsetterが呼ばれ - る. + ∽違c絎憗Ruby紊違絎臂鐚紊違с + getter鐚紊違ゃ祉setter若違 + 鐚 void rb_define_hooked_variable(const char *name, VALUE *var, VALUE (*getter)(), void (*setter)()) - 関数によってhookのつけられたグローバル変数を定義する.変数 - が参照された時にはgetterが,関数に値がセットされた時には - setterが呼ばれる.getterやsetterに0を指定した時にはhookを - 指定しないのと同じ事になる. + ∽違chookゃ違若紊違絎臂鐚紊 + сgetter鐚∽違ゃ祉 + setter若違鐚gettersetter0絎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) - メソッドを定義する.argcはselfを除く引数の数.argcが-1の時, - 関数には引数の数(selfを含まない)を第1引数, 引数の配列を第2 - 引数とする形式で与えられる(第3引数はself).argcが-2の時, - 第1引数がself, 第2引数がargs(argsは引数を含むRubyの配列)と - いう形式で与えられる. - +<<<<<<< HEAD + <純絎臂鐚argcselfゃ鏁違逸argc-1, + ∽違綣違(self障)膃1綣, 綣違膃2 + 綣違綵√т(膃3綣違self)鐚argc-2, + 膃1綣違self, 膃2綣違args(args綣違Ruby) + 綵√т鐚 + +======= + <純絎臂鐚argcselfゃ鏁違逸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綵√т絎若緇c綣 + 違茹c鐚膓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)障ц┗ + 潟障鐚緇c鐚若絖膓 + 3ゃVALUE吾с臀鏆荀障鐚緇 + 紊違祉障鐚紊違吾с篁cNULL絎 + с鐚翫緇綣違ゃ障鐚鐚 + ュ遵違ャ紊違ゃ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) - クラスの名前を返す(デバッグ用).クラスが名前を持たない時に - は, 祖先を遡って名前を持つクラスの名前を返す. + 鴻菴(亥)鐚鴻 + , 腑<cゃ鴻菴鐚 int rb_respond_to(VALUE obj, ID id) - objがidで示されるメソッドを持つかどうかを返す. + objidхず<純ゃ菴鐚 -** インスタンス変数 +** ゃ潟鴻帥潟劫 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をレシーバ,argcとargvを引数 - としてmidメソッドを呼び出す.funcは第一引数にyieldされた値, - 第二引数にdata2を受け取る.複数の値がyieldされた場合(Cでは - rb_yield_values()とrb_yield_values2(), rb_yield_splat()), - data2はArrayとしてパックされている.第三, 第四引数のargcと - argvによってyieldされた値を取り出すことができる. + func荐絎鐚obj激若鐚argcargv綣 + mid<純若喝冴鐚func膃筝綣違yieldわ + 膃篋綣違data2鐚茲違ゃyield翫(Cс + rb_yield_values()rb_yield_values2(), rb_yield_splat())鐚 + data2Array鐚膃筝, 膃綣違argc + argvcyieldゃ冴с鐚 [OBSOLETE] VALUE rb_iterate(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2) - func2をブロックとして設定し, func1をイテレータとして呼ぶ. - func1には arg1が引数として渡され, func2には第1引数にイテレー - タから与えられた値, 第2引数にarg2が渡される. - - 1.9でrb_iterateを使う場合は, func1の中でRubyレベルのメソッド - を呼び出さなければならない. - 1.9でobsoleteとなった. 代わりにrb_block_callが用意された. +<<<<<<< HEAD + func2荐絎, func1ゃ若帥若駈 + func1 arg1綣違羝<, func2膃1綣違ゃ + 帥筝, 膃2綣違arg2羝<鐚 + + 1.9rb_iterate篏帥翫, func1筝Ruby<純 + 若喝冴違. + 1.9obsoletec. 篁crb_block_call. +======= + func2荐絎, func1ゃ若帥若駈 + func1 arg1綣違羝<, func2膃1綣違ゃ + 帥筝, 膃2綣違arg2羝<鐚 + + 1.9rb_iterate篏帥翫, func1筝Ruby<純 + 若喝冴違. + 1.9obsoletec. 篁crb_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) - 関数func1をarg1を引数に呼び出す.func1の実行中に例外が発生 - した時には func2をarg2を引数として呼ぶ.戻り値は例外が発生 - しなかった時はfunc1の戻り値, 例外が発生した時にはfunc2の戻 - り値である. + ∽func1arg1綣違若喝冴鐚func1絎茵筝箴紊榊 + func2arg2綣違若駈祉ゃ箴紊榊 + cfunc1祉, 箴紊榊func2 + ゃс鐚 VALUE rb_ensure(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2) - 関数func1をarg1を引数として実行し, 実行終了後(たとえ例外が - 発生しても) func2をarg2を引数として実行する.戻り値はfunc1 - の戻り値である(例外が発生した時は戻らない). + ∽func1arg1綣違絎茵, 絎茵腟篋緇(箴紊 + 榊) func2arg2綣違絎茵鐚祉ゃfunc1 + 祉ゃс(箴紊榊祉)鐚 VALUE rb_protect(VALUE (*func) (VALUE), VALUE arg, int *state) - 関数funcをargを引数として実行し, 例外が発生しなければその戻 - り値を返す.例外が発生した場合は, *stateに非0をセットして - Qnilを返す. + ∽funcarg綣違絎茵, 箴紊榊違 + ゃ菴鐚箴紊榊翫, *state0祉 + 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 菴遵 + с鐚ゃ荀篁c鐚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 菴遵с + 鐚<ゃ荀篁c鐚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をインクルードして型typeのchar単位サイ - ズを調べる.typeが定義されている時そのサイズを返す.定義さ - れていないときはnilを返す. + <ゃheaderゃ潟若typechar篏泣 + 冴茯帥鴻鐚type絎臂泣ゃ冴菴鐚絎臂 + nil菴鐚 create_makefile(target) - 拡張ライブラリ用のMakefileを生成する.この関数を呼ばなけれ - ばそのライブラリはコンパイルされない.targetはモジュール名 - を表す. + ≦宍ゃMakefile鐚∽違若違 + 違ゃ潟潟ゃ鐚target≪吾ャ若 + 茵鐚 find_executable(command, path) - コマンドcommandをFile::PATH_SEPARATORで区切られたパス名の - リストpathから探す.pathがnilまたは省略された場合は,環境 - 変数PATHの値を使用する.実行可能なコマンドが見つかった場合 - はパスを含むファイル名,見つからなかった場合はnilを返す. + 潟潟commandFile::PATH_SEPARATORу阪劫 + 鴻path「鐚pathnil障ャ翫鐚医 + 紊PATHゃ篏睡鐚絎茵純潟潟荀ゃc翫 + 鴻<ゃ鐚荀ゃc翫nil菴鐚 with_config(withval[, default=nil]) - コマンドライン上の--with-で指定されたオプション値 - を得る. + 潟潟ゃ割--with-ф絎激с喝 + 緇鐚 enable_config(config, *defaults) disable_config(config, *defaults) - コマンドライン上の--enable-または - --disable-で指定された真偽値を得る. - --enable-が指定されていた場合はtrue, - --disable-が指定されていた場合はfalseを返す. - どちらも指定されていない場合は,ブロックつきで呼び出されて - いる場合は*defaultsをyieldした結果,ブロックなしなら - *defaultsを返す. + 潟潟ゃ割--enable-障 + --disable-ф絎遵ゃ緇鐚 + --enable-絎翫true鐚 + --disable-絎翫false菴鐚 + <絎翫鐚ゃу若喝冴 + 翫*defaultsyield腟鐚 + *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ф絎c + $CFLAGS $LDFLAGS 菴遵鐚--with--dir=/path --with--include=/path/include --with--lib=/path/lib - と等価である.追加された include ディレクトリと lib ディレ - クトリの配列を返す. ([include_dir, lib_dir]) + 膈箴<с鐚菴遵 include c lib c + 菴鐚 ([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: -- cgit v1.2.3