Byla vydána nová verze kompilátoru pro programovací jazyk Vala 0.50.4. Aktualizována byla také větev dlouhodobé podpory (LTS) Vala 0.48.14 (zabalená pro Ubuntu 18.04) a experimentální větev Vala 0.51.3.
Jazyk Vala je objektově orientovaný programovací jazyk, který poskytuje syntaxi podobnou C# nebo Javě. Jako objektový model se používá Gobject (Glib Object System). Správa paměti se provádí vlastnictvím (vlastněné/nevlastněné odkazy) nebo pomocí ARC (substituce destruktorů a dekrementů čítačů referencí objektů ve fázi kompilace).
Jazyk má podporu pro introspekci, lambda funkce, rozhraní, delegáty a uzávěry, signály a sloty, výjimky, vlastnosti, nenulové typy, odvození typu pro lokální proměnné. Sada je dodávána s velkým počtem vazeb na knihovny v C (vala-girs, vala-extra-vapis). Programy Vala jsou přeloženy do reprezentace C a poté zkompilovány standardním kompilátorem C. Programy je možné spouštět v režimu skriptu.
Seznam změn:
- Přidána další podpora pro klíčové slovo params pro konstruktory class Foo{ public Foo(params string[] args){ foreach (var arg v args) print(arg); } }
- codegen:
- Vylepšená podpora konstruktorů SimpleType struct (používá se například ke svázání typedef uint32_t people_inside; z C) [SimpleType] [CCode (cname = "people_inside")] public struct PeopleInside : uint32 {}
- Vylepšené zpracování atributu „NoWrapper“.
- CCode.type_cname a get_ccode_type_name() jsou povoleny pro třídy.
- G_TYPE_INSTANCE_GET_CLASS/INTERFACE se vždy používá pro externí symboly.
- Použito g_boxed_free ve free-wrapperu k alokaci GLib.Value na haldě.
- Opraven únik paměti během implicitního rozbalování GLib.Value (univerzální kontejner libovolného typu hodnoty).
- Opraven nevracení paměti při přesunu struktury alokované haldy do zásobníku.
- Je zajištěna dědičnost destruktoru nadřazené struktury
- Bylo vylepšeno správné načítání symbol_reference vnořených výrazů přetypování.
- Byly odstraněny všechny vnořené výskyty CCodeCastExpression.
- Zastavení nesprávného volání výchozího obslužného programu signálu.
- Připojen "string.h" pro strcmp() (POSIX profil, režim, ve kterém Vala generuje kód pouze pomocí standardní knihovny C).
- Vala:
- Vylepšená detekce duplicitních zdrojových souborů balíčků.
- Pole/vlastnosti GtkChild musí být prohlášeny za nevlastní.
- Opětovné přiřazení pole/vlastnosti GtkChild je zakázáno.
- Při delegování úkolu byla na lambda aplikována přísnější podmínka.
- Je zakázáno používat jednorázové struktury SimpleType.
- Rozbalení GLib.Value zajišťuje, že se vrátí hodnota, kterou nevlastníte.
- Přetypování GLib.Value do struct/simple typu s možnou hodnotou Null je zakázáno.
- Přidána kontrola argumentů typu v základních typech/třídě/předpokladech rozhraní.
- Zachycování parametrů/proměnných va_list je zakázáno.
- Generika obsahující ukazatel na strukturu musí být při přístupu přetypována na správný typ, aby se zabránilo CUB.
- Implementováno odvození typu pro "in" uvnitř enum.
- Vylepšená kontrola kontextu pro přiřazení do zapisovatelného pole.
- Zahrnuto "stdlib.h" pro Enum.to_string() (POSIX).
- Pro implicitní proměnné "this" a "result" je nastaven správný source_reference
- Poskytli chybovou zprávu pro neplatný interní operand unárních výrazů.
- Сodewriter: Přestal přidávat koncové ";" po těle WithStatement.
- Girparser:
- Je zajištěno zpracování anonymního delegáta, který není podporován virtuální metodou nebo signálem.
- Pro metody a parametry byla použita metadata „delegate_target“.
- Použijte metadata "destroy_notify_cname" na pole
- Použijte metadata "type_get_function" pro třídy a rozhraní
- Nastavte CCode.type_cname pro třídy, pokud není výchozí.
- girwriter: Zajišťuje zapsání prvků parametrů instance.
- girwriter: Implementovaný výchozí výstup obsluhy signálu.
- libvaladoc/html: Odstraněno třídění strukturních polí, aby bylo ponecháno jejich původní pořadí při generování html dokumentace valadoc.org
- libvaladoc: Ujistěte se, že hodnoty pro Api.Class.is_compact jsou načteny správně
- libvaladoc: Přidán obal pro knihovnu „agedge“ graphviz
- Vazby:
- Drobné opravy při generování vazeb: 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. pojistka, libxml-4
- gdk-pixbuf-2.0: Oprava Pixbuf.save_to_streamv_async()
- gio-2.0: Oprava vazby PollableOutputStream.write*_nonblocking()
- gio-2.0,gtk+-3.0,gtk4: Explicitní atributy typu c parametrů va_list jsou zahozeny
- gio-2.0: Vybraný chybějící vyvolávač pro některé metody AppInfo/File.*().
- glib-2.0: Přidány pohodlné metody GLib.[S]List.is_empty() pro non-null
- glib-2.0: Svázání funkce Claim_cmp* [#395]
- glib-2.0: Vylepšený typ pole OptionEntry.flags
- glib-2.0: PtrArray je nyní podtřídou GenericArray
- gstreamer-1.0: CCode.type_id MiniObject je nastaven na G_TYPE_BOXED [#1133]
- gtk+-2.0,javascriptcoregtk-4.0: Opravené použití atributu CCode.type_cname
- gtk+-3.0,gtk4: Opraveny některé návratové hodnoty a parametry delegátů
- gtk4: Aktualizováno na verzi 4.0.2.
Zdroj: opennet.ru