Вийшла нова версія компілятора мови програмування Vala 0.50.4. Також була оновлена гілка з довгостроковою підтримкою (LTS) Vala 0.48.14 (упаковується для Ubuntu 18.04) та експериментальна гілка Vala 0.51.3.
Мова 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 (універсальний контейнер будь-якого типу).
- Виправлено витік пам'яті під час переміщення heap-allocated структури в stack.
- Забезпечено успадкування деструктора батьківської структури
- Налагоджено правильне отримання symbol_reference вкладених cast-виразів.
- Видалено всі вкладення CCodeCastExpression.
- Припинено некоректний виклик оброблювача сигналів за промовчанням.
- Під'єднаний «string.h» для strcmp() (POSIX профайл, режим при якому 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: Припинено додавання завершального «;» після тіла здержавою.
- 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