C with Continuation (CwC) and Continuation based C (CbC) $Id$ ���� ���� ΰ����ؾ��ز� 0. What is this. �����C����γ�ĥ�Ǥ��ꡢ���̸���Ǥ⤢��ޤ������֥롼���� ������� code segment �Ȥ����ץ�����ߥ�ñ�̤���ĸ��� �Ǥ���code segment �ϡ����̷�³(light weight continuation) �ˤ�ä���³����ޤ���C �ε�ǽ�٤ƴޤ���ϡ�C with Continuation �ȸƤӤޤ��� #include <stdio.h> code factorial(int n,int result,int orig, code(*print)(),code(*exit1)(), void *exit1env) { if (n<0) { printf("err %d!\n",n); goto (*exit1)(0),exit1env; } if (n==0) goto (*print)(n,result,orig,print,exit1,exit1env); else { result *= n; n--; goto factorial(n,result,orig,print,exit1,exit1env); } } int main( int ac, char *av[]) { int n; n = 10; goto factorial(n,1,n,print,return,environment); } code print(int n,int result,int orig,code(*print)(),(*exit1)(),void*exit1env) { printf("%d! = %d\n",orig, result); goto (*exit1)(0),exit1env; } code segment ������Ȥ�����³���ƤӽФ��ʤ��ȡ�C�β��̸��� �Ȥʤ�ޤ��������Continuation based B (Cbc) �ȸƤӤޤ��� �ºݡ�C ��CbC�˥���ѥ��뤹�뤳�Ȥ���ǽ�Ǥ��� CbC �ϡ��������ƥ�����˰�¸���ʤ�������֥������Ȼפ����ɤ��Ǥ��礦�� 1. ��ʸ code code_segment_name(interfaces) { body; } code �� code segment ��ɽ�����Ǥ���code segment �Ǥ�return ʸ����Ѥ��뤳�ȤϤǤ��ޤ��� Interfaces �ϰ����Ǥ�����¤�Τ�Ȥ����Ȥ��Ǥ��ޤ���Interface �ΰ����ϥ쥸�����˥ޥåפ����Τǻ��Ȥ��뤳�ȤϤǤ��ޤ��� ��¤�ΤϾ�˲�ǽ�Ǥ��� code segment �����ư����ˤ� goto ʸ��Ȥ��ޤ��� goto segment_name(interfaces); ����goto���ǽ�Ǥ���Ʊ��interface�����code segment�֤Ǥϡ� ��Ψ���ɤ���ư���Ǥ��ޤ������̤�jmp̿���ĤǤ���(stack pointer �ΰ�ư��ޤ���⤢��Τǡ������Ȥϸ¤�ʤ���Ǥ���..) �ۤʤ�Interface�ξ��ϡ����������������ޤ��� 2. C �Ȥδط��� CwC ����ϼ�ͳ��C�δؿ���ƤӽФ����Ȥ��Ǥ��ޤ��� C �δؿ�����code segment ��goto����Τϼ�ͳ�Ǥ����� �����ˤϡ�C�δؿ��δĶ�����������ɬ�פ�����ޤ��� goto factorial(n,1,n,print,return,environment); return �� environment ���ü���ѿ��ǡ����줾�졢�ƤӽФ��� �ؿ��η�³(�ƤӽФ����ؿ�����뤳�ȤϤǤ��ޤ���)�ȡ� ���δؿ��δĶ�(�Ĥޤꥹ���å�)�Ǥ���setjump ��jump_buf �˻��Ƥޤ�����allocate ���뤳�ȤϤǤ��ޤ��� void *environment; �Ȥ�����������ޤ���return �ѿ��ϡ����δؿ��η�³�� �Ĥޤ�returnʸ���Τ�ΤǤ������η��ϸ��δؿ��� ��¸���ޤ��� code (*return)(int return_value); ������goto����ˤϴĶ�����������goto��Ȥ��ޤ��� ���̤�goto���ƤϤ����ޤ�����ѥ���ϥ����å����Ƥޤ��� �����ʤ�����¿�Ť�function-code-function-code���ơ� ���ֳ���heavy continuation��ȴ���뤳�ȤϤǤ��ޤ��� goto (*exit1)(0),exit1env; thread �Ȥ��ƻȤ����ȤϺ��ΤȤ����ϤǤ��ޤ��� 3. �Ȥ��� mc-powerpc, mc-ia32 ������ѥ���Ǥ���������֥饽��������Ϥ��ޤ��� ������֥�ȥ�ˤ�gcc��ȤäƲ������� mc-powerpc source.c gcc source.s a.out �������� mc-powerpc source.c gcc -c sources.s .o �������� -s comments in assembler source. -c check only. -oname output file names -Idir add library include directory test �β��ˤ����Ĥ����꤬����ޤ��� 3. ��������Ƥʤ���ʬ Mips ����ѥ���Ϥޤ�ư���ޤ��� 64 bit long long ��ư���ޤ��� // long long, long double �Ϸ��Ȥ��ƻȤ����ȤϤǤ��ޤ����� // �黻�ϤǤ��ޤ����ѿ��������Ǥ��ʤ��Ȼפ��� // Long long value (0LL) �ϻȤ��ޤ�����ñ�ʤ�long���֤��ޤ��� // long ��32bit. int ��pointer��Ʊ���� Mac OS X �� Red hat Linux �����ǥƥ��Ȥ��Ƥ���ޤ��� Inline ��̵�뤵�졢���̤�static�ؿ��˥���ѥ��뤵��ޤ��� //��ư�������쥸�����ؤ��������ϤǤ��ޤ��� // *=, /=, +=. // built-in alloca�Ϥ���ޤ��� // varargs ��ʤ��Ǥ��� // Switch ʸ�ϡ�ʬ���˥���ѥ��뤵��ޤ����ơ��֥����������ޤ��� // �ޥ����ε�ǽ�Τ���Ϣ��Ȥ���ư���ޤ��� �ޥ����ϥ��롼����ǡ��ץ�ץ����å��ǤϤ���ޤ�����cpp�� �����ۤʤ�ޤ��� �ǥХå��Ѥ� -g �Ϥ���ޤ��� CbC ��code segment ����¹Ԥ�Ϥ�뤳�ȤϤǤ��ޤ��� // #include �ϡ��ƤӽФ��������������ɤΥ����ȥǥ��쥯�ȥ�������ޤ��� #include �ϡ��ƤӽФ��������������ɤΥ����ȥǥ��쥯�ȥ�������ޤ��� bit-field (����ʤ��פ�ʤ����ɤ�...) ����¾����������ANSI ����ѥ����ܻؤ��Ƥ���櫓�ǤϤʤ��Τ�...