Lua 5.4

Dopo due anni di sviluppo, il 29 giugno è stata rilasciata silenziosamente e impercettibilmente una nuova versione del linguaggio di programmazione Lua, la 5.4.

Lua è un linguaggio di programmazione semplice e interpretato che può essere facilmente incorporato nelle applicazioni. Grazie a queste qualità, Lua è ampiamente utilizzato come linguaggio per estendere o descrivere la configurazione dei programmi (in particolare i giochi per computer). Lua sarà distribuito con licenza MIT.

La versione precedente (5.3.5) è stata rilasciata il 10 luglio 2018.

Principali modifiche nella nuova versione

  • nuovo garbage collector basato su generazioni (generazionale). Nella funzione collectgarbage, i parametri setpause e setstepmul sono stati deprecati e si consiglia invece il parametro incrementale;

  • una nuova funzione per l'emissione di avvisi di warning con la possibilità di disabilitarne la visualizzazione;

  • la nuova implementazione di math.random usa l'algoritmo xoshiro256** invece di quello fornito da libc e inizializza il generatore con un numero casuale;

  • variabili costanti;

  • Le variabili "to-be-closed" sono costanti locali per le quali viene eseguito il metodo __close quando si esce dall'ambito;

  • nuova funzione lua_resetthread - cancella lo stack e chiude tutte le variabili "chiuse";

  • nuova funzione coroutine.close - chiude la coroutine specificata e tutte le sue variabili "chiudibili";

  • i dati utente (userdata) possono contenere un insieme di valori a cui si accede tramite indice. Sono state introdotte nuove funzioni per lavorare con loro: lua_newuserdatauv, lua_setiuservalue e lua_getiuservalue;

  • sono disponibili informazioni di debug sui parametri e sui valori di ritorno delle funzioni;

  • se nel ciclo for viene utilizzato un indice intero e si verifica un overflow, il ciclo termina;

  • aggiunto un argomento facoltativo alla funzione string.gmatch che specifica l'offset 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 è cambiato. Ad esempio, il risultato dell'operazione "1" + "2" è ora un numero intero, non un numero in virgola mobile;

  • nella funzione di allocazione della memoria, può verificarsi un errore quando un blocco di memoria viene ridotto;

  • nuovo carattere di formato nella funzione string.format - %p (per i puntatori);

  • la libreria utf8 accetta codici carattere fino a 2³¹ (quando viene specificato un flag speciale, senza di esso sono consentiti solo codici fino a 0x10FFFF e non sono consentiti surrogati);

  • le costanti intere che sono al di fuori dell'intervallo di valori vengono convertite in numeri in virgola mobile (in precedenza si verificava il ritaglio di bit);

  • il metametodo __lt non è più utilizzato per emulare il metametodo __le, se necessario, il metametodo __le deve essere impostato esplicitamente;

  • non è possibile creare un'etichetta per un'istruzione goto se esiste già un'etichetta con lo stesso nome nell'ambito corrente (anche se è stata definita nell'ambito esterno);

  • il metametodo __gc può essere più di una semplice funzione. Se il tentativo di chiamare il metodo fallisce, verrà visualizzato un avviso;

  • la funzione print non chiama tostring per ogni argomento, ma utilizza le proprie trasformazioni interne;

  • la funzione io.lines restituisce un insieme di quattro valori invece di uno, per emulare il vecchio comportamento, racchiudi la chiamata tra parentesi se la sostituisci come parametro quando chiami un'altra funzione.

Fonte: linux.org.ru

Aggiungi un commento