L'ouverture des codes sources et la publication du premier numéro distinct du langage de programmation Luau, qui continue le développement du langage Lua et est compatible avec Lua 5.1, ont été annoncées. Le langage Luau est principalement destiné à l'intégration de gestionnaires de scripts dans des applications et vise à atteindre des performances élevées tout en consommant peu 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 des types et quelques nouvelles constructions syntaxiques, comme les littéraux de chaîne. Le langage est rétrocompatible avec Lua 5.1 et partiellement avec des versions plus récentes. L'API Lua Runtime est prise en charge, ce qui permet d'utiliser Luau avec du code et des liaisons (bindings) existants. Le runtime du langage est basé sur un code Lua runtime 5.1 fortement retravaillé, mais l'interpréteur a été complètement réécrit. De nouvelles techniques d'optimisation ont été mises en œuvre pour obtenir de meilleures performances par rapport à 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 entreprise, y compris l'éditeur Roblox Studio. Au départ, Luau a été développé à huis clos, mais il a finalement été décidé de le rendre un projet ouvert pour un développement collaboratif futur avec la participation de la communauté.
Caractéristiques principales :
- Un système de types progressif (Gradual typing), qui se situe entre la typage dynamique et statique. Luau permet d'utiliser le typage statique si nécessaire, en fournissant des informations de type via des annotations spéciales. Les types intégrés « any », « nil », « boolean », « number », « string » et « thread » sont fournis. La possibilité d'utiliser le typage dynamique sans définir explicitement le type des variables et des fonctions est également maintenue. function foo(x: number, y: string): boolean local k: string = y:rep(x) return k == «a» end
- Support des littéraux de chaîne (comme dans Lua 5.3), tels que «\0x**» (nombre hexadécimal), «\u{**}» (caractère Unicode) et «\z» (fin de ligne), ainsi que la possibilité de formatage numérique clair (il est possible d'écrire 1_000_000 au lieu de 1000000), littéraux pour les nombres hexadécimaux (0x…) et binaires (0b…….).
- Support for the 'continue' expression, complementing the existing 'break' keyword, to jump to a new iteration of the loop.
- Support for compound assignment operators (+=, -=, *=, /=, %=, ^=, ..=).
- Support for using 'if-then-else' conditional blocks in the form of expressions that return a value calculated during the execution of the block. An arbitrary number of 'elseif' expressions can be specified in the block. local maxValue = if a > b then a else b local sign = if x 0 then 1 else 0
- The presence of a sandbox mode that allows running untrusted code. This feature can be used to facilitate the parallel execution of your own code and code written by other developers, such as third-party libraries whose security cannot be guaranteed.
- Limitations on the standard library by removing functions that could potentially create security issues. For example, the standard set excludes libraries like 'io' (file access and process execution), 'package' (file access and module loading), 'os' (removal of file access functions and environment variable changes), 'debug' (unsafe memory operations), 'dofile' and 'loadfile' (file system access).
- Provision of tools for static code analysis, error detection (linter), and type usage validation.
- Custom high-performance parser, bytecode interpreter, and compiler. Luau currently does not support JIT compilation, but it is claimed that the Luau interpreter is comparable in performance to LuaJIT in certain scenarios.
Source : opennet.ru
