Journal Lua: il est né le divin 5.2 !

Posté par  . Licence CC By‑SA.
Étiquettes :
18
17
déc.
2011

le logo Lua

Lua 5.2: les nouveautés et changements

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.

Je vais résumer ci-après ce qui m'a paru le plus pertinent et/ou important dans les changements.
Vous trouverez l'intégralité des changements (attention, c'est un peu sec) dans le nouveau manuel de référence

changements dans 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 GC n'est plus relancé automatiquement après une collecte, si il était arrêté auparavant.

  • plus de nommage des identifiers (variables, fonctions…) avec des caractères dépendants d'une locale.

changements dans 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.
changements dans 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 post de Roberto Ierusalimschy sur la mailing-liste:

  • Reference manual (imprimée): 4~6 mois
  • Reference manual (en ligne) : déja 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 trainer, et sera peut-être même déja disponible au moment où vous lirez ces lignes.

  • # Plus de nouveautés

    Posté par  . Évalué à 7.

    Si je ne me trompe pas, les changements cités dans le manuel (et que tu résumes) ne sont que ceux générant des incompatibilités.

    Un résumé plus complet et synthétique se trouvait dans le README, qui apparemment n'est plus en ligne. Cette page contient aussi pas mal d'infos (mais concernait une release candidate).

    Par exemple il y a une nouvelle librairie pour les opérations binaires, la gestion des nombres hexadécimaux dans les strings, plusieurs additions du côté du GC (notamment les ephemeron tables) et des coroutines, un nouveau type plus léger de fonctions C, quelques additions dans les méthaméthodes (__len pour les tables, __pairs et __ipairs).

Suivre le flux des commentaires

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