Обычно есть два подхода.
Первый - собрать всё дерево документа целиком. Так делают Wadler-style pretty printers. Это выразительно, но в Rust быстро упирается в память, аллокации и указатели.
Второй - стримить вывод по кускам. Так работает Oppen-style подход. Он легче по памяти, но часто принимает локально хорошие решения и не всегда находит глобально лучший layout.
Автор предлагает третий вариант: не хранить документ как рекурсивный enum, а описывать его через trait
Doc.То есть
Text, Concat, Group, Nest и другие элементы становятся отдельными типами, которые умеют сами себя рендерить через layout().Звучит как мелкая архитектурная правка, но эффект большой: меньше лишних аллокаций, меньше прыжков по памяти, гибче управление
Box, Rc и другими стратегиями хранения.В proof-of-concept реализации pye автор получил до 60x ускорения по сравнению с прямой Rust-реализацией алгоритма из paper “A Pretty Expressive Printer”. А в обновлённых тестах вариант с таким дизайном и greedy-алгоритмом местами обгонял
pretty и arena-версию больше чем в 10 раз.В Rust производительность часто ломается не только на алгоритме, но и на форме данных.
Иногда enum выглядит красиво, но trait-based дизайн лучше ложится на память, ownership и реальные оптимизации компилятора.
blog.wybxc.cc/blog/pretty-printer-pye/
#Rust #RustLang #Compilers #OpenSource #SystemsProgramming
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥23👍11❤6❤🔥3🥰1👌1
Microsoft выложила практический гайд Rust: Patterns & Engineering How-Tos - не для тех, кто только открыл
println!, а для разработчиков, которые уже упёрлись в реальные production-вопросы.Что внутри:
- type-state и newtype для безопасного дизайна API
- PhantomData для lifetime branding, variance и zero-cost типизации
- channels, actors и concurrency-паттерны
- async pitfalls, где Rust чаще всего ломает ожидания новичков
- error handling через
thiserror и anyhow- тестирование через unit, integration, doc tests и
proptest- benchmarking через
criterionЭто особенно полезно для тех, кто приходит из C++, C# или Go и внезапно понимает, что borrow checker - это не главный враг. Главная сложность в Rust - выбрать правильную форму абстракции до того, как код превратится в набор lifetime-костылей.
Если вы уже прошли Rust Book, но всё ещё зависаете на generics, trait bounds, PhantomData, async и тестировании, это очень хороший следующий шаг.
https://microsoft.github.io/RustTraining/rust-patterns-book/
#rust #rustlang
Please open Telegram to view this post
VIEW IN TELEGRAM
👍25🔥21❤7🥱4🥰1😁1🤗1
Скотт Чакон, сооснователь GitHub, переписал Git на Rust. С помощью ИИ-агентов.
Проект называется Grit. Это новая реализация Git с нуля: library-first, memory-safe и почти полностью на безопасном Rust. Она уже проходит 99,3% собственного тестового набора Git — 41 715 из 42 001 теста.
Цифры:
* 360 000+ строк Rust
* 7 000+ коммитов
* 500+ pull request’ов
* около 45 млрд токенов через Claude, Cursor и Codex
* примерно $10–15 тыс. затрат на ИИ
Что интересного:
* library-first дизайн, без постоянного fork/exec для каждой Git-операции
* reentrant, linkable, modular архитектура: Git можно напрямую встраивать в GitButler, Jujutsu, Zed и другие инструменты
* потенциальная WASM-сборка: Git-команды можно запускать в edge functions
* лицензия MIT вместо GPL
* почти полностью safe Rust: только один FFI-модуль для date/time
Отдельно интересен сам разбор разработки.
Это честный взгляд на agentic coding в большом масштабе: агенты, которые «читерят» в тестах, тихо ломают код, создают проблемы с координацией и превращают Cursor в режим бесконечного гринда.
Стоит прочитать:
https://blog.gitbutler.com/true-grit
#Rust #RustLang #Git #OpenSource #AIAgents #SystemsProgramming #DevTools
Проект называется Grit. Это новая реализация Git с нуля: library-first, memory-safe и почти полностью на безопасном Rust. Она уже проходит 99,3% собственного тестового набора Git — 41 715 из 42 001 теста.
Цифры:
* 360 000+ строк Rust
* 7 000+ коммитов
* 500+ pull request’ов
* около 45 млрд токенов через Claude, Cursor и Codex
* примерно $10–15 тыс. затрат на ИИ
Что интересного:
* library-first дизайн, без постоянного fork/exec для каждой Git-операции
* reentrant, linkable, modular архитектура: Git можно напрямую встраивать в GitButler, Jujutsu, Zed и другие инструменты
* потенциальная WASM-сборка: Git-команды можно запускать в edge functions
* лицензия MIT вместо GPL
* почти полностью safe Rust: только один FFI-модуль для date/time
Отдельно интересен сам разбор разработки.
Это честный взгляд на agentic coding в большом масштабе: агенты, которые «читерят» в тестах, тихо ломают код, создают проблемы с координацией и превращают Cursor в режим бесконечного гринда.
Стоит прочитать:
https://blog.gitbutler.com/true-grit
#Rust #RustLang #Git #OpenSource #AIAgents #SystemsProgramming #DevTools
🔥41❤11👍11🤣5🤔4💊4🥰1👏1🤗1
Но тут есть важная разница.
В C, если вы вызвали функцию не так, например передали
NULL туда, где библиотека этого не ждала, и получили segfault, это часто называют неправильным использованием API.То есть ответственность перекладывается на разработчика: сам виноват, надо было читать документацию.
В Rust логика другая.
Если функция помечена как safe, она не должна приводить к memory bugs. Даже если вы передали странные данные, даже если сценарий неидеальный. Safe Rust по контракту обязан оставаться memory-safe.
Поэтому если safe-функция в Rust падает с segfault или приводит к проблеме памяти, это уже не «ты неправильно использовал API». Это баг библиотеки. И такой случай действительно может стать CVE.
Сырые числа CVE у Rust и C/C++ нельзя сравнивать напрямую.
В C/C++ огромный класс проблем считается нормальным риском неправильного использования. В Rust тот же класс проблем считается нарушением гарантий safe API.
Именно поэтому CVE в Rust часто говорит не «Rust такой же небезопасный», а наоборот: экосистема строже относится к тому, что safe-код вообще не должен ломать память.
Хороший разбор от Jakub Beránek из команды разрабов компилятора Rust:
https://kobzol.github.io/rust/2026/06/15/how-memory-safety-cves-differ-between-rust-and-c-cpp.html
#Rust #RustLang #MemorySafety #Security #CVE
Please open Telegram to view this post
VIEW IN TELEGRAM
👍32❤14🔥6🥰2🤗1
Forwarded from Анализ данных (Data analysis)
Исследователи NVIDIA перенесли модель владения Rust в GPU-kernels.
Paper: “Fearless Concurrency on the GPU”. В нём представлен cuTile Rust.
Проблема была в том, что при написании кастомных GPU-ядер на Rust разработчикам фактически приходилось выходить за пределы гарантий безопасности Rust.
cuTile Rust пытается это исправить:
* mutable outputs разбиваются на непересекающиеся части
* запуск kernels сохраняет правила ownership от host до device
* при необходимости остаются локальные opt-out механизмы для низкоуровневого контроля
Производительность тоже держится на уровне:
* 7 TB/s для element-wise операций на NVIDIA B200
* 2 PFlop/s для GEMM, это 96% от cuBLAS
* результат сопоставим с cuTile Python в пределах погрешности измерений
Авторы также собрали Grout, inference engine поверх cuTile Rust, и прогнали реальные модели:
* 171 tokens/s для Qwen3-4B на RTX 5090
* 82 tokens/s для Qwen3-32B на B200
* конкурентный уровень рядом с vLLM и SGLang
Итог - безопасный и идиоматичный Rust почти на полной CUDA-производительности.
Для Rust в ML-инфраструктуре это большой шаг.
https://arxiv.org/abs/2606.15991
#Rust #RustLang #GPU #CUDA #MachineLearning #SystemsProgramming #NVIDIA
@data_analysis_ml
Paper: “Fearless Concurrency on the GPU”. В нём представлен cuTile Rust.
Проблема была в том, что при написании кастомных GPU-ядер на Rust разработчикам фактически приходилось выходить за пределы гарантий безопасности Rust.
cuTile Rust пытается это исправить:
* mutable outputs разбиваются на непересекающиеся части
* запуск kernels сохраняет правила ownership от host до device
* при необходимости остаются локальные opt-out механизмы для низкоуровневого контроля
Производительность тоже держится на уровне:
* 7 TB/s для element-wise операций на NVIDIA B200
* 2 PFlop/s для GEMM, это 96% от cuBLAS
* результат сопоставим с cuTile Python в пределах погрешности измерений
Авторы также собрали Grout, inference engine поверх cuTile Rust, и прогнали реальные модели:
* 171 tokens/s для Qwen3-4B на RTX 5090
* 82 tokens/s для Qwen3-32B на B200
* конкурентный уровень рядом с vLLM и SGLang
Итог - безопасный и идиоматичный Rust почти на полной CUDA-производительности.
Для Rust в ML-инфраструктуре это большой шаг.
https://arxiv.org/abs/2606.15991
#Rust #RustLang #GPU #CUDA #MachineLearning #SystemsProgramming #NVIDIA
@data_analysis_ml
🔥43❤11👍7🥰1👏1🤗1
Предрелизное тестирование 1.96.1
#rustlang #rust
https://blog.rust-lang.org/inside-rust/2026/06/27/1.96.1-prerelease/
#rustlang #rust
https://blog.rust-lang.org/inside-rust/2026/06/27/1.96.1-prerelease/
🔥6❤4👍3
LLM уже находят реальные memory safety баги в Rust-коде.
И, что неожиданно, это работает очень хорошо.
Сергей Давыдов, руководитель Rust Secure Code Working Group, использовал GPT-5.5 и Claude Opus для аудита unsafe-блоков в популярных Rust-крейтах.
В итоге нашлись десятки реальных багов:
• use-after-free
• чтение за пределами буфера
• data races
• неправильные реализации Send / Sync
Все находки проверялись через miri, чтобы убрать ложные срабатывания.
Почему в Rust это работает лучше, чем в C?
• unsafe явно помечен и изолирован, поэтому LLM сразу понимает, где искать
• miri может точно подтвердить, настоящий баг или нет
• не нужно отслеживать data flow по всей кодовой базе, как часто бывает в C
Получается, дизайн Rust случайно сделал его почти идеальным языком для LLM-аудита безопасности.
Стоит прочитать всем, кто думает про AI в security tooling.
https://gist.github.com/Shnatsel/eb0a4be79a0657e4eb67c4f085f991bc
https://shnatsel.medium.com/the-unreasonable-effectiveness-of-llms-for-auditing-rust-code-d4df8bf0afd3
#Rust #RustLang #MemorySafety #Security #LLM
И, что неожиданно, это работает очень хорошо.
Сергей Давыдов, руководитель Rust Secure Code Working Group, использовал GPT-5.5 и Claude Opus для аудита unsafe-блоков в популярных Rust-крейтах.
В итоге нашлись десятки реальных багов:
• use-after-free
• чтение за пределами буфера
• data races
• неправильные реализации Send / Sync
Все находки проверялись через miri, чтобы убрать ложные срабатывания.
Почему в Rust это работает лучше, чем в C?
• unsafe явно помечен и изолирован, поэтому LLM сразу понимает, где искать
• miri может точно подтвердить, настоящий баг или нет
• не нужно отслеживать data flow по всей кодовой базе, как часто бывает в C
Получается, дизайн Rust случайно сделал его почти идеальным языком для LLM-аудита безопасности.
Стоит прочитать всем, кто думает про AI в security tooling.
https://gist.github.com/Shnatsel/eb0a4be79a0657e4eb67c4f085f991bc
https://shnatsel.medium.com/the-unreasonable-effectiveness-of-llms-for-auditing-rust-code-d4df8bf0afd3
#Rust #RustLang #MemorySafety #Security #LLM
👍36🤔9💊7🔥5
Трёхлетний GitHub issue в Gleam закрыли не новым алгоритмом, а более аккуратной работой с памятью.
Giacomo Cavalieri из core team переписал pretty printer на Rust arenas.
Раньше каждый вложенный
Теперь документы кладутся в общую arena, а код передаёт ссылки на них.
Результат на реальном Gleam-проекте:
* pretty printer:
* ускорение:
* полный
* peak memory:
Дополнительный бонус: arena позволила кэшировать и переиспользовать частые документы вроде ключевых слов, запятых и скобок. То, что раньше аллоцировалось снова и снова, теперь создаётся один раз.
Хороший пример, где производительность упирается в скучные мелкие allocation costs.
Особенно в рекурсивных структурах, где один
https://giacomocavalieri.me/writing/gleam-rust-arenas
#RustLang #Performance #Gleam
Giacomo Cavalieri из core team переписал pretty printer на Rust arenas.
Раньше каждый вложенный
Document заворачивался в отдельный Box и жил отдельной heap allocation. Для рекурсивной структуры это быстро превращается в сотни мелких выделений памяти.Теперь документы кладутся в общую arena, а код передаёт ссылки на них.
Результат на реальном Gleam-проекте:
* pretty printer:
13ms → 9.8ms* ускорение:
24%* полный
gleam format: 13% быстрее* peak memory:
8.4MB → 7.6MBДополнительный бонус: arena позволила кэшировать и переиспользовать частые документы вроде ключевых слов, запятых и скобок. То, что раньше аллоцировалось снова и снова, теперь создаётся один раз.
Хороший пример, где производительность упирается в скучные мелкие allocation costs.
Особенно в рекурсивных структурах, где один
Box выглядит безобидно, пока их не становится слишком много.https://giacomocavalieri.me/writing/gleam-rust-arenas
#RustLang #Performance #Gleam
🔥26❤11👍5
BullMQ теперь есть нативно для Rust.
Одна из самых популярных Redis-очередей для фоновых задач получила стабильный Rust-релиз:
Это нормальная Rust-реализация
В v1.0.0 уже есть почти всё, что нужно для production-очередей:
* delayed и prioritized jobs
* deduplication
* retries и backoff
* rate limits
* stalled-job detection
* dependent job trees через FlowProducer
* cron и interval recurring jobs
* QueueEvents для наблюдения за жизненным циклом задач
Новая версия использует те же Lua-скрипты, что уже годами крутятся в Node.js, Python, PHP и Elixir-реализациях.
Это значит, что Rust-сервис может положить job в очередь, а Node.js worker её обработает. Или наоборот. Без миграции, sidecar’ов и adapter layer.
По первым бенчмаркам Rust уже немного быстрее Node.js на последовательной и bulk-записи задач, а на high-concurrency processing идёт примерно вровень.
https://bullmq.io/news/260712/rust-release
#RustLang #Redis #BullMQ #Tokio
Одна из самых популярных Redis-очередей для фоновых задач получила стабильный Rust-релиз:
cargo add bullmq-official
Это нормальная Rust-реализация
async/await и Tokio: привычный Result для ошибок, безопасное шаринг-поведение между tasks и API, который ощущается как Rust, а не как порт чужой библиотеки.В v1.0.0 уже есть почти всё, что нужно для production-очередей:
* delayed и prioritized jobs
* deduplication
* retries и backoff
* rate limits
* stalled-job detection
* dependent job trees через FlowProducer
* cron и interval recurring jobs
* QueueEvents для наблюдения за жизненным циклом задач
Новая версия использует те же Lua-скрипты, что уже годами крутятся в Node.js, Python, PHP и Elixir-реализациях.
Это значит, что Rust-сервис может положить job в очередь, а Node.js worker её обработает. Или наоборот. Без миграции, sidecar’ов и adapter layer.
По первым бенчмаркам Rust уже немного быстрее Node.js на последовательной и bulk-записи задач, а на high-concurrency processing идёт примерно вровень.
https://bullmq.io/news/260712/rust-release
#RustLang #Redis #BullMQ #Tokio
🔥19👍6👏6❤2
Topcoat: команда Tokio представила «Rails для Rust» 🦀
Topcoat - экспериментальный fullstack-фреймворк с готовой маршрутизацией, серверным рендерингом, компонентами и сборкой ассетов.
Главная идея — реактивность без отдельного JavaScript-кода и WASM. Вы пишете обычное типизированное Rust-выражение:
При первом рендере оно выполняется на сервере, а затем Topcoat переводит его в JavaScript, чтобы интерфейс мгновенно обновлялся в браузере.
Что уже есть:
- асинхронные серверные компоненты с прямым доступом к базе;
-
- маршруты, автоматически определяемые по структуре модулей;
- редактируемые UI-компоненты на Tailwind в духе shadcn/ui;
- встроенная сборка ассетов;
- интеграции с Tailwind и htmx;
- серверные функции и частичное обновление HTML.
Отдельный API-слой во многих сценариях не требуется: компонент может получить данные и сразу отрисовать страницу.
Проект пока находится на ранней экспериментальной стадии, поэтому возможны серьёзные изменения API. В планах — аутентификация, фоновые задачи, WebSocket, потоковый SSR и клиентская навигация.
https://github.com/tokio-rs/topcoat
#rust #rustlang #webdev #fullstack #tokio #opensource
Topcoat - экспериментальный fullstack-фреймворк с готовой маршрутизацией, серверным рендерингом, компонентами и сборкой ассетов.
Главная идея — реактивность без отдельного JavaScript-кода и WASM. Вы пишете обычное типизированное Rust-выражение:
<button @click=$(|_e| open.set(!open.get()))>
"Что такое Topcoat?"
</button>
При первом рендере оно выполняется на сервере, а затем Topcoat переводит его в JavaScript, чтобы интерфейс мгновенно обновлялся в браузере.
Что уже есть:
- асинхронные серверные компоненты с прямым доступом к базе;
-
view!`-шаблоны с обычными `if и for из Rust;- маршруты, автоматически определяемые по структуре модулей;
- редактируемые UI-компоненты на Tailwind в духе shadcn/ui;
- встроенная сборка ассетов;
- интеграции с Tailwind и htmx;
- серверные функции и частичное обновление HTML.
Отдельный API-слой во многих сценариях не требуется: компонент может получить данные и сразу отрисовать страницу.
Проект пока находится на ранней экспериментальной стадии, поэтому возможны серьёзные изменения API. В планах — аутентификация, фоновые задачи, WebSocket, потоковый SSR и клиентская навигация.
https://github.com/tokio-rs/topcoat
#rust #rustlang #webdev #fullstack #tokio #opensource
👍41❤16🤯11😁2🥴2🗿2💊2🔥1
Cargo готовят к большой перестройке 🦀
Лид команды Cargo Ed Page опубликовал vision-документ о будущем главного инструмента Rust.
Самые интересные идеи:
- перевести Cargo на
- добавить plumbing-команды в духе Git;
- перейти на PubGrub для более понятного разрешения зависимостей;
- улучшить provenance crates и доверие к пакетам;
- вынести использование
- усилить контроль над
Отдельно затронуты AI-агенты: Cargo не хотят переделывать «под ИИ». Идея проще — ускорить сборки, улучшить сигналы и безопасность зависимостей, что одинаково полезно и людям, и агентам.
Это пока не roadmap, а приглашение сообщества обсудить будущее Cargo.
Источник:
https://epage.github.io/blog/2026/08/cargo-vision/
#Rust #Cargo #RustLang #DevTools
Лид команды Cargo Ed Page опубликовал vision-документ о будущем главного инструмента Rust.
Самые интересные идеи:
- перевести Cargo на
async/await и лучше распараллелить работу;- добавить plumbing-команды в духе Git;
- перейти на PubGrub для более понятного разрешения зависимостей;
- улучшить provenance crates и доверие к пакетам;
- вынести использование
unsafe в метаданные для аудита;- усилить контроль над
proc-macro и build scripts.Отдельно затронуты AI-агенты: Cargo не хотят переделывать «под ИИ». Идея проще — ускорить сборки, улучшить сигналы и безопасность зависимостей, что одинаково полезно и людям, и агентам.
Это пока не roadmap, а приглашение сообщества обсудить будущее Cargo.
Источник:
https://epage.github.io/blog/2026/08/cargo-vision/
#Rust #Cargo #RustLang #DevTools
❤33🔥17🥰6👍2🥱1