È stato annunciato l'apertura dei testi sorgente e la pubblicazione del primo numero 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 e punta a raggiungere alte prestazioni e un basso consumo di risorse. Il codice del progetto è scritto in C++ e rilasciato con licenza MIT.
Luau espande Lua con funzionalità di controllo 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. È supportato l'API Lua Runtime, che consente di utilizzare Luau con codice e binding esistenti. Il runtime del linguaggio si basa su un codice di Lua runtime 5.1 notevolmente rielaborato, ma l'interprete è completamente riscritto. Durante lo sviluppo sono state impiegate 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, dei giochi e delle applicazioni utente di questa azienda, inclusi l'editor Roblox Studio. Inizialmente, Luau è stato sviluppato a porte chiuse, ma alla fine si è deciso di promuoverlo come progetto open source per un ulteriore sviluppo collaborativo con la partecipazione della comunità.
Caratteristiche principali:
- Un sistema di tipi graduale (Gradual typing), che occupa una posizione intermedia tra tipizzazione dinamica e statica. Luau consente di utilizzare la tipizzazione statica secondo necessità, specificando informazioni sui tipi tramite annotazioni speciali. Sono forniti tipi integrati come «any», «nil», «boolean», «number», «string» e «thread». Inoltre, rimane la possibilità di utilizzare la tipizzazione dinamica senza definire 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 i letterali di stringa (come in Lua 5.3), come «\0x**» (numero esadecimale), «\u{**}» (simbolo Unicode) e «\z» (fine della stringa), oltre alla possibilità di formattare visivamente i numeri (è possibile 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 composti (+=, -=, *=, /=, %=, ^=, ..=).
- Supporto per l'uso di blocchi condizionali 'if-then-else' sotto forma di espressioni che restituiscono un valore calcolato durante l'esecuzione del blocco. È consentita la specifica di 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 di eseguire codice non attendibile. Questa funzionalità può essere utilizzata per organizzare l'esecuzione affiancata del proprio codice e di quello scritto da un altro sviluppatore, ad esempio, librerie di terze parti di cui non si può garantire la sicurezza.
- Limitazione della libreria standard da cui sono state rimosse le funzioni che potrebbero potenzialmente creare problemi di sicurezza. Ad esempio, dal set standard sono escluse le librerie 'io' (accesso ai file e esecuzione di processi), 'package' (accesso ai file e caricamento di moduli), 'os' (rimosse le funzioni di accesso ai file e modifiche delle variabili d'ambiente), 'debug' (gestione della memoria non sicura), 'dofile' e 'loadfile' (accesso al FS).
- Fornitura di strumenti per l'analisi statica del codice, rilevamento errori (linter) e verifica della correttezza dell'uso dei tipi.
- Parser, interprete di bytecode e compilatore ad alte prestazioni. Luau non supporta attualmente la compilazione JIT, ma si afferma che l'interprete Luau in alcune situazioni è comparabile in termini di prestazioni a LuaJIT.
Fonte: opennet.ru
