Ebook Les développeurs de jeux Besoin Lua D'AiR


Télécharger Ebook Les développeurs de jeux Besoin Lua D'AiR

★★★★★★★★★★3.5 étoiles sur 5 basé sur 1 votes.
Votez ce document:

Télécharger aussi :


Guide de formation sur le langage Lua [Eng]

...

Introduction

Les développeurs de jeux utilisent des langages de script pour développer et maintenir la logique de jeu séparément des bibliothèques de moteur de jeu. Lua est un langage de script [1] sous la forme d'une bibliothèque ANSI C1 développée par Ierusalimschy, de Figuieredo et Celes. Dura son évolution [2] Lua a graduellement mûri et est resté léger. En outre, il s'agit d'un langage de script dynamiquement typé, intégrable, minimaliste mais extensible. Ses compromis de conception de langage, présentés dans le tableau 1, ont façonné le co-développement de l'API d'intégration et des fonctionnalités de script [3]. Lua est populaire dans le développement de jeux. En utilisant Lua, les développeurs peuvent rapidement créer des prototypes. Cependant, l'utilisation de Lua a également un coût. Dans les stades de développement ultérieurs, lorsque de plus grandes quantités de code de bibliothèque de moteur et de script de jeu sont disponibles, les développeurs rencontrent des problèmes de maintenabilité et de qualité.

Premièrement, l'utilisation d'un générateur standard pour le couplage entre Lua et les bibliothèques de jeux sacrifie la vitesse, et le maintien d'un couplage manuscrit avec des optimisations spécifiques au domaine est laborieux et sujet aux erreurs. Deuxièmement, l'évaluation de la qualité des scripts Lua est difficile en raison d'un manque d'outils qui prennent en charge l'analyse statique au niveau de la source, ce qui implique de calculer les informations sur les scripts avant le temps de fonctionnement. Les scripts Lua couramment utilisés pour l'analyse dynamique ne signalent que les avertissements et les erreurs au moment de l'exécution et sont limités à la couverture de code. Les analyses statiques existent, mais sont principalement appliquées aux représentations intermédiaires dans des formes SSA (Single Static Assignment) pour l'optimisation de l'exécution, par ex. LuaJIT2 et les spécialisations runtime de Williams et al. [4].

Les deux problèmes augmentent avec l'échelle et des mesures spéciales sont nécessaires pour assurer la maintenabilité et la qualité du code. Une solution courante au premier problème est de développer un langage de définition d'interface (IDL) à partir duquel le code de la colle optimisé, le code d'interopérabilité entre les interfaces, est généré automatiquement. Cependant, les problèmes de qualité du code restent à résoudre. Les problèmes de qualité ne sont pas uniques à Lua. Blow [5] exprime une complexité accrue et un manque d'outils de développement et White et al. [6] décrivent le besoin d'une meilleure notation de script. Ramsey et Assis [7] expriment le besoin de la communauté Lua pour les API vérifiables par machine, y compris les types, l'analyse statique de programme entier et modulaire et l'interférence de type statique. Fournir des méthodes pratiques pour l'analyse statique de Lua est difficile parce que les algorithmes d'analyse statique sont soumis à un compromis entre la vitesse et la précision et les développeurs ont besoin d'un retour exact et immédiat au cours du développement.

Nous abordons les problèmes de qualité des scripts en proposant une méthode pour compléter les techniques d'analyse de Lua. Nous décrivons une approche en collaboration avec IC3D Media qui utilise le Rascal Meta-Programming Language3 [8]. IC3D Media est une PME néerlandaise basée à Breda, active dans les jeux de divertissement et de formation. Nous introduisons Lua Analysis dans Rascal (Lua AiR), un cadre pour l'analyse statique du script Lua dans son contexte intégré, en utilisant des modèles IDL.

2 Analyse statique de Lua

Nous pouvons considérer les scripts comme ayant de nombreux états d'exécution accessibles via de nombreux chemins d'exécution. Exécuter chaque chemin de programme est infaisable, mais abstraire des états d'exécution spécifiques nous permet de raisonner sur les propriétés du logiciel et de les calculer en temps voulu. L'analyse statique fait référence à l'extraction d'informations sur les états et le comportement d'une application logicielle sans l'exécuter.



Le tableau 2 énumère les caractéristiques d'analyse statique applicables à Lua et compare les outils d'analyse existants. Les caractéristiques comprennent la distinction entre les variables globales et locales (1) et les déclarations relatives aux utilisations (4), éventuellement en utilisant la syntaxe de l'éclairage. Beaucoup de ces caractéristiques (1-6) peuvent être approximées par des techniques d'analyse de flux de données [9] telles que l'atteinte de définitions, qui calcule pour chaque point de programme quelles affectations peuvent l'atteindre. D'autres fonctionnalités ne nécessitent aucune analyse de flux (7, 8) ou requièrent des techniques d'inférence plus avancées (9-13). La figure 1 illustre les caractéristiques décrites dans le tableau 2 en utilisant des commentaires et des références (fn), où (a) illustre les caractéristiques 1, 2, 4, 7, 8 et 9 et (b) montre les caractéristiques 1-3.

...

Koneki Lua Outils de développement (LDT) 4 est un plug-in Eclipse qui fournit un débogage à distance et une analyse statique rudimentaire pour mettre en évidence et refactoriser. Lua Inspect5 est un outil d'analyse statique expérimental qui déduit des valeurs, mais incorrectement pour les affectations conditionnelles. Lua Checker6 est un outil de ligne de commande de base qui vérifie les déclarations de variables locales par rapport à leurs utilisations. Lua pour IDEA7 enrichit les sites d'appel avec une structure d'API (par exemple pour World of Warcraft). LDT et Lua Inspect sont basés sur Metalua [10], une extension de Lua pour la méta-programmation statique.

2.1 Cadre de Lua AiR

Cette section explique l'approche du framework Lua AiR. IC3D Media a développé deux langages d'interopérabilité entre Lua et leur moteur de jeu Logos3D appelé IDL (Interface Definition Language) et IGL (Interface Generator Language). IDL définit les signatures de fonction et les types de données. IGL définit le format de générateur du mappage entre la fonctionnalité du moteur définie dans les modèles IDL et Lua. Contrairement à d'autres approches présentées dans le tableau 2, nous utilisons des informations provenant du contexte intégré dans notre analyse. Les fonctions et les structures de données exposées à Lua, et gérées par le moteur Logos3D, sont définies statiquement et fortement typées. Le partage de signatures de fonctions et de types de données modélisés dans IDL entre l'environnement intégré et Lua permet de vérifier les arguments de site d'appel de fonction par rapport aux types de paramètres formels. De plus, cela réduit le besoin d'inférence de type et permet d'économiser du temps de calcul dans l'analyse inter-procédures. En outre, la documentation de code peut être partagée entre les proxys de script et le contexte incorporé.

Lua AiR est un méta-programme de Rascal qui implémente l'analyse comme un pipeline, comme illustré par la figure 2. Rascal génère un IDE Eclipse spécialisé pour l'édition Lua, la mise en évidence et l'analyse statique. L'analyse consiste en les transformations de modèle suivantes. 1) Le script Lua sous analyse est introduit dans l'analyseur généré par Rascal à partir de notre Lua Grammar (130 LOC). Cela produit un arbre d'analyse (a), représenté par un triangle. 2) La fonction implode fait correspondre les nœuds de cet arbre à un type de données algébriques (ADT) qui représente notre arbre de syntaxe abstraite (AST) (b). Cette transformation de modèle repose sur des noms et des types compatibles entre la grammaire Lua et l'ADT. 3) Réduire et étendre réécrire l'AST pour simplifier l'analyse (c). 4) Le vérificateur fournit une vérification de type statique et annote l'AST avec des informations de portée (d). 5) Étant donné cet AST, l'analyseur de flux de contrôle (CF) génère un graphique de flux de contrôle (CFG). 6) L'analyseur Reaching Definitions (RD) utilise le CFG et effectue un calcul à virgule fixe sur les ensembles de génération et d'arrêt pour générer les définitions d'atteinte. Enfin, l'outil affiche un journal et la vue dans l'EDI est mise à jour en annotant l'arbre d'analyse avec les résultats. Le méta-programme comprend actuellement environ 3 KLOC.



3 Discussion et travaux futurs

Cette section discute des problèmes et décrit les opportunités pour les travaux futurs.

Validation empirique. Nous croyons que fournir aux développeurs de meilleurs outils améliorera la qualité du code, mais nous n'avons pas encore de preuve que cette hypothèse est correcte. Notre approche peut être validée en vérifiant si les programmeurs peuvent améliorer la qualité du code en utilisant notre framework.

Précision améliorée. Notre analyse est insensible au contexte vis-à-vis des états de programme individuels et des chemins d'exécution et manque d'inférence de type. Notre analyse peut être améliorée en utilisant des techniques contextuelles basées sur la génération et l'évaluation de contraintes logiques [8,9].

Intégration d'outil Notre cadre ne peut pas encore être utilisé par les outils existants. Nous prévoyons de créer une API de requête pour interagir avec d'autres outils.

DLS. Lua n'a pas la notation spécifique au domaine dont les développeurs de jeux non programmeurs ont besoin pour modéliser des artefacts logiciels. Une séparation des préoccupations, comme le montre la figure 3, est nécessaire pour relever les défis résultant de la complexité accrue du développement des jeux. Les jeux peuvent être modélisés en utilisant des ensembles de langues légères complémentaires, un pour chaque préoccupation, comme démontré par Palmer [11] et préconisé par Furtado [12]. Nous observons que Lua AiR peut être étendu pour prendre en charge les DLS pour les problèmes de jeu de plus haut niveau tels que les événements mondiaux, le comportement des personnages et la conception des missions, en vérifiant si les modèles sont conformes aux interfaces de leurs fondations.

...

Dans cet article, nous avons lié les problèmes de qualité de script de Lua à un manque d'outils qui permettent d'en extraire l'analyse statique. Nous avons évalué les caractéristiques des outils disponibles et proposé une méthode pour compléter les techniques d'analyse de Lua. Nous avons présenté Lua AiR, un cadre pour l'analyse statique du script Lua dans son contexte intégré, en utilisant des modèles IDL et Rascal. Son objectif principal est de fournir l'analyse de script immédiate dont les développeurs ont besoin pour améliorer la qualité du code. Les résultats préliminaires montrent que Lua AiR peut fournir des informations supplémentaires sur les scripts Lua. Dans les futures études de cas, nous prévoyons d'utiliser Lua AiR pour analyser le code de jeu existant à plus grande échelle.



76