Я ничего не знал о Rust, но после 382 часов написания проектов на этом языке сделал игровой движок Rust для физически корректного рендеринга обезьянки:

Напишу, что и как у меня получилось на первом году изучения Rust.
Обезьянка?
На изображении выше — обезьянка Сьюзи, отрисованная сделанным на скорую руку игровым движком Rust при помощи шейдера физически корректного рендеринга.
Вот исходный код движка.
Этот проект выполнялся в процессе изучения Rust, поэтому мною проделан максимум работы. Использованные крейты: png для загрузки изображений, windows-rs для поддержки Windows, web-sys, wasm-bindgen и js-sys для веб-поддержки.
Вот функционал, ничего особенного:
- Движок запускается на Windows и в интернете.
- Рендеринг с OpenGL на Windows.
- Рендеринг с WebGL в интернете.
- Все привязки графических библиотек/загрузка сделаны самостоятельно.
- Шейдер физически корректного рендеринга, основной источник — LearnOpenGL.com.
- Матричная/векторная алгебра.
- Архитектура для отделения платформы от движка, игрового кода от кода движка и рендеринг бэкенда от движка.
- Горячая перезагрузка библиотеки динамической компоновки DLL для разработки на Windows.
О последних 10 месяцах изучения Rust
Краткая предыстория. Я работаю с Unity больше 13 лет, последние восемь — старшим инженером-программистом Unity. Написал собственный игровой движок на C++ и физически корректный рендерер/средство передачи освещенности на изображениях, но без официальных или профессиональных релизов.
Вот все мои проекты Rust за этот год, а также затраченное на них время:

- Gengar — название этого игрового движка. От начала и до конца всего 128 часов на создание его проекта, визуализатора и поддержки на Windows и в интернете.
- Last Finance — незавершенное и невыпущенное приложение по бюджетированию с применением Tauri и Leptos.
- Advent of code — это 20 дней решений на Rust для advent of code 2023. Вот репозиторий.
- Rust Computer Enhance — это эмулятор процессора 8086 на основе курсов Computer Enhance Кейси Муратори. Вот репозиторий.
- Rust — это просто чтение «Языка программирования Rust» и различных руководств по Rust.
- Blockchain — изучение блокчейна Rust.
- И Graphite — это изучение проекта редактора Graphite.rs, в развитии которого надеюсь скоро поучаствовать.
Мысли о Rust по прошествии 382 часов
В основном я пишу на C#. Говорят, он сложный. Для меня нет. Возможно, потому, что поработал на C++ и обычно избегаю шаблонов ООП. Но модель владения и система проверки заимствований показались очень естественными. С последней я никогда не «боролся». Система проверки заимствований много жалуется, но в своих жалобах обычно корректна.
Cargo невероятен. В Rust я пишу намного больше тестов, потому что с Cargo тестирование очень плавное. Пишу их, конечно, во время разработки функционала: так тестировать проще, чем вручную. И продолжать эти тесты можно вечно.
Перечисления и исчерпывающее сопоставление с образцом кажутся сверхспособностями в сравнении с C#. Так же, как и неразрывно связанная с этим обработка ошибок. В проектах Unity особенно много неявных допущений о том, чем null является, а чем нет. Если их не делать, код быстро превращается на 10 % в бизнес-логику и на 90 % в проверку null. То же верно в отношении исключений. Их предпочтительнее перехватывать, потому что одно исключение где-нибудь да появится.
В целом, с Rust работать легче. Чтобы справиться с проектом, здесь меньше держишь всего в голове. Благодаря типажам и принципу «композиция вместо наследования», не нужно мысленно загружать дерево переопределений, чтобы понять один метод. А благодаря принципу «эксплицитность вместо имплицитности» в коде сообщается, что происходит. При имплицитности же, чтобы разобраться, потребовался бы мысленный поиск.
Читайте также:
- Обработка ошибок на Rust: безопасный и чистый код без unwrap
- Многопоточность на Rust: ускоряем приложения, делаем их эффективнее
- Изучаем Rust. Потоковая передача tar-архива
Читайте нас в Telegram, VK и Дзен
Перевод статьи Ryan Rothweiler: I spent 382 hours learning Rust and all I got was this shiny monkey