Subject: [ruby-ffi] Re: Rubygame now uses FFI |
From: Gimi |
Date: 10/25/09 11:14 PM |
To: ruby-ffi |
Great job! Hope more and more C/C++ code will be replaced with FFI ; ) On Oct 26, 2:45 am, John Croisant <jac...@gmail.com> wrote:
:-D You can read the full announcement on the Rubygame blog. (If you get an application error on my blog, please try again later. Rails has been acting up lately.) http://blog.rubygame.org/articles/2009/10/24/rubygame-2-6-released Gems are available on Rubyforge ("gem install rubygame"), and are known to work on MatzRuby (1.8.6, 1.8.7, 1.9.1) as well as JRuby (1.3.1, 1.4.0RC2). However, JRuby users need to first install the ffi stub gem [1] to resolve the gem dependencies. Also, I'm afraid JRuby users on Mac are out of luck until a JRuby equivalent of RSDL [2] is written. [1]http://github.com/ffi/ffi-jruby [2]http://github.com/knu/rsdl I haven't been able to test it on Rubinius, but in theory it should work if the FFI interface is compatible. I'd love to hear reports of anyone who tries it on Rubinius. I created two other FFI-ish libraries to support the new Rubygame: Nice-FFI and Ruby-SDL-FFI. Nice-FFI is a helper library on top of FFI, which makes some things in FFI more convenient for me. As one example, it can automatically turn pointers returned from a function into struct instances of the appropriate class. Ruby-SDL-FFI uses Nice-FFI (and plain FFI) to interface with SDL and related libraries. Rubygame then uses Ruby-SDL-FFI instead of a compiled extension written in C. Overall, FFI has been great to work with, and I'm very happy that I switched to it! As I mentioned above, I was able to throw away the C code and now write everything in Ruby, which is a joy. Not only is it easier to write and maintain, it also works on more platforms and is much easier for users to install. Before, users had to have a compiler environment set up, or hope someone would create a binary gem for their OS, which was a huge barrier for Windows users. Plus, I can now do run-time detection of what libraries and features are available on the user's system, and even theoretically provide alternative back ends using different libraries. For example, I'm considering adding an OpenGL back end (using ffi-opengl, of course!), to provide faster rendering and better Mac support. Such a thing would have been much more difficult using a C extension, because the feature detection there is (usually) done at compile time, which is unreliable if compiled on one system and then distributed to others, such as with a binary gem. Anyway, I guess you can count me as a total FFI fanboy now! :-D Thanks to everyone for your wonderful work on FFI, both for MatzRuby and JRuby! It has made my programming life a lot easier, and easier for Rubygame users as well. - JohnGreetings, FFI-ers I've finally released the first FFI-powered version of Rubygame! I was able to completely eliminate all the C code for Rubygame, which has already made it a lot easier for users on all platforms to install, since no compilation is needed anymore. And of course, there's the added bonus for me of being able to develop in all Ruby.