Обновить
64K+

Rust *

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

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

Я написал свой музыкальный плеер со своим стримингом: Android, Windows, Linux и сервер на Rust

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

У меня есть коллекция музыки, которой нет ни в одном стриминге: FLAC, японские альбомы, редкие релизы. Слушать её хотелось так же удобно, как Spotify, с телефона и компьютера, с текстами и итогами года. Готовые решения закрывали задачу по кусочкам, поэтому я написал своё: Nami — плеер для Android, Windows и Linux и собственный сервер на Rust. Внутри: синхронизация между устройствами через одну SQL‑таблицу вместо девяти, караоке‑тексты с выравниванием по словам нейросетью прямо на телефоне, фуригана и ромадзи для японских песен, bit‑perfect‑вывод на USB‑ЦАП и сервер, который занимает 69 МБ памяти.

Читать далее

Новости

Rust для микроконтроллеров: что он даёт по сравнению с С

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

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

Разберём это на DMA, владении периферией, состояниях GPIO, прерываниях и unsafe — без попытки доказать, что Rust должен заменить Си.

Читать далее

Чудеса nightly, часть 1: на чём тайком держится stable Rust

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

Привет!

Заверните обычный File в структуру из одного поля и пробросьте чтение внутрь. Пара строк, логика не поменялась. А теперь скопируйте через io::copy файл на 64 мегабайта: голый File справлялся за два системных вызова, обёртка сделает больше шестнадцати тысяч.

Ошибки в коде нет, вы просто выпали из специализации, которой в стабильном Rust официально не существует. Зато в стандартной библиотеке на ней висит больше сотни функций, и такая фича там не одна: даже NonNull хранит адрес в типе, который на stable объявить нельзя.

Чем глубже копаешь, тем веселее. Та же специализация ускоряет collect и умеет заставить код без единого unsafe читать освобождённую память, а итератор, написанный как обычная функция, превращается в идеальный ассемблер и почему-то отказывается векторизоваться. Материала набралось на четыре-пять статей, это первая, и в ней пять фич: gen-блоки, pattern types, специализация, become и #[loop_match].

Читать далее

Почему я пишу Bun‑native альтернативу napi‑rs

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

Я работаю над bffi‑rs, экспериментальным фреймворком для нативных биндингов Bun, написанным на Rust.

Проект появился из довольно практичной задачи. Я хотел сделать небольшое desktop‑приложение с нативным WebView, но при этом оставить Bun основным рантаймом.

В экосистеме уже есть решения для подобных приложений. Например, некоторые интеграции WebView для Bun используют Rust и napi-rs. В варианте Electrobun, который я рассматривал, для WebView используется Wry, а связка между Rust и JavaScript строится через napi-rs. Эти проекты решают реальные задачи, но у меня появился другой вопрос: что будет, если строить нативную часть приложения вокруг Bun, а не вокруг совместимости с Node.js?

Читать далее

Как зарабатывать на Open Source без смены лицензии: разбор Cap (22.8k звёзд) и схема с платными бинарниками

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

Большинство попыток заработать на открытом коде упираются в две крайности: сбор донатов, где за десятки тысяч звёзд на GitHub автор получает пару сотен долларов в месяц, или внезапная смена лицензии на BSL, которая оборачивается волной хейта и немедленными форками.

Проект Cap (открытый аналог Loom с 22 800 звёзд) нашёл третий путь. Их монорепозиторий на Rust, Tauri и Next.js выложен полностью, но проект успешно зарабатывает. Ниже — подробный разбор архитектуры проекта, того, как устроено разделение лицензий MIT и AGPLv3, и почему юридическая схема с платными бинарниками за $29/год работает даже без DRM.

Читать далее

Локальные нейросети без Python, CUDA и терминала: делаю программу, в которой всё настраивается само

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

Vulkan на моей GTX 1080 генерирует в полтора раза быстрее CUDA. Qwen вставляет китайские слова в русский текст даже при температуре 0. А маленькая модель однажды отчиталась, что удалила файл, и ничего не удалила. Всё это я узнал, пока делал Ollivo: программу, которая запускает локальные нейросети без Python, CUDA и терминала.

Читать далее

Как я автоматизировал работу врачей на Rust

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

Написал локальный софт на Rust, который переносит реквизиты из ODT, помогает оформить выписку и собирает документы в один PDF.

Читать далее

Терпение. Или как один зависший кадр заставил меня построить ещё полсистемы;‑)

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

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

Читать далее

Кросс-компиляция под андроид и не только

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

Сегодня широко используют cmake add_subdirectory и сборку через Gradle для кросс-компиляции сишных библиотек под андроид. Мы же рассмотрим более продвинутый и универсальный способ, который работает со множеством систем сборки и позволяет любым проектам найти свои зависимости без написания отдельных костылей под каждый проект: будем отдельно собирать каждую библиотеку ее собственной системой сборки в общий $PREFIX

Читать далее

YuE2 Studio: бесплатная замена Suno на своей видеокарте, и почему я перешел с Python и Gradio на Rust, Tauri и C++

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

Всем привет, любите ли вы генерировать музыку так, как люблю я? Можете не отвечать, скорее всего нет. Но вот с ужесточением правил Suno, генерировать музыку там стало просто бессмысленно (кто не в курсе с сентября, они закрыли скачку треков).

Потому я собрал десктопную студию в стиле Suno для YuE2, новой открытой модели генерации песен от команды M‑A‑P (Multimodal Art Projection). Пишете стиль и текст, получаете полноценную песню с вокалом и аккомпанементом в 48 кГц стерео. Всё считается на вашей видеокарте: без облака, подписок, очередей и без установки Python.

Читать далее

Разработка Platinum OS на базе Samsung M52

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

Начал портировать свою операционную систему Platinum OS на Samsung Galaxy M52. В основе — Ubuntu 26.04 LTS, собственная графическая оболочка, службы и пакеты приложений. Разблокируемый загрузчик телефона позволяет запускать модифицированные загрузочные образы и экспериментировать с Linux на настоящем устройстве.

Читать далее

Семь мест, где «S3-совместимое» хранилище ведёт себя не как AWS

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

Код, который отлично работает с AWS S3, на Ceph RGW или MinIO может упасть с пустым текстом ошибки. Разбираю семь таких мест из собственного клиента, с кодом и объяснением, почему сервер отвечает именно так.

Читать далее

Ваш future весит два килобайта, и виновата одна фигурная скобка

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

Приветствую!

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

Такая функция возвращает future размером 1026 байт. А если передвинуть буфер так, чтобы он умирал до ожидания — банально, обернуть в фигурные скобки, — размер упадёт до 2 байт.

Прикинем, что это вообще значит. Сервис держит десять тысяч соединений и на каждое заводит такую задачу. Первый вариант — 10 мегабайт под буферы, которые в момент ожидания никому не нужны. Второй — 20 килобайт. А на микроконтроллере, где памяти к примеру всего 128 килобайт, первый вариант не влезет вообще, а второй займёт от неё шесть сотых процента.

Сегодня посмотрим, в чем же тут беда.

Читать далее

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

Как плагин обновлений Tauri ломает HTTPS на ALT Linux

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

Приложение на Tauri 2 проходит все тесты на Ubuntu, а на ALT Linux теряет HTTPS сразу после проверки обновлений. Разбираю, почему так происходит, как это воспроизвести и как исправить одной функцией в своём коде.

Читать далее

Написал менеджер буфера обмена на Rust, потому что Win+V меня добил

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

Есть встроенный в Windows Win+V. Я честно пользовался им года полтора. А потом однажды скопировал кусок кода, полез искать то, что копировал двадцать минут назад, и понял, что искать там нечем. В Win+V нет поиска. Совсем. Список, по которому ты скроллишь глазами. Двадцать пять элементов, картинки вперемешку с текстом, и ты листаешь колёсиком, как ленту, пытаясь вспомнить, как выглядела нужная строчка.

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

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

Читать далее

Как мы сэкономили 100 ТБ за счёт оптимизации DNS-кэша сервиса 1.1.1.1

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

Платформа Big Pineapple — на базе которой работают 1.1.1.1, Gateway DNS, DNS Firewall, AS112 и ряд других DNS-сервисов Cloudflare — в любой отдельный момент времени хранит 250 млрд. кэш-записей. При таких масштабах использование даже одного лишнего байта на запись стоит нашему парку машин более 250 ГБ памяти.

Озадачившись этой проблемой, мы последовательно внесли пять изменений в механизм сохранения кэш-записей, сократив объём памяти, необходимый для хранения одной такой записи, более чем вдвое. В общей сложности нам удалось освободить примерно 100 ТБ по всему парку, что равнозначно объёму RAM в 130 из наших серверов 13-го поколения. При этом также ускорилась работа кэша. Пропускная способность при вставке записей выросла на 43%, а задержка поиска упала на 19%. Причём за счёт сокращения числа аллокаций и повышения локальности данных жертвовать скоростью ради экономии памяти не пришлось.

Читать далее

Rewrite It in Rust: когда переписывание действительно оправдано

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

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

Разобраться в RIIR

«Лучшие» практики Rust, которые вас подведут. Часть 2

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

Ну, привет.

В январе мы разбирали пять привычек, которые звучат разумно, а на деле мешают: дженерики на каждый параметр, Arc<Mutex>

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

Сегодня — ещё пять таких же «лучших» практик. Трейт на случай смены базы. Лайфтаймы в структурах ради аллокаций, которые никто не считал. Строка #[derive(...)], которую копируют не глядя и однажды сливают пароль в лог. Newtype на каждое число. И оптимизации, которые воткнули до того, как кто-нибудь вообще открыл профилировщик.

Читать далее

CADBase: Инженерная Open Source платформа для обмена 3D-моделями на стеке Rust, WASM и WebGPU

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

Обмен чертежами и инженерными данными сегодня ограничен тремя путями: сложные внутренние PDM-системы требуют покупки дорогих лицензий для каждого внешнего контрагента, коммерческие облачные платформы представляют собой закрытый «черный ящик» без доступа к коду, а локальные хранилища (NAS) не дают ни 3D-просмотра, ни карточек изделий.

Идея открыть исходный код закладывалась с самого старта проекта, но была реализована поэтапно. Первым шагом в 2023 году стало открытие фронтенда (cdbs-app) под лицензией MIT. В 2026 году, с релизом v0.3.2, в статус Open Source под лицензиями GNU AGPL v3.0 и PostgreSQL License перешли все оставшиеся части платформы, полностью закрывая этот долг перед сообществом. Теперь это полноценное, независимое и технологически продвинутое решение для инженерных команд.

Читать далее

EvertyDisplay: что я сделал и зачем

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

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

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

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