Ok, for the c generator, here are some code attached. I would just study this there is bit's still missing and you need to wait for me to dig up the details. My point is to suggest ideas for what can be done. I don't assume that this is it. But it's a nice playing ground. So it is a hack, here is what I do. (use modules (language glil compile-assembly)) (set! *compile-to-c* #t) (define (f N) (set! ') ;; This tagg!! initiate the compiler ;; and c-fkn will use the ;; slot :-) (let loop ((I N) (X 0)) (if (eq? I 0) X (loop (- I 1) (+ X 1))))) (generate-c-fkns "fkn") Then in a sub-directory called cboost from the starting directory you find fkn.c and a makefile. e.g. Makefile: ========= libguile-fkn.so : fkn.c gcc -shared -O2 -o libguile-fkn.so -fPIC fkn.c fkn.c: ====== #include "cfkn.h" #define LOCAL_REF(i) fp[i] #define LOCAL_SET(i,v) fp[i] = (v) void cfkn3676(SCM *fp, SCM **spp) { /* setup of environment */ SCM *objects, *free, program, *sp, sss[100]; sp = sss; program = fp[-1]; objects = SCM_I_VECTOR_WELTS (SCM_PROGRAM_OBJTABLE (program)); free = SCM_PROGRAM_FREE_VARIABLES(program); /* compiled section */ LCASE3666: goto L3668; LCASE3665: sp++; *sp = LOCAL_REF(1); sp++; *sp = SCM_I_MAKINUM(0); sp-=2; if(!scm_is_eq(sp[1],sp[2])) goto L3669; sp++; *sp = LOCAL_REF(2); RETURN; L3669: sp++; *sp = LOCAL_REF(1); SUB1; sp++; *sp = LOCAL_REF(2); ADD1; LOCAL_SET(2,*sp) ; sp--; LOCAL_SET(1,*sp) ; sp--; goto LCASE3665; L3668: sp++; *sp = LOCAL_REF(0); sp++; *sp = SCM_I_MAKINUM(0); LOCAL_SET(2,*sp) ; sp--; LOCAL_SET(1,*sp) ; sp--; goto LCASE3665; } void init_fkn.c() { SCM cfkn3676_sym; cfkn3676_sym = scm_from_locale_symbol("cfkn3676"); printf("loading fkn %s as adres %x.\n","cfkn3676",&cfkn3676); scm_define(cfkn3676_sym,SCM_PACK(((scm_t_bits) &cfkn3676) | 2)); } So compileing and loading the shared library into guile you should be able to issue (f 1000000) and get a correct and fast result. I'm did not find my cfkn.h file but I'll send you the stuff I have. I modify glil->assembly and add offload some bit's into an extra file into the same directory also a vm-instruction is added to be able to start the c-code. Have fun Stefan