Dopo due anni di sviluppo, il 29 giugno è stata rilasciata silenziosamente una 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 configurazione dei programmi (in particolare, dei videogiochi). Lua è distribuito con licenza MIT.
La versione precedente (5.3.5) è stata rilasciata il 10 luglio 2018.
Principali novità nella nuova versione
nuovo garbage collector basato su generazioni. Nella funzione collectgarbage i parametri setpause e setstepmul sono stati dichiarati obsoleti, si raccomanda di utilizzare il parametro incremental;
nuova funzione per generare avvisi warn con la possibilità di disabilitarne la visualizzazione;
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;
nuova funzione lua_resetthread — pulisce lo stack e chiude tutte le variabili "da chiudere";
nuova funzione coroutine.close — chiude la co-routine specificata e tutte le sue variabili "da chiudere";
i dati dell'utente (userdata) possono contenere un insieme di valori con accesso per indice. È stata introdotta una nuova funzione: lua_newuserdatauv, lua_setiuservalue e lua_getiuservalue;
disponibile informazione di debug sui parametri e sui valori restituiti dalle funzioni;
se nel ciclo for viene utilizzato un indice intero e si verifica un overflow — il ciclo termina;
nella funzione string.gmatch è stato aggiunto un argomento opzionale per specificare uno spostamento dall'inizio della stringa per cercare le corrispondenze;
le funzioni di conversione implicita delle stringhe in numeri sono state spostate nella libreria delle stringhe, il loro comportamento è stato modificato. Ad esempio, il risultato dell'operazione "1" + "2" è ora un intero, e non un numero a virgola mobile;
nella funzione di allocazione della memoria è consentito che si verifichi un errore durante la riduzione di un 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, altrimenti sono consentiti solo i codici fino a 0x10FFFF e non sono consentiti i surrogati);
le costanti intere che superano i limiti del range di valori vengono convertite in numeri in virgola mobile (in precedenza avveniva il troncamento dei bit);
il metametodo __lt non viene più utilizzato per emulare il metametodo __le; se necessario, il metametodo __le deve essere specificato esplicitamente;
non è possibile creare un'etichetta per l'operatore goto se nell'area di visibilità corrente esiste già un'etichetta con lo stesso nome (anche se è stata definita in un'area esterna);
il metametodo __gc può non essere solo una funzione. Se il tentativo di chiamare un metodo non riesce, viene visualizzato un avviso;
la funzione print non chiama tostring per ogni argomento, ma usa le proprie conversioni interne;
la funzione io.lines restituisce un insieme di quattro valori invece di uno; per emulare il comportamento precedente, circonda la chiamata tra parentesi se la inserisci come parametro nella chiamata a un'altra funzione.
Fonte: linux.org.ru
