Odyce

 

RS 2007-10-02: Odyce (autonomous dynamic C environment) est un part de eTcl, un compileur de C (jusqu'à C99) dynamique - c'est à dire qu'il émit code machine directement au mémoire. Basé sur Tiny CC, émulant la API de critcl.

Exemple (avec le critcl.tcl 0.1.1 de http://www.evolane.com/download/devel/ ) :

 #package require critcl
 source [info script]/../critcl.tcl

 # Un bout de code C a integer
 critcl::ccode {
    static int fib(int n) {
        return n <= 2? 1 : fib(n-1) + fib(n-2);
    }
 }
 critcl::cproc fib {int n} int {
    return fib(n);
 }
 #-- version Tcl
 proc fib0 n {
    if {$n <= 2} {return 1}
    expr {[fib0 [expr {$n-1}]] + [fib0 [expr {$n-2}]]}
 }
 puts tcc:[fib 30],[time {fib 30}]
 puts Tcl:[fib0 30],[time {fib0 30}]

Ca marche sur Win 95, XP, CE... et le code C est 170..600 fois plus vite que la version Tcl. Autre exemple, un simple call-back lequel est peut-être évalué:

 critcl::cproc do {Tcl_Interp* interp int i char* cmd} ok {
    if(i) Tcl_Eval(interp, cmd);
 }
 do 1 {puts "this should come"}
 do 0 {puts "this should not"}

Lisant la documentation de Tcl, il est très facile de expérimenter:

 31% critcl::cproc sigmsg {int i} char* {return Tcl_SignalMsg(i);}
 32% sigmsg 2
 interrupt
 33% sigmsg 4
 illegal instruction
 34% sigmsg 8
 floating-point exception
 35% sigmsg 16
 unknown signal

Voir aussi la page anglaise http://wiki.tcl.tk/20086