J'écris un petit langage embarqué pour un autre projet. Bien que le développement du jeu ne soit pas son intention initiale, il commence à ressembler à un bon ajustement, et je pense que je vais le développer dans cette veine à un moment donné.
Sans révéler aucun détail (pour éviter les biais), je suis curieux de savoir:
Quelles fonctionnalités aimez-vous dans un langage de script pour le développement de jeux?
Si vous avez utilisé Lua, Python ou un autre langage intégré tel que Tcl ou Guile comme langage de script principal dans un projet de jeu, quels aspects avez-vous trouvés les plus utiles?
Fonctionnalités du langage (lambdas, classes, parallélisme)
Fonctionnalités d'implémentation (optimisation des performances, JIT, accélération matérielle)
Fonctionnalités d'intégration (liaisons C, C ++ ou .NET)
Ou quelque chose de complètement différent?
Réponses:
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 quevoid*
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.
la source
Pour les jeux sur le Web, trois facteurs importants pour moi sont:
J'aime particulièrement Perl, en partie parce que je connais déjà le langage, et parce qu'avec un module de serveur Web comme mod_perl2, il y a un énorme avantage en termes de performances et d'intégration - mod_perl2 conserve une version compilée des scripts en RAM (qui ne sont interprétés que sur premier chargement) qui lui donne un avantage de vitesse majeur sur les autres langages interprétés qui ne disposent pas d'options de compilation, et il s'intègre également au serveur Apache HTTPd avec une API riche en fonctionnalités qui donne accès à de nombreuses fonctionnalités très puissantes.
Ces facteurs peuvent être utiles pour le développement de jeux sur le Web (et lorsque l'accès à la base de données est nécessaire, la mise en cache des connexions à la base de données permet de réduire davantage les temps de réponse des utilisateurs). Bien sûr, ce n'est peut-être pas la solution la plus idéale pour tout car chaque langue a ses avantages (et ses inconvénients), mais elle a toujours bien fonctionné pour mes besoins.
la source
Organisé par ordre d'importance (décroissante):
la source