Luau – un langage de script basé sur Lua, rapide, léger, sûr et doté d’un typage progressif
(luau.org)- Luau est un langage de script embarqué dérivé de Lua 5.1, rapide, sûr et prenant en charge le typage progressif
- Il a évolué en renforçant les performances, les outils du langage et le système de types afin de prendre en charge des jeux complexes et de grandes bases de code sur la plateforme Roblox
- Contrairement à Lua standard, il intègre des fonctions de sandboxing afin de permettre l’exécution côte à côte de codes ayant des niveaux de privilèges différents
- La syntaxe est compatible avec Lua 5.1, mais il fournit aussi des extensions syntaxiques supplémentaires et des outils d’analyse (
linter, vérificateur de types) pour améliorer la qualité du code - Grâce à l’optimisation des performances, à un bytecode personnalisé et à la prise en charge du JIT, il vise des vitesses d’exécution au niveau de LuaJIT et présente un fort potentiel d’utilisation au-delà de Roblox, dans divers environnements embarqués
Motivation
- Vers 2006, Roblox a adopté Lua 5.1 comme langage de script pour les jeux
- Avec le temps, à mesure que le niveau des jeux sur la plateforme Roblox augmentait et que la taille des équipes grandissait, le langage et son implémentation ont été fortement améliorés pour dépasser les limites de Lua existant
- Avec la croissance de la plateforme, d’importants investissements ont été réalisés dans l’optimisation des performances, la facilité d’utilisation et le développement d’outils liés au langage
- En particulier, avec la gestion de grandes bases de code dépassant le million de lignes en 2020, il est devenu évident qu’un système de typage progressif était indispensable
- Sur cette base, Roblox a développé Luau, un langage dérivé de Lua, offrant un ensemble de fonctionnalités à la fois rapide, léger, sûr et permettant d’appliquer progressivement les types
- Des explications plus détaillées sont disponibles dans le document Why Luau
Présentation de Luau
- Luau est un langage de script embarqué basé sur Lua 5.1
- Il fournit un runtime rapide et léger
- Il prend en charge un système de typage progressif permettant de combiner analyse dynamique et statique
- Il est intégré à Roblox Studio, et le mode strict peut être activé avec le flag
--!strict - Les développeurs peuvent consulter la documentation liée à Roblox dans Luau Creator Docs
Sandboxing
- Luau limite la bibliothèque standard exposée et fournit des mécanismes de sandboxing supplémentaires
- Cela permet d’exécuter en parallèle, de manière sûre, du code non privilégié écrit par des développeurs ordinaires et du code privilégié interne à la plateforme
- Cela lui donne un environnement d’exécution différent de Lua standard
- Les détails sont disponibles dans la documentation Sandbox
Compatibility
- Il conserve autant que possible une compatibilité descendante avec Lua 5.1, tout en intégrant partiellement certaines fonctionnalités de versions ultérieures
- Cependant, Luau n’adopte pas toutes les décisions de conception de Lua et reflète les cas d’usage et contraintes propres à Roblox
- L’état de prise en charge des fonctionnalités postérieures à Lua 5.1 est présenté dans la documentation Compatibility
Syntax
- Il est entièrement compatible avec la syntaxe de Lua 5.1
- Il fournit en plus des extensions syntaxiques modernes et familières pour améliorer le confort de développement
- La syntaxe complète est disponible dans la documentation Syntax
Analysis
-
Il fournit des outils d’analyse de scripts pour aider à écrire du code correct
-
Composants :
- Linter : détection des erreurs courantes
- Type Checker : validation des types
-
Ils peuvent être exécutés via l’outil CLI
luau-analyze -
Pour les règles de lint, voir la documentation Lint, et pour le typage, le guide Typecheck
Performance
- Il fournit un frontend personnalisé incluant parseur, linter et vérificateur de types, ainsi qu’un bytecode optimisé, un interpréteur et un compilateur
- Dans certains cas, les performances peuvent rivaliser avec celles de l’interpréteur LuaJIT
- Un compilateur JIT manuel est pris en charge sur les plateformes x64 et ARM64, ce qui peut fortement améliorer les performances de certains programmes
- Le runtime continue d’être optimisé et partiellement réécrit pour améliorer son efficacité
- Les caractéristiques détaillées en matière de performances sont fournies dans la documentation Performance
Libraries
- Le langage lui-même est un sur-ensemble complet de Lua 5.1
- Dans la bibliothèque standard, certaines fonctions ont été retirées et d’autres ajoutées
- Lorsqu’il est embarqué dans une application, il peut aussi accéder à des bibliothèques d’extension spécifiques à l’application
- La documentation complète des bibliothèques est disponible dans la documentation Library
1 commentaires
Commentaires sur Hacker News
--!strict, le code s’exécutait quand même sans aucune erreur ni avertissement malgré une violation de type évidente, ce qui ne correspondait pas à ses attentesluau, le contrôle de types ne s’applique pas. En revanche, dans un environnement embarqué qui forcerait la vérification de types de tout le code avant compilation, on obtiendrait bien l’expérience attendue avec détection des erreurs de type. Ce choix de conception était inévitable étant donné que des millions de lignes de Lua 5.1 ont dû être migrées vers Luau d’un seul tenant