Lua 5.4

Après deux ans de développement, la nouvelle version du langage de programmation Lua — 5.4 — est sortie silencieusement et discrètement le 29 juin.

Lua est un langage de programmation interprété simple qui s’intègre facilement dans les applications. Grâce à ces qualités, Lua est largement utilisé comme langage d'extension ou pour la description de la configuration des programmes (en particulier des jeux vidéo). Lua est distribué sous la licence MIT.

La version précédente (5.3.5) est sortie le 10 juillet 2018.

Principales modifications dans la nouvelle version

  • un nouveau ramasse-miettes basé sur les générations (generational). Dans la fonction collectgarbage, les paramètres setpause et setstepmul sont déclarés obsolètes, il est conseillé d'utiliser le paramètre incremental à la place ;

  • une nouvelle fonction pour émettre des avertissements warn avec la possibilité de désactiver leur affichage ;

  • la nouvelle implémentation de math.random utilise l'algorithme xoshiro256** au lieu de celui fourni par libc et initialise le générateur avec un nombre aléatoire ;

  • des constantes (constant variables) ;

  • des variables « fermables » (to-be-closed) — des constantes locales pour lesquelles la méthode __close est exécutée à la sortie de la portée ;

  • une nouvelle fonction lua_resetthread — qui nettoie la pile et ferme toutes les variables « fermables » ;

  • une nouvelle fonction coroutine.close — qui ferme la coroutine spécifiée et toutes ses variables « fermables » ;

  • les données utilisateur (userdata) peuvent contenir un ensemble de valeurs accessibles par index. Pour interagir avec elles, de nouvelles fonctions ont été introduites : lua_newuserdatauv, lua_setiuservalue et lua_getiuservalue ;

  • des informations de débogage sur les paramètres et les valeurs de retour des fonctions sont disponibles ;

  • si une boucle for avec un index entier déborde, la boucle se termine ;

  • la fonction string.gmatch a reçu un argument optionnel spécifiant le décalage depuis le début de la chaîne pour la recherche de correspondances ;

  • les fonctions de conversion implicite des chaînes en nombres ont été déplacées dans la bibliothèque de chaînes, et leur comportement a changé. Par exemple, le résultat de l'opération "1" + "2" est maintenant un entier, et non un nombre à virgule flottante ;

  • une erreur peut survenir lors de la réduction d'un bloc de mémoire dans la fonction d'allocation mémoire ;

  • un nouveau symbole de formatage dans la fonction string.format — %p (pour les pointeurs) ;

  • la bibliothèque utf8 accepte des codes de caractères allant jusqu'à 2³¹ (avec un drapeau spécial, sinon seuls les codes jusqu'à 0x10FFFF sont acceptés et les surrogates ne sont pas permis) ;

  • Les constantes entières qui sortent du champ de valeurs sont transformées en nombres à virgule flottante (auparavant, une troncature binaire se produisait);

  • Le métaméthode __lt n'est plus utilisé pour émuler le métaméthode __le, si nécessaire, le métaméthode __le doit être spécifié explicitement;

  • Une étiquette pour l'opérateur goto ne peut pas être créée s'il existe déjà une étiquette avec le même nom dans la portée actuelle (même si elle a été définie dans une portée externe);

  • Le métaméthode __gc peut ne pas être une fonction. Si l'appel de la méthode échoue, un avertissement sera affiché;

  • La fonction print n'appelle pas tostring pour chaque argument, mais utilise ses propres conversions internes;

  • La fonction io.lines retourne un ensemble de quatre valeurs au lieu d'une, pour émuler l'ancien comportement, entourez l'appel de parenthèses si vous le passez comme paramètre lors de l'appel d'une autre fonction.

Source : linux.org.ru

Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS 🔥 Acheter un hébergement fiable pour les sites avec protection DDoS, serveurs VPS VDS | ProHoster