Абнаўленне кампілятара мовы праграмавання Vala 0.50.4

Выйшла новая версія кампілятара для мовы праграмавання Vala 0.50.4. Таксама была абноўлена галінка з доўгатэрміновай падтрымкай (LTS) Vala 0.48.14 (упакоўваецца для Ubuntu 18.04/0.51.3) і эксперыментальная галінка Vala XNUMX.

Мова Vala з'яўляецца аб'ектна-арыентаванай мовай праграмавання, падае сінтаксіс, падобны мовам C# або Java. У якасці аб'ектнай мадэлі выкарыстоўваецца Gobject (Glib Object System). Кіраванне памяццю ажыццяўляецца па валоданні (owned/unowned спасылкі) або з дапамогай ARC (падстаноўка дэструктараў і дэкрэментаў лічыльнікаў спасылак аб'ектаў на этапе кампіляцыі).

У мове маецца падтрымка интроспекции, лямбда-функцый, інтэрфейсаў, дэлегатаў і замыканняў, сігналаў і слотаў, выключэнняў, уласцівасцяў, ненулявых тыпаў, выводзіны тыпаў для лакальных зменных. У камплекце пастаўляецца вялікая колькасць біндзінгаў да бібліятэк на мове C (vala-girs, vala-extra-vapis). Праграмы на мове Vala транслююцца ва ўяўленне на мове C, а затым кампілююцца штатным кампілятарам для мовы C. Маецца магчымасць запуску праграм у рэжыме сцэнара.

Спіс змен:

  • Дададзеная дадатковая падтрымка ключавога слова params для канструктараў class Foo{ public Foo(params string[] args){ foreach (var arg in args) print(arg); } }
  • codegen:
    • Палепшана падтрымка канструктараў SimpleType struct (напрыклад выкарыстоўваецца каб забіндзіць typedef uint32_t people_inside; з C) [SimpleType] [CCode (cname = "people_inside")] public struct PeopleInside : uint32 {}
    • Палепшана апрацоўка аттрыбута "NoWrapper".
    • Для класаў дазволены CCode.type_cname і get_ccode_type_name().
    • Заўсёды выкарыстаны G_TYPE_INSTANCE_GET_CLASS/INTERFACE для вонкавых знакаў.
    • Выкарыстаны g_boxed_free у free-wrapper для размяшчэння GLib.Value у кучы.
    • Выпраўлена ўцечка памяці падчас няяўнага анбоксінгу GLib.Value (універсальны кантэйнер любога value тыпу).
    • Выпраўлена ўцечка памяці падчас перасоўвання heap-allocated структуры ў stack.
    • Забяспечана ўспадкоўванне дэструктара бацькоўскай структуры
    • Наладжана правільнае атрыманне symbol_reference укладзеных cast-выразаў.
    • Выдалены ўсе ўкладзеныя ўваходжання CCodeCastExpression.
    • Спынены некарэктны выклік апрацоўшчыка сігналаў па змаўчанні.
    • Падлучаны «string.h» для strcmp() (POSIX прафайл, рэжым пры якім Vala генеруе код выкарыстоўваючы толькі стандартную З бібліятэку).
  • Vala:
    • Палепшана выяўленне дублікатаў зыходных файлаў пакетаў.
    • Палі/уласцівасці GtkChild павінны быць абвешчаныя як unowned.
    • Забаронена перапрызначэнні поля/уласцівасці GtkChild.
    • Ужыта стражэйшая ўмова для лямбды пры дэлегаванні прызначэння.
    • Забаронена ўжыванне аднаразовых структур SimpleType.
    • У GLib.Value unboxing забяспечаны вяртанне unowned-зніжэння.
    • Забаронена прывядзенне GLib.Value да тыпу nullable struct/simple.
    • Дададзена праверка аргументаў тыпу ў базавых тыпах/прадумов класа/інтэрфейсу.
    • Забаронены захоп параметраў/пераменных va_list.
    • Джэнерыкі, якія змяшчаюць паказальнік на структуру, павінны быць прыведзены да патрэбнага тыпу пры доступе для пазбягання З UB.
    • Рэалізаваны вывад тыпаў для "in" ўнутры enum.
    • Палепшана праверка кантэксту пры прысваеннях у полі writeable.
    • Падлучаны "stdlib.h" для Enum.to_string() (POSIX).
    • Усталяваны правільны source_reference для няяўных зменных "this" і "result"
    • Забяспечаны вывад паведамлення аб памылцы для недапушчальнага ўнутранага аперанда унарных выразаў.
  • Сodewriter: Спынена даданне завяршальнага «;» пасля цела WithStatement.
  • Girparser:
    • Забяспечана апрацоўка ананімнага дэлегата, не падмацаванага віртуальным метадам ці сігналам.
    • Ужытыя метададзеныя "delegate_target" для метадаў і параметраў
    • Ужытыя метададзеныя "destroy_notify_cname" для палёў
    • Ужытыя метададзеныя "type_get_function" для класаў і інтэрфейсаў
    • Устаноўлены CCode.type_cname для класаў, калі ён не адпавядае значэнню па змаўчанні.
  • girwriter: Забяспечаны запіс элементаў параметраў асобніка.
  • girwriter: Рэалізаваны вывад апрацоўшчыка сігналаў па змаўчанні.
  • libvaladoc/html: Прыбрана сартаванне палёў структур каб пакінуць іх арыгінальны парадак пры генерацыі html дакументацыі valadoc.org
  • libvaladoc: Забяспечана правільнае атрыманне значэнняў для Api.Class.is_compact
  • libvaladoc: Дададзены ўрапер для «agedge» бібліятэкі graphviz
  • Біндзінгі:
    • Дробныя выпраўленні пры генерацыі прывязак: 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. fuse, libxml-4
    • gdk-pixbuf-2.0: Выпраўленне Pixbuf.save_to_streamv_async()
    • gio-2.0: Выпраўленне прывязкі PollableOutputStream.write*_nonblocking()
    • gio-2.0,gtk+-3.0,gtk4: Адкінуты відавочныя аттрыбуты c-тыпу параметраў va_list
    • gio-2.0: Вылучаны адсутны invoker для некаторых метадаў AppInfo/File.*()
    • glib-2.0: Дададзены GLib.[S]List.is_empty() convenience methods for non-null
    • glib-2.0: Біндзінг функцыі assert_cmp* [#395]
    • glib-2.0: Палепшаны тып поля OptionEntry.flags
    • glib-2.0: PtrArray зараз падклас GenericArray
    • gstreamer-1.0: CCode.type_id міні-аб'екта(MiniObject) выстаўляецца як G_TYPE_BOXED [#1133]
    • gtk+-2.0,javascriptcoregtk-4.0: Адкарэктавана выкарыстанне атрыбуту CCode.type_cname
    • gtk+-3.0,gtk4: Выпраўленыя некаторыя значэнні і параметры, якія вяртаюцца дэлегатам
    • gtk4: Абноўлены да версіі 4.0.2.

Крыніца: opennet.ru

Дадаць каментар