.\" 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_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
	T_UNDEF
	T_NODE
	T_ZOMBIE

ۤȤɤΥפ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_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ѰդƤؿѤƤ

ǤϤäȤȤǤʸ/
ؿ򤢤ޤ(ǤϤʤǤ)

 ʸФؿ

  rb_str_new(const char *ptr, long len)

    Rubyʸ롥

  rb_str_new2(const char *ptr)
  rb_str_new_cstr(const char *ptr)

    Cʸ󤫤Rubyʸ롥δؿεǽ
    rb_str_new(ptr, strlen(ptr))ƱǤ롥

  rb_tainted_str_new(const char *ptr, long len)
  rb_tainted_str_new_cstr(const char *ptr)

    ޡղä줿Rubyʸ롥
    Υǡ˴Ťʸˤϱޡղä٤
    Ǥ롥

  rb_tainted_str_new2(const char *ptr)

    Cʸ󤫤ޡղä줿Rubyʸ롥

  rb_sprintf(const char *format, ...)
  rb_vsprintf(const char *format, va_list ap)

    Cʸformat³printf(3)ΥեޥåȤˤä
    Rubyʸ롥

  rb_str_cat(VALUE str, const char *ptr, long len)

    RubyʸstrlenХȤʸptrɲä롥

  rb_str_cat2(VALUE str, const char* 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)) ƱǤ롥

  rb_enc_str_new(const char *ptr, long len, rb_encoding *enc)
  
    ꤵ줿󥳡ǥ󥰤Rubyʸ.
     
  rb_usascii_str_new(const char *ptr, long len)
  rb_usascii_str_new_cstr(const char *ptr)

    󥳡ǥ󥰤US-ASCIIRubyʸ.


 Фؿ

  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_to_ary(VALUE obj)

    ֥ȤѴ.
    Object#to_aryƱǤ.

 ¾ˤؿ¿. 
 aryϤʤФʤʤ. ʤ
 Ǥ.

  rb_ary_aref(argc, VALUE *argv, VALUE ary)

    Array#[]Ʊ.

  rb_ary_entry(VALUE ary, long offset)

    ary[offset]

  rb_ary_subseq(VALUE ary, long beg, long len)

    ary[beg, len]

  rb_ary_push(VALUE ary, VALUE val)
  rb_ary_pop(VALUE ary)
  rb_ary_shift(VALUE ary)
  rb_ary_unshift(VALUE ary, VALUE val)

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ȤϤޤ

᥽åɤؿϤޤĤޤ. ҤȤĤϥ᥽å
̾ȤIDޤ. IDˤĤƤ2.2.2򻲾.

  void rb_define_method_id(VALUE klass, ID name, 
                           VALUE (*func)(ANYARGS), int argc)

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᥽åɤȤϴؿǤƤӽФȤνʤ᥽
ɤǤ

Ǹˡ 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)뤿
δؿϰʲ̤Ǥ

  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ꤹ뤿δؿ
ʲ̤Ǥ

  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)

ɾϸߤδĶǹԤޤĤޤꡤߤΥѿ
ʤɤѤޤ

ɾ㳰ȯ뤫⤷ʤȤդޤ礦. 
ʴؿ⤢ޤ.

  VALUE rb_eval_string_protect(const char *str, int *state)

δؿϥ顼ȯnil֤ޤơˤ
*stateϥˡʤ󥼥ˤʤޤ


2.2.2 IDޤϥܥ

CʸͳRubyΥ᥽åɤƤӽФȤǤ
ˡRuby󥿥ץ꥿ǥ᥽åɤѿ̾ꤹ
˻ȤƤIDˤĤƤޤ礦

IDȤѿ̾᥽å̾ɽǤRubyǤ

 :̻
ޤ
 :"Ǥդʸ"

ǥǤޤC餳뤿ˤϴؿ

  rb_intern(const char *name)

ȤޤRubyȤͿ줿ܥ(ޤʸ
)IDѴˤϰʲδؿȤޤ

  rb_to_id(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()Ʊˤʤ롥

gettersetterλͤϼ̤Ǥ

  VALUE (*getter)(ID id, VALUE *var);
  void (*setter)(VALUE val, ID id, VALUE *var);


줫顤бCѿʤRubyѿ
ȤǤޤ. ѿͤϥեåؿΤߤˤäƼ
ޤ.

  void rb_define_virtual_variable(const char *name,
				  VALUE (*getter)(), void (*setter)())

δؿˤä줿RubyѿȤ줿ˤ
getterѿͤåȤ줿ˤsetterƤФޤ

gettersetterλͤϰʲ̤Ǥ

  (*getter)(ID id);
  (*setter)(VALUE val, ID id);

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ξϡñ
˳ޤ

markfreeؿGC¹˸ƤӽФޤ.
ʤ, GC¹Ruby֥ȤΥ϶ػߤ
. ä, markfreeؿRuby֥ȤΥ
ϹԤʤǤ.

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Ѥޤ

--
void
Init_dbm(void)
{
    /* 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(VALUE obj, VALUE keystr)
{
	:
}
--

οΥפ1self2ʹߤ᥽å
ΰȤʤޤ

οΤΤCǼΤRubyǼ
ΤȤޤdbm饤֥ǡCǼ
DBMΥ饹᥽åɤǤopen()ǤƤ
fdbm_s_open()ϤʤäƤޤ

--
static VALUE
fdbm_s_open(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ѿʹߤ˻ꤷVALUEؤλȤͤƤ



RubyȤƼ᥽åɤˤ
Thread#initializeޤϤǤ

--
static VALUE
thread_initialize(VALUE thread, VALUE 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         : 㳰饹㳰
  gc.c            : ΰ
  load.c          : 饤֥Υ
  object.c        : ֥
  variable.c      : ѿ

Rubyιʸϴ
  parse.y         : ϴȹʸ
    -> parse.c    : ư
  keywords        : ͽ
    -> lex.c      : ư

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    : Ʊ
  vm.c
  vm_dump.c
  vm_eval.c
  vm_exec.c
  vm_insnhelper.c
  vm_method.c

  opt_insns_unif.def  : ̿ͻ
  opt_operand.def     : ŬΤ

    -> insn*.inc      : ư
    -> opt*.inc       : ư
    -> vm.inc         : ư

ɽ󥸥 ()
  regex.c
  regcomp.c
  regenc.c
  regerror.c
  regexec.c
  regparse.c
  regsyntax.c

桼ƥƥؿ

  debug.c       : CǥХåѤΥǥХåܥ
  dln.c         : ưŪǥ
  st.c          : ѥϥåɽ
  strftime.c    : 
  util.c        : ¾Υ桼ƥƥ

Rubyޥɤμ

  dmyext.c
  dmydln.c
  dmyencoding.c
  id.c
  inits.c
  main.c
  ruby.c
  version.c

  gem_prelude.rb
  prelude.rb

饹饤֥

  array.c       : Array
  bignum.c      : Bignum
  compar.c      : Comparable
  complex.c     : Complex
  cont.c        : Fiber, Continuation
  dir.c         : Dir
  enum.c        : Enumerable
  enumerator.c  : Enumerator
  file.c        : File
  hash.c        : Hash
  io.c          : IO
  marshal.c     : Marshal
  math.c        : Math
  numeric.c     : Numeric, Integer, Fixnum, Float
  pack.c        : Array#pack, String#unpack
  proc.c        : Binding, Proc
  process.c     : Process
  random.c      : 
  range.c       : Range
  rational.c    : Rational
  re.c          : Regexp, MatchData
  signal.c      : Signal
  sprintf.c     : 
  string.c      : String
  struct.c      : Struct
  time.c        : Time

  defs/knwon_errors.def  : 㳰饹 Errno::*
    -> known_errors.inc  : ư

¿첽
  encoding.c    : Encoding
  transcode.c   : Encoding::Converter
  enc/*.c       : 󥳡ǥ󥰥饹
  enc/trans/*   : ɥݥбɽ

gorubyޥɤμ
  
  goruby.c
  golf_prelude.rb      : gorubyͭΥ饤֥
    -> golf_prelude.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)
FIX2LONG(value), LONG2FIX(l)
NUM2INT(value), INT2NUM(i)
NUM2UINT(value), UINT2NUM(ui)
NUM2LONG(value), LONG2NUM(l)
NUM2ULONG(value), ULONG2NUM(ul)
NUM2LL(value), LL2NUM(ll)
NUM2ULL(value), ULL2NUM(ull)
NUM2OFFT(value), OFFT2NUM(off)
NUM2SIZET(value), SIZET2NUM(size)
NUM2SSIZET(value), SSIZET2NUM(ssize)
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)

  ֥Ȥ⥸塼(Ƥ᥽å)ǳĥ롥

** ѿ

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Ϳ줿ꤵ줿եޥåȤ˽äư
  ʬ򤷡³VALUEؤλȤ˥åȤޤΥեޥ
  ȤϡABNFǵҤȰʲ̤Ǥ

--
scan-arg-spec  := param-arg-spec [block-arg-spec]

param-arg-spec := pre-arg-spec [post-arg-spec] / post-arg-spec / pre-opt-post-arg-spec
pre-arg-spec   := num-of-leading-mandatory-args [num-of-optional-args]
post-arg-spec  := sym-for-variable-length-args [num-of-trailing-mandatory-args]
pre-opt-post-arg-spec := num-of-leading-mandatory-args num-of-optional-args num-of-trailing-mandatory-args
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-block-arg              := "&"   ; ƥ졼֥å뤿
                                        ; 
--

  եޥåȤ"12"ξ硤Ϻ1Ĥǡ3(1+2)ޤǵ
  Ȥ̣ˤʤޤäơեޥåʸ³
  3ĤVALUEؤλȤ֤ɬפޤˤϼ
  ѿåȤޤѿؤλȤNULLꤹ
  ȤǤξϼͤϼΤƤޤʤ
  άǽά줿ѿͤnil(CΥ٥Ǥ
  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_block_call(VALUE obj, ID mid, int argc, VALUE * argv,
		    VALUE (*func) (ANYARGS), VALUE data2)

  func֥åȤꤷ, obj쥷, argcargv
  Ȥmid᥽åɤƤӽФ. funcyield줿
  , data2, 軰, Ͱargcargv.

[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Ѱդ줿.

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
  ͤǤ(㳰ȯʤ)

VALUE rb_protect(VALUE (*func) (VALUE), VALUE arg, int *state)

  ؿfuncargȤƼ¹Ԥ, 㳰ȯʤФ
  ֤ͤ㳰ȯ, *state0򥻥åȤ
  Qnil֤

void rb_jump_tag(int state)

  rb_protect()rb_eval_string_protect()ª줿㳰
  롥stateϤδؿ֤줿ͤǤʤФʤʤ
  δؿľܤθƤӽФʤ

** 㳰顼

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)ꤹ롥

** 󥿥ץ꥿Υ٥ȤΥեå

 void rb_add_event_hook(rb_event_hook_func_t func, rb_event_flag_t events, VALUE data)

ꤵ줿󥿥ץ꥿Υ٥ȤФեåؿɲäޤ
eventsϰʲͤorǤʤФʤޤ:

	RUBY_EVENT_LINE
	RUBY_EVENT_CLASS
	RUBY_EVENT_END
	RUBY_EVENT_CALL
	RUBY_EVENT_RETURN
	RUBY_EVENT_C_CALL
	RUBY_EVENT_C_RETURN
	RUBY_EVENT_RAISE
	RUBY_EVENT_ALL

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 ⻲ȤƤ

 int rb_remove_event_hook(rb_event_hook_func_t func)

ꤵ줿եåؿޤ

** ߴΤΥޥ

APIθߴå뤿˰ʲΥޥǥեȤƤޤ

NORETURN_STYLE_NEW

  NORETURN ޥؿޥȤƤ뤳Ȥ̣롥

HAVE_RB_DEFINE_ALLOC_FUNC

  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() ؿ󶡤Ƥ뤳Ȥ̣롥
  have_func("rb_reg_new_str", "ruby.h").
  η̤Ʊ

HAVE_RB_IO_T

  rb_io_t 󶡤Ƥ뤳Ȥ̣롥

USE_SYMBOL_AS_METHOD_NAME

  ᥽å֤̾᥽åɡModule#methods, #singleton_methods
  ʤɤSymbol֤Ȥ̣롥

HAVE_RUBY_*_H

  ruby.h Ƥ롥бإå󶡤Ƥ뤳
  ̣롥ȤСHAVE_RUBY_ST_H Ƥ
  ñʤ st.h ǤϤʤ ruby/st.h Ѥ롥

RB_EVENT_HOOKS_HAVE_CALLBACK_DATA

  rb_add_event_hook() եåؿϤ data 3Ȥ
  뤳Ȥ̣롥

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:
 */
