Dopo due anni di sviluppo, il 29 giugno è stata rilasciata silenziosamente la nuova versione del linguaggio di programmazione Lua — 5.4.
Lua è un linguaggio di programmazione semplice e interpretato, facilmente integrabile nelle applicazioni. Grazie a queste caratteristiche, Lua è ampiamente utilizzato come linguaggio di estensione o per la descrizione della configurazione di programmi (in particolare, nei videogiochi). Lua è distribuito sotto licenza MIT.
La versione precedente (5.3.5) è stata rilasciata il 10 luglio 2018.
Le principali novità nella nuova versione
un nuovo garbage collector generazionale. Nei parametri setpause e setstepmul della funzione collectgarbage identificati come obsoleti, si consiglia invece di utilizzare il parametro incremental;
una nuova funzione per emettere avvisi warn con la possibilità di disattivare la loro visualizzazione;
una nuova implementazione di math.random utilizza l'algoritmo xoshiro256** invece di quello fornito da libc e inizializza il generatore con un numero casuale;
costanti (variabili costanti);
variabili «da chiudere» (to-be-closed) — costanti locali per le quali viene eseguito il metodo __close all'uscita dall'ambito;
una nuova funzione lua_resetthread — pulisce lo stack ed esegue la chiusura di tutte le variabili «da chiudere»;
la nuova funzione coroutine.close chiude la coroutine specificata e tutte le sue variabili "chiudibili";
i dati utente (userdata) possono contenere un insieme di valori accessibili per indice. Sono state introdotte nuove funzioni per lavorare con essi: lua_newuserdatauv, lua_setiuservalue e lua_getiuservalue;
sono disponibili informazioni di debug sui parametri e sui valori di ritorno delle funzioni;
se un indice intero viene utilizzato nel ciclo for e si verifica un overflow, il ciclo termina;
alla funzione string.gmatch è stato aggiunto un argomento opzionale che specifica l'offset dall'inizio della stringa per la ricerca delle corrispondenze;
le funzioni di conversione implicita delle stringhe in numeri sono state spostate nella libreria delle stringhe, e il loro comportamento è cambiato. Ad esempio, il risultato dell'operazione "1" + "2" è ora un intero, non un numero con punto decimale;
nella funzione di allocazione della memoria è consentito che si verifichi un errore durante la riduzione del blocco di memoria;
nuovo simbolo di formattazione nella funzione string.format — %p (per puntatori);
la libreria utf8 accetta codici di caratteri fino a 2³¹ (specificando un flag speciale; senza di esso, sono ammessi solo codici fino a 0x10FFFF e le surrogate non sono ammesse);
Le costanti intere al di fuori dell'intervallo di valori vengono convertite in numeri in virgola mobile (precedentemente si verificava il taglio binario);
Il metametodo __lt non viene più utilizzato per emulare il metametodo __le, se necessario, il metametodo __le deve essere specificato esplicitamente;
Un'etichetta per l'operatore goto non può essere creata se esiste già un'etichetta con lo stesso nome nell'ambito corrente (anche se è stata definita in un ambito esterno);
Il metametodo __gc può non essere solo una funzione. Se il tentativo di chiamare un metodo non riesce, verrà visualizzato un avviso;
La funzione print non chiama tostring per ogni argomento, ma utilizza le proprie conversioni interne;
La funzione io.lines ritorna un insieme di quattro valori invece di uno, per emulare il vecchio comportamento racchiudere la chiamata tra parentesi se la si inserisce come parametro in un'altra funzione.
Fonte: linux.org.ru
