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

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