
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: