Lua : il est né le divin 5.2 !

Posté par (page perso) . Édité par NeoX, Bruno Michel et Nÿco. Modéré par Nÿco.
Tags :
18
17
déc.
2011
Technologie

Lua est un langage de script libre (licence MIT), créé en 1993 à l'université Rio de Janeiro, au Brésil. Il est conçu de manière à pouvoir être embarqué au sein d'autres applications afin d'étendre celles-ci et est particulièrement apprécié pour le développement de jeux vidéo.

Nous l'attendions tous depuis fort longtemps, et au terme de longues discussions sur la mailing-liste Lua, voici la version 5.2.

Cette version fait suite à la version 5.1, sortie en 2008. Dit comme cela, cela ne fait pas vraiment version majeure. Et pourtant, les nouveautés sont nombreuses, comme dans tout logiciel qui ne fait pas la course au numéro de version.

Ci-dessous vous trouverez les changements cités dans le nouveau manuel de référence qui générent quelques incompatibilités.

NdM : merci à jseb pour son journal.

Lua 5.2: les nouveautés et changements

Le langage

  • les environnements (les tables qui contiennent les variables globales) ne sont plus disponibles que dans les fonctions Lua. Pour ce qui est de l'accès depuis le C, il semble qu'il faille passer par une closure (à vérifier, je n'ai pas eu le temps d'expérimenter).
  • Le Garbage Collector n'est plus relancé automatiquement après une collecte, s'il était arrêté auparavant.
  • plus de nommage des identifiers (variables, fonctions…) avec des caractères dépendants d'une locale.

La lib standard

  • La fonction module est dépréciée au profit de l'utilisation de require. (dans la ref 5.1, il y avait deux façons de charger un module : require et module. Dans la ref 5.2, module a disparu).
  • Changements de noms de fonctions : math.log10 devient math.log, avec 10 en argument. loadstring est regroupé dans load et disparait
  • Quelques disparitions : setfenv et getfenv disparaissent, victimes collatérales des changements sur les environnements.
  • Et quelques déménagements : unpack plie les gaules et part s'installer dans le module table (il faudra donc l'appeler avec table.unpack).
  • Un peu de logique : package.loaders devient le plus parlant package.searchers.
  • Plus de vérification du bytecode avec load et loadfile. Cela peut être dangereux : ne chargez pas n'importe quoi, et en cas de doute, chargez le comme un bloc de texte (ce que Lua désigne comme un text chunk.

L'API

  • Terminé LUA_GLOBALSINDEX (table d'indices pour récupérer des éléments sans passer par la pile Lua). À la place, il faut utiliser la registry.
  • Comme suite logique de la disparition des environnements, lua_getfenv et lua_setfenv font leurs bagages et disparaissent.
  • Les modules ne sont plus censés modifier des variables globales. luaL_register est déprécié au profit de luaL_setfuncs, qui est une nouveauté de la 5.2.
  • Également quelques renommages et disparitions de fonctions plus mineures, que vous découvrirez avec intérêt au fur et à mesure de vos erreurs de compilation (ou en suivant le lien donné plus avant).

La documentation

Voici les prévisions pour la sortie des mises à jour des principaux ouvrages, d'après un message de Roberto Ierusalimschy sur la mailing-list :

  • Reference manual (imprimée) : 4~6 mois
  • Reference manual (en ligne) : déjà disponible ici
  • Programming in Lua: 8~10 mois.
  • Lua Gems : jamais (la structure du livre avec chaque chapitre provenant d'un auteur différent ne se prête pas à une mise à jour).

Disponibilité dans les distributions

  • Paquets pour RedHat, Fedora, Ubuntu
  • Pour l'instant, rien pour Arch. La version 5.2rc7 est disponible dans AUR, mais correspond à une version de développement plus ancienne. Le paquet « officiel » ne va de toutes façons pas traîner, et sera peut-être même déjà disponible au moment où vous lirez ces lignes.
  • # Nouveautés

    Posté par . Évalué à 3.

    Pour une liste des nouveautés (la dépêche ne listant que les incompatibilités avec la version précédente):

    http://lua-users.org/wiki/LuaFiveTwo

    Ou bien une version annotée du manuel:

    http://www.corsix.org/lua/5.2-beta-annotated/manual.html

    • [^] # Re: Nouveautés

      Posté par (page perso) . Évalué à 2. Dernière modification le 17/12/11 à 23:45.

      Attention à la version annotée du manuel.
      Elle est intéressante pour comparer les changements, mais elle n'a pas l'air à jour.

      Par exemple, elle ne contient pas les nouveautés lua_rawgetp / lua_rawsetp (manipulations d'un «light userdata» référencé par un pointeur).

      La référence complète est ici:
      http://www.lua.org/manual/5.2/manual.html

  • # Vérificateur de bytecode - suppression prévisible

    Posté par . Évalué à 2.

    Plus de vérification du bytecode avec load et loadfile. Cela peut être dangereux : ne chargez pas n'importe quoi, et en cas de doute, chargez le comme un bloc de texte (ce que Lua désigne comme un text chunk.

    Le vérificateur de bytecode de la version 5.1 était anecdotique et facilement contournable for fun and profits. Il a donc été complètement retiré pour ne pas induire en erreur le développeur qui pouvait penser qu'il était équivalent à celui de p.ex. Java.

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.