Open source per Luau, una variante di controllo del tipo del linguaggio Lua

Annunciata l'open source e la pubblicazione della prima versione standalone del linguaggio di programmazione Luau, continuando lo sviluppo del linguaggio Lua e retrocompatibile con Lua 5.1. Luau è progettato principalmente per incorporare motori di scripting nelle applicazioni e mira a ottenere prestazioni elevate e un basso consumo di risorse. Il codice del progetto è scritto in C++ ed è aperto con licenza MIT.

Luau estende Lua con funzionalità di controllo del tipo e alcuni nuovi costrutti sintattici come le stringhe letterali. Il linguaggio è retrocompatibile con Lua 5.1 e parzialmente con le versioni più recenti. È supportata l'API Lua Runtime, che consente di utilizzare Luau con codice e associazioni esistenti. Il runtime del linguaggio si basa su un codice Lua runtime 5.1 fortemente rielaborato, ma l'interprete è stato completamente riscritto. Durante lo sviluppo sono state utilizzate alcune nuove tecniche di ottimizzazione per ottenere prestazioni più elevate 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, incluso l'editor Roblox Studio. Inizialmente Luau è stato sviluppato a porte chiuse, ma alla fine si è deciso di trasferirlo nella categoria dei progetti aperti per un ulteriore sviluppo congiunto con la partecipazione della comunità.

Caratteristiche principali:

  • Digitazione graduale, che occupa una posizione intermedia tra digitazione dinamica e statica. Luau ti consente di utilizzare la digitazione statica secondo necessità specificando le informazioni sul tipo tramite annotazioni speciali. Vengono forniti i tipi incorporati "any", "nil", "boolean", "number", "string" e "thread". Allo stesso tempo, viene preservata la possibilità di utilizzare la tipizzazione dinamica senza definire esplicitamente il tipo di variabili e funzioni. funzione foo(x: numero, y: stringa): booleano locale k: stringa = y:rep(x) return k == “a” end
  • Supporto per stringhe letterali (come in Lua 5.3) come "\0x**" (numero esadecimale), "\u{**}" (carattere Unicode) e "\z" (fine riga), nonché il possibilità di visualizzare la formattazione dei numeri (è possibile scrivere 1_000_000 anziché 1000000), letterali per numeri esadecimali (0x...) e binari (0b......).
  • Supporto per l'espressione "continue", che integra la parola chiave "break" esistente, per passare a una nuova iterazione del ciclo.
  • Supporto per operatori di assegnazione composti (+=, -=, *=, /=, %=, ^=, ..=).
  • Supporto per l'utilizzo di blocchi condizionali "if-then-else" sotto forma di espressioni che restituiscono il valore calcolato durante l'esecuzione del blocco. È possibile specificare un numero arbitrario di espressioni elseif in un blocco. valoremax locale = se a > b allora a altrimenti b segno locale = se x < 0 allora -1 altrimenti se x > 0 allora 1 altrimenti 0
  • La presenza di una modalità di isolamento (sandbox), che consente di eseguire codice non affidabile. Questa funzionalità può essere utilizzata per organizzare il lancio fianco a fianco del proprio codice e del codice scritto da un altro sviluppatore, ad esempio librerie di terze parti la cui sicurezza non può essere garantita.
  • Una limitazione della libreria standard dalla quale sono state rimosse funzioni che potenzialmente potevano creare problemi di sicurezza. Ad esempio, le librerie “io” (accesso ai file e avvio di processi), “package” (accesso ai file e caricamento dei moduli), “os” (funzioni per l'accesso ai file e la modifica delle variabili di ambiente), “debug” (operazione non sicura con la memoria) , “dofile” e “loadfile” (accesso FS).
  • Fornire strumenti per l'analisi statica del codice, identificare errori (linter) e verificare il corretto utilizzo dei tipi.
  • Proprio parser ad alte prestazioni, interprete di bytecode e compilatore. Luau non supporta ancora la compilazione JIT, ma si sostiene che in alcune situazioni l'interprete Luau sia abbastanza paragonabile in termini di prestazioni a LuaJIT.

Fonte: opennet.ru

Aggiungi un commento