Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote