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 signalVoir aussi la page anglaise http://wiki.tcl.tk/20086