LINUX.ORG.RU

«Ржавая» IP-камера: прошивка на Rust

 , , ,


2

9

Всем привет.

Мы в Эрливидео решили сделать эксперимент и написать прошивку камеры на Rust. В принципе проект своей прошивки у меня в полудохлом состоянии уже года три как, но его не развивали.

Тут я восхитился идеями раста и решил сделать эксперимент, написав стример на расте.

Детали есть в посте на хабре: https://habrahabr.ru/company/erlyvideo/blog/334912/ тут продублирую суть.

Вокруг сишного SDK с помощью bindgen нагенерен код на Rust, который в unsafe настраивает железо, потом получает оттуда видео кадры. Дальше начинается нормальный Rust, который полученное видео упаковывает в транспортный контейнер и рассылает клиентам через tokio.

Результаты пока радуют: ни единого сегфолта и софт не виснет на 3 подключенных клиентах.

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

Ответ на: комментарий от DarkEld3r

Ситуацию когда ищутся только опытные плюсовики, которые со временем «заканчиваются» я прочувствовал, как и то сколько времени и внимания требуют новички.

Опытных растеров пока вовсе нет. Даже те что в мозиле сидят это щеглы-саперы, первооткрыватели граблей. Лет через 15 посмотрим что будет, вот только хипсторам быстро надоедают игрушки, так что я скорее дождусь лулзов от нового убивца сишки годика через 3.

bread ()
Ответ на: комментарий от bread

Вы, видимо, запамятовали с чего разговор начался. С того, что, как говорят старожилы, где-то высоко в горах водятся опытные плюсовики, которые никогда не стреляют себе в ногу, и если в команду набрать только таких, то проблем, скорее всего, удастся избежать. И с того, что на Расте для аналогичного выстрела надо сильно постараться, поэтому если даже сам новичок не догадается, что ходит по краю, его коллеги вряд ли не заметят. К чему тут вообще вопрос о количестве опытных растоманов - совершенно непонятно.

khrundel ()
Ответ на: комментарий от khrundel

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

bread ()
Ответ на: комментарий от bread

Даже если так, найти одного опытного растомана, который объяснит что этому уроду-компилятору не нравится - это одно, а найти всю команду опытных плюсовиков, осознающих, что можно делать, а чего нельзя - это другое. К тому же не так уж нужен растовый гуру в обычном проекте. Что в расте неочевидное? Unsafe, макросы, грамотное generic-программирование и проектирование API. Т.е. без гуру код будет не очень эффективным, раздутым и не таким удобным. Обидно, но не смертельно.

khrundel ()
Ответ на: комментарий от khrundel

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

А как на деле, так сишный код без валгринда вообще нельзя в люди выпускать.

max_lapshin ★★ ()
Ответ на: комментарий от max_lapshin

дайте определение «бага», как по мне - это сбой того что запущенно в продакшине
так вот до продакшина, есть много других промежуточных звеньев, в которых нормальный не криворукий си/с++ программер вычищает эти моменты
более опытный программер все эти «баги» выловит эксепшинами, не давая упасть и не нарушив работы

anonymous ()
Ответ на: комментарий от anonymous

В теории - возможно. На практике - плазма как падала, так и падает (на самом деле нет).

Статистику не обманешь. 95% C/C++ разрабов только думает, что знает, что они делают. У половины оставшихся ещё и безразмерная корона, из-за чего подпускать их к коду тоже нельзя.

RazrFalcon ★★★ ()
Ответ на: комментарий от RazrFalcon

а причем здесь плазма ? идите к программерам плазмы и рассказывайте им что они криворукие фрилансеры, плазма же опенсорс ?
на си/с++ можно писать качественный, элегантный, быстрый,компактный код
но вам до этого далеко,вы со стороны выглядите этаким спецом во всем особенно в болтологии и лезете в каждую тему,
сходили бы поправили свои знания и стали спецом в чем то конкретно(технология,язык) а не во всем почуть чуть и ни в чем конкретно

anonymous ()
Ответ на: комментарий от anonymous

на си/с++ можно писать качественный, элегантный, быстрый,компактный код

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

кто не умеет - неосилятор!

yyk ★★★★★ ()
Ответ на: комментарий от yyk

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

anonymous ()
Ответ на: комментарий от anonymous

треид об высокоуровневых языках

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

yyk ★★★★★ ()
Ответ на: комментарий от bread

Опытных растеров пока вовсе нет.

Дык, именно «опытные растеры» и не нужны. В том плане, что если человек достаточный опыт с плюсами имеет, то этого, в большинстве случаев, хватит.

Свои нюансы в языке, конечно, есть, но по большинству вещей уже есть лучшие практики.

DarkEld3r ★★★★★ ()
Ответ на: комментарий от bread

Наоборот они заломят за маргинальщину.

Справедливости ради, найдётся некоторое количество «энтузиастов» готовых работать за меньшие деньги, но с интересными им вещами. Насколько осмысленно на таких ориентироваться - другой вопрос.

DarkEld3r ★★★★★ ()
Ответ на: комментарий от RazrFalcon

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

anonymous ()
Ответ на: комментарий от max_lapshin

ПИШЕШЬ ТАКОЙ ПРОШИВКУ ДЛЯ МИКРОКОНТРОЛЛЕРА

@

ИСПОЛЬЗУЕШЬ АВТОМАТНЫЙ СТИЛЬ ПРОГРАММИРОВАНИЯ

@

ВЫДЕЛЯЕШЬ ПЕРЕМЕННЫЕ СТАТИЧЕСКИ ИЛИ НА СТЕКЕ

@

А как на деле, так сишный код без валгринда вообще нельзя в люди выпускать.

shkolnick-kun ★★ ()

Дабы не плодить тем. Объясните, пожалуйста, как воспринимать сию конструкцию?

fn returns_closure() -> Box<Fn(i32) -> i32> {
    Box::new(|x| x + 1)
}
Box::new(|x| x+1) - кложура (код) создается в куче?

makoven ★★★★ ()
Ответ на: комментарий от O02eg

Это я понял. Непонятно, как в памяти лежит Box::new(|x| x+1). Во время компиляции создается функция с ничего не значащим именем, а это - ссылка на нее? Или таки в куче (не знаю, возможно ли такое вообще)

makoven ★★★★ ()
Последнее исправление: makoven (всего исправлений: 5)
Ответ на: комментарий от makoven

Box::new(...) возвращает указатель на структуру в куче, состоящую из двух полей:

1. Указатель на таблицу указателей на функции трейта Fn(i32)->i32, единственный элемент которой указывает на код, выполняющий безымянную функцию x+1

2. Структура, содержащая захваченные данные замыкания. В данном случае захваченных данных нет, поэтому эта структура нулевого размера.

red75prim ()
Последнее исправление: red75prim (всего исправлений: 1)
Ответ на: комментарий от red75prim

1. Указатель на таблицу указателей на функции трейта Fn(i32)->i32, единственный элемент которой указывает на код, выполняющий безымянную функцию x+1

А деструктор для данных замыкания не используется?

O02eg ★★★★★ ()
Ответ на: комментарий от O02eg

Я там ошибся, первый пункт нужно читать как

1. Указатель на код, выполняющий безымянную функцию x+1

Деструктор (Drop), естественно, используется. Но информация о том, какой деструктор вызывать, содержится в типе значения, возвращаемого Box::new(...), поэтому указатель на него хранить не надо.

Тьфу. Я писал про Box<[closure]>, а не про Box<Fn(i32)->i32>.

red75prim ()
Последнее исправление: red75prim (всего исправлений: 3)