Почему GPUI и egui загоняют сложные десктопные приложения в тупик

A Critique of GPUI

Почему GPUI и egui загоняют сложные десктопные приложения в тупик

Автор, портировавший рендерер GPUI на wgpu и работающий над signal-фреймворком zgui, утверждает: модели состояния GPUI и egui не масштабируются. В GPUI изменение одного значения требует ручного notify и перерисовывает все view без кэша — на 3000 строк это 8,4 мс, а без кэша 92 мс. Попытка сделать обновления точными превращает простой render в ручную сборку signal-графа из тяжёлых сущностей, где пропущенная связь остаётся незамеченной.

Сохраните приятный API — получите обновления размером с view. Возьмите точность — потеряете приятный API.
  1. virtualritz

    Главный аргумент, повторяемый в посте бесчисленное количество раз: «Это не масштабируется».

    На что я отвечаю: «Кого это волнует, у подавляющего большинства приложений нет сложных интерфейсов».

    А если есть, можно придумать обходной путь, как, например, сделали rerun для egui (описано в статье).

    Показательный пример: мой самый большой «подсказанный» проект в свободное время — это гибридное приложение для 3D-моделирования, теперь уже 500 тыс. строк кода. Оно использует egui.

    Я бы сказал, что по функциональности моделирования оно где-то между Grasshopper/Houdini, около 200 узлов из коробки + любое количество пользовательских.

    Это даёт представление об интерфейсе: граф узлов, редактирование параметров, оверлеи виджетов, гизмо. У многих узлов есть кастомные виджеты, редакторы рампов или кривых и т.д.

    Это совсем не простой интерфейс.

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

  2. x-complexity

    Это реклама zgui, замаскированная под критическую статью.

    Из самой статьи:

    > Раскрытие: я портировал текущий Linux-рендерер GPUI на wgpu2, я создал тестовый стенд, используемый ниже, и я работаю над zgui, сигнальным Rust-фреймворком, который появляется на графиках.

    https://github.com/zortax/zgui

    zgui только что выпустил версию 0.1.0 в прошлом месяце, с 3-месячной историей разработки. И это их единственная версия.

    https://github.com/zed-industries/zed/tree/main/crates/gpui

    https://crates.io/crates/gpui/versions

    Последний релиз GPUI был 0.2.2 год назад.

    Зрелость фреймворка — неизбежный фактор при выборе, куда портировать своё приложение.

    Значит ли это, что можно выбирать только 10-летние фреймворки? Нет, но и гоняться за месячными проектами тоже не стоит.

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

  3. jharsman

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

    Если ты обдумывал, напиши сам.

  4. faangguyindia

    Итак, какие самые продвинутые GUI-фреймворки когда-либо существовали и почему они превосходят GPUI или egui?

    Какая компания в прошлом нуждалась в GUI больше, чем Microsoft? Может, у них есть ответ? Или у Apple?

    Я не думаю, что приложения соцсетей достаточно нагружены GUI, чтобы разработать что-то продвинутое в этой области.

    Сложность GUI и сложность приложения — две разные вещи.

    Аргументы в посте звучат разумно, но вывод неверен.

  5. bluegatty

    Выглядит забавно, но Rust меньше подходит для UX, чем другие языки — древовидные структуры данных, много уродливого состояния, событийно-ориентированность, сильная асинхронность, и, естественно, все json и прочее, что приходит на этом уровне, не имеет «очень хороших» библиотек.

    Он совсем не использует преимущества Rust, и поэтому дополнительные издержки трудно оправдать.

    Я думаю, есть несколько ключевых библиотек, которые хорошо работали бы с Rust (wgpu — отличная!), но сам язык в идеале не должен быть Rust.

    Очевидно, это можно сделать, и я уверен, некоторым разработчикам это очень весело, но, по-моему, это попытка впихнуть круг в квадратное отверстие. (Прим. — забавно это говорить, потому что «впихнуть круг в квадратное отверстие» — это буквально как сказать «гулять?» собаке, то есть «подъём — есть проблема для решения!», но я думаю, именно это я и имею в виду: то, что виляет хвостом, не обязательно лучший вариант.)

Ещё за этот день

2026-11-09