Биткойн Интервью с лидерами отрасли

Почему я перешел с Flutter и Rust на Rust и egui: опыт и выводы

Биткойн Интервью с лидерами отрасли
I Switched from Flutter and Rust to Rust and Egui

Рассказ разработчика о причинах перехода с сочетания Flutter и Rust на Rust и egui, преимуществе упрощения кода, удобстве парадигмы Immediate Mode UI и личных наблюдениях о производительности и возможностях.

В современном мире разработки программного обеспечения выбор технологий для создания приложений оказывает значительное влияние на эффективность работы и конечный результат продукта. Часто разработчики сталкиваются с дилеммой выбора между многоязыковыми решениями и более простыми стеками технологий. Один из таких примеров — использование Flutter вместе с Rust, по сравнению с чистым Rust и использованием библиотеки egui. На своем практическом опыте я решил перейти с Flutter и Rust на Rust и egui, и хочу поделиться подробностями своего решения, а также наблюдениями и выводами, которые могут быть полезны тем, кто планирует подобный переход или находится в поисках оптимального решения для создания пользовательского интерфейса (UI). Исходная точка была стандартной: приложение с графическим интерфейсом, построенным на Flutter, и вычислительными модулями, написанными на Rust, которые вызывались через биндинги с помощью flutter_rust_bridge.

Эта связка зарекомендовала себя как достаточно мощный способ быстро создавать сложные приложения, требующие высокой производительности бэкенда и привлекательного интерфейса. flutter_rust_bridge предоставляет инструменты для генерации кода связки между Dart и Rust, что позволяет быстро настроить взаимодействие между этими языками. Действительно, в большинстве случаев все было достаточно просто и эффективно: запуск генератора биндингов решал множество проблем и обеспечивал рабочий мост между слоями приложения. Однако по мере развития проекта появлялись моменты, когда автоматическая генерация не срабатывала должным образом, а вызовы через FFI вызывали непредвиденные ошибки или ненужные сложности. Проект требовал внимательного продумывания публичного API, который должен был одинаково хорошо работать и с Flutter, и с Rust, что отнимало значительное количество времени и сил.

Помимо технических нюансов, добавление второго языка для UI привносило дополнительный уровень сложности и усложняло сопровождение проекта, особенно учитывая, что в команде состоял всего один разработчик. Мне пришлось искать более простой, но при этом удобный и производительный вариант. Так я пришел к изучению egui — библиотеки для создания пользовательского интерфейса на Rust с использованием парадигмы immediate mode. Моим первичным мотивом было желание избавиться от связей через FFI и сосредоточиться на однородном технологическом стеке. egui произвел впечатление своей простотой и эффективностью.

В ходе одного выходного дня удалось переписать основную часть UI на egui, что позволило сравнить ощущения от работы с новым стеком и предыдущим. Текстовое и визуальное оформление egui на удивление просты, интерфейс выглядел приятно даже при минимальных усилиях — без необходимости глубоких знаний в дизайне. Одним из ключевых преимуществ, которые очевидно стали для меня при переходе, была минимизация сложности. Каждый дополнительный язык программирования в проекте добавляет не только необходимость изучения, но и усложняет общий процесс разработки, сопровождения и отладки. Конкретно в моем случае генерация кода flutter_rust_bridge приводила к появлению тысяч строк автоматически сгенерированного кода, который сложно прочитать, понять и тем более оптимизировать.

Наличие большого объема непонятного сгенерированного кода вызывало внутреннее неудобство — чувство потери контроля над собственным проектом. К тому же соотношение количества написанных вручную строк кода к сгенерированным могло стабильно смещаться в сторону последних, что явно отражало избыточную сложность. Упрощение архитектуры и переход к единому языку помогли мне лучше понять свою кодовую базу, ускорить процесс внесения изменений и сократить количество багов. Второй важный аспект — это навыки и личные предпочтения разработчика. В моем случае я один создавал весь проект и не планировал приглашать специалистов по UI-дизайну или Flutter-разработчиков с узкой специализацией.

К тому же мои собственные силы и опыт были гораздо сильнее в области Rust, нежели в Dart и Flutter. С Flutter результат выглядел неплохо, но добиться продвинутого и гармоничного интерфейса с нуля было сложно. egui оказалась гораздо более адаптированной к моему уровню формирования UI. Мне не пришлось тратить время на изучение множества новых подходов к проектированию виджетов или разбираться с обширными фреймворками для управления состоянием. Еще до погружения в egui ощущения были, что Flutter имеет избыточно сложную архитектуру, её не всегда интуитивно просто воспринимать и поддерживать.

Immediate mode — это парадигма, применяемая в egui, которая подразумевает, что интерфейс перерисовывается целиком при каждом кадре, что фактически избавляет от порядка вызова обратных вызовов и проблем с обновлением виджетов. Упрощает процесс так называемого «реагирования» на действия пользователя: к примеру, чтобы добавить кнопку и обработать её нажатие в egui, достаточно написать условный оператор. Появился немедленный и прогнозируемый эффект без необходимости учиться работать с такими понятиями как stateful или stateless виджеты, а также разбираться с внешними библиотеками для управления состоянием, которые часто усложняют работу с Flutter. Для разработчика, который привык к Rust, egui оказалась естественным решением, предлагающим минимальный порог вхождения и позволяющим сосредоточиться на разработке функциональности, а не на борьбе с архитектурными ограничениями. Говоря о производительности, нельзя обойти вниманием важный момент: окончательное приложение на 100% на Rust с UI на egui работало заметно быстрее, чем связка Flutter с Rust.

Я не утверждаю, что производительность связана только с языками программирования – скорее, это результат того, что во второй версии удалось убрать вызовы через FFI, которые могли приводить к клонированию данных и прочим затратам. В моём случае приложение интегрировало ONNX Runtime, написанную на C, для выполнения инференса. В старом стекте вызовы команды ONNX шли через Rust, а затем через Dart в Flutter, что, вероятно, создавало накладные расходы и снижало отзывчивость. После перехода же весь стэк на Rust с egui работал куда плавнее, без лишних задержек. В первую очередь я почувствовал оказываемую эластичность и отзывчивость интерфейса, где взаимодействие с пользователем стало проще и понятнее.

Этот переход подчеркнул важность не только выбора быстрых языков, но и удобства архитектурных решений, которые напрямую влияют на производительность и удовлетворенность разработчика. Итогом можно назвать личное убеждение, что выбор между многокомпонентным стеком Flutter + Rust и однородным Rust + egui не только вопрос технологии, но и образа мышления разработчика, имеющихся навыков, а также стремления упростить и оптимизировать. Для небольших проектов, которыми занимаешься один, многозадачность с несколькими языками может стать лишним балластом, затрудняющим развитие и усложняющим техническую поддержку. egui с её парадигмой immediate mode и интеграцией в Rust-среду предоставила гибкий и мощный инструмент, который отвечал потребностям проекта, облегчал понимание кода и увеличивал производительность продукта. Если вы ищете путь в сторону упрощения разработки UI в Rust-проектах, рассматривая альтернативы сложным биндингам и многоуровневым связкам, опыт работы с egui может стать ценным источником идей и вдохновения.

Фактически, это демонстрирует, что иногда проще — действительно лучше, и комфорт программиста напрямую отражается на качестве и скорости создания приложения.

Автоматическая торговля на криптовалютных биржах Покупайте и продавайте криптовалюты по лучшим курсам Privatejetfinder.com (RU)

Далее
Ask HN: How can I pivot from software engineering back into neuroscience?
Четверг, 18 Сентябрь 2025 Как сделать переход из программной инженерии обратно в нейронауку: шаги и советы для успешной карьеры

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

Review of Film Cooling Techniques for Aerospace Vehicles
Четверг, 18 Сентябрь 2025 Обзор технологий плёночного охлаждения для аэрокосмических аппаратов

Анализ современных методов плёночного охлаждения в аэрокосмической отрасли, их особенностей, применений и перспектив развития для повышения эффективности теплозащиты космических и авиационных систем.

Gains Network (GNS) down 19% today: Is it the end of its recovery?
Четверг, 18 Сентябрь 2025 Падение Gains Network (GNS) на 19%: конец восстановления или временная коррекция?

Gains Network (GNS) зафиксировал значительное снижение на 19,3% после недельного ралли, что вызвало вопросы о дальнейшем развитии токена и перспективах его восстановления на фоне растущего доминирования Bitcoin и изменяющейся рыночной конъюнктуры.

Scientists use bacteria to turn plastic waste into paracetamol
Четверг, 18 Сентябрь 2025 Как бактерии превращают пластиковые отходы в парацетамол: прорыв в устойчивом производстве лекарств

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

How many PhDs does world need? Doctoral graduates outnumber academia jobs
Четверг, 18 Сентябрь 2025 Сколько докторантов нужно миру? Избыточность выпускников PhD и вызовы современного академического рынка

Исследование ситуации на рынке труда для докторов наук и анализ причин, почему количество выпускников PhD превышает количество академических вакансий. Рассмотрение перспектив вне университетской среды и рекомендаций по оптимизации подготовки докторантов.

OCP Open Source Firmware Continuous Integration on HPE Proliant
Четверг, 18 Сентябрь 2025 Инновации в мире серверов: непрерывная интеграция открытой микропрограммы OCP на HPE Proliant

Современные технологии непрерывной интеграции открытой микропрограммы на серверах HPE Proliant обеспечивают новый уровень надежности, безопасности и удобства управления дата-центрами, открывая широкие возможности для оптимизации и развития ИТ-инфраструктуры предприятий.

Nuclear Explosions for the National Economy
Четверг, 18 Сентябрь 2025 Мирные ядерные взрывы в национальной экономике СССР: история, достижения и проблемы

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