LINUX.ORG.RU

История изменений

Исправление vbr, (текущая версия) :

И как бы решение этой задачи схематически выглядело на Rust?

Сформулирую более понятно, как это работает. Есть ringbuffer, куда добавляются и берутся куски по 32 байта. На эти куски нужно получать указатель в середину (на 5-й байт) и передавать этот указатель в SPI-периферал, куда он будет писать данные. Потом нужно записать в 4-й байт uint32. И потом всё закоммитить и в обратном порядке в другом месте читать и парсить.

Подозреваю, что на Rust я бы сразу и упёрся в реализацию ringbuffer без копирования буферов. На C у него есть 4 операции - alloc + put и get + free, причём все операции разные, к примеру я сначала делаю alloc, потом запускаю SPI, потом в обработчике прерывания делаю put. При парсинге я делаю get, делаю парсинг данных, потом делаю free. Думаю, что раст меня сведёт с ума ещё на этапе alloc + put, разнесённых между несвязанными кусками программы. Там же всё владение идёт лесом. Быстро проглядел 5 реализаций рингбуферов на расте из гугла, нигде ничего подобного нет.

Исправление vbr, :

И как бы решение этой задачи схематически выглядело на Rust?

Сформулирую более понятно, как это работает. Есть ringbuffer, куда добавляются и берутся куски по 32 байта. На эти куски нужно получать указатель в середину (на 5-й байт) и передавать этот указатель в SPI-периферал, куда он будет писать данные. Потом нужно записать в 4-й байт uint32. И потом всё закоммитить и в обратном порядке в другом месте читать и парсить.

Подозреваю, что на Rust я бы сразу и упёрся в реализацию ringbuffer без копирования буферов. На C у него есть 4 операции - alloc + put и get + free, причём все операции разные, к примеру я сначала делаю alloc, потом запускаю SPI, потом в обработчике прерывания делаю put. При парсинге я делаю get, делаю парсинг данных, потом делаю free. Думаю, что раст меня сведёт с ума ещё на этапе alloc + put, разнесённых между несвязанными кусками программы. Там же всё владение идёт лесом. К примеру посмотрел растовый ringbuffer из гугла, там нет такого разделения.

Исправление vbr, :

И как бы решение этой задачи схематически выглядело на Rust?

Сформулирую более понятно, как это работает. Есть ringbuffer, куда добавляются и берутся куски по 32 байта. На эти куски нужно получать указатель в середину (на 5-й байт) и передавать этот указатель в SPI-периферал, куда он будет писать данные. Потом нужно записать в 4-й байт uint32. И потом всё закоммитить и в обратном порядке в другом месте читать и парсить.

Подозреваю, что на Rust я бы сразу и упёрся в реализацию ringbuffer без копирования буферов. На C у него есть 4 операции - alloc + put и get + free, причём все операции разные, к примеру я сначала делаю alloc, потом запускаю SPI, потом в обработчике прерывания делаю put. При парсинге я делаю get, делаю парсинг данных, потом делаю free. Думаю, что раст меня сведёт с ума ещё на этапе alloc + put, разнесённых между несвязанными кусками программы. Там же всё владение идёт лесом. К примеру посмотрел растовый ringbuffer из гугла, вообще не то.

Исправление vbr, :

И как бы решение этой задачи схематически выглядело на Rust?

Сформулирую более понятно, как это работает. Есть ringbuffer, куда добавляются и берутся куски по 32 байта. На эти куски нужно получать указатель в середину (на 5-й байт) и передавать этот указатель в SPI-периферал, куда он будет писать данные. Потом нужно записать в 4-й байт uint32. И потом всё закоммитить и в обратном порядке в другом месте читать и парсить.

Подозреваю, что на Rust я бы сразу и упёрся в реализацию ringbuffer без копирования буферов. На C у него есть 4 операции - alloc + put и get + free, причём все операции разные, к примеру я сначала делаю alloc, потом запускаю SPI, потом в обработчике прерывания делаю put. При парсинге я делаю get, делаю парсинг данных, потом делаю free. Думаю, что раст меня сведёт с ума ещё на этапе alloc + put, разнесённых между несвязанными кусками программы. Там же всё владение идёт лесом.

Исходная версия vbr, :

И как бы решение этой задачи схематически выглядело на Rust?

Сформулирую более понятно, как это работает. Есть ringbuffer, куда добавляются и берутся куски по 32 байта. На эти куски нужно получать указатель в середину (на 5-й байт) и передавать этот указатель в SPI-периферал, куда он будет писать данные. Потом нужно записать в 4-й байт uint32. И потом всё закоммитить и в обратном порядке в другом месте читать и парсить.

Подозреваю, что на Rust я бы сразу и упёрся в реализацию ringbuffer без копирования буферов. На C у него есть 4 операции - alloc + put и get + free, причём все операции разные, к примеру я сначала делаю alloc, потом запускаю SPI, потом делаю put. При парсинге я делаю get, делаю парсинг данны, потом делаю free. Думаю, что раст меня сведёт с ума ещё на этапе alloc + put, разнесённых между несвязанными кусками программы. Там же всё владение идёт лесом.