Lua est un langage de script, réflexif et impératif. Créé en 1993, il est conçu de façon à pouvoir être embarqué au sein d'autres applications dans le but d'étendre celles-ci. Il a été conçu par Luiz Henrique de Figueiredo, Roberto Ierusalimschy et Waldemar Celes, tous membres du groupe de recherche TeCGraf, de l'université pontificale catholique de Rio de Janeiro au Brésil. Lua est un logiciel libre distribué selon les termes de la licence du MIT. L'interpréteur Lua est écrit en langage C ANSI strict, ce qui rend le langage compilable avec une grande variété de systèmes.
Lua a notamment été utilisé comme langage de script pour plusieurs jeux informatiques, dont de grands noms tels que World of Warcraft et Angry Birds. Il a été le langage de script le plus utilisé dans une enquête de 2009 sur l'industrie du jeu. L'intégration de Lua s'explique en partie par sa petite taille. Selon l’équipe du langage, à l'heure où les téléchargements de plusieurs mégaoctets sont nombreux, même pour les applications les plus simples, la distribution complète de Lua 5.4 (source plus documents) est une archive ayant une taille de 349 Ko.
La version 5.4 de Lua est sortie fin juin. Lua prend désormais en charge les “attributs” des variables locales, ce qui permet aux développeurs de marquer les variables comme constantes (const) ou les ressources comme fermables (close). De même, il y a aussi une amélioration significative des performances par rapport à la version 5.3, avec une série de changements mineurs.
Prise en charge des attributs des variables locales
Lorsqu'un développeur déclare une variable locale (en bloc), il peut ajouter <const> ou <close> après le nom de la variable pour lui donner cet attribut. Il est aussi simple comme c’est le cas en C. Il signifie que la variable spécifiée ne peut pas être réaffectée après l'initialisation dans sa déclaration. En outre, il ne rend pas une structure de données immuable : rien n’empêche le développeur de modifier les entrées d'une table stockée dans une variable const. Par contre, le nom de la variable ne peut pas être réassigné. Il offre une petite sécurité au moment de la compilation.
GC générationnel
La version 5.4 introduit un nouveau mode de ramasse-miettes. Il fonctionne mieux pour certains types de programmes pour lesquels les objets ont en général une courte durée de vie. Un GC générationnel, basé sur le fait que la plupart des objets meurent jeunes, scanne fréquemment les objets “jeunes” et les libère s'ils ne sont pas référencés. Par contre, il scanne moins fréquemment les objets plus anciens (ceux qui sont encore référencés après un ou plusieurs passages de GC). En effet, Lua disposait déjà d’un ramasse-miettes supplémentaire depuis le 5.1. Selon l’équipe, c'est ce collecteur générationnel qui a été introduit en 5.2 à titre expérimental, puis retiré en 5.3. Il est de nouveau de retour avec Lua v5.4, cette fois probablement pour rester.
Amélioration des performances : Lua est désormais plus rapide
À partir de la version 5.4, Lua introduit un interpréteur beaucoup plus rapide. Des tests réalisés par des développeurs de la communauté du langage ont révélé que la Lua 5.4 était en moyenne 40 % plus rapide que la version 5.3. Cela dit, ceux qui ont besoin de performances beaucoup plus élevées peuvent utiliser LuaJIT, un compilateur just-in-time pour Lua 5.1 qui est beaucoup plus rapide que l'interpréteur Lua. Cependant, LuaJIT n'a ajouté aucune des nouvelles fonctionnalités de Lua depuis la version 5.1 du lange qui a été publiée en 2006. Selon l’équipe, utiliser LuaJIT serait toute une entreprise en raison de nombreux changements de rupture, y compris les nouvelles règles de portée dans Lua 5.2 et le nouveau type d'entier dans Lua 5.3.
Des changements moins importants
En plus des changements majeurs, Lua 5.4 apporte de nombreuses petites fonctionnalités, notamment :
- les variables à fermer ;
- ajout d’une nouvelle implémentation pour math.random ;
- ajout d’un nouveau système d'alerte ;
- informations de débogage sur les arguments et les retours de fonction ;
- ajout d’une nouvelle sémantique pour la boucle "for" des nombres entiers ;
- ajout de l’argument facultatif “init” à “string.gmatch” ;
- ajout de nouvelles fonctions : “lua_resetthread” et “coroutine.close” ;
- les contraintes de chaîne de caractères ont été déplacées vers la bibliothèque de chaînes de caractères ;
- la fonction d'allocation autorisée a échoué lors de la réduction d'un bloc de mémoire ;
- ajout d’un nouveau format “%p” dans “string.format” ;
- la bibliothèque utf8 accepte les points de code jusqu'à 2^31.
Source : LWN.net
Et vous ?
Qu'en pensez-vous ?
Voir aussi
Un employé de Roblox, qui permet de programmer des jeux en Lua, a été soudoyé par un hacker qui a eu accès à des millions de données d'utilisateurs mineurs
Gideros, le moteur de jeux Lua est abandonné, son code passe open source sous licence MIT
Terra : le nouveau langage de programmation bas niveau sort utilisé avec Lua, il permet de générer du code de calcul haute performance
Le langage fonctionnel et impératif Janet, qui reprend des fonctionnalités de Lua et Clojure, s'apparente à une version légère de Lisp implémentée en C