Обновить
128K+

Rust *

Мультипарадигмальный компилируемый язык

168
Рейтинг
Сначала показывать
Порог рейтинга
Уровень сложности

Твой код на Rust компилируется, проходит тесты и является UB. Ты просто об этом не знаешь

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели12K

Если взять случайный крейт с crates.io и поставить его под Miri, шанс увидеть undefined behavior где-то в зависимостях стремится к единице. Разбираемся, почему: pointer provenance, Stacked Borrows, Tree Borrows и почему noalias в LLVM выключали три раза.

Читать далее

Новости

0/7. Целая прорва связных списков, чтобы выучить Rust: Введение

Уровень сложностиСложный
Время на прочтение8 мин
Охват и читатели6.2K

Начал перевод, видимо, базового руководства по сложным темам в Rust (не считая Растономикона, который вообще про чёрную магию) — Learning Rust With Entirely Too Many Linked Lists.

Надеюсь закончить всё с течение мая. Сегодня — введение. Первая глава — после выходных.

Читать далее

HTAP внутри OLTP: как мы строили векторизованный движок с самого начала

Уровень сложностиСложный
Время на прочтение12 мин
Охват и читатели5.2K

Как встроить векторизованный движок в OLTP-ядро с нуля — без отдельного аналитического слоя. Разбираем PhysicalType, SelectionVector, RowToColumnBridge, SIMD на листовых страницах B-Tree и Hash Join. Бенчмарк на 2,25 млн строк: от 1.22× на простых агрегатах до 2.67× на GROUP BY.

Читать далее

Rust и Docker

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели9.6K

Привет, Хабр! Сегодня я хочу осветить тему работы с системой контейнеризации Docker прямиком из программы на Rust. Эта статья будет полезна тем, кто хочет разрабатывать различные программы для автоматизации рутинных действий Docker.

Читать далее

Opus 4.7 vs GPT-5 vs DeepSeek V4-Pro: три агента строят TSS-CLI на Rust

Уровень сложностиСредний
Время на прочтение7 мин
Охват и читатели13K

Три агента (Opus 4.7 / GPT-5 / DeepSeek V4-Pro) получили одну и ту же задачу — TSS-ECDSA CLI на Rust. Один уложился за 26 минут, второй сделал самый чистый код, третий проигнорировал прямой фидбек.

Читать далее

Rust: зачем он появился, что умеет и почему компании переписывают на него части своих систем

Уровень сложностиСредний
Время на прочтение23 мин
Охват и читатели13K

Эта статья — для тех, кто только присматривается к Rust или слышал о нем лишь обрывки восторженных или невосторженных отзывов. Если вы не до конца понимаете, зачем миру понадобился еще один системный язык, какие «боли» C++ он лечит и где реально используется сегодня, — здесь вы найдете ответы на эти вопросы. Мы постарались структурированно представить информацию, чтобы у вас сложилась полная картина: что это за язык, зачем его учить и с чего начать освоение. Сразу оговоримся: если «The Book» давно стала вашей настольной книгой, вы уже собаку съели на управлении памятью и знаете все о владении и заимствовании, эта статья вряд ли вас удивит. Остальным же — добро пожаловать.

В апреле 2026 года произошло сразу два события, заставивших вновь говорить о Rust. 16 апреля вышел очередной стабильный релиз — Rust 1.95.0. А вскоре после этого Илон Маск заявил, что новый мессенджер XChat построен на Rust и «whole new architecture».

В этой статье мы попробуем понять, почему для новых систем, где важны скорость, безопасность и надежность, все чаще выбирают Rust?

Читать далее

Как Rust обманывает процессор. Часть 2: niche сквозь крейты, dropck, Pin и провенанс указателей

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели9.2K

Как Rust обманывает процессор. Часть 2: niche сквозь крейты, dropck, Pin и провенанс указателей

В первой части мы обсуждали niche-оптимизацию, drop flags, MIR, Stacked Borrows и async-стейт-машины. В комментариях справедливо заметили (спасибо, Mingun): про niche рассказано в простой форме - Option<&T> и NonZeroU8.

А что происходит, когда enum живёт в одном крейте, оборачивается в newtype в другом, и оба варианта внешнего enum хранят один и тот же внутренний? У такого внешнего типа всего четыре состояния, байта должно хватить. Хватит ли? Зависит от того, как rustc считает layout. Об этом и поговорим.

Во второй части идём глубже: niche сквозь границы крейтов, variance, Pin и самоссылающиеся футуры, dropck с #[may_dangle], Tree Borrows вместо Stacked Borrows и strict provenance. Без этого половина unsafe-кода в экосистеме держится на честном слове.

Читать далее

Что делает match после того, как вы нажали Compile

Уровень сложностиСредний
Время на прочтение11 мин
Охват и читатели11K

Вы пишете match десятки раз в день. Разбираете Option, матчите варианты enum, ловите диапазоны. Выглядит как switch из Си, только мощнее!

Но задумывались ли вы, что происходит, когда компилятор берёт ваш match с вложенными паттернами, гардами и привязками — и превращает его в машинный код? Там, внутри, лежит целый мир: деревья решений, таблицы переходов, niche-оптимизации, и иногда — один-единственный mov, где вы ожидали десяток сравнений.

Пройдем весь путь от паттерна до ассемблера.

Читать далее

Баги, которые не ловит Rust

Уровень сложностиСредний
Время на прочтение12 мин
Охват и читатели13K

В апреле 2026 года Canonical раскрыла 44 CVE в uutils — реализации GNU coreutils на Rust, которая поставляется по умолчанию с версии 25.10. Большинство из уязвимостей обнаружилось при внешнем аудите, проведённом перед выпуском 26.04 LTS.

Я изучил список и решил, что из него можно многому научиться.

Примечательно то, что все эти баги оказались в кодовой базе на Rust, написанной людьми, которые знают, что делают, и ни один из багов не был отловлен механизмом проверки заимствований, clippy lints и cargo audit.

Я пишу эту статью не для того, чтобы покритировать команду разработчиков uutils. Ровно наоборот: мне хочется поблагодарить её за публикацию результатов аудита с подробностями, благодаря которым все мы можем научиться чему-то новому.

Кроме того, на нашем подкасте Rust in Production недавно был вице-президент по разработке Ubuntu Джон Сигер, заслуживший похвалы слушателей за честный рассказ о состоянии Rust в Canonical.

Если вы пишете системный код на Rust, то эта статья будет самым сжатым анализом того, где сейчас заканчивается безопасность Rust.

Читать далее

44 CVE в uutils: что Rust ловит, а что нет на границе с системой

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели8.2K

В апреле 2026 года Canonical раскрыла 44 CVE в uutils. Это переписанная на Rust версия GNU coreutils, которая в Ubuntu идёт по умолчанию с 25.10. Раскрытие пришло из внешнего аудита, заказанного перед релизом 26.04 LTS. Большую часть уязвимостей нашли обычным ревью кода. Ни borrow checker, ни проверки clippy, ни cargo audit не поймали ни одной.

Этот аудит, пожалуй, самый чёткий из существующих примеров того, что Rust ловит, а что нет. Самый внятный разбор списка сделал Маттиас Эндлер в посте «Bugs Rust Won’t Catch» от 29 апреля. Эндлер ведёт консалтинг corrode и подкаст Rust in Production; недавно у него в гостях был Джон Сигер, вице-президент по инженерии в Canonical. Пост построен как разбор того самого раскрытия: 44 CVE распределены по восьми категориям; к большинству приложен git diff фикса.

Ниже разберу каркас Эндлера и добавлю два аргумента сверху. Первый: один из мейнтейнеров GNU coreutils в HN-треде показал бенчмарк, на котором рекомендованный Эндлером фикс не выживает. Второй: структурный аргумент про то, что 40 лет наслоённых POSIX-шрамов делают с любой переписью, независимо от языка.

Читать далее

Как Rust обманывает процессор: тайная жизнь niche-оптимизации, drop flags и MIR

Время на прочтение5 мин
Охват и читатели12K

Большинство статей про Rust заканчиваются на borrow checker и lifetimes, как будто внутри компилятора живёт только проверяльщик заимствований и злой шрифтовый дизайнер для сообщений об ошибках. На деле там целый зоопарк механизмов, о которых редко пишут даже на конференциях. Я собрал несколько по настоящему любопытных вещей, которые меняют представление о том, как устроен язык изнутри, и подкрепил каждый сюжет кодом, который можно скопировать и проверить самому.

Начнём с того, чего никто не ждёт. Знакомая всем конструкция Option ссылки занимает ровно столько же байт, сколько и обычная ссылка. Это кажется магией: ведь у Option должен быть тег, отличающий Some от None. Никакого тега нет. Компилятор знает, что ссылка в Rust никогда не может быть нулевой, и использует нулевой адрес как представление варианта None. Этот трюк называется niche optimization, и он работает гораздо шире, чем принято думать. Проверим руками.

Читать далее

Сепаратор для логов. Сжимаем логи для контекста LLM без потери читаемости

Уровень сложностиСредний
Время на прочтение6 мин
Охват и читатели10K

logzip — утилита для сжатия логов перед анализом в LLM. Вместо того чтобы отправлять в Claude/GPT сырые 10 МБ лога, мы сжимаем его до 3.4 МБ (−58%), сохраняя полную читаемость и видимость ошибок. Статья рассказывает о проблеме (Lost in the Middle, переплата за мусорные токены), архитектуре на Rust, алгоритме Recursive BPE и реальном ROI: −$2,070 в год на API.

Проект open source (MIT), интегрирован с Claude Desktop через MCP.

Читать далее

Buffer Pool и Clock-sweep: как мы боремся с cache pollution и p99 latency

Уровень сложностиСложный
Время на прочтение16 мин
Охват и читатели10K

Один аналитический запрос способен испортить p99 latency всего OLTP-трафика — на время, пока горячий рабочий набор не прогреется заново с диска. Это cache pollution, и с ним рано или поздно сталкивается любая СУБД с честным LRU.

Разбираем, как мы решили эту проблему в нашем OLTP-движке: почему выбрали Clock-sweep вместо LRU, как BufferRing изолирует полные сканы от горячих данных, и почему no-steal — это не стилистический выбор, а требование корректности recovery. С кодом, инвариантами и честными оговорками про то, что ещё не сделано.

Читать далее

Ближайшие события

OfficeAI — виртуальный офис для ваших AI-агентов

Уровень сложностиПростой
Время на прочтение3 мин
Охват и читатели10K

Настольное приложение, которое превращает AI-агентов в сотрудников изометрического офиса. Один взгляд — и видно, кто работает, кто думает, а кто зашёл на кухню за кофе. Это пет-проект, сделанный для фана: эксперимент с визуализацией работы нескольких AI-агентов одновременно, без коммерческих амбиций и без планов превращать его в продукт.

Читать далее

Вы неправильно используете clone() в Rust

Уровень сложностиСредний
Время на прочтение5 мин
Охват и читатели9K

clone() в Rust часто появляется в коде в тот момент, когда borrow checker снова «мешает просто дописать фичу». Компилятор успокаивается, задача закрывается, но в проекте постепенно накапливаются лишние копирования, аллокации и API, которые требуют владения там, где хватило бы ссылки. В статье разберём типичные места, где clone() используют как затычку: от Vec и String до замыканий, HashMap и многопоточного кода.

Читать далее

Zed 1.0: эпоха Electron-редакторов — всё

Уровень сложностиПростой
Время на прочтение9 мин
Охват и читатели30K

Вчера вышел Zed 1.0. Пять лет работы, миллион с лишним строк на Rust, публичная превьюшка, которой ежедневно пользовались сотни тысяч разработчиков, и вот команда Zed Industries во главе с Натаном Собо запостила релиз 29 апреля 2026 года. Я лет пятнадцать живу в IDE от JetBrains. Пробовал VS Code. Пробовал Cursor. Гонял code-server на удалённой виртуалке. Ничего не приживалось. Zed прижился, и релиз 1.0 — нормальный повод объяснить, почему.

Если коротко: больше десяти лет любой «новый» редактор кода — это всё тот же продукт в новой обёртке. Обёртка зависит от того, что продают сегодня: AI, коллаборация, темы, новый вендор. А под обёрткой Electron. Тот же Chromium на каждое окно, тот же JavaScript на критическом пути исполнения, тот же RSS, к обеду уходящий в гигабайты. Sublime Text держал планку нативных редакторов все 2010-е, но это был закрытый продукт одного автора, без нормальной коллаборации и без AI истории. Zed стал первым за последние десять лет убедительным опенсорс-редактором с GPU-ускорением и AI на борту, который пересобрали с нуля и без всякого браузера под капотом. С релизом 1.0 эта ставка наконец сыграла.

Читать далее

Как использовать Rust внутри приложений на .NET MAUI

Уровень сложностиСредний
Время на прочтение9 мин
Охват и читатели6.6K

Когда производительность начинает иметь значение

По производительности Rust находится в той же лиге, что и C++, но с заметно более дружелюбной моделью безопасности. Возможно, вы уже слышали о командах, которые постепенно переходят на Rust, заменяя существующий код. А если вам уже приходилось бороться с лагами от GC или пытаться сделать плавную анимацию, отсутствие сборщика мусора начинает выглядеть особенно заманчиво.

Но можно ли сделать так, чтобы использовать Rust внутри приложения .NET для Android, iOS, MacCatalyst и Windows было действительно удобно?

Читать далее

OptimaOS: архитектура Rust-ядра, которое загружается на реальном железе

Уровень сложностиСложный
Время на прочтение9 мин
Охват и читатели8.3K

Центральная идея: одно ядро, runtime-профили

Проблема, которую решает OptimaOS — фрагментация через форкинг. Android — форк Linux. Embedded-дистрибутивы — форки с кастомными патчами под каждый SoC. AI-стеки — отдельные кодовые базы. Каждый форк — это отдельный security-аудит, отдельная команда и свой накапливающийся регресс.

Читать далее

YAKE! вместо нейросети: как мы заменили 600 МБ ONNX-реранкера на 400 строк статистики

Уровень сложностиСредний
Время на прочтение10 мин
Охват и читатели14K

В Yttri мы изначально использовали ONNX-реранкер bge-reranker-v2-m3 для RAG-поиска. Качество было хорошим, но цена для local-first desktop-приложения оказалась слишком высокой: около 600 МБ модели, до 1.8 ГБ RAM в пике и ощутимая нагрузка на CPU.

В статье разбираю, как мы заменили тяжёлый нейросетевой реранкер на собственную реализацию YAKE! на Rust: без модели, без прогрева, без внешних сервисов и с латентностью порядка микросекунд.

Показываю механику алгоритма, интеграцию в RAG, автотегирование, ограничения подхода и главный архитектурный вывод: не каждая AI-задача требует ещё одной нейросети. Иногда лучший AI-компонент - это тот, который удалось удалить.

Читать далее

Ржавый ассемблер

Уровень сложностиСредний
Время на прочтение14 мин
Охват и читатели11K

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

Окунуться в небезопасный код
1
23 ...