Open source pour Luau, une variante de vérification de type du langage Lua

Annonce de l'open source et de la publication de la première version autonome du langage de programmation Luau, poursuivant le développement du langage Lua et rétrocompatible avec Lua 5.1. Luau est principalement conçu pour intégrer des moteurs de script dans des applications et vise à atteindre des performances élevées et une faible consommation de ressources. Le code du projet est écrit en C++ et est ouvert sous licence MIT.

Luau étend Lua avec des capacités de vérification de type et de nouvelles constructions syntaxiques telles que des chaînes littérales. Le langage est rétrocompatible avec Lua 5.1 et partiellement avec les versions plus récentes. L'API Lua Runtime est prise en charge, vous permettant d'utiliser Luau avec le code et les liaisons existants. Le runtime du langage est basé sur un code du runtime Lua 5.1 fortement retravaillé, mais l'interpréteur est complètement réécrit. Au cours du développement, de nouvelles techniques d'optimisation ont été utilisées pour obtenir des performances supérieures à celles de Lua.

Le projet a été développé par Roblox et est utilisé dans le code de la plateforme de jeu, des jeux et des applications utilisateur de cette société, y compris l'éditeur Roblox Studio. Initialement, Luau a été développé à huis clos, mais il a finalement été décidé de le transférer dans la catégorie des projets ouverts pour un développement conjoint ultérieur avec la participation de la communauté.

Caractéristiques principales:

  • Typage progressif, occupant une position intermédiaire entre le typage dynamique et statique. Luau vous permet d'utiliser le typage statique selon vos besoins en spécifiant les informations de type via des annotations spéciales. Les types intégrés "any", "nil", "boolean", "number", "string" et "thread" sont fournis. Dans le même temps, la possibilité d'utiliser le typage dynamique sans définir explicitement le type de variables et de fonctions est préservée. function foo(x : nombre, y : chaîne) : booléen local k : chaîne = y:rep(x) return k == « a » fin
  • Prise en charge des chaînes littérales (comme dans Lua 5.3) telles que "\0x**" (nombre hexadécimal), "\u{**}" (caractère Unicode) et "\z" (fin de ligne), ainsi que le possibilité de visualiser le formatage des nombres (vous pouvez écrire 1_000_000 au lieu de 1000000), les littéraux pour les nombres hexadécimaux (0x...) et binaires (0b......).
  • Prise en charge de l'expression "continue", complétant le mot-clé "break" existant, pour passer à une nouvelle itération de boucle.
  • Prise en charge des opérateurs d'affectation composés (+=, -=, *=, /=, %=, ^=, ..=).
  • Prise en charge de l'utilisation de blocs conditionnels "if-then-else" sous forme d'expressions qui renvoient la valeur calculée lors de l'exécution du bloc. Vous pouvez spécifier un nombre arbitraire d'expressions elseif dans un bloc. local maxValue = si a > b alors a else b signe local = si x < 0 alors -1 elseif x > 0 alors 1 else 0
  • La présence d'un mode d'isolation (sandbox), qui permet d'exécuter du code non fiable. Cette fonctionnalité peut être utilisée pour organiser le lancement côte à côte de votre propre code et du code écrit par un autre développeur, par exemple des bibliothèques tierces dont la sécurité ne peut être garantie.
  • Une limitation de la bibliothèque standard de laquelle les fonctions susceptibles de créer des problèmes de sécurité ont été supprimées. Par exemple, les bibliothèques « io » (accès aux fichiers et lancement de processus), « package » (accès aux fichiers et chargement de modules), « os » (fonctions d'accès aux fichiers et de modification des variables d'environnement), « debug » (opération dangereuse avec mémoire) , «dofile» et «loadfile» (accès FS).
  • Fournir des outils pour l'analyse statique du code, l'identification des erreurs (linter) et la vérification de la bonne utilisation des types.
  • Propre analyseur, interpréteur de bytecode et compilateur hautes performances. Luau ne prend pas encore en charge la compilation JIT, mais on prétend que l'interpréteur Luau est tout à fait comparable en termes de performances à LuaJIT dans certaines situations.

Source: opennet.ru

Ajouter un commentaire