metaclass: (Default)
metaclass ([personal profile] metaclass) wrote2009-01-26 09:42 am

Кстати, насчет "биндингов"

В дискуссиях о GUI для всяких эзотерических и не очень языков постоянно всплывает тема "биндингов" к ним для QT, GTK и прочего.

Так вот, мое имхо состоит в том, что язык, у которого нет собственной GUI библиотеки - неполноцен в принципе. Вот, к примеру, захочу я расширить функциональность некоего GUIшного контрола или написать свой. Или просто разобраться в тонкостях его работы, типа "когда вызывается такое-то событие". Если GUIшная либа писана на том же языке на котором я работаю, мне не нужно переключать мозг на чужеродный язык и его стиль, чтобы работать с ней. А если нет - начинается всякая хрень, типа самого это биндинга, единственное назначение которого - гонять туда-сюда вызовы между одним и вторым языком.

Оно конечно полезно, знать несколько языков. Но вот для работы эти переключения между языками не сильно полезны.

PS: Вообще эта идея меня посетила, когда я думал насчет того, как наиболее естественным образом выглядел бы GUI для Хаскеля. Вообще, проблема сама по себе более общая, чем GUI - я ее для себя сформулировал так "Как хранить/обрабатывать в языке общего назначения некую структуру данных, если этот язык для нее плохо подходит". Обычно делают отдельные структуры/языки для разных предметных областей - SQL для баз, декларативные иерархические описания для всяких GUI-шных и прочих форм, для них отдельные редакторы-дизайнеры.
Вот именно "отдельность" мне и не нравится - что-то раздражает переключать контекст мышления, когда надо к программе приделать GUI, взаимодействие с БД, или печатную форму.
Да и вообще работа с GUI может выражаться в языке каким-нибудь другим, гораздо более естественным для него способом, нежели последовательное создание контролов и чтение/запись их свойств. Тот же Хаскель, по моему мнению, вообще GUI должен генерировать автоматически при компиляции, исходя из информации о типах.

[identity profile] ugenk.livejournal.com 2009-01-26 08:04 am (UTC)(link)
А xlib - это собственная C'шная библиотека? :)

[identity profile] metaclass.livejournal.com 2009-01-26 08:07 am (UTC)(link)
Это часть сервиса, предоставляемого операционной системой. Очевидно, что нормальные языки, если на них писать GUI, должны обращаться напрямую к ней, а не через еще пару слоев библиотек на других языках. По-моему, если на языке нельзя написать графическую библиотеку, непосредственно работающую с графическими средствами ОС - такой язык назвать полноценным сложно.
ext_659950: (Default)

[identity profile] perplexed-bear.livejournal.com 2009-01-26 09:15 am (UTC)(link)
С этим можно поспорить. Т.е. к примеру в том же Линуксе GTK и QT стали настолько привычными, что де-факто воспринимаются как часть системы, и биндинги к ним рассматриваются именно как интерфейс к ОС.

Что касается возможности написать граф.библиотеку, непосредственно работающую с ОС, то
    возможность
      есть у всех. А вот
        написанные
          библиотеки - не у всех. Тем не менее, язык - полноценный, нет?
ext_659950: (Default)

[identity profile] perplexed-bear.livejournal.com 2009-01-26 09:16 am (UTC)(link)
Ой, что это за жуть получилась с форматированием...

[identity profile] atzkey.livejournal.com 2009-01-26 09:28 am (UTC)(link)
[прилетел маяковский и отформатировал этот комментарий]

Толпы лінупсоідов по религиозным причинам стараются избавится от gtk или от qt или от обеих библиотек. И вообще не стоит их как важную часть ОС рассматривать.

[identity profile] metaclass.livejournal.com 2009-01-26 09:32 am (UTC)(link)
Вот судя по всему - нет возможности, раз не пишут, а вместо этого используют другие библиотеки.
ext_659950: (Default)

[identity profile] perplexed-bear.livejournal.com 2009-01-26 09:39 am (UTC)(link)
Ну так действует принцип лени и повторного использования - зачем писать, если можно заюзать.
(deleted comment)

[identity profile] wildman.livejournal.com 2009-01-28 06:15 am (UTC)(link)
http://eric-ide.python-projects.org/

[identity profile] g-rub.livejournal.com 2009-01-26 10:21 am (UTC)(link)
>> Очевидно, что нормальные языки, если на них писать GUI, должны обращаться напрямую к ней, а не через еще пару слоев библиотек на других языках

Из чего это очевидно? Если только мы не пишем GUI с каким-то супер-адским откликом по времени?

И чем конкретно оправдана идея "каждому языку -- свой гуевый велосипед со своими багами и своим отдельным суппортом"?

[identity profile] metaclass.livejournal.com 2009-01-26 10:50 am (UTC)(link)
Тем, что если для языка нет своей графической библиотеки: а) авторы языка болт хотели ложить на GUI; б) Язык каким-то образом ограничивает написание сложных вещей.
Я не уверен, что такой язык является хорошим выбором для писания программ со сложным GUI.

[identity profile] sanitarro.livejournal.com 2009-01-26 11:02 am (UTC)(link)
а) нет, потому что если бы авторы языка хотели ложить болт на GUI они бы не писали биндинги к графическим либам.
б) нет, потому что грамотный биндинг подразумевает, что вся графическая сложность библиотеки доступна из рассматриваемого языка. Если не хватает сложности библиотеки -- тогда проблема не в языке а именно в либе.
в) исходно фраза про "сложность ГУИ" не звучала, и "проектами со сложным ГУИ" произвольный язык программирования мерять глупо (ибо ГУИ -- лишь одна из возможных областей задач, далеко не всегда обязательная). Но представим, что перед нами стоит такой проект, причем всю логику писать оптимально именно на языке который мы выбрали. Что ж, большинство языков поддерживают тот или иной механизм интеграции с С-шным кодом, поэтому в случаях тяжелого и сложного ГУИ ничто не запрещает напрямую слинковаться с Xlib и написать свою прослойку, делающую сложные и редкие трюки.

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

[identity profile] ugenk.livejournal.com 2009-01-26 10:44 am (UTC)(link)
Та ну :)
xlib к ОС отношения не имеет ;)

// ща начнется холивар :)

[identity profile] metaclass.livejournal.com 2009-01-26 10:56 am (UTC)(link)
А, ну значит и ОС изначально для GUI не предназначена, как и языки, из ее мира пришедшие:)

[identity profile] kiryl.livejournal.com 2009-01-26 11:06 am (UTC)(link)
Нет, это некоторые ОС с GUI в ядре не предназначены ни для чего, кроме GUI. :)

[identity profile] metaclass.livejournal.com 2009-01-26 11:13 am (UTC)(link)
Скажите это пользователям, а то они до сих пор деньги биллу гейтсу несут :)

[identity profile] mend0za.livejournal.com 2009-01-26 01:01 pm (UTC)(link)
Xlib - не часть сервиса предоставляемого ОС. Не более часть, чем любая другая 3rd-party библиотека.

Unix-like ОС - это компилятор Си, ядро и libc. Всё остальное - сторонние компоненты.

Более того, не единственный способ отображения графики. Я бы ещё попытался согласится если бы помянули FrameBuffer как сервис ОС (благо что fb предоставляется ядром).

Упомянутые графические тулкиты (Qt, Gtk, WxWidgets) в качестве backend для отрисовки могут что угодно (Win32, Xlib, Framebuffer, Cocoa или даже друг друга - для WxWidgets/GTK).

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

Совершенно не очевидно, учитывая что Xlib - всего лишь just another one method of drawing primitives. Следовательно указанная "универсальная графическая библиотека языка X" должна быть портирована на как можно более низкоуровневые backends ВСЕХ ПОДДЕРЖИВАЕМЫХ ПЛАТФОРМ языка, следуя вашей логике.

[livejournal.com profile] grub правильно отметил, что тут наблюдается дальнейшая компонентизация и растаскивание по отдельным квартирам отдельных задач.

Дальнейшее развитие выч. техники позволяет делать всё более сложные вещи, используя методы недавно казавшиеся слишком тяжёлыми и нерациональными.

It's evolution, baby.

Исправлено :)

[identity profile] mend0za.livejournal.com 2009-01-26 01:27 pm (UTC)(link)
Xlib - не часть сервиса предоставляемого ОС. Не более часть, чем любая другая 3rd-party библиотека.

Unix-like ОС - это компилятор Си, ядро и libc. Всё остальное - сторонние компоненты.

Более того, не единственный способ отображения графики. Я бы ещё попытался согласится если бы помянули FrameBuffer как сервис ОС (благо что fb предоставляется ядром).

Упомянутые графические тулкиты (Qt, Gtk, WxWidgets) в качестве backend для отрисовки могут что угодно (Win32, Xlib, Framebuffer, Cocoa или даже друг друга - для WxWidgets/GTK).

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

Совершенно не очевидно, учитывая что Xlib - всего лишь just another one method of drawing primitives. Следовательно указанная "универсальная графическая библиотека языка X" должна быть портирована на как можно более низкоуровневые backends ВСЕХ ПОДДЕРЖИВАЕМЫХ ПЛАТФОРМ языка, следуя вашей логике.

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

Дальнейшее развитие выч. техники позволяет делать всё более сложные вещи, используя методы недавно казавшиеся слишком тяжёлыми и нерациональными.

It's evolution, baby.