Предлагаю вашему вниманию субъективную подборку ржавых новостей за ноябрь. В этой подборке: Rust 2018, RustRush, видео с конференций, Amazon Lambda и Firecracker, квизы, переход exonum на actix-web, 10 причин использовать Rust.
Результаты Rust опроса 2018
Опубликованы результаты ежегодного Rust-опроса (обсуждение), который шел с августа.
Там довольно много всякой интересной информации, особенно, если рассматривать в динамике по сравнению с прошлыми годами, но отдельно радует рост количества профессионально использующих язык: если в прошлом году 21% опрошенных использовали Rust на работе, то в этом году — уже 30%.
Rust 2018
Уже на днях будет выпущен Rust 1.31 — первая стабильная версия с поддержкой новой редакции языка: Rust 2018. (что за "редакции"?)
К выходу новой редакции языка приурочили редизайн официальной страницы языка — beta.rust-lang.org — который вызвал поляризованные отзывы о формулировках и шрифтах-цветах (например: 1, 2);
Firecracker от AWS (Amazon Web Services)
"В AWS представили Firecracker — «микровиртуализацию» для Linux":
На AWS re:Invent 2018, что проходит в эти дни в Лас-Вегасе, состоялся анонс Firecracker — новой технологии виртуализации с открытым кодом, основанной на Linux KVM. Авторы обещают, что с ней «в доли секунды можно запускать легковесные микровиртуальные машины (microVMs) в невиртуализированной среде, получив преимущества и традиционных ВМ — в виде безопасности и изоляции рабочих нагрузок, и контейнеров — в виде эффективного использования ресурсов».
Основу проекту положила Open Source-разработка от Google — crosvm из Chromium OS, что написана на Rust и отвечает за запуск операционных систем с виртуализацией устройств (но без эмуляции реального аппаратного обеспечения). Посему код Firecracker тоже написан на языке Rust, и его авторы обещают возвращать свои исправления в кодовую базу родительского проекта, хотя сами проекты со временем сильно разошлись в своём предназначении.
Так же:
- /r/rust: "AWS firecracker microvm is all rust";
- /r/rust: "Rust support has been added to AWS Lambda";
Видео докладов с RustFest 2018 Rome
- "Declarative programming in Rust";
- "Sequoia: A New OpenPGP Implementation in Rust";
- "Oh Boy! Creating a Game Boy Emulator in Rust";
- "One Thousand Ways to Die in Rust FFI";
- "Rust, For Science!";
- "Behind The Scenes Of Producing An Executable";
- "Simple CRDT in Rust";
- "Grappling with growth, and other good problems to have";
- "Caging the SpiderMonkey — Ensuring safe JS bindings in Servo";
- "Fun with Rusty Robots";
- "Increasing Rust's Reach Project Highlight";
Видео докладов с Rust Belt Rust 2018
Все с растфеста посмотрели? Тогда вот еще добавка с Rust Belt Rust 2018:
- "Core Team Talk" — Ashley Williams and Niko Matsakis;
- "Monotron — a 1980s style home computer written in Rust" — Jonathan Pallant;
- "Syntax conveniences afforded by the compiler" — Tshepang Lekhonkhobe;
- "Actix and Actors in Rust" — Nathan Hawkins;
- "Lightning Talks: Rust Quiz" — Alex Crichton and David Tolnay;
- "Lightning Talks: Rustbots" — Robots powered by Rust — Rahul Thakoor;
- "Lightning Talks: Personal Wiki" — James Sacksteder;
- "Lightning Talks: Rust's Family Tree" — Jenny Manning;
- "Lightning Talks: Announcing the Ann Arbor Meetup" — Esty Thomas;
- "Lightning Talks: Rust In Space" — myrrlyn;
- "Percy: Isomorphic Web Apps with Rust + WebAssembly" — Chinedu Francis Nwafili;
- "Evolving API design in Rust" — Simon Nicholas Heath;
- "Maintaining the Rust Community" — Arshia Mufti;
- "Move fast and don't break things: High-performance networking in Rust" — Joshua Liebow-Feeser;
- "State of the crates.io" — Sean Griffin;
И закину сюда же до кучи двухчасовую запись Rust Bay Area Meetup.
RustRush 2018: конференция 15-16 декабря в Москве
RustRush 2018 — конференция для разработчиков на Rust, посвящённая вебу, блокчейну, высокой производительности и системному программированию.
Осталось меньше двух недель! CfP закончен, выложена окончательная программа докладов.
cheats.rs
cheats.rs (репозиторий, обсуждение) — памятка по Rust + подборка ссылок на другие подобные памятки. Может дико пригодиться при погружении в язык.
Сайт, кстати, сделан с использованием Zola (см. ниже в секции новых и обновленных пакетов).
Как мы переводили Exonum с Iron на actix-web
Статья о практическом опыте работы с относительно хитрым обобщенным кодом от Gorthauer87. Код кишок местами сложновато устроен, зато итоговый результат для пользователя удобен и красив.
10 неочевидных преимуществ использования Rust
freecoder_xx написал обзорную статью о менее продвигаемых достоинствах Rust.
В данной статье собран десяток неочевидных и особо не рекламируемых преимуществ использования Rust, которые, я надеюсь, помогут вам определиться с выбором этого языка для ваших проектов.
Rust Quiz
Из доклада Алекса вырос сайт со средне и очень сложными вопросами по крайним случаям и "бородавкам" Ржавчины (обсуждение). По нажатию кнопки "reveal" ("сдаюсь") показывается развернутое объяснение что за чертовщина происходит в примере кода.
Исходный код всего этого дела живет тут. Туда можно делать PRы, если вы знаете еще клевые вопросы подобного формата.
Embedded
- OxidizeConf (обсуждение) — объявлена конференция об embedded/IoT на Rust;
- "This Year in Embedded Rust" — подведение итогов прогресса рабочей группы программирования под встраиваемые системы за год:
- Организовалось активное подсообщество;
- Стало возможно вести разработку без ночников;
- Сильно расширился список поддерживаемого железа;
- Понизился порог вхождения за счет разработки дополнительного инструментария и готовых шаблонов проектов;
- Улучшилась документация, в частности были начаты:
- The Embedded Rust book — основная книга;
- The Discovery book — введение в предметную область;
- The Embedonomicon — для хардкора;
- Awesome Embedded Rust — список интересных проектов;
- Bootstrapping My Embedded Rust Development Environment (обсуждение) — обзор рабочего процесса и инструментов встроенщика;
- embedded-sdmmc-rs (обсуждение) — позволяет читать SD/MMC карты, поддерживает no_std;
- drone (обсуждение) — ПО и контроллер для квадракоптеров;
WebAssembly
- "Programming WebAssembly with Rust" (обсуждение) — открыт платный доступ к бета версии книги;
- typed-html (обсуждение) — реализует макрос
html!
, позволяющий создавать HTML документы из Rust кода при помощи JSX-совместимого синтаксиса (БОНУС: отлично работает и в WASM'е!); - HOWTO: Setting up WebAssembly on stable rust without rustup;
- Terrarium (обсуждение) — площадка для экспериментов с WASM от Fastly;
- php-ext-wasm (обсуждение) — проект по прямому запуску WASM из PHP, основан на paritytech/wasmi;
- Wasmer (обсуждение, код) — оптимизирующий JIT компилятор WASM, основанный на Cranelift;
- Bringing Elm's architecture to Rust and Webassembly (обсуждение) — про willow, попытку переноса "архитектуры Elm" на Rust;
Игрострой
- Я завел twitter.com/rust_gamedev (по аналогии с rustwasm, rustembedded и т.п.), странно что этого никто раньше не сделал;
- Новая студия Embark, основанная выходцами из DICE/EA, заявила о намерении использовать Rust как основной язык (обсуждение);
- Видео "Modulator crate and Play app (Rust coding series)" (обсуждение) — Andrea Pessino (CTO Ready at Dawn) записал пафосное видео-презентацию библиотеки Modulator;
- Rusted Ruins (обсуждение) — расширяемый рогалик;
- Alexandru Ene: Rust And Game Development (обсуждение) — мысли о текущем состоянии ржавого игростроя и в каких направлениях ему стоит развиваться;
- Vulkano 0.11 released (обсуждение) — улучшена документация и работа с шейдерами, Tomaka отстранился от разработки (и вообще разработки игр);
- grr (обсуждение) — еще одна обертка над OpenGL (в reddit обсуждении есть сравнение с glium), идет сразу с PBR примером (картинка);
- glsl-0.13 and its visitor pattern — улучшен модуль glsl::syntax и "AST visitors";
- /r/rust: "Rust in AAA game engine" — очень толковое обсуждение перспектив использования Rust в больших игровых движках;
- This month in rustsim #2 (November 2018):
- улучшены деформируемые объекты;
- множество мелких улучшений в коде и документации nalgebra/ncollide;
- начата работа над новым пакетом "space" с пространственными структурами данных;
Экосистема движка Аметист:
- Основан Фонд Аметиста — Amethyst Foundation (обсуждение) — в основном, для приема пожертвований (F.A.Q.);
- Появился отдельный форум аметиста, в котором, например, есть вики-тема со списком игр на движке;
- Сменился логотип;
- Laminar 0.1 (обсуждение) — сетевая библиотека для игр, работающая поверх UDP (список возможностей), интегрирован в Аметист;
- Видео "Everpuzzle — using the Amethyst Engine with Rust for Games" — презентация о процессе разработки головоломки Everpuzzle;
- Where The Fun Begins — Azriel рассказывает о реализации столкновений разных зон 2д персонажей;
- LemRunner (обсуждение, код) — смесь Леммингов и раннера для Game Off 2018;
Одной строкой
- IntelliJ-Rust продолжает развиваться: #86, #87 — в частности, улучшена работа со стандартыми макросами, улучшена интеграция с LLDB, добавлена команда группировки импортов (GIF) и поддержка сворачиваемых регионов (GIF);
- С марта 2019 для публикации чего-то на crates.io будет требоваться подтвержденный почтовый адрес (обсуждение);
- Доля Rust-кода в Firefox постепенно растет (обсуждение) — уже что-то порядка 6% кодовой базы;
- How to speed up the Rust compiler in 2018: NLL edition (обсуждение) — героическое ускорение компилятора раста;
- Getting started with nightly async/await support (обсуждение) — async-синтаксис еще не скоро стабилизируют, но с ним уже можно начинать знакомиться;
- How Rust helps keep Kentik's performance on high — Kentik рассказывают о роли Rust в их бэкенде;
- A hammer you can only hold by the handle (обсуждение) — наглядная демонстрация выгоды от правильного использования системы типов;
- Build Your Own Shell using Rust (обсуждение) — каждый программист должен написать хотя бы один шелл, да? :) ;
- Things Rust doesn’t let you do (обсуждение) — перечисление основных ограничений, которые Rust накладывает на код, зачем они нужны и как их при необходимости можно обходить;
- After NLL: Moving from borrowed data and the sentinel pattern (обсуждение) — Нико продолжает свою серию об NLL и планах на будущее;
- Stacked Borrows Implemented: An Aliasing Model for Rust (обсуждение) — Ральф продолжает докапываться до семантики Ржавчины;
- Implementing Rust’s std::sync::Mutex in D (обсуждение) — хоть статья и не нацелена на Rust программистов, она дает хороший ликбез чем хорош стандартный ржавый мьютекс;
- /r/rust: What are the main challenges when switching to Rust? — обсуждение сложностей перехода на Ржавчину;
- /r/rust: "When should a library panic vs. return 'Result'?") — очень хорошее обсуждение нюансов "паники vs result";
- Альтернативный бекенд компилятора Rust Cranelift продолжает развиваться: он уже может выдавать код с немного лучшей производительностью чем LLVM с
--opt-level=0
и дает это на 30% быстрее (обсуждение);
Новые и обновленные пакеты
Некоторые свежие пакеты за месяц или существенные обновления старых:
- tr (обсуждение) — макросы для локализации приложений, вдохновленные 'tr' из Qt;
- cargo nono (обсуждение) — расширение cargo, которое по внешним эвристикам пытается найти зависимости, ломающие no_std;
- immense (обсуждение) — пакет для генерации трехмерных сеток;
- Logos (обсуждение) — позволяет писать "невероятно быстрые" лексические анализаторы;
- fluid (обсуждение) — фреймворк для написания тестов, вдохновленный XUnit;
- guerrilla (обсуждение) — эксперимент по реализации "monkey patching" для Rust (кстати, про название пакета: я никогда не задумывался над этимологией термина "monkey patch");
- serde_postgres — простой способ десериализовать строки из postgres в произвольные структуры (обратная сериализация не поддерживается);
- pgxr — позволяет писать ржавые функции расширения для PostgreSQL;
- MutGuard (обсуждение) — позволяет запускать произвольный код при каждом взятии изменяющей ссылки на хранимые данные (например, для проверки инвариантов);
- Zola 0.5 (обсуждение) — генератор статических сайтов Gutenberg сменил название на Zola и обзавелся подгрузкой данных из CSV/TOML/JSON, шаблонами страниц, "прозрачными секциями";
- rand 0.6 (обсуждение) — библиотека для генерации случайных чисел, помимо теперь обзавелась своей собственной книгой;
- lifeguard 0.6 (обсуждение) — позволяет создавать пулы переиспользуемых объектов; Новая версия улучшает производительность, разрешает создавать рекурсивные указатели и добавляет служебные типажи для удобства;
- Pijul 0.11 (обсуждение, код) — система контроля версий, основанная на теории патчей, переехала на новый Tokio, обзавелась неполным клонированием, получила поддержку SSH прокси и конфигурационных файлов;
RFC
По RFC (Request for Comments) довольно удобно наблюдать, в какую сторону движется язык, так что вот некоторые интересные. В заголовке PRов есть ссылка "Rendered", по которой RFC доступен в удобочитаемой форме.
В этом месяце были приняты:
- RFC #2561 Future possibilities — в новых RFC появится секция с перспективами развития предложенной идеи (мета-RFC);
- RFC #2591 Stabilise exhaustive integer pattern matching — стабилизация исчерпывающих числовых сопоставлений, т.е., например, если в сопоставлении
u8
переменной перечислены все 255 значений, то_
ветка будет не нужна;
RFC в рассмотрении:
- RFC #2592 Stabilize 'std::task' and 'std::future::Future' — предлагает стабилизировать футуры (это отдельный от async/await синтаксиса RFC);
- RFC #2593 Enum variant types — предлагает расширить возможности использования вариантов перечислений, сделав их ближе к обычным структурам;
- RFC #2584 Structural Records — предлагает добавить анонимные структуры (или их можно назвать кортежами с именованными полями);
- RFC #2602 #[attribute]s galore — предлагает разрешить навешивание атрибутов на ВЖ, типы, ограничители (bounds) и еще кучу всего;
- RFC #2603 Symbol Mangling v2 — предлагает причесать схему декорирования символов;
- RFC #2500 Needle API предлагает добавить
std::needle
с абстракциями над&str
,&mut str
,&[T]
,&mut [T]
,Vec<T>
и&OsStr
;
Pre-RFC:
- Pre-RFC for Anonymous Variant Types, a minimal anonymous sum type proposal — предлагает добавить
задницыанонимные перечисления с типами вроде(_|_)
(NoneError|ParseIntError)
; - Pre-RFC: sum-enums — предлагает ввести новый вид перечислений с синтаксисом
enum(A, B, C, ..)
иenum Foo(A, B, C, ..)
; - Rust traits and their (lack of) privacy — phaazon предлагает добавить типажам возможность иметь приватные методы (тут я как-то прямо очень скептичен);
Был отклонен RFC #2328 officially adopting Ferris — решили, что Ферриса нет особого смысла делать официальным талисманом;
Это все, спасибо за внимание!
Если я не добавил какую-то важную ссылку или событие, смело закидывайте в комментарии. :)
КДПВ взята отсюда, остальные картинки из сайтов соответствующих проектов.