On 03 May 2005, at 11:09, Phil Tomson wrote: > In article <dd6604df17395617d9dd5740c057200a / segment7.net>, > Eric Hodel <drbrain / segment7.net> wrote: >> $ cat f.c >> // BEGIN METARUBY PREAMBLE >> #include <ruby.h> >> #define case_equal_long(x, y) (rb_funcall((x), rb_intern("==="), 1, >> (y))) >> // END METARUBY PREAMBLE >> // class F < Object >> >> static VALUE >> rrc_cF_factorial(VALUE __self, VALUE n) { >> VALUE f; >> VALUE x; >> f = LONG2FIX(1); >> x = n; >> while (RTEST(rb_funcall(x, rb_intern(">="), 1, LONG2FIX(2)))) { >> f = rb_funcall(f, rb_intern("*"), 1, x); >> x = rb_funcall(x, rb_intern("-"), 1, LONG2FIX(1)); >> }; >> return f; >> } >> >> static VALUE >> rrc_cF_main(VALUE __self) { >> return rb_funcall(__self, rb_intern("factorial"), 1, LONG2FIX(5)); >> } >> >> void >> Init_F() { >> VALUE rrc_cF = rb_define_class("F", rb_path2class("Object")); >> >> rb_define_method(rrc_cF, "factorial", rrc_cF_factorial, 1); >> rb_define_method(rrc_cF, "main", rrc_cF_main, 0); >> >> } >> > > > How does this differ from the current RubyToC stuff? This one (Ruby2RubyC) generates a C extension, where the other tail generates raw, type inferenced C code. I think Ruby2RubyC can make optimizations for Fixnum math and other boolean logic, but I haven't explored that yet. Ruby2RubyC is also dynamic code safe. It automatically converts from Fixnum to Bignum, thanks to the Ruby C runtime. (I snipped the output of factorial(9999), but it outputs a handful of lines of numbers.) For example, the other tail could not handle factorial(9999) because C doesn't have Bignums. > Is this newer version available for download yet? No, not yet. Maybe after Thursday hacking. -- Eric Hodel - drbrain / segment7.net - http://segment7.net FEC2 57F1 D465 EB15 5D6E 7C11 332A 551C 796C 9F04