Combinando Ruby e C ++

4

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.

    
posta Dukeling 04.11.2012 - 02:12
fonte

2 risposte

2

Swig è la strada da percorrere. Il passaggio dei dati è anche possibile nella mia comprensione con i typemaps. Dai un'occhiata.

Guarda anche alcuni link utili di seguito

risposta data 05.11.2012 - 09:19
fonte
-4

Ho anche affrontato lo stesso problema. Sembra che l'interprete rubino si aspetti l'estensione ".so" anche su Windows. Quindi rinominare ".dll" in ".so" ha risolto il problema. Questo è richiesto per le versioni di ruby dopo 1.9

    
risposta data 20.01.2017 - 12:00
fonte

Leggi altre domande sui tag