
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