Question

J'ai un projet côté serveur c ++ dans lequel je dois intégrer une sorte de script. Il fait partie d'un type de serveur MMO en ligne. J'ai une expérience significative dans l'utilisation de TCL, et cela me semble parfaitement naturel. J'ai fait un minimum de Lua lors de mes journées de développement de jeu et je me demande si cela pourrait être un meilleur langage pour les scripts intégrés. C'est aussi agréable d'apprendre une nouvelle langue. Quelles sont les forces et faiblesses relatives de TCL par rapport à Lua? Merci!

Était-ce utile?

La solution

Honnêtement, ils sont extrêmement bien adaptés à la tâche. Les deux sont faciles à intégrer dans une application et ont une syntaxe assez simple. Je sais pertinemment qu’il est extrêmement simple d’ajouter de nouvelles commandes (pour interagir avec l’application) en Tcl, et on me dit que Lua est très bon dans ce genre de choses aussi.

Ma recommandation serait de jouer avec Lua pendant un moment pour voir comment vous l'aimez (puisque vous connaissez déjà Tcl) ... puis choisissez celui qui vous convient le mieux. Si vous écrivez une grande partie du code, vous finirez par travailler avec beaucoup, de sorte que vous aurez également besoin de quelque chose que vous puissiez utiliser. En fin de compte, les deux choix de langue devraient être assez faciles à écrire pour vos utilisateurs finaux.

Ma préférence personnelle est Tcl, à la fois parce que je n'aime pas Lua (je l'ai programmé pour Warcraft addsons) et parce que j'aime Tcl (j'ai beaucoup programmé pour travail professionnel et privé).

Modifier: ajout de la remarque sur la facilité d'utilisation pour les deux utilisateurs finaux. J'ai obtenu 2 votes et je ne pouvais penser à rien d'autre que cela ne fût-ce que de ne pas clarifier le pourquoi de ma déclaration.

Autres conseils

Je suppose que je suis le contraire de RHSeeger. J'ai utilisé à la fois Lua et TCL intégrés dans des jeux (jeux en ligne, incidemment) et je ne toucherais plus TCL avec un bargepole de 10 'si j'avais le choix. Mon opinion très subjective est que Lua est un langage sain et que TCL ne l’est pas. Par rapport aux autres options pour les langages de script, la syntaxe TCL est très obscure pour la plupart des gens, avec tous les signes set et expr et dollar et beaucoup de crochets, etc. Son seul avantage objectif est sa facilité d'intégration - mais Lua n'est pas en reste. ce département soit.

Si cette interface de script est purement pour vous, vous pouvez également utiliser TCL car Lua ne vous proposera rien de nouveau (à moins que l'orientation des objets ne soit votre choix). Entre les mains d'un utilisateur qualifié, TCL est un outil raisonnable. Si, toutefois, vous vous attendez à ce que des utilisateurs moins expérimentés utilisent le système, optez pour Lua. La syntaxe la plus simple leur apportera beaucoup de productivité.

Je pense que Tcl aura plus de bibliothèques que vous jugerez nécessaires ou pratiques en cours de route.

Comme d'autres l'ont déjà indiqué, les deux langues fonctionneraient très bien. Une troisième option qui fonctionnerait probablement aussi est JavaScript, car il correspond à peu près au même créneau. Au lieu d’essayer de vous attirer l’un ou l’autre (comme j’aime beaucoup les deux langues), je vais essayer de mettre l’accent sur certaines des différences objectives et de souligner les zones où je pense qu’elles sont en avance sur l’autre.

Le problème le plus important sur un serveur de jeu est probablement la performance brute. Les deux langages sont bien développés et bien optimisés, mais ils reconnaissent également que l'optimisation de certains problèmes est optimisée en reportant le code compilé. Les deux langues utilisent essentiellement le même mécanisme pour effectuer cela. Du point de vue des langues elles-mêmes, il semblerait que Lua soit un peu plus rapide. lien

Du point de vue des bibliothèques, qui constitue le prochain grand facteur, aucune des deux langues ne requiert l’utilisation de bibliothèques quelconques pour être utiles; c'est-à-dire que les deux langages sont très compacts, comparés à des langages tels que Java qui nécessitent de grandes bibliothèques d'exécution pour être utiles; Encore une fois, cela est une conséquence de leurs exigences de conception d'origine. Les deux langues proposent de nombreuses bibliothèques supplémentaires, mais j'ai au moins l'impression que TCL a un peu plus de variété dans cette catégorie. tcl :( archive de l'extension Tcl / Référentiel d’extensions Tcl ) lua: ( LuaForge )

Une autre différence est entre les langues de base elles-mêmes. Les deux langues privilégient la simplicité par rapport au style, mais c'est là que se termine la similitude. Lua utilise une syntaxe familière pour la plupart des programmeurs, avec une grammaire sans contexte très simple. La syntaxe TCL est également simple, mais n’a vraiment rien en commun avec les autres langages existants, bien qu’elle ressemble superficiellement à un langage shell unix. Tcl n'est probablement que plus facile pour les non-programmeurs car sa syntaxe de commande orientée ligne est assez claire, mais les programmeurs expérimentés dans d'autres langages s'opposent généralement à sa syntaxe arcane. Aucun des deux ne pardonne terriblement en termes de génération de code, mais les deux disposent de solides outils de métaprogrammation (comparables, mais peut-être pas aussi robustes que les macros CLISP).

L’API Lua C est extrêmement facile à intégrer dans une application. En C, vous avez un accès complet à l'état Lua et à ses types de données natifs. J'ai recommandé d'utiliser Lua uniquement pour obtenir l'implémentation d'une table de hachage, même sans avoir besoin de script, par exemple.

Les fonctions Lua écrites en C peuvent être injectées sous forme de noms globaux, rassemblées dans un tableau, comme la plupart des fonctions de bibliothèque standard, ou implémentées dans des DLL et chargées dynamiquement au moment de l’exécution. Cela permet à l'application de fournir une API stable, ainsi que de prendre en charge les plug-ins écrits en Lua ou en C.

Le langage Lua est étonnamment puissant et prend en charge les styles de programmation fonctionnels et orientés objet. Il est également étonnamment léger: le kit source complet et la documentation complète ne dépassent pas 1 Mo, et l’ensemble des bibliothèques de la machine virtuelle, du compilateur et standard d’une DLL ne représente que 164 Ko sous Windows.

Je n’ai pas sérieusement examiné TCL depuis la version 2 ou plus ... Je ne vais pas essayer de les comparer de manière concrète. Je pense qu’ils ont tous deux été inventés pour s’inscrire dans le même créneau et à peu près au même moment. Ce sont certainement des langues matures et des communautés d’utilisateurs avides.

Lua a LuaJIT , un compilateur JIT qui atteint la vitesse de C sur des boucles serrées et qui est utilisé pour des projets tels que Commutateur Snabb , où les performances sont essentielles (Snabb peut gérer des gigabits par seconde, tous traités par LuaJIT). LuaJIT dispose également d’un FFI facile à utiliser, qui permet d’accéder aux fonctions C sans écrire de code de stub C.

PUC-Lua (l’implémentation standard) prend en charge la récupération après épuisement de la mémoire. Ni LuaJIT ni TCL ne le font.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top