Aktualizace kompilátoru programovacího jazyka Vala 0.50.4

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

Přidat komentář