Оновлення компілятора мови програмування Vala 0.50.4

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

Додати коментар або відгук