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 мегабайт, без больших зависимостей.
This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

If you are unable to use this captcha for any reason, please contact us by email at support@dreamwidth.org