Обновить
64K+

Rust *

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

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

Как мы спроектировали расширения для клиента Kubernetes: песочница, WebAssembly и подписанный каталог

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

Sextant — десктопный клиент Kubernetes на Rust и Tauri 2, замена Lens без аккаунта и телеметрии, со встроенным MCP-сервером для AI-агентов. С версии 0.28 у него есть каталог расширений, и первым в нём стало расширение для Rook Ceph.

Расширение — это чужой код внутри программы, у которой есть kubeconfig и токены от всех ваших кластеров. В статье — шесть архитектурных решений, которые делают такой код безопасным: изоляция интерфейса, проверка прав в Rust, вклады как данные, бэкенд на WebAssembly, декларации вместо фонового кода и каталог с подписями. Для каждого — какие варианты мы рассматривали, почему выбрали именно так и чем за это платим. В конце — как платформа выдержала первое настоящее расширение, для Rook Ceph.

Sextant бесплатный и таким останется. Весь его код сгенерирован Claude Code: человек ставит задачи, принимает архитектурные решения и делает ревью, а каждое изменение проходит больше 6500 тестов на Linux, macOS и Windows.

Читать далее

Новости

Как владельцы серверов Linux на xray рискуют потерять их?

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

«Разработчики прокси‑платформы Xray отозвали (https://www.securitylab.ru/news/579534.php)предыдущий релиз и выпустили экстренное обновление v26.10.31 из‑за критической уязвимости в ядре Linux. Ошибка позволяет злоумышленникам без пароля получить права суперпользователя на сервере через специально подготовленные сетевые запросы. Под особым ударом оказались сетевые приложения на языке Go, которые без ведома администраторов активировали уязвимый режим связи.»

Читать далее

Обновлённый язык программирования на русском языке, с компилятором даже на телефонах

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

Сфера, это компилируемый язык программирования на русском языке: ключевые слова, типы, стандартные библиотеки, адреса сайта - всё на русском. Рассказываем, об изменениях в синтаксисе, про сборки под Windows, macOS, Linux и Android, а также о том, что на телефоне код можно писать, компилировать и запускать без root и без компьютера. Заодно пару слов про наш веб сайт, написанный полностью на нашем языке!

Читать далее

Разработка на скорости машин: как найти (и починить) уязвимость в Linux и Ginux

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

TL;DR

В Ginux первые исправления по моим отчётам попали в main за десять часов. Мой патч для Linux добрался до дерева Линуса за 69 дней. Между этими числами — два очень разных процесса разработки, в которых мне довелось поучаствовать найти баг, воспроизвести, отправить мейнтейнеру.

Читать далее

Ты не бойся, это Goose

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

Есть вещи посильнее “Фауста” Гёте. Есть вещи побыстрее Rust – новый ЯП Goose. Он же и помедленнее. Зависит от контекста.

В типичных публикациях феномен подаётся так: “ИИ написал язык Goose – быстрее C++ и Rust”. Под катом – магия в деталях с частичным последующим разоблачением.

Читать далее

Многопоточность в Rust: как Ownership, Send и Sync помогают бороться с гонками данных

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

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

В Rust мы с вами постараемся решить ту же самую задачу.

Главное отличие заключается не в том, что Rust умеет создавать потоки каким-то лучшим способом, а дело в модели владения и системе типов: компилятор не позволяет безопасному коду произвольно разделять изменяемые данные между потоками.

Но это кстати и не значит, что Rust автоматически исправляет любую ошибку в многопоточности. Логические ошибки, взаимные блокировки и неправильная синхронизация по-прежнему возможны.

Будем разбираться с вами на практических примерах.

Читать далее

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

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

Рабочий стол зарастает быстро: скриншоты, скачанные ролики, договоры, установщики. Я сделал «Порядок», бесплатную программу для Мака и Windows. Она сама предлагает раскладку, для каждого файла объясняет, почему он едет именно туда, ничего не удаляет и одной кнопкой возвращает всё как было. Внутри: журнал как в базе данных, lsof с русскими именами папок и iCloud, который скачивает файлы, если на них просто посмотреть.

Читать далее

Программируем без IDE или применение qwen и qwen coder для написания софта

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

Сейчас мы попробуем быстро написать сканер ntfs alternate data streams потоков, на не совсем тривиальном стеке и архитектуре. Сделал я это в первую очередь для тестирования возможностей моделей семейства qwen.

Краткое пояснение для тех, кто не работал в это сфере. NTFS (аббревиатура от англ. new technology file system — «файловая система новой технологии») — стандартная файловая система для семейства операционных систем Windows NT. Одним из ее малоизвестных свойств является наличие альтернативных потоков данных (англ. Alternate Data Streams, ADS), который представляют собой метаданные, связанные с объектом файловой системы NTFS. Таким образом к файлу можно прикрепить еще несколько потоков данных которые будут не видны стандартными средствами ОС.

Читать далее

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

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

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

При работе над прошивкой NanoVNA на Rust мне понадобилось разобраться, как продолжать измерение после паузы (ради обслуживания экрана и USB).

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

Читать далее

Внутри диаграммы Ганта: холст 480 на 360, палитра на 30 цветов и число без последнего бита

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

Я собираю файл конфигурации из XML так, чтобы он совпал с платформенным с точностью до бита. Диаграммы Ганта в типовых конфигурациях пустые, и на них ушло шесть дней. Внутри нашлись обычная диаграмма, воображаемый холст 480 на 360, число, у которого платформа теряет последний бит, и палитра, где серия номер -1 получает 15-й цвет. Рассказываю, как это устроено и как добывалось: дизассемблер, Frida и серия загрузок платформой.

Читать далее

Заменяем базу данных SQLite на 3 ГБ конечным автоматом‑преобразователем на 10 МБ

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

Примечание для любителей чисел: все значения в статье округлены до первого значимого разряда, потому что я фанат метода «zequals» Роба Истэуэя, который позволяет сразу переходить к сути при выполнении оценочных расчётов. Гораздо полезнее запомнить такую эвристику: «Один парень сократил потребление памяти в 300 раз, заменив самодельную базу данных на крошечную статическую специализированную структуру данных, которая делает именно то, что ему нужно, и ничего лишнего».

В одни выходные мне представилась невероятно редкая возможность поработать с Taskusanakirja, часто называемым tsk — финско‑английским словарём с инкрементальным поиском в процессе набора1. Принципиально эта задача сводится к префиксному поиску, а каноническое решение префиксного поиска с автозавершением — это реализация префиксного дерева.

Она замечательно работала в первой реализации tsk, написанной на Go (о которой я уже много раз рассказывал). В ней используется несколько базовых оптимизаций. Чтобы не выполнять поиск по нескольким процентам от общего числа слов (а их было несколько сотен тысяч), которые мы встраивали непосредственно в исполняемый файл (с самого начала одной из целей проектирования было поставлять всю программу в виде одного файла .exe, одного файла .app или одного статически скомпонованного исполняемого файла), мы установили ограничение: например, возвращать только первые 50 или 100 совпадений. Кроме того, мы просто заранее кэшировали все комбинации из 1, 2 и 3 символов. После этого за целый год интенсивного личного использования я больше ни разу не замечал сколько-нибудь ощутимых задержек в работе программы. При помощи подобных простых оптимизаций мы смогли сжать префиксное дерево примерно в 60 МБ.

Однако финский язык отличается чрезвычайно развитой агглютинацией. Одно-единственное исходное слово может иметь более сотни возможных окончаний, если учитывать все их комбинации. Причём эти комбинации не образуются по какому-то простому регулярному правилу!2 Кроме того, чрезвычайно последовательная орфография финского языка означает, что написание слов точно отражает то, как носители языка действительно их произносят. Поэтому по мере добавления окончаний исходные слова причудливым образом удлиняются, изменяются и трансформируются, приобретая благозвучные формы. Всё это кажется совершенно естественным, если ты уже пару лет погружён в изучение языка. Но новичок, увидев предложение вроде «Opiskelijassammekin on leijonan sydän», с большой вероятностью споткнётся об одно конкретное слово. Одна из задач этой программы — помочь изучающему понять, где именно нужно правильно разделить слово на составляющие, и для этого она тоже включает в себя всю необходимую информацию.

Здесь префиксное дерево даёт сбой...

Читать далее

Управляемый DTLS-прокси на Rust: решения, ошибки и цена упрощения

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

В первой части я рассказывал, как, почти не зная Rust, взялся за UDP/DTLS-прокси для системы управления 300 тыс. устройств и поручил большую часть реализации ИИ. Тогда я сосредоточился на том, как меняется работа инженера, когда код пишет модель.

Теперь — техническая сторона этой истории: почему локальная таблица маршрутов в XDP теряла рукопожатия, как прокси без общего хранилища находит владельца DTLS-сессии и почему 26-байтовый CID с HMAC и подписанный PPv2 уступили более простым решениям. Расскажу, какие компромиссы пришлось принять и какие ошибки удалось обнаружить на испытаниях.

Читать далее

Unbihex 0.2.3: разбор узких мест TCP, 938 подключений/с в REALITY и консольный клиент для роутеров и NAS

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

Недавно я выложил первую статью про Unbihex - легковесный VPN-клиент и сетевое ядро на Rust, которое потребляет 12-18 МБ оперативной памяти. Ожидал дежурной критики и пары десятков просмотров, но публикация собрала больше 2000 прочтений, репозиторий перевалил за сотню звёзд, а в комментарии и Issues пришли практикующие сетевики и системные инженеры.

За прошедший день проект дорос до версии 0.2.3. Мы закрыли основные запросы сообщества (роутеры, NAS, JSON-конфиги, TUI в стиле btop), добавили постквантовый обмен ключами, выложили тестовый сервер и провели глубокий аудит производительности, в результате которого обогнали Xray и sing-box по скорости обработки новых соединений.

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

Читать далее

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

Лаунчер Minecraft на Rust и iroh: P2P-комнаты, автосинхронизация сборок и голос поверх QUIC

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

Играть вдвоём в Minecraft с модами сложнее, чем кажется: нужны одинаковые версии, загрузчик, моды и конфиги, а потом ещё Hamachi или аренда сервера. Я написал лаунчер на Rust и Tauri, где всё это заменяет одна ссылка. Расскажу, как устроены P2P-комнаты на iroh (QUIC), туннель игрового трафика, передача сборки в формате .mrpack и голосовой чат на Opus с RNNoise. А ещё про то, как я делал проект вместе с Claude Code

Читать далее

Arch Linux на Xiaomi 12T Pro: стоковое ядро Android, vendor‑модули и девять граблей загрузки

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

На моём Xiaomi 12T Pro загружается Arch Linux. Это не Termux и не chroot, а полноценная система: штатное ядро телефона, systemd, Wayland. Android остаётся рядом, при включении выбор делается кнопкой громкости. Ниже: как это устроено, что работает и на какие грабли я наступил по дороге. Большинство из них не привязаны к модели и встретятся на любом Qualcomm‑телефоне с GKI.

Читать далее

Rust круче C++? Часть 1: скорость

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

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

Спор «Rust или C++» идёт с 2015 года, с выхода Rust 1.0, и за одиннадцать лет превратился в отдельный жанр со своими приколами. «В Rust на каждом индексе проверка, вот он и тормозит». «В плюсах проверок нет, значит, быстрее». «Ага, а у Rust ссылки не пересекаются, так что быстрее как раз он». «Паника дорогая», «исключения дорогие», «абстракции бесплатные». Каждая сторона уверена в своём, а в ассемблер почти никто не смотрит, хотя ответ лежит прямо там (и местами он неприятный для обеих сторон).

В одну статью вопрос «круче ли Rust, чем C++» не влез, так что это первая часть, и она про скорость. Безопасность и прочие поводы поругаться ждут своей очереди.

Читать далее

UI-фреймворк для людей и AI-агентов: Rust, C, C++, ASM, 6 платформ, 900 КБ

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

Хочу представить лёгкий UI-фреймворк на Rust, работает на Windows (x64, ARM), macOS, Linux, Android, iOS/iPadOS и даже в браузере через WASM. Снабжён примерами использования на Rust, C, C++ и даже ASM.

Отличительная особенность: фреймворк имеет два формата – либо отображает графический UI для людей, либо же рендерит UI в JSON так, чтобы с ним могли взаимодействовать AI-агенты без снятия скриншотов. Эта же фишка позволила добавить возможность перебросить UI по SSH.

Читать далее

Бесплатное ПО, пять лет разработки и немного наглости. Как я пытаюсь попасть в реестр российского ПО

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

Привет, Хабр! Я Артур Валиев. Разработчик, предприниматель из небольшого села в Ставропольском крае и человек, который однажды решил, что написать собственный удалённый рабочий стол — хорошая идея.

Спойлер: идея оказалась хорошей. А вот количество работы я немного недооценил. Примерно на пять лет.

Но начать хочу совсем с другого.

Читать далее

Как я устал от VPN‑клиентов на 300 МБ ОЗУ и написал (claude) свой TUN‑клиент на чистом Rust (Unbihex)

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

Всем привет! Последние пару лет экосистема обхода блокировок развивалась по принципу «больше фич — жирнее обертка». Большинство популярных десктопных и мобильных клиентов сегодня — это либо тяжелые комбайны на Electron/Flutter, либо графические обертки над ядром Xray или sing‑box через gomobile и C‑FFI, которые тянут за собой рантайм Go, сборщик мусора и жрут от 200 до 400 МБ оперативки просто в фоне.

Когда у тебя слабый ноутбук, офисная машина или телефон, на котором открыта пара тяжелых приложений, лишние 300 МБ под один только VPN начинают ощутимо бить по системе. А если речь идет об iOS, где системный лимит на сетевые расширения (PacketTunnelProvider) составляет жесткие 50 МБ, такие клиенты регулярно падают по OOM (Out Of Memory) при попытке загрузить крупные гео‑базы.

В один прекрасный день мне это надоело. Я решил взять всё в свои руки и написал с нуля собственный кроссплатформенный TUN‑клиент и сетевое ядро на чистом Rust без единой сторонней прослойки. Встречайте — Unbihex (названный в честь гипотетического 126-го элемента унбигексия). Сейчас он потребляет 18 МБ ОЗУ в режиме TUN (и 12 МБ в прокси), поддерживает полный стек современных протоколов и уже готов к продакшену.

Под катом — как это устроено под капотом, какие грабли пришлось собрать при работе с TUN под Windows и как удалось подружить ядро с популярными панелями.

Читать далее

Пишем свою мобильную ОС с нуля на Rust. Часть 4: GUI, SQLite и DOOM

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

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

Дальше началась системная работа, о которой я писал в предыдущей части. Теперь ОС наращивает userspace-слой. На экран вернулась картинка — уже с окнами, кнопками и приложениями для телефона, Raspberry Pi и QEMU. На телефоне заработал и тачскрин.

Эта часть будет обзорной: посмотрим, как теперь устроены связи между программами, файловая система и поддержка C и C++, запустим SQLite и DOOM. А в конце напишем своё GUI-приложение — калькулятор. В третьей части он выводил результат в UART. В этой сделаем калькулятор с окном и кнопками.

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