192
|
1 C with Continuation (CwC) and Continuation based C (CbC)
|
|
2 $Id$
|
|
3 ���� ����
|
|
4 ΰ����ؾ��ز�
|
|
5
|
|
6 0. What is this.
|
|
7
|
|
8 �����C����γ�ĥ�Ǥ��ꡢ���̸���Ǥ⤢��ޤ������֥롼����
|
|
9 ������� code segment �Ȥ����ץ�����ߥ�ñ�̤���ĸ���
|
|
10 �Ǥ���code segment �ϡ����̷�³(light weight continuation)
|
|
11 �ˤ�ä���³����ޤ���C �ε�ǽ�٤ƴޤ���ϡ�C with
|
|
12 Continuation �ȸƤӤޤ���
|
|
13
|
|
14 #include <stdio.h>
|
|
15
|
|
16 code factorial(int n,int result,int orig,
|
|
17 code(*print)(),code(*exit1)(), void *exit1env)
|
|
18 {
|
|
19 if (n<0) {
|
|
20 printf("err %d!\n",n);
|
|
21 goto (*exit1)(0),exit1env;
|
|
22 }
|
|
23 if (n==0)
|
|
24 goto (*print)(n,result,orig,print,exit1,exit1env);
|
|
25 else {
|
|
26 result *= n;
|
|
27 n--;
|
|
28 goto factorial(n,result,orig,print,exit1,exit1env);
|
|
29 }
|
|
30 }
|
|
31
|
|
32 int main( int ac, char *av[])
|
|
33 {
|
|
34 int n;
|
|
35 n = 10;
|
|
36 goto factorial(n,1,n,print,return,environment);
|
|
37 }
|
|
38
|
|
39 code print(int n,int result,int orig,code(*print)(),(*exit1)(),void*exit1env)
|
|
40 {
|
|
41 printf("%d! = %d\n",orig, result);
|
|
42 goto (*exit1)(0),exit1env;
|
|
43 }
|
|
44
|
|
45 code segment ������Ȥ�����³���ƤӽФ��ʤ��ȡ�C�β��̸���
|
|
46 �Ȥʤ�ޤ��������Continuation based B (Cbc) �ȸƤӤޤ���
|
|
47 �ºݡ�C ��CbC�˥���ѥ��뤹�뤳�Ȥ���ǽ�Ǥ���
|
|
48
|
|
49 CbC �ϡ��������ƥ�����˰�¸���ʤ�������֥������Ȼפ����ɤ��Ǥ��礦��
|
|
50
|
|
51 1. ��ʸ
|
|
52
|
|
53 code code_segment_name(interfaces) {
|
|
54 body;
|
|
55 }
|
|
56
|
|
57 code �� code segment ��ɽ�����Ǥ���code segment �Ǥ�return
|
|
58 ʸ����Ѥ��뤳�ȤϤǤ��ޤ���
|
|
59
|
|
60 Interfaces �ϰ����Ǥ�����¤�Τ�Ȥ����Ȥ��Ǥ��ޤ���Inteface
|
|
61 �ΰ����ϥ쥸�����˥ޥåפ����Τǻ��Ȥ��뤳�ȤϤǤ��ޤ���
|
|
62 ��¤�ΤϾ�˲�ǽ�Ǥ���
|
|
63
|
|
64 code segment �����ư����ˤ� goto ʸ��Ȥ��ޤ���
|
|
65
|
|
66 goto segment_name(interfaces);
|
|
67
|
|
68 ����goto���ǽ�Ǥ���Ʊ��interface�����code segment�֤Ǥϡ�
|
|
69 ��Ψ���ɤ���ư���Ǥ��ޤ������̤�jmp̿���ĤǤ���(stack
|
|
70 pointer �ΰ�ư��ޤ���⤢��Τǡ������Ȥϸ¤�ʤ���Ǥ���..)
|
|
71 �ۤʤ�Interface�ξ��ϡ����������������ޤ���
|
|
72
|
|
73
|
|
74 2. C �Ȥδط���
|
|
75
|
|
76 CwC ����ϼ�ͳ��C�δؿ���ƤӽФ����Ȥ��Ǥ��ޤ���
|
|
77
|
|
78 C �δؿ�����code segment ��goto����Τϼ�ͳ�Ǥ�����
|
|
79 �����ˤϡ�C�δؿ��δĶ�����������ɬ�פ�����ޤ���
|
|
80
|
|
81 goto factorial(n,1,n,print,return,environment);
|
|
82
|
|
83 return �� environment ���ü���ѿ��ǡ����줾�졢�ƤӽФ���
|
|
84 �ؿ��η�³(�ƤӽФ����ؿ�����뤳�ȤϤǤ��ޤ���)�ȡ�
|
|
85 ���δؿ��δĶ�(�Ĥޤꥹ���å�)�Ǥ���setjump ��jump_buf
|
|
86 �˻��Ƥޤ�����allocate ���뤳�ȤϤǤ��ޤ���
|
|
87
|
|
88 void *environment;
|
|
89
|
|
90 �Ȥ�����������ޤ���return �ѿ��ϡ����δؿ��η�³��
|
|
91 �Ĥޤ�returnʸ���Τ�ΤǤ������η��ϸ��δؿ���
|
|
92 ��¸���ޤ���
|
|
93
|
|
94 code (*return)(int return_value);
|
|
95
|
|
96 ������goto����ˤϴĶ�����������goto��Ȥ��ޤ���
|
|
97 ���̤�goto���ƤϤ����ޤ�����ѥ���ϥ����å����Ƥޤ���
|
|
98 �����ʤ�����¿�Ť�function-code-function-code���ơ�
|
|
99 ���ֳ���heavy continuation��ȴ���뤳�ȤϤǤ��ޤ���
|
|
100
|
|
101 goto (*exit1)(0),exit1env;
|
|
102
|
|
103 thread �Ȥ��ƻȤ����ȤϺ��ΤȤ����ϤǤ��ޤ���
|
|
104
|
|
105 3. �Ȥ���
|
|
106
|
|
107 mc-powerpc, mc-ia32 ������ѥ���Ǥ���������֥饽��������Ϥ��ޤ���
|
|
108 ������֥�ȥ�ˤ�gcc��ȤäƲ�������
|
|
109
|
|
110 mc-powerpc source.c
|
|
111 gcc source.s
|
|
112 a.out ��������
|
|
113 mc-powerpc source.c
|
|
114 gcc -c sources.s
|
|
115 .o ��������
|
|
116
|
|
117 -s comments in assembler source.
|
|
118 -c check only.
|
|
119 -oname output file names
|
|
120 -Idir add library include directory
|
|
121
|
|
122 test �β��ˤ����Ĥ����꤬����ޤ���
|
|
123
|
|
124 3. ��������Ƥʤ���ʬ
|
|
125
|
|
126 Mips ����ѥ���Ϥޤ�ư���ޤ���
|
|
127
|
245
|
128 64 bit long long ��ư���ޤ���
|
|
129 // long long, long double �Ϸ��Ȥ��ƻȤ����ȤϤǤ��ޤ�����
|
|
130 // �黻�ϤǤ��ޤ����ѿ��������Ǥ��ʤ��Ȼפ���
|
|
131 // Long long value (0LL) �ϻȤ��ޤ�����ñ�ʤ�long���֤��ޤ���
|
|
132 // long ��32bit. int ��pointer��Ʊ����
|
192
|
133
|
|
134 Mac OS X �� Red hat Linux �����ǥƥ��Ȥ��Ƥ���ޤ���
|
|
135
|
245
|
136 Inline ��̵�뤵�졢���̤�static�ؿ��˥���ѥ��뤵��ޤ���
|
192
|
137
|
245
|
138 //��ư�������쥸�����ؤ��������ϤǤ��ޤ���
|
|
139 // *=, /=, +=.
|
192
|
140
|
|
141 built-in alloca�Ϥ���ޤ���
|
|
142
|
|
143 varargs ��ʤ��Ǥ���
|
|
144
|
|
145 Switch ʸ�ϡ�ʬ���˥���ѥ��뤵��ޤ����ơ��֥����������ޤ���
|
|
146
|
245
|
147 �ޥ����ε�ǽ�Τ���Ϣ��Ȥ���ư���ޤ���
|
192
|
148
|
|
149 �ޥ����ϥ��롼����ǡ��ץ�ץ����å��ǤϤ���ޤ�����cpp��
|
|
150 �����ۤʤ�ޤ���
|
|
151
|
|
152 �ǥХå��Ѥ� -g �Ϥ���ޤ���
|
|
153
|
|
154 CbC ��code segment ����¹Ԥ�Ϥ�뤳�ȤϤǤ��ޤ���
|
|
155
|
245
|
156 // #include �ϡ��ƤӽФ��������������ɤΥ����ȥǥ��쥯�ȥ�������ޤ���
|
|
157 #include �ϡ��ƤӽФ��������������ɤΥ����ȥǥ��쥯�ȥ�������ޤ���
|
192
|
158
|
|
159 ����¾����������ANSI ����ѥ����ܻؤ��Ƥ���櫓�ǤϤʤ��Τ�...
|
|
160
|