Выйшла новая версія кампілятара для мовы праграмавання 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