Можно ли использовать Vala без GObject?

Я новичок в Вале. Я не знаком с GObject. Насколько я понимаю, GObject был выделен из проекта GLib из GNOME. Исправьте меня, если я ошибаюсь.

Мне очень нравится синтаксис и реализация Vala, но я не намерен писать настольные приложения для GNOME.

Я также знаю (думаю, знаю), что у Валы нет стандартной библиотеки, кроме самой GObject.

Итак, мой вопрос: может ли Vala использоваться без GObject, и если это возможно, можно ли его использовать (есть ли оптимальные и поддерживаемые базовые библиотеки для таких распространенных вещей, как преобразования типов, математика, манипуляции с строками, буферы и т.д.)?

Ответы

Ответ 1

Есть и другие профили Vala, такие как Dova и Posix.

Ответ 2

TL;DR: я рекомендую использовать Vala с GLib/GObject, потому что он был создан поверх них.

Хотя могут быть альтернативные профили для valac, они либо незакончены, либо устарели.

Вся суть Vala заключается в уменьшении количества шаблона, необходимого для записи GLib и Gtk + приложений в C.

Он также добавляет некоторые приятные другие улучшения по сравнению с C, такие как строка и массив, являющиеся простыми типами данных, а не указателями с ошибкой.

В основном он охватывает все концепции, представленные в GObject, например:

  • Классы
  • Свойства
  • наследование
  • делегаты
  • методы async
  • подсчет ссылок (который является справочным в C + GObject, а также автоматическим aka 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 + - графический инструментарий UI на основе GLib + GObject + GIO + others
  • GNOME - это среда рабочего стола, основанная на всех технологиях "G" .
  • Вала - это язык программирования на высоком уровне, предназначенный для уменьшения плиты котла, используемой для использования библиотек "G" на языке C.

GTK + изначально был получен из GIMP и с тех пор был разделен на различные библиотеки "G" , которые сегодня являются основой для GNOME.

Vala также имеет очень мощные механизмы привязки, чтобы упростить запись так называемых файлов "VAPI" для любой библиотеки C.

При правильных привязках к VAPI вам не нужно беспокоиться о ручном управлении памятью, указателях, нулевом завершении строк и массивов и некоторых других утомительных вещах, которые затрудняют запись правильного кода C.

Ответ 3

Вот еще один профиль, который вы можете использовать Aroop. (Обратите внимание, что он все еще находится в тяжелом развитии). Надеюсь, это хорошо, если вам нужна высокая производительность. Пожалуйста, ознакомьтесь с здесь.