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`