Le langage de programmation Lua 5.5 est disponible

Après cinq ans de développement, la version 5.5 de Lua est disponible. Ce langage de programmation rapide et compact a été largement adopté comme langage embarqué pour la configuration et pour l'écriture d'extensions. Le code de l'interpréteur Lua est écrit en C et est distribué sous la licence MIT.

Lua combine une syntaxe procédurale simple avec des capacités de description de données grâce à l'utilisation de tableaux associatifs et à une sémantique extensible. Lua utilise une typage dynamique et les constructions du langage sont transformées en bytecode, exécuté sur une machine virtuelle à registre avec un ramasse-miettes automatique. L'interpréteur se présente sous la forme d'une bibliothèque intégrable dans des projets en C et C++.

Les principales nouveautés :

  • Pour la plupart des opérations de collecte de déchets, un mode incrémental est utilisé, où le cycle de collecte est divisé en étapes distinctes, alternant avec l'exécution du programme, ce qui permet d'éliminer les longues pauses lors de l'exécution d'applications avec de nombreux objets en mémoire.
  • Une implémentation compacte des tableaux a été proposée, nécessitant 60 % de mémoire en moins pour les tableaux de données homogènes (l'économie est réalisée car les informations sur le type ne sont pas stockées pour chaque élément, mais pour un groupe d'éléments).
  • La possibilité de déclarer explicitement des variables globales dans n'importe quel bloc de code avec le mot-clé « global » a été ajoutée. Lorsqu'une expression avec le mot-clé « global » est indiquée dans un bloc de code, toutes les variables doivent être déclarées explicitement. Si la déclaration « global » est absente, l'expression « global * » est implicitement appliquée, ce qui conserve le comportement ancien et toutes les variables sont considérées comme globales. Une expression « global<const> * » a également été ajoutée, rendant toutes les variables globales non déclarées accessibles en mode lecture seule. X = 1 — Ok, X est une variable globale, ancien comportement par défaut. do global Y — déclaration de la variable Y comme globale, toutes les autres variables dans le bloc doivent être déclarées explicitement Y = 1 — Ok, variable Y précédemment définie X = 1 — Erreur, variable X non définie end X = 2 — Ok, en dehors du bloc global, le comportement ancien s'applique.
  • Les variables de contrôle spécifiées dans les boucles «for» sont désormais en lecture seule et ne peuvent pas être modifiées dans le corps de la boucle. Par exemple, la variable i, déclarée dans la boucle «for i = 1, 5 do», ne peut pas être modifiée dans le corps de la boucle.
  • Lors de l'affichage des nombres à virgule flottante avec la fonction print, un nombre suffisant de chiffres est désormais affiché pour permettre une conversion inversée correcte de la chaîne à sa représentation d'origine.
  • Le nombre maximal de niveaux d'imbrication des constructeurs de tables a été augmenté.
  • Une fonction table.create(nseq, nrec) a été ajoutée pour permettre l'ajout d'une table vide et la préallocation de mémoire pour le nombre d'éléments spécifié.
  • Dans la fonction utf8.offset, il est désormais possible de retourner non seulement le décalage en octets jusqu'au début du caractère, mais aussi la position de la fin du caractère.
  • Ajout de la prise en charge de la création de chaînes externes, placées dans une mémoire non gérée par le ramasse-miettes Lua.
  • Ajout de la fonction luaL_openselectedlibs pour charger une bibliothèque sélectionnée, ainsi que de la fonction luaL_makeseed, qui génère une graine pour la fonction lua_newstate.
  • Dans lua.c, le chargement dynamique de la bibliothèque 'readline' est assuré si elle est disponible (si la bibliothèque est présente dans le système, elle est chargée et les fonctions d'édition de chaînes deviennent disponibles).
  • Une optimisation a été incluse pour économiser de la mémoire lors du chargement de bytecode précompilé — Lua peut désormais réutiliser la mémoire dans certaines structures internes sans créer de doublons lors du chargement de bytecode dupliqué.
  • Assuré la réutilisation de toutes les chaînes lors des opérations «dump» et «undump».
  • Dans les tampons auxiliaires, la réutilisation des tampons est assurée (sans copie dans un nouveau tampon) lors de la création de la chaîne finale.

Source : opennet.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