LINUX.ORG.RU
ФорумTalks

[ССЗБ] Какое же говно это наше GTK

 


0

3

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

Архитектурно оно представляет какое-то совершенно нелепое нагромождение классов, недоделанных недоабстракций и длинных списков deprecated функций. Нормального механизма обмена сообщениями между компонентами нет. Декомпозиции на абстрактные интерфейсы не прослеживается.

Компоненты зачем-то разбиты на две группы - оконные и безоконные - между которыми, пролегает такая хорошая, качественная железобетонная стена. Можно даже побиться об неё головой. Вместо того, чтобы на уровне архитектуры дать возможность любому компоненту работать как в отдельном под-окне, так и в окне родителя, предлагаются танцы с бубном EventBox.

Средства для кустомизации компонент наследованием находятся в зачаточном состоянии, а для кустомизации тонкой настройкой в рантайме - и вовсе в противозачаточном. Часть компонент нуждается в разбиении на субкомпоненты, например, ужасный GtkNotebook. Часть компонент просто написана задней лапой. Исходники производят полное впечатление, что перед нами не универсальный тулкит, на котором работает чертова уйма гуёв, а всё тот же костыльный набор виджетов для GIMP-а.

После программирования GUI на gtk, очень хочется тщательно отмыть руки от говна, а затем напиться от безысходности.

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

ну просто из c++ не так просто дёргать функции, так как ооп. FFI уже не поможет, поэтому этот апи и написали.

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

Можно подумать, в плюсах такого нет. Просто оно немножко сокрыто.

В плюсах если хочешь, то можно не танцевать гопак. И это огромный плюс плюсов. Можно сосредоточится именно на своей задаче, а детали и мышиную возню поручить компилятору/библиотеке и т.д. и т.п. При этом, что очень важно, это никак не сказывается на ухудшении производительности, а то и наоборот.

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

Детали реализации все равно такие же «черезодноместные»: ну нарисовали вы в Qt-designer'е интерфейс, но к нему же надо еще и функций понапришлепывать. И не только элементарные обработчики событий, которые и в дизайнере легко назначаются, а всякие функции отображения информации, сообщений и т.п.

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

Детали реализации все равно такие же «черезодноместные»

Не такие же. Ручным преобразованием типов и управлением памятью тут заниматься не нужно. Вызов connect для связи signal'а со slot'ом это не детали реализации, а интерфейс.

Reset ★★★★★
()

Хотел написать развернутый ответ, по каждому пункту, но какой смысл? Всё-равно, ТС, не переваливший порог, сейчас в неадеквате и конструктивного разговора не получится.

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

Ручным преобразованием типов и управлением памятью тут заниматься не нужно

Если уж сравнивать Qt, то делать это надо с gtkmm. Пререкаться с Эдди на тему обезьянего труда бесполезно.

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

Пререкаться с Эдди на тему обезьянего труда бесполезно.

Могу обезьяньим трудом и не заниматься, а использовать ворованный IDL :)

Но хочется же свободных продуктов =)

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

> Кроме того, приведу пример, когда «лезть в недра» удобнее: работа со звуком в OSS наиболее проста, т.к. вы работаете почти на самом низком уровне; работа с RS-232 наиболее проста на сях; и т.д.

Зачем мне кроссплатформенность? Лучше я ещё 5 раз напишу велосипед на C!

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

> Хотел написать развернутый ответ, по каждому пункту

Напиши.

, но какой смысл? Всё-равно, ТС, не переваливший порог, сейчас в неадеквате и конструктивного разговора не получится.

Порог чего?

geekless ★★
() автор топика
Ответ на: комментарий от Yareg

А чем ваша унылая кроссплатформенность спасет меня от велосипедов?

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Reset

Да черт с ним, что он интерпретируемый. Я про синтаксис говорю.

И да: что-то я сомневаюсь, что в питоне будет проще с GUI работать. Все равно ведь все обработчики точно так же придется прописывать.

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

И да: что-то я сомневаюсь, что в питоне будет проще с GUI работать.

Уверяю тебя, количество кода уменьшается на порядок. И это не преувеличение.

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

Вхождения в говно?

Нет, правда, если я не прав, покажи мне, в чем я не прав. Мне действительно интересно.

Пока же у меня складывается ощущение, что, например, ту архитектуру обработки событий, какая есть в gtk, можно было написать только будучи полностью укуренным.

geekless ★★
() автор топика

Средства для кустомизации компонент наследованием находятся в зачаточном состоянии, а для кустомизации тонкой настройкой в рантайме - и вовсе в противозачаточном

О каких средствах идёт речь? О_о

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

> Да этот питон же - вообще жесть какая-то!

Когда такое говорит человек, пишущий GUI на Си, это реально смешно.

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

И да: что-то я сомневаюсь, что в питоне будет проще с GUI работать. Все равно ведь все обработчики точно так же придется прописывать.

Существенно проще и быстрее. Компилировать ничего не надо, колбеки передаются какие угодно, не надо сигнатуры прописывать в connect'ах, к пользовательским данным можно аттачить всё что угодно.

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

> Если уж сравнивать Qt, то делать это надо с gtkmm. Пререкаться с Эдди на тему обезьянего труда бесполезно.

+1, +1

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

>Если уж сравнивать gtkmm, то делать это надо с QtGui

Очевидный фикс

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

> Зачем тебе для гуя компилируемый язык?

угу, по экземляру пистона на каждую маленькую мордочку. а хуле, память нонче дешевая

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

А то. Сейчас даже в сраных нетбуках по 4 гига ставят.

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

> угу, по экземляру пистона на каждую маленькую мордочку. а хуле, память нонче дешевая

Утипути. А в мегабайтах «экземпляр Питона» сколько весит?

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

> > покажи мне, в чем я не прав

Как только тебя отпустят эмоции, так сразу.

Они меня и не брали.

geekless ★★
() автор топика
Ответ на: комментарий от Eddy_Em

>Все равно ведь все обработчики точно так же придется прописывать.

В C магическим образом всё работает? Ты ещё пожалуйся, что программировать надо :)

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

> А в мегабайтах «экземпляр Питона» сколько весит?

а в тормозах?

а в тормозах память мерять не принято

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

> в тормозах гуёв виноват автор, а не питон.

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

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

Теперь это срач о линуксовой графике

В тормозах гуя виноваты сотни слоёв абстракции, затрудняющие вывод картинки на экран.

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

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

Бесспорно, но не забывай, что код (конкретно на компилируемом си) написать гораздо труднее. По мне, так лучше тормозной но реальный, чем быстрый, но в вакууме.

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

> но не забывай, что код (конкретно на компилируемом си) написать гораздо труднее. По мне, так лучше тормозной но реальный, чем быстрый, но в вакууме.

тут все зависит от задачи. просто вопрос звучал как «зачем гуй на компилируемом языке». соответственно и ответ был - для скорости и уменьшения ресурсопотребления.

да и к слову. писать можно и на vala. и голый си в итоге, и от так нелюбимых reset-ом приведений типов спокойно избавиться можно

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

к чему все эти излишние обертки?

Чтоб можно было отрисовать диалог в окне браузера, же!

Кстати, всегда удивляло, почему используешь gtk, а не... Здесь должен быть обширный список из низкоуровневых сишных gui либ, но на ум пришли только Tk и Motif. Кажется, я тебя понимаю.

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

>столько интерфейсов для других языков
А зачем?

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

> Здесь должен быть обширный список из низкоуровневых сишных gui либ

Tk


Оустерхаут плачет горючими слезами.

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

motif немножко «отмер», поэтому и не использую.

Eddy_Em ☆☆☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.