I've been discussing a conceptual project with a friend of mine and the the most effective way we've seen of doing it is writing the engine in C++ while the logic would be done in Ruby.
However, we would need data to be passed around often, for example:
- Engine reports that A happened, that gets triggered in a proc array (event "A" is passed but proc doesnt use it)
- Ruby decides that we need to wait for B to happen
- Ruby adds a proc to an array. The array of procs is iterated during each cycle in the C++ engine
- C++ engine reports that B happened and passes "event B (should be a Ruby object)
- Ruby receives event B and decides what to do next
I don't work with multiple languages often, and was wondering if it's possible to implement things in this way. I know that there's the ruby VALUE in C++, but what is the standard way of combining the two? Of course I know Ruby follows the Perl "more than 1 way to do it", but there's often a standardized way.
I ran a quick test with SWIG but quickly ran into a problem. From what I can see, Ruby (1.9.3p286, though it uses the 1.9.1 gems afaik) can't load the shared object. Here's the code, actions done and more information.
I tried compiling to the latest Ruby and SWIG version to see if maybe it was some compile error upstream. I got no errors and the problem remains. Seems it might be an incompatibility between these SWIG and Ruby versions... or a problem with the current Ruby version.