LINUX.ORG.RU

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

 , , ,


2

9

Всем привет.

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

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

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

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

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

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

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

Нет ничего глупее чем из под анонимуса пытаться трясти седыми му**ми. Раст сейчас находится примерно на том же уровне развития, как C++ в начале-середине 90х. Тогда тоже куча школоло с горящими глазами хвалила кресты, обещала похоронить C, мудрые аксакалы говорили что не нужен. 10 лет и всё, C++ в мейнстриме.

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

Спасибо. Но боюсь упомянутой премии более достойны погромисты на расте за доширакнихренак. Так молодость и пройдет за красноглазием с недоязычками и линупсами :(

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

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

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

5 убивцев си/си++ за последние 10 лет

5 не 5, но давай вспомним D. Да и go первоначально задумывался как убивец. Если еще поглубже, то сисярп. Там целая мегакорпа нешмогла, так то.

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

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

Не знаю на какой планете вы живёте, я живу на той, где, прости Господи, javascript если ещё не первый по распространённости, то уже и не второй. Говорить в подобных условиях о том, что большинство крестовиков принципиально не перейдут на Раст как-то наивно. Перейдут, и будут судьбу благодарить, что не на js или руби.

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

Фанбоев этим конечно не проймешь. У них каждый раз: ну сейчас то точно прорвемся! Смотри какой у нас толстый ... (в этом месте список уникальных мегакулфич). Все бабы наши! А потом фанбой заканчивает школу и понуро идеть писать на похапе.

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

javascript если ещё не первый по распространённости, то уже и не второй.

Ну дык, это намекает на востребованность низкоуровневых язычков. А раст - сложный низкоуровневый язычок без библиотек. Ну что тут еще добавить. В морг.

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

ООП уныла везде. Именно поэтому её в Расте и исправили. Про C с костылями даже не смешно, это точно не Раст. Про неявное компилером... в Расте неявно компилером лепится только drop. В отличие от. Короче, ты реально утомил, это ж надо додуматься, ругать раст за те фичи, которые в крестах выражены в разы сильнее.

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

Так никто и не ответил, зачем въезжать в раст? Пусть хоть это займет минуту. Но зачем? Что с нмм делать дальше? Пугать препода нескучным решением лабы, размахивать хеловордами на лоре. Еще идеи?

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

Нет, это намекает на то, что программировать будут на любом г**не, на котором скажут. Js - это не лучший скриптовый язык (про высокоуровневость и говорить нечего), но на нём пишут больше чем на C/C++. Библиотек на расте действительно не хватает, но не хватает каких библиотек? Кривых биндингов предостаточно, но этот уровень кривых биндингов - это как раз тот тип «библиотек» которые доступны всяким пистонам и js'ам, на которых типа с библиотеками всё хорошо.

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

Мне нра концепт языка тащем. Компилируемый, с рантаймом сопоставимым с сишечкой, но при этом позволяющим отловить кучу проблем в compile time, а не чиать портянку логов в поисках причин SIGSEGV.

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

Сказали «ненужно» - не исправили.

Да вот как раз исправили, убрали родовые травмы в виде наследования реализации, оставили непрямой вызов через интерфейсы, причём чётко отделили указатель для непрямого вызова от указателя массива.

При этом GUI так до сих пор на расте делать непонятно как.

А вот на C++ гуи как, сильно хорошо? GTK, который и из раста есть, либо QT, который тоже далеко не фонтан. Программисты на всяких андроидах и WPF/Silverlight/Metro/etc клепают формочки с датабиндингом прямо из форм и смеются.

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

Да вот как раз исправили, убрали родовые травмы в виде наследования реализации, оставили непрямой вызов через интерфейсы, причём чётко отделили указатель для непрямого вызова от указателя массива.

отказ от наследования реализации сомнительная вещь оказалась, потому что не просто так со скрипом втащили Derive и в итоге сделали наследование реализаций на макросах.

А вот на C++ гуи как, сильно хорошо?

Нормально тащем. Лучше чем на си.

GTK, который и из раста есть,

Который суть объектный API но без ништяков.

либо QT, который тоже далеко не фонтан.

Лучше чем Qt для GUI по моему опыту себя показал только HTML5.

Программисты на всяких андроидах и WPF/Silverlight/Metro/etc клепают формочки с датабиндингом прямо из форм и смеются.

Всё правильно делают. Потому что gui вообще не нужно писать на языке программирования, для этого языки разметки есть. Когда раст или любой другой ЯП сможет это же на онтопике, причём кроссплатформенно - нынешние тулкиты можно будет закапывать за ненужностью.

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

GTK, который и из раста есть

Это тот, который «лучше бы и не начинали»? Мухаха, чтоб вы делали без сишки? Совсем бы в глубоком андеграунде сидели. А так можно оборачивать сишные либы и гордится количеством пакетов и безопасностью (лол!).

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

Derive в Rust - это одна из многих фич, перенесенных из Haskell, к слову, как и сама концепция trait (они же, очень упрощенные классы типов).

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

со скрипом втащили Derive

При чём тут Derive и ООП?

Лучше чем Qt для GUI по моему опыту себя показал только HTML5.

Язык разметки текста лучше для GUI?!

Потому что gui вообще не нужно писать на языке программирования, для этого языки разметки есть.

Нету. Для этого придумали QML и активно его продвигают. HTML без JS ничего не умеет, поэтому ЯП для разметки нужен.

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

так себе попытка, ООП сделано через одно место, и те кто любят плюсы за ООП, попробовав раст, сказали это Г., а так в целом некоторые интересные моменты в расте по сравнению с си и с++ и явой - есть, многие это подметили, но это не те моменты ради которых все бросят и побегут кодить на расте.

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

Собственно за то и выбрал. Есть ощущение что он сможет здорово помочь. А что либ мало, так мне кроме soap ничего и не надо, а на сях есть только монструозный gsoap, который мало того что стоит под 10 килобаксов, так еще и бинарник раздувает на несколько мегабайт

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

Надо спрашивать плюсовиков, чего не хватает :). Но копий было сломано много, и вроде как пришли к выводу, что чего-то да не хватает. А если не придираться, то люди жаловались, что местами приходится много бойлерплейт-кода писать руками.

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

Так раст как раз вторая серьезная попытка сделать ооп без gc

Не было такого. Растоманов вообще от букв ООП корежит. Их идеология «все делаем в компил-тайме» просто несовместима с ООП, где все вертится вокруг позднего связывания. Хотя сейчас конечно уже хрен поймешь, что люди имеют ввиду под ООП. Так то структуры и интерфейсы имеются, полиморфизм своеобразный в наличии, можно что то изобразить оо-подобное. Но это все из серии стоя в гамаке.

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

специфический ООП, но не ООП, вот кстати похожие мнения почему ООП и раст несовместимы https://habrahabr.ru/post/309968/, почему ТС дергается на раст оно и понятно, он сам ни си ни с++ толком не знает, тянуть нужно свой шланг и нанимать доп сишника дорого, поэтому ему нужен некий язык которым он со своими скудыними знаниями влезет в железо и при этом не нужно нанимать нормальных сишных пацанов, а можно пригрузить подучить уже нанятых шлангистов

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

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

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

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

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

Ты не поверишь, но есть шарага, где на сишке пишут даже гуи-тулкит и десктопную среду для одной малоизвестной ос. Изврат конечно, но с другой стороны доказательство, что сишку можно где угодно внедрить с легкостью. А моднявые язычки всегда булькают в очень узкой нише (про раст пока и такого нельзя сказать, ниши просто нет).

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

не хочет покупать либу за 10 кило

Напомнило сишную библиотеку mongoose. Казалось бы, кто будет покупать обертку вокруг select. А, наверное, есть желающие - потому что на сишке любые банальности с большим трудом делаются. Вот и создают целые организации вокруг одной либы

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

Если вы про GTK+, то всё, что они делают, так это исправляют тонну сегфолтов. Ну и GNOME очень заинтересован в rust. rsvg уже начали переписывать. Посмотрим что дальше будет.

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

При чём тут Derive и ООП?

при том что наследование реализации. Это конечно не совсем так, а точнее совсем не так, но для срача на ЛОРе проканает.

Язык разметки текста лучше для GUI?!

Да.

Для этого придумали QML и активно его продвигают. HTML без JS ничего не умеет, поэтому ЯП для разметки нужен.

QML прибит гвоздями к Qt. ЯП нужен не для разметки, а для задания логики работы приложения, так что теоретически можно обойтись любым ЯП, практически да, но есть надежда на webassembly.

Dark_SavanT ★★★★★ ()

Интересно узнать, трудно ли было переходить на раст, и с каким бэкграундом (C, C++, Erlang?).

И сколько LOC? Впечатление такое что немного, так что выводы не сильно поделаешь. Но ход эксперимента интересен.

anonymous ()