2010-01-13 5 views
1

Est-il possible de passer des objets Ruby à une application C++? Je n'ai jamais fait ce genre de chose auparavant et je me demandais si cela serait possible. Aurait-il besoin de modifier le code de base Ruby?Extension de Ruby avec C++?

+0

Quand Ruby devient trop lent, je pense qu'il est en cours d'extension avec C. –

Répondre

5

Oui, et non, respectivement.

Ruby est écrit en C. C++ est, de par sa conception, compatible avec C.

Tous les objets dans Ruby sont détenus par un objet VALUE (de type union), qui peut être passé facilement.

Toutes les directions que vous trouvez pour prolonger Ruby avec C s'appliquent en C++ avec peu de modifications. Alternativement, vous pouvez utiliser quelque chose comme SWIG pour simplifier l'écriture de vos extensions. Extension de Ruby avec C++ n'est pas un problème.

1

Le livre Programming Ruby contient des détails sur l'accès à Ruby à partir de C. Je ne suis pas sûr de la manière dont la documentation est actuelle. Ce blog post décrit également l'API Ruby C.

1

Fondamentalement, la seule chose que vous devez vous rappeler lorsque vous rédigez votre poste est de déclarer une méthode d'initialisation de votre extension comme extern « C », comme ceci:

extern « C » Init_your_extension void() {// ... }

J'ai eu récemment d'exposer une fonction C++ à mon code Ruby, vous pouvez trouver le code ici si vous voulez (son truc juste de base, donc je pense que ce sera bon pour vous aider à démarrer): http://github.com/psyho/aspell_edit_dist