9
votes

Puis-je utiliser c comme une langue de script pour mon moteur?

J'ai un moteur de jeu en ce moment et je cherche une langue de script pour cela. J'ai essayé Lua et trouvai ça assez bon mais je veux que mon script ressemble à C ++ ou à son mieux, le script de moteur unreal serait meilleur.

est-ce que même possible?


7 commentaires

Pourquoi voudriez-vous utiliser une langue comme c comme langue de script? Voulez-vous vraiment que vos utilisateurs aient à gérer la gestion de la mémoire, la manipulation de chaînes de faible niveau, etc.?


(Presque) tout est possible. Mais vous devrez peut-être construire votre propre interprète si vos exigences s'écartent trop loin de ce qui est déjà construit par d'autres personnes et mises à disposition pour que vous puissiez utiliser.


Lien pertinent: Bellard.org/tcc


Voulez-vous C, ou une syntaxe de type C? JavaScript a l'air un peu comme c si vous plissez et est plutôt bien établi comme une langue de script.


@ Detly fait un très bon point. Vérifiez Google V8 Si vous souhaitez intégrer un interprète JS très efficace.


Cela semble être une raison assez superficielle. Pourquoi voulez-vous que cela ressemble à C ou C ++? Y a-t-il une meilleure raison que vous n'aimez pas la syntaxe?


root.cern/cling


6 Réponses :


7
votes

Bien sûr, vous pouvez: P Vous pouvez tout faire si vous voulez.

Je vois actuellement ces trois manières:

  • Soit vous écrivez le code vous-même pour analyser le code C / C ++, ce qui n'est vraiment pas une tâche facile
  • Vous utilisez un analyseur qui analyse et interprète C-Code C. CH Standard Edition devrait faire le tour car il peut être inclus dans ses propres projets en tant que script langue.
  • Une autre façon serait de créer un script qui compilait de manière dynamique le code généré par l'utilisateur à une bibliothèque partagée chargée de manière dynamique par votre moteur. Bien que cela ne soit plus "script".

6 commentaires

La troisième option aurait l'avantage d'être beaucoup plus rapide que de véritables langues de script (la compilation fournie n'est pas effectuée à plusieurs reprises).


La raison entière d'une langue de script dans les jeux est qu'il est facile d'écrire du code dans un moteur de script et qu'il peut être facilement ajusté (de préférence au moment de l'exécution, ce qui économise beaucoup de temps de débogage). C / C ++ ne correspond pas à cette facture du tout.


@bitmask, Roy T: True. Mais pourquoi vous ajoutez-vous ce commentaire à ma réponse au lieu de la question de l'OP?


Parce que je n'aime pas les réponses qui ne disent que: "Hé, c'est ce que cet autre gars a dit; Je ne le répète que pour la réputation de Phony!". C'était votre réponse, pas la mienne - j'essaie simplement d'aider l'OP décider laquelle de vos suggestions correspondrait au mieux une exigence donnée.


@bitmask: Sry, il ne devrait pas être une infraction, je me demandais juste. N'a pas vraiment eu que cela basé sur ma réponse.


@Royt. C'est exactement ce que je fais dans mon code en ce moment. Mon "script" compile en moins de 1 seconde, mises à jour au moment de l'exécution, a complet Support de débogage hors de la case, a accès gratuitement au reste de mon codeBase gratuitement (si je le veux ), et est statiquement typée. Non seulement C correspond à la facture, elle le fait aussi mieux, plus rapide, plus facilement et plus robuste que n'importe quel langage de script que j'ai jamais utilisé. Je recommande vivement cette approche à ceux qui souhaitent un meilleur système de script. (Le seul problème consiste à maintenir des variables statiques entre les appels de fonction, car ceux-ci sont effacés lorsque le code recompille.)



2
votes

Metalua est le système de mise en œuvre de la langue basé sur la base de code LUA qui expose divers entratures de langue telles que l'analyseur (< Un href = "http://metalua.luaforge.net/manua.luaforge.net/manual004.html" rel = "nofollow"> gg / mlp ), vous permettant ainsi de prolonger la langue ou de modifier complètement la syntaxe. Pensez à une croix entre YACC et un interprète métacolulaire lispy.

Ce n'est pas tout à fait clair pour moi ce que vous êtes après avec ressemblent à c ou mieux c ++ , mais je pense que cela sonne le long des lignes droites et offre un bon équilibre entre la facilité de mise en œuvre et la flexibilité.


0 commentaires

1
votes

Comme ce que @CHARDL a dit, utilisez Metalua si vous voulez quelque chose de facile à mettre en œuvre et à avoir une flexibilité. Si vous voulez un langage de script de type C, vous pouvez essayer Ecmascript ou n'importe lequel des supersets informatiques (JavaScript, Jscript, ActionScript).


0 commentaires

2
votes

Il existe un nombre de langages de script avec plus ou moins de syntaxe similaire. D'autres ont déjà mentionné Ecmascript, une autre option serait S-Lang , conçu comme une langue de script, est Facile à incorporer et a une syntaxe assez proche de C.


1 commentaires

ECMAScript est la voie à suivre, me semble-t-il. Il y a des moteurs fiables disponibles. Je ne connais pas la licence du V8, mais si vous pouvez l'utiliser, vous serez en bonne forme.



4
votes

Vérifiez Angelscript, Gamemonkey, et il y en a beaucoup d'autres

http://codeplea.com/game-scripting-languages ​​

ou peut-être aller de manière difficile et intégrez l'interpréteur CINT C / C ++ (http://root.cern.ch) avec la bibliothèque racine. L'idée est que vous interprétez tous vos fichiers .C / .CPP que vous travaillez activement, tandis que les autres sont compilés (votre choix).

Par exemple, vous êtes le programmeur audio, vous souhaitez que le reste du code non audio soit rapide, tandis que les choses que vous ne travailliez pas activement non, mais d'avoir une itération rapide - Chargement à chaud, changez sur le voler, etc.

En outre, l'interpréteur de la CINT dispose d'installations linguistiques dynamiques supplémentaires - vous pouvez introsper (réflexion) - vous permettant de créer par exemple des sérialiseurs pour l'emballage de vos actifs de jeu, ou tout ce que vous pourriez avoir besoin.

Il y a aussi un montant inférieur et ch (comme mentionné) et beaucoup d'autres ...


0 commentaires

2
votes

TCC a une bibliothèque AA permettant une compilation dynamique du code C et de voir comme c'est assez rapide comme un c Compilateur, son peut être utilisé pour compiler des trucs (presque) sur la mouche, il existe un exemple vraiment de base Ici , mais la documentation de la TCC dans l'en-tête est bien meilleure dans l'explication de choses.

Il est également livré avec un Meilleur exemple de son propre mode de montrant comment exposer les symboles au compilateur lors de l'utilisation de libtcc, Cela peut vous permettre de sander vos scripts si vous désactivez certaines parties du compilateur (principalement l'importation de bibliothèques externes autres que celles sur une liste de sécurité), ce qui est possible comme son totalement opensource et non trop complexe et il a des documents de base sur sa structure interne.


3 commentaires

TCC est une excellente preuve de concept, mais il n'a pas été largement repris, et cela semble maintenant être abandonné. C'est une honte, mais ce n'est probablement pas une bonne solution au problème de l'Asker.


@Charlesstewart: La liste de diffusion TCC est toujours active, de même que certaines des succursales CVS, une nouvelle version publiée en février cette année aussi. Le point réel est qu'il est petit, simple à utiliser et rapide.


Oh, je suis heureux d'entendre ça. Il n'y avait pas de version récente de quelques années et l'ancienne version que j'ai eu du mal à compiler. Je vais regarder à nouveau un coup d'oeil.