2008-10-27 7 views
18

Quelle est la meilleure façon d'intégrer Ruby en tant que langage de script en C++? En utilisant ruby.h? LAMPÉE? Autre chose? Ce dont j'ai besoin, c'est d'exposer des objets C++ à Ruby et de faire en sorte que l'interpréteur Ruby évalue les scripts qui accèdent à ces objets. Je ne me soucie pas d'étendre Ruby ou d'y accéder en C++.Comment intégrer Ruby en C++?

J'ai trouvé ceci article on embedding Ruby in C++, et bien que ce soit très utile, c'est un peu vieux et je me demandais s'il y avait d'autres ressources sur le sujet (ou des implémentations open source de moteurs similaires).

Répondre

4

rasade est probablly la voie à suivre ..... mais ne marche pas trop rubis ...... intégrer

si vous voulez une langue qui intègre bien dans C++, essayez lua

+0

J'ai essayé Lua, c'est une langue merveilleuse et j'ai été assez facile à intégrer. Ruby est une exigence cependant, car j'ai déjà beaucoup de code Ruby que je voudrais réutiliser. –

+1

puis swig est très bon ..... et ne pas essayer le multi-threading! –

+1

Oui, même ne pas essayer d'intégrer ruby ​​et l'utiliser à partir d'un seul fil dans vos applications multithread. Ils (les programmes de ruby) changent des gestionnaires de signal, des variables d'envionrment, des annuaires courants etc. tout le temps. – Lothar

11

Rice semble très prometteur.

+4

Note aux utilisateurs de Windows: On sait que Rice est correctement compilée et fonctionne sous Cygwin et Mingw. :( –

6

Ruby fournit un fichier README.EXT très utile. Il a beaucoup d'informations sur la façon d'étendre Ruby, et convertir entre C & Ruby types.

Il y a aussi cette excerpt du pick axe book qui couvre à peu près la même chose. Dans mon cas, lorsque j'ai ajouté des scripts Ruby à mon application, j'ai décidé de ne pas utiliser swig, car mes besoins étaient très simples et je ne voulais pas ajouter une autre dépendance de construction.

1

Je travaille sur Rareté (https://github.com/Plaristote/Rarity), qui fait deux choses:

  • génère les liaisons Ruby d'une description YML de votre C++ API
  • permet l'interaction avec le script Ruby dans le plus C++ mode il y a

Je l'ai résolu une bonne partie de la question (de la gestion des exceptions, la collecte des ordures) ... Je ne l'ai pas vu nulle part ailleurs la génération de code qui Rareté utilise pour faire vos fixations viennent à la vie. Je n'ai pas non plus vu d'autre lib permettant une conversion aussi facile entre les types C++ et Ruby.

Je pense que Rarity vaut le coup! Et je serais heureux d'avoir aussi des commentaires :)!