Мой комментарий к новости про 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 запустили на Vulkan, используя WebRender;
На 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!, остальные картинки из сайтов соответвующих проектов.
Комментарии (6)
CodeRush
01.10.2018 22:34+1Спасибо огромное, очень полезный дайджест, нашел для себя много пропущенного ранее.
Следующий пост Брайана можно добавить, хоть он и озаглавлен неудачно:
dtrace.org/blogs/bmc/2018/09/28/the-relative-performance-of-c-and-rust
Jenyay
А на чем сейчас имеет смысл делать GUI на Rust?
inv2004
к сожалению, кажется, что особо не на чём, но если очень хочется, то варианты такие:
gtk (relm или обычный), либо смотреть в сторону web (yew и ещё альтернативы).
vsb
Я планирую на обычном WinAPI попробовать.
Webdesus
Да, в принципе под все существующие библиотеки есть обертки. Я на данный момент тесно работаю с rust-qt-binding-generator. Он генерирует необходимую обертку для работы с qml. Пример TODO
Список существующих GUI библиотек для RUST
bugaevc
Есть достаточно хорошие биндинги для GTK, glib и всей g-экосистемы: https://gtk-rs.org. Есть rust-qt-binding-generator. Но вообще для GUI Rust не очень-то подходит с его моделью памяти (ownership, отсутствие классов и наследования...); имеет смысл писать на Rust ядро/бэкэнд, а GUI — на более «родном» для платформы языке (Vala, Objective-C, Kotlin, ...)