The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



"Код поддержки кодека VP9 в V4L2 для чипов Hantro и Rockchip переписан на Rust"
Версия для распечатки Пред. тема | След. тема
Форум Разговоры, обсуждение новостей
Исходное сообщение [ Отслеживать ]
Подсказка: Для слежения за появлением новых сообщений в нити, нажмите "Проследить за развитием треда".
. "Код поддержки кодека VP9 в V4L2 для чипов Hantro и Rockchip ..." +1 +/
Сообщение от Аноним (-), 28-Фев-24, 17:33 
> А что-нибудь новое на расте пишут или только переписывают уже работающее?

Zed зарелизили намедни. Но пока только для iOS.

> Раст умеет в ядре экспортировать свой API или только через сишные обёртки и соответственно через обмазывание unsafe?

#[repr(C)] функции имеют C'шный ABI, их можно вызывать из C кода непосредственно.

Но, скорее всего, эти #[repr(C)] функции будут обёртками, чьей задачей будет решить в чём доверять C'шному коду, а в чём нет, посредством приведения типов.

Например, если в функцию передаются указатели, то они будут raw указателями, и rustc не может ничего гарантировать относительно них. Тебе придётся принять решение за rustc и сказать, что валидности этого указателя можно верить, и при помощи unsafe преобразовать его к &-указателю.

Плюс могут быть другие нюансы типа impedance mismatch. Например, rust'овые строки гарантированно валидный utf8, все строковые функции полагаются на это, и могут сегфолтнуть на невалидном utf8. То есть если ты хочешь работать со строкой полученной от C-кода как с &str, тебе придётся проверять на валидность utf8 или просто поверить в валидность и принять без проверки. Ещё с длиной придётся выкручиваться, считать её перед кастом. В ядре, я подозреваю, они используют не &str, а &CStr или что-нибудь своё доморощенное в этом стиле. Но даже в случае доморощенного типа-обёртки придётся принимать решение -- считать ли длину строки перед приведением типа, или работать со строкой в C'шном стиле, не зная её размера.

В общем, на стыке C и Rust придётся какие-то танцы с бубном выполнять, и там неизбежно полезут unsafe'ы, потому что rustc не может ничего предполагать о поведении C'шного кода. И вероятно придётся создавать обёртки, которые будут заниматься исключительно этим -- приведением типов, где-то выполняя дополнительные рантайм проверки, где-то просто волевым решением заявляя расту "этот указатель считать валидным".

Ответить | Правка | Наверх | Cообщить модератору

Оглавление
Код поддержки кодека VP9 в V4L2 для чипов Hantro и Rockchip переписан на Rust, opennews, 28-Фев-24, 12:48  [смотреть все]
Форумы | Темы | Пред. тема | След. тема



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру