Je recherche deux choses: la vitesse et l'intégration. Habituellement, les deux vont de pair et avec familiarité. Malheureusement, pour C ++, il n'y a pratiquement pas de langages qui offrent vitesse et intégration. J'ai utilisé Lua et ça craignait, horriblement. J'ai passé tout le temps à écrire des liaisons et pas assez de temps pour écrire du code.
Caractéristiques linguistiques? L'intérêt d'incorporer un langage de script n'est pas pour qu'il puisse avoir des fonctionnalités de langage dynamique sifflantes que ma langue d'origine n'avait pas, c'est pour qu'il puisse être interprété au moment de l'exécution . Je ne m'inquiète vraiment pas au-delà de cela, tant qu'il est fondamentalement fonctionnel, alors c'est très bien et correspond à mon langage hôte (dans ce cas C ++). Cependant, étonnamment, les langages conçus pour être intégrés dans les applications hôtes échouent complètement à la partie concernant l' intégration .
Ai-je besoin de co-routines? Non, je n'ai pas besoin de co-routines. Ai-je besoin d'une saisie dynamique? Non, j'ai besoin de savoir quels types me reviennent de mon langage de script, et comme tout mon code existant est construit autour d'un typage très fort, j'aimerais vraiment que mon code de script puisse aussi respecter cela. Ai-je besoin d'une collecte des ordures? Non, mes types gèrent déjà leurs propres ressources et je veux vraiment une destruction déterministe. Est-ce que je veux goto? Non, je veux lever des exceptions.
Le problème que j'ai trouvé était que, fondamentalement, tous les langages de script existants étaient conçus pour étendre C, pas C ++, et ne prennent pas correctement en charge le modèle C ++ à bien des égards, et en plus de cela, ils ont une sémantique totalement différente. Comment diable vais-je traduire shared_ptr
, qui est une destruction déterministe automatique, en un environnement de collecte des ordures? Vous pouvez écrire toutes les bibliothèques d'encapsulation que vous souhaitez, vous ne modifierez pas la sémantique du langage sous-jacent étant incompatible avec le langage que vous essayez d'étendre avec. Comment puis-je m'assurer que void*
c'est le bon type? Comment puis-je gérer l'héritage? Comment lever et intercepter des exceptions? Cela ne fonctionne tout simplement pas.
Un bon langage de script pour C ++ serait typé statiquement, sémantiquement la valeur, détruit de façon déterministe, lève et intercepte les exceptions et respecte mes destructeurs / constructeurs / constructeurs de copie, car alors tous mes types fonctionneront simplement, agréablement et facilement, et le langage résultant sera rapide et supporte toute ma sémantique originale, facile à lier.