Вышла новая версия транслятора языка программирования Vala 0.54.0. Язык Vala является объектно-ориентированным языком программирования, предоставляет синтаксис, подобный языкам C# или Java. Код на Vala транслируется в программу на языке C, которая, в свою очередь, компилируется штатным СИ компилятором в бинарный файл и выполняется со скоростью приложения, откомпилированного в объектный код целевой платформы. Имеется возможность запуска программ в режиме сценария. Язык развивается под эгидой проекта GNOME. В качестве объектной модели используется Gobject (Glib Object System). Код компилятора распространяется под лицензией LGPLv2.1.
В языке имеется поддержка интроспекции, лямбда-функций, интерфейсов, делегатов и замыканий, сигналов и слотов, исключений, свойств, ненулевых типов, выведения типов для локальных переменных (var). Управление памятью осуществляется на основании подсчёта ссылок. Для языка разработана библиотека обобщённого программирования libgee, предоставляющая возможность создания коллекций для пользовательских типов данных. Поддерживается перечисление элементов коллекций, при помощи оператора foreach. Программирование графических программ осуществляется при помощи графической библиотеки GTK.
В комплекте поставляется большое количество биндингов к библиотекам на языке C. Транслятором Vala осуществляется поддержка языка Genie, который предоставляет аналогичные возможности, но с синтаксисом, вдохновлённым языком программирования Python. На языке Vala написаны такие программы как почтовый клиент Geary, графическая оболочка Budgie, программа организации фото- и видео- файлов Shotwell и другие. Язык активно используется при разработке дистрибутива Elementary OS.
Основные новшества:
- Добавлена поддержка делегатов с переменным числом параметров;
- Добавлен профиль LIBC, который является синонимом к профилю POSIX;
- Доработана генерация в режиме профиля POSIX;
- Добавлена возможность объявления переменных которые могут иметь нулевое значение с выведением типов (var?);
- Добавлена возможность объявления классов запрещаемых для наследования (sealed);
- Добавлен оператор безопасного доступа к полям класса, которые могут быть равными null (a.?b.?c);
- Разрешена инициализация значением null содержимого структур (const Foo[] BARS = { { “bar”, 42 }, null };);
- Для константных массивов запрещена операция resize();
- Добавлен вывод предупреждения при попытке приведения вызова функции к void ((void)not_void_func(););
- Убрано ограничение на типы элементов GLib.Array;
- Исправлено наследование прав владения “unowned var” в выражении foreach();
- Биндинг к webkit2gtk-4.0 обновлён до версии 2.33.3;
- Биндинг к gstreamer обновлён до версии 1.19.0+ git master;
- Биндинг к gtk4 обновлён до версии 4.5.0~e681fdd9;
- Биндинг к gtk+-3.0 обновлён до версии 3.24.29+f9fe28ce
- Биндинг к gio-2.0,glib-2.0 обновлён до версии 2.69.0;
- Для linux добавлены биндинги к SocketCAN;
- Исправления в биндингах к glib-2.0, gio-2.0, gstreamer-rtp-1.0, javascriptcoregtk-4.0, gobject-2.0, pango, linux, gsl, rest-0.7, libusb, libusb-1.0, pixman-1, webkit2gtk-web-extension-4.0, x11, zlib, gnutls;
- Удалены биндинги gedit-2.20 и webkit-1.0;
- Обновлены биндинги основанные на GIR;
- В систему тестирования добавлена возможность проверки генерируемого C-кода;
- Доработаны girparser, girwriter, valadoc, libvaladoc/girimporter;
- Исправлены накопившиеся ошибки и недоработки различных компонентов компилятора.