annotate README.jp @ 637:140b65f8ff03

ARRAY argument in fuction
author kono
date Tue, 31 Oct 2006 20:42:42 +0900 (2006-10-31)
parents e055df7c1082
children 3f559c67bc86
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
192
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
1 C with Continuation (CwC) and Continuation based C (CbC)
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
2 $Id$
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
3 ���� ����
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
4 ΰ����ؾ��󹩳ز�
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
5
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
6 0. What is this.
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
7
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
8 �����C����γ�ĥ�Ǥ��ꡢ���̸���Ǥ⤢��ޤ������֥롼����
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
9 ������� code segment �Ȥ����ץ�����ߥ�ñ�̤���ĸ���
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
10 �Ǥ���code segment �ϡ����̷�³(light weight continuation)
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
11 �ˤ�ä���³����ޤ���C �ε�ǽ�򤹤٤ƴޤ���ϡ�C with
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
12 Continuation �ȸƤӤޤ���
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
13
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
14 #include <stdio.h>
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
15
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
16 code factorial(int n,int result,int orig,
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
17 code(*print)(),code(*exit1)(), void *exit1env)
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
18 {
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
19 if (n<0) {
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
20 printf("err %d!\n",n);
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
21 goto (*exit1)(0),exit1env;
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
22 }
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
23 if (n==0)
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
24 goto (*print)(n,result,orig,print,exit1,exit1env);
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
25 else {
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
26 result *= n;
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
27 n--;
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
28 goto factorial(n,result,orig,print,exit1,exit1env);
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
29 }
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
30 }
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
31
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
32 int main( int ac, char *av[])
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
33 {
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
34 int n;
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
35 n = 10;
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
36 goto factorial(n,1,n,print,return,environment);
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
37 }
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
38
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
39 code print(int n,int result,int orig,code(*print)(),(*exit1)(),void*exit1env)
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
40 {
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
41 printf("%d! = %d\n",orig, result);
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
42 goto (*exit1)(0),exit1env;
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
43 }
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
44
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
45 code segment ������Ȥ�����³���ƤӽФ��򤷤ʤ��ȡ�C�β��̸���
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
46 �Ȥʤ�ޤ��������Continuation based B (Cbc) �ȸƤӤޤ���
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
47 �ºݡ�C ��CbC�˥���ѥ��뤹�뤳�Ȥ���ǽ�Ǥ���
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
48
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
49 CbC �ϡ��������ƥ�����˰�¸���ʤ�������֥������Ȼפ����ɤ��Ǥ��礦��
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
50
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
51 1. ��ʸ
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
52
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
53 code code_segment_name(interfaces) {
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
54 body;
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
55 }
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
56
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
57 code �� code segment ��ɽ�����Ǥ���code segment �Ǥ�return
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
58 ʸ����Ѥ��뤳�ȤϤǤ��ޤ���
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
59
326
e5d40f8c4cce bit-field continue.
kono
parents: 245
diff changeset
60 Interfaces �ϰ����Ǥ�����¤�Τ�Ȥ����Ȥ��Ǥ��ޤ���Interface
192
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
61 �ΰ����ϥ쥸�����˥ޥåפ����Τǻ��Ȥ��뤳�ȤϤǤ��ޤ���
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
62 ��¤�ΤϾ�˲�ǽ�Ǥ���
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
63
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
64 code segment �����ư����ˤ� goto ʸ��Ȥ��ޤ���
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
65
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
66 goto segment_name(interfaces);
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
67
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
68 ����goto���ǽ�Ǥ���Ʊ��interface�����code segment�֤Ǥϡ�
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
69 ��Ψ���ɤ���ư���Ǥ��ޤ������̤�jmp̿���ĤǤ���(stack
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
70 pointer �ΰ�ư��ޤ���⤢��Τǡ������Ȥϸ¤�ʤ���Ǥ���..)
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
71 �ۤʤ�Interface�ξ��ϡ����������������ޤ���
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
72
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
73
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
74 2. C �Ȥδط���
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
75
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
76 CwC ����ϼ�ͳ��C�δؿ���ƤӽФ����Ȥ��Ǥ��ޤ���
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
77
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
78 C �δؿ�����code segment ��goto����Τϼ�ͳ�Ǥ�����
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
79 �����ˤϡ�C�δؿ��δĶ�����������ɬ�פ�����ޤ���
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
80
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
81 goto factorial(n,1,n,print,return,environment);
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
82
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
83 return �� environment ���ü���ѿ��ǡ����줾�졢�ƤӽФ���
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
84 �ؿ��η�³(�ƤӽФ����ؿ�����뤳�ȤϤǤ��ޤ���)�ȡ�
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
85 ���δؿ��δĶ�(�Ĥޤꥹ���å�)�Ǥ���setjump ��jump_buf
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
86 �˻��Ƥޤ�����allocate ���뤳�ȤϤǤ��ޤ���
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
87
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
88 void *environment;
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
89
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
90 �Ȥ�����������ޤ���return �ѿ��ϡ����δؿ��η�³��
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
91 �Ĥޤ�returnʸ���Τ�ΤǤ������η��ϸ��δؿ���
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
92 ��¸���ޤ���
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
93
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
94 code (*return)(int return_value);
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
95
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
96 ������goto����ˤϴĶ�����������goto��Ȥ��ޤ���
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
97 ���̤�goto���ƤϤ����ޤ��󡣥���ѥ���ϥ����å����Ƥޤ���
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
98 �����ʤ�����¿�Ť�function-code-function-code���ơ�
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
99 ���ֳ���heavy continuation��ȴ���뤳�ȤϤǤ��ޤ���
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
100
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
101 goto (*exit1)(0),exit1env;
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
102
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
103 thread �Ȥ��ƻȤ����ȤϺ��ΤȤ����ϤǤ��ޤ���
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
104
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
105 3. �Ȥ���
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
106
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
107 mc-powerpc, mc-ia32 ������ѥ���Ǥ���������֥饽��������Ϥ��ޤ���
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
108 ������֥�ȥ�󥯤ˤ�gcc��ȤäƲ�������
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
109
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
110 mc-powerpc source.c
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
111 gcc source.s
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
112 a.out ��������
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
113 mc-powerpc source.c
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
114 gcc -c sources.s
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
115 .o ��������
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
116
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
117 -s comments in assembler source.
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
118 -c check only.
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
119 -oname output file names
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
120 -Idir add library include directory
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
121
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
122 test �β��ˤ����Ĥ����꤬����ޤ���
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
123
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
124 3. ��������Ƥʤ���ʬ
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
125
607
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
126 // Mips ����ѥ���Ϥޤ�ư���ޤ���
192
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
127
245
8a72b0afccfc *** empty log message ***
kono
parents: 192
diff changeset
128 64 bit long long ��ư���ޤ���
8a72b0afccfc *** empty log message ***
kono
parents: 192
diff changeset
129 // long long, long double �Ϸ��Ȥ��ƻȤ����ȤϤǤ��ޤ�����
8a72b0afccfc *** empty log message ***
kono
parents: 192
diff changeset
130 // �黻�ϤǤ��ޤ����ѿ��������Ǥ��ʤ��Ȼפ���
8a72b0afccfc *** empty log message ***
kono
parents: 192
diff changeset
131 // Long long value (0LL) �ϻȤ��ޤ�����ñ�ʤ�long���֤��ޤ���
8a72b0afccfc *** empty log message ***
kono
parents: 192
diff changeset
132 // long ��32bit. int ��pointer��Ʊ����
192
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
133
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
134 Mac OS X �� Red hat Linux �����ǥƥ��Ȥ��Ƥ���ޤ���
637
140b65f8ff03 ARRAY argument in fuction
kono
parents: 607
diff changeset
135 Intel Mac �Ǥ�ư��ޤ���
192
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
136
607
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
137 // Inline ��̵�뤵�졢���̤�static�ؿ��˥���ѥ��뤵��ޤ���
192
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
138
245
8a72b0afccfc *** empty log message ***
kono
parents: 192
diff changeset
139 //��ư�������쥸�����ؤ������׻��ϤǤ��ޤ���
8a72b0afccfc *** empty log message ***
kono
parents: 192
diff changeset
140 // *=, /=, +=.
192
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
141
339
375d21a2b845 emit_data
kono
parents: 326
diff changeset
142 // built-in alloca�Ϥ���ޤ���
192
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
143
339
375d21a2b845 emit_data
kono
parents: 326
diff changeset
144 // varargs ��ʤ��Ǥ���
192
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
145
339
375d21a2b845 emit_data
kono
parents: 326
diff changeset
146 // Switch ʸ�ϡ�ʬ���˥���ѥ��뤵��ޤ����ơ��֥����������ޤ���
192
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
147
339
375d21a2b845 emit_data
kono
parents: 326
diff changeset
148 // �ޥ����ε�ǽ�Τ���Ϣ��Ȥ���ư���ޤ���
192
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
149
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
150 �ޥ����ϥ��롼����ǡ��ץ�ץ����å��ǤϤ���ޤ��󡣿��񤤤�cpp��
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
151 �����ۤʤ�ޤ���
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
152
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
153 �ǥХå��Ѥ� -g �Ϥ���ޤ���
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
154
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
155 CbC ��code segment ����¹Ԥ�Ϥ�뤳�ȤϤǤ��ޤ���
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
156
245
8a72b0afccfc *** empty log message ***
kono
parents: 192
diff changeset
157 // #include �ϡ��ƤӽФ��������������ɤΥ����ȥǥ��쥯�ȥ�򥵡������ޤ���
8a72b0afccfc *** empty log message ***
kono
parents: 192
diff changeset
158 #include �ϡ��ƤӽФ��������������ɤΥ����ȥǥ��쥯�ȥ�򥵡������ޤ���
192
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
159
607
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
160 bit-field (����ʤ��פ�ʤ����ɤ�...) ���ݡ��Ȥ��Ƥޤ�����
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
161 ����ѿ��ؤν�����Ͻ���ޤ���
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
162
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
163 asm ����ʬŪ�ˤ�����������Ƥޤ���
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
164
339
375d21a2b845 emit_data
kono
parents: 326
diff changeset
165
192
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
166 ����¾����������ANSI ����ѥ����ܻؤ��Ƥ���櫓�ǤϤʤ��Τ�...
b0d6a6940cb7 *** empty log message ***
kono
parents:
diff changeset
167
607
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
168
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
169 /************************************************************************
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
170 ** Copyright (C) 2006 Shinji Kono
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
171 ** Ϣ���衧 ΰ����ؾ��󹩳ز� ���� ����
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
172 ** ��E-Mail Address: kono@ie.u-ryukyu.ac.jp��
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
173 **
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
174 ** ���Υ������Τ����ʤ�ʣ�̡����ѡ�������������ޤ�����������
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
175 ** ���κݤˤϡ�ï���׸������򼨤�������ʬ��Ĥ����ȡ�
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
176 ** �����ۤ仨�����Ͽ�ʤɤ��䤤��碌��ɬ�פ���ޤ���
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
177 ** �������Ѥ�嵭��ȿ���ʤ��ϰϤǵ��Ĥ��ޤ���
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
178 ** �Х��ʥ�����ۤκݤˤ�version message����¸���뤳�Ȥ���Ȥ��ޤ���
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
179 ** ���Υץ������ˤĤ��Ƥ��ä˲����ݾڤ⤷�ʤ����������餺��
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
180 **
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
181 ** Everyone is permitted to do anything on this program
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
182 ** including copying, modifying, improving,
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
183 ** as long as you don't try to pretend that you wrote it.
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
184 ** i.e., the above copyright notice has to appear in all copies.
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
185 ** Binary distribution requires original version messages.
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
186 ** You don't have to ask before copying, redistribution or publishing.
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
187 ** THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE.
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
188 ***********************************************************************/
e055df7c1082 *** empty log message ***
kono
parents: 339
diff changeset
189