rust_code | Unsorted

Telegram-канал rust_code - Rust

8052

Rust programming language По всем вопросам- @haarrp @ai_machinelearning_big_data - машинное обучение @programming_books_it - бесплатные it книги @pythonl - 🐍 @ArtificialIntelligencedl - AI @datascienceiot - ml 📚 #VRHSZ

Subscribe to a channel

Rust

Новое мобильное приложение Discord!

Слева: приложение на Electron.
Справа: Rust + GPUI.

По ощущениям, интерфейс реагирует мгновенно.

Читать полностью…

Rust

Nitpicky Rust Compiler

Читать полностью…

Rust

Borrow Checker Needs Source

Читать полностью…

Rust

Показываешь ИИ чужой сайт или приложение, а он разбирается, как всё работает, и собирает свою версию

На GitHub появился Craft Anything - open-source инструмент на Rust, объединяющий реверс-инжиниринг и AI-разработку.

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

Система исследует оригинал, передаёт результаты coding-агенту, собирает новый проект и сравнивает его с исходным. Если обнаруживает расхождения, запускает следующую итерацию исправлений.

Внутри целый движок реверс-инжиниринга с более чем 300 инструментами. Поддерживаются анализ бинарников, .NET, Java, Android, Electron, JavaScript и игровых файлов.

Есть два режима. Clean Room изучает только внешнее поведение и интерфейс, не читая исходники. Deep позволяет исследовать внутреннее устройство программы, включая дизассемблирование и декомпиляцию.

Все инструменты доступны через CLI и MCP. Для генерации кода используется прежде всего Claude Code.

Например, можно попросить агента воссоздать интерфейс сайта, а затем проверить результат на трёх размерах экрана.

Проект пока в ранней альфе: часть проверок и интеграций ещё экспериментальная.

Интересная идея для coding-агентов: вместо попытки угадать устройство программы по скриншоту сначала собрать реальные данные о её работе, а затем писать код.

https://github.com/storytold/craft-anything

Читать полностью…

Rust

Переписал GPU-вычисления на Rust и ускорил обработку в десятки раз. Но часть работы не окупилась

Провин Перера рассказал, как за три недели перевёл speakrs с ONNX Runtime на собственные GPU-ядра, написанные на Rust с помощью NVIDIA cuda-oxide.

Библиотека занимается диаризацией речи: определяет, кто и когда говорит в аудиозаписи.

По замерам автора на RTX 4090, после всех изменений:

- VoxConverse dev: 1236 → 38 секунд.
- Earnings-21: 2692 → 75 секунд.
- Ошибка диаризации, DER, осталась прежней.

Однако отказ от ONNX Runtime сам по себе дал ускорение в 1,81 раза. Остальной прирост нельзя приписывать одной замене рантайма.

А вот замена cuDNN и cuBLAS собственными ядрами, по оценке автора, преимущественно не оправдала усилий. Библиотеки NVIDIA оптимизированы под множество GPU, а свои реализации приходилось отдельно настраивать под A100, T4 и RTX 5090. H100 пока осталась без настройки.

Бонус полного отказа от этих библиотек - GPU-контейнер примерно на 2 ГБ меньше.

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

Вывод автора: сначала измерьте пользу от замены компонента. Поддерживать собственную версию придётся тоже вам.

https://avencera.com/

Читать полностью…

Rust

Основатель CentOS и Rocky Linux представил Linux-совместимое ядро Ginux, написанное на Rust

Грегори Курцер (Gregory Kurtzer), основатель дистрибутивов CentOS и Rocky Linux, представил проект Ginux, развивающий ядро операционной системы на языке Rust, нацеленное на достижение совместимости с ядром Linux. Опубликованный исследовательский прототип уже способен загрузить системное окружение дистрибутивов Alpine с BusyBox и Rocky Linux 10 с systemd в многопользовательском консольном режиме. Код проекта распространяется под лицензией Apache 2.0. Поддерживается работа на системах с архитектурой x86-64.

Полный текст:
https://opennet.ru/66562/
https://opennet.me/66562/

Читать полностью…

Rust

BeautifulRust – бесплатный набор навыков, который помогает ИИ-агентам писать более качественный Rust.

Проект объединяет рекомендации Google, Microsoft, Rust API Guidelines, Effective Rust и Rust Design Patterns. Когда источники расходятся, автор выбирает подход и объясняет причину.

Внутри – навыки для написания и ревью кода, а также конфигурация Clippy для автоматических проверок.

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

В авторской оценке на трёх задачах навык повысил результат с 24 до 29 пройденных проверок из 30, расходуя примерно на треть больше токенов. Выборка небольшая, но результат интересный.

Работает с Claude Code, Codex, Cursor и другими клиентами Agent Skills. Лицензия – MIT.

Установка:


npx skills add morganlinton/BeautifulRust


https://github.com/morganlinton/BeautifulRust

Читать полностью…

Rust

Rust официально появился в systemd - с жёсткими ограничениями.

В основную ветку проекта приняли поддержку новых программ на Rust. Изменения готовятся для systemd 263.

Systemd отвечает за запуск системы и управление службами во многих Linux-дистрибутивах. Теперь часть новых утилит можно разрабатывать на Rust по следующим правилам:

- Только самостоятельные компоненты, от которых не зависят другие части systemd.
- Сборка через Meson, без Cargo.
- Режим `no_std` — без стандартной библиотеки Rust и произвольных сторонних зависимостей.
- Взаимодействие с существующим кодом — через C-интерфейсы.

Переписывать существующий C-код не планируют. Поддержка Rust опциональна: проект по-прежнему можно собрать без него.

Первый запланированный компонент — systemd-keyring-setup. Он будет загружать X.509-сертификаты в хранилища ключей ядра Linux при загрузке. Сама утилита пока находится в отдельном, ещё не принятом PR.

Rust постепенно входит в базовую инфраструктуру Linux: через новые компоненты с чёткими границами и общей системой сборки.

https://github.com/systemd/systemd/pull/44324

Читать полностью…

Rust

Rust сократил расходы на CI примерно на 75% - и сознательно оставил лишние сборки компилятора.

В интервью Serokell Марко Иени из Rust Foundation объяснил компромисс.

Основную экономию дал переход с GitHub large runners на стандартные. По Enterprise-плану проекту доступны до 500 стандартных раннеров одновременно, а большие расходуют ограниченные спонсорские кредиты.

Часть тестов разделили между двумя стандартными раннерами. Каждый заново собирает компилятор — вычисления дублируются.

Можно собрать один раз и раздать артефакты. Но команда отказалась: такой обмен сделал бы CI медленнее и хрупче. Доступных раннеров хватает, поэтому простота оказалась ценнее экономии CPU.

Тот же принцип - в мониторинге: с собственного Prometheus и Grafana перешли на Datadog, поскольку старую систему никто не успевал обновлять.

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

Хорошая инфраструктура укладывается в бюджет и остаётся посильной в сопровождении. Иногда ради этого стоит выполнять одну и ту же работу дважды.

https://serokell.io/blog/the-hidden-challenges-of-rust-infrastructure-interview-with-marco-ieni

Читать полностью…

Rust

🦀 Задача на Rust: распакуй строку, не запутавшись во вложенности

Запись k[текст] означает: повторить содержимое скобок k раз. Но внутри могут быть другие такие же конструкции.

Напиши функцию:


fn decode_string(s: String) -> String


Она должна проходить эти проверки:


assert_eq!(decode_string("2[a]".into()), "aa");

assert_eq!(
decode_string("2[2[2[a]]]".into()),
"aaaaaaaa"
);

assert_eq!(
decode_string("2[a]2[b]2[c]".into()),
"aabbcc"
);

assert_eq!(
decode_string("2[abc]3[cd]ef".into()),
"abcabccdcdcdef"
);


Усложнение: число повторений может быть многозначным, например 12[ab]. Вход считаем корректным, цифры используются только для количества повторений.

Что выберешь для решения: стек или рекурсивный разбор? 👇

Читать полностью…

Rust

Ник Матсакис предлагает для Rust северную звезду эпохи ИИ-агентов: ноль unsafe-кода

Один из ключевых людей в дизайне Rust опубликовал текст о том, что кодинг-агенты значат для языка. Это письменная версия доклада на REBASE в рамках SPLASH. Сам автор называет содержимое «недопечёнными идеями», так что это видение, а не предложение новых фич.

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

По производительности аргумент простой. Хорошие значения по умолчанию плюс явные ручки для тонкой настройки. По словам автора, люди, которые раньше вручную оптимизировали криптографический код, теперь обращаются к агентам. Вместе с профайлером вроде dial9 получается цикл: бенчмарк, профиль, агент предлагает правку, PR в репозитории.

С надёжностью сложнее. Типы удерживают агента в рамках, но тесты показывают наличие багов, а не их отсутствие, и типы гарантируют лишь отсутствие определённых классов ошибок, а не корректность результата. Тут нужны доказательства. Для Rust уже есть Verus, Creusot, Aeneas и Kani. При этом типы продолжают играть роль, потому что делают доказательства дешевле. &mut даёт гарантию уникальности, и Verus опирается на borrow checker именно ради этого, чтобы солверу было проще.

Куда, по мнению Матсакиса, стоит двигаться: более выразительная система типов (view types, внутренние ссылки, даже проверка вроде «в лог не попадают персональные данные»), расширяемый компилятор, чтобы инструменты доказательств не жили на костылях из макросов и привязке к конкретным версиям компилятора, и поддержка доказательства корректности unsafe-кода.

Северная звезда: больше никакого unsafe. Это не значит убрать ключевое слово. Это значит уметь доказать, что весь unsafe-код корректен и не приводит к неопределённому поведению.

Главной открытой проблемой автор называет дизайн, то есть решение о том, что вообще строить. Ставка на специализированные языки дизайна, которые превращают высокоуровневое намерение в проверки типов, линты или теоремы.

Для контекста Матсакис цитирует Дэвида Толная: инженеры Meta в этом году написали первосторонний Rust-кода вдвое больше, чем за предыдущие девять лет вместе взятые.

Блог: https://smallcultfollowing.com/babysteps/blog

Источник: https://smallcultfollowing.com/babysteps/blog

Читать полностью…

Rust

🦀 Кто должен доказывать корректность реализации трейта в Rust: сама реализация или код, который её использует?

Нико Матсакис разобрал этот вопрос на примере циклических зависимостей, когда доказательство может замкнуться само на себя.

Допустим, есть трейт Magic: Copy. Любой тип с Magic обязан реализовывать Copy.

Два подхода:

• Модульный: проверяем обязательства при проверке impl. Поэтому impl Magic for String недопустим: String не реализует Copy.

• Внешний: разрешаем такой impl, но при его использовании требуем отдельно доказать String: Copy. Реализация есть, воспользоваться ей нельзя.

Второй вариант помогал обойти проблему циклических доказательств. Но упирался в unsafe-трейты.

Когда автор пишет unsafe impl, остальной код доверяет его гарантиям. Если реализация ошибочно обещает, что Box<T> может содержать нулевой указатель, ответственность лежит на ней.

Выходит странная модель: гарантии безопасности у impl принимаем, а выполнение требований супертрейтов заставляем перепроверять вызывающий код.

Вывод Нико: реализация должна сама устанавливать выполнение своего контракта. Следующая часть будет о том, как совместить этот подход с циклами.

https://smallcultfollowing.com/babysteps/blog/2026/10/10/modular-vs-external-proofs/

#Rust

Читать полностью…

Rust

👣 Campfire переписали на Rust, почти без ручного Rust.

DHH пишет, что сегодня уже гоняет beta-версию Campfire на Rust.
Самое интересное:
- код пока получился «уродливым»
- стал примерно в 6 раз более многословным
- сам перенос, по его словам, практически ничего не стоил
- и главное — ему не пришлось напрямую разбираться в Rust-коде

То есть AI уже позволяет переносить реальные приложения между языками почти как между разными runtime.
Пусть результат пока далёк от красивого production-кода, сам факт показательный: миграция большого приложения на другой язык становится задачей не месяцев, а агентного workflow.

https://github.com/basecamp/once-campfire

Читать полностью…

Rust

От ML-инференса до прошивки железа — обсуждаем на Rust-митапе с экспертами MWS

Как Rust ускоряет инференс ML-моделей, снижает стоимость продуктов и оживляет микроконтроллеры — расскажем в трёх реальных кейсах.

Добавьте в календарь с МТС Link, чтобы не пропустить. В программе:

«Ускоряем инференс ML с Rust»
Python — бутылочное горлышком в ML-пайплайнах. Кейс ускорения с Rust в платформе синтеза и распознавания речи

«Как мы снизили стоимость продукта после миграции части стека на Rust»
Меньше инцидентов, быстрее фичи, меньше железа. Как получить более стабильный продукт с Rust

«Прошить железо c Rust: ESP32 за 20 минут»
Бонусный доклад для тех, кто не работал с электроникой, но хочет оживлять датчики, гаджеты и кастомные устройства с Rust


Когда: 15 октября в 16:00
Где: онлайн
Ссылка для регистрации

До встречи!

Реклама. ООО "МВС". ИНН 7707767501. erid: 2W5zFGw6oEH

Читать полностью…

Rust

🦀 Что удивляет в C, если первым языком был Rust?

Обычно разработчики переходят от C к Rust. Автор C for Rust Programmers пошёл в обратную сторону и собрал нюансы, которые легко пропустить.

Например, такая функция выглядит как принимающая массив из трёх элементов:


void inspect(char data[3]) {
printf("%zu\n", sizeof(data));
}


Но параметр здесь становится указателем. На платформе с 64-битными указателями увидите 8, а не 3. Длина массива в функцию не передаётся.

Ещё несколько сюрпризов:

• C-строки заканчиваются \0, а strlen() ищет этот байт, проходя по памяти.
• long обычно занимает 64 бита в 64-битных Unix-системах и 32 бита в Windows.
• malloc() может вернуть NULL, а язык не заставит проверить результат.
• Вместо ссылок с проверкой заимствований работают сырые указатели.

Полезное чтение для тех, кто пишет FFI или хочет понять, какие гарантии привычно получает от Rust.

https://bd103.dev/blog/2026-10-07-c-for-rust-programmers/

@rust_code

Читать полностью…

Rust

Rust, который наконец становится понятным 🦀

Давно хочешь выучить Rust, но ownership, borrowing и lifetimes выглядят как отдельный вид боли?

Этот курс проведёт тебя с самого начала до уровня, где ты уже пишешь реальные системные и сетевые программы.

Ты разберёшь:
Ownership → Borrowing → ошибки → коллекции → Generics → Traits → модули → тесты → сетевой код

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

🔥 Rust с нуля
🔥 5–6 часов в неделю
🔥 Практика после каждого урока
🔥 Подойдёт после Python, JavaScript, Java и других языков
🔥 Можно начать сразу

В конце у тебя будет понимание Rust, с которым уже можно писать быстрые backend-сервисы, сетевые приложения и системные утилиты, а не смотреть на borrow checker как на врага.

Пора добавить Rust в свой стек. Начинай курс и пиши первый код уже сегодня: https://stepik.org/a/294885/

Читать полностью…

Rust

Discord переписывают на Rust. Electron отправляют на пенсию

Технический директор Discord Станислав Вишневский подтвердил, что компания разрабатывает новый клиент на Rust, полностью отказываясь от Electron на десктопе и React Native на мобильных устройствах.

Вместо Electron разработчики используют GPUI, нативный UI-фреймворк на Rust с GPU-ускорением. Мобильные приложения сохранят нативный интерфейс, но будут использовать общую с десктопом логику на Rust.

Тестовый клиент Discord Phoenix потребляет всего 290,2 МБ оперативной памяти. Для сравнения, нынешний Discord у некоторых пользователей занимает 1-2 ГБ и больше. Правда, полноценного сравнительного тестирования пока нет.

Discord использует Rust ещё с 2018 года: на нём уже работают части инфраструктуры, голосовые технологии и отдельные компоненты клиента.

Новая версия должна сохранить привычный интерфейс, но стать быстрее и экономнее по памяти. Пользовательское тестирование планируют начать скоро, точной даты релиза пока нет.

Источник: https://x.com/svishnevskiy/status/2118081920194203799

Читать полностью…

Rust

✔️ Google переписала 40-летний код с Fortran на Rust за 59 минут с помощью ИИ

Инженеры Google дали Gemini 4 Argon через Antigravity научную модель океана FVCOM. В исходном проекте было 174 тысячи строк Fortran и C, накопленных за десятилетия.

Агент самостоятельно изучил код, составил план миграции, переписал основные вычислительные модули на Rust, запустил тесты и оптимизировал производительность.

Результаты эксперимента:

- 59 минут на миграцию основного вычислительного ядра.
- Ускорение симуляции в 1,88 раза.
- Потребление памяти снизилось на 54%.
- Обнаружено 6 старых ошибок, включая переполнения и выходы за границы массивов.
- 96,8% покрытия ветвей тестами.
- Численные результаты совпали с оригиналом до 12 знаков после запятой на 100 тестовых сценариях.

В новом коде полностью запретили unsafe. Для ускорения агент убрал лишние выделения памяти внутри циклов, переработал структуры данных и применил LLVM PGO.

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

Google выложила использованный workflow в виде открытого skill для Antigravity. Запуск миграции выглядит так:

/migrate-to-rust <github-repo-url>

https://antigravity.google/blog/modernizing-40-year-old-scientific-code-with-gemini-4-argon

@data_analysis_ml

#rust #Google #Argon

Читать полностью…

Rust

Два месяца оптимизаций Rust-кода. А самое большое ускорение дало знание того, как устроен Linux.

Гийом Гомес, разработчик sysinfo, добавил сбор данных об использовании GPU отдельными процессами. Обновление информации резко замедлилось: приходилось обходить открытые файловые дескрипторы и искать подключения к видеокарте.

Дальше началась оптимизация:

- Работа с байтами вместо строк - примерно на 20% меньше инструкций.
- Замена Vec структурой в одном парсере - около 6%.
- fstatat вместо readlink - около 8%.
- Повторное использование буферов - на 79% меньше выделенных байтов, но без ускорения.

Перелом случился после чтения исходников htop: потоки обычно разделяют таблицу файловых дескрипторов своего процесса.

Значит, обходить одну и ту же таблицу для каждого потока незачем. Если она общая, достаточно скопировать GPU-данные процесса.

В замерах автора время выполнения сократилось с 0,31 до 0,11 секунды - примерно на 64%, а число инструкций упало на 65%.

Есть нюанс: поток может отделить свою таблицу. Проверить, общая ли она, позволяет kcmp.

Цифры получены на машине автора и зависят от нагрузки.

https://blog.guillaume-gomez.fr/

Читать полностью…

Rust

⚡ Minecraft переписывают на Rust: Horizon - альтернативный клиент с открытым кодом.

Проект воссоздаёт Minecraft: Java Edition 26.3: от генерации мира и физики до интерфейса, звука и сетевой игры. Доступен для Windows, Linux и Mac на Apple Silicon.

По заявлениям разработчиков, совместимость с оригиналом проверяется 281 набором сравнительных тестов. Клиент подключается к ванильным серверам, поддерживает сохранения и перенос совместимых модов из сборок Modrinth и CurseForge.

В сети распространяются демонстрации высокой производительности на слабых компьютерах. Однако обещать всем 60 FPS и мгновенную загрузку чанков нельзя: результат зависит от железа, настроек и конкретной сцены.

Как попробовать:

1. Установите свою лицензионную Minecraft: Java Edition через официальный лаунчер и один раз запустите версию 26.3.
2. Скачайте лаунчер Horizon и установите доступный релиз.
3. Подготовьте ресурсы из установленной копии игры и запускайте клиент.

Horizon – независимый проект, не связанный с Mojang и Microsoft. Код распространяется под MIT, файлы самой Minecraft в комплект не входят.

https://playhorizon.dev/

Читать полностью…

Rust

Уязвимости в Rust-библиотеках zip-rs и librsvg

В библиотеке zip-rs, написанной на языке Rust и насчитывающей около 10 млн загрузок в неделю, выявлена уязвимость (CVE-2026-115905), позволяющая создавать архивы, которые выглядят безобидными, но при распаковке из них извлекаются другие, изначально не показанные в списке, файлы. Файлы могут быть размещены в архиве вне структуры Central Directory, из-за чего при просмотре списка файлов показывается одно содержимое, но при распаковке через API ZipStreamReader извлекаются другие файлы. Проблеме присвоен уровень опасности 10 из 10. Уязвимость исправлена в версии zip-rs 9.0.5.

Полный текст:
https://opennet.ru/66555/
https://opennet.me/66555/

Читать полностью…

Rust

📘 На Mentorix вышел курс — «Rust-разработчик: подготовка к собеседованию»

Хотите на собеседовании спокойно объяснить, откуда E0502, чем Send отличается от Sync и как устроен Future? Этот курс — полный путь от диагностики пробелов до пробных собеседований junior, middle и senior.

• Владение и заимствование: E0382, E0502, E0597, NLL
• Времена жизни: elision, HRTB, variance
• Типажи: dyn Trait, object safety, blanket impl
• Умные указатели: Box, Rc, Arc, RefCell, Cow
• Конкурентность: Send и Sync, Mutex, атомики и Ordering
• Async изнутри: Future, Waker, Pin — без tokio
• Unsafe и FFI: UB, MaybeUninit, repr(C)
• Live-coding: LRU-кэш, трие, Dijkstra, парсер выражений
• Карьера: резюме, оффер, торг о зарплате

🎓 Сертификат — добавьте в резюме или LinkedIn

🏷 Скидка 50%, действует 48 часов
12 990 ₽ → 6 495 ₽

➜ Пройти курс на Mentorix

Ещё 25 курсов бесплатно — доступны после регистрации

Читать полностью…

Rust

Rust выбирают для связи медицинских устройств: Vector заново разработала на нём стек IEEE 11073 SDC.

SDC позволяет приборам разных производителей обнаруживать друг друга, обмениваться измерениями, состояниями и тревожными сигналами. Это основа для совместной работы оборудования в операционных и реанимации.

Почему Rust? По объяснению Vector, безопасность памяти и типов помогает предотвращать распространённые ошибки ещё при разработке, снижая риск части сбоев и уязвимостей.

При этом переписывать всё приложение не требуется: стек подключается к существующему коду на C и C++ через FFI. Его можно встроить в устройство или использовать через шлюз.

Vector также заявляет рост производительности благодаря оптимизации обработки XML и структуры данных, описывающей состояние прибора. Конкретных результатов бенчмарков компания не привела.

Доступность ожидается в первом квартале 2027 года. О сертификации или регуляторном одобрении в анонсе не сообщается.

Заметный пример практического внедрения Rust: производитель инженерного ПО выбирает его для компонента, предназначенного работать внутри медицинского оборудования.

https://www.vector.com/en/company/press/press-releases/vector-announces-new-rust-based-ieee-11073-sdc-stack-for-the-medical-device-industry/

Читать полностью…

Rust

👣 Rust предлагает включить новый trait solver по умолчанию: крупнейшее изменение языка со времён 1.0

В rust-lang/rust открыт PR #164209 от lcnr, и сам автор называет его крупнейшим одиночным изменением Rust после версии 1.0. Важная оговорка: PR ещё не влит, он находится на стадии предлагаемого final comment period. Над новым солвером работали четыре года несколько человек, опираясь на опыт многолетнего Chalk. Он меняет поведение системы типов в пограничных случаях, скорость и сам способ рассуждения о ней.

Если предложение одобрят, новый солвер уйдёт в beta, а затем в stable, начиная с Rust 1.101. Beta cutoff назначен на 6 ноября, после него старый солвер удаляют, так что стабилизация может сдвинуться максимум на один релиз. Ближайшая выгода это TAIT и RTN, которые ждали переработки opaque types. Основные плюсы придут позже, с возможностями, доступными только новому солверу.

Авторы честно перечисляют недостатки: остались зависания, производительность в среднем хуже, часть диагностик слабая, открыты мелкие баги. Аргументы за выкатку такие: два солвера в компиляторе усложняют код и делят покрытие тестами, работа блокируется ожиданием нового, а новые крейты уже начинают зависеть от некорректного поведения старого. Crater нашёл меньше 500 затронутых крейтов, почти все из-за нескольких корневых, и поломки описаны как ожидаемые. Прогон перформанса на основной метрике числа инструкций заметных изменений не показал.

lcnr отдельно благодарит compiler-errors и adwinwhite, без работы которых такая стабилизация, по его словам, вряд ли была бы возможна.

Источник: http://github.com/rust-lang/rust/pull/164209

Читать полностью…

Rust

Imagining how many days it would take to debug these problems in Python or Javascript

Читать полностью…

Rust

🔥 Хочешь быстрее расти в IT? Хватит учиться в одиночку

Окружение решает больше, чем кажется.

Собрал папки и каналы, где можно быстрее влиться в нужное направление, следить за трендами и не вариться в своём пузыре.

AI: t.me/ai_machinelearning_big_data
Python: t.me/pythonl
Linux: t.me/linuxacademiya
Хакинг: t.me/linuxkalii
DevOps: t.me/DevOPSitsec
Docker: /channel/+90Z5TAyfuNU5YmRi
Golang: t.me/Golang_google
Rust: t.me/rust_code
C++: t.me/cpluspluc
C#: t.me/csharp_ci
Java: t.me/javatg
JavaScript: t.me/javascriptv
React: t.me/react_tg
Frontend: t.me/front
PHP: t.me/phpshka
Android: t.me/android_its
Мобильная разработка: t.me/mobdevelop
Базы данных: t.me/sqlhub
Data Science: t.me/data_analysis_ml
Big Data: t.me/bigdatai
Математика: t.me/data_math
Физика: t.me/fizmat
Kubernetes: t.me/kubernetc
GameDev: /channel/gamedev
Haskell: t.me/haskell_tg

Собеседования и карьера:

DS собеседования: t.me/machinelearning_interview
Python собеседования: t.me/python_job_interview

Папка с вакансиями: t.me/addlist/_zyy_jQ_QUsyM2Vi
Папка Go разработчика: t.me/addlist/MUtJEeJSxeY2YTFi
Папка Python разработчика: t.me/addlist/eEPya-HF6mkxMGIy
Папка ML: /channel/addlist/2Ls-snqEeytkMDgy
Папка Frontend: /channel/addlist/mzMMG3RPZhY2M2Iy

Полезное сверху:

ИТ-мемы: t.me/memes_prog
Английский для программистов: t.me/english_forprogrammers
ИИ и технологии: t.me/vistehno
954 ГБ open-source курсов: /channel/+rKBQEMccAA01MTcy
ИТ-книги бесплатно: /channel/addlist/BkskQciUW_FhNjEy

Max Ai: https://max.ru/ai_machinelearning_big_data
Max python: https://max.ru/pythonl
ТЕХНО: https://max.ru/vistehno
Max Go: https://max.ru/Golang_google
Max Linux: https://max.ru/linuxkalii
Devops: https://max.ru/DevOPSitsec
C#: https://max.ru/csharp_ci
C++: https://max.ru/cpluspluc
SQL: https://max.ru/sqlhub
Java: https://max.ru/javatg

Подписывайся на нужные направления и собирай себе ленту, которая реально двигает вперёд.

Читать полностью…

Rust

🦀 В Rust нашли баг, который 11 лет обходил гарантии безопасности памяти.

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

В issue есть примеры чтения освобождённой памяти и падения программы. Один из них воспроизводится начиная с Rust 1.4.

Разработчики присвоили ошибке высокий приоритет `P-high`. По оценке команды, случайное проявление маловероятно: для показанного нарушения безопасности нужна специально сконструированная реализация Drop.

Комментарии ограничили, чтобы предотвратить спам и бесполезные обсуждения.

Гарантии Rust тоже зависят от корректности компилятора. Здесь нашли дыру именно в их реализации.

https://github.com/rust-lang/rust/issues/164250

Читать полностью…

Rust

🦀 1,8 млн ошибок из-за одного пробела: как разработчик собирал Kubernetes Ingress на Rust и Go

Автор Silex разделил систему на две части:

• Go-контроллер наблюдает за Ingress и EndpointSlice, отслеживая маршруты и адреса бэкендов.
• Rust-движок на Tokio принимает трафик и ищет маршруты в конкурентной таблице DashMap.

Обработка запросов отделена от взаимодействия с Kubernetes API.

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

Причина оказалась в разборе конфигурации. Вместо JSON-парсера код искал точную подстроку:


Ожидал: "host":"silex.local"
Получил: "host": "silex.local"


Допустимый в JSON пробел ломал поиск. Обработчик молча завершался и закрывал TCP-соединение. Итог: 1,8 млн ошибок чтения.

После исправления автор сравнил Silex с NGINX Ingress: K3s, HTTP echo-бэкенд, wrk, 400 соединений, 4 потока, 30 секунд.

Silex: 2536 запросов/с. NGINX: 2274. Разница: +11,5%.

Но максимальная задержка у обоих была около двух секунд, таймауты тоже остались. У Silex их даже больше: 302 против 286. По объяснению автора, нагрузка упёрлась в Node.js-бэкенд.

На момент статьи TLS-терминация, активные проверки бэкендов и Prometheus-метрики ещё были в планах.

Самое ценное здесь: увидеть, как устроен небольшой ingress, где ломается взаимодействие компонентов и почему throughput нужно читать вместе с ошибками и задержками.

https://dev.to/sysalchemist/how-i-built-a-custom-kubernetes-ingress-in-rustgo-that-outperforms-nginx-by-11-4iag

@Golang_google

Читать полностью…

Rust

🍃 Добавить реплику MongoDB, не копируя всю базу: что меняет Atlas Infinite

В привычной архитектуре каждый узел replica set хранит полную копию данных. Добавление реплики или изменение размера узла требует перемещения больших объёмов данных.

Atlas Infinite разделяет вычисления и хранение. Узлы выполняют запросы, а общий слой хранения, написанный на Rust, отвечает за журнал, страницы данных и долговечность. Вычислительные ресурсы и хранилище масштабируются независимо.

Самая интересная деталь: два журнала с разными задачами.

• oplog фиксирует логические операции. Запись подтверждается после устойчивого сохранения большинством реплик журнала.
• phylog передаёт физические изменения страниц при checkpoint, сохраняя пакетную обработку WiredTiger.

То есть подтверждение записи отделено от подготовки страниц для чтения.

Новая read replica подключается к общим страницам и догоняет хвост журнала. Ей не нужно сначала копировать всю базу. А данные шифруются на вычислительном узле: общий storage-слой работает с зашифрованным содержимым.

Для приложения сохраняются протокол, драйверы и семантика операций. Меняется инфраструктура под базой. Atlas Infinite пока в public preview.

Хороший разбор для тех, кому интересны внутренности СУБД:

https://muratbuffalo.blogspot.com/2026/10/atlas-infinite-mongodbs-disaggregated.html

@sqlhub

Читать полностью…

Rust

⚡️ Как запретить ошибку в работе с путями ещё до запуска программы?

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

Автор статьи предлагает выделить обычное имя в отдельный тип NormalComponent. Тогда сигнатура говорит сама за себя:


fn join_normal(&self, name: &NormalComponent) -> AbsPath


Функция принимает только компонент имени, а не любой фрагмент пути. Ошибочный вызов отсекается типами, без россыпи проверок внутри функции. Приём простой: если разные варианты enum дают разные гарантии, иногда полезно представить нужный вариант отдельным типом.

https://www.schneems.com/2026/09/24/a-type-stronger-than-the-sum-of-its-components/

Читать полностью…
Subscribe to a channel