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