Actualizarea compilatorului limbajului de programare Vala 0.50.4

A fost lansată o nouă versiune a compilatorului pentru limbajul de programare Vala 0.50.4. De asemenea, au fost actualizate ramura de suport pe termen lung (LTS) Vala 0.48.14 (ambalată pentru Ubuntu 18.04) și ramura experimentală Vala 0.51.3.

Limbajul Vala este un limbaj de programare orientat pe obiecte care oferă o sintaxă similară cu C# sau Java. Gobject (Glib Object System) este folosit ca model de obiect. Gestionarea memoriei se realizează prin deținere (legături deținute/neproprietate) sau folosind ARC (înlocuirea destructorilor și decrementele contoarelor de referință a obiectelor în etapa de compilare).

Limbajul are suport pentru introspecție, funcții lambda, interfețe, delegați și închideri, semnale și sloturi, excepții, proprietăți, tipuri non-null, inferență de tip pentru variabilele locale. Kitul vine cu un număr mare de legături la biblioteci în C (vala-girs, vala-extra-vapis). Programele Vala sunt traduse în reprezentare C și apoi compilate de un compilator standard C. Este posibil să rulați programe în modul script.

Lista modificărilor:

  • S-a adăugat suport suplimentar pentru cuvântul cheie params pentru constructorii clasa Foo{ public Foo(params string[] args){ foreach (var arg în args) print(arg); } }
  • codegen:
    • Suport îmbunătățit pentru constructorii de structuri SimpleType (de exemplu, folosit pentru a lega typedef uint32_t people_inside; din C) [SimpleType] [CCode (cname = "people_inside")] public struct PeopleInside : uint32 {}
    • Gestionare îmbunătățită a atributului „NoWrapper”.
    • CCode.type_cname și get_ccode_type_name() sunt permise pentru clase.
    • G_TYPE_INSTANCE_GET_CLASS/INTERFACE este întotdeauna folosit pentru simboluri externe.
    • Folosit g_boxed_free în free-wrapper pentru a aloca GLib.Value pe heap.
    • S-a remediat o scurgere de memorie în timpul unboxing implicit a GLib.Value (un container universal de orice tip de valoare).
    • S-a remediat o scurgere de memorie la mutarea unei structuri alocate în heap într-o stivă.
    • Se asigură moștenirea destructorului structurii părinte
    • Recuperarea corectă a simbolului_referinței expresiilor turnate imbricate a fost îmbunătățită.
    • S-au eliminat toate aparițiile imbricate ale CCodeCastExpression.
    • S-a oprit apelarea incorect la handlerul de semnal implicit.
    • „string.h” conectat pentru strcmp() (profil POSIX, mod în care Vala generează cod folosind doar biblioteca standard C).
  • Vala:
    • Detectare îmbunătățită a fișierelor sursă pachet duplicat.
    • Câmpurile/proprietățile GtkChild trebuie să fie declarate neproprietate.
    • Reatribuirea câmpului/proprietății GtkChild este interzisă.
    • Lambda a fost aplicată o condiție mai strictă la delegarea unei sarcini.
    • Este interzisă utilizarea structurilor SimpleType de unică folosință.
    • GLib.Value unboxing asigură că valoarea neproprietă este returnată.
    • Turnarea GLib.Value într-o structură/tip simplu nullabil este interzisă.
    • S-a adăugat verificarea argumentelor tip în tipurile de bază/clasa/precondițiile de interfață.
    • Capturarea parametrilor/variabilelor va_list este interzisă.
    • Genericurile care conțin un pointer către o structură trebuie să fie turnate la tipul corect atunci când sunt accesate pentru a evita C UB.
    • Inferența de tip implementată pentru „în” în interiorul enumerației.
    • Verificarea contextului îmbunătățită pentru atribuirea câmpului care poate fi scris.
    • Include "stdlib.h" pentru Enum.to_string() (POSIX).
    • Source_reference corect este setat pentru variabilele implicite „this” și „result”
    • A furnizat un mesaj de eroare pentru un operand intern nevalid al expresiilor unare.
  • Сodewriter: S-a oprit adăugarea finalului „;” după corpul WithStatement.
  • Girparser:
    • Este furnizată procesarea unui delegat anonim care nu este susținut de o metodă sau semnal virtual.
    • S-au aplicat metadatele „delegate_target” pentru metode și parametri
    • Aplicați metadatele „destroy_notify_cname” la câmpuri
    • Aplicați metadatele „type_get_function” pentru clase și interfețe
    • Setați CCode.type_cname pentru clase dacă nu este implicit.
  • girwriter: Se asigură că sunt scrise elementele parametrului instanței.
  • girwriter: Ieșire implicită de gestionare a semnalului implementată.
  • libvaladoc/html: a eliminat sortarea câmpurilor de structură pentru a lăsa ordinea inițială la generarea documentației html valadoc.org
  • libvaladoc: Asigurați-vă că valorile pentru Api.Class.is_compact sunt preluate corect
  • libvaladoc: S-a adăugat un wrapper pentru biblioteca graphviz „agedge”.
  • Legături:
    • Remedieri minore la generarea de legături: 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. siguranță, libxml-2.0
    • gdk-pixbuf-2.0: Remediați Pixbuf.save_to_streamv_async()
    • gio-2.0: PollableOutputStream.write*_nonblocking() corecție de legare
    • gio-2.0,gtk+-3.0,gtk4: atributele explicite de tip c ale parametrilor va_list sunt eliminate
    • gio-2.0: Invocatorul lipsă selectat pentru unele metode AppInfo/File.*()
    • glib-2.0: S-au adăugat metode convenabile GLib.[S]List.is_empty() pentru non-null
    • glib-2.0: Legarea funcției assert_cmp* [#395]
    • glib-2.0: Tip de câmp OptionEntry.flags îmbunătățit
    • glib-2.0: PtrArray este acum o subclasă a GenericArray
    • gstreamer-1.0: CCode.type_id al MiniObjectului este setat la G_TYPE_BOXED [#1133]
    • gtk+-2.0,javascriptcoregtk-4.0: Utilizarea corectată a atributului CCode.type_cname
    • gtk+-3.0,gtk4: S-au remediat unele valori și parametri de returnare a delegatului
    • gtk4: Actualizat la versiunea 4.0.2.

Sursa: opennet.ru

Adauga un comentariu