Je suis l'auteur de LikeMagic, C++ pour la bibliothèque de liaison pour les Io de la langue. (Je ne suis pas l'auteur de Io.)
http://github.com/dennisferron/LikeMagic
Un de mes objectifs clairs avec LikeMagic est complet et total C++ de l'interopérabilité, dans les deux directions. LikeMagic mobilisera natif Io types de types C++ (y compris la conversion entre les conteneurs STL et Io native de type Liste) et il représentera C++ classes, des méthodes, des champs et des tableaux dans les Io. Vous pouvez même passer d'un bloc de Io code de sortir de l'Oi de l'environnement et de l'utiliser en C++ comme un foncteur!!
Habillage de types C++ pour la consommation en Io script est simple, rapide et facile. Accéder à des objets de script à partir de C++ ne nécessitent une "eval" fonction de celle que vous avez décrite, mais le modèle en fonction de conversion de type et de regroupement permet d'accéder facilement à la suite de l'exécution d'un script chaîne. Et il n'y a ladite capacité de transformer Io bloc() des objets en C++ foncteurs.
Actuellement, le projet est encore dans les premiers stades, mais il est pleinement opérationnel. J'ai encore besoin de faire des choses comme document de ses étapes de génération et de dépendances, et il ne peut être construit avec gcc 4.4.1+ (pas de Microsoft Visual C++) car il utilise C++0x fonctionnalités ne sont pas encore pris en charge dans MSVC. Cependant, il ne prend entièrement en charge Linux et Windows, et Mac port est prévu.
Maintenant la mauvaise nouvelle: Rendre les scripts produire .h de fichiers et de .donc ou .les fichiers dll appelable à partir de C++ ne serait pas seulement besoin d' un compilateur (une sorte de) mais il faudrait aussi un compilateur JIT. C'est parce que (dans de nombreux langages de script, mais plus particulièrement dans les Io) d'un objet, les méthodes et les champs ne sont pas connus jusqu'à l'exécution, et dans les Io, les méthodes peuvent encore être ajoutés et supprimés à partir d'objets en direct! Au début, j'allais dire que le fait même que vous me demandez cela me fait me demander si peut-être vous ne comprenez pas vraiment ce qu'est un langage dynamique est. Mais je crois en une sorte de conception dans laquelle vous essayez d'abord d'imaginer l'idéal ou de la meilleure façon possible de faire quelque chose, et ensuite travailler à rebours à partir de là à ce qui est réellement possible. Et donc, je vais vous avouer à partir d'une facilité d'utilisation point de vue, ce que vous décrivez semble plus facile à utiliser.
Mais alors que c'est l'idéal, et à peine possible (à l'aide d'un langage de script avec compilation JIT), il n'est pas très pratique, je suis toujours pas sûr si ce que vous demandez est ce que vous voulez vraiment. Si l' .h et .so/.dll les fichiers sont JITted à partir du script, et les modifications de script, vous devez recompiler votre programme C++ pour prendre avantage de ce changement! N'est-ce pas violer le principal avantage de l'utilisation de script en premier lieu?
Le seul moyen c'est pratique serait si les interfaces définies les scripts ne changent pas, et vous ne sont tout simplement faire de C++ wrappers pour les fonctions de script. Vous auriez beaucoup de fonctions C++ comme:
int get_foo() { return script.eval("get_foo()"); }
int get_bar() { return script.eval("get_bar()"); }
Je vais avouer que c'est plus propre à la recherche de code à partir du point de vue de l'appelant de la fonction wrapper. Mais si c'est ce que vous voulez, pourquoi ne pas simplement utiliser la réflexion dans le langage de script et de générer un .h fichier à partir de la méthode des listes stockées dans les objets de script? Ce type de réflexion peut être fait facilement en Io. À un certain moment, j'ai l'intention d'intégrer l' OpenC++ source-à-source traducteur comme un "callable" bibliothèque de LikeMagic, ce qui signifie que vous pouvez même utiliser un robuste C++ générateur de code au lieu d'écrire des chaînes de caractères.