Поскольку праздники кончились, предлагаю вашему вниманию субъективную подборку ржавых новостей за декабрь. В этой подборке: безумие с растом, страшен ли раст, волна пророчеств, Rust 2018, Rust Analyzer.
Rust 1.31 & Rust 2018
Самое важное событие декабря — выпуск Rust 1.31 и Rust 2018, конечно. Туда очень много всего вошло:
редакция 2018, нелексические времена жизни, изменения системы модулей, дополнительные правила вывода времен жизни, const fn, новые инструменты, инструментальные проверки качества кода, документация, новый веб-сайт, улучшения в cargo.
Изменений так много, что обзор всех не получилось запихнуть в один пост, так что через несколько дней были опубликованы вспомогательные заметки:
- Procedural Macros in Rust 2018 (обсуждение) — о процедурных макросах;
- Tools in the 2018 edition (обсуждение) — о расширении инструментария;
Также, имеет смысл полистать мозиловский хорошо структурированный обзор/ликбез 2018й редакции языка: Rust 2018 is here… but what is it? (перевод, обсуждение).
Волна постов про планы на 2019й год
Был кинут официальный запрос сообществу делиться мнениями о 2019м годе — A call for Rust 2019 Roadmap blog posts (обсуждение). В ответ последовала волна из более чем сотни статей (со всеми можно ознакомиться на readrust.net/rust-2019). Вот несколько интересных ответов:
- Лодочник: "Rust 2019: Organizational Debt" (обсуждение);
- Грейдон: "Rust 2019 and beyond: limits to (some) growth" (обсуждение, перевод);
- Клабник: "Thoughts on Rust in 2019" (обсуждение);
- Ральф: "My thoughts on Rust 2019" (перевод);
RustRush 2018
15-16 декабря в Москве проходил RustRush 2018.
Записи докладов будут постепенно опубликованы на Youtube канале, пока доступны два:
- Keynote. Ashley Williams — про дух сообщества и wasm-bindgen;
- Libp2p, a Rust peer-to-peer library. Pierre Krieger;
Также, Pierre Chevalier выложил отчет о поездке.
Генерация типаж-объектов на лету (или безумие с Rust)
idubrov написал занятную статью о низкоуровневых хаках с лютым unsafe'ом. Отличный эксперимент в целях обучения, но, надеюсь, в реальные проекты оно все-таки не пойдет.
Так ли страшен Rust, как его малюют
PsyHaSTe борется с восприятием ржавчины исключительно как системного языка.
Rust Analyzer in 2018 and 2019
Леша matklad поделился информацией о ходе проекта rust-analyzer, который является альтернативой RLS (обсуждение).
Важное дело, учитывая что IDE это очень болезненная тема для раста.
Игрострой
- A simple agenda for the Rust Game Development WG (обсуждение) — Эрланд предлагает создать Игровую Рабочую Группу и сконцентрироваться вокруг Аметиста, сделав его локомотивом экосистемы;
- Выпущена паззл игра "Adventures of Pascal Penguin" (обсуждение, трейлер) — работает в вебе, играбельна по ссылке;
- Using Rust for Gamedev (обсуждение) — автор вышеупомянутого пингвина рассказывает о своем опыте работы над ним;
- Russian AI Cup 2018 — в этом году мэйлрушный Russian AI Cup использует симулятор на Rust+WASM (GIF) (кстати, прошлогодний пост тоже очень интересный) ;
- Sandspiel (обсуждение) — залипательная физическая WASM песочница;
- Published my first game written in Rust: Energy Grid (обсуждение) — экономическая стратегия;
- Dose Response (код, обсуждение) — небольшой наркоманский рогалик с ASCII графикой, проходится минут за пять-десять, доступна веб версия;
- This year in gfx-rs: 2018 (обсуждение) — краткий обзор случившегося с проектом gfx от kvark;
- кстати, пакет gfx-hal выложен на crates.io (обсуждение) — кажется, переработка gfx проекта потихоньку устаканивается и поверх новой версии может начинать расти экосистема;
- nitric (обсуждение) — наследник/переработка specs для возвращения техдолга разросшегося проекта и повышения его гибкости;
- 17cupsofcoffee/tetra (обсуждение) — еще одна попытка написать простой ржавый 2д движок, более высокоуровневый чем ggez;
- Вышел Amethyst 0.10 (обсуждение): Rust 2018, переход на nalgebra, упрощение тестирования и много более мелких изменений;
- This month in rustsim #3 (December 2018):
- nphysics: Добавлены дешевые фиксированные точки для деформируемых тел: видео;
- nphysics: Добавлена поддержка соединений для мультител, что дает возможность прикреплять другие тела к деформируемому телу: видео;
- ncollide: добавлена поддержка капсул и карт высот: видео;
- nalgebra: переработано индексирование матриц, что позволяет удобнее получать срезы;
- nalgebra-glm: добавлены ортографические и перспективные проекции;
- цели на следующий год: интеграция с аметистом, поддержка жидкостей, "непрерывное" обнаружение столкновений, улучшение производительности;
Одной строкой
По васму и встройке в декабре заметной активности было мало, поэтому отдельных секций у них не будет.
- Обновления от IntelliJ-Rust: #88, #89 — в том числе подсветка unsafe кода (GIF) и всякая стыковка с 2018й редакцией языка;
- What are various red flags for you in Rust code reviews? — реддит-обсуждение со списками более-менее часто встречающихся запахов кода. Даже если вы не часто отсматриваете чужой код, такие списки могут просто лишний раз заставить задуматься над тем как вы пишете свой код;
- How I Wrote a Modern C++ Library in Rust (обсуждение) — как написать ржавую библиотеку с полноценным плюсовым интерфейсом;
- More on RLS version numbering (обсуждение) — споры про "стабилизацию" и позиционирование RLS продолжаются — RLS теперь будет иметь ту же версию что и компилятор (1.31 в посте), общественность в целом негодует что до 1.0 RLS и близко не дорос;
- Async in Rust, circa 2018 (обсуждение) — статус интеграции async/await в язык;
- async-io-demo (обсуждение) — обучающее демо асинхронного io: от mio до безстековых корутин;
- Reflecting on Rust and WebAssembly in 2018 (обсуждение) — как принято, ретроспектива этого года и прогноз на следующий;
- /r/rust "writing "*" for crates in cargo.toml won't always mean "latest version"" — еще одно напоминание, что не стоит использовать "*" версии зависимостей, потому что оно, например, вполне может взять и откатиться к старой версии зависимости;
- The Swiss Army Knife of Hashmaps (обсуждение) — экскурсия по внутренностям hashbrown (быстрая альтернатива стандартному
HashMap
'у); - habr: Изучаю Rust: Как я UDP чат сделал c Azul — отчет от VanquisherWinbringer;
- habr: Первые шаги по Rust — обзор языка от zharko_mi;
- Alexa Skills in Rust (обсуждение) — написание навыков для виртуального помощника от амазона;
- Inside Rust's Async Transform (обсуждение) — экскурсия в async;
- The Spirit tutorial (обсуждение) — урок по демонизации при помощи пакета spirit;
- /r/rust: Porting C code to Rust- notes, questions, and request for review — опыт портирования status_monitor с Си на Rust и ревью кода;
- A Rusty Advent of Code: My AOC Experience with the Rust Community (обсуждение) — отчет об участии в adventofcode;
- Comparing Pythagorean triples in C++, D, and Rust (обсуждение);
- /r/rust: Making Rust Float Parsing Fast and Correct — роскошный пост о быстром парсере чисел с плавающей точкой;
- Tokio: A great 2018, an even better 2019 — (обсуждение) — рефлексия про прошедший год от проекта Tokio;
- Using C libraries in Rust: making a *-sys crate — отличный экскурс в написание ржавых оберток к сишным библиотекам;
Новые и обновленные пакеты
- 'cargo-crev' and Rust 2019 fearless code reuse (обсуждение, код) — платформа для публичного ревью пакетов (демо скринкаст);
- enum_dispatch (обсуждение) — макрос, помогающий в некоторых ситуациях удобно заменить типаж-объекты на перечисления (пробрасывает вызов функции кажому из вариантов перечисления);
- structview (обсуждение) — позволяет безопасно получить представление бинарных данных в виде высокоуровневых структур;
- cargo-call-stack (твит) — Japaric опубликовал расширение cargo для статического анализа стека вызовов;
- swc (обсуждение) — очень быстрая альтернатива babel;
- ds_store (обсуждение) — парсер
.DS_Store
файлов; - sd (обсуждение) — "s[earch] & d[isplace]", ржавая альтернатива sed с более интуитивным интерфейсом;
- enigma (обсуждение) — игрушечная реализация виртуальной машины Erlang'а;
- http_static (обсуждение) — простой статический веб сервер, использует tower-web;
- ws-unix-framed-bridge (обсуждение) — перенаправляет сообщения из вебсокетов в юникс-сокеты и наоборот;
- Exonum 0.10 — фреймворк для построения приватных блокчейнов сменил свою сериализацию на protobuf, изменил формат сообщений, а биткоин анкоринг теперь использует segwit;
- Rocket v0.4 (обсуждение) — веб фреймворк получил типизированные URI, поддержку БД и переработанные запросы;
- resvg 0.4 (обсуждение) — библиотека отрисовки svg файлов получила начальную поддержку фильтров, накладывающихся масок/clippath, условного рендеринга и много чего еще;
- Tantivy 0.8 (обсуждение) — в библиотеке полнотекстового поиска был переработан апи коллекций и улучшена поддержка многопоточности;
Особо интересных RFC под конец года мной не было замечено, так что это все на сегодня, спасибо за внимание!
Если я не добавил какую-то важную ссылку или событие, смело закидывайте в комментарии. :)
(КДПВ взята отсюда, остальные картинки из сайтов соответствующих проектов.)
Комментарии (11)
amarao
10.01.2019 18:06В КДПВ зубы у краба не такие страшные, как пасть крабов (и всех ракообразных IRL):
i.gifer.com/7W4C.mp4
Mingun
10.01.2019 18:56А не подскажите, есть ли на rust какая-нибудь универсальная система сборки, не rust проектов (и это даже не совсем ПО)? Типа gulp из мира JS? Есть проект, для которого написаны утилиты на rust, требующий некоторых шагов сборки для получения конечного результата (вызов этих утилит). Не хочется разводить зоопарк инструментов, поэтому есть желание, чтобы вся сборка осуществлялась единообразно. Идеальное решение — если в результате можно склонировать репозиторий, запустить cargo build, и соберутся утилиты и финальный проект
freecoder_xx
10.01.2019 19:06В Cargo вы можете выполнять собственный скрипт при сборке. Дополнительно есть еще плагин cargo-script.
Но если вам достаточно просто вызовов некоторых команд подряд, то проще сделать shell-скрипт с вызовом
cargo build
и прочего.Mingun
10.01.2019 19:33Хочется кроссплатформенного скрипта :). build скрипт понятно, что есть, но ведь нужны всякие плюшки, типа объявления задач, выстраивания цепочек зависимостей, автосправку по доступным задачам и т.п.
Глянул
cargo-script
— немного не то, мне не принципиально, чтобы можно было запускать прям текстовый файл. Если скрипту сборки нужно предварительно собраться, не страшно
idubrov
10.01.2019 20:10но, надеюсь, в реальные проекты оно все-таки не пойдет.
Ничё-ничё, у меня уже продакшн версия на подходе. Надо статью написать (наверное, на английском в этот раз).
ozkriff Автор
Извиняюсь, что выкладываю аж 10ого числа, из-за праздников съехало расписание.
Поскольку я пишу это уже задним числом, вот важная новость "из будущего": Стив Клабник уходит из Мозиллы.
Грустно, я очень привык за эти годы что он является главным из официальных "лиц раста", но в целом это не критично, потому у раста еще куча толковых людей в "правительстве".
alex-pat
Мне показалось, что это означает, что хотя уходит из мозиллы, в core team останется, или я ошибся?
ozkriff Автор
Может и значит, а может и нет, время покажет. Быть в команде ядра, не работая в мозилле, сложнее все-таки. В любом случае его степень влияния на проект сильно упадет.
VadimVP
Не думаю что внутри в проекте что-то от этого изменится, Клабник в основном ездил по конференциям и постил в соц сетях, т.е. в некотором смысле "лицом раста" и работал, а техническими задачами и даже документацией уже давно практически не занимался.
ozkriff Автор
Да, именно так и думаю. Но мне все равно грустно. :)
freecoder_xx
Насколько я знаю, он в language team не входил. Так что его уход на дизайне самого языка никак отразиться не должен.