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 ����ѥ����ܻؤ��Ƥ���櫓�ǤϤʤ��Τ�...