(linenum→info "unix/slp.c:2238")

ruby/1.8.6.111/README.EXT.ja

    1: .\" README.EXT.ja -  -*- Text -*- created at: Mon Aug  7 16:45:54 JST 1995
    2: 
    3: Ruby?γ???饤?֥??κ???????ޤ???
    4: 
    5: 1????μ?
    6: 
    7: C??ѿ?Ϸ??????ꡤ?ǡ????ˤϷ??????????󡥤Ǥ????顤??
    8: ?Ȥ??Хݥ??󥿤???ѿ????????????ͤ??????Ƽ?갷???ޤ????դ?uby??ѿ?Ϸ????ʤ????ǡ????˷???????
    9: ???????ΰ㤤?Τ??ᡤC??uby?????Ѵ????ʤ????????ߤ????ǡ????򥢥??????Ǥ??ޤ???
   10: Ruby?Υǡ?????ALUE?Ȥ???C?η??????????????VALUE???Υǡ?
   11: ???Ϥ??Υǡ????????פ????ΤäƤ??ޤ??????Υǡ????????פ??????Τϥǡ???(???֥????????μºݤι?¤??????Ƥ??ơ?Ruby
   12: ?Υ??饹?ȤϤޤ????????Ǥ???
   13: 
   14: VALUE????ˤȤäư???Τ??????????????????
   15:  (1) VALUE?Υǡ????????פ??(2) VALUE???ǡ?????Ѵ???????????ɬ??Ǥ???(1)????ȴְ????ǡ?????Ѵ????Ԥ?
   16: ?Æ¡??ǰ??×¥í¥°????core dump???Þ¤???
   17: 
   18: 1.1 ?Ç¡?????????
   19: Ruby?ˤϥ桼?????Ȥ??????Τ??????Υ????פ?????????
   20: 
   21:         T_NIL          nil
   22:         T_OBJECT       ??????֥???????       T_CLASS               ???饹
   23:         T_MODULE       ?⥸?塼??T_FLOAT             ?ư?????_STRING    ʸ??T_REGEXP       ???ɽ??
   24:         T_ARRAY                ??
   25:         T_FIXNUM       Fixnum(31bitĹ???T_HASH               Ϣ???
   26:         T_STRUCT       (Ruby????¤?
   27:         T_BIGNUM       ¿?Ĺ???_FILE         ????   T_TRUE            ??
   28:         T_FALSE                ??
   29:         T_DATA         ?Ç¡???
   30:         T_SYMBOL       ?????????????????????????Υ????פ?????????
   31: 
   32:         T_ICLASS
   33:         T_MATCH
   34:         T_UNDEF
   35:         T_VARMAP
   36:         T_SCOPE
   37:         T_NODE
   38: 
   39: ?ۤȤ?Î¥????פ??ι?¤??Ǽ?õ¤µ¤????Þ¤???
   40: 
   41: 1.2 VALUE?Υǡ????????פ???Ã¥?????ruby.h?Ǥ?YPE()?Ȥ????Þ¥??í¤¬?????????Æ¡?VALUE?Υǡ???
   42: ?????פ?뤳?Ȥ????????TYPE()?ޥ??????Ҳ𤷤?T_XXXX
   43: ?η?????????Þ¤???VALUE?Υǡ????????פ˱????ƽ???????ˤϡ?TYPE()??ͤ???ô¤¹¤ë¤³?Ȥˤʤ?????
   44: 
   45:   switch (TYPE(obj)) {
   46:     case T_FIXNUM:
   47:       /* FIXNUM?ν? */
   48:       break;
   49:     case T_STRING:
   50:       /* ʸ???? */
   51:       break;
   52:     case T_ARRAY:
   53:       /* ???ν? */
   54:       break;
   55:     default:
   56:       /* ????????????/
   57:       rb_raise(rb_eTypeError, "not valid value");
   58:       break;
   59:   }
   60: 
   61: ?????ǡ????????פ???å????ơ???????ʤ???????????
   62: ????Ѱդ??????ޤ???
   63: 
   64:   void Check_Type(VALUE value, int type)
   65: 
   66: ???δؿ?alue??type????????????????????ޤ?????
   67: ???????????VALUE?Υǡ????????פ?????????ɤ???????å???
   68: ?뤿???ϡ????δؿ?Ȥ??ޤ???
   69: 
   70: FIXNUM??IL?˴ؤ??ƤϤ????????Þ¥??í¤¬??Õ¤??????Þ¤???
   71: 
   72:   FIXNUM_P(obj)
   73:   NIL_P(obj)
   74: 
   75: 1.3 VALUE???ǡ?????Ѵ??????ǡ????????פ?T_NIL, T_FALSE, T_TRUE?Ǥ??????ǡ????Ϥ??줾
   76: ??l, false, true?Ǥ??????Υǡ????????פΥ??֥??????ȤϤҤ??Ĥ??Ĥ???¸?ߤ??ޤ???
   77: ?Ç¡????????פ?T_FIXNUM?λ???????31bit?Î¥???????????????FIXNUM?????Ñ´????뤿???Ï¥Þ¥???FIX2INT()?פ????Þ¤??????줫?顤FIXNUM?˸¤餺Ruby?Υǡ??????Ñ´??????UM2INT()?פȤ????Þ¥??í¤¬???????????Î¥Þ¥????Ç¡???????
   78: ?פΥ???å?̵???ǻȤ??ޤ?(???Ѵ??Ǥ??ʤ????ˤ?㳰??
   79: ȯ??????Ʊ??˥???å?̵???ǻȤ??????ޥ???double????????UM2DBL()?פ?????????
   80: 
   81: char* ?????????version 1.6 ????Ǥϡ?TR2CSTR()?פ??????ޥ????ȤäƤ??ޤ??????????? to_str() ?ˤ???ۤ?????????? GC ?????????????뤿?ᡢversion 1.7 ?ʹߤǤ?obsolete ?Ȥʤꡢ?????StringValue() ??StringValuePtr()
   82: ?????侩???Ƥ??ޤ???StringValue(var) ??var ?? String
   83:  ?Ǥ??????⤻?????????Ǥʤ??? var ??r.to_str() ?η???????????????í¡¢StringValuePtr(var) ??????var ???????
   84: ?Ƥ???ar ?????????Ф???har* ????ޥ???????var ???????֤??????????????ǡ?var ??lvalue ?Ǥ??????
   85: ????????
   86: 
   87: ???????Υǡ????????פ?б?????ι?¤????????????????
   88: ?빽¤??Τ???LUE?Ϥ??Τޤޥ??㥹???????)??????¤????ݥ??󥿤?Ѵ??Ǥ??ޤ???
   89: 
   90: ??¤??ϡ?truct RXxxxx?פȤ???̾???uby.h?????????????????????????truct RString?פǤ????ºݤ˻Ȥ???????
   91: ??????????????餤??Ȼפ??ޤ???
   92: 
   93: ruby.h?ǤϹ?¤??إ??㥹?Ȥ?????????XXXXX()?????ʸ
   94: ??????)?Ȥ???̾???󶡤??????ޤ?(?: RSTRING())??
   95: 
   96: ????С?ʸ??r???????뤿???ϡ?STRING(str)->len?פ?????ʸ??r??r*?Ȥ????뤿???ϡ?STRING(str)->ptr???Ȥ??ޤ??????ξ??ˤϡ????줾??RARRAY(ary)->len?ס?
   97: ??ARRAY(ary)->ptr?פȤʤ?????
   98: 
   99: Ruby?ι?¤???ܥ????????????˵?????ʤ????ʤ?????
  100: ?Ȥϡ?????????¤?????ϻ??Ȥ??????ǡ?ľ??????
  101: ?ʤ????ȤǤ???ľ???????????????֥??????Ȥ?????????
  102: ?Ȥ????ʤäơ??פ??Х??θ?????????
  103: 
  104: 1.4 C?Υǡ?????UE??Ѵ?????VALUE?μºݤι?¤??
  105:   * FIXNUM?ξ?
  106: 
  107:     1bit?????եȤ??ơ?LSB??Ƥ롥
  108: 
  109:   * ??????Υݥ??󥿤ξ?
  110: 
  111:     ???Τޤ?ALUE?˥??㥹?Ȥ??롥
  112: 
  113: ?ȤʤäƤ??ޤ??????ơ?LSB????å?????VALUE??FIXNUM?????????狼?????Ǥ?(?ݥ??󥿤?SB??Ω?äƤ??ʤ????Ȥ?ꤷ???????
  114: 
  115: ?Ǥ????顤FIXNUM?ʳ???uby?Υ??֥??????Ȥι?¤??????ALUE
  116: ?˥??㥹?Ȥ???????ALUE??Ѵ???????????????Ǥ?դι?¤
  117: ???VALUE?˥??㥹?Ƚ???櫓?ǤϤ??????󡥥??㥹?Ȥ???
  118: ??uby??ΤäƤ??빽¤?(ruby.h???????????ruct RXxxx
  119: ?Τ?)????Ǥ???
  120: 
  121: FIXNUM?˴ؤ??Ƥ?Ѵ??ޥ?????????????????????C???????LUE??Ѵ??????????ʲ??Τ???????????ɬ??˱???
  122: ?ƻȤ?ʬ???Ƥ????????
  123: 
  124:   INT2FIX()     ???????1bit??????????????
  125:   INT2NUM()     Ǥ?Õ¤???ô¤«¤?LUE??
  126: INT2NUM()?????IXNUM??ϰϤ˼?ʤ?????Bignum??Ѵ?
  127: ???Ƥ?????(???????????)??
  128: 
  129: 1.5 Ruby?Υǡ????????????٤???ꡤRuby?ι?¤??򥢥?????????????ι??????????Ȥϴ????????󡥤ǡ?Ruby?Υǡ????????ˤ?Ruby????դ??Ƥ?????Ѥ??Ƥ????????
  130: 
  131: ?????ǤϤ??Ȥ????????í¤¦Ê¸????????/????????Ø¿?????Þ¤?(???ǤϤʤ??Ǥ?)??
  132: 
  133:  ʸ????????? rb_str_new(const char *ptr, long len)
  134: 
  135:     ??????Ruby??????????ë¡¥
  136: 
  137:   rb_str_new2(const char *ptr)
  138: 
  139:     C???????by??????????롥???δؿ??ǽ??    rb_str_new(ptr, strlen(ptr))?????Ǥ??롥
  140: 
  141:   rb_tainted_str_new(const char *ptr, long len)
  142: 
  143:     ??????????ä??줿??????Ruby??????????롥???
  144:     ?????ǡ????˴??ʸ???ϱ?????????ä????٤?
  145:     ?Ǥ??롥
  146: 
  147:   rb_tainted_str_new2(const char *ptr)
  148: 
  149:     C?????????ޡ???????ä??줿Ruby??????????롥
  150: 
  151:   rb_str_cat(VALUE str, const char *ptr, long len)
  152: 
  153:     Ruby?????r??en?Х??Ȥ????r??ä??롥
  154: 
  155:  ????Ф????? rb_ary_new()
  156: 
  157:     ????0?????????ë¡¥
  158: 
  159:   rb_ary_new2(long len)
  160: 
  161:     ????0?????????롥len??ʬ??ΰ????餫??????   ??ƤƤ?????
  162: 
  163:   rb_ary_new3(long n, ...)
  164: 
  165:     ????ꤷ??n????????????롥
  166: 
  167:   rb_ary_new4(long n, VALUE *elts)
  168: 
  169:     ?????????n???????????ë¡¥
  170: 
  171:   rb_ary_push(VALUE ary, VALUE val)
  172:   rb_ary_pop(VALUE ary)
  173:   rb_ary_shift(VALUE ary)
  174:   rb_ary_unshift(VALUE ary, VALUE val)
  175: 
  176:     Array???̾?Υ᥽?åɤ????Ư???򤹤?????ɬ??
  177:     ???Ǥʤ????ʤ?????
  178: 
  179: 2??Ruby?ε?ǽ???
  180: 
  181: ???Ū??uby?ǽ񤱤뤳?Ȥ??Ǥ????ޤ???Ruby???Τ???C?ǵ?
  182: ?Ò¤????????Ǥ????顤???Ȥ??????ʤ?????É¡?????????uby?γ???˻Ȥ????Ȥ?¿????í¤¦???¬??????ǽ????˾??𤷤ޤ???
  183: 
  184: 2.1 Ruby?˵?ǽ??ä???Ruby??󶡤?????????Ȥ???uby???󥿥ץ꥿?˿???????ǽ
  185: ??ä??뤳?Ȥ??Ǥ??ޤ???Ruby?Ǥϰʲ??ε?ǽ??ä???????????????ޤ???
  186: 
  187:  * ???饹???⥸?塼??* ?᥽?åɡ???ۥ᥽?åɤʤ? * ???ǤϽ??Ҳ𤷤ޤ???
  188: 
  189: 2.1.1 ???饹/?⥸?塼????
  190: ???饹?????塼???????뤿???ϡ??ʲ??δؿ?Ȥ??ޤ???
  191: 
  192:   VALUE rb_define_class(const char *name, VALUE super)
  193:   VALUE rb_define_module(const char *name)
  194: 
  195: ?????δؿ???????????줿???饹?????塼??????ޤ???
  196: ?᥽?åɤ?????ˤ?????ͤ?ɬ??ʤΤǡ??ۤȤ?ξ?
  197: ????????????Ƥ???ɬ??????????礦??
  198: 
  199: ???饹?????塼??¾?Υ??饹????˥ͥ??Ȥ???????????ϰʲ??δؿ?Ȥ??ޤ???
  200: 
  201:   VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super)
  202:   VALUE rb_define_module_under(VALUE outer, const char *name)
  203: 
  204: 2.1.2 ?᥽?å???ۥ᥽?å??
  205: 
  206: ?᥽?åɤ??ۥ᥽?åɤ??????ϰʲ??δؿ?Ȥ??ޤ???
  207: 
  208:   void rb_define_method(VALUE klass, const char *name, 
  209:                         VALUE (*func)(), int argc)
  210: 
  211:   void rb_define_singleton_method(VALUE object, const char *name, 
  212:                                   VALUE (*func)(), int argc)
  213: 
  214: 
  215: ǰ?Τ??????????ðۥ᥽?åɡפȤϡ??????????֥?????
  216: ?Ȥ?Ф??Ƥ??ͭ?????åɤǤ???Ruby?ǤϤ褯Smalltalk?ˤ?
  217: ???륯?饹?᥽?åɤȤ??ơ????饹??Ф????ۥ᥽?åɤ??Ȥ?
  218: ?Þ¤???
  219: 
  220: ?????δؿ?argc?Ȥ?????C?δؿ?Ϥ???????
  221: ???)???????argc??0?ʾ????ϴؿ?????????̣???ޤ???16?İʾ????Ȥ??ޤ????????????͡???
  222: ??????ºݤδؿ????ΰ?????elf??Ϳ?????ޤ????ǡ???ꤷ????????????Ȥˤʤ?????
  223: 
  224: argc????λ??ϰ???Ϥʤ????????ꤷ?????Ȥˤʤ?????
  225: argc??-1?λ??ϰ?????????????????argc??-2?λ??ϰ??uby???????Ϥ???????
  226: 
  227: ?᥽?åɤ???????⤦??Ĥ????????ҤȤĤ?rivate????åɤ??????????rb_define_method()??????Ǥ???
  228: 
  229:   void rb_define_private_method(VALUE klass, const char *name, 
  230:                                 VALUE (*func)(), int argc)
  231: 
  232: private?᥽?åɤȤϴؿ???Ǥ????ƤӽФ????Ȥν?????᥽???ɤǤ???
  233: 
  234: ?⤦?ҤȤĤϥ⥸?塼??????????ΤǤ????⥸?塼?????ϥ⥸?塼????ۥ᥽?åɤǤ??ꡤƱ????rivate?᥽?åɤ??⤢???ΤǤ?????򤢤???Math?⥸?塼??sqrt()?ʤɤ?????
  235: ???ޤ??????Υ᥽?åɤ?
  236:   Math.sqrt(4)
  237: 
  238: ?Ȥ???????Ǥ?  include Math
  239:   sqrt(4)
  240: 
  241: ?Ȥ???????Ǥ????ޤ????⥸?塼???????????ʲ??????????
  242: 
  243:   void rb_define_module_function(VALUE module, const char *name, 
  244:                                  VALUE (*func)(), int argc)
  245: 
  246: ?ؿ?᥽?å?Kernel?⥸?塼??private method)?????뤿
  247: ???ؿ?ʲ???̤?????
  248: 
  249:   void rb_define_global_function(const char *name, VALUE (*func)(), int argc)
  250: 
  251: 
  252: ?᥽?åɤ????????뤿???ؿ?ʲ???̤?????
  253: 
  254:   void rb_define_alias(VALUE module, const char* new, const char* old);
  255: 
  256: ???饹?᥽?Ã¥?llocate?????????ü¤·¤¿¤ê¤¹?뤿???Ø¿??ʲ???̤?????
  257: 
  258:   void rb_define_alloc_func(VALUE klass, VALUE (*func)(VALUE klass));
  259:   void rb_undef_alloc_func(VALUE klass);
  260: 
  261: func?Ï¥??饹?????Ƽõ¤±¼??Æ¡???????????Ƥ??????????󥹤???ʤ??ƤϤʤ????󡣤??Î¥??ó¥¹¥??󥹤ϡ????????????ʤɤ?ޤʤ????Ǥ??????Ö¶?Τޤޤˤ??Ƥ??????Û¤?
  262: ???褤?Ǥ??礦??
  263: 
  264: 2.1.3 ????
  265: ????饤?֥???ɬ?????Ϥ??餫????????Ƥ???????????
  266: ?Ǥ??礦????????????????????
  267: 
  268:   void rb_define_const(VALUE klass, const char *name, VALUE val)
  269:   void rb_define_global_const(const char *name, VALUE val)
  270: 
  271: ??Ô¤??????饹/?⥸?塼??°????????????Ρ???Ԥϥ??í¡¼?Ð¥??????????ΤǤ???
  272: 
  273: 2.2 Ruby?ε?ǽ?????ӽФ?
  274: 
  275: ??1.5 Ruby?Υǡ????????ǰ??Ҳ𤷤??褦?ʴؿ??Ȥ??С?Ruby?ε?ǽ??????Ƥ????????ƤӽФ????Ȥ????ޤ???
  276: 
  277: # ???Τ褦?Ê´Ø¿??ɽ?Ϥ??ޤΤȤ??í¤¢?????ó¡¥¥???????# ?뤷???ʤ??Ǥ??Í¡?
  278: 
  279: ???????ˤ?by?ε?ǽ??ӽФ??ˡ?Ϥ????Ĥ?????????
  280: 
  281: 2.2.1 Ruby?Î¥×¥í¥°????l????C????by?ε?ǽ??ӽФ????Ȥ?ñ?????Æ¡?ʸ??
  282: Í¿??????Ruby?Î¥×¥í¥°???????????δؿô¤¬¤???????
  283: 
  284:   VALUE rb_eval_string(const char *str)
  285: 
  286: ???????ϸ??ߤδĶ??ǹԤ??Þ¤????Ĥޤꡤ???ß¤Î¥í¡¼???????ɤ???Ѥ??Þ¤???
  287: 
  288: 2.2.2 ID?ޤ??ϥ????C???????????????uby?Υ᥽?åɤ?ӽФ????Ȥ???????????????ˡ?Ruby???󥿥ץ꥿??ǥ᥽?åɤ????ꤹ????˻Ȥ??Ƥ????ˤĤ???????Ƥ????ޤ??礦??
  289: 
  290: ID?Ȥ?ѿ???᥽?å???????????Ruby?Ǥ?D??б???????֥??????ȤȤ??ƥ????ymbol)?????ꡤ
  291: 
  292:  :?????
  293: ?ǥ????????Ǥ??ޤ???C???餳??????뤿???ϴؿ? rb_intern(const char *name)
  294: 
  295: ????ޤ???Ruby?????????????????????ޤ?????????Ѵ??????ϰʲ??δؿ?Ȥ??ޤ???
  296: 
  297:   rb_to_id(VALUE symbol)
  298: 
  299: ID???饷?????뤿???ϰʲ??Υޥ????Ȥ??ޤ???
  300: 
  301:   VALUE ID2SYM(ID id)
  302: 
  303: ????뤫????뤿???ϰʲ??Υޥ????Ȥ??ޤ???
  304: 
  305:   ID SYM2ID(VALUE symbol)
  306: 
  307: 2.2.3 C????by?Υ᥽?åɤ?ӽФ?
  308: 
  309: C???????????????uby?Υ᥽?åɤ?ӽФ??????ϰʲ?
  310: ?δؿ?Ȥ??ޤ???
  311: 
  312:   VALUE rb_funcall(VALUE recv, ID mid, int argc, ...)
  313: 
  314: ???δؿ???֥???????ecv??id?ǻ?ꤵ???᥽?åɤ?ӽ????ޤ?????????˰?????????ʲ??δؿ????????
  315: 
  316:   VALUE rb_funcall2(VALUE recv, ID mid, int argc, VALUE *argv)
  317:   VALUE rb_apply(VALUE recv, ID mid, VALUE args)
  318: 
  319: apply?ˤϰ?????uby????????ޤ???
  320: 
  321: 2.2.4 ????????????????C??????Ȥäƻ??È¡??????Ǥ????Ï¡???ô¡¤¥??ó¥¹¥????????????????Τ???????????Æ¥????????Ǥ?
  322: ?Þ¤????í¡¼????????Ȥ???Ë¡?ϸø³«¤·?Ƥ??Þ¤???
  323: ???֥??????ȤΥ??󥹥???ѿ???ȡ???????????ʲ??????????
  324: 
  325:   VALUE rb_ivar_get(VALUE obj, ID id)
  326:   VALUE rb_ivar_set(VALUE obj, ID id, VALUE val)
  327: 
  328: id??b_intern()???????Τ?äƤ????????
  329: 
  330: ?????Ȥ????ϰʲ??δؿ?ȤäƤ????????
  331: 
  332:   VALUE rb_const_get(VALUE obj, ID id)
  333: 
  334: ?????????????뤿???ϡ?.1.3 ????٤ǾҲ?????????ȤäƤ????????
  335: 
  336: 3??Ruby???Ȥξ??ͭ
  337: 
  338: C???Ruby?δ֤Ǿ???????ˡ?ˤĤ??Ʋ???ޤ???
  339: 
  340: 3.1 C???黲?ȤǤ???by???
  341: 
  342: ?ʲ???uby??????Υ??뤫?黲?ȤǤ??ޤ???
  343: 
  344:   Qtrue
  345:   Qfalse
  346: 
  347:     ???????Qfalse??????⵶?Ȥߤʤ?????(?Ĥޤ???
  348: 
  349:   Qnil
  350: 
  351:     C??줫?鸫????il?ס?
  352: 
  353: 3.2 C??uby?Ƕ?ͭ???????????uby??????Ȥäƾ????Ǥ??ޤ?????ͭ?Ǥ?????ѿ?Ϥ????Ĥ??μ??????????????Τʤ??Ǥ??Ȥ????Ȥ???Ȼפ?????b_define_variable()?Ǥ???
  354: 
  355:   void rb_define_variable(const char *name, VALUE *var)
  356: 
  357: ???δؿ?uby???ȤǶ?ͭ????????????ޤ???????
  358: `$'?ǻϤޤ??????ˤϼ?ưŪ??ɲä???????????ѿ?ͤ?????????ưŪ??uby??б???????ͤ????ޤ???
  359: 
  360: ?ޤ?Ruby¦?????????Ǥ??ʤ???????????????ead only?????ʲ??δؿ?????ޤ???
  361: 
  362:   void rb_define_readonly_variable(const char *name, VALUE *var)
  363: 
  364: ??????????ook????????????Ǥ??ޤ???hook???
  365: ??????ʲ??δؿ?Ѥ???????ޤ???hook??????????λ??Ȥ????ook?ǹԤ?ɬ???????????
  366: 
  367:   void rb_define_hooked_variable(const char *name, VALUE *var,
  368:                                  VALUE (*getter)(), void (*setter)())
  369: 
  370: ???δؿ??δؿ????ook?ΤĤ?????????????????????ô¤¬»??Ȥ??줿???ˤϴؿ?ter???????ͤ????åȤ???????ˤϴؿ?ter???ƤФ???hook??ꤷ?ʤ?????etter??etter????ꤷ?Þ¤???
  371: 
  372: # getter??tter??ʤ?rb_define_variable()??????ˤʤ롥
  373: 
  374: ???줫?顤C?δؿ???Ƽ¸?????Ruby???????????Ø¿ô¤¬¤???????
  375: 
  376:   void rb_define_virtual_variable(const char *name,
  377:                                   VALUE (*getter)(), void (*setter)())
  378: 
  379: ???δؿ????????줿Ruby?????ô¤¬»??Ȥ??줿???ˤ?getter???????ͤ????åȤ??줿???ˤ?etter???ƤФ?????
  380: 
  381: getter??etter?λ?ͤϰʲ???̤?????
  382: 
  383:   (*getter)(ID id, void *data, struct global_entry* entry);
  384:   (*setter)(VALUE val, ID id, void *data, struct global_entry* entry);
  385: 
  386: 3.3 C?Υǡ?????y???֥??????Ȥˤ???C???????????줿?ǡ???(??¤?)??y?Υ??֥??????ȤȤ????????????????????ꤨ?ޤ??????Τ褦?ʾ??ˤϡ?Data?Ȥ???
  387: Ruby???֥??????Ȥ??ι?¤?(?ؤΥݥ????򤯤????Ȥ?uby
  388: ???֥??????ȤȤ??Ƽ??????????ˤʤ?????
  389: 
  390: Data???֥??????Ȥ?????ƹ?¤???y???֥??????Ȥ˥??ץ???????뤿???ϡ??ʲ??Υޥ????Ȥ??ޤ???
  391: 
  392:   Data_Wrap_Struct(klass, mark, free, ptr)
  393: 
  394: ???Υޥ?????????????줿Data???֥??????ȤǤ???
  395: 
  396: klass?Ϥ???ata???֥??????ȤΥ??饹?Ǥ???ptr?ϥ??ץ??벽?????ι?¤??ؤΥݥ??󥿤Ǥ???mark?Ϥ??ι?¤???Ruby?Υ??֥???
  397: ???Ȥؤλ??Ȥ??????˻Ȥ??ؿ???????Τ褦?ʻ??Ȥ?ޤʤ?
  398: ???ˤ???ꤷ?ޤ???
  399: 
  400: # ???Τ褦?ʻ??Ȥϴ?????????
  401: free?Ϥ??ι?¤????⤦???ˤʤä????˸ƤФ??Ø¿?????????Ø¿ô¤¬¥????Ù¡??????쥯???????Ф????????줬-1?ξ??Ï¡?ñ
  402: ?????????????
  403: 
  404: C?ι?¤??γ???ata???֥??????Ȥ???????˹Ԥ??ޥ???
  405: ???ưʲ??Τ?????????????ޤ???
  406: 
  407:   Data_Make_Struct(klass, type, mark, free, sval)
  408: 
  409: ???Υޥ?????????????줿Data???֥??????ȤǤ???
  410: 
  411: klass, mark, free??ata_Wrap_Struct?????Ư???򤷤ޤ???type
  412: ?ϳ???Ƥ??¤??η??Ǥ???????Ƥ?????¤???ѿ?l
  413: ???????????????ѿ????(type*) ?Ǥ??????????????
  414: 
  415: Data???֥??????Ȥ??????󥿤?????Τϰʲ??Υޥ??????
  416: ?Þ¤???
  417: 
  418:   Data_Get_Struct(obj, type, sval)
  419: 
  420: C?ι?¤??ؤΥݥ??󥿤?ѿ?l???????????
  421: 
  422: ??????ata?λȤ???Ϥ??????????????Τǡ???????????򻲾Ȥ??Ƥ????????
  423: 
  424: 4???? - dbm?ѥå?????????????ޤǤ???ǤȤꤢ????????饤?֥??Ϻ??????Ǥ???
  425: Ruby??xt?ǥ??쥯?ȥ????Ǥ˴ޤޤ?????m?饤?֥????????ʳ?Ū??????ޤ???
  426: 
  427: (1) ?ǥ??쥯?ȥ???
  428: 
  429:   % mkdir ext/dbm
  430: 
  431: Ruby 1.1????Ǥ?դΥǥ??쥯?ȥ?????ʥߥå??饤?֥????뤳?Ȥ??Ǥ??????ˤʤ???????Ruby?????˥?????????
  432: ??uby????????ǥ??쥯?ȥ?????ext?ǥ??쥯?ȥ???˳??
  433: ?饤?֥???Υǥ??쥯?ȥ???ɬ???????????̾??????????????ޤ???
  434: (2) ??פ????ޤ??????ʤ?????ɡ??ɤ???????ǽ??????뤫?ɤ????ޤ??
  435: ?פ???????????????ɤ???饹????뤫?????Υ??饹?ˤ??ɤ?᥽?åɤ????뤫?????饹???????????ɤˤĤ???߷????ޤ???
  436: 
  437: (3) C?????ɤ??
  438: 
  439: ????饤?֥????Ȥʤ?????????????ޤ???C???????
  440: ?????ҤȤĤλ??ˤϡ֥饤?֥?̾.c?פ?֤?ɤ??Ǥ??礦??C
  441: ???????????ʣ????ˤϵդˡ֥饤?֥?̾.c?פȤ????ե?
  442: ??????򤱤???????????????֥??????ȥե??????⥸?塼
  443: ????????Ū?????????֥饤?֥?̾.o?פȤ????ե?????Ȥ???ͤ??뤫??????
  444: 
  445: Ruby?ϳ???饤?֥?????ɤ????ˡ?nit_?饤?֥?̾?פ??????ؿ??ưŪ?˼¹Ԥ??ޤ???dbm?饤?֥??ξ???nit_dbm???Ǥ??????δؿ?????饹???⥸?塼?롤?᥽?åɡ????ɤ???????ޤ???dbm.c????????ޤ???
  446: 
  447: --
  448: Init_dbm()
  449: {
  450:     /* DBM???饹??????/
  451:     cDBM = rb_define_class("DBM", rb_cObject);
  452:     /* DBM??numerate?⥸?塼?????󥯥롼?ɤ???/
  453:     rb_include_module(cDBM, rb_mEnumerable);
  454: 
  455:     /* DBM???饹?Î¥??饹?᥽?Ã¥?pen(): ??C????õ¤±¤?/
  456:     rb_define_singleton_method(cDBM, "open", fdbm_s_open, -1);
  457: 
  458:     /* DBM???饹?Υ᥽?å?lose(): ???ʤ? */
  459:     rb_define_method(cDBM, "close", fdbm_close, 0);
  460:     /* DBM???饹?Υ᥽?å?]: ??1??*/
  461:     rb_define_method(cDBM, "[]", fdbm_fetch, 1);
  462:                 :
  463: 
  464:     /* DBM?ǡ?????????륤?󥹥???ѿ?Τ???ID */
  465:     id_dbm = rb_intern("dbm");
  466: }
  467: --
  468: 
  469: DBM?饤?֥???bm?Υǡ?????б????륪?֥??????Ȥˤʤ??????????顤C???????bm??y??????˼????????????????
  470: 
  471: 
  472: dbm.c?Ǥ?ata_Make_Struct????Τ褦?˻ȤäƤ??ޤ???
  473: 
  474: --
  475: struct dbmdata {
  476:     int  di_size;
  477:     DBM *di_dbm;
  478: };
  479: 
  480: 
  481: obj = Data_Make_Struct(klass, struct dbmdata, 0, free_dbm, dbmp);
  482: --
  483: 
  484: ?????Ǥ?bmstruct??¤??ؤΥݥ??󥿤?a?˥??ץ??벽???Ƥ?
  485: ?ޤ???DBM*??ܥ??ץ??벽???ʤ??Τ?lose()???????ν??????ƤΤ??ȤǤ???
  486: 
  487: Data???֥??????Ȥ???mstruct??¤??Υݥ??󥿤????????˰ʲ??Υޥ????ȤäƤ??ޤ???
  488: 
  489: --
  490: #define GetDBM(obj, dbmp) {\
  491:     Data_Get_Struct(obj, struct dbmdata, dbmp);\
  492:     if (dbmp->di_dbm == 0) closed_dbm();\
  493: }
  494: --
  495: 
  496: ?????????ʥޥ??????????????dbmdata??¤??Υݥ????μ??Ф??ȡ?close???????뤫?ɤ????Υ???å???Ȥ???
  497: ?????Ǥ???
  498: 
  499: DBM???饹?ˤϤ?????????åɤ???????????ʬ?????3????????ý¤¬¤¢¤??????ҤȤĤϰ??ô¤¬¸?????Ç¡???????Ƥ?elete?᥽?åɤ?????????delete?᥽?åɤ?õ¤·¤Æ¤???dbm_delete()?Ϥ??Τ褦?ˤʤäƤ??Þ¤???
  500: 
  501: --
  502: static VALUE
  503: fdbm_delete(obj, keystr)
  504:     VALUE obj, keystr;
  505: {
  506:         :
  507: }
  508: --
  509: 
  510: ???ô¤¬¸???????פ???self???2???ߤ??᥽?Ã¥??ΰ??ʤ?????
  511: 
  512: ??????????????õ¤±¤??Τ?uby????????ΤȤ?????????dbm?饤?Ö¥??????C????õ¤±¤?????BM?Î¥??饹?᥽?åɤǤ???en()?Ǥ?????????õ¤·¤Æ¤???
  513: ??m_s_open()?Ϥ????ʤäƤ??ޤ???
  514: 
  515: --
  516: static VALUE
  517: fdbm_s_open(argc, argv, klass)
  518:     int argc;
  519:     VALUE *argv;
  520:     VALUE klass;
  521: {
  522:         :
  523:     if (rb_scan_args(argc, argv, "11", &file, &vmode) == 1) {
  524:         mode = 0666;           /* default value */
  525:     }
  526:         :
  527: }
  528: --
  529: 
  530: ???Υ????פδؿ???Ϳ????????????Ϳ??
  531: ????????äƤ?????ˤʤ?????self?????????
  532: ?????Þ¤???
  533: 
  534: ???????????????????뤿???ؿ?pen()?Ǥ????????_scan_args()?Ǥ????3????ꤷ???ե????ޥåȤ????????4???ߤ˻?ꤷ?????ͤ?????Ƥ????????????ե????ޥåȤϡ??1ʸ??????Ǥ??ʤ?????????
  535: ????Ǥ??????????????????̵꤬?????Þ¤???????뤫?ɤ????ò¼¨¤?"*"?Ǥ???2ʸ??3ʸ??????Ǥ???????dbm.c????Ï¡??Õ¥????ޥåȤ?11"?Ǥ????顤???????Ç¡?2?Ĥޤǵö¤µ¤??Ȥ???????ˤʤ?????????????????????ͤ?il(C?????????nil)?ˤʤ?????
  536: 
  537: Ruby??????õ¤±¼?????ndexes??????????????
  538: ???Ǥ???
  539: 
  540: --
  541: static VALUE
  542: fdbm_indexes(obj, args)
  543:     VALUE obj, args;
  544: {
  545:         :
  546: }
  547: --
  548: 
  549: ?1??self???2??Ruby???????
  550: 
  551: ** ??Õ»?
  552: Ruby?ȶ?ͭ?Ϥ??ʤ???Ruby?Υ??֥??????Ȥ??????ǽ??Τ?????????ʲ??δؿ?Ȥä?uby???󥿥ץ꥿??ѿ?????򶵤??Ƥ????Ƥ?????????Ǥʤ???C?ǥȥ??????????ޤ???
  553: 
  554:   void rb_global_variable(VALUE *var)
  555: 
  556: (4) extconf.rb??Õ¤???Makefile??????÷·¿¤Ë¤Ê¤?tconf.rb?Ȥ????Õ¥???????
  557: ?ޤ???extconf.rb?ϥ饤?֥??Υ??????ɬ??ʾ?Υ???????ʤɤ?????Ȥ??Ū?Ǥ????ޤ???
  558: 
  559:   require 'mkmf'
  560: 
  561: ??conf.rb?????֤??ޤ???extconf.rb????ϰʲ???uby????Ȥ????Ȥ????????
  562: 
  563:   have_library(lib, func): ?饤?֥?????ߥ???å?
  564:   have_func(func, header): ?ؿ???ߥ???å?
  565:   have_header(header): ?إå?ե?????¸?ߥ???å?
  566:   create_makefile(target): Makefile????
  567: 
  568: ?ʲ???ѿ?Ȥ????Ȥ??Ǥ??ޤ???
  569: 
  570:   $CFLAGS: ?????????ɲ???˻?ꤹ???饰(-O?ʤ?
  571:   $CPPFLAGS: ?×¥??í¥»?Ã¥???ɲ???Ë»?ꤹ???饰(-I???ʤ?
  572:   $LDFLAGS: ????????ɲ???˻?ꤹ???饰(-L?ʤ?
  573:   $objs: ???????????֥??????ȥե??????Υꥹ??
  574: ???֥??????ȥե??????ꥹ?Ȥϡ???????????ե??????????Ƽ?ưŪ??????????????make???????????????????????????Ū?˻?ꤹ?????????????
  575: 
  576: ?饤?֥??򥳥???뤹???郎·?鷺?????Υ饤?֥??򥳥????뤷?ʤ????ˤ?reate_makefile??Фʤ???Makefile???
  577: ????줺??????????Ԥ??ޤ???
  578: (5) depend??դ????⤷???ǥ??쥯?ȥ?depend?Ȥ????ե????뤬¸?ߤ?????
  579: Makefile??????ط?????å????Ƥ???????
  580: 
  581:   % gcc -MM *.c > depend
  582: 
  583: ?ʤɤǺ????Ȥ???????????ä????????Ǥ??礦??
  584: 
  585: (6) Makefile???????Makefile??ݤ??????뤿????
  586:   ruby extconf.rb
  587: 
  588: ?Ȥ??ޤ???extconf.rb??require 'mkmf' ?ιԤ??ʤ????ˤϥ??顼
  589: ?ˤʤ????Τǡ?????ä???
  590:   ruby -r mkmf extconf.rb
  591: 
  592: ?Ȥ??Ƥ????????
  593: 
  594: ?ǥ??쥯?ȥ?ext?ʲ???Ѱդ??????ˤ?uby????ake?λ?????ưŪ??akefile???????????Τǡ????Υ??ƥåפ??פǤ???
  595: 
  596: (7) make????ưŪ?????饤?֥???????????Ϥ??ξ?make???Ƥ????
  597: ????ɬ??Ǥ??? make install ?ǥ??󥹥ȡ??뤵??????
  598: 
  599: ext?ʲ??˥ǥ??쥯?ȥ???դ??????ϡ?Ruby?Υǥ??쥯?ȥ?
  600: make??Ԥ???Makefile???????ke??ɬ??ˤ??ƤϤ??Υ???塼??Ruby?ؤΥ????ޤǼ?ưŪ?˼¹Ԥ??Ƥ???????
  601: extconf.rb??????????ɤ???akefile?κ?????ɬ??ʻ??Ϥ???Ruby?ǥ??쥯?ȥ?make???Ƥ????????
  602: 
  603: ????饤?֥???ake install??uby?饤?֥??Υǥ??쥯?ȥ?
  604: ???˥??ԡ??????????⤷????饤?֥??ȶ?Ĵ???ƻȤ?Ruby?ǵ?
  605: ?Ò¤??줿?×¥í¥°???????ꡤRuby?饤?Ö¥???Ö¤????????ˤϡ?
  606: ????饤?֥???Υǥ??쥯?ȥ?????lib ?Ȥ????ǥ??쥯?ȥ??ꡤ???????????.rb ?Υե?????????Ƥ?????????˥????ȡ??뤵??????
  607: 
  608: (8) ?ǥХå?
  609: 
  610: ?ޤ????ǥХå????ʤ???????ʤ??Ǥ??礦?͡?ext/Setup?˥ǥ?????ȥ?????????˥????????ǥǥХå????Ȥ??????ˤ??????????????????뤬????ʤ??????ɡ?
  611: 
  612: (9) ?Ǥ????????????ä??????ʤꡤ?????ø³«¤¹???ꡤ????ꡤ????ͳ?ˤ?
  613: ?Ȥ??????????Ruby?κ??ϳ???饤?֥??˴ؤ??ư??θ????ĥ???ޤ???
  614: Appendix A. Ruby?Υ??????????ɤ???
  615: 
  616: Ruby?Υ??????Ϥ????Ĥ????????뤳?Ȥ???????????Τ????????饤?֥????ϴ???˳???饤?֥??????????ˤʤ??Ƥ??ޤ????????Υ??????Ϻ??ޤǤ???ǤۤȤ?????
  617: ?פ??ޤ???
  618: 
  619: Ruby???????
  620: 
  621:   class.c
  622:   error.c
  623:   eval.c
  624:   gc.c
  625:   object.c
  626:   parse.y
  627:   variable.c
  628: 
  629: ?桼?ƥ??????ؿ? dln.c
  630:   regex.c
  631:   st.c
  632:   util.c
  633: 
  634: Ruby???ޥ?μ?? dmyext.c
  635:   inits.c
  636:   main.c
  637:   ruby.c
  638:   version.c
  639: 
  640: ???饹?饤?֥?
  641: 
  642:   array.c
  643:   bignum.c
  644:   compar.c
  645:   dir.c
  646:   enum.c
  647:   file.c
  648:   hash.c
  649:   io.c
  650:   marshal.c
  651:   math.c
  652:   numeric.c
  653:   pack.c
  654:   prec.c
  655:   process.c
  656:   random.c
  657:   range.c
  658:   re.c
  659:   signal.c
  660:   sprintf.c
  661:   string.c
  662:   struct.c
  663:   time.c
  664: 
  665: Appendix B. ?????Ø¿?Õ¥?????
  666: 
  667: C??줫??by?ε?ǽ??Ѥ???I?ϰʲ???̤????롥
  668: 
  669: ** ??
  670: 
  671: VALUE
  672: 
  673:   Ruby???֥??????Ȥ?????뷿??ɬ??˱????ƥ??㥹?Ȥ???Ѥ??롥
  674:   ??߹??߷????????η???uby.h?˵??Ҥ??Ƥ???ǻϤޤ빽¤
  675:   ??Ǥ??롥VALUE???򤳤??˥??㥹?Ȥ??뤿??R?ǻϤޤ빽¤?
  676:   ̾????????̾??Î¥Þ¥??í¤¬??Õ¤??????ë¡¥
  677: 
  678: ** ????
  679: 
  680: Qnil
  681: 
  682:   ???il???Ö¥???????
  683: Qtrue
  684: 
  685:   ???rue???֥??????????Υǥե????)
  686: 
  687: Qfalse
  688: 
  689:   ???alse???Ö¥???????
  690: ** C?Ç¡????Î¥??×¥??ë²½
  691: 
  692: Data_Wrap_Struct(VALUE klass, void (*mark)(), void (*free)(), void *sval)
  693: 
  694:   C????դΥݥ??󥿤򥫥ץ??벽????Ruby???֥??????Ȥ??????
  695:   ?Υݥ??󥿤?Ruby???饢?????????????ʤä?????free?ǻ?ꤷ??
  696:   ?Ø¿ô¤¬¸Æ¤Ð¤????Þ¤??????Υݥ??󥿤λؤ??Ç¡?????¾??uby????  ???????Ȥ???Ƥ????硤mark?Ë»?ꤹ????Þ¡????????
  697:   ?????ë¡¥
  698: 
  699: Data_Make_Struct(klass, type, mark, free, sval)
  700: 
  701:   type???Υ???malloc???????l????????塤???????ץ?
  702:   ?ë²½?????Ç¡???????Þ¥??í¡¥
  703: 
  704: Data_Get_Struct(data, type, sval)
  705: 
  706:   data????pe???Υݥ??󥿤???????l??????????í¡¥
  707: 
  708: ** ??????Ã¥?
  709: 
  710: TYPE(value)
  711: FIXNUM_P(value)
  712: NIL_P(value)
  713: void Check_Type(VALUE value, int type)
  714: void Check_SafeStr(VALUE value)
  715: 
  716: ** ?????
  717: 
  718: FIX2INT(value)
  719: INT2FIX(i)
  720: NUM2INT(value)
  721: INT2NUM(i)
  722: NUM2DBL(value)
  723: rb_float_new(f)
  724: StringValue(value)
  725: StringValuePtr(value)
  726: StringValueCStr(value)
  727: rb_str_new2(s)
  728: 
  729: ** ???饹/?⥸?塼????
  730: VALUE rb_define_class(const char *name, VALUE super)
  731: 
  732:   super?Υ??֥??饹?Ȥ??ƿ?????Ruby???饹?????롥
  733: 
  734: VALUE rb_define_class_under(VALUE module, const char *name, VALUE super)
  735: 
  736:   super?Υ??֥??饹?Ȥ??ƿ?????Ruby???饹??????module??  ??????????롥
  737: 
  738: VALUE rb_define_module(const char *name)
  739: 
  740:   ??????Ruby?⥸?塼???????롥
  741: 
  742: VALUE rb_define_module_under(VALUE module, const char *name)
  743: 
  744:   ??????Ruby?⥸?塼????????module????Ȥ???????롥
  745: 
  746: void rb_include_module(VALUE klass, VALUE module)
  747: 
  748:   ?⥸?塼?????󥯥롼?ɤ??롥class?????Ǥ?odule?򥤥?  ?롼?ɤ??Ƥ????ˤϲ??⤷?ʤ?(¿?ť??󥯥롼?ɤζػ???
  749: 
  750: void rb_extend_object(VALUE object, VALUE module)
  751: 
  752:   ???֥??????Ȥ???塼???????????????å??dz?????롥
  753: 
  754: ** ??????
  755: void rb_define_variable(const char *name, VALUE *var)
  756: 
  757:   Ruby???ȤǶ?Í­???륰?í¡¼?Ð¥???????ë¡¥????`$'??  ?Ϥޤ??????ˤϼ?ưŪ??ɲä?????name?Ȥ???uby?μ????  ?Ȥ??Ƶö¤µ¤???ʸ????? ')???????uby?×¥í¥°?? ?फ???????ʤ??ʤ롥
  758: 
  759: void rb_define_readonly_variable(const char *name, VALUE *var)
  760: 
  761:   Ruby???ȤǶ?Í­????ad only?Î¥??í¡¼?Ð¥???????ë¡¥
  762:   read only?Ǥ??뤳?Ȱʳ???b_define_variable()???????
  763: 
  764: void rb_define_virtual_variable(const char *name,
  765:                                 VALUE (*getter)(), void (*setter)())
  766: 
  767:   ?Ø¿???Ƽ¸?????Ruby???????ë¡¥??ô¤¬»??Ȥ??줿
  768:   ???ˤ?etter???????ͤ????åȤ??줿???ˤ?etter???ƤФ? ?롥
  769: 
  770: void rb_define_hooked_variable(const char *name, VALUE *var,
  771:                                VALUE (*getter)(), void (*setter)())
  772: 
  773:   ?Ø¿????ook?ΤĤ????????í¡¼?Ð¥???????ë¡¥????????Ȥ??줿???ˤ?etter?????Ø¿?ͤ????åȤ??줿???ˤ?  setter???ƤФ???getter??tter????ꤷ?????ˤ?ook????ꤷ?ʤ??Τ??????ʤ롥
  774: 
  775: void rb_global_variable(VALUE *var)
  776: 
  777:   GC?Τ??ᡤRuby?×¥í¥°??????????????????????, Ruby????  ???????Ȥ??????Þ¡??????ë¡¥
  778: 
  779: ** ???oid rb_define_const(VALUE klass, const char *name, VALUE val)
  780: 
  781:   ???????ë¡¥
  782: 
  783: void rb_define_global_const(const char *name, VALUE val)
  784: 
  785:   ?????????ë¡¥
  786: 
  787:      rb_define_const(rb_cObject, name, val)
  788: 
  789:   ??????????
  790: 
  791: ** ?᥽?å??
  792: 
  793: rb_define_method(VALUE klass, const char *name, VALUE (*func)(), int argc)
  794: 
  795:   ?᥽?åɤ????롥argc??elf