LINUX.ORG.RU

GObject intospection

 , ,


1

3

Тут пишут, что можно написать свой код в стиле GObject, то можно будет, скажем, в питоне использовать этот код без дополнительных обвязок на С, просто использовав средства gobject introspection. Кто-нибудь пробовал?

Ответ на: комментарий от meliafaro

в первую очередь

Странно, что гтк только с третьей версии перешел на полную «гобъектность». Возможно он все-таки делался для управления памятью, для сигналов и всего такого, а не только лишь для интроспекции.

anonymous ()
Ответ на: комментарий от anonymous

И для всего этого, разумеется. Я же написал

в первую очередь

Базовый низкоуровневый стек на Си, а дальше лепи из этих кирпичей что хочешь на своём любимом ЯП.

Поэтому биндинги к GTK/GLib есть в любом D. Остальные тулкиты в пролёте.

meliafaro ★★★★★ ()
Последнее исправление: meliafaro (всего исправлений: 1)
Ответ на: комментарий от meliafaro

Поэтому биндинги к GTK/GLib есть в любом D. Остальные тулкиты в пролёте.

Справедливости ради: https://github.com/w0rp/dqt

Если набор библиотек популярен, то найдётся тот, кто к нему напишет привязку. Вот то, что можно из питона использовать libvte - заслуга того, что libvte реализует интерфейс для gobject-introspection.

P.S. На самом деле для использования gobject-introspection даже не обязательно использовать GObject (и вообще ООП). Можно просто написать метаданные для экспортируемых функций.

P.P.S. А если не использовать динамическую память, то достаточно стандартного модуля ctype из Питона и gobject-introspection не нужен.

monk ★★★★★ ()
Ответ на: комментарий от anonymous

У Go тоже есть биндинги к QT, хеловордный бинарь весит 40 метров с этими биндами. Ну аналог на GTK всего 20.

на GTK всего 20.

всего

20

Это победа, я щитаю.

anonymous ()
Ответ на: комментарий от monk

Это Go

Есть альтернатива, мострячить хелловроды на QML замест Qt биндов, тогда получается вменяемый размер бинарника.

Я прошу прощения, немного дал дезинформации. Вот полное исследование (исключая QML) для Линукс. Приложение создаёт окно с белым фоном и всё. Где binary — размер скомпилированного бинарника, а stripped — этот бинарник порезанный strip --strip-all

Fyne (EFL)

binary   7.9MB
stripped 6.0MB
GLFW + GL4.5 core

bianry   3.5MB
stripped 2.2MB
GTK3

binary   14.0MB
stripped  9.7MB
Qt Go bindings

binary   46.0MB
stripped 24.0MB
X Go bindings

binary   3.3MB
stripped 2.4MB

Кончено X и GLFW не умеют в текст, например, т.е. они тут не совсем честно.

Прикол в том, что интерфейс взаимодействи Win32 API (Карл!) написан полностью на Go. Ни строчки Си. И бинд, лично мне, нужен только для создания .lnk файла и то, потому что разбираться в этих ком, или как их там, форматах довольно хлопотно.

kostyarin_ ()

Кто-нибудь пробовал?

Пробовал, даже под виндой в продакшене =-O
CMake-скрипты брал из проекта poppler: https://gitlab.freedesktop.org/poppler/poppler/tree/master/cmake/modules

Под GNU/Linux отлично работает, шикарно.

Под виндой с бубнами собирается. Там при генерации introspection-описаний собираются автоматом мини-бинарики, которые дампят информацию о классах. Вот эти мини-бинарики не хотели линковаться, приходилось им подкладывать библиотеки-зависимости (точнее линки создавать). Но допускаю, проблема в скриптах от poppler или где-то я сам не досмотрел.

Tayler ★★ ()