È stata rilasciata una nuova versione del compilatore per il linguaggio di programmazione Vala 0.50.4. Inoltre, è stata aggiornata la versione con supporto a lungo termine (LTS) Vala 0.48.14 (packaged for Ubuntu 18.04) e la versione sperimentale Vala 0.51.3.
Il linguaggio Vala è un linguaggio di programmazione orientato agli oggetti, che offre una sintassi simile a quella dei linguaggi C# o Java. Utilizza Gobject (Glib Object System) come modello di oggetti. La gestione della memoria avviene tramite il possesso (riferimenti owned/unowned) oppure tramite ARC (sostituzione dei distruttori e decremento dei contatori di riferimenti degli oggetti in fase di compilazione).
Il linguaggio supporta introspezione, funzioni lambda, interfacce, delegati e chiusure, segnali e slot, eccezioni, proprietà, tipi non nulli e inferenza dei tipi per variabili locali. Viene fornito un ampio numero di binding a librerie C (vala-girs, vala-extra-vapis). I programmi scritti in Vala vengono trasmessi in C e poi compilati usando il compilatore C standard. È possibile eseguire i programmi in modalità script.
Elenco delle modifiche:
- Aggiunta del supporto per la parola chiave params nei costruttori class Foo{ public Foo(params string[] args){ foreach (var arg in args) print(arg); } }
- codegen:
- Migliorato il supporto per i costruttori SimpleType struct (ad esempio utilizzato per associare typedef uint32_t people_inside; da C) [SimpleType] [CCode (cname = «people_inside»)] public struct PeopleInside : uint32 {}
- Migliorata la gestione dell'attributo «NoWrapper».
- Per le classi è consentito CCode.type_cname e get_ccode_type_name().
- Utilizzato sempre G_TYPE_INSTANCE_GET_CLASS/INTERFACE per simboli esterni.
- Usato g_boxed_free nel free-wrapper per allocare GLib.Value nella heap.
- Corretta una perdita di memoria durante l'unboxing implicito di GLib.Value (contenitore universale per qualsiasi tipo di valore).
- Corretto un problema di perdita di memoria durante il trasferimento di una struttura allocata nella heap nello stack.
- Assicurato l'ereditarietà del distruttore dalla struttura genitore.
- Settato correttamente il recupero di symbol_reference per le espressioni cast annidate.
- Rimossi tutti i CCodeCastExpression annidati.
- Interrotto l'errato invio del gestore dei segnali predefiniti.
- Incluso «string.h» per strcmp() (profilo POSIX, modalità in cui Vala genera codice utilizzando solo la libreria C standard).
- Vala:
- Migliorato il rilevamento dei file sorgente duplicati.
- I campi/proprietà di GtkChild devono essere dichiarati come unowned.
- È vietato ridefinire i campi/proprietà di GtkChild.
- Applicata una condizione più rigorosa per le lambda nella delega delle assegnazioni.
- È vietato l'uso di strutture SimpleType monouso.
- In GLib.Value l'unboxing garantisce il ritorno di un valore unowned.
- È vietato il casting di GLib.Value a un tipo nullable struct/simple.
- Aggiunta una verifica dei tipi degli argomenti nei tipi base/precondizioni di classe/interfaccia.
- È vietato catturare parametri/variabili va_list.
- I generics contenenti puntatori a strutture devono essere casting al tipo corretto per evitare UB.
- Implementato l'output dei tipi per 'in' all'interno degli enum.
- Migliorata la verifica del contesto durante le assegnazioni nel campo writeable.
- Includo 'stdlib.h' per Enum.to_string() (POSIX).
- Impostato il corretto source_reference per le variabili implicite 'this' e 'result'.
- Garantito l'output di un messaggio di errore per un operatore interno non valido nelle espressioni unarie.
- Codewriter: Sospesa l'aggiunta del terminatore ';' dopo il corpo di WithStatement.
- Girparser:
- Garantita la gestione del delegato anonimo, non supportato da un metodo virtuel o un segnale.
- Sono stati applicati metadati "delegate_target" per metodi e parametri
- Sono stati applicati metadati "destroy_notify_cname" per i campi
- Sono stati applicati metadati "type_get_function" per classi e interfacce
- CCode.type_cname è stato impostato per le classi se non corrisponde al valore predefinito.
- girwriter: Registrazione degli elementi dei parametri delle istanze eseguita con successo.
- girwriter: Implementata l'uscita del gestore di segnali predefinito.
- libvaladoc/html: Rimosso l'ordinamento dei campi delle strutture per mantenere il loro ordine originale durante la generazione della documentazione HTML su valadoc.org
- libvaladoc: Garantito il corretto recupero dei valori per Api.Class.is_compact
- libvaladoc: Aggiunto un wrapper per la libreria "agedge" di graphviz
- Binding:
- Piccole correzioni nella generazione dei binding: 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, fuse, libxml-2.0
- gdk-pixbuf-2.0: Corretto Pixbuf.save_to_streamv_async()
- gio-2.0: Corretto binding PollableOutputStream.write*_nonblocking()
- gio-2.0, gtk+-3.0, gtk4: Rimossi attributi espliciti di tipo C per parametri va_list
- gio-2.0: Selezionato invoker mancante per alcuni metodi AppInfo/File.*()
- glib-2.0: Aggiunti metodi di convenienza GLib.[S]List.is_empty() per non nulli
- glib-2.0: Binding della funzione assert_cmp* [#395]
- glib-2.0: Migliorato il tipo del campo OptionEntry.flags
- glib-2.0: PtrArray è ora una sottoclasse di GenericArray
- gstreamer-1.0: CCode.type_id del mini-oggetto (MiniObject) è impostato come G_TYPE_BOXED [#1133]
- gtk+-2.0, javascriptcoregtk-4.0: Utilizzo corretto dell'attributo CCode.type_cname
- gtk+-3.0, gtk4: Corrette alcune restituzioni di valori e parametri delegate
- gtk4: Aggiornato alla versione 4.0.2.
Fonte: opennet.ru
