Мой комментарий к новости про Rust 1.28 с обзором ржавых событий за месяц неплохо зашел, так что вот держите очень субъективный срез ржавых новостей за прошлый месяц.
В этой подборке: Rust 1.29, записи докладов с Rustconf 2018, gfx-rs, Rust2018, порт Flatbuffers, новые версии ripgrep и Alacritty.
Rust 1.29
Вышел Rust 1.29. Основные нововведения — доступные сразу из rustup
'а cargo fix
и cargo clippy
(подробнее в хабропереводе).
Следом была выпущена версия 1.29.1, закрывшая ошибку в std::repeat (обсуждение).
Rust 1.30 и 1.31 будут очень значительными.
Точного списка пока нет, но ожидается что:
- в 1.30 (2018.10.26) войдет частичная стабилизация процедурных макросов;
- в 1.31 (2018.12.07) войдут Rust 2018 + non-lexical lifetimes (NLL).
Видео с Rustconf 2018
Стали доступны видео с RustConf 2018 (программа докладов). Список видео в порядке очень примерной субъективной интересности:
- Using Rust For Game Development — Kyren из Chucklefish рассказывает про ECS; Доступа расширенная текстовая версия доклада;
- Integrating Rust into Tor: Successes and Challenges — как Tor потихоньку ржавеет (треть кода Тора теперь на Rust);
- Using Raft in Rust — введение в pingcap/raft-rs;
- Space, The Rusty Frontier — Ржавые космические спутники;
- How to (not) introduce Rust at your workplace — о неудачном опыте внедрения Rust в компании и какие из него можно сделать выводы;
- Embedding Rust in C/C++ — от основ FFI до тонких моментов и набитых на практике шишек;
- Getting Something for Nothing — как Rust может помочь в программировании для встраиваемых систем;
- Benchmarking and Optimization of Rust Libraries — обзор средств и подходов к оптимизации и бенчмаркингу;
- The Dark Secrets Lurking Inside cargo doc — экскурсия по функционалу rustdoc, включая не всем известные возможности и немного о его устройстве;
- Project Mentat: a store for evolving data in Rust — зачем нужен и как устроен mozilla/mentat (прим. в начале сентября проект внезапно заморозили из-за смены приоритетов);
- C2Rust: Migrating Legacy Code to Rust — еще один способ (corrode и citrus-rs) частично автоматизировать перевод кодовой базы с Си на Ржавчину, как он работает, что может лучше/хуже, как проверить, что логика не сломалась, и какие потуги есть в "обезопашивании" сгенерированного кода;
- The Opposite of Spaghetti Code: Building for Understanding — как с умом использовать средства Rust для построения надежных, понятных и расширяемых API;
- My Little Procedural Macro — небольшой экскурс в мир написания процедурных макросов. как они работают, чем отличаются от декларативных, пример и советы;
- Writing Crates for Complete Beginners — A Tour of Turtle — turtle.rs как пример библиотеки для обучения программированию, Rust как чей-то первый ЯП, как спрятать всю сложность за очень простым АПИ и выдавать фичи раста очень дозированно;
- Rust and the Web Platform: A Rookie’s Guide — долгий путь интернета к WASM и как с этим связана Ржавчина.
Бонус: прилетело несколько записей с Rust Cologne:
- hyperjson — про питонячий модуль разбора JSON mre/hyperjson, написанный на Rust при помощи PyO3;
- Share Secrets Safely — про упрощалку работы с GPG share-secrets-safely/cli.
WebAssembly
-
[habr] Yew — Rust&WebAssembly-фреймворк для фронтенда. Запись доклада Дениса про Yew на HolyJS;
-
Продолжает разрастаться The wasm-bindgen Guide;
-
wasm-pack 0.5 (что такое wasm-pack?)
Изменения:
build
команда теперь инкрементальная, добавилась командаtest
, появился сайт (подробности); -
Вышел web-sys пакет (обсуждение) — пакет, предоставляющий сырые привязки к средствам манипуляции DOM, WebGL, WebAudio, таймерам, fetch и т.п. Со временем,
web-sys
станет частью stdweb; -
greenwasm — новый проект по написанию совместимого со спецификацией WebAssembly движка на Rust;
-
Wasabi — фреймворк для динамического анализа WASM.
WebRender, gfx-rs и gfx-portability
Тут много движухи было последнее время:
-
kvark (разработчик gfx-rs) сходил в гости в devzen: DevZen #210: Растаманский WebGPU:
В этом выпуске: говорим с гостем о том, как изменилась его жизнь после перехода из Rockstar Games в Mozilla; обсуждаем WebRender, WebGPU API и Vulkan Portability; не обходим стороной темы Diversity;
-
-
В экспериментальном порядке, Gecko завели на WebRender через Vulkan;
-
На iphone8 удалось запустить gfx-hal с Metal бэкендом;
-
RPCS3 and Dolphin on macOS using gfx-portability (обсуждение) — при помощи gfx-portability удалось запустить эмулятор PlayStation3 с Vulkan бэкендом;
-
Benchmarking gfx-portability versus MoltenVK and OpenGL with Dota2 on Mac (обсуждение)
Ржавый игрострой
-
Стали доступны ночные сборки разрабатываемого градостроительного симулятора Citybound (обсуждение). Логика игры остается на Rust, но UI теперь весь на React/WASM.
_Про Citybound был отличный доклад на RustFest'е._
-
В физический движок nphysics завезли базовую поддержку деформируемых тел;
-
Было много разговоров про будущее cgmath и nalgebra, одним из итогов которого является публикация nalgebra-glm (обсуждение) — облегченной обертки над "взрослой" nalgebra;
-
В связи с разговорами о создании gamedev-wg, значительно обновился arewegameyet.rs — добавлена/обновлена информация о куче ржавых библиотек и игр;
-
Delaunator (обсуждение) — быстрая и простая библиотека для триангуляции Делоне;
-
По итогам недавнего LD42 джема:
- @Icefoxen опубликовал игру "Running In To Space" и очень подробно поделился своим опытом;
- @Ratysz опубликовал игру о выживании в условиях глобального потепления "It's Not Cool":
-
(Бессовестная "реклама") завел тему на русскоязычном форуме про свою потихоньку развивающуюся пошаговую игру Земерот;
Что бы вы убрали из Rust?
Занятная тема в /r/rust, где из комментариев можно узнать порядочно всяких шероховатостей языка.
Ржавый порт FlatBuffers
Завезли официальный порт гуглового FlatBuffers на Rust (обсуждение). Толстый слой тестов, фаззинг, производительность и все остальное присутствуют.
Don't fear 1.0!
Интересное обсуждение в /r/rust почему экосистема медленно перебирается на > 1.0 пакеты.
TLDR:
- Чтобы автор стабилизриовал пакет, ему надо убедиться что АПИ адекватный — для этого ему надо увидеть, как люди им пользуются. Много людей не пользуются пакетами < 1.0, ожидая их стабилизации — от этого стабилизация замедляется;
- Для пользователей: хотите больше стабильных пакетов — пользуйтесь нестабильными и давайте обратную связь автору;
- Для авторов: не парьтесь так сильно насчет выпуска 1.0.
ripgrep 0.10
ripgrep (rg) это более быстрая и удобная альтернатива классическому grep (т.е. ржавый аналог The Silver Searcher и ack).
Вышла версия 0.10 (обсуждение, очень занятное) — теперь работает еще быстрее, поддерживает PRCE2 и многострочные запросы.
Также, пакет ripgrep пробрался в репозиторий ubuntu 18.10.
Alacritty 0.2
Alacritty это эмулятор терминала с GPU ускорением, который пытается быть очень-очень быстрым на любом 4К экране.
Вышла версия 0.2 (обсуждение) с поддержкой прокрутки. От ее добавления долго отказывались, говоря "используйте tmux", но в итоге получилось родить не сильно бьющую по производительности реализацию.
Кстати, как и ripgrep, Alacritty пролезает в линуксовые дистрибутивы: завезли в Арч;
Новые RFC
По RFC довольно удобно наблюдать, в какую сторону движется язык. В заголовке каждого PRа есть ссылка "Rendered", по которой RFC доступен в удобочитаемой форме.
RFC 2438 "Deny the overflowing_literals
lint for the 2018 edition" —overflowing_literals
в Rust 2018 станет жесткой ошибкой, а не просто предупреждением;- RFC 2383 "Lint Reasons" — добавит аргумент "reason" для документирования зачем мы хотим отключить какую-то проверку и новый атрибут "expected", который будет требовать срабатывания проверки;
- RFC 2437 "Rustfmt stability" — аккуратные попытки очертить границы обратной совместимости автоформатирования кода;
RFC 2535 "Or patterns, i.e Foo(Bar(x) | Baz(x))
" — сахар для ИЛИ в сопоставлениях;- RFC 2545 "Elide array size" — возможность не указывать явно размер массивов в однозначных контекстах, например:
static BLORP_NUMBERS: [u32; _] = [0, 8, 15];
- RFC 2361 "Simpler alternative dbg!() macro" — еще одна попытка добавить
dbg!
макрос; - RFC 2412 "The optimize attribute" — предлагает ввести настраиваемый
#[optimize]
атрибут для регулировки оптимизаций на уровне item'ов; - RFC 2544 "Make the turbofish syntax redundant" — очередная попытка убить "турборыбу" (
::<>
, как вfoo::<Bar>()
);
RFC 2418 "Add futures and task system to libcore" опять отложен, не судьба ему стать частью нововведений Rust2018.
Идет обсуждение семантики импортов в Rust 2018.
Одной строкой
- Небезызвестный Bryan Cantrill написал масштабный пост Falling in love with Rust (обсуждение);
- [habr] FB2D — 2D framework for Linux Frame Buffer (Rust);
- Продолжаются споры про будущее RLS (которые забурлили после заявлений о намерении выпустить RLS 1.0);
- URLO тема от Kornel (автор crates.rs) про "фактор автобуса" в ржавой экосистеме и что с этим делать;
- Rust on iOS — a how to with source code (обсуждение) — инструкция о создании ржавого приложения для IOS;
- Beware the rust cache on Travis — аккуратней с наивным кешированием сборок в travis-ci, может быть оно вам только мешает;
- IntelliJ Rust продолжает развиваться: #82, #83 — в частности, улучшены дополнение зависимостей в Cargo.toml, поддержка макросов и Rust2018;
- benfred/py-spy — профайлер для питона;
- Binaryum (обсуждение) — дизассемблер с логикой на Rust и UI на электроне;
- lewton 9.1 (обсуждение) — новая версия ogg декодера, теперь без unsafe;
- rayn (обсуждение) — небольшой трассировщик лучей;
- MesaLink (обсуждение) — A memory-safe and OpenSSL-compatible TLS library;
- Tantivy 0.7 (обсуждение) — библиотека для высокопроизводительного полнотекстового поиска (аналог Lucene), улучшена производительность;
- miniserde (обсуждение) — mini serde, поддерживающий только JSON. Вроде занятно, но не до конца ясно где его применение имеет смысл;
- Geemili/mdproof (обсуждение) — легковесный конвертер markdown->pdf;
- Spirit (обсуждение) — библиотека для упрощения создания ржавых демонов;
Это все, спасибо за внимание!
Если я не добавил какую-то важную ссылку или событие, смело закидывайте в комментарии. :)
КДПВ взята из статьи Looking to what to learn in 2018? Learn Rust!, остальные картинки из сайтов соответвующих проектов.
Автор: ozkriff