Ho discusso di un progetto concettuale con un mio amico e il modo più efficace che abbiamo visto di farlo è scrivere il motore in C ++ mentre la logica verrebbe eseguita in Ruby.
Tuttavia, avremmo bisogno che i dati vengano passati spesso, ad esempio:
- Il motore segnala che A è successo, che viene attivato in un array proc (l'evento "A" viene passato ma proc non lo usa)
- Ruby decide che dobbiamo aspettare che B accada
- Ruby aggiunge un proc a un array. L'array di proc è iterato durante ogni ciclo nel motore C ++
- Il motore C ++ segnala che B è successo e passa "l'evento B (dovrebbe essere un oggetto Ruby)
- Ruby riceve l'evento B e decide cosa fare dopo
Non lavoro spesso con più lingue e mi chiedevo se fosse possibile implementare le cose in questo modo. So che c'è il rubino VALUE in C ++, ma qual è il modo standard di combinare i due? Naturalmente so che Ruby segue il Perl "più di 1 modo per farlo", ma c'è spesso un modo standardizzato.
Ho eseguito un test rapido con SWIG ma ho subito riscontrato un problema. Da quello che posso vedere, Ruby (1.9.3p286, sebbene usi l'1.9.1 gems afaik) non può caricare l'oggetto condiviso. Ecco il codice, le azioni eseguite e altre informazioni .
Ho provato a compilare la versione più recente di Ruby e SWIG per vedere se forse c'era un errore di compilazione a monte. Non ho errori e il problema rimane. Sembra che potrebbe essere un'incompatibilità tra queste versioni SWIG e Ruby ... o un problema con la versione attuale di Ruby.