LINUX.ORG.RU

Рациональные доводы в пользу Qt и Gtk

 , , ,


2

5

Привет ЛОР, пишу в удаленный тред конечно, но! Есть пару недостоющих мне приложений, которые я хочу дописать, но в свете последних событий (выхода Gtk3 и Qt5) не могу выбрать тулкит.

Это конечно невозможно, но прошу привести рациональные доводы в пользу того или иного тулкита. Т. к. писать я собираюсь под то на чем сижу, то даже такие мелочи как DE важны. Ко всему кроссплатформенность не так важна, если только на мобильные платформы, т. к. не хватает мне этого ПО именно в Linux.

Пока что я прикинул только:

Qt

  • Qt5 пошустрее Gtk, но это, я думаю, дело поправимое
  • Огромная поддержка платформ, но в то же время Linux не является приоритетной платформой, как с GTK, да и опять же дело поправимое

Gtk

  • Gnome3 мне не очень пока что нравится, но это субъективно, да и не гномом едины
  • Мейнстрим - на Qt нет ни одного крупного браузера (QupZilla явно не попадает под определение крупного популярного браузера)
  • Gnome'вский стек по мне лучше, хотя бы тем что он на GLibc, который еще много где используется

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

Да в Qt все хорошо, кроме того, что они - абсолютные победители специальной олимпиады. Убежишь из под крыла папеньки, написавшего за тебя что-нибудь годное - окажешься в аду. Офигенная перспектива. Потом в /development начинают возникать вопросы «как мне сдвинуть панельку на 2 пиксела влево, так чтобы по-нормальному». Наверное это не потому, что автор вопроса - идиот и не может в исходнике глянуть как отступ слева считается, а потому что в ад очень не хочется. А в сраном HTML, даже без всякой умной механики, можно пойти в style.css и поправить margin-left, и всё. Такие вопросы просто не существуют как класс.

stevejobs ★★★★☆
()

Swt, только swt. Профессиональные программисты пишут только на Java. Ты же не хочешь быть лохом?

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

Потом в /development начинают возникать вопросы «как мне сдвинуть панельку на 2 пиксела влево, так чтобы по-нормальному». Наверное это не потому, что автор вопроса - идиот и не может в исходнике глянуть как отступ слева считается, а потому что в ад очень не хочется. А в сраном HTML, даже без всякой умной механики, можно пойти в style.css и поправить margin-left, и всё. Такие вопросы просто не существуют как класс.

для неосиливших:

panel->setStyleSheet("margin-left: 10");
wota ★★
()

Qt5 пошустрее Gtk, но это, я думаю, дело поправимое

Ну если говнокод писать, то можно и на Qt5 тормоза развести.

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

А что ты хотел? Каждый инструмент имеет свои границы. Qt не исключение. Только вот это не повод применять монстров типа HTML+ для каждого случая.

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

Удваиваю на самом деле, но все туда движется, в т. ч. Qt c QML и Gtk c CSS темами. На данный момент кстати пользуюсь кучей приложений через Chromium (Evernote, Pocket..)

dearboy
() автор топика
Ответ на: комментарий от stevejobs

К слову, мне таких длинных ответов на Лоре ещё не приходило. :)

Язык Си - отличный для описания каких-то железо-зависимых вещей.

по-видимому, да

ABI есть только на Си.

А разве не у всех компилируемых, для которых, как минимум, можно создать бинарный интерфейс (в виде библиотеки, например)?

Транслировать можно в Си (хотя где-то в соседнем треде уже обижались, что из Си ассемблер так себе, из-за goto, например).

Но Linux на Assembler не перепишешь.

Но предлагать писать прикладнуху на Си _человеку_ в наше время звучит как-то подозрительно. Для 1972ого года Си был шикарной штукой. Для 1995ого года отличной штукой была Java. Но сейчас 2013, всё, поезд уехал. Хватит доставать трупы из морозильника.

Лично не предлагал. Если человек сделает выбор в пользу Gtk, то на Си писать будет дольше, но главное - время, требуемое на поддержку и расширение проекта.

Отдельная шутка про С++, который вообще ни для чего не пригоден: ни для системного программирования, ни для прикладного, ни для ынтерпрайза, ни для науки, только для игор (для них тоже не годится, но выбора нет) и для 3,5 хайлоад-гиперкластеров, которые к вопросу выбора гуя относятся чуть менее чем никак, и которых наверняка никто из участников этого треда не видел и не увидит.

Ничего не имею против C++, но много доставалось «приятного» кода на дописывание и где-то подсознательно крепнет ненависть к нему, но сам язык, вероятно, тут ни при чём.

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

Дизайнеры, генераторы документации, IDE, взаимодействие с другими ЯП, интроспекция, методики для контроля обратной совместимости, есть для обоих тулкитов. Асинхронные методы, свойства, события, сигналы в Vala, к примеру, на уровне языка реализуются, но могут быть реализованы и на Си.

Если часть мысли упущена, то скорее всего просто не понял/не_хватает_знаний. Про возможность подстраивать синтаксис не понял тоже. Править код/гуй в продакшене вообще требуется где-то? По поводу возможности внешнего расширения и настройки - речь идёт о плагинах? Про slang тоже не понял. В Gtk множественное наследование возможно для интерфейсов.

- Быстрое время сборки/компиляции и интеграции/деплоймента -- С++ с его шаблонами в пролете. Как с этим у Vala?

Обычно время сборки существенно ниже времени исправления уязвимостей. Средств на уровне языка для деплоймента не знаю/не помню.

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

В Vala исключения есть, однако они реализуются через тот же C.

- Возможность прозрачно перекладывать логику на кластеры/облака/your_bazzword_here - Если логика сервер-сайд - гарантия что это не положит сервер - Если логика сервер-сайд или распределенная - гарантия корректности, корректности всяких map/reduce, безопасности и что логика не положит ноды — Что кроме непосредственной поддержки рантаймом требует специальной инфраструктуры, deployment targets

Речь идёт о GUI?

Какие из этих вопросов решает Си? Да никаких не решает. Оно на другом уровне абстракции работает, и разрыв между уровнями абстракции - бесконечность.

Си-для-машин - это круто. Си-для-людей - это криокамера. Хватит насиловать труп!

Могу ответить, к примеру, почему не могут не нравиться генераторы в C, как математику, потому что сложная сущность выражается через простые. За что нравится конкретно Vala можно понять, почитав документацию по языку, код и самому пописав на нём. По поводу создания GUI ничего принципиального ни против xml/qml/ide, ни против описания интрефейса вручную не имею.

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

можно создать бинарный интерфейс

осталось собрать всех наркоманов вместе и уговорить, чтобы их бинарники как-то взаимозаменялись без потери 90% функциональности. Кто сказал JVM? «Зачем нам нужна JVM, жава тормозит, а я свободный от задротства человек, лучше я еще раз руками напишу какие-нибудь убогие биндинги и пересоберу мир с новыми флагами, сообщество будет поддерживать QtJambi на общественных началах, » итп далее по тексту копипасты

но сам язык, вероятно, тут ни при чём.

одни и те же велосипедные указатели (999 вариантов, на графике перфоманса отличающиеся чуть более чем ничем), одно и то же нытье про исключения в конструкторах, множественное наследование, итп. Одни и те же попытки сделать генератор над генератором над генератором чтобы сверху было что-то нормальное, а внизу - священные кресты. Одни и те же выхлопы ldd и танцы с бубном вокруг старых автотулзов которыми более ничего не собирается. Из года в год. А язык вообще не при чем, да. Сам-то веришь?

Если часть мысли упущена, то скорее всего просто не понял

пропущенная часть мысли - «гемор», просто я не хотел никого оскорблять напрямую

Обычно время сборки существенно ниже времени исправления уязвимостей.

Пишу код, а в соседнем окне браузер показывает изменения. Мгновенно. Сюрприз?

Недавно собирал MySQL Workbench (Gtk). Официальный гуй для MySQL. Оно собиралось на виртуалке с 6 процессорами, 4 гигами операти и реальным жестким диском минут 30. Причем, юзаемая там gtk-scintilla собиралась считаные секунды, а остальное время конпелятор асиливал какие-то зубодробильные шаблоны, временами ругаясь в лог какими-то леденящими душу ворнингами про потерю данных при narrowing касте.

ощущаешь разницу между «мгновенно» и «через час»?

Править код/гуй в продакшене вообще требуется где-то?

требуется на многопользовательских системах. Остановишь сервер - он потом 40 минут будет загружаться. Все это время клиенты будут плеваться в 503 error и активно ненавидеть. Например, сайт альфабанка. Или десктопный клиент 1С-бухгалетрии. (недавно было смешно - в Техносити центральный сервер 1С отправился на перезагрузку, и никто ничего не мог продать вообще. Мне бумажки в сервис-центре оформляли «под честное слово», т.к. записать было негде). Вроде Эрланг как раз для таких случаев делали.

да можно тупо открыть любой сайт в браузере, открыть DOM-инспектор и добавить туда всё что хочешь. Оно заработает мгновенно, т.к. ты правишь живой работающий код. То самое «быстрое прототипирование».

По поводу возможности внешнего расширения и настройки - речь идёт о плагинах?

Если я хочу заюзать на html/css/js-софтине кастомный скин, просто правлю соответствующий CSS. Можно докинуть css в соответствующий каталог, и вообще ничего не править - приложение его само подхватит. Возможно даже не придется жать F5 в браузере. Усилия со стороны программиста для поддержки такой системы - одна строчка кода. Никакой пересборки бинарей.

Или, например, надо подменить базу данных на сервере. Ну пошел, поменял data source в настройках сервера. Усилия со стороны программиста - использование стандартных средств платформы. Никакой пересборки бинарей.

panel->setStyleSheet(«margin-left: 10»);? Мыло-мочало, собирай всё сначала.

нравится конкретно Vala

да, тут уже в чятике сказали, что Vala транслируется мгновенно, в отличие от шаблонов

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

осталось собрать всех

Рождается много вопросов после прочтения. К чему взаимозаменяемость бинарников? В смысле ABI требуется бинарная совместимость в пределах одной soversion. Если речь, к примеру, о различных реализациях libc, то взаимозаменяемость в данном случае следует рассматривать как фичу, если такое не ставилось на этапе проектирования.

Сам-то веришь?

Возможно, C++ допускает возможность написания ужасного кода.

Всё сказанное после, если не ошибаюсь, касается MVC паттерна и во всех случаях происходит остановка view/client с обновлением и его перезапуском(в том числе и обновлением страницы в браузере). На каком языке он реализован вроде бы не должно иметь значения, как мне кажется в данный момент.

да, тут уже в чятике сказали, что Vala транслируется мгновенно, в отличие от шаблонов

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

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

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

начерта мне два либц применительно к гую? Я хочу использовать библиотеки С++ (классы, шаблоны) из разных компиляторов, из разных языков программирования.

stevejobs ★★★★☆
()

приложений, которые я хочу дописать

Не успеешь. Скоро в школу, а тебе нужно ещё научиться программировать.

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

Модель GObject позволяет это делать. В Vala - на уровне языка. В C/C++ нету, не спорю...

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

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

Мое самое первое тестовое задание на первой «настоящей» работе было написать новый виджет для Dojo

может сделать человек, ну совсем ничерта не смыслящий ни в чем, за несколько дней.

Норм работа

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

осталось собрать всех наркоманов вместе и уговорить, чтобы их бинарники как-то взаимозаменялись без потери 90% функциональности

Все придумано до нас. Хотя бы тот же СОМ.

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

ни о чем не говорит?

Это вроде список weak references, glib от glibc? Для обратной совместимости, чтобы glib могла работать с разными glibc без пересборки первой? А поинт тогда в том, что собранный бинарь надо будет так же готовить к этой же проблеме?

Сорри за пачку вопросов, интересно просто.

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

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

vertexua ★★★★★
()

А ещё, если не ошибаюсь, гномики закопали вывод через directfb. Конечно, в большинстве случаев он не нужен, однако +1 гвоздь в крышку гроба Gtk (хотя мне кажется, там гроб уже цельнометаллический из-за количества вбитых гвоздей).

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

Просто крестодрочеры сразу говорят «аргументируй». Это их любимое слово. Поэтому я попытался сразу дать подробную аргументацию всему в максимально сжатом виде)

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

Зачем аргументировать? Ты вот аргументируешь неким бесспорным набором аргументов Х и думаешь за ум возьмутся? Ты оппонент, а оппонент не прав. Его нужно победить, а не прислушаться. Тем более мне как пользователю например все равно на чем написано, хоть и немного обидно что большие релизы софта выпускаются со совсем детскими фичами, хотя на нормальных языках софт можно было бы развивать быстрее и не тратить время на типичные задачи С++ программистов (отладки сегфолтов и возню с памятью). Обидно - это такое, ведь человек свое время тратит на опенсорс разработку, чаще всего бесплатно, и его дело как и на чем писать. Но ведь согласись, приятно быть Д’Аартаньяном что ты мол пишешь теоретически самый быстрый софт. Хотя самый быстрый софт пишут те, кто на плюсах написали все с нуля и хорошо оптимизировали алгоритмы. А разработчики на С++ обычно дергают другой код на С++, который так же может дергать любой другой лох на Python

Мало компу приходит в голову почему С++ обгонят всех на бенчмарках, большие СУБД на Java/Erlang обгоняют по производительности аналоги на С++. А по настоящему когда я пишу на Java (которая написана на С++), то я использую код на С++. А они переизобретают Java (Erlang, Lisp, you name it) в своем коде на С++ причем криво

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

Для современности — всего делов-то, поправить очевидный идиотизм в синтаксисе, добавить пару кейвордов, прописать разумные дефолты. И дропнуть обратную совместимость с кодом 72ого года производства.

Насколько понял из мемуаров Страуса, у не было цели сделать DSL для современных десктопных/серверных задач, у него была цель сбежать с Си в ООП, и при этом не потерять обратной совместимости с говном мамонта. Как показала практика, если дропать совместимость раз в десять лет, мир от этого не рушится, так что на фантастическую работу Страуса можно просто покласть.

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

Да, все правильно. Хотя как то это направление не очень развивается.

Две попытки из мне известных - D и Go как то мир не перевернули.

vertexua ★★★★★
()

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

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

Причем, юзаемая там gtk-scintilla собиралась считаные секунды

причем scintilla написана на С++ и я приложил руку к нескольким используемым там лексерам

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

Поэтому я попытался сразу дать подробную аргументацию всему в максимально сжатом виде)

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

добавить пару кейвордов

Интересно, каких?

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

только лишь «ынтерпрайз» и «формочки»

в топике задан контекст — формочки. Наверное в другом топике, про гиперкластеры под Windows 3.11 издеваться над С++ было бы совершенно излишним.

причем scintilla написана на С++ и я приложил руку к нескольким используемым там лексерам

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

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

в топике задан контекст — формочки.

а они бывают разные, Autodesk Maya на Qt, плюсовый Blender на своем тулките и веб-формочка - абсолютно разные по сложности вещи

дай угадаю, С++ ты юзал как Си

да, я вообще не сторонник шаблонов, но в 1-2% случаев их использование более чем оправдано

wota ★★
()
Последнее исправление: wota (всего исправлений: 1)

на Qt нет ни одного крупного браузера

Сюрприз: в хроме и мозилле роль гтк в интерфейсе крайне незначительна.

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

менее наркоманский редактор Glade

Wut? по сравнению с Qt Designer он просто неюзабелен.

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

Блевотное API

Выглядит как говно

Толстячок

annulen ★★★★★
()

Qt: Огромная поддержка платформ, но в то же время Linux не является приоритетной платформой

Эмм, а что же по твоему является приоритетной платформой для Qt? На проблемы с виндой и макосью разработчики временами кладут болт, с линуксом такого нет

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

Интересно, каких?

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

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

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

посчитать статистику, какие конструкции крестовики пишут чаще всего

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

и свернуть их в кейворды. Дефолтную многопоточность, например.

Свернуть надо, да. Но почему обязательно в кейворды? Чем библиотечные реализации не устраивают?

Чтобы люди сами понаписали себе кейвордов каких надо.

Да как бы идея не нова. В том же Forthе кейворды вооще от подпрограмм не отличимы. Только вот ни один такой язык далеко не ушел.

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

Только вот ни один такой язык далеко не ушел.

у этих языков не было своего Страуструпа или своего Джобса?

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

может, какой-нибудь Лавсанчик - наш новый Страуструп) И соотвтетсвующий уровень одержимости Великой Идеей надо не критиковать, а наоборот поощрять..

stevejobs ★★★★☆
()

не хватает мне этого ПО именно в Linux.

предлагаю GTK. не суть важно какой (2 или 3). 2й лучше, но 3й наверное тоже когда-то допилят.

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

не на glibc, а на glib. который, действительно, используется много где, но чаще всего не к месту, что приводит к острой боли, когда надо портировать код на другие платформы.

ах да. забыл про рациональные доводы.. с GTK не придется писать на самом дебильном языке программирования (хинт: на оном написано Qt)

waker ★★★★★
()
Последнее исправление: waker (всего исправлений: 2)

Уважаемый топикстартер. Ты выбрал не совсем подходящий ресурс для того, чтобы получить рациональные доводы в пользу Qt и GTK+. Вернее, совсем не подходящий.

Дело в том, что /development/ ЛОРа не является сообществом профессиональных разработчиков. Профессионалы (то есть те, кто владеет технологиями на высоком уровне и зарабатывает на жизнь разработкой ПО) здесь в подавляющем меньшинстве и, я бы сказал, на птичьих правах. Абсолютное большинство — это тролли, диванные теоретики, доморощенные гуру, форумные трепачи, лисперы, хаскелисты и прочие ёбнутые на голову адепты маргинальщины, фрики, школьники, хипсторы, петросяны, IT-эзотерики, IT-шарлатаны, IT-небыдло и так далее. Здесь в воздухе густо пахнет мамкиным борщом и нонконформизмом. Здесь модно поливать говном все практические, промышленные технологии и подходы (к которым, несомненно, относятся GTK+ и Qt). Поэтому вместо экспертного мнения ты получишь здесь 100500 тонн говна на GTK+/Qt и 9000 советов учить лисп, хаскель, Smalltalk, Brainfuck, Agda2 и Coq. Разве это то, чего ты хочешь?

Надежды Макскома на превращение ЛОРа в «русскоязычный StackOverflow» не оправдались, разбившись о безответственную политику модерирования и, как следствие, полную маргинализацию ЛОРа. Поэтому лично я бы советовал обратиться к англоязычным сайтам и литературе.

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

у этих языков не было своего Страуструпа или своего Джобса?

Ага, кто был маньяком для PHP?

А куда задвигал Гослинг свой Oak, и что в результате вышло. Интересно, Гослинг хоть знает, что такое ынтерпрайз?

Можно еще и про Вирта вспомнить, который утверждал, что модула круче паскаля. Но где та модула? А вот фаны паскаля до сих пор встречаются.

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

Но где та модула?

Сегодня она называется «Java».

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