Новости Rust #2 (октябрь 2018)

КДПВ с тыквой, потому что хэллоуин

Лучше с задержкой на неделю, чем никогда, так что предлагаю вашему вниманию субъективную подборку ржавых новостей за октябрь.

В этой подборке: Rust 1.30, Rust 2018, конференция RustRush, Amethyst 0.9, сквотинг crates.io, сборщик мусора, споры про 2D графику, Non-lexical lifetimes, функциональный GUI.


Rust 1.30 и тестирование Rust2018

Вышел Rust 1.30 (обсуждение). Основные нововведения — частичная стабилизация процедурных макросов, импорт макросов через обычный use, улучшение системы модулей, «сырые» идентификаторы и поддержка no_std приложений (подробнее в хабропереводе).

Rust 1.31 будет первым выпуском редакции (edition) «Rust2018» (что за «редакции»?), в связи с чем всех желающих приглашают подключаться к тестированию бета версии 1.31 и cargo fix.


RustRush 2018: конференция 15–16 декабря в Москве

RustRush 2018 — конференция для разработчиков на Rust, посвящённая вебу, блокчейну, высокой производительности и системному программированию.

Обновился сайт (rustrush.ru) — опубликован почти полный список докладчиков и программа, начата продажа основной партии билетов.

Будут четыре участника проекта Rust Language: Стив Клабник, Эшли Уильямс, Паскаль Хертлиф, Катарина Фей. Из других звёзд локальных и не очень — Максим Лапшин с прошивкой IP-камеры, Костя Степанов и Пьер Кригер aka tomaka. Программа.

Если кто-то хочет подать доклад, до 19 ноября открыт Call for Papers.

лого rustrush


WebAssembly


  • Programming WebAssembly with Rust — The Book (обсуждение) — намечается книга по WASM/Rust;


  • WebAssembly«s post-MVP future: A cartoon skill tree (хаброперевод: «Будущее WebAssembly в виде «дерева навыков») — куда и как дальше будет развиваться WASM и какую роль в его экосистеме будут играть языки вроде Rust;


  • Ruukh (код, обсуждение) — экспериментальный фронтэнд веб фреймворк (использует нестабильные фичи), вдохновлен VueJS и ReactJS;


  • Draco (обсуждение) — библиотека для построения клиентских приложений, вдохновлена Redux и Elm;


  • Twiggy 0.3.0 (код) — среди прочих обновлений, у профейлера размера .wasm файлов появилось руководство пользователя;


  • Для parcel (молодая и быстрая система сборки JS проектов, которая дружит с растом и не требует настройки) вышел плагин, который интегрирует его с пакетом wasm_bindgen: parcel-plugin-wasm.rs.

    Вот шаблон, который демонстрирует работу плагина: rustwasm/rust-parcel-template.

    Спасибо mvlabat за новость.


  • Smithy progress update: how I decreased WebAssembly bundle size by 90% — название немного вводит в заблуждение, потому что про уменьшение веса там, в сущности, только небольшой кусочек в духе «подкрутил настройки LLVM и использовал wasm-opt», но в статье можно найти другие полезные мелочи.

    Вот, заодно, глава из wasm книги про уменьшение размера артефактов.


  • Calls between JavaScript and WebAssembly are finally fast (обсуждение) — Rust’а в самой статьей нет, но для Rust/WASM экосистемы событие все равно очень важное;


  • Multithreading Rust and Wasm (обсуждение) — подробный разбор ситуации с многопоточностью в Ржавчине и демо с трассировкой лучей:

    Демо с трассировкой лучей



Embedded


  • rust-industrial-io — используя libiio, предоставляет доступ к промышленным сенсорам и приводам;


  • Начата разработка cortex-r-rt — рантайм пакета для Cortex-R процессоров;


  • keypad — драйвер для клавиатурных матричных схем;

    схема


  • Bluetooth Low Energy with Rust (обсуждение);


  • Со стабилизацией #[panic_handler] в 1.30, стала возможна разработка Cortex-M приложений, работающих без ОС, с использованием стабильного компилятора.


  • shared-bus (код) — позволяет безопасно делить перефирию между устройствами при помощи мьютексов;


  • Embedded WG (рабочая группа) растет: уже 27 разработчиков в 11 командах;



Ржавый игрострой


Сквотинг на crates.io

Споры о том, должен ли crates.io начать поддерживать пространства имен/организации, почти не прекращаясь идут с самого появления cargo. Просто кину тут список из нескольких за последние годы:

Вопрос сложный, конца срачу не видно. Кто-то пару недель назад психанул и решил то ли заддосить, то ли заспамить репозиторий:

Несколько часов пользователи сервиса испытывали проблемы с доступом. По итогам сильно ничего не изменилось: ввели несколько дополнительных правил против откровенного спама, дискуссии возобновились с удвоенной силой, создав в процессе еще несколько Pre-RFC. Посмотрим, куда оно все в итоге придет.


Shifgrethor GC

withoutboats, в процессе исследования на что способно новое, еще не стабилизированное Pin API, написал экспериментальную библиотеку для сборки мусора — Shifgrethor — и опубликовал серию статей о том как и почему она устроена:

Это не первая попытка реализовать ржавую GC библиотеку (когда-то в языке вообще были @-указатели для этой цели), но от прошлых попыток эта отличается использованием нового механизма Pin'ов.

Поскольку библиотека зависит от Pin API, она пока не может работать на стабильной Ржавчине. Лодочник несколько раз повторяет, что проект пока что чисто исследовательский и он даже не уверен где именно будет иметь смысл применять эту библиотеку — скорее всего для интеграции с GC других языков или реализации сложных структур данных.

Обсуждение Shifgrethor на IRLO.


Серия заметок о 2D графике

Почему взять и создать универсальную библиотеку для 2D графики на все случаи жизни не получится? Очень занимательно, рекомендую полистать сами статьи и комментарии к ним.

4928fa073eeb6854615acb0b45174eef.svg

Нико опубликовал несколько заметок о том как NLL (что это такое?) будет сразу встроен в следующую редакцию Rust’а (пока что его надо явно включать через feature(nll)), о его реализации и проблемах, которые предстоит решить в будущих итерациях анализатора заимствований (borrowck):

Для желающих закопаться немного глубже есть еще URLO тема.

jh_o18w4f1sqwc2p0-fdgkgmd9g.png

Даже по комментариям к прошлому ежемесячнику видно что GUI — больное место Ржавчины. Очередная попытка заткнуть эту дыру в экосистеме: Azul — функциональная IMGUI библиотека с кешированием состояния, использующая WebRender для отрисовки (обсуждение).

Подробности смотрите на сайте проекта: azul.rs.

-wwylthdvgf-hqlov1u1qhj_qpg.png


Одной строкой


  • Очередное обновление Intellij-rust IDE приносит, среди прочего, анализ семантики перемещения и новые «быстрые исправления» (gif демо);
  • Аллокатор памяти jemalloc был удален из стандартной библиотеки в пользу «системного» аллокатора. Недавно был стабилизирован атрибут #[global_allocator], так что желающие вернуть старый аллокатор могут подключить пакет jemallocator;
  • TravisCI выкатил поддержку Windows сборок, Rust вошел в тройку изначально поддерживаемых языков;
  • Writing an OS in Rust: Hardware Interrupts (обсуждение) — отличная статья про работу с прерываниями для любителей низкоуровщины;
  • Should you learn C to «learn how the computer works»? (обсуждение в /r/programming) — Клабник пытается бороться с сишными стереотипами;
  • Oxidizing Python: Speeding up URL quoting by 10x using Rust (обсуждение) — практический пример ускорения кода на питоне путем переписывания вычислительно тяжелой части на Rust;
  • My release checklist for Rust programs (обсуждение) — толковый список вещей, которые стоит перепроверить пред публикацией новой версии проекта;
  • Towards fearless SIMD (обсуждение) — Ральф думает как улучшить поддержку SIMD в Rust;
  • Notes on Type Layouts and ABIs in Rust (обсуждение) — как устроена текущая версия Rust ABI + немного просто случайных низкоуровневых интересностей;
  • Rust, Battlecode, and Halite: a beginner’s experience with AI programming contests — отчет об участии в соревнованиях по программированию ИИ;
  • Rust has a static garbage collector (обсуждение) — Клабник рассуждает об автоматическом управлении памятью в Ржавчине в противовес классическим сборщикам мусора;
  • Future directions for cbindgen (rust-ffi) (обсуждение) — планы по дальнейшему развитию генератора сишных привязок на основе ржавых библиотек cbindgen’а;
  • Qt applications with Cargo — как максимально упростить процесс сборки ржавого Qt приложения;
  • More Space For Cargo — @llogiq рассуждает как target директории жрут место на диске как не в себя;
  • A Case Study in Heaptrack (обсуждение) — небольшой отчет об оптимизации расхода памяти — использование системного аллокатора, heaptrack, flamegraph и т.п.;
  • Хостинг документации docs.rs переехал под крыло организации rust-lang-nursery. Это потребовало значительных доработок официального rustdoc’а, потому что раньше docs.rs приходилось использовать пропатченный форк раст тулчейна;
  • Problems Scaling A Large Multi-Crate Rust Project (обсуждение) — обсуждение проблем масштабирования растущего «многокрейтового» проекта (в основном про размер бинарей);
  • What cool stuff have you learned about Rust recently? — занятная реддит-тема со всякими полезными мелочами;


Новые и обновленные пакеты


  • reFORM (обсуждение) — высокопроизводительный фреймворк для символьных вычислений (аналог FORM);
  • Noria (обсуждение, код) — быстрый бекенд для веб-приложений;
  • bible.rs (обсуждение, код) — пример сайта с actix + diesel для, внезапно, удобного поиска по библии;
  • sugar-rs (обсуждение) — коллекция макро-сахара в духе hashmap!{ 1 => 2, 2 => 3 };
  • reflow (обсуждение) — a system-level proxy switcher, использует Tokio;
  • hashbrown (обсуждение) — очень быстрый HashMap, Rust-порт гуглового SwissTable;
  • Formality (обсуждение) — функциональный язык без сборки мусора и с формальными доказательствами (привет, Coq/Idris?), который может компилироваться в Ethereum смарт-контракты или CUDA/OpenCL;
  • hex (обсуждение) — коллекция пакетов для управления музыкальной библиотекой;
  • soup (обсуждение) — библиотека для разбора и манипуляции HTML, вдохновленная питонячьим BeautifulSoup’ом. В реализации использует html5ever;
  • pest 2.0 (обсуждение, код) — быстрый парсер стал еще быстрее;
  • Эмулятор терминала Alacritty теперь может работать в Windows — картинка;
  • slotmap 0.3 (обсуждение, что такое Slot Map?) — добавлены произвольные типы ключей (custom key types) и SecondaryMap (позволяет эффективно хранить дополнительную информацию для элементов);
  • Gotham 0.3 (сайт, обсуждение) — быстрый и гибкий веб фреймворк, работающий на стабильном Rust’е. Обновлены tokio, hyper и http зависимости, улучшена производительность, появилась асинхронная раздача статических файлов и возможность настраивать используемый tokio-рантайм;
  • libdiffuzz (ориентированная на безопасность альтернатива санитайзеру памяти) был (переписан на Rust);


Новые RFC

По RFC довольно удобно наблюдать, в какую сторону движется язык, так что вот несколько интересных. В заголовке PRов есть ссылка «Rendered», по которой RFC доступен в удобочитаемой форме.


  • RFC 2436 Formatting guidelines — очередной шаг к установлению диктатуры Единого Официального Стиля Оформления Rust Кода;
  • RFC 2476 Clippy 1.0 — устаканили какой функционал clippy должен быть стабилизирован;
  • RFC 2457 Allow non-ASCII identifiers — многострадальный и срачегонный RFC, прошедший уже далеко не одну итерацию;
  • RFC 2451 Re-Rebalancing Coherence — позволит реализовать impl ForeignTrait for ForeignType;
  • RFC 2581 Generic integers — предлагает добавить uint и int целые типы;

И вот еще несколько Pre-RFC обсуждений:


Это все, спасибо за внимание!

Если я не добавил какую-то важную ссылку или событие, смело закидывайте в комментарии. :)

КДПВ взята отсюда, остальные картинки из сайтов соответствующих проектов.

© Habrahabr.ru