Eine neue Version des Compilers für die Programmiersprache Vala 0.50.4 wurde veröffentlicht. Außerdem wurde der Long-Term-Support-Zweig (LTS) Vala 0.48.14 (verpackt für Ubuntu 18.04) sowie der experimentelle Zweig Vala 0.51.3 aktualisiert.
Die Sprache Vala ist eine objektorientierte Programmiersprache und bietet eine Syntax, die den Sprachen C# oder Java ähnelt. Als Objektmodell wird Gobject (Glib Object System) verwendet. Die Speicherverwaltung erfolgt durch Besitz (owned/unowned Referenzen) oder mittels ARC (Einfügen von Destruktore und Diminution der Referenzzählung von Objekten zur Kompilierzeit).
Die Sprache unterstützt Introspektion, Lambda-Funktionen, Schnittstellen, Delegaten und Closures, Signale und Slots, Ausnahmen, Eigenschaften, Nullable-Typen und Typinferenz für lokale Variablen. Eine Vielzahl von Bindings zu C-Bibliotheken (vala-girs, vala-extra-vapis) ist enthalten. Programme in Vala werden in C-Code übersetzt und anschließend mit dem Standard-Compiler für C kompiliert. Es besteht die Möglichkeit, Programme im Skripting-Modus auszuführen.
Änderungsprotokoll:
- Zusätzliche Unterstützung für das Schlüsselwort params in Konstruktoren hinzugefügt. class Foo{ public Foo(params string[] args){ foreach (var arg in args) print(arg); } }
- codegen:
- Verbesserte Unterstützung für Strukturkonstruktoren vom Typ SimpleType (z. B. verwendet, um typedef uint32_t people_inside; aus C zu binden) [SimpleType] [CCode(cname = "people_inside")] public struct PeopleInside : uint32 {}
- Verbesserte Verarbeitung des Attributs „NoWrapper“.
- Für Klassen sind CCode.type_cname und get_ccode_type_name() erlaubt.
- G_TYPE_INSTANCE_GET_CLASS/INTERFACE wird immer für externe Symbole verwendet.
- g_boxed_free in free-wrapper verwendet, um GLib.Value im Heap zu platzieren.
- Speicherleck während des impliziten Unboxings von GLib.Value (universeller Container für jeden Werttyp) behoben.
- Speicherleck während der Verschiebung von heap-allocated Strukturen in den Stack behoben.
- Vererbung des Destruktors der übergeordneten Struktur sichergestellt.
- Richtige Erfassung von symbol_reference für geschachtelte cast-Ausdrücke gewährleistet.
- Alle geschachtelten Vorkommen von CCodeCastExpression entfernt.
- Unzulässiger Standard-Signalhandler-Aufruf gestoppt.
- "string.h" für strcmp() (POSIX-Profil, Modus, in dem Vala Code generiert, der nur die Standard-C-Bibliothek verwendet) eingebunden.
- Vala:
- Verbesserte Erkennung von Duplikaten in den Quellpaketdateien.
- Felder/Eigenschaften von GtkChild müssen als unowned deklariert werden.
- Die Neuzuordnung von Feldern/Eigenschaften von GtkChild ist verboten.
- Eine strengere Bedingung für Lambdas bei der Zuweisung wurde angewendet.
- Die Verwendung von einmaligen Strukturen vom Typ SimpleType ist verboten.
- In GLib.Value sorgt das Unboxing für die Rückgabe unowned-Werte.
- Die Konvertierung von GLib.Value in nullable struct/simple Typen ist verboten.
- Eine Typüberprüfung für Argumente in Basis-Typen/Vorbedingungen von Klassen/Schnittstellen wurde hinzugefügt.
- Das Erfassen von Parametern/Variablen va_list ist untersagt.
- Generics, die einen Zeiger auf eine Struktur enthalten, müssen beim Zugriff in den richtigen Typ konvertiert werden, um UB zu vermeiden.
- Typproduktion für 'in' innerhalb von Enums wurde implementiert.
- Die Kontextprüfung bei Zuweisungen in das schreibbare Feld wurde verbessert.
- stdlib.h für Enum.to_string() (POSIX) eingebunden.
- Der korrekte source_reference für die impliziten Variablen 'this' und 'result' wurde gesetzt.
- Eine Fehlermeldung für ungültige interne Operanden bei unären Ausdrücken wurde sichergestellt.
- Codewriter: Das Hinzufügen eines abschließenden ';' nach dem Körper von WithStatement wurde eingestellt.
- Girparser:
- Die Verarbeitung von anonymen Delegaten, die nicht durch eine virtuelle Methode oder ein Signal unterstützt werden, wurde gewährleistet.
- Metadaten «delegate_target» wurden für Methoden und Parameter angewendet.
- Metadaten «destroy_notify_cname» wurden für Felder angewendet.
- Metadaten «type_get_function» wurden für Klassen und Schnittstellen angewendet.
- CCode.type_cname für Klassen wurde eingestellt, wenn es nicht dem Standardwert entspricht.
- girwriter: Gewährleistung der Aufzeichnung von Instanzparameter-Elementen.
- girwriter: Implementierung der Standardausgabe für Signalhandler.
- libvaladoc/html: Feldsortierung von Strukturen entfernt, um ihre ursprüngliche Reihenfolge bei der Generierung der HTML-Dokumentation auf valadoc.org beizubehalten.
- libvaladoc: Sicherstellung der korrekten Abfrage von Werten für Api.Class.is_compact.
- libvaladoc: Wrapper für die «agedge»-Bibliothek von graphviz hinzugefügt.
- Bindings:
- Kleine Korrekturen bei der Generierung von Bindings: 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: Korrektur von Pixbuf.save_to_streamv_async().
- gio-2.0: Korrektur der Bindings für PollableOutputStream.write*_nonblocking().
- gio-2.0, gtk+-3.0, gtk4: Offensichtliche c-Typ-Parameterattribute va_list wurden verworfen.
- gio-2.0: Fehlender Invoker für einige Methoden AppInfo/File.*() ausgewählt.
- glib-2.0: Hinzufügung von GLib.[S]List.is_empty() Hilfsmethoden für Nicht-Null.
- glib-2.0: Binding der Funktion assert_cmp* [#395].
- glib-2.0: Verbesserung des Feldtyps OptionEntry.flags.
- glib-2.0: PtrArray ist jetzt eine Unterklasse von GenericArray
- gstreamer-1.0: CCode.type_id des Mini-Objekts (MiniObject) wird als G_TYPE_BOXED festgelegt [#1133]
- gtk+-2.0, javascriptcoregtk-4.0: Nutzung des Attributs CCode.type_cname angepasst
- gtk+-3.0, gtk4: Einige von Delegierten zurückgegebene Werte und Parameter korrigiert
- gtk4: Auf Version 4.0.2 aktualisiert.
Quelle: opennet.ru
