Eine neue Version des Compilers für die Programmiersprache Vala 0.50.4 wurde veröffentlicht. Der Langzeit-Support-Zweig (LTS) Vala 0.48.14 (gepackt für Ubuntu 18.04) und der experimentelle Zweig Vala 0.51.3 wurden ebenfalls aktualisiert.
Die Vala-Sprache ist eine objektorientierte Programmiersprache, die eine ähnliche Syntax wie C# oder Java bietet. Als Objektmodell wird Gobject (Glib Object System) verwendet. Die Speicherverwaltung erfolgt nach Besitz (eigene/nicht besessene Links) oder mithilfe von ARC (Ersetzung von Destruktoren und Dekrementierung von Objektreferenzzählern in der Kompilierungsphase).
Die Sprache unterstützt Introspektion, Lambda-Funktionen, Schnittstellen, Delegaten und Abschlüsse, Signale und Slots, Ausnahmen, Eigenschaften, Nicht-Null-Typen und Typinferenz für lokale Variablen. Das Kit enthält eine große Anzahl von Bindungen an Bibliotheken in C (Vala-Girs, Vala-Extra-Vapis). Vala-Programme werden in eine C-Darstellung übersetzt und dann von einem Standard-C-Compiler kompiliert. Es ist möglich, Programme im Skriptmodus auszuführen.
Liste der Änderungen:
- Zusätzliche Unterstützung für das Schlüsselwort params für Konstruktoren hinzugefügt. Klasse Foo{ public Foo(params string[] args){ foreach (var arg in args) print(arg); } }
- Codegen:
- Verbesserte Unterstützung für SimpleType-Strukturkonstruktoren (wird beispielsweise zum Binden von typedef uint32_t people_inside; aus C verwendet) [SimpleType] [CCode (cname = "people_inside")] public struct PeopleInside: uint32 {}
- Verbesserte Handhabung des „NoWrapper“-Attributs.
- CCode.type_cname und get_ccode_type_name() sind für Klassen zulässig.
- G_TYPE_INSTANCE_GET_CLASS/INTERFACE wird immer für externe Symbole verwendet.
- Verwendet g_boxed_free im Free-Wrapper, um GLib.Value auf dem Heap zuzuweisen.
- Ein Speicherverlust beim impliziten Unboxing von GLib.Value (einem universellen Container eines beliebigen Werttyps) wurde behoben.
- Ein Speicherverlust beim Verschieben einer Heap-zugewiesenen Struktur auf einen Stapel wurde behoben.
- Die Vererbung des Destruktors der übergeordneten Struktur ist gewährleistet
- Das korrekte Abrufen von symbol_reference verschachtelter Umwandlungsausdrücke wurde verbessert.
- Alle verschachtelten Vorkommen von CCodeCastExpression wurden entfernt.
- Fehlerhafter Aufruf des Standardsignalhandlers gestoppt.
- Verbunden mit „string.h“ für strcmp() (POSIX-Profil, Modus, in dem Vala Code nur unter Verwendung der Standard-C-Bibliothek generiert).
- Vala:
- Verbesserte Erkennung doppelter Paketquelldateien.
- GtkChild-Felder/-Eigenschaften müssen als nicht im Besitz erklärt werden.
- Eine Neuzuweisung des GtkChild-Felds/der GtkChild-Eigenschaft ist verboten.
- Beim Delegieren einer Aufgabe wurde eine strengere Bedingung für das Lambda angewendet.
- Es ist verboten, SimpleType-Strukturen zur einmaligen Verwendung zu verwenden.
- Durch das Unboxing von GLib.Value wird sichergestellt, dass der nicht besessene Wert zurückgegeben wird.
- Das Umwandeln von GLib.Value in eine nullbare Struktur/einfachen Typ ist verboten.
- Typargumentprüfung in Basistyp-/Klassen-/Schnittstellenvorbedingungen hinzugefügt.
- Das Erfassen von va_list-Parametern/Variablen ist verboten.
- Generics, die einen Zeiger auf eine Struktur enthalten, müssen beim Zugriff in den richtigen Typ umgewandelt werden, um C UB zu vermeiden.
- Typinferenz für „in“ innerhalb der Enumeration implementiert.
- Verbesserte Kontextprüfung für Zuweisungen zum beschreibbaren Feld.
- Enthalten ist „stdlib.h“ für Enum.to_string() (POSIX).
- Für die impliziten Variablen „this“ und „result“ ist die richtige Quellenreferenz festgelegt.
- Es wurde eine Fehlermeldung für einen ungültigen internen Operanden unärer Ausdrücke bereitgestellt.
- Codewriter: Das nachgestellte „;“ wurde nicht mehr hinzugefügt. nach dem Body WithStatement.
- Girparser:
- Es wird die Verarbeitung eines anonymen Delegaten bereitgestellt, der nicht durch eine virtuelle Methode oder ein virtuelles Signal unterstützt wird.
- Angewandte „delegate_target“-Metadaten für Methoden und Parameter
- Wenden Sie die Metadaten „destroy_notify_cname“ auf Felder an
- Wenden Sie „type_get_function“-Metadaten für Klassen und Schnittstellen an
- Legen Sie CCode.type_cname für Klassen fest, wenn dies nicht der Standard ist.
- girwriter: Stellt sicher, dass Instanzparameterelemente geschrieben werden.
- girwriter: Standard-Signal-Handler-Ausgabe implementiert.
- libvaladoc/html: Die Sortierung der Strukturfelder wurde entfernt, um beim Generieren der HTML-Dokumentation valadoc.org ihre ursprüngliche Reihenfolge beizubehalten
- libvaladoc: Stellen Sie sicher, dass Werte für Api.Class.is_compact korrekt abgerufen werden
- libvaladoc: Wrapper für die Graphviz-Bibliothek „agedge“ hinzugefügt
- Bindungen:
- Kleinere Korrekturen beim Generieren von Bindungen: 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, Sicherung, libxml-2.0
- gdk-pixbuf-2.0: Fix Pixbuf.save_to_streamv_async()
- gio-2.0: PollableOutputStream.write*_nonblocking() Bindungskorrektur
- gio-2.0,gtk+-3.0,gtk4: Explizite C-Typ-Attribute von va_list-Parametern werden verworfen
- gio-2.0: Ausgewählter fehlender Aufrufer für einige AppInfo/File.*()-Methoden
- glib-2.0: GLib.[S]List.is_empty()-Komfortmethoden für Nicht-Null hinzugefügt
- glib-2.0: Bindung der Funktion „assert_cmp*“ [#395]
- glib-2.0: Verbesserter Feldtyp OptionEntry.flags
- glib-2.0: PtrArray ist jetzt eine Unterklasse von GenericArray
- gstreamer-1.0: CCode.type_id des MiniObject ist auf G_TYPE_BOXED gesetzt [#1133]
- gtk+-2.0,javascriptcoregtk-4.0: Korrigierte Verwendung des CCode.type_cname-Attributs
- gtk+-3.0,gtk4: Einige Rückgabewerte und Parameter der Delegaten wurden korrigiert
- gtk4: Auf Version 4.0.2 aktualisiert.
Source: opennet.ru