È stata anunciata l'apertura del codice sorgente e la pubblicazione del primo rilascio separato del linguaggio di programmazione Luau, che continua lo sviluppo del linguaggio Lua ed è retrocompatibile con Lua 5.1. Il linguaggio Luau è principalmente destinato all'integrazione di gestori di script nelle applicazioni ed è progettato per raggiungere elevate prestazioni e un basso consumo di risorse. Il codice del progetto è scritto in C++ ed è open source con licenza MIT.
Luau estende Lua con funzionalità di verifica dei tipi e alcune nuove costruzioni sintattiche, come i letterali di stringa. Il linguaggio è retrocompatibile con Lua 5.1 e parzialmente con versioni più recenti. Supporta l'API Lua Runtime, consentendo di utilizzare Luau con codice e binding esistenti. Il runtime del linguaggio si basa su un codice fortemente revisionato di Lua runtime 5.1, ma l'interprete è stato completamente riscritto. Durante lo sviluppo sono state adottate alcune nuove tecniche di ottimizzazione, che hanno permesso di ottenere prestazioni superiori rispetto a Lua.
Il progetto è stato sviluppato da Roblox e viene utilizzato nel codice della piattaforma di gioco, nei giochi e nelle applicazioni utente dell'azienda, inclusa l'editor Roblox Studio. Inizialmente, Luau è stato sviluppato a porte chiuse, ma alla fine si è deciso di renderlo open source per un ulteriore sviluppo collaborativo con il coinvolgimento della comunità.
Caratteristiche principali:
- Un sistema di tipi graduale (Gradual typing) che si colloca tra la tipizzazione dinamica e quella statica. Luau consente di utilizzare la tipizzazione statica all'occorrenza, specificando informazioni sui tipi tramite annotazioni speciali. Sono forniti tipi integrati 'any', 'nil', 'boolean', 'number', 'string' e 'thread'. Rimane la possibilità di utilizzare la tipizzazione dinamica senza specificare esplicitamente il tipo di variabili e funzioni. function foo(x: number, y: string): boolean local k: string = y:rep(x) return k == "a" end
- Supporto per letterali di stringa (come in Lua 5.3), come "\0x**" (numero esadecimale), "\u{**}" (carattere Unicode) e "\z" (fine della stringa), oltre alla possibilità di formattare i numeri in modo esplicito (si possono scrivere 1_000_000 invece di 1000000), letterali per numeri esadecimali (0x…) e binari (0b…….).
- Supporto per l'espressione 'continue', che integra la parola chiave esistente 'break', per passare a una nuova iterazione del ciclo.
- Supporto per operatori di assegnazione compositi (+=, -=, *=, /=, %=, ^=, ..=).
- Supporto per blocchi condizionali 'if-then-else' sotto forma di espressioni che restituiscono un valore calcolato durante l'esecuzione del blocco. È possibile specificare un numero arbitrario di espressioni elseif nel blocco. local maxValue = if a > b then a else b local sign = if x 0 then 1 else 0
- Presenza di una modalità di isolamento (sandbox) che consente l'esecuzione di codice non affidabile. Questa funzionalità può essere utilizzata per organizzare l'esecuzione affiancata di codice proprio e di codice scritto da altri sviluppatori, ad esempio, librerie di terze parti la cui sicurezza non può essere garantita.
- Limitazione della libreria standard da cui sono state rimosse le funzioni potenzialmente problematiche per la sicurezza. Ad esempio, dal set standard sono escluse le librerie 'io' (accesso ai file e avvio di processi), 'package' (accesso ai file e caricamento di moduli), 'os' (rimosse le funzioni di accesso ai file e di modifica delle variabili d'ambiente), 'debug' (manipolazione non sicura della memoria), 'dofile' e 'loadfile' (accesso al FS).
- Fornitura di strumenti per l'analisi statica del codice, rilevamento errori (linter) e verifica della corretta utilizzazione dei tipi.
- Parser, interprete di bytecode e compilatore ad alte prestazioni. Luau attualmente non supporta la compilazione JIT, ma si sostiene che l'interprete Luau in alcune situazioni sia comparabile in termini di prestazioni a LuaJIT.
Fonte: opennet.ru
