Лучше с задержкой на неделю, чем никогда, так что предлагаю вашему вниманию субъективную подборку ржавых новостей за октябрь.
30, Rust 2018, конференция RustRush, Amethyst 0. В этой подборке: Rust 1. 9, сквотинг crates.io, сборщик мусора, споры про 2D графику, Non-lexical lifetimes, функциональный GUI.
Rust 1.30 и тестирование Rust2018
30 (обсуждение). Вышел Rust 1. Основные нововведения — частичная стабилизация процедурных макросов, импорт макросов через обычный use
, улучшение системы модулей, "сырые" идентификаторы и поддержка no_std
приложений (подробнее в хабропереводе).
31 будет первым выпуском редакции (edition) "Rust2018" (что за "редакции"?), в связи с чем всех желающих приглашают подключаться к тестированию бета версии 1. Rust 1. 31 и cargo fix.
RustRush 2018: конференция 15-16 декабря в Москве
RustRush 2018 — конференция для разработчиков на Rust, посвящённая вебу, блокчейну, высокой производительности и системному программированию.
Обновился сайт (rustrush.ru) — опубликован почти полный список докладчиков и программа, начата продажа основной партии билетов.
Из других звёзд локальных и не очень — Максим Лапшин с прошивкой IP-камеры, Костя Степанов и Пьер Кригер aka tomaka. Будут четыре участника проекта Rust Language: Стив Клабник, Эшли Уильямс, Паскаль Хертлиф, Катарина Фей. Программа.
Если кто-то хочет подать доклад, до 19 ноября открыт Call for Papers.
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;
-
3. Twiggy 0. 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 (обсуждение);
-
30, стала возможна разработка Cortex-M приложений, работающих без ОС, с использованием стабильного компилятора. Со стабилизацией
#[panic_handler]
в 1. -
shared-bus (код) — позволяет безопасно делить перефирию между устройствами при помощи мьютексов;
-
Embedded WG (рабочая группа) растет: уже 27 разработчиков в 11 командах;
Ржавый игрострой
Сквотинг на crates.io
Просто кину тут список из нескольких за последние годы: Споры о том, должен ли crates.io начать поддерживать пространства имен/организации, почти не прекращаясь идут с самого появления cargo.
Кто-то пару недель назад психанул и решил то ли заддосить, то ли заспамить репозиторий: Вопрос сложный, конца срачу не видно.
По итогам сильно ничего не изменилось: ввели несколько дополнительных правил против откровенного спама, дискуссии возобновились с удвоенной силой, создав в процессе еще несколько Pre-RFC. Несколько часов пользователи сервиса испытывали проблемы с доступом. Посмотрим, куда оно все в итоге придет.
Shifgrethor GC
withoutboats, в процессе исследования на что способно новое, еще не стабилизированное Pin API, написал экспериментальную библиотеку для сборки мусора — Shifgrethor — и опубликовал серию статей о том как и почему она устроена:
Это не первая попытка реализовать ржавую GC библиотеку (когда-то в языке вообще были @
-указатели для этой цели), но от прошлых попыток эта отличается использованием нового механизма Pin
'ов.
Лодочник несколько раз повторяет, что проект пока что чисто исследовательский и он даже не уверен где именно будет иметь смысл применять эту библиотеку — скорее всего для интеграции с GC других языков или реализации сложных структур данных. Поскольку библиотека зависит от Pin API, она пока не может работать на стабильной Ржавчине.
Обсуждение Shifgrethor на IRLO.
Серия заметок о 2D графике
Очень занимательно, рекомендую полистать сами статьи и комментарии к ним. Почему взять и создать универсальную библиотеку для 2D графики на все случаи жизни не получится?
Нико опубликовал несколько заметок о том как NLL (что это такое?) будет сразу встроен в следующую редакцию Rust'а (пока что его надо явно включать через feature(nll)
), о его реализации и проблемах, которые предстоит решить в будущих итерациях анализатора заимствований (borrowck):
Для желающих закопаться немного глубже есть еще URLO тема.
Очередная попытка заткнуть эту дыру в экосистеме: Azul — функциональная IMGUI библиотека с кешированием состояния, использующая WebRender для отрисовки (обсуждение). Даже по комментариям к прошлому ежемесячнику видно что GUI — больное место Ржавчины.
Подробности смотрите на сайте проекта: azul.rs.
Одной строкой
- Очередное обновление 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!
; - 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
В заголовке PRов есть ссылка "Rendered", по которой RFC доступен в удобочитаемой форме. По 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<T> ForeignTrait<LocalType> for ForeignType<T>
; - RFC 2581 Generic integers — предлагает добавить
uint<N>
иint<N>
целые типы;
И вот еще несколько Pre-RFC обсуждений:
Это все, спасибо за внимание!
🙂 Если я не добавил какую-то важную ссылку или событие, смело закидывайте в комментарии.
КДПВ взята отсюда, остальные картинки из сайтов соответствующих проектов.