ДайджестХабрахабр

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

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

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

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.

лого 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;

  • 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 обсуждений:

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

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

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

Показать больше

Похожие публикации

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Кнопка «Наверх»