Pourquoi utilisons-nous des scripts en développement?
67
Dans mon projet actuel, les scripts Lua sont appelés par les fonctions C ++ côté serveur. Après cela, les scripts appellent à nouveau les fonctions C ++ toujours dans cette solution. Pourquoi devrions-nous faire de telles choses sans appeler directement la fonction C ++? Quelles sont les situations dans lesquelles des scripts sont nécessaires?
Les scripts sont généralement compilés au moment de l'exécution , alors que le langage hôte sera compilé au moment de la compilation. Cela signifie que nous n'avons pas besoin de recompiler si le script change. La recompilation d'une partie complète peut prendre de quelques minutes à quelques heures, ce qui implique un gros impact sur la productivité.
Généralement, le code critique ou le code de base ne sera pas scripté. Ce code doit être rapide et la gestion de la mémoire est souvent cruciale.
Dans les jeux, la logique et la configuration du jeu sont généralement contenues dans des fichiers de script. Ces scripts peuvent facilement être mis à jour par des non-programmeurs (comme le concepteur) pour peaufiner le gameplay. Les langages de script sont faciles et agissent de manière indulgente à cette fin.
Souvent, un langage de script est également utilisé pour créer des scripts en temps réel . Cela est pratique pour peaufiner certains éléments de jeu ou même pour le débogage. De nombreux jeux fournissent une console à cet effet (principalement interne).
Il est très possible que vous créiez un jeu en utilisant un moteur de jeu existant, simplement par script. La couche de moteur de jeu est ainsi totalement dissociée de la couche de logique de jeu . Les moteurs modernes peuvent généralement être utilisés facilement pour créer des jeux FPS ou RTS, mais ce n'est pas possible pour tous les genres. Un MMO nécessiterait probablement un autre type de moteur.
La ligne de fond est donc le découplage. Les avantages énumérés ci-dessus surpassent souvent le travail supplémentaire nécessaire pour créer ou intégrer un langage de script.
+1 pour dire que les scripts sont généralement plus faciles à mettre à jour par des non-programmeurs. Les concepteurs ne sont pas toujours des programmeurs, et ils ne doivent pas l'être.
Chêne
19
J'ai l'impression de me répéter dans chaque question à propos du script - si votre flux de travail nécessite la programmation (y compris le script) pour les non-programmeurs, il vous en mordra plus tard. Les concepteurs ne sont pas toujours des programmeurs, mais dès qu'ils écrivent des scripts non triviaux (par exemple, dès qu'ils essaient de définir une fonction ou d'utiliser une boucle), ils prétendent en être un. S'ils n'ont pas de formation en programmation, cela finira en larmes et en temps perdu pour tout le monde.
5
Joe - cela n'invalide pas l'argument, cela signifie simplement que vous devez décider où découpler le "matériel de programmation" du "matériel de conception" et la ligne de démarcation sera différente en fonction de l'expertise technique de vos concepteurs (ou de celui-ci).
Ian Schreiber
3
Je suis à peu près sûr que tout designer qui se respecte est bien enseigné dans au moins une langue. Pour clarifier un peu les choses, je voudrais nuancer le terme "non-programmeur", car celui dont la profession n’est pas celle d’un ingénieur en logiciel. Je regrette d'avoir utilisé le terme, grâce à Joe, je vois qu'il est ambigu. Je crois qu’il existe un large éventail de programmeurs, allant de ceux qui écrivent du XML simple à l’assemblage hardcore en passant par le traitement du signal mathématique. J'espère que cela résoudra le problème de dualité "non-programmeur".
Nef
8
Je n'ai entendu personne dire que les concepteurs devraient écrire des scripts complexes et critiques pour la production. Cependant, les concepteurs ayant une compréhension modeste de la programmation pourraient toujours modifier certains scripts à titre expérimental (puis les confier à des programmeurs réels). Ils pourraient certainement écrire de simples scripts ad hoc à partir d'une console au moment de l'exécution pour faciliter leurs propres tests. J'imagine que les concepteurs voudront peut-être utiliser des scripts de base afin de prototyper de nouveaux modèles d'écran (même s'ils ne sont que des maquettes semi-fonctionnelles et interactives). Beaucoup de code non-production a besoin d'être écrit.
Mike Strobel
38
Vous avez posé la mauvaise question. Je pense que la vraie question est de savoir pourquoi nous mettons en place des langages "sans script" comme C, C ++, Java, etc. Et la réponse est une des raisons: la performance. (Et peut-être l'inertie, mais cette inertie est là à cause des performances, et quiconque peut écrire un bon C / C ++ / Java peut écrire au moins passable Ruby / Python / Lua / JavaScript.)
Nous utilisons des langages de "script" (ce qui signifie vraiment, très haut niveau, ramasse-miettes, et habituellement une sorte de frappe plus lâche et une compilation dynamique) parce que ce sont généralement des langages plus faciles pour quiconque - programmeurs compris - pour écrire du code. des choses stupides comme se souvenir de libérer après votre malloc ou de s’assurer que votre code est protégé contre les exceptions, ou de rendre tous vos destructeurs virtuels. Si nos ordinateurs allaient infiniment vite, nous utiliserions des langages de "script" pour tout.
J'aime cet argument tellement mieux que "pour que les concepteurs puissent programmer". C'est une très mauvaise idée de rejeter la valeur du développement rapide et de pouvoir expérimenter les changements sans tout recompiler.
Ojrac
10
Les langages de script pour la logique de jeu sont un très bon exemple du modèle d’architecture logicielle Alternate Hard Layers et Soft Layers . Il y a une bonne discussion sur ce site (et d'autres, j'en suis sûr) sur les avantages de le faire.
Les modifications de script sont faciles à déployer. Par exemple, vous pouvez conserver des scripts dans une base de données, ce qui signifie qu'au lieu d'un redéploiement binaire complet et d'un redémarrage possible du service, vous émettez simplement une instruction SQL UPDATE unique, éventuellement suivie d'un signal adressé à votre service en cours pour recharger le script.
De plus, les langages de script sont souvent simples à comprendre et à programmer. Vous n'avez donc pas besoin des développeurs "hardcore" (ceux qui traitent de la gestion de la mémoire / des pointeurs et des optimisations au niveau du processeur) pour la majorité du code (s'il s'agit d'un grand RPG, les scripts pour l'IA, les sorts, les effets d'objet et le monde lui-même sont souvent plus gros que le code du moteur). Les langages de script permettent de se concentrer davantage sur le «quoi» plutôt que sur le «comment» dû à Garbage Collection (dans le cas de Lua) et à un niveau d'abstraction plus élevé.
Un scénario où les scripts sont utiles est lorsque nous voulons que notre moteur soit extensible par plugins / addons. Ces extensions sont créées dans de nombreux cas par des personnes non professionnelles (comme les joueurs avancés et les passionnés). Les scripts sont plus sûrs et plus faciles à cette fin. En utilisant des scripts, ils n'ont pas besoin d'utiliser des compilateurs et n'ont pas besoin de connaître les pointeurs ...
Le jeu World of Warcraft en est un bon exemple. Il a des milliers d'addons créés par la communauté. Ces addons sont écrits en utilisant LUA + XML.
Vous avez posé la mauvaise question. Je pense que la vraie question est de savoir pourquoi nous mettons en place des langages "sans script" comme C, C ++, Java, etc. Et la réponse est une des raisons: la performance. (Et peut-être l'inertie, mais cette inertie est là à cause des performances, et quiconque peut écrire un bon C / C ++ / Java peut écrire au moins passable Ruby / Python / Lua / JavaScript.)
Nous utilisons des langages de "script" (ce qui signifie vraiment, très haut niveau, ramasse-miettes, et habituellement une sorte de frappe plus lâche et une compilation dynamique) parce que ce sont généralement des langages plus faciles pour quiconque - programmeurs compris - pour écrire du code. des choses stupides comme se souvenir de libérer après votre malloc ou de s’assurer que votre code est protégé contre les exceptions, ou de rendre tous vos destructeurs virtuels. Si nos ordinateurs allaient infiniment vite, nous utiliserions des langages de "script" pour tout.
la source
Les langages de script pour la logique de jeu sont un très bon exemple du modèle d’architecture logicielle Alternate Hard Layers et Soft Layers . Il y a une bonne discussion sur ce site (et d'autres, j'en suis sûr) sur les avantages de le faire.
la source
la source
Les modifications de script sont faciles à déployer. Par exemple, vous pouvez conserver des scripts dans une base de données, ce qui signifie qu'au lieu d'un redéploiement binaire complet et d'un redémarrage possible du service, vous émettez simplement une instruction SQL UPDATE unique, éventuellement suivie d'un signal adressé à votre service en cours pour recharger le script.
De plus, les langages de script sont souvent simples à comprendre et à programmer. Vous n'avez donc pas besoin des développeurs "hardcore" (ceux qui traitent de la gestion de la mémoire / des pointeurs et des optimisations au niveau du processeur) pour la majorité du code (s'il s'agit d'un grand RPG, les scripts pour l'IA, les sorts, les effets d'objet et le monde lui-même sont souvent plus gros que le code du moteur). Les langages de script permettent de se concentrer davantage sur le «quoi» plutôt que sur le «comment» dû à Garbage Collection (dans le cas de Lua) et à un niveau d'abstraction plus élevé.
la source
Un scénario où les scripts sont utiles est lorsque nous voulons que notre moteur soit extensible par plugins / addons. Ces extensions sont créées dans de nombreux cas par des personnes non professionnelles (comme les joueurs avancés et les passionnés). Les scripts sont plus sûrs et plus faciles à cette fin. En utilisant des scripts, ils n'ont pas besoin d'utiliser des compilateurs et n'ont pas besoin de connaître les pointeurs ...
Le jeu World of Warcraft en est un bon exemple. Il a des milliers d'addons créés par la communauté. Ces addons sont écrits en utilisant LUA + XML.
la source