linkterm 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,1276 @@
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
+ �Ȥ��Хݥ��󥿤�int���ѿ�����������ȡ������ͤ������Ȥ��Ƽ�
9
+ �갷���ޤ����դ�Ruby���ѿ��ˤϷ����ʤ����ǡ����˷��������
10
+ �������ΰ㤤�Τ��ᡤC��Ruby����ߤ��Ѵ����ʤ���С����ߤ���
11
+ �ǡ����򥢥������Ǥ��ޤ���
12
+
13
+ Ruby�Υǡ�����VALUE�Ȥ���C�η���ɽ������ޤ���VALUE���Υǡ�
14
+ ���Ϥ��Υǡ��������פ�ʬ���ΤäƤ��ޤ������Υǡ��������פ�
15
+ �����Τϥǡ���(���֥�������)�μºݤι�¤���̣���Ƥ��ơ�Ruby
16
+ �Υ��饹�ȤϤޤ���ä���ΤǤ���
17
+
18
+ VALUE����C�ˤȤäư�̣�Τ���ǡ�������Ф�����ˤ�
19
+
20
+ (1) VALUE�Υǡ��������פ��Τ�
21
+ (2) VALUE��C�Υǡ������Ѵ�����
22
+
23
+ ��ξ����ɬ�פǤ���(1)��˺���ȴְ�ä��ǡ������Ѵ����Ԥ��
24
+ �ơ��ǰ��ץ�����बcore dump���ޤ���
25
+
26
+ 1.1 �ǡ���������
27
+
28
+ Ruby�ˤϥ桼�����Ȥ���ǽ���Τ���ʲ��Υ����פ�����ޤ���
29
+
30
+ T_NIL nil
31
+ T_OBJECT �̾�Υ��֥�������
32
+ T_CLASS ���饹
33
+ T_MODULE �⥸�塼��
34
+ T_FLOAT ��ư��������
35
+ T_STRING ʸ����
36
+ T_REGEXP ����ɽ��
37
+ T_ARRAY ����
38
+ T_FIXNUM Fixnum(31bit����)
39
+ T_HASH Ϣ������
40
+ T_STRUCT (Ruby��)��¤��
41
+ T_BIGNUM ¿��Ĺ����
42
+ T_FILE ������
43
+ T_TRUE ��
44
+ T_FALSE ��
45
+ T_DATA �ǡ���
46
+ T_SYMBOL ����ܥ�
47
+
48
+ ����¾�����������Ѥ���Ƥ���ʲ��Υ����פ�����ޤ���
49
+
50
+ T_ICLASS
51
+ T_MATCH
52
+ T_UNDEF
53
+ T_VARMAP
54
+ T_SCOPE
55
+ T_NODE
56
+
57
+ �ۤȤ�ɤΥ����פ�C�ι�¤�ΤǼ�������Ƥ��ޤ���
58
+
59
+ 1.2 VALUE�Υǡ��������פ�����å�����
60
+
61
+ ruby.h�Ǥ�TYPE()�Ȥ����ޥ������������Ƥ��ơ�VALUE�Υǡ���
62
+ �����פ��Τ뤳�Ȥ�����ޤ���TYPE()�ޥ����Ͼ�ǾҲ𤷤�T_XXXX
63
+ �η�����������֤��ޤ���VALUE�Υǡ��������פ˱����ƽ�������
64
+ ���ˤϡ�TYPE()���ͤ�ʬ�����뤳�Ȥˤʤ�ޤ���
65
+
66
+ switch (TYPE(obj)) {
67
+ case T_FIXNUM:
68
+ /* FIXNUM��� */
69
+ break;
70
+ case T_STRING:
71
+ /* ʸ����ν��� */
72
+ break;
73
+ case T_ARRAY:
74
+ /* ������ */
75
+ break;
76
+ default:
77
+ /* �㳰��ȯ�������� */
78
+ rb_raise(rb_eTypeError, "not valid value");
79
+ break;
80
+ }
81
+
82
+ ����ȥǡ��������פ�����å����ơ��������ʤ�����㳰��ȯ����
83
+ ��ؿ����Ѱդ���Ƥ��ޤ���
84
+
85
+ void Check_Type(VALUE value, int type)
86
+
87
+ ���δؿ���value��type��̵����С��㳰��ȯ�������ޤ���������
88
+ ����Ϳ����줿VALUE�Υǡ��������פ����������ɤ��������å���
89
+ �뤿��ˤϡ����δؿ���Ȥ��ޤ���
90
+
91
+ FIXNUM��NIL�˴ؤ��ƤϤ���®��Ƚ�̥ޥ������Ѱդ���Ƥ��ޤ���
92
+
93
+ FIXNUM_P(obj)
94
+ NIL_P(obj)
95
+
96
+ 1.3 VALUE��C�Υǡ������Ѵ�����
97
+
98
+ �ǡ��������פ�T_NIL, T_FALSE, T_TRUE�Ǥ�������ǡ����Ϥ��줾
99
+ ��nil, false, true�Ǥ������Υǡ��������פΥ��֥������ȤϤҤ�
100
+ �Ĥ��Ĥ���¸�ߤ��ޤ���
101
+
102
+ �ǡ��������פ�T_FIXNUM�λ��������31bit�Υ����������������
103
+ ����FIXNUM��C���������Ѵ����뤿��ˤϥޥ�����FIX2INT()�פ��
104
+ ���ޤ������줫�顤FIXNUM�˸¤餺Ruby�Υǡ������������Ѵ�����
105
+ ��NUM2INT()�פȤ����ޥ���������ޤ������Υޥ����ϥǡ�������
106
+ �פΥ����å�̵���ǻȤ��ޤ�(�������Ѵ��Ǥ��ʤ����ˤ��㳰��
107
+ ȯ������)��Ʊ�ͤ˥����å�̵���ǻȤ����Ѵ��ޥ�����double��
108
+ ���Ф���NUM2DBL()�פ�����ޤ���
109
+
110
+ char* ����Ф���硢version 1.6 �����Ǥϡ�STR2CSTR()�פ�
111
+ �����ޥ�����ȤäƤ��ޤ������������ to_str() �ˤ����ۤ�
112
+ ���Ѵ���̤� GC ������ǽ�������뤿�ᡢversion 1.7 �ʹߤǤ�
113
+ obsolete �Ȥʤꡢ����� StringValue() �� StringValuePtr()
114
+ ��Ȥ�����侩���Ƥ��ޤ���StringValue(var) �� var �� String
115
+ �Ǥ���в��⤻���������Ǥʤ���� var �� var.to_str() �η�̤�
116
+ �֤�������ޥ�����StringValuePtr(var) ��Ʊ�ͤ� var ���֤�����
117
+ �Ƥ��� var ��ʸ����ɽ�����Ф��� char* ���֤��ޥ����Ǥ���var ��
118
+ ���Ƥ�ľ���֤����������������Τǡ�var �� lvalue �Ǥ���ɬ�פ�
119
+ ����ޤ���
120
+
121
+ ����ʳ��Υǡ��������פ��б�����C�ι�¤�Τ�����ޤ����б���
122
+ �빽¤�ΤΤ���VALUE�Ϥ��Τޤޥ��㥹��(���Ѵ�)����й�¤�Τ�
123
+ �ݥ��󥿤��Ѵ��Ǥ��ޤ���
124
+
125
+ ��¤�Τϡ�struct RXxxxx�פȤ���̾����ruby.h���������Ƥ���
126
+ �����㤨��ʸ����ϡ�struct RString�פǤ����ºݤ˻Ȥ���ǽ����
127
+ ����Τ�ʸ��������󤯤餤���Ȼפ��ޤ���
128
+
129
+ ruby.h�ǤϹ�¤�Τإ��㥹�Ȥ���ޥ������RXXXXX()��(������ʸ
130
+ ���ˤ������)�Ȥ���̾�����󶡤���Ƥ��ޤ�(��: RSTRING())��
131
+
132
+ ��¤�Τ���ǡ�������Ф��ޥ������󶡤���Ƥ��ޤ���ʸ����
133
+ str��Ĺ�������뤿��ˤϡ�RSTRING_LEN(str)�פȤ���ʸ����str��
134
+ char*�Ȥ������뤿��ˤϡ�RSTRING_PTR(str)�פȤ��ޤ��������
135
+ ���ˤϡ����줾���RARRAY_LEN(ary)�ס���RARRAY_PTR(ary)�פ�
136
+ �ʤ�ޤ���
137
+
138
+ Ruby�ι�¤�Τ�ľ�ܥ�������������˵���Ĥ��ʤ���Фʤ�ʤ���
139
+ �Ȥϡ������ʸ����ι�¤�Τ���Ȥϻ��Ȥ�������ǡ�ľ���ѹ���
140
+ �ʤ����ȤǤ���ľ���ѹ�������硤���֥������Ȥ����Ƥ���������
141
+ �Ȥ�ʤ��ʤäơ��פ�̥Х��θ����ˤʤ�ޤ���
142
+
143
+ 1.4 C�Υǡ�����VALUE���Ѵ�����
144
+
145
+ VALUE�μºݤι�¤��
146
+
147
+ * FIXNUM��
148
+
149
+ 1bit�����եȤ��ơ�LSB��Ω�Ƥ롥
150
+
151
+ * ����¾�Υݥ��󥿤ξ��
152
+
153
+ ���Τޤ�VALUE�˥��㥹�Ȥ��롥
154
+
155
+ �ȤʤäƤ��ޤ�����äơ�LSB������å������VALUE��FIXNUM����
156
+ �����狼��櫓�Ǥ�(�ݥ��󥿤�LSB��Ω�äƤ��ʤ����Ȥ��ꤷ��
157
+ ����)��
158
+
159
+ �Ǥ����顤FIXNUM�ʳ���Ruby�Υ��֥������Ȥι�¤�Τ�ñ��VALUE
160
+ �˥��㥹�Ȥ��������VALUE���Ѵ�����ޤ�����������Ǥ�դι�¤
161
+ �Τ�VALUE�˥��㥹�Ƚ����櫓�ǤϤ���ޤ��󡥥��㥹�Ȥ����
162
+ ��Ruby���ΤäƤ��빽¤��(ruby.h���������Ƥ���struct RXxxx
163
+ �Τ��)�����Ǥ���
164
+
165
+ FIXNUM�˴ؤ��Ƥ��Ѵ��ޥ������ͳ����ɬ�פ�����ޤ���C������
166
+ ����VALUE���Ѵ�����ޥ����ϰʲ��Τ�Τ�����ޤ���ɬ�פ˱���
167
+ �ƻȤ�ʬ���Ƥ���������
168
+
169
+ INT2FIX() ��Ȥ�������31bit����˼��ޤ뼫���������
170
+ INT2NUM() Ǥ�դ���������VALUE��
171
+
172
+ INT2NUM()��������FIXNUM���ϰϤ˼��ޤ�ʤ���硤Bignum���Ѵ�
173
+ ���Ƥ���ޤ�(���������٤�)��
174
+
175
+ 1.5 Ruby�Υǡ���������
176
+
177
+ ������Ҥ٤��̤ꡤRuby�ι�¤�Τ򥢥���������������Ƥι�����
178
+ �Ԥ����Ȥϴ�����ޤ��󡥤ǡ�Ruby�Υǡ�����������ˤ�
179
+ Ruby���Ѱդ��Ƥ���ؿ����Ѥ��Ƥ���������
180
+
181
+ �����ǤϤ�äȤ�Ȥ���Ǥ�����ʸ��������������/�����
182
+ ���ؿ��򤢤��ޤ�(�����ǤϤʤ��Ǥ�)��
183
+
184
+ ʸ������Ф���ؿ�
185
+
186
+ rb_str_new(const char *ptr, long len)
187
+
188
+ ������Ruby��ʸ������������롥
189
+
190
+ rb_str_new2(const char *ptr)
191
+
192
+ C��ʸ���󤫤�Ruby��ʸ������������롥���δؿ��ε�ǽ��
193
+ rb_str_new(ptr, strlen(ptr))��Ʊ���Ǥ��롥
194
+
195
+ rb_tainted_str_new(const char *ptr, long len)
196
+
197
+ �����ޡ������ղä��줿������Ruby��ʸ������������롥����
198
+ ����Υǡ����˴�Ť�ʸ����ˤϱ����ޡ������ղä����٤�
199
+ �Ǥ��롥
200
+
201
+ rb_tainted_str_new2(const char *ptr)
202
+
203
+ C��ʸ���󤫤�����ޡ������ղä��줿Ruby��ʸ������������롥
204
+
205
+ rb_str_cat(VALUE str, const char *ptr, long len)
206
+
207
+ Ruby��ʸ����str��len�Х��Ȥ�ʸ����ptr���ɲä��롥
208
+
209
+ ������Ф���ؿ�
210
+
211
+ rb_ary_new()
212
+
213
+ ���Ǥ�0��������������롥
214
+
215
+ rb_ary_new2(long len)
216
+
217
+ ���Ǥ�0��������������롥len����ʬ���ΰ�򤢤餫������
218
+ ���ƤƤ�����
219
+
220
+ rb_ary_new3(long n, ...)
221
+
222
+ �����ǻ��ꤷ��n���Ǥ�ޤ�������������롥
223
+
224
+ rb_ary_new4(long n, VALUE *elts)
225
+
226
+ �����Ϳ����n���Ǥ�������������롥
227
+
228
+ rb_ary_push(VALUE ary, VALUE val)
229
+ rb_ary_pop(VALUE ary)
230
+ rb_ary_shift(VALUE ary)
231
+ rb_ary_unshift(VALUE ary, VALUE val)
232
+
233
+ Array��Ʊ̾�Υ᥽�åɤ�Ʊ��Ư���򤹤�ؿ�����1������ɬ��
234
+ ����Ǥʤ���Фʤ�ʤ���
235
+
236
+ 2��Ruby�ε�ǽ��Ȥ�
237
+
238
+ ����Ū��Ruby�ǽ񤱤뤳�Ȥ�C�Ǥ�񤱤ޤ���Ruby���Τ�Τ�C�ǵ�
239
+ �Ҥ���Ƥ����Ǥ����顤�����Ȥ����������ʤ�Ǥ����ɡ�������
240
+ ��Ruby�γ�ĥ�˻Ȥ����Ȥ�¿����������ͽ¬����뵡ǽ���濴�˾�
241
+ �𤷤ޤ���
242
+
243
+ 2.1 Ruby�˵�ǽ���ɲä���
244
+
245
+ Ruby���󶡤���Ƥ���ؿ���Ȥ���Ruby���󥿥ץ꥿�˿�������ǽ
246
+ ���ɲä��뤳�Ȥ��Ǥ��ޤ���Ruby�Ǥϰʲ��ε�ǽ���ɲä���ؿ���
247
+ �󶡤���Ƥ��ޤ���
248
+
249
+ * ���饹���⥸�塼��
250
+ * �᥽�åɡ��ðۥ᥽�åɤʤ�
251
+ * ���
252
+
253
+ �ǤϽ�˾Ҳ𤷤ޤ���
254
+
255
+ 2.1.1 ���饹/�⥸�塼�����
256
+
257
+ ���饹��⥸�塼���������뤿��ˤϡ��ʲ��δؿ���Ȥ��ޤ���
258
+
259
+ VALUE rb_define_class(const char *name, VALUE super)
260
+ VALUE rb_define_module(const char *name)
261
+
262
+ �����δؿ��Ͽ�����������줿���饹��⥸�塼����֤��ޤ���
263
+ �᥽�åɤ����������ˤ������ͤ�ɬ�פʤΤǡ��ۤȤ�ɤξ��
264
+ ������ͤ��ѿ��˳�Ǽ���Ƥ���ɬ�פ�����Ǥ��礦��
265
+
266
+ ���饹��⥸�塼���¾�Υ��饹�������˥ͥ��Ȥ�������������
267
+ �ϰʲ��δؿ���Ȥ��ޤ���
268
+
269
+ VALUE rb_define_class_under(VALUE outer, const char *name, VALUE super)
270
+ VALUE rb_define_module_under(VALUE outer, const char *name)
271
+
272
+ 2.1.2 �᥽�å�/�ðۥ᥽�å����
273
+
274
+ �᥽�åɤ��ðۥ᥽�åɤ��������ˤϰʲ��δؿ���Ȥ��ޤ���
275
+
276
+ void rb_define_method(VALUE klass, const char *name,
277
+ VALUE (*func)(), int argc)
278
+
279
+ void rb_define_singleton_method(VALUE object, const char *name,
280
+ VALUE (*func)(), int argc)
281
+
282
+
283
+ ǰ�Τ�����������ȡ��ðۥ᥽�åɡפȤϡ���������Υ��֥�����
284
+ �Ȥ��Ф��Ƥ���ͭ���ʥ᥽�åɤǤ���Ruby�ǤϤ褯Smalltalk�ˤ�
285
+ ���륯�饹�᥽�åɤȤ��ơ����饹���Ф����ðۥ᥽�åɤ��Ȥ��
286
+ �ޤ���
287
+
288
+ �����δؿ��� argc�Ȥ���������C�δؿ����Ϥ��������ο�(��
289
+ ����)����ޤ���argc��0�ʾ�λ��ϴؿ��˰����Ϥ������ο����
290
+ ̣���ޤ���16�İʾ�ΰ����ϻȤ��ޤ���(�����פ�ޤ����͡���
291
+ ��ʤ�)���ºݤδؿ��ˤ���Ƭ�ΰ����Ȥ���self��Ϳ�����ޤ���
292
+ �ǡ����ꤷ�������1¿����������Ĥ��Ȥˤʤ�ޤ���
293
+
294
+ argc����λ��ϰ����ο��ǤϤʤ�����������ꤷ�����Ȥˤʤ�ޤ���
295
+ argc��-1�λ��ϰ����������������Ϥ���ޤ���argc��-2�λ��ϰ�
296
+ ����Ruby������Ȥ����Ϥ���ޤ���
297
+
298
+ �᥽�åɤ��������ؿ��Ϥ⤦��Ĥ���ޤ����ҤȤĤ�private��
299
+ ���åɤ��������ؿ��ǡ�������rb_define_method()��Ʊ���Ǥ���
300
+
301
+ void rb_define_private_method(VALUE klass, const char *name,
302
+ VALUE (*func)(), int argc)
303
+
304
+ private�᥽�åɤȤϴؿ������Ǥ����ƤӽФ����Ȥν���ʤ��᥽��
305
+ �ɤǤ���
306
+
307
+ �⤦�ҤȤĤϥ⥸�塼��ؿ�����������ΤǤ����⥸�塼��ؿ�
308
+ �Ȥϥ⥸�塼����ðۥ᥽�åɤǤ��ꡤƱ����private�᥽�åɤ�
309
+ �⤢���ΤǤ�����򤢤����Math�⥸�塼���sqrt()�ʤɤ�����
310
+ ���ޤ������Υ᥽�åɤ�
311
+
312
+ Math.sqrt(4)
313
+
314
+ �Ȥ��������Ǥ�
315
+
316
+ include Math
317
+ sqrt(4)
318
+
319
+ �Ȥ��������Ǥ�Ȥ��ޤ����⥸�塼��ؿ����������ؿ��ϰʲ���
320
+ �̤�Ǥ���
321
+
322
+ void rb_define_module_function(VALUE module, const char *name,
323
+ VALUE (*func)(), int argc)
324
+
325
+ �ؿ�Ū�᥽�å�(Kernel�⥸�塼���private method)��������뤿
326
+ ��δؿ��ϰʲ����̤�Ǥ���
327
+
328
+ void rb_define_global_function(const char *name, VALUE (*func)(), int argc)
329
+
330
+
331
+ �᥽�åɤ���̾��������뤿��δؿ��ϰʲ����̤�Ǥ���
332
+
333
+ void rb_define_alias(VALUE module, const char* new, const char* old);
334
+
335
+ ���饹�᥽�å�allocate������������������ꤹ�뤿��δؿ���
336
+ �ʲ����̤�Ǥ���
337
+
338
+ void rb_define_alloc_func(VALUE klass, VALUE (*func)(VALUE klass));
339
+ void rb_undef_alloc_func(VALUE klass);
340
+
341
+ func�ϥ��饹������Ȥ��Ƽ�����äơ�������������Ƥ�줿����
342
+ �����󥹤��֤��ʤ��ƤϤʤ�ޤ��󡣤��Υ��󥹥��󥹤ϡ�������
343
+ �������ʤɤ�ޤޤʤ����Ǥ�������ֶ��פΤޤޤˤ��Ƥ������ۤ�
344
+ ���褤�Ǥ��礦��
345
+
346
+ 2.1.3 ������
347
+
348
+ ��ĥ�饤�֥�꤬ɬ�פ�����Ϥ��餫����������Ƥ����������ɤ�
349
+ �Ǥ��礦��������������ؿ�����Ĥ���ޤ���
350
+
351
+ void rb_define_const(VALUE klass, const char *name, VALUE val)
352
+ void rb_define_global_const(const char *name, VALUE val)
353
+
354
+ ���Ԥ�����Υ��饹/�⥸�塼���°�����������������Ρ���
355
+ �Ԥϥ������Х���������������ΤǤ���
356
+
357
+ 2.2 Ruby�ε�ǽ��C����ƤӽФ�
358
+
359
+ ���ˡ�1.5 Ruby�Υǡ���������٤ǰ����Ҳ𤷤��褦�ʴؿ���
360
+ �Ȥ��С�Ruby�ε�ǽ��¸����Ƥ���ؿ���ľ�ܸƤӽФ����Ȥ�����
361
+ �ޤ���
362
+
363
+ # ���Τ褦�ʴؿ��ΰ���ɽ�Ϥ��ޤΤȤ�������ޤ��󡥥�������
364
+ # �뤷���ʤ��Ǥ��͡�
365
+
366
+ ����ʳ��ˤ�Ruby�ε�ǽ��ƤӽФ���ˡ�Ϥ����Ĥ�����ޤ���
367
+
368
+ 2.2.1 Ruby�Υץ�������eval����
369
+
370
+ C����Ruby�ε�ǽ��ƤӽФ���äȤ��ñ����ˡ�Ȥ��ơ�ʸ�����
371
+ Ϳ����줿Ruby�Υץ�������ɾ������ʲ��δؿ�������ޤ���
372
+
373
+ VALUE rb_eval_string(const char *str)
374
+
375
+ ����ɾ���ϸ��ߤδĶ��ǹԤ��ޤ����Ĥޤꡤ���ߤΥ��������ѿ�
376
+ �ʤɤ�����Ѥ��ޤ���
377
+
378
+ 2.2.2 ID�ޤ��ϥ���ܥ�
379
+
380
+ C����ʸ������ͳ������Ruby�Υ᥽�åɤ�ƤӽФ����Ȥ�Ǥ���
381
+ �����������ˡ�Ruby���󥿥ץ꥿��ǥ᥽�åɤ��ѿ�̾����ꤹ��
382
+ ���˻Ȥ��Ƥ���ID�ˤĤ����������Ƥ����ޤ��礦��
383
+
384
+ ID�Ȥ��ѿ�̾���᥽�å�̾��ɽ�������Ǥ���Ruby����Ǥ�
385
+
386
+ :���̻�
387
+
388
+ �ǥ��������Ǥ��ޤ���C���餳�����������뤿��ˤϴؿ�
389
+
390
+ rb_intern(const char *name)
391
+
392
+ ��Ȥ��ޤ���Ruby��������Ȥ���Ϳ����줿����ܥ�(�ޤ���ʸ��
393
+ ��)��ID���Ѵ�����ˤϰʲ��δؿ���Ȥ��ޤ���
394
+
395
+ rb_to_id(VALUE symbol)
396
+
397
+ 2.2.3 C����Ruby�Υ᥽�åɤ�ƤӽФ�
398
+
399
+ C����ʸ������ͳ������Ruby�Υ᥽�åɤ�ƤӽФ�����ˤϰʲ�
400
+ �δؿ���Ȥ��ޤ���
401
+
402
+ VALUE rb_funcall(VALUE recv, ID mid, int argc, ...)
403
+
404
+ ���δؿ��ϥ��֥�������recv��mid�ǻ��ꤵ���᥽�åɤ�Ƥӽ�
405
+ ���ޤ�������¾�˰����λ���λ������㤦�ʲ��δؿ��⤢��ޤ���
406
+
407
+ VALUE rb_funcall2(VALUE recv, ID mid, int argc, VALUE *argv)
408
+ VALUE rb_apply(VALUE recv, ID mid, VALUE args)
409
+
410
+ apply�ˤϰ����Ȥ���Ruby�������Ϳ���ޤ���
411
+
412
+ 2.2.4 �ѿ�/����򻲾�/��������
413
+
414
+ C����ؿ���Ȥäƻ��ȡ������Ǥ���Τϡ���������󥹥�����
415
+ ���Ǥ�������ѿ��ϰ����Τ�Τ�C������ѿ��Ȥ��ƥ��������Ǥ�
416
+ �ޤ������������ѿ��򻲾Ȥ�����ˡ�ϸ������Ƥ��ޤ���
417
+
418
+ ���֥������ȤΥ��󥹥����ѿ��򻲾ȡ���������ؿ��ϰʲ�����
419
+ ��Ǥ���
420
+
421
+ VALUE rb_ivar_get(VALUE obj, ID id)
422
+ VALUE rb_ivar_set(VALUE obj, ID id, VALUE val)
423
+
424
+ id��rb_intern()���������Τ�ȤäƤ���������
425
+
426
+ ����򻲾Ȥ���ˤϰʲ��δؿ���ȤäƤ���������
427
+
428
+ VALUE rb_const_get(VALUE obj, ID id)
429
+
430
+ ����򿷤���������뤿��ˤϡ�2.1.3 �������٤ǾҲ�
431
+ ��Ƥ���ؿ���ȤäƤ���������
432
+
433
+ 3��Ruby��C�Ȥξ���ͭ
434
+
435
+ C�����Ruby�δ֤Ǿ����ͭ������ˡ�ˤĤ��Ʋ��⤷�ޤ���
436
+
437
+ 3.1 C���黲�ȤǤ���Ruby�����
438
+
439
+ �ʲ���Ruby�������C�Υ�٥뤫�黲�ȤǤ��ޤ���
440
+
441
+ Qtrue
442
+ Qfalse
443
+
444
+ �����͡�Qfalse��C����Ǥ⵶�Ȥߤʤ���ޤ�(�Ĥޤ�0)��
445
+
446
+ Qnil
447
+
448
+ C���줫�鸫����nil�ס�
449
+
450
+ 3.2 C��Ruby�Ƕ�ͭ���������ѿ�
451
+
452
+ C��Ruby������ѿ���Ȥäƾ����ͭ�Ǥ��ޤ�����ͭ�Ǥ������
453
+ �ѿ��ˤϤ����Ĥ��μ��ब����ޤ������Τʤ��Ǥ�äȤ��ɤ��Ȥ�
454
+ ���Ȼפ���Τ�rb_define_variable()�Ǥ���
455
+
456
+ void rb_define_variable(const char *name, VALUE *var)
457
+
458
+ ���δؿ���Ruby��C�ȤǶ�ͭ��������ѿ���������ޤ����ѿ�̾��
459
+ `$'�ǻϤޤ�ʤ����ˤϼ�ưŪ���ɲä���ޤ��������ѿ����ͤ���
460
+ ������ȼ�ưŪ��Ruby���б������ѿ����ͤ��Ѥ��ޤ���
461
+
462
+ �ޤ�Ruby¦����Ϲ����Ǥ��ʤ��ѿ��⤢��ޤ�������read only��
463
+ �ѿ��ϰʲ��δؿ���������ޤ���
464
+
465
+ void rb_define_readonly_variable(const char *name, VALUE *var)
466
+
467
+ ������ѿ���¾��hook��Ĥ�������ѿ�������Ǥ��ޤ���hook�դ�
468
+ ������ѿ��ϰʲ��δؿ����Ѥ���������ޤ���hook�դ�����ѿ���
469
+ �ͤλ��Ȥ������hook�ǹԤ�ɬ�פ�����ޤ���
470
+
471
+ void rb_define_hooked_variable(const char *name, VALUE *var,
472
+ VALUE (*getter)(), void (*setter)())
473
+
474
+ ���δؿ���C�δؿ��ˤ�ä�hook�ΤĤ���줿����ѿ����������
475
+ �����ѿ������Ȥ��줿���ˤϴؿ�getter�����ѿ����ͤ����åȤ���
476
+ �����ˤϴؿ�setter���ƤФ�롥hook����ꤷ�ʤ�����getter��
477
+ setter��0����ꤷ�ޤ���
478
+
479
+ # getter��setter��0�ʤ��rb_define_variable()��Ʊ���ˤʤ롥
480
+
481
+ ���줫�顤C�δؿ��ˤ�äƼ¸������Ruby������ѿ����������
482
+ �ؿ�������ޤ���
483
+
484
+ void rb_define_virtual_variable(const char *name,
485
+ VALUE (*getter)(), void (*setter)())
486
+
487
+ ���δؿ��ˤ�ä�������줿Ruby������ѿ������Ȥ��줿���ˤ�
488
+ getter�����ѿ����ͤ����åȤ��줿���ˤ�setter���ƤФ�ޤ���
489
+
490
+ getter��setter�λ��ͤϰʲ����̤�Ǥ���
491
+
492
+ (*getter)(ID id, void *data, struct global_entry* entry);
493
+ (*setter)(VALUE val, ID id, void *data, struct global_entry* entry);
494
+
495
+ 3.3 C�Υǡ�����Ruby���֥������Ȥˤ���
496
+
497
+ C��������������줿�ǡ���(��¤��)��Ruby�Υ��֥������ȤȤ���
498
+ ��갷��������礬���ꤨ�ޤ������Τ褦�ʾ��ˤϡ�Data�Ȥ���
499
+ Ruby���֥������Ȥ�C�ι�¤��(�ؤΥݥ���)�򤯤�ळ�Ȥ�Ruby
500
+ ���֥������ȤȤ��Ƽ�갷����褦�ˤʤ�ޤ���
501
+
502
+ Data���֥������Ȥ��������ƹ�¤�Τ�Ruby���֥������Ȥ˥��ץ���
503
+ �����뤿��ˤϡ��ʲ��Υޥ�����Ȥ��ޤ���
504
+
505
+ Data_Wrap_Struct(klass, mark, free, ptr)
506
+
507
+ ���Υޥ���������ͤ��������줿Data���֥������ȤǤ���
508
+
509
+ klass�Ϥ���Data���֥������ȤΥ��饹�Ǥ���ptr�ϥ��ץ��벽����
510
+ C�ι�¤�ΤؤΥݥ��󥿤Ǥ���mark�Ϥ��ι�¤�Τ�Ruby�Υ��֥���
511
+ ���Ȥؤλ��Ȥ�������˻Ȥ��ؿ��Ǥ������Τ褦�ʻ��Ȥ�ޤޤʤ�
512
+ ���ˤ�0����ꤷ�ޤ���
513
+
514
+ # ���Τ褦�ʻ��Ȥϴ�����ޤ���
515
+
516
+ free�Ϥ��ι�¤�Τ��⤦���פˤʤä����˸ƤФ��ؿ��Ǥ�������
517
+ �ؿ��������١������쥯������ƤФ�ޤ������줬-1�ξ��ϡ�ñ
518
+ ��˳�������ޤ���
519
+
520
+ C�ι�¤�Τγ�����Data���֥������Ȥ�������Ʊ���˹Ԥ��ޥ�����
521
+ ���ưʲ��Τ�Τ��󶡤���Ƥ��ޤ���
522
+
523
+ Data_Make_Struct(klass, type, mark, free, sval)
524
+
525
+ ���Υޥ���������ͤ��������줿Data���֥������ȤǤ���
526
+
527
+ klass, mark, free��Data_Wrap_Struct��Ʊ��Ư���򤷤ޤ���type
528
+ �ϳ�����Ƥ�C��¤�Τη��Ǥ���������Ƥ�줿��¤�Τ��ѿ�sval
529
+ ����������ޤ��������ѿ��η��� (type*) �Ǥ���ɬ�פ�����ޤ���
530
+
531
+ Data���֥������Ȥ���ݥ��󥿤���Ф��Τϰʲ��Υޥ������Ѥ�
532
+ �ޤ���
533
+
534
+ Data_Get_Struct(obj, type, sval)
535
+
536
+ C�ι�¤�ΤؤΥݥ��󥿤��ѿ�sval����������ޤ���
537
+
538
+ ������Data�λȤ����Ϥ���ä�ʬ����ˤ����Τǡ������������
539
+ ����򻲾Ȥ��Ƥ���������
540
+
541
+ 4������ - dbm�ѥå���������
542
+
543
+ �����ޤǤ������ǤȤꤢ������ĥ�饤�֥��Ϻ���Ϥ��Ǥ���
544
+ Ruby��ext�ǥ��쥯�ȥ�ˤ��Ǥ˴ޤޤ�Ƥ���dbm�饤�֥������
545
+ �����ʳ�Ū���������ޤ���
546
+
547
+ (1) �ǥ��쥯�ȥ����
548
+
549
+ % mkdir ext/dbm
550
+
551
+ Ruby 1.1�����Ǥ�դΥǥ��쥯�ȥ�ǥ����ʥߥå��饤�֥����
552
+ �뤳�Ȥ��Ǥ���褦�ˤʤ�ޤ�����Ruby����Ū�˥�󥯤������
553
+ ��Ruby��Ÿ�������ǥ��쥯�ȥ�β���ext�ǥ��쥯�ȥ����˳�ĥ
554
+ �饤�֥���ѤΥǥ��쥯�ȥ����ɬ�פ�����ޤ���̾����Ŭ����
555
+ ����ǹ����ޤ���
556
+
557
+ (2) �߷פ���
558
+
559
+ �ޤ��������ʤ�Ǥ����ɡ��ɤ�������ǽ��¸����뤫�ɤ����ޤ���
560
+ �פ���ɬ�פ�����ޤ����ɤ�ʥ��饹��Ĥ��뤫�����Υ��饹�ˤ�
561
+ �ɤ�ʥ᥽�åɤ����뤫�����饹���󶡤�������ʤɤˤĤ����߷�
562
+ ���ޤ���
563
+
564
+ (3) C�����ɤ��
565
+
566
+ ��ĥ�饤�֥�����ΤȤʤ�C����Υ�������񤭤ޤ���C����Υ���
567
+ �����ҤȤĤλ��ˤϡ֥饤�֥��̾.c�פ����֤��ɤ��Ǥ��礦��C
568
+ ����Υ�������ʣ���ξ��ˤϵդˡ֥饤�֥��̾.c�פȤ����ե�
569
+ ����̾���򤱤�ɬ�פ�����ޤ������֥������ȥե�����ȥ⥸�塼
570
+ �������������Ū�����������֥饤�֥��̾.o�פȤ����ե�����
571
+ �Ȥ����ͤ��뤫��Ǥ���
572
+
573
+ Ruby�ϳ�ĥ�饤�֥�������ɤ�����ˡ�Init_�饤�֥��̾�פ�
574
+ �����ؿ���ưŪ�˼¹Ԥ��ޤ���dbm�饤�֥��ξ���Init_dbm��
575
+ �Ǥ������δؿ�����ǥ��饹���⥸�塼�롤�᥽�åɡ�����ʤɤ�
576
+ �����Ԥ��ޤ���dbm.c����������Ѥ��ޤ���
577
+
578
+ --
579
+ Init_dbm()
580
+ {
581
+ /* DBM���饹��������� */
582
+ cDBM = rb_define_class("DBM", rb_cObject);
583
+ /* DBM��Enumerate�⥸�塼��򥤥󥯥롼�ɤ��� */
584
+ rb_include_module(cDBM, rb_mEnumerable);
585
+
586
+ /* DBM���饹�Υ��饹�᥽�å�open(): ������C������Ǽ����� */
587
+ rb_define_singleton_method(cDBM, "open", fdbm_s_open, -1);
588
+
589
+ /* DBM���饹�Υ᥽�å�close(): �����Ϥʤ� */
590
+ rb_define_method(cDBM, "close", fdbm_close, 0);
591
+ /* DBM���饹�Υ᥽�å�[]: ������1�� */
592
+ rb_define_method(cDBM, "[]", fdbm_fetch, 1);
593
+ :
594
+
595
+ /* DBM�ǡ������Ǽ���륤�󥹥����ѿ�̾�Τ����ID */
596
+ id_dbm = rb_intern("dbm");
597
+ }
598
+ --
599
+
600
+ DBM�饤�֥���dbm�Υǡ������б����륪�֥������Ȥˤʤ�Ϥ���
601
+ �����顤C��������dbm��Ruby�������˼�����ɬ�פ�����ޤ���
602
+
603
+
604
+ dbm.c�Ǥ�Data_Make_Struct��ʲ��Τ褦�˻ȤäƤ��ޤ���
605
+
606
+ --
607
+ struct dbmdata {
608
+ int di_size;
609
+ DBM *di_dbm;
610
+ };
611
+
612
+
613
+ obj = Data_Make_Struct(klass, struct dbmdata, 0, free_dbm, dbmp);
614
+ --
615
+
616
+ �����Ǥ�dbmstruct��¤�ΤؤΥݥ��󥿤�Data�˥��ץ��벽���Ƥ�
617
+ �ޤ���DBM*��ľ�ܥ��ץ��벽���ʤ��Τ�close()�������ν������
618
+ ���ƤΤ��ȤǤ���
619
+
620
+ Data���֥������Ȥ���dbmstruct��¤�ΤΥݥ��󥿤���Ф�����
621
+ �˰ʲ��Υޥ�����ȤäƤ��ޤ���
622
+
623
+ --
624
+ #define GetDBM(obj, dbmp) {\
625
+ Data_Get_Struct(obj, struct dbmdata, dbmp);\
626
+ if (dbmp->di_dbm == 0) closed_dbm();\
627
+ }
628
+ --
629
+
630
+ ����ä�ʣ���ʥޥ����Ǥ������פ����dbmdata��¤�ΤΥݥ���
631
+ �μ��Ф��ȡ�close����Ƥ��뤫�ɤ����Υ����å���ޤȤ�Ƥ�
632
+ ������Ǥ���
633
+
634
+ DBM���饹�ˤϤ�������᥽�åɤ�����ޤ�����ʬ�ह���3�����
635
+ �����μ�����������ޤ����ҤȤĤϰ����ο�������Τ�Τǡ����
636
+ ���Ƥ�delete�᥽�åɤ�����ޤ���delete�᥽�åɤ�������Ƥ���
637
+ fdbm_delete()�Ϥ��Τ褦�ˤʤäƤ��ޤ���
638
+
639
+ --
640
+ static VALUE
641
+ fdbm_delete(obj, keystr)
642
+ VALUE obj, keystr;
643
+ {
644
+ :
645
+ }
646
+ --
647
+
648
+ �����ο�������Υ����פ���1������self����2�����ʹߤ��᥽�å�
649
+ �ΰ����Ȥʤ�ޤ���
650
+
651
+ �����ο�������Τ�Τ�C������Ǽ������Τ�Ruby������Ǽ���
652
+ ���ΤȤ�����ޤ���dbm�饤�֥�����ǡ�C������Ǽ�������
653
+ ��DBM�Υ��饹�᥽�åɤǤ���open()�Ǥ��������������Ƥ����
654
+ ��fdbm_s_open()�Ϥ����ʤäƤ��ޤ���
655
+
656
+ --
657
+ static VALUE
658
+ fdbm_s_open(argc, argv, klass)
659
+ int argc;
660
+ VALUE *argv;
661
+ VALUE klass;
662
+ {
663
+ :
664
+ if (rb_scan_args(argc, argv, "11", &file, &vmode) == 1) {
665
+ mode = 0666; /* default value */
666
+ }
667
+ :
668
+ }
669
+ --
670
+
671
+ ���Υ����פδؿ�����1������Ϳ����줿�����ο�����2������Ϳ��
672
+ ��줿���������äƤ�������ˤʤ�ޤ���self����3�����Ȥ���Ϳ
673
+ �����ޤ���
674
+
675
+ ���������Ϳ����줿��������Ϥ��뤿��δؿ���open()�Ǥ�Ȥ�
676
+ ��Ƥ���rb_scan_args()�Ǥ�����3�����˻��ꤷ���ե����ޥåȤ�
677
+ ��������4�ѿ��ʹߤ˻��ꤷ���ѿ����ͤ��������Ƥ���ޤ�������
678
+ �ե����ޥåȤϡ���1ʸ���ܤ���ά�Ǥ��ʤ������ο�����2ʸ���ܤ�
679
+ ��ά�Ǥ�������ο�����3ʸ���ܤ��б�������̵꤬�����ޤ�ΰ�
680
+ �������뤫�ɤ����򼨤�"*"�Ǥ���2ʸ���ܤ�3ʸ���ܤϾ�ά�Ǥ���
681
+ ����dbm.c����Ǥϡ��ե����ޥåȤ�"11"�Ǥ����顤�����Ϻ���1��
682
+ �ǡ�2�Ĥޤǵ������Ȥ�����̣�ˤʤ�ޤ�����ά����Ƥ������
683
+ �ѿ����ͤ�nil(C����Υ�٥�Ǥ�Qnil)�ˤʤ�ޤ���
684
+
685
+ Ruby������ǰ������������Τ�indexes������ޤ��������Ϥ�
686
+ ���Ǥ���
687
+
688
+ --
689
+ static VALUE
690
+ fdbm_indexes(obj, args)
691
+ VALUE obj, args;
692
+ {
693
+ :
694
+ }
695
+ --
696
+
697
+ ��1������self����2������Ruby������Ǥ���
698
+
699
+ ** ���ջ���
700
+
701
+ Ruby�ȶ�ͭ�Ϥ��ʤ���Ruby�Υ��֥������Ȥ��Ǽ�����ǽ���Τ���
702
+ C������ѿ��ϰʲ��δؿ���Ȥä�Ruby���󥿥ץ꥿���ѿ���¸��
703
+ �򶵤��Ƥ����Ƥ����������Ǥʤ���GC�ǥȥ�֥�򵯤����ޤ���
704
+
705
+ void rb_global_variable(VALUE *var)
706
+
707
+ (4) extconf.rb���Ѱդ���
708
+
709
+ Makefile������ο����ˤʤ�extconf.rb�Ȥ����ե��������
710
+ �ޤ���extconf.rb�ϥ饤�֥��Υ���ѥ����ɬ�פʾ��Υ�����
711
+ ���ʤɤ�Ԥ����Ȥ���Ū�Ǥ����ޤ���
712
+
713
+ require 'mkmf'
714
+
715
+ ��extconf.rb����Ƭ���֤��ޤ���extconf.rb����Ǥϰʲ���Ruby��
716
+ ����Ȥ����Ȥ�����ޤ���
717
+
718
+ have_library(lib, func): �饤�֥���¸�ߥ����å�
719
+ have_func(func, header): �ؿ���¸�ߥ����å�
720
+ have_header(header): �إå��ե������¸�ߥ����å�
721
+ create_makefile(target): Makefile������
722
+
723
+ �ʲ����ѿ���Ȥ����Ȥ��Ǥ��ޤ���
724
+
725
+ $CFLAGS: ����ѥ�������ɲ�Ū�˻��ꤹ��ե饰(-O�ʤ�)
726
+ $CPPFLAGS: �ץ�ץ����å����ɲ�Ū�˻��ꤹ��ե饰(-I��-D�ʤ�)
727
+ $LDFLAGS: ��󥯻����ɲ�Ū�˻��ꤹ��ե饰(-L�ʤ�)
728
+ $objs: ��󥯤���륪�֥������ȥե�����̾�Υꥹ��
729
+
730
+ ���֥������ȥե�����Υꥹ�Ȥϡ��̾�ϥ������ե�����򸡺���
731
+ �Ƽ�ưŪ����������ޤ�����make������ǥ���������������褦��
732
+ ��������Ū�˻��ꤹ��ɬ�פ�����ޤ���
733
+
734
+ �饤�֥��򥳥�ѥ��뤹���郎·�鷺�����Υ饤�֥��򥳥�
735
+ �ѥ��뤷�ʤ����ˤ�create_makefile��ƤФʤ����Makefile����
736
+ �����줺������ѥ����Ԥ��ޤ���
737
+
738
+ (5) depend���Ѱդ���
739
+
740
+ �⤷���ǥ��쥯�ȥ��depend�Ȥ����ե����뤬¸�ߤ���С�
741
+ Makefile����¸�ط�������å����Ƥ���ޤ���
742
+
743
+ % gcc -MM *.c > depend
744
+
745
+ �ʤɤǺ�뤳�Ȥ�����ޤ������ä�»��̵���Ǥ��礦��
746
+
747
+ (6) Makefile����������
748
+
749
+ Makefile��ºݤ��������뤿��ˤ�
750
+
751
+ ruby extconf.rb
752
+
753
+ �Ȥ��ޤ���extconf.rb�� require 'mkmf' �ιԤ��ʤ����ˤϥ��顼
754
+ �ˤʤ�ޤ��Τǡ��������ɲä���
755
+
756
+ ruby -r mkmf extconf.rb
757
+
758
+ �Ȥ��Ƥ���������
759
+
760
+ �ǥ��쥯�ȥ��ext�ʲ����Ѱդ������ˤ�Ruby���Τ�make�λ���
761
+ ��ưŪ��Makefile����������ޤ��Τǡ����Υ��ƥåפ����פǤ���
762
+
763
+ (7) make����
764
+
765
+ ưŪ��󥯥饤�֥�������������ˤϤ��ξ��make���Ƥ�����
766
+ ����ɬ�פǤ���� make install �ǥ��󥹥ȡ��뤵��ޤ���
767
+
768
+ ext�ʲ��˥ǥ��쥯�ȥ���Ѱդ������ϡ�Ruby�Υǥ��쥯�ȥ��
769
+ make��¹Ԥ����Makefile����������make��ɬ�פˤ�äƤϤ��Υ�
770
+ ���塼���Ruby�ؤΥ�󥯤ޤǼ�ưŪ�˼¹Ԥ��Ƥ���ޤ���
771
+ extconf.rb��񤭴�����ʤɤ���Makefile�κ�������ɬ�פʻ��Ϥ�
772
+ ��Ruby�ǥ��쥯�ȥ��make���Ƥ���������
773
+
774
+ ��ĥ�饤�֥���make install��Ruby�饤�֥��Υǥ��쥯�ȥ��
775
+ ���˥��ԡ�����ޤ����⤷��ĥ�饤�֥��ȶ�Ĵ���ƻȤ�Ruby�ǵ�
776
+ �Ҥ��줿�ץ�����ब���ꡤRuby�饤�֥����֤��������ˤϡ�
777
+ ��ĥ�饤�֥���ѤΥǥ��쥯�ȥ�β��� lib �Ȥ����ǥ��쥯�ȥ�
778
+ ���ꡤ������ ��ĥ�� .rb �Υե�������֤��Ƥ�����Ʊ���˥���
779
+ ���ȡ��뤵��ޤ���
780
+
781
+ (8) �ǥХå�
782
+
783
+ �ޤ����ǥХå����ʤ���ư���ʤ��Ǥ��礦�͡�ext/Setup�˥ǥ���
784
+ ���ȥ�̾��񤯤���Ū�˥�󥯤���ΤǥǥХå����Ȥ���褦�ˤ�
785
+ ��ޤ�������ʬ����ѥ��뤬�٤��ʤ�ޤ����ɡ�
786
+
787
+ (9) �Ǥ�������
788
+
789
+ ��Ϥ��ä���Ȥ��ʤꡤ������������ʤꡤ���ʤꡤ����ͳ�ˤ�
790
+ �Ȥ�����������Ruby�κ�Ԥϳ�ĥ�饤�֥��˴ؤ��ư��ڤθ�����
791
+ ��ĥ���ޤ���
792
+
793
+ Appendix A. Ruby�Υ����������ɤ�ʬ��
794
+
795
+ Ruby�Υ������Ϥ����Ĥ���ʬ�ह�뤳�Ȥ�����ޤ������Τ�������
796
+ ���饤�֥�����ʬ�ϴ���Ū�˳�ĥ�饤�֥���Ʊ��������ˤʤ�
797
+ �Ƥ��ޤ��������Υ������Ϻ��ޤǤ������ǤۤȤ������Ǥ����
798
+ �פ��ޤ���
799
+
800
+ Ruby�������
801
+
802
+ class.c
803
+ error.c
804
+ eval.c
805
+ gc.c
806
+ object.c
807
+ parse.y
808
+ variable.c
809
+
810
+ �桼�ƥ���ƥ��ؿ�
811
+
812
+ dln.c
813
+ regex.c
814
+ st.c
815
+ util.c
816
+
817
+ Ruby���ޥ�ɤμ���
818
+
819
+ dmyext.c
820
+ inits.c
821
+ main.c
822
+ ruby.c
823
+ version.c
824
+
825
+ ���饹�饤�֥��
826
+
827
+ array.c
828
+ bignum.c
829
+ compar.c
830
+ dir.c
831
+ enum.c
832
+ file.c
833
+ hash.c
834
+ io.c
835
+ marshal.c
836
+ math.c
837
+ numeric.c
838
+ pack.c
839
+ prec.c
840
+ process.c
841
+ random.c
842
+ range.c
843
+ re.c
844
+ signal.c
845
+ sprintf.c
846
+ string.c
847
+ struct.c
848
+ time.c
849
+
850
+ Appendix B. ��ĥ�Ѵؿ���ե����
851
+
852
+ C���줫��Ruby�ε�ǽ�����Ѥ���API�ϰʲ����̤�Ǥ��롥
853
+
854
+ ** ��
855
+
856
+ VALUE
857
+
858
+ Ruby���֥������Ȥ�ɽ�����뷿��ɬ�פ˱����ƥ��㥹�Ȥ����Ѥ��롥
859
+ �Ȥ߹��߷���ɽ������C�η���ruby.h�˵��Ҥ��Ƥ���R�ǻϤޤ빽¤
860
+ �ΤǤ��롥VALUE���򤳤��˥��㥹�Ȥ��뤿���R�ǻϤޤ빽¤��
861
+ ̾��������ʸ���ˤ���̾���Υޥ������Ѱդ���Ƥ��롥
862
+
863
+ ** �ѿ������
864
+
865
+ Qnil
866
+
867
+ ���: nil���֥�������
868
+
869
+ Qtrue
870
+
871
+ ���: true���֥�������(���Υǥե������)
872
+
873
+ Qfalse
874
+
875
+ ���: false���֥�������
876
+
877
+ ** C�ǡ����Υ��ץ��벽
878
+
879
+ Data_Wrap_Struct(VALUE klass, void (*mark)(), void (*free)(), void *sval)
880
+
881
+ C��Ǥ�դΥݥ��󥿤򥫥ץ��벽����Ruby���֥������Ȥ��֤�����
882
+ �Υݥ��󥿤�Ruby���饢����������ʤ��ʤä�����free�ǻ��ꤷ��
883
+ �ؿ����ƤФ�롥�ޤ������Υݥ��󥿤λؤ��ǡ�����¾��Ruby����
884
+ �������Ȥ�ؤ��Ƥ����硤mark�˻��ꤹ��ؿ��ǥޡ�������ɬ��
885
+ �����롥
886
+
887
+ Data_Make_Struct(klass, type, mark, free, sval)
888
+
889
+ type���Υ����malloc�����ѿ�sval�����������塤����򥫥ץ�
890
+ �벽�����ǡ������֤��ޥ�����
891
+
892
+ Data_Get_Struct(data, type, sval)
893
+
894
+ data����type���Υݥ��󥿤���Ф��ѿ�sval����������ޥ�����
895
+
896
+ ** �������å�
897
+
898
+ TYPE(value)
899
+ FIXNUM_P(value)
900
+ NIL_P(value)
901
+ void Check_Type(VALUE value, int type)
902
+ void Check_SafeStr(VALUE value)
903
+
904
+ ** ���Ѵ�
905
+
906
+ FIX2INT(value)
907
+ INT2FIX(i)
908
+ NUM2INT(value)
909
+ INT2NUM(i)
910
+ NUM2DBL(value)
911
+ rb_float_new(f)
912
+ StringValue(value)
913
+ StringValuePtr(value)
914
+ StringValueCStr(value)
915
+ rb_str_new2(s)
916
+
917
+ ** ���饹/�⥸�塼�����
918
+
919
+ VALUE rb_define_class(const char *name, VALUE super)
920
+
921
+ super�Υ��֥��饹�Ȥ��ƿ�����Ruby���饹��������롥
922
+
923
+ VALUE rb_define_class_under(VALUE module, const char *name, VALUE super)
924
+
925
+ super�Υ��֥��饹�Ȥ��ƿ�����Ruby���饹���������module��
926
+ ����Ȥ���������롥
927
+
928
+ VALUE rb_define_module(const char *name)
929
+
930
+ ������Ruby�⥸�塼���������롥
931
+
932
+ VALUE rb_define_module_under(VALUE module, const char *name)
933
+
934
+ ������Ruby�⥸�塼����������module������Ȥ���������롥
935
+
936
+ void rb_include_module(VALUE klass, VALUE module)
937
+
938
+ �⥸�塼��򥤥󥯥롼�ɤ��롥class�����Ǥ�module�򥤥�
939
+ �롼�ɤ��Ƥ�����ˤϲ��⤷�ʤ�(¿�ť��󥯥롼�ɤζػ�)��
940
+
941
+ void rb_extend_object(VALUE object, VALUE module)
942
+
943
+ ���֥������Ȥ�⥸�塼��(���������Ƥ���᥽�å�)�dz�ĥ���롥
944
+
945
+ ** ����ѿ����
946
+
947
+ void rb_define_variable(const char *name, VALUE *var)
948
+
949
+ Ruby��C�ȤǶ�ͭ���륰�����Х��ѿ���������롥�ѿ�̾��`$'��
950
+ �Ϥޤ�ʤ����ˤϼ�ưŪ���ɲä���롥name�Ȥ���Ruby�μ��̻�
951
+ �Ȥ��Ƶ�����ʤ�ʸ��(�㤨��` ')��ޤ���ˤ�Ruby�ץ�����
952
+ �फ��ϸ����ʤ��ʤ롥
953
+
954
+ void rb_define_readonly_variable(const char *name, VALUE *var)
955
+
956
+ Ruby��C�ȤǶ�ͭ����read only�Υ������Х��ѿ���������롥
957
+ read only�Ǥ��뤳�Ȱʳ���rb_define_variable()��Ʊ����
958
+
959
+ void rb_define_virtual_variable(const char *name,
960
+ VALUE (*getter)(), void (*setter)())
961
+
962
+ �ؿ��ˤ�äƼ¸������Ruby�ѿ���������롥�ѿ������Ȥ��줿
963
+ ���ˤ�getter�����ѿ����ͤ����åȤ��줿���ˤ�setter���ƤФ�
964
+ �롥
965
+
966
+ void rb_define_hooked_variable(const char *name, VALUE *var,
967
+ VALUE (*getter)(), void (*setter)())
968
+
969
+ �ؿ��ˤ�ä�hook�ΤĤ���줿�������Х��ѿ���������롥�ѿ�
970
+ �����Ȥ��줿���ˤ�getter�����ؿ����ͤ����åȤ��줿���ˤ�
971
+ setter���ƤФ�롥getter��setter��0����ꤷ�����ˤ�hook��
972
+ ���ꤷ�ʤ��Τ�Ʊ�����ˤʤ롥
973
+
974
+ void rb_global_variable(VALUE *var)
975
+
976
+ GC�Τ��ᡤRuby�ץ�����फ��ϥ�����������ʤ���, Ruby����
977
+ �������Ȥ�ޤ�����ѿ���ޡ������롥
978
+
979
+ ** ���
980
+
981
+ void rb_define_const(VALUE klass, const char *name, VALUE val)
982
+
983
+ �����������롥
984
+
985
+ void rb_define_global_const(const char *name, VALUE val)
986
+
987
+ ��������������롥
988
+
989
+ rb_define_const(rb_cObject, name, val)
990
+
991
+ ��Ʊ����̣��
992
+
993
+ ** �᥽�å����
994
+
995
+ rb_define_method(VALUE klass, const char *name, VALUE (*func)(), int argc)
996
+
997
+ �᥽�åɤ�������롥argc��self����������ο���argc��-1�λ�,
998
+ �ؿ��ˤϰ����ο�(self��ޤޤʤ�)����1����, �������������2
999
+ �����Ȥ��������Ϳ������(��3������self)��argc��-2�λ�,
1000
+ ��1������self, ��2������args(args�ϰ�����ޤ�Ruby������)��
1001
+ ����������Ϳ�����롥
1002
+
1003
+ rb_define_private_method(VALUE klass, const char *name, VALUE (*func)(), int argc)
1004
+
1005
+ private�᥽�åɤ�������롥������rb_define_method()��Ʊ����
1006
+
1007
+ rb_define_singleton_method(VALUE klass, const char *name, VALUE (*func)(), int argc)
1008
+
1009
+ �ðۥ᥽�åɤ�������롥������rb_define_method()��Ʊ����
1010
+
1011
+ rb_scan_args(int argc, VALUE *argv, const char *fmt, ...)
1012
+
1013
+ argc, argv������Ϳ����줿������ʬ�򤹤롥fmt��ɬ�ܰ����ο�,
1014
+ �ղð����ο�, �Ĥ�ΰ��������뤫����ꤹ��ʸ�����, "����
1015
+ ����*"�Ȥ��������Ǥ��롥 2 ���ܤο�����"*"�Ϥ��줾���ά��
1016
+ ǽ�Ǥ��롥ɬ�ܰ�������Ĥ�ʤ�����0����ꤹ�롥��3������
1017
+ �ߤ��ѿ��ؤΥݥ��󥿤�, �����������Ǥ������ѿ��˳�Ǽ����롥
1018
+ �ղð������б����������Ϳ�����Ƥ��ʤ������ѿ���Qnil��
1019
+ ��������롥
1020
+
1021
+ ** Ruby�᥽�åɸƤӽФ�
1022
+
1023
+ VALUE rb_funcall(VALUE recv, ID mid, int narg, ...)
1024
+
1025
+ �᥽�åɸƤӽФ���ʸ���󤫤�mid�����뤿��ˤ�rb_intern()��
1026
+ �Ȥ���
1027
+
1028
+ VALUE rb_funcall2(VALUE recv, ID mid, int argc, VALUE *argv)
1029
+
1030
+ �᥽�åɸƤӽФ���������argc, argv�������Ϥ���
1031
+
1032
+ VALUE rb_eval_string(const char *str)
1033
+
1034
+ ʸ�����Ruby������ץȤȤ��ƥ���ѥ��롦�¹Ԥ��롥
1035
+
1036
+ ID rb_intern(const char *name)
1037
+
1038
+ ʸ������б�����ID���֤���
1039
+
1040
+ char *rb_id2name(ID id)
1041
+
1042
+ ID���б�����ʸ������֤�(�ǥХå���)��
1043
+
1044
+ char *rb_class2name(VALUE klass)
1045
+
1046
+ ���饹��̾�����֤�(�ǥХå���)�����饹��̾��������ʤ����ˤ�,
1047
+ ������̤ä�̾������ĥ��饹��̾�����֤���
1048
+
1049
+ int rb_respond_to(VALUE obj, ID id)
1050
+
1051
+ obj��id�Ǽ������᥽�åɤ���Ĥ��ɤ������֤���
1052
+
1053
+ ** ���󥹥����ѿ�
1054
+
1055
+ VALUE rb_iv_get(VALUE obj, const char *name)
1056
+
1057
+ obj�Υ��󥹥����ѿ����ͤ����롥`@'�ǻϤޤ�ʤ����󥹥���
1058
+ ���ѿ��� Ruby�ץ�����फ�饢�������Ǥ��ʤ��ֱ��줿�ץ���
1059
+ �������ѿ��ˤʤ롥�������ʸ����̾������ĥ��饹(�ޤ���
1060
+ �⥸�塼��)�Υ��󥹥����ѿ��Ȥ��Ƽ�������Ƥ��롥
1061
+
1062
+ VALUE rb_iv_set(VALUE obj, const char *name, VALUE val)
1063
+
1064
+ obj�Υ��󥹥����ѿ���val�˥��åȤ��롥
1065
+
1066
+ ** ���湽¤
1067
+
1068
+ VALUE rb_iterate(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2)
1069
+
1070
+ func2��֥��å��Ȥ������ꤷ, func1�򥤥ƥ졼���Ȥ��ƸƤ֡�
1071
+ func1�ˤ� arg1�������Ȥ����Ϥ���, func2�ˤ���1�����˥��ƥ졼
1072
+ ������Ϳ����줿��, ��2������arg2���Ϥ���롥
1073
+
1074
+ VALUE rb_yield(VALUE val)
1075
+
1076
+ val���ͤȤ��ƥ��ƥ졼���֥��å���ƤӽФ���
1077
+
1078
+ VALUE rb_rescue(VALUE (*func1)(), VALUE arg1, VALUE (*func2)(), VALUE arg2)
1079
+
1080
+ �ؿ�func1��arg1������˸ƤӽФ���func1�μ¹�����㳰��ȯ��
1081
+ �������ˤ� func2��arg2������Ȥ��ƸƤ֡�����ͤ��㳰��ȯ��
1082
+ ���ʤ��ä�����func1�������, �㳰��ȯ���������ˤ�func2����
1083
+ ���ͤǤ��롥
1084
+
1085
+ VALUE rb_ensure(VALUE (*func1)(), VALUE arg1, void (*func2)(), VALUE arg2)
1086
+
1087
+ �ؿ�func1��arg1������Ȥ��Ƽ¹Ԥ�, �¹Խ�λ��(���Ȥ��㳰��
1088
+ ȯ�����Ƥ�) func2��arg2������Ȥ��Ƽ¹Ԥ��롥����ͤ�func1
1089
+ ������ͤǤ���(�㳰��ȯ�������������ʤ�)��
1090
+
1091
+ ** �㳰�����顼
1092
+
1093
+ void rb_warning(const char *fmt, ...)
1094
+
1095
+ rb_verbose����ɸ�२�顼���Ϥ˷ٹ�����ɽ�����롥������
1096
+ printf()��Ʊ����
1097
+
1098
+ void rb_raise(rb_eRuntimeError, const char *fmt, ...)
1099
+
1100
+ RuntimeError�㳰��ȯ�������롥������printf()��Ʊ����
1101
+
1102
+ void rb_raise(VALUE exception, const char *fmt, ...)
1103
+
1104
+ exception�ǻ��ꤷ���㳰��ȯ�������롥fmt�ʲ��ΰ�����
1105
+ printf()��Ʊ����
1106
+
1107
+ void rb_fatal(const char *fmt, ...)
1108
+
1109
+ ��̿Ū�㳰��ȯ�������롥�̾���㳰�����ϹԤʤ�줺, ���󥿡�
1110
+ �ץ꥿����λ����(������ensure�ǻ��ꤵ�줿�����ɤϽ�λ����
1111
+ �¹Ԥ����)��
1112
+
1113
+ void rb_bug(const char *fmt, ...)
1114
+
1115
+ ���󥿡��ץ꥿�ʤɥץ������ΥХ��Ǥ���ȯ������Ϥ��Τʤ�
1116
+ �����λ��Ƥ֡����󥿡��ץ꥿�ϥ�������פ�ľ���˽�λ���롥
1117
+ �㳰�����ϰ��ڹԤʤ��ʤ���
1118
+
1119
+ ** Ruby�ν�������¹�
1120
+
1121
+ Ruby�򥢥ץꥱ����������������ˤϰʲ��Υ��󥿥ե�����
1122
+ ��Ȥ����̾�γ�ĥ�饤�֥��ˤ�ɬ�פʤ���
1123
+
1124
+ void ruby_init()
1125
+
1126
+ Ruby���󥿥ץ꥿�ν������Ԥʤ���
1127
+
1128
+ void ruby_options(int argc, char **argv)
1129
+
1130
+ Ruby���󥿥ץ꥿�Υ��ޥ�ɥ饤������ν�����Ԥʤ���
1131
+
1132
+ void ruby_run()
1133
+
1134
+ Ruby���󥿥ץ꥿��¹Ԥ��롥
1135
+
1136
+ void ruby_script(char *name)
1137
+
1138
+ Ruby�Υ�����ץ�̾($0)�����ꤹ�롥
1139
+
1140
+ ** ���󥿥ץ꥿�Υ��٥�ȤΥեå�
1141
+
1142
+ void rb_add_event_hook(rb_event_hook_func_t func, rb_event_t events)
1143
+
1144
+ ���ꤵ�줿���󥿥ץ꥿�Υ��٥�Ȥ��Ф���եå��ؿ����ɲä��ޤ���
1145
+ events�ϰʲ����ͤ�or�Ǥʤ���Фʤ�ޤ���:
1146
+
1147
+ RUBY_EVENT_LINE
1148
+ RUBY_EVENT_CLASS
1149
+ RUBY_EVENT_END
1150
+ RUBY_EVENT_CALL
1151
+ RUBY_EVENT_RETURN
1152
+ RUBY_EVENT_C_CALL
1153
+ RUBY_EVENT_C_RETURN
1154
+ RUBY_EVENT_RAISE
1155
+ RUBY_EVENT_ALL
1156
+
1157
+ rb_event_hook_func_t������ϰʲ����̤�Ǥ�:
1158
+
1159
+ typedef void (*rb_event_hook_func_t)(rb_event_t event, NODE *node,
1160
+ VALUE self, ID id, VALUE klass)
1161
+
1162
+ int rb_remove_event_hook(rb_event_hook_func_t func)
1163
+
1164
+ ���ꤵ�줿�եå��ؿ��������ޤ���
1165
+
1166
+
1167
+ Appendix C. extconf.rb�ǻȤ���ؿ�����
1168
+
1169
+ extconf.rb����Ǥ����Ѳ�ǽ�ʥ���ѥ���������å��δؿ��ϰ�
1170
+ �����̤�Ǥ��롥
1171
+
1172
+ have_macro(macro, headers)
1173
+
1174
+ �إå��ե�����header�򥤥󥯥롼�ɤ��ƥޥ���macro�������
1175
+ ��Ƥ��뤫�ɤ��������å����롥�ޥ������������Ƥ����true
1176
+ ���֤���
1177
+
1178
+ have_library(lib, func)
1179
+
1180
+ �ؿ�func��������Ƥ���饤�֥��lib��¸�ߤ�����å����롥
1181
+ �饤�֥�꤬¸�ߤ������true���֤���
1182
+
1183
+ find_library(lib, func, path...)
1184
+
1185
+ �ؿ�func��������Ƥ���饤�֥��lib��¸�ߤ� -Lpath ���ɲ�
1186
+ ���ʤ�������å����롥�饤�֥�꤬���դ��ä�����true���֤���
1187
+
1188
+ have_func(func, header)
1189
+
1190
+ �إå��ե�����header�򥤥󥯥롼�ɤ��ƴؿ�func��¸�ߤ������
1191
+ �����롥func��ɸ��Ǥϥ�󥯤���ʤ��饤�֥����Τ�ΤǤ�
1192
+ ����ˤ����have_library�Ǥ��Υ饤�֥�������å����Ƥ���
1193
+ �����ؿ���¸�ߤ����true���֤���
1194
+
1195
+ have_var(var, header)
1196
+
1197
+ �إå��ե�����header�򥤥󥯥롼�ɤ����ѿ�var��¸�ߤ������
1198
+ �����롥var��ɸ��Ǥϥ�󥯤���ʤ��饤�֥����Τ�ΤǤ�
1199
+ ����ˤ����have_library�Ǥ��Υ饤�֥�������å����Ƥ���
1200
+ �����ѿ���¸�ߤ����true���֤���
1201
+
1202
+ have_header(header)
1203
+
1204
+ �إå��ե������¸�ߤ�����å����롥�إå��ե����뤬¸�ߤ�
1205
+ ���true���֤���
1206
+
1207
+ find_header(header, path...)
1208
+
1209
+ �إå��ե�����header��¸�ߤ� -Ipath ���ɲä��ʤ�������å�
1210
+ ���롥�إå��ե����뤬���դ��ä�����true���֤���
1211
+
1212
+ have_struct_member(type, member, header)
1213
+
1214
+ �إå��ե�����header�򥤥󥯥롼�ɤ��Ʒ�type�˥���member
1215
+ ��¸�ߤ��뤫������å����롥type���������Ƥ��ơ�member��
1216
+ ���Ĥ����true���֤���
1217
+
1218
+ have_type(type, header, opt)
1219
+
1220
+ �إå��ե�����header�򥤥󥯥롼�ɤ��Ʒ�type��¸�ߤ��뤫��
1221
+ �����å����롥type���������Ƥ����true���֤���
1222
+
1223
+ check_sizeof(type, header)
1224
+
1225
+ �إå��ե�����header�򥤥󥯥롼�ɤ��Ʒ�type��charñ�̥���
1226
+ ����Ĵ�٤롥type���������Ƥ�������Υ��������֤��������
1227
+ ��Ƥ��ʤ��Ȥ���nil���֤���
1228
+
1229
+ create_makefile(target)
1230
+
1231
+ ��ĥ�饤�֥���Ѥ�Makefile���������롥���δؿ���ƤФʤ���
1232
+ �Ф��Υ饤�֥��ϥ���ѥ��뤵��ʤ���target�ϥ⥸�塼��̾
1233
+ ��ɽ����
1234
+
1235
+ find_executable(command, path)
1236
+
1237
+ ���ޥ��command��File::PATH_SEPARATOR�Ƕ��ڤ�줿�ѥ�̾��
1238
+ �ꥹ��path����õ����path��nil�ޤ��Ͼ�ά���줿���ϡ��Ķ�
1239
+ �ѿ�PATH���ͤ���Ѥ��롥�¹Բ�ǽ�ʥ��ޥ�ɤ����Ĥ��ä����
1240
+ �ϥѥ���ޤ�ե�����̾�����Ĥ���ʤ��ä�����nil���֤���
1241
+
1242
+ with_config(withval[, default=nil])
1243
+
1244
+ ���ޥ�ɥ饤����--with-<withval>�ǻ��ꤵ�줿���ץ�����ͤ����롥
1245
+
1246
+ enable_config(config, *defaults)
1247
+ disable_config(config, *defaults)
1248
+
1249
+ ���ޥ�ɥ饤����--enable-<config>�ޤ���
1250
+ --disable-<config>�ǻ��ꤵ�줿�����ͤ����롥
1251
+ --enable-<config>�����ꤵ��Ƥ�������true��
1252
+ --disable-<config>�����ꤵ��Ƥ�������false���֤���
1253
+ �ɤ������ꤵ��Ƥ��ʤ����ϡ��֥��å��Ĥ��ǸƤӽФ���Ƥ������
1254
+ *defaults��yield������̡��֥��å��ʤ��ʤ�*defaults���֤���
1255
+
1256
+ dir_config(target[, default_dir])
1257
+ dir_config(target[, default_include, default_lib])
1258
+
1259
+ ���ޥ�ɥ饤����--with-<target>-dir, --with-<target>-include,
1260
+ --with-<target>-lib�Τ����줫�ǻ��ꤵ���ǥ��쥯�ȥ��
1261
+ $CFLAGS �� $LDFLAGS ���ɲä��롥--with-<target>-dir=/path��
1262
+ --with-<target>-include=/path/include --with-<target>-lib=/path/lib
1263
+ �������Ǥ��롥�ɲä��줿 include �ǥ��쥯�ȥ�� lib �ǥ��쥯�ȥ��
1264
+ ������֤��� ([include_dir, lib_dir])
1265
+
1266
+ pkg_config(pkg)
1267
+
1268
+ pkg-config���ޥ�ɤ���ѥå�����pkg�ξ�������롥
1269
+ pkg-config�μºݤΥ��ޥ��̾�ϡ�--with-pkg-config���ޥ��
1270
+ �饤�󥪥ץ����ǻ����ǽ��
1271
+
1272
+ /*
1273
+ * Local variables:
1274
+ * fill-column: 60
1275
+ * end:
1276
+ */