Обновить
64K+

Rust *

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

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

Реверс‑инжиниринг электросамоката и новая прошивка для него на Rust

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

Я выполнил реверс‑инжиниринг оборудования и прошивки своего электросамоката Egret GT. В статье будет рассказано о том, как мне удалось забраться внутрь, проанализировать обмен данными между компонентами и отреверсить прошивку.

Читать далее

Новости

Холмс, 993 вызова исчезли, и лучше не становится. Три ловушки Rust IPC в Tauri 2

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

Холмс, я убрал 993 лишних IPC-вызова, и моё приложение стало тормозить в два с половиной раза сильнее. В логах было тихо. Бэкенд на Rust молчал. На границе с WebView творилось что-то необъяснимое…

Следствие начинается!

Life Cycle: что остаётся после того, как тебя больше нет

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

Две недели назад я ехал к отцу и не успел примерно на сорок минут.

Ему было 84 года, последние месяцы он был совсем плох, поэтому сама возможность такого исхода не была неожиданностью. Я девятый ребёнок в семье и самый младший. Я метис: отец был кумыком, мама русской. Маму я похоронил в 2016 году. Из всей большой семьи именно я жил в Ставропольском крае, и когда близкие сообщили, что отец совсем плох, я выехал к нему.

Когда приехал, его уже не было.

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

Но эти сорок минут почему-то заставили меня думать не столько о смерти, сколько о времени.

Меня зовут Артур Валиев. Я программист. Раньше я уже пытался разговаривать через Rust о совсем не технических вещах — например, о любви. И чем дольше я пишу код, тем чаще ловлю себя на довольно странной профессиональной деформации: я начинаю смотреть на собственную жизнь как на систему, которую желательно хотя бы не оставлять в заведомо некорректном состоянии.

На этот раз мне захотелось попробовать описать не любовь.

Мне захотелось описать конец жизненного цикла.

Читать далее

Rust на вырост. Почему мы изучаем язык, который не входит в наш основной стек

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

Хабр, привет! На связи Алексей Постригайло, старший партнер интегратора «Энсайн».

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

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

Читать далее

Как подружить расширение Claude Code для VSCode с моделями и подпиской OpenAI

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

Мост на Rust, который поселил модели GPT внутри расширения Claude Code для VSCode - через существующую подписку OpenAI, без API-ключа и ручного запуска серверов.

Читать далее

Вместо конвертации ассетов перепишу с нуля рантайм игры

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

Допустим, вы хотите перенести модельку из одной игры в другую.

Классический путь — извлечь, перегнать в промежуточный формат, адаптировать под целевой движок и собрать заново. Звучит рационально, практично и таких решений не мало:

OpenAssetTools / ZoneTool автоматизируют процесс конвертации для Call of Duty

UE Viewer экспортирует данные Unreal в GLTF, PSK, DDS и др.

Мы сегодня рассмотрим альтернативный путь. Как вам идея переписать рантайм целевой игры с нуля и добавить нативную поддержку чужих ассетов? Моя попытка сделать что‑то подобное привела к созданию экспериментального движка IW4L, основой для которого является IW4 (Call of Duty Modern Warfare 2 2009).

Читать далее

Контекст растёт, KV-кэш — нет: Qwen3.8-27B на ограниченной VRAM с CMF формате

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

Qwen3.8-27B в Q4TP занимает около 14,3 GB весов, но при длинном контексте упирается ещё и в KV-кэш. Для 16 full-attention слоёв этой гибридной модели FP16 KV-state растёт на 65 536 байт с каждым токеном: на 64K это около 4 ГиБ только для K/V.

В экспериментальном режиме O(1) рантайм CMF заменяет растущий KV-кэш этих 16 слоёв фиксированным состоянием: четыре sink-токена, точное окно последних 128 токенов и 32 опорных представлений для дальней части. В использованном профиле GPU-state attention составляет 44,1 МиБ, и не увеличивается с длиной контекста.

Читать далее

Я прогнал топ VRAM-калькуляторов для LLM — все ошибаются в одном и том же

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

Наивная формула «веса + KV < VRAM» промахивается по двум причинам, и обе стоят денег. Первая: движок (vLLM, SGLang, TensorRT-LLM) резервирует почти всю память под свой пул ещё до того, как вы посчитали KV — поэтому ответ «сколько запросов влезет» всегда мимо, в сторону «влезет», а потом OOM под нагрузкой. Вторая, которую в уме не посчитать: на DeepSeek-V2-Lite обычная формула завышает KV в 7–11 раз, и промах уже в обратную сторону — зря откажетесь ставить модель.

Я прогнал топ VRAM-калькуляторов из выдачи Google, показал на скриншотах, где ломается каждый (даже лучший), сверил числа с живым vLLM на A100/H100 — расхождение ~1% — и собрал ridgepoint: калькулятор, который считает как движок, а не как учебник. Ставится локально (pip install ridgepoint), GPU не нужен.

Сколько реально влезет

Задача взяла lock() и остановила весь рантайм: пять ошибок с блокировками в async Rust

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

В async Rust одна неудачно взятая блокировка может остановить весь рантайм — вместе с таймерами и задачами, которые должны были её отпустить. Разберём пять типичных ловушек с Mutex и RwLock и посмотрим, почему привычки из синхронного кода здесь дают сбой.

Читать разбор

Смерть сабагентов в Claude и Codex

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

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

Но если честно проще в вашем стиле попросить кодекс/клод объяснить как оно все работает, чем читать эту статью, она для неленивых.

Не полениться и прочитать

Rust: Макетирование форм для Iced 14

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

Привет, Хабр!

Некоторое время назад у меня образовалось немного (вернее много) свободного времени, и я между моментами серфинга на известном сайте HH решил посмотреть в сторону освоения Rust. Кроме всего прочего мне очень интересует тема библиотек графических интерфейсов.

В Rust есть несколько подобных библиотек, я решил остановиться на Iced — текущая версия Iced 0.14. Прежде всего понадобилось понять принципы построения библиотеки и архитектурную философию паттерна ELM, которая реализована в библиотеке.

В процессе изучения родился описываемый ниже PET‑проект Iced Forms Pack. Проект представляет собой конструктор форм из базовых элементов Iced.

Читать далее

CMF: новый формат для создания специализированных LLM моделей

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

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

Это первая подробная открытая публикация формата CMF, уже можно использовать в собственных проектах. Буду рад разработчикам, готовым расширять его возможности и проверять результаты на своих задачах. CMF GitHub

Читать далее

Плагины в Picodata

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

В каждой уважающей себя СУБД должна быть возможность программировать на тьюринг-полном языке программирования. Вот и у нас в Picodata есть возможность написать плагин на Rust, а как это делать — расскажу под катом.

Читать далее

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

Как мы скрестили Go, Rust и MCP, чтобы построить масштабируемый оркестратор ИИ-агентов часть 2

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

Как мы скрестили Go, Rust и MCP, чтобы построить масштабируемый оркестратор ИИ-агентов часть 2.

Глубокий разбор архитектуры Zettaverse AgentHub

Кастомная валидация структуры flow_json и построение DAG

Читать далее

V8 startup snapshot: как правильно запустить JS-код на сервере

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

Представьте типичную ситуацию. У вас есть сервер на каком-то языке (сейчас какой именно для нас не важно, но допустим, это Rust). И в нём по каким-то причинам нужно исполнить JavaScript-код. Например, фронтенд написан на React, и вы хотите рендерить HTML на сервере (SSR). Или есть бизнес-логика, которая проще пишется на JS. Или библиотека, которая существует только в npm, и переписывать её на Rust нет ни сил, ни желания. Таких примеров можно привести множество: markdown, dompurify, highlight.js и т.д.

Читать далее

Как устроена паника в Rust: раскрутка стека, panic = «abort» и что поменялось за два года

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

Привет, Хабр!

Откройте почти любую статью про FFI на Rust. С вероятностью девять из десяти там написано: «паника, вышедшая за границу с C, — это неопределённое поведение». Эту фразу повторяют пять лет, я и сам её цитировал, в том числе в одной из прошлых статей. Она перестала быть правдой почти два года назад: с Rust 1.81, вышедшего в сентябре 2024-го, такая паника гарантированно и предсказуемо завершает процесс.

Причём это не единственный протухший совет. Второй я поймал на себе буквально недавно. Есть присказка, живущая в статьях лет десять: поставь panic = "abort" — и бинарник похудеет процентов на десять. Написана она в релиз-нотах 1.10 за июль 2016 года, я повторил её в чужом пулреквесте, а потом сообразил, что ни разу не проверял. Собрал одну программу тремя способами, посмотрел в size -A и получил шесть десятых процента вместо десяти. Причём в сборке, где раскрутки быть не может по определению, преспокойно лежали одиннадцать килобайт таблиц, существующих исключительно ради раскрутки.

Но всё это финал истории, а начинается она с того, что паника — вовсе не «программа крякнулась». Это полноценный механизм исключений на той же машинерии, что и в C++. Раскрутка идёт не в один проход, а в два. Каждое исключение метится восемью байтами b"MOZ\0RUST", доставшимися в наследство от Mozilla, где Rust когда-то жил. catch_unwind ловит не через personality routine, как принято думать, а через отдельный компиляторный интринсик. А ещё есть дыра, про которую почти не пишут, потому что вылезает она только при раскрутке между двумя независимо собранными копиями стандартной библиотеки — и защищает от неё канарейка, живущая прямо внутри исключения.

Читать далее

Rust указатель, который сам решает, кем ему быть

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

В своем недавнем посте затронул основной философский аспект Rust: уровень владения значением — это часть контракта. Ключевая идея в автоматическом выборе: система по умолчанию задает самый строгий уровень и ослабляет его, лишь когда это необходимо.

В этой статье хочу развить идею и представить её экспериментальную реализацию в коде. Заодно покажу, с какими сложностями столкнулся и почему изначальную идею пришлось пересмотреть.

Читать далее

Снова кодеки — строим EVRT2CKMAX

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

Когда ты пишешь собственный кодек удалённого рабочего стола, последнее, что хочется услышать от человека из конкурентов:

Читать далее

Один пакет — один мини-плеер: почему мы перенесли голос БОЛТУНа в AudioWorklet

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

Почему исправные 20-мс аудиопакеты всё равно превращались в щелчки? В БОЛТУНе каждый пакет запускался как отдельный AudioBufferSourceNode — до 50 мини-плееров в секунду на одного говорящего. Мы заменили это расписание одним непрерывным AudioWorklet с кольцевым буфером и проверили новую схему тестами.

Разобраться в звуке

Как мы скрестили Go, Rust и MCP, чтобы построить масштабируемый оркестратор ИИ-агентов

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

Model Context Protocol (MCP) от Anthropic перевернул работу с ИИ-агентами, но когда их становится больше трех, начинается ад с правами доступа, сетевым I/O и визуальным контролем. Мы задолбались собирать костыли на Python и написали масштабируемый опенсорс-оркестратор. Внутри — честный инженерный разбор: почему для ядра выбрали Go, как упаковали асинхронный движок JSON-RPC 2.0 на Rust в cdylib для вызова через cgo, и как мы героически побеждали утечки памяти на стыке этих двух миров.

Читать далее
1
23 ...