pourquoi le lua est aussi peu representé

Le problème exposé dans ce sujet a été résolu.

Salut à tous, je développe depuis plusieurs mois déjà en lua et en love2D et je me posais une question: pourquoi ce langage de scripting est aussi peu représenté ? pourtant il est pas mal utilisé en jeu vidéo pour faire du modding ou des HUD ( par exemple les addons wow ou les mods Garry's mod). Côté perf, le lua est un des langage de script le plus puissant notamment avec le luaJit:

le luaJit  est bien plus puissant que le PHP ou le ruby par exemple

Pourquoi l'ecosysteme de lua est aussi peu developpé alors que pourtant c'est un langage assez intéressant sur de nombreux aspects?

Pourquoi l'ecosysteme de lua est aussi peu developpé alors que pourtant c'est un langage assez intéressant sur de nombreux aspects?

Même si je n'utilise pas Lua, j'ai quand même trouvé qu'il y a un noyau dur assez important qui fait vivre l'écosystème. D'ailleurs, en faisant un tour rapide sur LuaRocks, il semble qu'il y ait également un nombre relativement important de modules (1 407). Certes, si on compare avec les autres principaux langages de script, ce n'est pas autant que Python (plus de 80 000) ou Ruby (plus de 120 000). Pourtant, je suis certain que la grande partie des besoins sont actuellement couverts par les modules existants. Au niveau de la documentation, même remarque, on semble trouver tout ce qui est nécessaire.
En gros, inutile d'avoir un écosystème géant, autant avoir un petit écosystème bien maintenu et tu trouveras tout ce dont tu as besoin.

pourquoi ce langage de scripting est aussi peu représenté ?

Encore une fois, si l'on compare à Ruby, Perl ou Python, Lua est en effet peu représenté. Tout de fois j'ai l'impression que la situation évolue dans le bon sens ces dernières années. On va même bientôt avoir un tutoriel traitant de Lua sur Zeste de Savoir ! :)

Oui j'utilise ces outils enfait mais il me semble tout de même que ça manque d'outils et librairies et je le déplore un peu :/ .Mais en effet ça s'ameliore et je même offrir des articles et des tuto sur le Lua à zestes de savoirs, je suis en train de les écrire ^^

Tous les langages de scripts ont généralement et longtemps des domaines de spécificités. Il est difficile d'en sortir et la popularité du langage est porté par ces caractéristiques.

Je ne connais pas bien lua donc je ne pourrai pas juger sur ces valeurs intraseque mais il a longtemps eu l'étiquette "langage de script pour jeu". Tout comme longtemps ruby à été cantonné au web (porté par rail), perl au traitement de chaine de caractères, etc.

Pour émerger il faut un écosystème qui peut te convaincre de switcher. Ruby as rails qui a attiré beaucoup de monde, js à node.js par ex, Python à Django pour le web et NumPy&co pour le calcul scientifique. Tout cela tracte le langage.

Aujourd'hui probablement que lua à de bonnes qualités mais il est difficile d'émerger face aux "connus", malgré toute ces qualités. Il ne faut pas négliger l'inertie. Pourquoi je ferai du lua alors que Python répond déjà à tous mes besoins ? De plus, un langage plus vieux et bien établi se retrouve avec plus d'evangelistes pour en faire la promotion.

Donc je pense que lua est encore jeune dans un contexte très concurrentiel et que sa niche (dev jeu) ne lui a pas (encore) permit de tracter beaucoup de monde : c'est relativement récent cette généralisation du modding, du moins sous la forme actuel ou les dev du jeu poussent à ça.

Par exemple il existe très peu de librairies web avec lua (2 vraiment aboutis a ma connaissances) mais cela est vrai que d'avec les éléments fournis par @Kje, je n'avais pas pensé à ça et cela semble logique. Je compte personnellement apporter des outils à la communauté de lua. ^^

Si je veux faire un truc avec un langage de script, j'ai besoin des bonnes bibliothèques, de pouvoir coder rapidement, quitte à ce que l'efficacité ne soit pas au rendez-vous (je ne ferai pas un script sinon). Lua offre moins de bibliothèque que les autres, donc lors de l'apprentissage d'un langage, je choisis plutôt python ou ruby.

De plus, le seul point singulier de lua que tu cites, c'est ses performances. Mais si je veux des performances, je fais du C++ ou du fortran. Ou bien du Cython ou du crystal…

Bref, pas de truc vraiment attirant, et prime au premier ayant percé (car cela implique plus de bibliothèque, donc plus de gens qui viennent donc plus de bibliothèque… L'œuf et la poule).

Après, comme le dis Emeric, s'il a une communauté ça peut-être suffisant. Un langage de niche (ici, le script de jeux-vidéos) a toute sa place. Fortran n'est utilisé qu'en sciences, Cobol qu'en finance, Ada domine dans l'aéronautique, Ocaml est actif malgré une petite communauté, Pascal ou D de même. Bref, il y a énormément de langage, logique que seuls une poignée perce.

+0 -0

Oui il est important de noter que même si il est moins connu que les gros comme Python ou ruby, il fait tout de même parti des rares langages connus et utilisé dans des vrais produits. 99% des langages ont beaucoup moins d'utilisateurs que lua.

C'est probablement parce qu'il est trop simple qu'il n'a pas pris beaucoup en-dehors du moding de jeu, à mon avis. Pour faire du web on pourrait notamment lui reprocher :

  • Pas de gestion triviale de l'Unicode, de l'UTF-8; à mon avis indispensable sur le web quand on manipule énormément de chaînes
  • Un moteur de regexp trop simpliste dans certains cas
  • Pas de multithread (mais en même temps Node.js n'en a pas non plus).

Je l'ai moi-même un peu abandonné au profit du python dans un de mes logiciels en C++, i.e. j'embarque python à la place de lua maintenant.

A noter que luajit commence à être un peu à la traîne il me semble. IL n'implémente toujours pas lua 5.3, et la dernière version stable date de 2015. Pourtant lua 5.3 vient notamment avec les opérateurs binaires/bit-à-bit et quelques petites bricoles pour l'UTF-8. En plus je n'ai pas franchement trouvé quelles étaient les nouveautés de la 2.1 en bêta.

Il n'empêche que j'aime beaucoup lua pour sa puissante simplicité: de la POO orientée prototype avec des métatables redoutables (qu'il serait vachement cool d'avoir en JS), luajit qui cartonne effectivement niveau performances, et sa philosophie du « je n'inclus que le minimum dont j'ai besoin ». D'ailleurs à une période j'étais à fond dans lua, tellement que j'avais écrit un lua2exe. JE m'y repencherai peut-être un de ces quatre.

Ah tiens, je viens de trouver luvit ça utilise la même bibliothèque que Node.js, libuv. Donc il y a de quoi faire du web avec lua. Mais de nouveau, ils sont arrivés après la bataille et il y a peu de chance que ça prenne autant que Node.js.

+0 -0

Vous comparez pas mal JS et Lua, mais les performances de LuaJIT restent quand même suffisamment loin des perfs des moteurs JS modernes. C'est pas étonnant quand on compare les enjeux et quand on voit les montagnes de frics lancées dans SpiderMonkey/Chakra/V8 etc. Mais ça fait une grosse différence au final.

+0 -0

Vous comparez pas mal JS et Lua, mais les performances de LuaJIT restent quand même suffisamment loin des perfs des moteurs JS modernes. C'est pas étonnant quand on compare les enjeux et quand on voit les montagnes de frics lancées dans SpiderMonkey/Chakra/V8 etc. Mais ça fait une grosse différence au final.

C'est vrai que le benchmark sur luajit.org ne compare que luajit vs l'interpréteur officiel lua.org, et que le reste n'est qu'affirmé sur la page d'accueil sans montrer de quelconque autre comparaisons/chiffres/données.

Je me demande s'il existe des tests qui font des comparaisons de VM inter-langages. Par exemple lua vs python vs ruby vs SpeederMonkey vs Chakra vs V8 en tant qu'interpréteurs officiels, ou bien luajit vs pypy vs crystal vs V8 pour les versions JIT (tiens d'ailleurs, j'ai un doute à savoir si V8 fait du JIT ou pas). On peut aussi se demander si on est vraiment en mesure de comparer objectivement, vu que chaque langage a ses caractéristiques distinctives propres; peut-être que ce n'est pas vraiment comparable et pertinent.

+0 -0

On peut aussi se demander si on est vraiment en mesure de comparer objectivement, vu que chaque langage a ses caractéristiques distinctives propres; peut-être que ce n'est pas vraiment comparable et pertinent.

Je pense que le problème est la.

On en a déjà parlé sur un autre sujet ou quelqu'un faisait pointer un benchmark comparant plusieurs langages dans des benchmark. Le problème est que sous couvert "d'égalité" ils comparaient les langages sur les mêmes algos sans tenir compte de l'écosystème. Par exemple bon nombre de ces benchmark vont faire intervenir du calcul numérique. Python se retrouve à la ramasse si tu le fait à la C (avec des boucles). Par contre en faisant ce que tout dev Python ferait, vectoriser en utilisant NumPy, les perds s'inversent totalement et Python peut battre beaucoup de langages, mêmes compilés.

Tout ça pour dire que c'est souvent dur voir impossible de benchmarker comme ça des languages.

(tiens d'ailleurs, j'ai un doute à savoir si V8 fait du JIT ou pas)

QuentinC

V8 a deux JIT, un pour le full compiler et un juste pour le hot code (optimizing compiler nommé crankshaft, bientôt remplacé par turbofan).

+0 -0

Tu l'as dit toi même: avant il n'était vraiment généraliste. mais ça veut dire que maintenant oui donc on peut comparer.

Le fait qu'il soit utiliser pour le web est très exactement ce que je disais plus haut : c'est sa niche de départ tout comme le jeu l'est pour lua. Comme lua il en est sorti.

Le lua est certes peu représenté, mais reste très utilisé : par exemple, l'interface de World of Warcraft est écrite en Lua (pas la partie 3D). L'avantage, c'est que le langage est assez minimaliste et très complet, tout en disposant d'une implémentation de référence très courte. Ce qui lui donne la possibilité d'être embarqué dans beaucoup de programmes/systèmes sans impacter les performances.

Un autre programme, plus récent, est Minetest, qui offre une API en Lua pour écrire ses mods.

Perso je ne me suis servit de Lua (LuaJIT pour être plus précis) qu'une seule fois, pour essayer d'ajouter une sorte de système de modding à un programme. Mais je n'ai pas poussé l'expérience très loin. Et essayer d'intégrer python, ça m'a l'air un peu overkill (après, je n'ai jamais essayé d'intégrer pythonà un soft, donc …).

Il "suffirait" donc que des outils très utiles voir "indispensable" pour que le lua sorte de l'ombre

Sans doute. Lua n'a pas connu de killer tool/feature jusqu'ici. Pas vraiment de trucs pour lequel il peut se targuer d'être le premier à l'avoir fait.

Par exemple ce qui a fait la popularité de ruby, c'est clairement rails; et s'il n'y avait pas eu rails, ruby serait aussi marginal que lua. Ce qui est plus étonnant et inexpliquable/fabuleux, c'est la popularité de python, qui a su très tôt être bon dans plusieurs domaines: prog système, puis sciences / calcul numérique, et plus récemment le web.

Même dans l'embarqué, où le principal atout de lua, sa petite taille, peut avoir un bon coup à jouer, il est arrivé après la bataille.

Après il y a peut-être aussi un petit effet régional à prendre en compte. Par exemple j'ai déjà lu quelque part que ruby était apparament largement plus populaire au Japon que dans le reste du monde, parce que son inventeur est japonais et parce que du coup pas mal de doc a d'abord été écrite dans cette langue, la traduction/adaptation en anglais n'étant arrivée que quelques années plus tard. Ca serait intéressant de savoir si lua serait de même particlulièrement plus utilisé au Brésil qu'ailleurs.

Et essayer d'intégrer python, ça m'a l'air un peu overkill (après, je n'ai jamais essayé d'intégrer pythonà un soft, donc …).

Je confirme, c'est vachement plus compliqué d'intégrer python que lua. En vrai dans mon programme en C++ j'aurais bien voulu intégrer JavaScript (soit SpeederMonkey soit V8) plutôt que python, mais ça avait l'air d'être encore nettement plus compliqué. Effectivement c'est un peu de l'overkill, et je me suis déjà dit que j'aurais peut-être effectivement dû faire la totalité de mon logiciel en python plutôt que de passer par un cœur en C++ qui ne se justifie pas tant que ça. Mais je n'ai pas voulu le faire en python dès le départ parce que je ne connais pas assez bien ce langage.

Si j'ai laissé tomber pour embarquer V8, c'est notamment parce qu'il fallait compiler le machin soi-même et ça avait l'air casse burnes et totalement hors de ma portée (il faut un truc à la con en python 2 qui ne marche pas avec python 3, puis forcément MSVC sous Windows et je ne l'utilise pas, puis il faut compiler OpenSSL soi-même aussi, et plein d'autres dépendances…). Pour python je n'ai eu qu'à prendre python34.dll et python34.lib, lire la doc, et c'est parti.

+0 -0

Perso je vois Lua comme un langage minimaliste et facile à embarquer, et pour moi c'est justement pour ça qu'il est aussi utilisé.

Sa spécificité, c'est qu'il est ultra-léger. En faire un langage de script generaliste serait prendre l'approche inverse et léser 99 % de ses utilisateurs. Ça impliquerait de rajouter tout un tas de builtins et donc d'alourdir son coeur. Ce qui m'attire dans Lua et me permet d'envisager l'utiliser dans des projets malgré le fait que je connaisse déjà très bien Python, c'est justement cette spécificité, contrairement à Ruby ou Perl que je ne considère même pas.

Du coup, stratégiquement parlant, je ne pense pas que ce soit une bonne idée de le rendre généraliste. Quand on voit l'adoption massive de Python comme langage de script principal, il me semble plus pertinent que Lua continue à faire ce qu'il fait déjà parfaitement bien depuis le départ en se posant comme une surcouche de script intégrable en quelques minutes et à moindre frais dans un projet, de manière à rester bien au chaud et viable dans sa niche, plutôt que d'entrer en concurrence avec des mastodontes qui vont le bouffer en quelques années.

D'ailleurs le fait que Lua soit minimaliste est ce qui me plait le plus, intellectuellement parlant, dans le langage : c'est pas pratique quand on a un vrai soft à développer, mais c'est vachement amusant à manipuler de temps en temps, juste pour le fun.

Bref, pour moi Lua doit rester une scie circulaire ou une perceuse à tampon, c'est à dire l'outil specialisé qu'on apprécie avoir dans son garage quand on en a besoin (même si c'est pas souvent), plutôt que de chercher à prendre la place d'une boîte à outils complète qu'il serait trop difficile de remplacer.

PS : ah, et le fait qu'il ne gère pas l'unicode, c'est précisément ce qui en fait un langage complètement inexploitable en standalone à notre époque. Exactement comme Perl 5 qui le gère mais le gère hyper mal.

+0 -0

Pour moi, minimaliste et généraliste ne sont pas forcément incompatibles.

Ce qui change c'est que quand on télécharge python, on a déjà une bonne partie des modules les plus courants qui sont livrés avec; quand on télécharge lua on n'a rien et c'est à nous d'aller chercher ce dont on a besoin. Mais ça ne veut pas dire que lua n'est pas un langage généraliste: on peut faire du web avec le luvit que j'ai cité dans mon message précédent; on peut faire de la programmation système avec 2 ou 3 modules complémentaires; il existe des portages de QT & Co pour faire des GUI; on doit aussi pouvoir faire du calcul scientifique si on veut (j'ai pas cherché mais ça existe sûrement) ; etc.

C'est simplement que la philosophie est différente. Avec python on te donne d'office le beurre, l'argent du beurre, la crémière et la crèmerie, voire même carrément les clés de l'usine qui fabrique les machines qui produisent le beurre. Par contre, pour avoir intégré python dans un programme en C++, je confirme que 95% de toute la bibliothèque standard n'est pas strictement indispensable au bon fonctionnement du runtime. Si on veut on peut faire du python minimaliste (pas aussi minimaliste que lua, il faut quand même 4 ou 5 Mo pour que les éléments vitaux fonctionnent) Simplement, on te les donne par commodité, parce qu'on estime que de toute façon c'est à peu près sûr que tu vas en avoir besoin.

Ce qui manque peut-être, c'est un truc comme pip ou npm, d'autant plus important que la bibliothèque standard de lua est ultra-minimaliste. J'ai l'impression à priori que luarock en est à des années lumières.

Un langage que je classerais clairement comme pas généraliste, c'est PHP; parce qu'il n'est fait que pour faire du web (à part quelques allumés qui l'ont utilisé pour faire de la GUI, mais ça reste très bizarre)

+1 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte