È stata rilasciata una nuova versione del compilatore per il linguaggio di programmazione Vala 0.50.4. Sono stati aggiornati anche il ramo di supporto a lungo termine (LTS) Vala 0.48.14 (confezionato per Ubuntu 18.04) e il ramo sperimentale Vala 0.51.3.
Il linguaggio Vala è un linguaggio di programmazione orientato agli oggetti che fornisce una sintassi simile a C# o Java. Gobject (Glib Object System) viene utilizzato come modello a oggetti. La gestione della memoria viene effettuata per proprietà (collegamenti posseduti/non posseduti) o utilizzando ARC (sostituzione dei distruttori e decrementi dei contatori di riferimento agli oggetti in fase di compilazione).
Il linguaggio supporta l'introspezione, funzioni lambda, interfacce, delegati e chiusure, segnali e slot, eccezioni, proprietà, tipi non nulli, inferenza di tipo per variabili locali. Il kit viene fornito con un gran numero di collegamenti alle librerie in C (vala-girs, vala-extra-vapis). I programmi Vala vengono tradotti in rappresentazione C e quindi compilati da un compilatore C standard. È possibile eseguire programmi in modalità script.
Elenco delle modifiche:
- Aggiunto supporto aggiuntivo per la parola chiave params per i costruttori class Foo{ public Foo(params string[] args){ foreach (var arg in args) print(arg); } }
- codegeno:
- Supporto migliorato per i costruttori di strutture SimpleType (ad esempio utilizzati per associare typedef uint32_t people_inside; da C) [SimpleType] [CCode (cname = "people_inside")] public struct PeopleInside : uint32 {}
- Gestione migliorata dell'attributo "NoWrapper".
- CCode.type_cname e get_ccode_type_name() sono consentiti per le classi.
- G_TYPE_INSTANCE_GET_CLASS/INTERFACE viene sempre utilizzato per i simboli esterni.
- Utilizzato g_boxed_free nel free-wrapper per allocare GLib.Value nell'heap.
- Risolta una perdita di memoria durante l'unboxing implicito di GLib.Value (un contenitore universale di qualsiasi tipo di valore).
- Risolta una perdita di memoria durante lo spostamento di una struttura allocata nell'heap in uno stack.
- L'ereditarietà del distruttore della struttura madre è assicurata
- È stato migliorato il recupero corretto di symbol_reference delle espressioni cast nidificate.
- Rimosse tutte le occorrenze nidificate di CCodeCastExpression.
- Arrestata la chiamata errata al gestore del segnale predefinito.
- Connesso "string.h" per strcmp() (profilo POSIX, modalità in cui Vala genera codice utilizzando solo la libreria C standard).
- Vale:
- Rilevamento migliorato dei file di origine del pacchetto duplicati.
- I campi/proprietà GtkChild devono essere dichiarati senza proprietario.
- La riassegnazione del campo/proprietà GtkChild è vietata.
- Una condizione più rigorosa è stata applicata al lambda durante la delega di un incarico.
- È vietato utilizzare strutture SimpleType monouso.
- L'unboxing di GLib.Value garantisce che venga restituito il valore senza proprietario.
- È vietato eseguire il cast di GLib.Value su un tipo struct/simple nullable.
- Aggiunto il controllo dell'argomento tipo nelle precondizioni di tipi base/classe/interfaccia.
- L'acquisizione di parametri/variabili va_list è vietata.
- I generici contenenti un puntatore a una struttura devono essere convertiti nel tipo corretto quando si accede per evitare C UB.
- Inferenza del tipo implementata per "in" all'interno dell'enumerazione.
- Controllo del contesto migliorato per le assegnazioni al campo scrivibile.
- Incluso "stdlib.h" per Enum.to_string() (POSIX).
- È impostato il source_reference corretto per le variabili implicite "this" e "result"
- Fornito un messaggio di errore per un operando interno non valido di espressioni unarie.
- Сodewriter: interrotta l'aggiunta del ";" finale dopo il corpo WithStatement.
- Girparser:
- Viene fornita l'elaborazione di un delegato anonimo non supportato da un metodo o segnale virtuale.
- Metadati "delegate_target" applicati per metodi e parametri
- Applica i metadati "destroy_notify_cname" ai campi
- Applicare i metadati "type_get_function" per classi e interfacce
- Imposta CCode.type_cname per le classi se non è il valore predefinito.
- girwriter: garantisce che gli elementi dei parametri dell'istanza siano scritti.
- girwriter: implementato l'output predefinito del gestore del segnale.
- libvaladoc/html: Rimosso l'ordinamento dei campi della struttura per lasciare il loro ordine originale durante la generazione della documentazione html valadoc.org
- libvaladoc: assicurati che i valori per Api.Class.is_compact vengano recuperati correttamente
- libvaladoc: aggiunto wrapper per la libreria graphviz "agedge".
- Legami:
- Correzioni minori durante la generazione di collegamenti: cairo, gobject-2.0, pango, goocanvas-2.0, curses, alsa, bzlib, sqlite3, libgvc, posix, gstreamer-1.0, gdk-3.0, gdk-x11-3.0, gtk+-3.0, gtk4, fusibile, libxml-2.0
- gdk-pixbuf-2.0: corretto Pixbuf.save_to_streamv_async()
- gio-2.0: correzione del collegamento PollableOutputStream.write*_nonblocking()
- gio-2.0,gtk+-3.0,gtk4: gli attributi espliciti di tipo c dei parametri va_list vengono scartati
- gio-2.0: selezionato invocatore mancante per alcuni metodi AppInfo/File.*()
- glib-2.0: Aggiunti metodi pratici GLib.[S]List.is_empty() per non null
- glib-2.0: Associazione della funzione assert_cmp* [#395]
- glib-2.0: tipo di campo OptionEntry.flags migliorato
- glib-2.0: PtrArray è ora una sottoclasse di GenericArray
- gstreamer-1.0: CCode.type_id del MiniObject è impostato su G_TYPE_BOXED [#1133]
- gtk+-2.0,javascriptcoregtk-4.0: corretto uso dell'attributo CCode.type_cname
- gtk+-3.0,gtk4: risolti alcuni valori e parametri restituiti dai delegati
- gtk4: aggiornato alla versione 4.0.2.
Fonte: opennet.ru