TL; DR: я рекомендую использовать Vala с GLib / GObject, потому что он был разработан на их основе.
Хотя для valac могут быть альтернативные профили, они либо незакончены, либо устарели.
Весь смысл Vala в том, чтобы уменьшить количество шаблонов, необходимых для написания приложений GLib и Gtk + на C.
Он также добавляет некоторые приятные другие улучшения по сравнению с C, например, строки и массивы являются простыми типами данных, а не указателями, подверженными ошибкам.
Он в основном охватывает все концепции, присутствующие в GObject, например:
- классы
- характеристики
- наследование
- делегаты
- асинхронные методы
- подсчет ссылок (который выполняется вручную в C + GObject и автоматическим, также известным как ARC в Vala)
- типовая безопасность объектов
- дженерики
- наверное, намного больше ...
Все эти концепции могут быть реализованы без использования GObject / GLib / Gio, но это означало бы в основном переписать GObject / GLib / Gio, что не имеет особого смысла.
Если вы не хотите писать приложения с графическим интерфейсом, GLib также можно использовать для написания консольных приложений, использование GIO или GTK + не является обязательным в Vala, приложения также работают на автономном сервере.
Я думаю, что в Qt даже есть некоторые усилия, чтобы в конечном итоге переключиться на основной цикл GLib, что значительно упростило бы взаимодействие Qt и GLib.
Хорошим примером фреймворка, использующего GLib, является GStreamer, который также используется в различных средах рабочего стола.
В итоге:
- GLib - это базовая кроссплатформенная платформа для приложений.
- GObject - это объектная система, используемая экосистемой GLib.
- GIO - это абстракция ввода-вывода (сеть, файловая система и т. Д.), Основанная на GLib + GObject.
- GTK + - это набор инструментов для графического пользовательского интерфейса, основанный на GLib + GObject + GIO + других
- GNOME - это среда рабочего стола, основанная на всех технологиях "G".
- Vala - это язык программирования высокого уровня, предназначенный для уменьшения количества шаблонов, необходимых для использования библиотек "G" из языка C.
Изначально GTK + пришел из GIMP и с тех пор был разделен на различные библиотеки "G", которые сегодня составляют основу GNOME.
Vala также имеет очень мощные механизмы привязки, упрощающие запись так называемых файлов "VAPI" для любого типа библиотеки C.
С правильными привязками VAPI вам не нужно беспокоиться о ручном управлении памятью, указателях, нулевом завершении строк и массивов и некоторых других утомительных вещах, которые затрудняют написание правильного кода C.
person
Jens Mühlenhoff
schedule
22.09.2016