Можно ли использовать Vala без GObject? - PullRequest
15 голосов
/ 04 марта 2012

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

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

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

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

Ответы [ 3 ]

9 голосов
/ 04 марта 2012

Существует несколько других профилей Vala, таких как Dova и Posix.

5 голосов
/ 22 сентября 2016

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

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

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

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

В основном он охватывает все концепции, присутствующие в GObject, такие как:

  • классы
  • свойства
  • наследование
  • делегаты
  • асинхронные методы
  • подсчет ссылок (который является ручным в C + GObject и автоматический aka ARC в Vala)
  • тип безопасности объектов
  • generics
  • вероятно, намного больше ...

Все эти концепции могут быть реализованы без использования 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-кода.

3 голосов
/ 09 августа 2012

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

...