Обновить
128K+

Rust *

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

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

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

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

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

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

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

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

Читать далее

Новости

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

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

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

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

Читать далее

Плагины в Picodata

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

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

Читать далее

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

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

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

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

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

Читать далее

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

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

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

Читать далее

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

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

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

Откройте почти любую статью про 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 мин
Охват и читатели5.9K

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

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

Читать далее

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

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

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

Читать далее

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

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

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

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

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

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

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

Читать далее

Rust 1.98.0: алгебраические методы для f32,f64, исправление взаимодействия между ManuallyDrop и Box

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

Команда Rust рада объявить о выходе новой версии Rust — 1.98.0. Rust — это язык программирования, который помогает каждому создавать надёжное и эффективное программное обеспечение.

Если у вас уже установлена предыдущая версия Rust через rustup, вы можете получить 1.98.0 командой:

$ rustup update stable

Если Rust ещё не установлен, вы можете получить rustup на соответствующей странице нашего сайта и ознакомиться с подробными release notes для 1.98.0.

Если вы хотите помочь нам, тестируя будущие релизы, рассмотрите возможность переключиться локально на beta-канал (rustup default beta) или nightly-канал (rustup default nightly). Пожалуйста, сообщайте о любых обнаруженных ошибках!

Читать далее

Sentry пора на покой… Metric готов принять пост

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

Self-hosted Sentry — это 65 контейнеров, 16-32 ГБ RAM и выделенный инженер на поддержку. Всё ради того, чтобы ловить стектрейсы. Разбираемся, почему индустрия приняла это как норму, сравниваем альтернативы (GlitchTip, BugSink, Hawk) и знакомимся с Metric — Sentry-совместимым мониторингом на, которому хватает 1 ГБ RAM и двух контейнеров. Миграция — смена одной строки DSN.

Читать далее

После сборки на Tauri затрещал голос и почернел стрим: разбираем три ошибки одного теста

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

После сборки на Tauri голос начал трещать, автокалибровка почти минуту вмешивалась в разговор, а демонстрация экрана через минуту становилась чёрной. Разбираем запись и логи, находим усиление до ×4 без лимитера, резкие разрывы 20-мс аудиопакетов и зависший видеотрек при живом соединении LiveKit — и показываем, как исправили каждый сбой в версии 0.0.26.

Разобраться в причинах

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

Своя Linux-based ОС на Rust и QML: опыт создания Platinum OS One

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

Полгода назад я решил не кастомизировать очередной Armbian под конкретную плату, а собрать полноценную ОС: свой build-движок уровня Cargo, свою оболочку на QML поверх вложенного Wayland-композитора — и универсальность как главную ставку: одна система для одноплатников, планшетов и ПК. Первая плата — Orange Pi Zero 3W.

В статье — архитектура, где различия между устройствами живут в данных, а не в коде движка; реальный прогон сборки образа с точными цифрами по каждой из 14 стадий; и то, что обычно не показывают в анонсах — три production-краша с разобранными причинами (SIGSEGV в движке QML, AppArmor против snap-песочницы, macOS tar, портящий Wayland-модуль) и три находки первой живой загрузки на настоящем железе.

Читать далее

Пишем свой PHP-экстеншен на Rust

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

Когда речь заходит о разработке PHP-расширений, многие сразу представляют C, Zend API и сложную систему сборки. Но сегодня есть более удобный путь. С помощью ext-php-rs можно создавать расширения на Rust, используя привычные инструменты Cargo и практически не сталкиваясь с низкоуровневыми деталями.

В этой статье мы с нуля напишем собственный PHP-экстеншен, подключим его к PHP, разберём, как ext-php-rs связывает Rust с Zend API, а затем посмотрим, в каких задачах такой подход действительно даёт прирост производительности, а где этого ждать не стоит.

Читать далее

Агент написал себе навык и соврал, что тот работает

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

Я делаю агента, который умеет дописывать себе навыки: упёрся в то, чего не умеет — сгенерировал код, собрал, установил, пользуется.

Первый раз это сработало ровно так, как я мечтал. Агент сказал «у меня нет такого навыка», спросил разрешения, минуту пыхтел компилятором и отчитался: готово.

Метода не было. То есть он был — в манифесте, в списке, который скилл про себя рассказывает. А в коде, который этот вызов должен обрабатывать, его не было. Модель объявила метод, забыла реализовать и об этом не узнала. Валидация прошла. Установка прошла.

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

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

Как я его поймал

2,2 МБ против 128 МБ: честный бенчмарк Win32 и Tauri на живом голосовом клиенте

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

После статьи о выборе Tauri нас спросили, сколько памяти будет занимать программа, которая живёт в трее рядом с игрой. Мы запустили старый БОЛТУН на Win32 и новый на Tauri в одинаковом пустом лобби. Получилось 2,2 МБ против 128 МБ. Разбираемся, откуда взялись девять процессов WebView2, что показал замер и почему это не стало автоматическим отказом от нового интерфейса.

Читать бенчмарк

AI‑ассистент в десктопном EDA: tool‑calling, детерминированный роутер и локальный RAG на BGE‑M3

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

Инструмент работает с топологией: GDSII/OASIS и LEF/DEF, верификация DRC/LVS/PEX (зазоры, сверка со схемой, паразиты), список нарушений. Типичный вопрос инженера: «почему LVS ругается на этот инвертор» или «покажи spacing на met2».

Три условия, без которых чат в таком продукте вреден.

Полностью офлайн по умолчанию. Layout это IP заказчика. Кусок дизайна в облако не уезжает, пока человек сам не выбрал облачный бэкенд. Часть установок air-gapped(изолировано).

Нельзя молча испортить данные. Правка геометрии идёт через preview: Apply или Discard. Delete и крупные батчи помечаются жёстче.

Нельзя выдумывать. Числа по нарушениям и правилам берутся из движков и локальной документации. Общая эрудиция модели сюда не допускается.

Читать далее

Один рендер‑стек, два мира: как мы показали layout микросхем в браузере через WebGPU

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

Тот же Rust‑код, что рисует топологию на десктопе, собирается в wasm и рисует в <canvas> через WebGPU. Сайт при этом не знает про GPU: кликнул на нарушение в списке, камера уехала на место, маркер показал дефект. Ниже как это устроено, где «просто пересобрали» было бы враньём, и какие ловушки сидят не в Rust, а в вебе.

Задача

У нас десктопный инструмент для топологии интегральных схем, layout в формате GDSII (и OASIS). Файл описывает геометрию кристалла: иерархия ячеек, на листьях прямоугольники и полигоны по слоям (металл, поликремний, диффузия). Координаты целые, в DBU, единицах базы данных; в микрометры переводим уже при развороте сцены. Реальный проект: сотни мегабайт на диске, миллионы фигур после разворачивания иерархии.

Рядом выросла веб‑платформа с результатами анализа этих дизайнов. Захотелось показать сам layout в браузере, в том же UI: клик по нарушению в списке открывает его место на топологии. В десктопных пакетах это называют RVE, results viewing environment. Нам нужна была такая навигация без второго рендер‑движка.

Что отсекли сразу

Серверный рендер в тайлы. Каждый зум это запрос. Интерактивность мёртвая, плюс сервер рисует чужие данные.

Canvas2D или SVG на JS. На миллионах прямоугольников не работает. И это был бы второй движок.

Отдельный JS/TS‑парсер и рендер. Формат один, интерпретации через полгода две. Для GDS это особенно опасно: иерархия, зеркала, массивы ссылок.

Остался вариант, который мы и сделали: тот же Rust, цель wasm32-unknown-unknown, картинка в <canvas> через WebGPU.

Читать далее

Ускоряем drop in replace Next.js в 100 раз. Часть 2

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

В первой части мы разобрали архитектуру Rari, почему Rust под V8 даёт выигрыш, и посмотрели на бенчмарки. В данной статье хочется поговорить о том, что обычно остаётся за кадром демо: как это работает в продакшене, что конкретно поменялось под капотом, где ломается совместимость с Next.js, как мы портировали их SWC-плагины, и как производительность выросла с 4x до 67x.

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