Найти в Дзене
Ржавый код

Декларативное программирование пользовательского интерфейса в Rust для собственных приложений

Последние пару недель автор потратил на изучение Rust. Он был очень очарован потенциалом Rust для создания высокопроизводительных приложений, в то же время, он обладает высокоуровневыми абстракциями. Поскольку он пришел из мира web и React, то решил изучить возможности Rust в контексте программирования пользовательского интерфейса. Результатом этого исследования стал `Appy`, экспериментальный фреймворк, вдохновленный `React`, который использует возможности производительности Rust для рендеринга компонентов непосредственно с помощью OpenGL. Эта структура все еще находится на ранних стадиях своего развития, и ее следует понимать как эксперимент. Тем не менее, автор рад поделиться тем, что он узнал на данный момент, и поговорить о возможностях Rust для программирования пользовательского интерфейса. По своей сути, `Appy` опирается на Rust, RSX, OpenGL и библиотеку Simple DirectMedia Layer (SDL) для рендеринга графики. SDL обеспечивает кроссплатформенную функциональность, что означает, что
Оглавление

Последние пару недель автор потратил на изучение Rust. Он был очень очарован потенциалом Rust для создания высокопроизводительных приложений, в то же время, он обладает высокоуровневыми абстракциями. Поскольку он пришел из мира web и React, то решил изучить возможности Rust в контексте программирования пользовательского интерфейса. Результатом этого исследования стал `Appy`, экспериментальный фреймворк, вдохновленный `React`, который использует возможности производительности Rust для рендеринга компонентов непосредственно с помощью OpenGL.

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

По своей сути, `Appy` опирается на Rust, RSX, OpenGL и библиотеку Simple DirectMedia Layer (SDL) для рендеринга графики. SDL обеспечивает кроссплатформенную функциональность, что означает, что приложения, созданные с помощью `Appy`, потенциально могут быть развернуты на различных платформах. Однако в настоящее время только Android и настольные версии средства развертывания полностью работоспособны. Тем не менее, добавление инструментов iOS или wasm должно быть простым процессом.

Hello World

Если вы знакомы с `React`, вы узнаете синтаксис `Appy`, который позволяет вам писать код, похожий на `HTML` или `XML`. Это приложение “hello world”:

-2

В отличие от `React`, `Appy` не использует виртуальный `DOM` для управления обновлениями пользовательского интерфейса. Вместо этого `Appy` рендерит компоненты непосредственно с помощью OpenGL. Такой подход устраняет необходимость в `DOM` и, следовательно, необходимость его обновления. В результате получается более компактная, быстрая и эффективная платформа, которая обеспечивает значительные преимущества в производительности по сравнению с традиционными платформами пользовательского интерфейса.

Хуки

В `Appy` концепции React-хуков присутствует. Хуки - это способ использования состояния и других функций `React` в функциональных компонентах без необходимости использования компонентов класса. В `Appy` я использую аналогичный подход с замыканиями Rust.

Например, предположим, у вас есть компонент, которому необходимо обновить свое состояние на основе пользовательского ввода. Вы можете создать замыкание Rust, которое обрабатывает рендеринг, а затем передать это замыкание компоненту в качестве параметра. Когда происходит пользовательский ввод, вызывается функция замыкания, и состояние компонента соответствующим образом обновляется. Например:

-3

Деплой

В рамках эксперимента автор пакета также создал инструмент развертывания. Развертывание приложения `Appy` на Android - это простой процесс, который включает в себя выполнение одной команды. Он нашел в Интернете учебные пособия, в которых объяснялось, как настроить SDL и запустить его на Android. Это был довольно трудоемкий процесс, который включал в себя несколько этапов копирования файлов туда и обратно и, наконец, открытие Android Studio для сборки проекта. Автор автоматизировал процесс, чтобы сделать его намного проще и эффективнее, чтобы запуск проекта не казался препятствием.

Вывод

Код для `Appy` доступен на GitHub вместе с некоторыми примерами, которые помогут вам лучше разобраться. Один из примеров - простой калькулятор, который автор создал, чтобы получить представление о том, каково это - использовать фреймворк.

Я нахожу рабочий процесс использования `Appy` довольно приятным. Возможность писать код в функциональном стиле и при этом получать встроенную производительность без необходимости иметь дело с виртуальным `DOM` было свежим решением. Использование замыканий Rust для обработки обновлений состояния и других событий казалось естественным и интуитивно понятным.

Хотя `Appy` все еще находится на стадии эксперимента, автор пакета считает, что у него есть потенциал в качестве кроссплатформенной платформы пользовательского интерфейса для разработчиков Rust. Возможность использовать SDL и OpenGL для бизнес-приложений и приложений для повышения производительности и может кардинально изменить ситуацию как с точки зрения производительности, так и с точки зрения продуктивности разработчиков.

Он рад продолжить работу над `Appy` и изучить возможности декларативного программирования пользовательского интерфейса в Rust. Если вы заинтересованы в том, чтобы попробовать пакет или внести свой вклад, не стесняйтесь ознакомиться с кодом на GitHub и присоединиться к проекту.

Статья на list-site.