Предлагаю вашему вниманию субъективную подборку ржавых новостей за январь. В этой подборке: Rust 1.32, уход Стива Клабника и Ника Камерона, киш от Cloudflare, устройство rust-analyzer и страничной памяти, поиски GUI и async, Oxydyze конференция для встроенщиков.
Rust 1.32
Вышел Rust 1.32. По сравнению с масштабным прошлым выпуском, на котором было сконцентрировано множество сил всего сообщества, тут серьезных нововведений не очень много:
- Новый вспомогательный макрос для отладки
dbg!
; - По умолчанию убран jemalloc.
- Стабилизированы "единообразные пути" ("uniform paths")
Подробности в переводе новости.
Стив Клабник и Ник Камерон уходят из Mozilla
Печальные новости: Стив Клабник и Ник "nrc" Камерон покидают Мозиллу.
В посте Стива "thank u, next" (обсуждение) говорится о том, что главными причинами являются терки с "внешней" по отношению к Rust частью Мозиллы и всякие приземленные денежные вопросы. Стив хочет найти связанную с Rust работу и постарается продолжить принимать участие в жизни и развитии языка, хотя уже точно не в старом объеме.
В "Leaving Mozilla and (most of) the Rust project" (обсуждение) Ник говорит, что просто устал за семь лет от этого проекта и хочет смены обстановки. Он уже вышел на работу в PingCAP:
"Starting at PingCAP" (обсуждение).
Guide to the rust-analyzer & Salsa
Леша @matklad выложил руководство/экскурсию по структуре rust-analyzer (что это?, обсуждение):
rust-analyzer использует библиотеку инкрементальной рекомпиляции Salsa, про ее устройство тоже недавно публиковался пост и пара видео:
- Salsa: Incremental recompilation (обсуждение);
- Видео "How Salsa Works" — высокоуровневый обзор концепций и структуры библиотеки;
- Видео "Salsa In More Depth" — уже глубоко закапывается в инкрементальный алгоритм и объясняет детали реализации Salsa.
ОС на Rust: Страничная память
Цикл статей Writing an OS in Rust пополнился двумя статьями про страничную память:
A bot for Starcraft in Rust, C or any other language?
humbug перевел на английский свою статью "Бот для Starcraft на Rust, C и на любом другом языке".
Написание динамической библиотеки под Windows, которая могла бы загружаться в адресное пространство игры StarCraft: Brood War и управлять юнитами.
Если кто не читал, то вот повод ознакомиться. :)
Are We Async Yet?
Вокруг втаскивания асинхронного синтаксиса в язык последнее время так много активности (например), что вот завели отдельную обновляемую страничку со статусом ключевых RFC/обсуждений: areweasyncyet.rs (обсуждение).
Are We GUI Yet?
areweguiyet.com (обсуждение) — похожая попытка собрать в одном месте всю информацию о статусе вечно актуальных попыток родить надежный и идиоматичный GUI для Rust.
Lock-free Rust: Crossbeam in 2019
Отличный обзор библиотеки crossbeam, предоставляющей эффективные lock-free структуры данных, и пути ее эволюции за последние годы (обсуждение).
Ржавые реализации протокола QUIC: Quiche от Cloudflare и Quinn
Экспериментальный протокол QUIC (альтернатива TCP, ликбез) потихоньку набирает популярность. В этом месяце:
-
Вышел Quinn v0.2 (код, обсуждение), теперь он является одной из наиболее точных реализаций протокола. В первую очередь эта библиотека ориентирована на идиоматичном Rust API, включая поддержку футур;
-
Cloudflare выпустили свою реализацию — Quiche (обсуждение) — более сфокусированную на проработанном Си API для интеграции в приложения на других языках.
Бесстрашная защита: Безопасность памяти в Rust
Перевод мозилловской статьи "Fearless Security: Memory Safety", рассказывающей об основах того, как Rust обеспечивает безопасную работу с памятью.
Embedded
- oxidizeconf.com — в Апреле в Берлине состоится конференция о программировании встраиваемых систем и IoT на Rust. Всех желающих зовут подавать доклады на CfP.
- Building an Embedded Futures Executor (обсуждение) — футуры во встройке? почему бы и нет;
- Embedded Rust Experiments — Is my STM32 MCU running fast? (обсуждение) — урок по работе с STM32 из Rust и всякой сопутствующей деятельности;
- My Rust Powered linux.conf.au e-Paper Badge (обсуждение) — из чего можно собрать бейджик с e-paper экраном и как в это дело запихать Rust;
WebAssembly
- 2019 roadmap RFC for the Rust and WebAssembly working group (обсуждение) — рабочая группа по WASM ставит себе целями на этот год: развитие экосистемы, улучшение отладки, втаскивание многопоточности и выпуск wasm-pack v1.0;
- Embedding WebAssembly in your Rust application (обсуждение) — WASM как встраиваемый язык, т.е. альтернатива Lua, Guile и другим подобным штукам;
- Серия статей "WebAssembly Troubles":
Игрострой
- imgui-ext (обсуждение) — экспериментальный процедурный макрос для быстрого построения отладочных GUI на основе imgui (пример кода + картинка результата);
- Using Rust for Gamedev (обсуждение) — Matthew Michelotti рассказывает о своем опыте работы над игрой про пингвина;
- fl3 замутил WASM/WebGL движок good-web-game, API-совместимый с подмножеством GGEZ, так что у моего Земерота внезапно появилась полноценная веб версия: ozkriff.itch.io/zemeroth (обсуждение);
- WebGL + Rust: Basic Water Tutorial (обсуждение) — в статье есть интерактивное демо;
- Lokathor активно работает над серией уроков по gfx-hal;
- The State Of GGEZ, 2019 (обсуждение) — Icefoxen хочет выпустить GGEZ v0.5 и взять "отпуск", делегировав разработку соавторам; кроме этого, в статье описан текущий статус поддержки мобильных и веб платформ + мысли о переходе на новый gfx-hal;
- Большой список того, что stevebob сделал игрового на Rust за прошлый год, в том числе: библиотека коллапса волновой функции (картинка), платформерный физический движок, попиксельное определение зоны видимости и еще много чего (много гифок);
- After Hours Game Development (обсуждение) — рассказ о хобби-разработке и структуре DF-подобной игры;
- Game Server in 150 lines of Rust (обсуждение) — короткий урок по написанию простого асинхронного игрового сервера;
- kaiju (обсуждение) — встраиваемый игровой ассемблер + эмулятор ольдскульных игр (GIF демо);
- Packaging a game for Windows, Mac, and Linux with Rust (обсуждение);
- OpenMoonstone (обсуждение) — открытый клон старого ролевого боевика Moonstone (видео демо);
- Идет активная работа над воксельной РПГ Veloren, например вот видео анимационной системы с демо прикрепления объектов к костям;
- Обновления проекта Roboinstruct:
- Ammolite (код, обсуждение) — физически корректный glTF движок рендера реального времени с фокусом на VR/AR (GIF);
Одной строкой
- Январские обновления IntelliJ-Rust (#90, #91) включают в себя: поддержку переименования зависимостей в Cargo.toml, начальную поддержку macro 2.0, быстрое исправление "Make mutable" (GIF), рефакторинг "Introduce Parameter" (GIF) и выведение типов для try блоков и генераторов;
- WebRender был опубликован на crates.io (обсуждение) — теперь с ним проще будет делать другие проекты;
- dtolnay/request-for-implementation (обсуждение) — список "пакетов, которые не существуют, а должны бы" с довольно подробным описанием идей и информацией о том, где искать помощь и менторство;
- Rust сейчас является 13м по популярности языком на GitHub'е (обсуждение);
- Джон Кармак учит Rust (обсуждение);
- My experience converting a Python library to Rust (обсуждение) — отчет о переписывании Python библиотеки целиком на Rust (время разработки существенно больше, зато бед с оптимизациями не много);
- Многоэкранная шпаргалка по Rust для новичков (обсуждение) — ЛКМ для перетаскивания;
- Is It Time to Rewrite the Operating System in Rust? (обсуждение) — презентация с QCon о том, что не надо пытаться за раз переписать что-то масштабное на Rust, надо идти путем создания и внедрения небольших, полезных и качественных ржавых строительных блоков;
- Cборка ripgrep 0.10 (и его зависимостей) в Debian теперь воспроизводима (обсуждение) — это как раз важно для проникновения rust пакетов в другие экосистемы;
- /r/rust: "Your favourite Rust tricks?" — обсуждение со всякими Rust-трюками и неочевидными приемами;
- /r/rust: Rust в Benchmarks Game в среднем на 3% быстрее C++ и на 4% медленнее Си" — ползет вверх потихоньку, но с бенчмарками все всегда сложно и неоднозначно;
- доклад "Rust at speed — building a fast concurrent database" (обсуждение) — о построении быстрой многопоточной БД на Rust;
- librsvg движуха: график "ржавения" librsvg, более подробный отчет о статусе процесса и отдельный отчет об упрощении работы с GObject из Rust;
- Red Hat Developer: Speed up your Python using Rust (обсуждение) — как и для чего расширять Python код Ржавчиной, сравнение с решением задачи при помощи numpy, подборка ссылок для дальнейшего погружения в вопрос;
- QtCreator и его использование в качестве IDE для Rust;
- /r/rust: Building JavaScript Development Tools with Rust — представляет три "Rusty ECMAScript" пакета — Scanner (RESS), Syntax Analyzer (RESSA), Writer (RESW) — позволяющих разрабатывать на Rust средства разработки для JavaScript;
- When Rust is safer than Haskell (обсуждение) — сравнение безопасности Rust и Haskell;
- /r/rust обсуждение на тему перспектив rust-vs-go в контексте веба;
- /r/rust: "Where do you think Rust will be in 3 years?" — вангование о будущем Rust'а, есть интересные мнения в комментариях;
Новые и обновленные пакеты
- Ropey (обсуждение) — эффективная и utf8 совместимая реализация структуры данных Rope/Cord, которая часто используется в редакторах текста;
- hexyl (обсуждение) — консольный хекс-просмотрщик, активно использующий цвета для обозначения групп шестнадцатеричных значений;
- cargo-cache (обсуждение) — позволяет выборочно чистить куски
~/.cargo/
; - typetag (обсуждение) — макро-атрибут, дающий возможность безболезненной сериализаций
&dyn Trait
и десериализацииBox<dyn Trait>
типаж-объектов; - dness (обсуждение) — динамический dns клиент;
- regex-automata (обсуждение) — предоставляет низкоуровневый интерфейс для работы с регулярными выражениями (в отличие от
regex
), который менее удобен, но зато позволяет детально контролировать потребление памяти и время поиска; использует DFA и поддерживает сериализацию; - Stretch (код, обсуждение) — ржавая реализация флексбокса, используется в Shard (как оно запихивается в андроид и в ios);
- arbalest (обсуждение) — альтернатива обычному Arc, но слабые ссылки не запрещают изменяющий доступ к данным;
- Toshi (обсуждение) — движок полнотекстового поиска, аналогичный Elasticsearch (альтернатива what Tantivy, который ориентируется на Lucene);
- inferno — ржавый порт перлового визуализатора результатов профилирования flamegraph, процесс разработки выкладывается в виде стримов (видео 1, видео 2);
- DataFusion v0.6 (обсуждение, код) — первая версия in-memory движка запросов, использующая официальную Rust реализацию Apache Arrow;
- cargo-expand v0.4 (обсуждение) — "раскрыватель" макросов теперь поддерживает работу с конкретными модулями/типами/функциями;
- fluent-rs v0.5 (обсуждение) — ржавая реализация современной системы локализации Fluent обновила подход к выделению ресурсов, получила zero-copy парсер и улучшила документацию;
- Tokei v9.0 (код, обсуждение) — программа подсчета строк в исходном коде получила поддержку конфигурационных файлов, количество понимаемых ЯП выросло до 170;
- cargo-crev v0.4 (обсуждение) — UX системы распределенного ревью пакетов был переработан в сторону сильного упрощения;
- Smithay v0.2 (код, обсуждение) — в библиотеке для разработки оконных менеджеров для Wayland был добавлен пример Anvil, улучшена поддержка цветов и XWayland, переписан DRM;
- oxide-auth v0.4 (обсуждение) — OAuth2 библиотека была полностью переписана и теперь совместима с actix, rocket и rouille;
Хабр недавно ослабил гайки и теперь разрешает ссылаться на внешние ресурсы-сообщества, так что всех желающих познакомиться с Rust приглашаю заглядывать за помощью и советами в русскоязычные ресурсы по Rust'у:
Это все, спасибо за внимание!
Если я не добавил какую-то важную ссылку или событие, смело закидывайте в комментарии. :)
КДПВ взята отсюда, остальные картинки из сайтов соответствующих проектов.
Автор: ozkriff