php IHDR w Q )Ba pHYs sRGB gAMA a IDATxMk\U s&uo,mD )Xw+e?tw.oWp;QHZnw`gaiJ9̟灙a=nl[ ʨ G;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ w@H;@ q$ y H@E7j 1j+OFRg}ܫ;@Ea~ j`u'o> j- $_q?qS XzG'ay
files >> /proc/self/root/usr/share/doc/ruby-devel-1.8.7.374/ |
files >> //proc/self/root/usr/share/doc/ruby-devel-1.8.7.374/README.EXT.ja |
.\" README.EXT.ja - -*- Text -*- created at: Mon Aug 7 16:45:54 JST 1995 Rubyγĥ饤֥κޤ 1μ CѿˤϷꡤǡˤϷޤǤ顤 ȤХݥintѿȡͤȤƼ 갷ޤդRubyѿˤϷʤǡ˷ ΰ㤤ΤᡤCRubyߤѴʤСߤ ǡǤޤ RubyΥǡVALUEȤCηɽޤVALUEΥǡ ϤΥǡפʬΤäƤޤΥǡפ Τϥǡ(֥)μºݤι¤̣ƤơRuby Υ饹ȤϤޤäΤǤ VALUECˤȤäựΤǡФˤ (1) VALUEΥǡפΤ (2) VALUECΥǡѴ ξɬפǤ(1)˺ȴְäǡѴԤ ơǰץबcore dumpޤ 1.1 ǡ Rubyˤϥ桼ȤǽΤʲΥפޤ T_NIL nil T_OBJECT ̾Υ֥ T_CLASS 饹 T_MODULE ⥸塼 T_FLOAT ư T_STRING ʸ T_REGEXP ɽ T_ARRAY T_FIXNUM Fixnum(31bitĹ) T_HASH Ϣ T_STRUCT (Ruby)¤ T_BIGNUM ¿Ĺ T_FILE T_TRUE T_FALSE T_DATA ǡ T_SYMBOL ܥ ¾ѤƤʲΥפޤ T_ICLASS T_MATCH T_UNDEF T_VARMAP T_SCOPE T_NODE ۤȤɤΥפCι¤ΤǼƤޤ 1.2 VALUEΥǡפå ruby.hǤTYPE()ȤޥƤơVALUEΥǡ פΤ뤳ȤޤTYPE()ޥϾǾҲ𤷤T_XXXX η֤ޤVALUEΥǡפ˱ƽ ˤϡTYPE()ͤʬ뤳Ȥˤʤޤ switch (TYPE(obj)) { case T_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Υǡפɤå 뤿ˤϡδؿȤޤ FIXNUMNIL˴ؤƤϤ®Ƚ̥ޥѰդƤޤ FIXNUM_P(obj) NIL_P(obj) 1.3 VALUECΥǡѴ ǡפT_NIL, T_FALSE, T_TRUEǤǡϤ줾 nil, false, trueǤΥǡפΥ֥ȤϤҤ ĤĤ¸ߤޤ ǡפT_FIXNUMλ31bitΥ FIXNUMCѴ뤿ˤϥޥFIX2INT()פ ޤ줫顤FIXNUM˸¤餺RubyΥǡѴ NUM2INT()פȤޥޤΥޥϥǡ פΥå̵ǻȤޤ(ѴǤʤˤ㳰 ȯ)Ʊͤ˥å̵ǻȤѴޥdouble ФNUM2DBL()פޤ char* Ф硢version 1.6 ǤϡSTR2CSTR()פ ޥȤäƤޤ to_str() ˤۤ Ѵ̤ GC ǽ뤿ᡢversion 1.7 ʹߤǤ obsolete Ȥʤꡢ StringValue() StringValuePtr() Ȥ侩ƤޤStringValue(var) var String Ǥв⤻Ǥʤ var var.to_str() η̤ ֤ޥStringValuePtr(var) Ʊͤ var ֤ Ƥ var ʸɽФ char* ֤ޥǤvar Ƥľ֤Τǡvar lvalue Ǥɬפ ޤ ʳΥǡפбCι¤Τޤб 빽¤ΤΤVALUEϤΤޤޥ㥹(Ѵ)й¤Τ ݥѴǤޤ ¤Τϡstruct RXxxxxפȤ̾ruby.hƤ 㤨ʸϡstruct RStringפǤºݤ˻Ȥǽ Τʸ餤Ȼפޤ ruby.hǤϹ¤Τإ㥹ȤޥRXXXXX()(ʸ ˤ)Ȥ̾Ƥޤ(: RSTRING()) 㤨СʸstrĹ뤿ˤϡRSTRING(str)->lenפ ʸstrchar*Ȥ뤿ˤϡRSTRING(str)->ptr Ȥޤξˤϡ줾RARRAY(ary)->lenס RARRAY(ary)->ptrפȤʤޤ 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˼ޤ뼫 INT2NUM() ǤդVALUE INT2NUM()FIXNUMϰϤ˼ޤʤ硤BignumѴ Ƥޤ(٤) 1.5 RubyΥǡ Ҥ٤̤ꡤRubyι¤ΤƤι ԤȤϴޤǡRubyΥǡˤ RubyѰդƤؿѤƤ ǤϤäȤȤǤʸ/ ؿޤ(ǤϤʤǤ) ʸФؿ rb_str_new(const char *ptr, long len) Rubyʸ롥 rb_str_new2(const char *ptr) CʸRubyʸ롥δؿεǽ rb_str_new(ptr, strlen(ptr))ƱǤ롥 rb_tainted_str_new(const char *ptr, long len) ޡղä줿Rubyʸ롥 Υǡ˴Ťʸˤϱޡղä٤ Ǥ롥 rb_tainted_str_new2(const char *ptr) Cʸޡղä줿Rubyʸ롥 rb_str_cat(VALUE str, const char *ptr, long len) RubyʸstrlenХȤʸptrɲä롥 Фؿ rb_ary_new() Ǥ0롥 rb_ary_new2(long len) Ǥ0롥lenʬΰ餫 ƤƤ rb_ary_new3(long n, ...) ǻꤷnǤޤ롥 rb_ary_new4(long n, VALUE *elts) ͿnǤ롥 rb_ary_push(VALUE ary, VALUE val) rb_ary_pop(VALUE ary) rb_ary_shift(VALUE ary) rb_ary_unshift(VALUE ary, VALUE val) ArrayƱ̾ΥåɤƱƯؿ1ɬ ǤʤФʤʤ 2RubyεǽȤ ŪRubyǽ뤳ȤCǤޤRubyΤΤCǵ ҤƤǤ顤ȤʤǤɡ Rubyγĥ˻ȤȤ¿ͽ¬뵡ǽ濴˾ 𤷤ޤ 2.1 Ruby˵ǽɲä RubyƤؿȤRubyץ˿ǽ ɲä뤳ȤǤޤRubyǤϰʲεǽɲäؿ Ƥޤ * 饹⥸塼 * åɡðۥåɤʤ * ǤϽ˾Ҳ𤷤ޤ 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 å/ðۥå åɤðۥåɤˤϰʲδؿȤޤ void rb_define_method(VALUE klass, const char *name, VALUE (*func)(), int argc) void rb_define_singleton_method(VALUE object, const char *name, VALUE (*func)(), int argc) ǰΤȡðۥåɡפȤϡΥ֥ ȤФƤͭʥåɤǤRubyǤϤ褯Smalltalkˤ 륯饹åɤȤơ饹ФðۥåɤȤ ޤ δؿ argcȤCδؿϤο( )ޤargc0ʾλϴؿ˰Ϥο ̣ޤ16İʾΰϻȤޤ(פޤ͡ ʤ)ºݤδؿˤƬΰȤselfͿޤ ǡꤷ1¿ĤȤˤʤޤ argcλϰοǤϤʤꤷȤˤʤޤ argc-1λϰϤޤargc-2λϰ RubyȤϤޤ åɤؿϤ⤦ĤޤҤȤĤprivate åɤؿǡrb_define_method()ƱǤ void rb_define_private_method(VALUE klass, const char *name, VALUE (*func)(), int argc) privateåɤȤϴؿǤƤӽФȤνʤ ɤǤ ⤦ҤȤĤϥ⥸塼ؿΤǤ⥸塼ؿ Ȥϥ⥸塼ðۥåɤǤꡤƱ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)뤿 δؿϰʲ̤Ǥ void rb_define_global_function(const char *name, VALUE (*func)(), int argc) åɤ̾뤿δؿϰʲ̤Ǥ void rb_define_alias(VALUE module, const char* new, const char* old); 饹åallocateꤹ뤿δؿ ʲ̤Ǥ void rb_define_alloc_func(VALUE klass, VALUE (*func)(VALUE klass)); void rb_undef_alloc_func(VALUE klass); funcϥ饹ȤƼäơƤ줿 ֤ʤƤϤʤޤΥϡ ʤɤޤޤʤǤֶפΤޤޤˤƤۤ 褤Ǥ礦 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ƤӽФ ˡ1.5 RubyΥǡ٤ǰҲ𤷤褦ʴؿ ȤСRubyεǽ¸ƤؿľܸƤӽФȤ ޤ # Τ褦ʴؿΰɽϤޤΤȤޤ # 뤷ʤǤ͡ ʳˤRubyεǽƤӽФˡϤĤޤ 2.2.1 RubyΥץeval CRubyεǽƤӽФäȤñˡȤơʸ Ϳ줿RubyΥץɾʲδؿޤ VALUE rb_eval_string(const char *str) ɾϸߤδĶǹԤޤĤޤꡤߤΥѿ ʤɤѤޤ 2.2.2 IDޤϥܥ CʸͳRubyΥåɤƤӽФȤǤ ˡRubyץǥåɤѿ̾ꤹ ˻ȤƤIDˤĤƤޤ礦 IDȤѿ̾å̾ɽǤRubyǤIDб ֥ȤȤƥܥ(Symbol)ꡤ :̻ ǥǤޤC餳뤿ˤϴؿ rb_intern(const char *name) ȤޤRubyȤͿ줿ܥ(ޤʸ )IDѴˤϰʲδؿȤޤ rb_to_id(VALUE symbol) ID饷ܥ뤿ˤϰʲΥޥȤޤ VALUE ID2SYM(ID id) ܥ뤫ID뤿ˤϰʲΥޥȤޤ ID SYM2ID(VALUE symbol) 2.2.3 CRubyΥåɤƤӽФ CʸͳRubyΥåɤƤӽФˤϰʲ δؿȤޤ VALUE rb_funcall(VALUE recv, ID mid, int argc, ...) δؿϥ֥recvmidǻꤵåɤƤӽ ޤ¾˰λλ㤦ʲδؿ⤢ޤ VALUE rb_funcall2(VALUE recv, ID mid, int argc, VALUE *argv) VALUE rb_apply(VALUE recv, ID mid, VALUE args) applyˤϰȤRubyͿޤ 2.2.4 ѿ// CؿȤäƻȡǤΤϡ ǤѿϰΤΤCѿȤƥǤ ޤѿȤˡϸƤޤ ֥ȤΥѿȡؿϰʲ Ǥ VALUE rb_ivar_get(VALUE obj, ID id) VALUE rb_ivar_set(VALUE obj, ID id, VALUE val) idrb_intern()ΤȤäƤ ȤˤϰʲδؿȤäƤ VALUE rb_const_get(VALUE obj, ID id) 뤿ˤϡ2.1.3 ٤ǾҲ ƤؿȤäƤ 3RubyCȤξͭ CRubyδ֤ǾͭˡˤĤƲ⤷ޤ 3.1 C黲ȤǤRuby ʲRubyCΥ٥뤫黲ȤǤޤ Qtrue Qfalse ͡QfalseCǤȤߤʤޤ(Ĥޤ0) Qnil C줫鸫nilס 3.2 CRubyǶͭѿ CRubyѿȤäƾͭǤޤͭǤ ѿˤϤĤμबޤΤʤǤäȤɤȤ ȻפΤrb_define_variable()Ǥ void rb_define_variable(const char *name, VALUE *var) δؿRubyCȤǶͭѿޤѿ̾ `$'ǻϤޤʤˤϼưŪɲäޤѿͤ ȼưŪRubyбѿͤѤޤ ޤRuby¦ϹǤʤѿ⤢ޤread only ѿϰʲδؿޤ void rb_define_readonly_variable(const char *name, VALUE *var) ѿ¾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δؿˤäƼ¸Rubyѿ ؿޤ void rb_define_virtual_variable(const char *name, VALUE (*getter)(), void (*setter)()) δؿˤä줿RubyѿȤ줿ˤ getterѿͤåȤ줿ˤsetterƤФޤ gettersetterλͤϰʲ̤Ǥ (*getter)(ID id, void *data, struct global_entry* entry); (*setter)(VALUE val, ID id, void *data, struct global_entry* entry); 3.3 CΥǡRuby֥Ȥˤ C줿ǡ(¤)RubyΥ֥ȤȤ 갷礬ꤨޤΤ褦ʾˤϡDataȤ Ruby֥ȤCι¤(ؤΥݥ)ळȤRuby ֥ȤȤƼ갷褦ˤʤޤ Data֥Ȥƹ¤ΤRuby֥Ȥ˥ץ 뤿ˤϡʲΥޥȤޤ Data_Wrap_Struct(klass, mark, free, ptr) Υޥͤ줿Data֥ȤǤ klassϤData֥ȤΥ饹Ǥptrϥץ벽 Cι¤ΤؤΥݥǤmarkϤι¤ΤRubyΥ֥ ȤؤλȤ˻ȤؿǤΤ褦ʻȤޤޤʤ ˤ0ꤷޤ # Τ褦ʻȤϴޤ freeϤι¤Τ⤦פˤʤä˸ƤФؿǤ ؿ١쥯ƤФޤ줬-1ξϡñ ˳ޤ Cι¤ΤγData֥ȤƱ˹Ԥޥ ưʲΤΤƤޤ Data_Make_Struct(klass, type, mark, free, sval) Υޥͤ줿Data֥ȤǤ klass, mark, freeData_Wrap_StructƱƯޤtype ϳƤC¤ΤηǤƤ줿¤Τѿsval ޤѿη (type*) Ǥɬפޤ Data֥ȤݥФΤϰʲΥޥѤ ޤ Data_Get_Struct(obj, type, sval) Cι¤ΤؤΥݥѿsvalޤ DataλȤϤäʬˤΤǡ ȤƤ 4 - dbmѥå ޤǤǤȤꤢĥ饤֥ϺϤǤ Rubyextǥ쥯ȥˤǤ˴ޤޤƤdbm饤֥ ʳŪޤ (1) ǥ쥯ȥ % mkdir ext/dbm Ruby 1.1ǤդΥǥ쥯ȥǥʥߥå饤֥ 뤳ȤǤ褦ˤʤޤRubyŪ˥ RubyŸǥ쥯ȥβextǥ쥯ȥ˳ĥ 饤֥ѤΥǥ쥯ȥɬפޤ̾Ŭ ǹޤ (2) ߷פ ޤʤǤɡɤǽ¸뤫ɤޤ פɬפޤɤʥ饹Ĥ뤫Υ饹ˤ ɤʥåɤ뤫饹ʤɤˤĤ߷ ޤ (3) Cɤ ĥ饤֥ΤȤʤCΥޤCΥ ҤȤĤλˤϡ֥饤֥̾.cפ֤ɤǤ礦C Υʣξˤϵդˡ֥饤֥̾.cפȤե ̾ɬפޤ֥ȥեȥ⥸塼 Ū֥饤֥̾.oפȤե Ȥͤ뤫Ǥ Rubyϳĥ饤֥ɤˡInit_饤֥̾פ ؿưŪ˼¹Ԥޤdbm饤֥ξInit_dbm Ǥδؿǥ饹⥸塼롤åɡʤɤ Ԥޤdbm.cѤޤ -- Init_dbm() { /* DBM饹 */ cDBM = rb_define_class("DBM", rb_cObject); /* DBMEnumerate⥸塼롼ɤ */ rb_include_module(cDBM, rb_mEnumerable); /* DBM饹Υ饹åopen(): CǼ */ rb_define_singleton_method(cDBM, "open", fdbm_s_open, -1); /* DBM饹Υåclose(): Ϥʤ */ rb_define_method(cDBM, "close", fdbm_close, 0); /* DBM饹Υå[]: 1 */ rb_define_method(cDBM, "[]", fdbm_fetch, 1); : /* DBMǡǼ륤ѿ̾ΤID */ id_dbm = rb_intern("dbm"); } -- DBM饤֥dbmΥǡб륪֥ȤˤʤϤ 顤CdbmRuby˼ɬפޤ dbm.cǤData_Make_StructʲΤ褦˻ȤäƤޤ -- struct dbmdata { int di_size; DBM *di_dbm; }; obj = Data_Make_Struct(klass, struct dbmdata, 0, free_dbm, dbmp); -- Ǥdbmstruct¤ΤؤΥݥData˥ץ벽Ƥ ޤDBM*ľܥץ벽ʤΤclose()ν ƤΤȤǤ Data֥Ȥdbmstruct¤ΤΥݥФ ˰ʲΥޥȤäƤޤ -- #define GetDBM(obj, dbmp) {\ Data_Get_Struct(obj, struct dbmdata, dbmp);\ if (dbmp->di_dbm == 0) closed_dbm();\ } -- äʣʥޥǤפdbmdata¤ΤΥݥ μФȡcloseƤ뤫ɤΥåޤȤƤ Ǥ DBM饹ˤϤåɤޤʬह3 μޤҤȤĤϰοΤΤǡ ƤdeleteåɤޤdeleteåɤƤ fdbm_delete()ϤΤ褦ˤʤäƤޤ -- static VALUE fdbm_delete(obj, keystr) VALUE obj, keystr; { : } -- οΥפ1self2ʹߤå ΰȤʤޤ οΤΤCǼΤRubyǼ ΤȤޤdbm饤֥ǡCǼ DBMΥ饹åɤǤopen()ǤƤ fdbm_s_open()ϤʤäƤޤ -- static VALUE fdbm_s_open(argc, argv, klass) int argc; VALUE *argv; VALUE klass; { : if (rb_scan_args(argc, argv, "11", &file, &vmode) == 1) { mode = 0666; /* default value */ } : } -- Υפδؿ1Ϳ줿ο2Ϳ 줿äƤˤʤޤself3ȤͿ ޤ Ϳ줿Ϥ뤿δؿopen()ǤȤ Ƥrb_scan_args()Ǥ3˻ꤷեޥåȤ 4ѿʹߤ˻ꤷѿͤƤޤ եޥåȤϡ1ʸܤάǤʤο2ʸܤ άǤο3ʸܤб̵꤬ޤΰ 뤫ɤ"*"Ǥ2ʸܤ3ʸܤϾάǤ dbm.cǤϡեޥåȤ"11"Ǥ顤Ϻ1 ǡ2ĤޤǵȤ̣ˤʤޤάƤ ѿͤnil(CΥ٥ǤQnil)ˤʤޤ RubyǰΤindexesޤϤ Ǥ -- static VALUE fdbm_indexes(obj, args) VALUE obj, args; { : } -- 1self2RubyǤ ** ջ RubyȶͭϤʤRubyΥ֥ȤǼǽΤ CѿϰʲδؿȤäRubyץѿ¸ ƤƤǤʤGCǥȥ֥ޤ void rb_global_variable(VALUE *var) (4) extconf.rbѰդ Makefileοˤʤextconf.rbȤե ޤextconf.rbϥ饤֥ΥѥɬפʾΥ ʤɤԤȤŪǤޤ require 'mkmf' extconf.rbƬ֤ޤextconf.rbǤϰʲRuby ȤȤޤ have_library(lib, func): 饤֥¸ߥå have_func(func, header): ؿ¸ߥå have_header(header): إåե¸ߥå create_makefile(target): Makefile ʲѿȤȤǤޤ $CFLAGS: ѥɲŪ˻ꤹե饰(-Oʤ) $CPPFLAGS: ץץåɲŪ˻ꤹե饰(-I-Dʤ) $LDFLAGS: ɲŪ˻ꤹե饰(-Lʤ) $objs: 륪֥ȥե̾Υꥹ ֥ȥեΥꥹȤϡ̾ϥե ƼưŪޤmakeǥ褦 Ū˻ꤹɬפޤ 饤֥ѥ뤹郎·鷺Υ饤֥ ѥ뤷ʤˤcreate_makefileƤФʤMakefile 줺ѥԤޤ (5) dependѰդ ⤷ǥ쥯ȥdependȤե뤬¸ߤС Makefile¸طåƤޤ % gcc -MM *.c > depend ʤɤǺ뤳Ȥޤä»̵Ǥ礦 (6) Makefile Makefileºݤ뤿ˤ ruby extconf.rb Ȥޤextconf.rb require 'mkmf' ιԤʤˤϥ顼 ˤʤޤΤǡɲä ruby -r mkmf extconf.rb ȤƤ site_ruby ǥ쥯ȥǤʤ vendor_ruby ǥ쥯ȥ˥ȡ뤹ˤ ʲΤ褦 --vendor ץäƤ ruby extconf.rb --vendor ǥ쥯ȥextʲѰդˤRubyΤmakeλ ưŪMakefileޤΤǡΥƥåפפǤ (7) make ưŪ饤֥ˤϤξmakeƤ ɬפǤ make install ǥȡ뤵ޤ extʲ˥ǥ쥯ȥѰդϡRubyΥǥ쥯ȥ make¹ԤMakefilemakeɬפˤäƤϤΥ 塼RubyؤΥޤǼưŪ˼¹ԤƤޤ extconf.rbʤɤMakefileκɬפʻϤ Rubyǥ쥯ȥmakeƤ ĥ饤֥make installRuby饤֥Υǥ쥯ȥ ˥ԡޤ⤷ĥ饤֥ȶĴƻȤRubyǵ Ҥ줿ץबꡤRuby饤֥֤ˤϡ ĥ饤֥ѤΥǥ쥯ȥβ lib Ȥǥ쥯ȥ ꡤ ĥ .rb Υե֤ƤƱ˥ ȡ뤵ޤ (8) ǥХå ޤǥХåʤưʤǤ礦͡ext/Setup˥ǥ ȥ̾Ū˥ΤǥǥХåȤ褦ˤ ޤʬѥ뤬٤ʤޤɡ (9) Ǥ ϤäȤʤꡤʤꡤʤꡤͳˤ ȤRubyκԤϳĥ饤֥˴ؤưڤθ ĥޤ Appendix A. RubyΥɤʬ RubyΥϤĤʬह뤳ȤޤΤ 饤֥ʬϴŪ˳ĥ饤֥Ʊˤʤ ƤޤΥϺޤǤǤۤȤǤ פޤ RubyΥ class.c error.c eval.c gc.c object.c parse.y variable.c 桼ƥƥؿ dln.c regex.c st.c util.c Rubyޥɤμ dmyext.c inits.c main.c ruby.c version.c 饹饤֥ array.c bignum.c compar.c dir.c enum.c file.c hash.c io.c marshal.c math.c numeric.c pack.c prec.c process.c random.c range.c re.c signal.c sprintf.c string.c struct.c time.c Appendix B. ĥѴؿե C줫RubyεǽѤAPIϰʲ̤Ǥ롥 ** VALUE Ruby֥Ȥɽ뷿ɬפ˱ƥ㥹ȤѤ롥 Ȥ߹߷ɽCηruby.h˵ҤƤRǻϤޤ빽¤ ΤǤ롥VALUE˥㥹Ȥ뤿RǻϤޤ빽¤ ̾ʸˤ̾ΥޥѰդƤ롥 ** ѿ Qnil : nil֥ Qtrue : true֥(Υǥե) Qfalse : false֥ ** CǡΥץ벽 Data_Wrap_Struct(VALUE klass, void (*mark)(), void (*free)(), void *sval) CǤդΥݥץ벽Ruby֥Ȥ֤ ΥݥRuby饢ʤʤäfreeǻꤷ ؿƤФ롥ޤΥݥλؤǡ¾Ruby ȤؤƤ硤mark˻ꤹؿǥޡɬ 롥 Data_Make_Struct(klass, type, mark, free, sval) typeΥmallocѿsval塤ץ 벽ǡ֤ޥ Data_Get_Struct(data, type, sval) datatypeΥݥФѿsvalޥ ** å TYPE(value) FIXNUM_P(value) NIL_P(value) void Check_Type(VALUE value, int type) void Check_SafeStr(VALUE value) ** Ѵ FIX2INT(value) INT2FIX(i) NUM2INT(value) INT2NUM(i) NUM2DBL(value) rb_float_new(f) StringValue(value) StringValuePtr(value) StringValueCStr(value) rb_str_new2(s) ** 饹/⥸塼 VALUE rb_define_class(const char *name, VALUE super) superΥ֥饹ȤƿRuby饹롥 VALUE rb_define_class_under(VALUE module, const char *name, VALUE super) superΥ֥饹ȤƿRuby饹module Ȥ롥 VALUE rb_define_module(const char *name) Ruby⥸塼롥 VALUE rb_define_module_under(VALUE module, const char *name) Ruby⥸塼moduleȤ롥 void rb_include_module(VALUE klass, VALUE 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ץ फϸʤʤ롥 void rb_define_readonly_variable(const char *name, VALUE *var) RubyCȤǶͭread onlyΥХѿ롥 read onlyǤ뤳Ȱʳrb_define_variable()Ʊ void rb_define_virtual_variable(const char *name, VALUE (*getter)(), void (*setter)()) ؿˤäƼ¸Rubyѿ롥ѿȤ줿 ˤgetterѿͤåȤ줿ˤsetterƤФ 롥 void rb_define_hooked_variable(const char *name, VALUE *var, VALUE (*getter)(), void (*setter)()) ؿˤähookΤĤ줿Хѿ롥ѿ Ȥ줿ˤgetterؿͤåȤ줿ˤ setterƤФ롥gettersetter0ꤷˤhook ꤷʤΤƱˤʤ롥 void rb_global_variable(VALUE *var) 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) Ϳ롥 rb_define_private_method(VALUE klass, const char *name, VALUE (*func)(), int argc) privateåɤ롥rb_define_method()Ʊ rb_define_singleton_method(VALUE klass, const char *name, VALUE (*func)(), int argc) ðۥåɤ롥rb_define_method()Ʊ rb_scan_args(int argc, VALUE *argv, const char *fmt, ...) argc, argvͿ줿ʬ롥fmtɬܰο, ղðο, Ĥΰ뤫ꤹʸ, " *"ȤǤ롥 2 ܤο"*"Ϥ줾ά ǽǤ롥ɬܰĤʤ0ꤹ롥3 ߤѿؤΥݥ, Ǥѿ˳Ǽ롥 ղðбͿƤʤѿQnil 롥 ** RubyåɸƤӽФ VALUE rb_funcall(VALUE recv, ID mid, int narg, ...) åɸƤӽФʸmid뤿ˤrb_intern() Ȥ VALUE rb_funcall2(VALUE recv, ID mid, int argc, VALUE *argv) åɸƤӽФargc, argvϤ VALUE rb_eval_string(const char *str) ʸRubyץȤȤƥѥ롦¹Ԥ롥 ID rb_intern(const char *name) ʸбID֤ char *rb_id2name(ID id) IDбʸ֤(ǥХå) char *rb_class2name(VALUE klass) 饹֤̾(ǥХå)饹̾ʤˤ, ̤ä̾ĥ饹֤̾ int rb_respond_to(VALUE obj, ID id) objidǼåɤĤɤ֤ ** ѿ VALUE rb_iv_get(VALUE obj, const char *name) objΥѿͤ롥`@'ǻϤޤʤ ѿ Rubyץफ饢Ǥʤֱ줿ץ ѿˤʤ롥ʸ̾ĥ饹(ޤ ⥸塼)ΥѿȤƼƤ롥 VALUE rb_iv_set(VALUE obj, const char *name, VALUE val) objΥѿval˥åȤ롥 ** 湽¤ VALUE rb_iterate(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2) func2֥åȤꤷ, func1ƥ졼ȤƸƤ֡ func1ˤ arg1ȤϤ, func2ˤ1˥ƥ졼 Ϳ줿, 2arg2Ϥ롥 VALUE rb_yield(VALUE val) valͤȤƥƥ졼֥åƤӽФ VALUE rb_rescue(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2) ؿfunc1arg1˸ƤӽФfunc1μ¹㳰ȯ ˤ func2arg2ȤƸƤ֡ͤ㳰ȯ ʤäfunc1, 㳰ȯˤfunc2 ͤǤ롥 VALUE rb_ensure(VALUE (*func1)(), VALUE arg1, void (*func2)(), VALUE arg2) ؿfunc1arg1ȤƼ¹Ԥ, ¹Խλ(Ȥ㳰 ȯƤ) func2arg2ȤƼ¹Ԥ롥ͤfunc1 ͤǤ(㳰ȯʤ) ** 㳰顼 void rb_warning(const char *fmt, ...) rb_verboseɸ२顼Ϥ˷ٹɽ롥 printf()Ʊ void rb_raise(rb_eRuntimeError, const char *fmt, ...) RuntimeError㳰ȯ롥printf()Ʊ void rb_raise(VALUE exception, const char *fmt, ...) exceptionǻꤷ㳰ȯ롥fmtʲΰ printf()Ʊ void rb_fatal(const char *fmt, ...) ̿Ū㳰ȯ롥̾㳰ϹԤʤ줺, ץλ(ensureǻꤵ줿ɤϽλ ¹Ԥ) void rb_bug(const char *fmt, ...) ץʤɥץΥХǤȯϤΤʤ λƤ֡ץϥפľ˽λ롥 㳰ϰڹԤʤʤ ** Rubyν¹ RubyץꥱˤϰʲΥե Ȥ̾γĥ饤֥ˤɬפʤ void ruby_init() RubyץνԤʤ void ruby_options(int argc, char **argv) RubyץΥޥɥ饤νԤʤ void ruby_run() Rubyץ¹Ԥ롥 void ruby_script(char *name) RubyΥץ̾($0)ꤹ롥 Appendix C. extconf.rbǻȤؿ extconf.rbǤѲǽʥѥåδؿϰ ̤Ǥ롥 have_macro(macro, headers) إåեheader롼ɤƥޥmacro Ƥ뤫ɤå롥ޥƤtrue ֤ have_library(lib, func) ؿfuncƤ饤֥lib¸ߤå롥 饤֥꤬¸ߤtrue֤ find_library(lib, func, path...) ؿfuncƤ饤֥lib¸ߤ -Lpath ɲ ʤå롥饤֥꤬դätrue֤ have_func(func, header) إåեheader롼ɤƴؿfunc¸ߤ 롥funcɸǤϥʤ饤֥ΤΤǤ ˤhave_libraryǤΥ饤֥åƤ ؿ¸ߤtrue֤ have_var(var, header) إåեheader롼ɤѿvar¸ߤ 롥varɸǤϥʤ饤֥ΤΤǤ ˤhave_libraryǤΥ饤֥åƤ ѿ¸ߤtrue֤ have_header(header) إåե¸ߤå롥إåե뤬¸ߤ true֤ find_header(header, path...) إåեheader¸ߤ -Ipath ɲäʤå 롥إåե뤬դätrue֤ have_struct_member(type, member, header) إåեheader롼ɤƷtype˥member ¸ߤ뤫å롥typeƤơmember Ĥtrue֤ have_type(type, header, opt) إåեheader롼ɤƷtype¸ߤ뤫 å롥typeƤtrue֤ check_sizeof(type, header) إåեheader롼ɤƷtypecharñ̥ Ĵ٤롥typeƤΥ֤ ƤʤȤnil֤ create_makefile(target) ĥ饤֥ѤMakefile롥δؿƤФʤ ФΥ饤֥ϥѥ뤵ʤtargetϥ⥸塼̾ ɽ find_executable(command, path) ޥcommandFile::PATH_SEPARATORǶڤ줿ѥ̾ ꥹpathõpathnilޤϾά줿ϡĶ ѿPATHͤѤ롥¹ԲǽʥޥɤĤä ϥѥޤե̾Ĥʤänil֤ with_config(withval[, default=nil]) ޥɥ饤--with-<withval>ǻꤵ줿ץͤ롥 enable_config(config, *defaults) disable_config(config, *defaults) ޥɥ饤--enable-<config>ޤ --disable-<config>ǻꤵ줿ͤ롥 --enable-<config>ꤵƤtrue --disable-<config>ꤵƤfalse֤ ɤꤵƤʤϡ֥åĤǸƤӽФƤ *defaultsyield̡֥åʤʤ*defaults֤ dir_config(target[, default_dir]) dir_config(target[, default_include, default_lib]) ޥɥ饤--with-<target>-dir, --with-<target>-include, --with-<target>-libΤ줫ǻꤵǥ쥯ȥ $CFLAGS $LDFLAGS ɲä롥--with-<target>-dir=/path --with-<target>-include=/path/include --with-<target>-lib=/path/lib Ǥ롥ɲä줿 include ǥ쥯ȥ lib ǥ쥯ȥ ֤ ([include_dir, lib_dir]) pkg_config(pkg) pkg-configޥɤѥåpkgξ롥 pkg-configμºݤΥޥ̾ϡ--with-pkg-configޥ 饤ץǻǽ /* * Local variables: * fill-column: 60 * end: */y~or5J={Eeu磝Qk ᯘG{?+]ן?wM3X^歌>{7پK>on\jy Rg/=fOroNVv~Y+ NGuÝHWyw[eQʨSb> >}Gmx[o[<{Ϯ_qFvM IENDB`