Юрий Корниенко - блог

Software Engineer

Книги по Rust от Google и Microsoft

Книга от Google больше для новичков, на мой взгляд, а вот книги от Microsoft прям кладезь практических знаний и практик из мира Rust разработки, очень рекомендую взглянуть.

Хорошо друг-друга дополняют.

Почитать можно тут:

Lisette - мини язык на основе Go, вдохновленный Rust

Компилируется в чистый Go, выглядит элегантно.

Уже второй подобный проект (есть еще Dingo), попавший мне под руку, который пытается решить проблемы скудного дизайна языка Go.

Когда borrow checker не дает тебе покоя, но тайно хочешь попробовать Rust.

Крабовые палочки и фронтенд

Вот и закончл очередной свой домашнй проект посвященный Rust, но теперь - в мире фронтенда.

https://github.com/geooooo/wap_rs

Аудиоплеер на Rust + Wasm + Leptos, хотелось бы еще приправить и обернуть это Tauri, но на текущем этапе и так проделана колосальная работа, тут даже эквалайзер живой и не бутофорный - анимациия основана на частотах текущей аудио дорожки.

А теперь пару мыслей по поводу dev experience во время разработки на таком весьма нестандартном стеке.

Wasm - переносимый формат байткода или своего рода ассемблер для браузеров и способ компилировать код с разных языков в него и отвязаться от велико-ужасного JavaScript. Потенциально wasm заметно быстрее JS.

По части сборки в Wasm у комьюнити Rust есть Trunk, а также низкоуровневые либы в лице web-sys, wasm-bindgen для доступа к браузерным api и интеропу с JS. Вообще есть и другие инструменты в экосистеме Rust.

Leptos - фреймворк для фронтенд разработки, помимо всего прочего он поддерживает SSR, но мой случай - чистый CSR. Leptos похож на React, есть довольно мощные шаблоны для верстки, опять же ближайшее сравненине - JSX, спасибо системе макросов в Rust, которая позволяет изобретать по сути DSL языки под разные случаи жизни.

Концепция "сигналов" чтобы триггерить рендеринг, функциональные компоненты, есть вспомогательные либы для Leptos с реализацией идей хуков - useЧтоНибудь, опять же знакомая вещь.

Довольно приятный dev experience - система типов Rust само собой дает по рукам каждый раз когда наделал ошибок, а когда все пофиксил - все быстро пересобралось и само перезагрузилось и единственные ошибки - логика кода или оставленный unwrap. Но по скорости разработки конечно несравнимо с опытом высокоуровневых языков вроде JS/TS и Dart, все же Rust - язык системного программирования, а еще писать некоторые обвязки на браузерные api было немного больно.

Оставил на потом Tauri - нечто похожее на Electron из мира JS (да, мы все пользуемся приложениями на Electron, даже если вы этого не замечали), но у него есть свои особенности.

Решил как-то я улучшить свой личный сайт

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

Взял rspack - это целая экосистема тулзов по сути, а касательно сборки тут все как я люблю и конфиг в стиле webpack со всей мешурой. К удивлению, сборка даже "чисто на глаз" в разы быстрее чем на webpack, прям blazing fast.

Потом взялся попробовать что-то для создания раздела с блогом на своем сайте, поигрался с rspress (от rspack), но для моей задачи не подошло, потом увидел неплохой вариант - zola, но недолго подумав, решил - а чего бы не написать свой Static site generator для блога на Расте ?

Пара глубоких вечеров и вуаля - первая версия SSG готова: https://github.com/geooooo/ssg_blog_rs (стоит оговориться что это проект в первую очередь для себя, но я породил нечто, что буду допиливать время от времени)

По сути, посты пишутся пока-что на упрощенном Markdown + yaml metadata в заголовке, есть глобальный json конфиг с базовыми настройками и запуск сборки одной командой, посты лениво подгружаются при прокрутке вниз.

Работы еще предстоит куча: просятся прям многопоток при сборке, dev сервер + watch режим, кэширование и инкрементальная сборка, прочие утилитарные скрипты для улучшения dev experience, отлов и вывод подробных ошибок на всех этапах и еще много чего можно выдумать чтобы развивать.

Но сколько пришлось конечно js+python скриптов написать чтобы выкачать/перегнать информацию о всех постах которые я писал на других платформах и затолкать в свой блог, еще то веселье.

Что существует в мире Rust для создания приложений с UI

Это связано с моим небольшим ресерчем для потенциального пет-проекта.

Нативные варианты:

  • Гном-гномыч (Gnome) и gtk-rs - это биндинги для Сишных библиотек gtk
  • slint - выглядит очень зрело и есть свой DSL для написания самого UI
  • iced - пока-что активно развивается, но выглядит тоже интересно
  • egui - вот это, на мой взгляд, самый любопытный вариант

Все, кроме gtk - написаны на Rust.

Позволяют писать под разные платформы и утилизируют GPU, вот у egui (на скрине) есть даже демо приложение с примерами прямо в браузере. Есть и другие пакеты вроде rui, druid написанные на Rust, подходящие для создания UI.

Упомяну еще коротко, что есть у Rust по части фронтенда и веб:

  • Tauri - aka Electron, фронтовый слой пишется на веб технологиях, а backend часть на Rust
  • Yew, Leptos - фреймворки для написания фронтенда полностью на Rust