Rilascio del linguaggio di programmazione Lua 5.4

Dopo cinque anni di sviluppo è disponibile rilasciare Lua 5.4, un linguaggio di programmazione di scripting veloce e compatto ampiamente utilizzato come linguaggio incorporato (ad esempio, per definire la configurazione o scrivere estensioni). Il codice dell'interprete Lua è scritto in C e distribuito da con licenza MIT.

Lua combina una semplice sintassi procedurale con potenti capacità di descrizione dei dati attraverso l'uso di array associativi e semantica estensibile del linguaggio. Lua utilizza la digitazione dinamica, convertendo i costrutti linguistici in bytecode che viene eseguito su una macchina virtuale basata su registri con garbage collection automatica. L'interprete stesso è concepito come una libreria che può essere facilmente integrata in progetti nei linguaggi C e C++.

Il principale innovazioni:

  • È stata implementata una nuova modalità di funzionamento del garbage collector - “generazionale“, che ha completato la modalità di garbage collection incrementale precedentemente disponibile. La nuova modalità prevede l'esecuzione più frequente di una scansione abbreviata, che copre solo gli oggetti creati di recente. Un attraversamento completo di tutti gli oggetti viene eseguito solo se dopo un breve attraversamento non è stato possibile raggiungere il consumo di memoria desiderato. Questo approccio consente di ottenere prestazioni più elevate e ridurre il consumo di memoria quando si archivia un numero elevato di oggetti che vivono per un breve periodo.
  • Aggiunta la possibilità di definire variabili costanti definite con l'attributo “const”. Tali variabili possono essere assegnate una sola volta e, una volta inizializzate, non possono essere modificate.
  • Aggiunto il supporto per le variabili "essere-chiuso", che vengono assegnate utilizzando l'attributo "close" e assomigliano a variabili locali costanti (con l'attributo const), differendo da esse in quanto il valore viene chiuso (viene chiamato il metodo "__close") ogni volta che esce dall'ambito, ad esempio, dopo il normale completamento del blocco, transizione utilizzando break/goto/return o uscita quando si verifica un errore.
  • Tipo "dati utente“, che offre la possibilità di memorizzare qualsiasi dato C in variabili Lua (rappresenta un blocco di dati in memoria o contiene un puntatore C), ora può contenere diversi valori (ha diverse metatabelle).
  • Viene presentata una nuova implementazione della funzione per generare numeri pseudocasuali: math.random.
  • Aggiunto un sistema di avvisi determinati utilizzando l'espressione avvertire e, a differenza degli errori, non influenzano l'ulteriore esecuzione del programma.
  • Aggiunte informazioni di debug sugli argomenti delle funzioni e sui valori restituiti.
  • È stata proposta una nuova semantica per enumerare gli interi nei cicli "per". Il numero di iterazioni viene calcolato prima dell'inizio del ciclo, evitando l'overflow e il looping delle variabili. Se il valore iniziale è maggiore del valore limite, viene visualizzato un errore.
  • In funzione 'stringa.gmatch' aggiunto un nuovo argomento opzionale 'init', che determina in quale posizione iniziare la ricerca (per impostazione predefinita, da 1 carattere).
  • Nuove funzionalità aggiunte 'lua_resetthread' (reimposta il thread, cancella l'intero stack di chiamate e chiude tutte le variabili "da chiudere") e 'coroutine.close' (chiude la coroutine e tutte le variabili "da chiudere" associate).
  • Le funzioni per convertire le stringhe in numeri sono state spostate nella libreria "string".
  • Le chiamate alla funzione di allocazione della memoria ora potrebbero fallire se la dimensione del blocco di memoria viene ridotta.
  • In funzione 'formato.stringa' aggiunto il supporto per il nuovo identificatore di formato '%p' (puntatore restituito da lua_topointer).
  • La libreria utf8 fornisce supporto codici carattere con numeri fino a 2^31.

Fonte: opennet.ru

Aggiungi un commento