From: Joel VanderWerf Date: 2009-07-27T14:47:08+09:00 Subject: [ANN] CGenerator is now a gem CGenerator is a framework for dynamically generating and loading C extensions from Ruby programs. Includes CShadow module for defining classes in terms of C structs with accessors and inheritance. It's been in use for almost 8 years. Installation: gem install cgen or download at http://rubyforge.org/projects/cgen Example: require 'cgen/cshadow' class Complex < Numeric include CShadow shadow_attr_accessor :re => "double re" shadow_attr_accessor :im => "double im" def initialize re, im self.re = re self.im = im end define_c_method(:abs) { include "" returns "rb_float_new(sqrt(pow(shadow->re, 2) + pow(shadow->im, 2)))" } define_c_method(:scale!) { c_array_args { optional :factor default :factor => "INT2NUM(10)" typecheck :factor => Numeric } body %{ shadow->re *= NUM2DBL(factor); shadow->im *= NUM2DBL(factor); } returns "self" } end Complex.commit z = Complex.new 5, 1.3 p z # ==> # puts z.abs # ==> 5.1662365412358 z.scale! 3.0 # float p [z.re, z.im] # ==> [15.0, 3.9] z.scale! 3 # int p [z.re, z.im] # ==> [45.0, 11.7] z.scale! # use default value p [z.re, z.im] # ==> [450.0, 117] -- vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407