Posodobitev prevajalnika programskega jezika Vala 0.50.4

Izšla je nova različica prevajalnika za programski jezik Vala 0.50.4. Posodobljeni sta bili tudi veja dolgoročne podpore (LTS) Vala 0.48.14 (zapakirana za Ubuntu 18.04) in eksperimentalna veja Vala 0.51.3.

Jezik Vala je objektno usmerjen programski jezik, ki zagotavlja sintakso, podobno C# ali Javi. Kot objektni model se uporablja Gobject (Glib Object System). Upravljanje pomnilnika se izvaja glede na lastništvo (povezave v lasti/nelastniku) ali z uporabo ARC (zamenjava destruktorjev in dekrementov števcev sklicev na objekte v fazi prevajanja).

Jezik ima podporo za introspekcijo, lambda funkcije, vmesnike, delegate in zaprtja, signale in reže, izjeme, lastnosti, neničelne tipe, sklepanje o tipih za lokalne spremenljivke. Komplet ima veliko število vezav na knjižnice v C (vala-girs, vala-extra-vapis). Programi Vala so prevedeni v predstavitev C in nato prevedeni s standardnim prevajalnikom C. Programe je mogoče izvajati v skriptnem načinu.

Seznam sprememb:

  • Dodana dodatna podpora za ključno besedo params za razred konstruktorjev Foo{ public Foo(params string[] args){ foreach (var arg in args) print(arg); }}
  • codegen:
    • Izboljšana podpora za konstruktorje struktur SimpleType (na primer za vezavo typedef uint32_t people_inside; iz C) [SimpleType] [CCode (cname = "people_inside")] public struct PeopleInside : uint32 {}
    • Izboljšano ravnanje z atributom »NoWrapper«.
    • CCode.type_cname in get_ccode_type_name() sta dovoljena za razrede.
    • G_TYPE_INSTANCE_GET_CLASS/INTERFACE se vedno uporablja za zunanje simbole.
    • Uporabljen g_boxed_free v brezplačnem ovoju za dodelitev GLib.Value na kopico.
    • Odpravljeno uhajanje pomnilnika med implicitnim razpakiranjem GLib.Value (univerzalni vsebnik katerega koli tipa vrednosti).
    • Odpravljeno je puščanje pomnilnika pri premikanju strukture, dodeljene kopici, v sklad.
    • Zagotovljeno je dedovanje destruktorja nadrejene strukture
    • Izboljšano je bilo pravilno pridobivanje simbol_reference ugnezdenih izrazov za pretvorbo.
    • Odstranjeni so vsi ugnezdeni pojavi CCodeCastExpression.
    • Prenehalo je nepravilno klicati privzetega upravljalnika signalov.
    • Povezan "string.h" za strcmp() (profil POSIX, način, v katerem Vala generira kodo samo s standardno knjižnico C).
  • Vala:
    • Izboljšano zaznavanje podvojenih izvornih datotek paketov.
    • Polja/lastnosti GtkChild je treba razglasiti za nelastniške.
    • Ponovno dodeljevanje polja/lastnosti GtkChild je prepovedano.
    • Za lambdo je bil uporabljen strožji pogoj pri delegiranju dodelitve.
    • Prepovedana je uporaba struktur SimpleType za enkratno uporabo.
    • Razpakiranje GLib.Value zagotavlja, da se vrne vrednost brez lastništva.
    • Pretvorba GLib.Value v ničelno strukturo/preprost tip je prepovedana.
    • Dodano preverjanje argumentov tipa v predpogojih osnovnih tipov/razredov/vmesnikov.
    • Zajem parametrov/spremenljivk va_list je prepovedan.
    • Generike, ki vsebujejo kazalec na strukturo, je treba ob dostopu pretvoriti v pravilen tip, da se izognete C UB.
    • Implementiran tipski sklep za "in" znotraj naštevanja.
    • Izboljšano preverjanje konteksta za dodelitve zapisljivemu polju.
    • Vključen "stdlib.h" za Enum.to_string() (POSIX).
    • Za implicitni spremenljivki "this" in "result" je nastavljena pravilna source_reference
    • Prikazano sporočilo o napaki za neveljaven notranji operand unarnih izrazov.
  • Kodirnik: prenehal je dodajati končni ";" za telesom WithStatement.
  • Girparser:
    • Zagotovljena je obdelava anonimnega delegata, ki ni podprta z virtualno metodo ali signalom.
    • Uporabljeni metapodatki »delegate_target« za metode in parametre
    • Uporabite metapodatke »destroy_notify_cname« za polja
    • Uporabite metapodatke "type_get_function" za razrede in vmesnike
    • Nastavite CCode.type_cname za razrede, če ni privzeto.
  • girwriter: Zagotavlja, da so elementi parametrov primerka zapisani.
  • girwriter: implementiran privzeti izhod upravljalnika signalov.
  • libvaladoc/html: odstranjeno razvrščanje strukturnih polj, da ostane njihov prvotni vrstni red pri ustvarjanju html dokumentacije valadoc.org
  • libvaladoc: Zagotovite, da so vrednosti za Api.Class.is_compact pravilno pridobljene
  • libvaladoc: Dodan ovoj za knjižnico graphviz "agedge".
  • Vezi:
    • Manjši popravki pri generiranju vezav: 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, varovalka, libxml-2.0
    • gdk-pixbuf-2.0: Popravi Pixbuf.save_to_streamv_async()
    • gio-2.0: popravek vezave PollableOutputStream.write*_nonblocking()
    • gio-2.0,gtk+-3.0,gtk4: Eksplicitni atributi tipa c parametrov va_list so zavrženi
    • gio-2.0: izbran manjkajoči klicalnik za nekatere metode AppInfo/File.*()
    • glib-2.0: dodane priročne metode GLib.[S]List.is_empty() za nenull
    • glib-2.0: Vezava funkcije assert_cmp* [#395]
    • glib-2.0: Izboljšan tip polja OptionEntry.flags
    • glib-2.0: PtrArray je zdaj podrazred GenericArray
    • gstreamer-1.0: CCode.type_id MiniObject je nastavljen na G_TYPE_BOXED [#1133]
    • gtk+-2.0,javascriptcoregtk-4.0: Popravljena uporaba atributa CCode.type_cname
    • gtk+-3.0,gtk4: popravljene nekatere vrnjene vrednosti in parametri delegata
    • gtk4: Posodobljeno na različico 4.0.2.

Vir: opennet.ru

Dodaj komentar