vak: (Default)
[personal profile] vak
Понадобилось мне по работе сваять простой плеер мультиков. То есть утилитку с графическим интерфейсом, показывающую выполнение некого вычислительного процесса на хитром матричном процессоре. Выглядит как мультик: данные бегают туда-сюда, умножители пыхтят. Как делать понятно, но надо подобрать, на чём делать. Пошёл я искать, какие нынче фреймворки в ходу, и оказалось непросто.

Работать должно на маке, линуксе и виндоуз, как обычно принято. Должен быть родной бинарный код для каждой платформы, а не виртуальные машины. Ну и размер приложения чтобы не зашкаливал. Ещё один критерий: язык лучше Rust, а не Си++, по возможности. Накушались уже этого Си++, всё с ним понятно, пора начинать переходить на более развитые вещи.

По старой памяти, стал я смотреть Qt, Gtk, Wx и другие известные библиотеки. У всех у них есть даже кое-какая привязка к Rust. Но Wx давно отстал от жизни, Gtk нормально фурычит только на линуксе, остался один Qt. И выяснились с ним серьёзные проблемы.
  • Qt больше не свободный софт. Мало того, для коммерческого применения его нельзя купить один раз и всю жизнь использовать, как раньше. Надо платить подписку каждый год, на каждого программиста в команде. Перестал платить - не можешь больше продавать свой софт на базе Qt.
  • Можно юзать Qt с лицензией LGPL, не все компоненты, но основные. Но только с разделяемыми библиотеками. Никакой статической линковки. Это означает, что вместе с кодом своего приложения (обычно пара мегабайт) надо выдавать юзеру 200 мегабайт бинарников библиотек Qt. Как-то несоразмерно.
  • Для Rust есть привязка к Qt, и на первый взгляд оно работает, я даже переписал пример простого текстового редактора с Си++ на Rust+Qt. Но при ближайшем рассмотрении возникают большие проблемы. Порождение новых элементов графического интерфейса в Qt делается через наследование классов Си++. Отлично работает, но... в языке Rust нет наследования. Серьёзная часть базовой функциональности недоступна.
По совету [personal profile] spamsink попробовал я CopperSpice. Тут хотя бы не надо подписку платить. Но опять же LGPL, то есть 200 мегабайт бинарников вынь да положь. И главная проблема: недостаточная поддержка. Из готовых пакетов не поставишь: ни на Убунту, ни на маке CopperSpice нету в пакетах. Собрать на маке не удалось: неопределённые темплейты и классы где-то в cs_string.h. Явная несовместимость с последней версией Apple SDK12.0. На линуксе собралось, но не запускается:
The application failed to start because the platform plugin was not found or did not load.
Requested Plugin Key: "xcb"
Бился-бился, да так и бросил.

Вообще этот CopperSpice (да и Qt) - махина жуткого размера. Компиляция занимает несколько часов на не самой слабой машине. Для небольшого приложения явный перебор.

В общем, пока я остановился на Iced. Делает ровно то, что нужно, и приложения имеют разумный размер в пределах 4-7 мегабайт, без больших зависимостей.

Date: 2021-11-09 07:39 (UTC)
norian: (Default)
From: [personal profile] norian
кутэ подскурвилось конечно и обросло всякой шнягой после коммерциализации троллтека

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

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

Date: 2021-11-09 07:54 (UTC)
norian: (Default)
From: [personal profile] norian
не, там больше 700 мегов базовых библиотек для гуя, партизан боснюк завидуэ
Edited Date: 2021-11-09 07:54 (UTC)