I\'ve been discussing a conceptual project with a friend of mine and the the mos
ID: 653187 • Letter: I
Question
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 would like to know 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)
Edit 1: I've ran a quick test with SWIG and met a problem really fast. From what I can see, ruby (1.9.3p286, though it uses the 1.9.1 gems afaik) can't load the shared object. I've put the code, actions done and more information here.
Edit 2: Tried compiling to latest ruby and swig version (god, I love ABS) to see if maybe it was some compile error upstream. I got no errors and problem remains. Seems it might be an incompatibility between this SWIG version and Ruby version... Or a problem with the current Ruby version.
Explanation / Answer
Swig is the way to go. The data passing is also possible there in my understanding with typemaps. Have a look at it.
Also look at some helpful links below
Extending Ruby
rice (Github)
Ruby extention with C
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.