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 должен генерировать автоматически при компиляции, исходя из информации о типах.
ext_659950: (Default)

[identity profile] perplexed-bear.livejournal.com 2009-01-26 07:58 am (UTC)(link)
И что у нас в итоге остаётся?
C
C++
C#
Java
Pascal (Delphi, Lazarus)
Visual Basic
Python
Perl
TCL/TK

И фффсё?

[identity profile] tonal.myopenid.com (from livejournal.com) 2009-01-26 08:40 am (UTC)(link)
Lazarus отпадает, т.к. у него биндинг к GTK если я не ошибаюсь.
У Python и Perl нет своей библтотеки для GUI - только биндинги.
Хотя у всех 3х есть биндинги к виндовым User32 + GDI32 и к *nix-овым Х-ам.
Следует ли их этого заключить, что они являются/не являются полноценными языками?

А если ёрничать, то C++ в составе C++Builder-а не является полноценным языком, т.к. GUI там на delphi писано (VCL). Но если выкинуть на помойку VCL и IDE и добавить то же Qt, то язык становиться вполне полноценным! :)

Да, кстати забыли Oberon и SmallTalk - тама GUI не отделим от языка и IDE. :)
ext_659950: (Default)

[identity profile] perplexed-bear.livejournal.com 2009-01-26 08:52 am (UTC)(link)
Действительно, SmallTalk забыл. Оберон/Component Pascal - под вопросом. Т.е. я не сомневаюсь, что это полноценный язык, но не видно на нём разработок. А если уж так говорить, то и LispWorks сюда по той же причине включать.

[identity profile] tonal.myopenid.com (from livejournal.com) 2009-01-27 06:29 am (UTC)(link)
Мне кажется, что всё таки специализация рулит.
Это значит, что для GUI-ни лучше/проще/быстрее использовать специализированные тулзы, типа дизайнера в Delphi или Qt, в которых можно добавить свои специализированные виджеты/контроли.
Собственно дизайнер - это и есть язык программирования GUI.
Т.е. язык разработки здесь должен давать возможность переопределять стандартное поведение в нужных местах и дописывать свои виджеты с минимальными напрягами.

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

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

Я довольно долго (~10 лет) плотно сидел на делфи + билдер, сейчас перешёл на Python + Qt (~3х лет).
Биндинг очень качественный, с моей точки зрения.
И хотя несколько глюков я таки поймал, большинство было при использовании новых возможностей после перехода на новые версии - т.е. в ещё не достаточно оттестированном коде.

Насчёт сложности интерфейсов.
Первая программа на Python + Qt появилась несколько неожиданно:
Был заказ на разработку небольшой среды в помощь переводчикам специализированных иерархических данных (~100-200мб. в dbf-ах)
Нужно было отобразить исходное дерево, дерево перевода, возможные варианты, специализированная навигация. Деревья должны быть по возможности синхронны при любых манипуляциях.
Был написан прототип на Python + Qt чтобы проще было обсуждать с заказчиком вид и поведение GUI. С прицелом переписать на С++ после утрясения всех деталей для скорости.
Переписывать не понадобилось. Скорость работы прототипа вполне удовлетворила заказчика. :)

Сейчас разрабатывается большая система документооборота - начинали на Delphi, а потом перетащили на Python + Qt - скорость разработки поднялась больше чем в 2 раза. :)

[identity profile] potan.livejournal.com 2009-01-26 02:07 pm (UTC)(link)
Lisp (CLIM), Haskell, Scala.

[identity profile] familom.livejournal.com 2009-01-26 08:01 am (UTC)(link)
Если под "неполноценностью" понимать "не general-purpose", то да.

[identity profile] metaclass.livejournal.com 2009-01-26 08:08 am (UTC)(link)
Языки, которые не предлагаются в качестве средств разработки GUI, не рассматриваются, так что речь идет именно о general-purpose языках.

(no subject)

[identity profile] familom.livejournal.com - 2009-01-26 10:08 (UTC) - Expand
(deleted comment)

(no subject)

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

(no subject)

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

(no subject)

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

[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, должны обращаться напрямую к ней, а не через еще пару слоев библиотек на других языках. По-моему, если на языке нельзя написать графическую библиотеку, непосредственно работающую с графическими средствами ОС - такой язык назвать полноценным сложно.

(no subject)

[identity profile] atzkey.livejournal.com - 2009-01-26 09:28 (UTC) - Expand

(no subject)

[identity profile] metaclass.livejournal.com - 2009-01-26 09:32 (UTC) - Expand
(deleted comment)

(no subject)

[identity profile] wildman.livejournal.com - 2009-01-28 06:15 (UTC) - Expand

(no subject)

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

(no subject)

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

(no subject)

[identity profile] sanitarro.livejournal.com - 2009-01-26 11:02 (UTC) - Expand

(no subject)

[identity profile] ugenk.livejournal.com - 2009-01-26 10:44 (UTC) - Expand

(no subject)

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

(no subject)

[identity profile] kiryl.livejournal.com - 2009-01-26 11:06 (UTC) - Expand

(no subject)

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

(no subject)

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

[identity profile] raydac.livejournal.com 2009-01-26 08:13 am (UTC)(link)
человек вообще неполноценное существо, у него нет разъема для подключения монитора

[identity profile] atzkey.livejournal.com 2009-01-26 08:29 am (UTC)(link)
Да! Надо больше gui-библиотек! Чтобы больше сумасшедших программистов рисовало сумасшедшие интерфейсы!
http://atzkey.livejournal.com/76372.html?thread=162132#t162132


Неполноценны языки, которые не способны взаимодействовать с другими языками. (Представилась библиотека для Piet, написанная на Brainfuck)

[identity profile] metaclass.livejournal.com 2009-01-26 08:33 am (UTC)(link)
Взаимодействие с другими языками это способ бессмысленного усложения проектов. И так на простейших проектах - дикая смесь из обычных general-purpose языков, SQL, XML, и прочей хрени. Вот осталось только еще прикрутить интерпретатор хаскеля и питон для "скриптинга" и сидеть наслаждаться мыслями "как сдохнут те, кто это будет поддерживать в будущем".

(no subject)

[identity profile] atzkey.livejournal.com - 2009-01-26 08:47 (UTC) - Expand

(no subject)

[identity profile] kiryl.livejournal.com - 2009-01-26 09:03 (UTC) - Expand
(deleted comment)

(no subject)

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

(no subject)

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

(no subject)

[identity profile] kiryl.livejournal.com - 2009-01-26 10:59 (UTC) - Expand

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

[identity profile] kiryl.livejournal.com - 2009-01-26 10:56 (UTC) - Expand
(deleted comment)

(no subject)

[identity profile] kiryl.livejournal.com - 2009-01-26 11:20 (UTC) - Expand

(no subject)

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

(no subject)

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

(no subject)

[identity profile] metaclass.livejournal.com - 2009-01-26 11:35 (UTC) - Expand
(deleted comment)

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

[identity profile] kiryl.livejournal.com - 2009-01-26 11:15 (UTC) - Expand

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

[identity profile] jek-hor.livejournal.com - 2009-01-26 22:19 (UTC) - Expand

(no subject)

[identity profile] vp.livejournal.com - 2009-01-27 06:07 (UTC) - Expand

(no subject)

[identity profile] jek-hor.livejournal.com - 2009-01-27 07:27 (UTC) - Expand

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

(no subject)

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

[identity profile] kiryl.livejournal.com 2009-01-26 08:56 am (UTC)(link)
Помимо гуйни есть масса других задач.

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

(no subject)

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

[identity profile] volodymir-k.livejournal.com 2009-01-26 09:47 am (UTC)(link)
Неубедительный креотифф. Смешано требование по чтению старого кода, способы компоновки, наличие компонентов, какой-то "собственный", "биндинг". Чё вообще надо? В чём проблема-то?

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

[identity profile] metaclass.livejournal.com 2009-01-26 10:42 am (UTC)(link)
Ну вот то, что вызывает winapi или там xlib - должно быть написано на самом же языке. Жаба и дельфи как раз в этом плане нормально сделаны вроде.

[identity profile] gds.livejournal.com 2009-01-26 09:55 am (UTC)(link)
"нет гуи библиотеки" может быть как из-за неполноценности языка, так и из-за того, что всех всё устраивает (например, биндинги работают нормально). Поэтому, если всё работает, зачем усложнять и без того сложную жизнь и плодить какие-то гуёвые библиотеки, единственной целью существования которых будет факт того, что они написаны на языке Xxx.

[identity profile] mr-aleph.livejournal.com 2009-01-26 10:05 am (UTC)(link)
я не помню, когда я последний раз делал гуй.


[identity profile] metaclass.livejournal.com 2009-01-26 10:43 am (UTC)(link)
Ничего, придет кризис, еще и юзеров саппортить будете :)

(no subject)

[identity profile] mr-aleph.livejournal.com - 2009-01-26 11:55 (UTC) - Expand

(no subject)

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

(no subject)

[identity profile] mr-aleph.livejournal.com - 2009-01-26 11:59 (UTC) - Expand

[identity profile] zamotivator.livejournal.com 2009-01-26 10:07 am (UTC)(link)
Я так и не понял, какой категории относится С++ и Qt =)

[identity profile] metaclass.livejournal.com 2009-01-26 10:43 am (UTC)(link)
К правильной. QT написан на С++? Написан :)

(no subject)

[identity profile] atzkey.livejournal.com - 2009-01-26 16:26 (UTC) - Expand

[identity profile] mibori.livejournal.com 2009-01-26 11:13 am (UTC)(link)
русский не совершенный

[identity profile] mibori.livejournal.com 2009-01-26 11:13 am (UTC)(link)
язык?

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

[identity profile] divine-assass1n.livejournal.com 2009-01-26 03:59 pm (UTC)(link)
От современной веб-разработки Вы бы сошли с ума с такой установкой :)

Между тем проблема не в количестве языков, а в предоставленном Application Programming Interface. Хороший продуманный API не усложнит проект и не создаст проблем с поддержкой, разве что если инженеры имбецилы.