Вход на сайт

Просмотр новости

Найдите то, что Вас интересует

My state lib PurrGress

Дата публикации: 13-08-2026 19:32:23


English
I'd like to share my Rust library purrgress and its major v0.5.0 release.
The library was built to completely eliminate dynamic dispatch (dyn / Box) and heap-hopping inside performance-critical loops. Instead of traditional nested state machines, it uses a Data-Oriented Design (DOD) architecture with flat, linear "trains":
Graph Baking: You define states and dependency graphs upfront via PurrDesign and bake them into PurrRoute. Heavy recursive lookups and cyclic checks run strictly once at compile/init time, turning runtime route preparation into O(1) memory copies.
Isolated Assembly (PurrSiding): A dedicated buffer where you can assemble sequences, look up specific carriages without .find(), and rewrite timers or flags before pushing them to the main line.
Cursor-Based Execution (PurrTrain): The engine advances via a pointer shift over contiguous memory. Completed stages stay in place, making step transitions cost 0 nanoseconds.
What's new in v0.5.0:
Async Dispatcher & Actor Engine (PurrDispatcher): A central async command runner built on Tokio. It processes queue operations step-by-step (dispatch()) in an isolated task without mutexes or Arc locks.
Client Infrastructure (PurrLink & PurrStation): PurrLink acts as a lightweight factory to spawn independent tx channels from any thread, while PurrStation encapsulates request-reply mechanics and siding-to-byte serialization for worker threads.
Hybrid L1 / Map Router: Channels are stored in a fast 16-element stack array (aligned with CPU cache lines) and automatically scale into a dynamic map when load increases, protected by hysteresis against memory thrashing.
Zero-Allocation Byte Pipeline: Integrated with rkyv and bytes. You can send baked sidings across channels and modify live trains (attach_bytes, replace_bytes, reroute_at_bytes) with lazy deserialization happening directly during memory splicing — zero intermediate heap allocations.
Contextual Events: advance_train() now returns PurrTrainEvent<T, U>, providing full RouteBox payloads (carriage + completed rule context) to tell you not just what changed, but why.
The library is completely modular (all features disabled by default, including optional Bevy ECS and frame animator support) and fits both frame-budget game loops and high-throughput async backends.
Русский
Хочу поделиться своей библиотекой purrgress и её крупным обновлением v0.5.0.
Изначально проект создавался с целью полностью уйти от динамической диспетчеризации (dyn / Box) и постоянных аллокаций в куче внутри горячего цикла. Вместо классических вложенных стейт-машин здесь используется Data-Oriented подход на плоских линейных «поездах»:
Запекание графов: Граф зависимостей описывается на старте через PurrDesign и запекается в PurrRoute. Все тяжелые проверки связей и циклических зависимостей отрабатывают один раз, а инициализация в рантайме превращается в быстрое O(1) копирование готового маршрута.
Запасные пути (PurrSiding): Изолированный буфер, где можно собрать цепочку, точечно поменять нужным вагонам таймеры или флаги без медленного .find(), и только потом выкатить на основной путь.
Курсорная очередь (PurrTrain): Движение поезда идет через сдвиг указателя по вектору. Пройденные стадии не сдвигают массив, поэтому переход на следующий шаг занимает ровно 0 наносекунд.
Что появилось в версии 0.5.0:
Асинхронный диспетчер (PurrDispatcher): Центральный акторный обработчик на базе Tokio. Он крутит логику поезда пошагово (dispatch()) в отдельной таске без мьютексов и блокировок (Arc).
Клиентские подключения (PurrLink и PurrStation): PurrLink позволяет из любого потока мгновенно получать новые tx-линии через легкую фабрику, а PurrStation оборачивает отправку команд, чтение персональных ответов и запекание состава в байты.
Гибридный маршрутизатор: Двухуровневое хранилище каналов — быстрый массив на 16 элементов на стеке под размер кэш-линий L1 плюс динамическая мапа с защитой от скачков нагрузки (гистерезис).
Zero-Allocation пайплайн на байтах: Связка rkyv + bytes позволяет модифицировать поезд на лету (attach_bytes, replace_bytes, reroute_at_bytes). Десериализация происходит лениво прямо во время splice(), без промежуточных векторов в куче.
Контекстные события: Метод advance_train() теперь возвращает PurrTrainEvent<T, U> с полным RouteBox (вагон + контекст сработавшего правила), сообщая не только факт перехода, но и его причину.
Все фичи по умолчанию выключены (включая модуль аниматора и интеграцию с Bevy ECS), поэтому библиотека одинаково хорошо подходит как для жесткого тайминга игрового кадра, так и для асинхронных распределенных сервисов.
GitHub: GitHub - Honami333/Purrgress: An ultra-fast, ergonomic DOD stage manager and async sequencer combining zero-cost performance with total runtime dynamism. · GitHub
Crates.io: crates.io: Rust Package Registry
Telegram Channel: Telegram: View @cat_garden_news
1 post - 1 participant
Read full topic

Схожие новости

#Наименование новостиТональностьИнформативностьДата публикации
1[Show] taetype: Pure Rust font engine with zero unsafe code010.1927-07-2026
2Multicalc: Scientific computing for real-time embedded systems in no_std Rust014.3610-08-2026
3Cargo-Rail v0.20: one workspace engine instead of dependency, CI, cache, release, and split-repo glue/plugins010.430-07-2026
4Dllb — the NoSQL DBMS Designed for AST Manipulation014.4730-07-2026
5Qhull_rayon v0.1.0010.411-08-2026
6Multicalc: Scientific computing for real time embedded systems in no_std rust09.428-07-2026
7Sigid: a zero-dependency, no_std, three-layer unique ID generator014.6911-08-2026
8Tokcost — zero-dependency CLI for exact LLM token counts (hand-rolled BPE)012.7402-08-2026
9FUI-RS: retained Rust UI for WebAssembly and native desktop without a WebView011.5430-07-2026
10Elura: an authoritative realtime game server framework written in Rust07.6428-07-2026

Классификация: . Схожих патентов: 0. Схожих новостей: 10. Тональность: 0. Информативность: 12.62. Источник: users.rust-lang.org.