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] kiryl.livejournal.com 2009-01-26 09:03 am (UTC)(link)
Язык -- это инструмент. Для каждого инструмента есть область применения. Если проект не тривиален, использование нескольких языком может упростить проект и уменьшить объем работы. К примеру, обрабатывать строки на C -- дело неблагодарное, но для низкоуровневой работы и участков критичных к времени выполнения он подходит отлично. Так что не нужно фанатизма.
(deleted comment)

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

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

[identity profile] kiryl.livejournal.com 2009-01-26 10:59 am (UTC)(link)
С другой стороны сейчас появилась куча domain-specific language, которые очень удобны для решения узкого круга задач.

[identity profile] g-rub.livejournal.com 2009-01-26 11:09 am (UTC)(link)
Э, нет. Предыдущая реплика была о проекте для конечного заказчика а не о языке высокого уровня. Для такого проекта своя библиотека регекспов -- бешеный оверкилл.

Для языка программирования -- вероятно, другой расклад. ЯП уровня питона и руби проектировать не доводилось пока, поэтому ничего тут не скажу в пределах своей компетенции :)

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

[identity profile] metaclass.livejournal.com 2009-01-26 11:19 am (UTC)(link)
Почему библиотека регэкспов для ЯП это нормально, а библиотека GUI - нет? Я подозреваю, потому что авторы языков любят писать алгоритмы, но не любят рисовать картинки для пользователей. :)

[identity profile] g-rub.livejournal.com 2009-01-26 11:31 am (UTC)(link)
Возможно и поэтому.
А возможно -- потому что качественной реализации регекспов на С нету, а качественная реализация в перле встроена в ядро интерпретатора, а не вынесена в отдельную либу.

Для графических библиотек дела обстоят ровно наоборот.

[identity profile] kiryl.livejournal.com 2009-01-26 10:56 am (UTC)(link)
Если декомпозиция задачи проведена грамотно, а не серией костылей "чтоб работало", то поддержка тоже упростится.
(deleted comment)

[identity profile] kiryl.livejournal.com 2009-01-26 11:20 am (UTC)(link)
Что сложнее поддерживать взаимодействие с другим языком(инструментом) и код в 50-100 строк на этом языке или код в 1000+ строк на основном языке?

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

[identity profile] g-rub.livejournal.com 2009-01-26 11:32 am (UTC)(link)
>> вернее один раз сбилдить на втором и забыть

Что как бы и делается при реализации "биндингов" из других языков к Qt или GTK.

[identity profile] metaclass.livejournal.com 2009-01-26 11:35 am (UTC)(link)
У меня еще ни в одном проекте не было, чтобы GUI-контролы не требовали переделок. Так что тут изолировать не получится.
(deleted comment)

[identity profile] g-rub.livejournal.com 2009-01-26 11:47 am (UTC)(link)
Изначально речь шла не о "сложном UI" а о языках общего назначения и типовых задачах.

Определение "сложного UI" в студию -- тогда можно посмотреть и поискать. В целом моя область интересов с UI не пересекается.

Но из общей логики очевидно, что для сложных (=нетиповых) задач рассчитывать на функциональность типовых библиотек странно. Независимо от того, как эта функциональность реализована в конкретном случае -- через биндинг или через "родную" библиотеку.

[identity profile] metaclass.livejournal.com 2009-01-26 11:49 am (UTC)(link)
В целом моя область интересов с UI не пересекается
Я подозреваю, что это точно так же для всех остальных комментаторов в этом посту. Хотел написать отдельный пост чтобы собрать статистику, кто сколько гуя нарисовал, но не могу сформулировать корректно вопрос.

[identity profile] g-rub.livejournal.com 2009-01-26 12:09 pm (UTC)(link)
Ха, так в этом и проблема.
Потому что попытка универсально оценить языки с позиции представлений о гуестроении некорректна по определению.

Области применения ЯП с точки зрения интерфейса -- это не только GUI, но и веб, и консольные, и серверные приложения. Качество внешнего интерфейса -- важно, но и оно далеко не всегда является первостепенной задачей (причем для упомянутых выше приложений критерии качества интерфейса будут кардинально разные).

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

Отсюда два логичных вывода
1) Разработчики ЯП не очень озабочены созданием уникального и сверхнавороченного GUI-инструментария, потому что спектр применений этого инструментария существенно уже спектра применения ЯП.
2) Обобщенная критика ЯП, основанная на точке зрения лишь одного сектора его применения, вызовет закономерный приток возражений со стороны разработчиков, использующих критикуемые ЯП в других целях. Причем оппонентов абсолютно закономерно будет больше чем сторонников.
(deleted comment)

[identity profile] metaclass.livejournal.com 2009-01-26 12:08 pm (UTC)(link)
Да, уже сталкивался, что приходилось править связь между проектом и либой после выхода новой версии.

[identity profile] vp.livejournal.com 2009-01-26 12:44 pm (UTC)(link)
Только в ОЧЕНЬ простых случаях, если не требуется одновременной отладки и т.п.

[identity profile] metaclass.livejournal.com 2009-01-26 12:55 pm (UTC)(link)
"GUI требующий отладки никто не пишет". :%)

[identity profile] g-rub.livejournal.com 2009-01-26 12:55 pm (UTC)(link)
В любом хорошо спроектированном случае, в т.ч. и сложном.

[identity profile] metaclass.livejournal.com 2009-01-26 12:59 pm (UTC)(link)
И вызовы между кодом на разных языках нормально понимаются отладчиками?

[identity profile] g-rub.livejournal.com 2009-01-26 01:13 pm (UTC)(link)
Проектировать надо так, чтобы была возможность изначально отладить все по частям, а затем протестировать и отладить сборный результат как "черный ящик" :)

(no subject)

[identity profile] metaclass.livejournal.com - 2009-01-26 13:23 (UTC) - Expand

(no subject)

[identity profile] g-rub.livejournal.com - 2009-01-26 13:56 (UTC) - Expand
(deleted comment)

(no subject)

[identity profile] g-rub.livejournal.com - 2009-01-26 14:19 (UTC) - Expand

(no subject)

[identity profile] vp.livejournal.com - 2009-01-26 14:18 (UTC) - Expand

(no subject)

[identity profile] g-rub.livejournal.com - 2009-01-26 14:28 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2009-01-26 14:41 (UTC) - Expand

(no subject)

[identity profile] g-rub.livejournal.com - 2009-01-26 14:45 (UTC) - Expand

(no subject)

[identity profile] blackyblack.livejournal.com - 2009-01-26 18:29 (UTC) - Expand

(no subject)

[identity profile] vp.livejournal.com - 2009-01-26 18:46 (UTC) - Expand

(no subject)

[identity profile] blackyblack.livejournal.com - 2009-01-26 19:04 (UTC) - Expand

(no subject)

[identity profile] vp.livejournal.com - 2009-01-26 14:50 (UTC) - Expand

(no subject)

[identity profile] g-rub.livejournal.com - 2009-01-26 15:17 (UTC) - Expand