The OpenNET Project / Index page

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



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

В ветку ядра Linux-next добавлен код для разработки драйверов на языке Rust, opennews (?), 19-Мрт-21, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


48. "В ветку ядра Linux-next добавлен код для разработки драйверо..."  +3 +/
Сообщение от Аноним (10), 19-Мрт-21, 21:02 
Чем он крут? Тем, что не могут ресдох запустить на железе?
Ответить | Правка | Наверх | Cообщить модератору

107. "В ветку ядра Linux-next добавлен код для разработки драйверо..."  +1 +/
Сообщение от Аноним (-), 19-Мрт-21, 23:06 
> Чем он крут?

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

... и приступ лютого вранья и отрицания реальности - тоже вызывает.

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

116. "В ветку ядра Linux-next добавлен код для разработки драйверо..."  +2 +/
Сообщение от Аноним (114), 19-Мрт-21, 23:19 
Так нам программировать, а не на форумах троллить.
Ответить | Правка | Наверх | Cообщить модератору

157. "В ветку ядра Linux-next добавлен код для разработки драйверо..."  +4 +/
Сообщение от burjui (ok), 20-Мрт-21, 01:53 
То-то я вижу под каждой новостью конструктивную критику Rust с примерами кода, а не истеричные вопли неадекватов, у которых проблемы с чтением доков и логикой. Сразу видно - программисты.
Ответить | Правка | Наверх | Cообщить модератору

184. "В ветку ядра Linux-next добавлен код для разработки драйверо..."  –3 +/
Сообщение от Аноним (-), 20-Мрт-21, 03:25 
По-моему там все начиная с способа инсталла этого треша не способствует конструктивной критике, а вот поиздеваться над такой порнографией стоя в гамаке - напрашивается. Почему это должно быть настолько через @нус сделано? За 10 лет ЯП нельзя было избавить от детских болезней? ORLY?
Ответить | Правка | Наверх | Cообщить модератору

209. "В ветку ядра Linux-next добавлен код для разработки драйверо..."  +3 +/
Сообщение от пердёжник (?), 20-Мрт-21, 07:29 
в чём проблема с установкой? Поставьте из удобного вам пакетного менеджера, или если не хотите "засорять систему" - установите из rustup.

Какой анyс? Какие детские болезни вы подразумеваете?

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

303. "В ветку ядра Linux-next добавлен код для разработки драйверо..."  –1 +/
Сообщение от Аноним (-), 20-Мрт-21, 17:02 
> в чём проблема с установкой? Поставьте из удобного вам пакетного менеджера,

Так вон там написано что так не годится. Версия неправильная, чих-пых! Надо не более чем месячной давности!!!111 Потом срок хранения хрустиков видимо протухает. Очень удобно.

> или если не хотите "засорять систему" - установите из rustup.

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

> Какой aнyс? Какие детские болезни вы подразумеваете?

Ну вот такие - левые тантры начинаются прямо с подъема окружения разработчика. И вон то Pin::from(Box::try_new(unsafe { Mutex::new(0) })?); явно не выглядит офигенно читаемым и клевым кодом, даже по сишным меркам. Эти гамняки точно - улучшение?

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

318. "В ветку ядра Linux-next добавлен код для разработки драйверо..."  +1 +/
Сообщение от Аноним (318), 20-Мрт-21, 17:24 
Эх, анон-анон. Как раз оно офигенно читаемое. Да - многословное, но каждый кусочек точно определяет дальнейшее поведение объекта. И никаких разночтений.

Если упрощенно:
- создать небезопасный объект
- "упаковать" его в умный указатель на heap
- запретить перемещать
Все просто и однозначно - нет разночтений и сайд-эффектов.

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

356. "В ветку ядра Linux-next добавлен код для разработки драйверо..."  –2 +/
Сообщение от Аноним (356), 20-Мрт-21, 19:42 
> Эх, анон-анон. Как раз оно офигенно читаемое. Да - многословное, но каждый
> кусочек точно определяет дальнейшее поведение объекта. И никаких разночтений.

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

> Если упрощенно:
> - создать небезопасный объект
> - "упаковать" его в умный указатель на heap
> - запретить перемещать
> Все просто и однозначно - нет разночтений и сайд-эффектов.

Есть только 1 небольшой нюанс. Со всеми этими тантрами уже в общем то забыли на...я это все было нужно :). Так что простой и лаконичный код ну вот вообще совсем не получился. Получилось куча левых технических загогулин. Да еще какая-то закорюка с вопросом, посуровее чем в си. Конечно на си тоже можно писать в стиле ??!??! oh_wtf(lol). Но обычно так тоже не делают если оно не obfuscated code contest. А в какое-то менее похабное макро такие вещи на хрусте реально обернуть для типовых вещей? Или писать такое гамнище в логике кода - родовое проклятье и не лечится?

Простой пример, на сях можно и вот так сделать:


BEGIN_MENU(level1_menu)
    //     fast_key  entry text         function
    MENU_ENTRY('1', "Do something!"    , handler_1)
    MENU_ENTRY('2', "Do something else", handler_2)
    ...
END_MENU(level1_menu)

На самом деле это, конечно, декларит некий const menu_entry_t level1_menu[] и вон то лишь заполняет массив структов. Однако caller ту техническую трахомудию в принципе не видит! Ему, вот, милый синтаксис генерации менюшки с прибамбасами, без единой левой закорюки. И сильно накосячить не даст, устроено унутрях так, и генерация struct. А функции работы с этим типом данных, параноидально чекающие что подсунули, при непонятках заканчивающие парсинг, написаны 1 раз и их вообще трогать не надо для очередной менюшки.

По поводу чего основной код оказывается милым, читабельным, а добавить еще 2 записи меню совершенно не чревато багами. А на хрусте что-то такое вообще можно? И если да то почему они вон тот мерзотный синтаксис на бошку вываливают? И после этого хрустики вопят что си корявый, а раст высокоуровневее? Эм, а это точно? Почему-то пример сравнимого по лаконичности кода на хрусте мне ни разу в жизни не попадался. Это реально организовать? И если да то почему вместо этого - вон тот птичий язык, в 2 раза хуже чем на си?

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

384. "В ветку ядра Linux-next добавлен код для разработки драйверо..."  +2 +/
Сообщение от Аноним (318), 20-Мрт-21, 22:56 
Без обид, но мне кажется что вы... ну не очень хорошо знаете синтаксис раста. Потому что в этой строке ни одного макроса.

А '?' это оператор распаковки Option value, try_new возвращает Option<Self> (можно глянуть доку https://docs.rs/boxext/0.1.6/boxext/trait.BoxExt.html)
Это гарантирует Null safety - компилятор тебя обяжет или получить значение и работать с ним, или обработать это одним из способов. И не нужно будет писать кучу проверок на null при обращении к значению. Т.е. без ухищрений невозможно будет обратиться к null объекту.
В отличие от с и с++ - там или проверяешь каждый раз, или забиваешь и надеешься на лучшее.

Это кстати не изобретение раста - оно появилось в эйфиле, а потом в C#, Kotlin, Swift, Dart и других.

> BEGIN_MENU(level1_menu)

Как будто что-то мешает написать аналогичное на расте. Ну, только без богомерзких begin-end.

let mut menu = Menu::new();
menu.add("1", "Do something 1!", handler1);
menu.add("2", "Do something 2!", handler2);

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

> раст высокоуровневее

Конечно высокоуровневее. В си вы опечатались и вместо значения одного enum написали другой такого же базового типа. И ведь молча схавает. Про nested enums можно даже не вспоминать.
Null safety - спасает от целого класса ошибок. Паттерн-матчинг - не киллер фича, но штука крутая (не, ну можно конечно все тоже самое нафигачить ифами, но... зачем?) Zero-Sized Types. Много элементов системного программирования.
И это без наверное главных фишек раста вроде borowing, ownership и lifetimes.

Да тут очень долго можно перечислять. Потому что си это по факту переносимый человекочитабельный ассемблер.

А синтаксис - это вкусовщина. Кто-то обожествляет лисп, а других от него блевать тянет. Или паскаль (хехе, begin-end). Но минимального знания раста дальнейший разговор не имеет смыслы - вы просто не совсем понимаете что там написано.

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

399. "В ветку ядра Linux-next добавлен код для разработки драйверо..."  +/
Сообщение от Аноним (-), 21-Мрт-21, 00:38 
> синтаксис раста. Потому что в этой строке ни одного макроса.

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

> А '?' это оператор распаковки Option value, try_new возвращает Option<Self> (можно глянуть
> доку https://docs.rs/boxext/0.1.6/boxext/trait.BoxExt.html)

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

> Это гарантирует Null safety - компилятор тебя обяжет или получить значение и
> работать с ним, или обработать это одним из способов.

Само по себе это может даже и не плохо, но...
1) А что если проблема не только null?
2) Не могло бы это выглядеть как-то менее наркомански?
3) Вот такого в кернеле вероятно будет везде и всюду. Это что, везде будет вот эта чисто техническая дрянь на полэкрана?

> И не нужно будет писать кучу проверок на null при обращении к значению.

С другой стороны, при проверках автор _в курсе_ code flow и _понимает_ как более-менее без проблем оттуда при факапе свалить. А какой-нибудь внезапный эксепшн в тыкву, в кернельном коде - ну, блин, апликухи то на хрусте резко умирают "для безопасТности". Но боюсь что такая обработка проблем кернелом у юзеров энтузиазм не вызовет. Хотя, возможно, MS и хочет нам из линуха Win95 устроить?

> Т.е. без ухищрений невозможно будет обратиться к null объекту.
> В отличие от с и с++ - там или проверяешь каждый раз,
> или забиваешь и надеешься на лучшее.

Вообще в кернеле за это exception от железа обычно мигом прилетает. Это конечно фривольное допущение но для линуксного кернела стандартно запретить несколько нижних страниц в MMU и там само железо резко даст в тыкву.

Бонус этого варианта в том что...
1) Это уже совершенно точно баг ядра а не вываливание в fallback path по ауту памяти или чему там еще. Ядро не должно умирать даже если RAM кончилась, поэтому plan B на случай невыделения памяти у кода должен быть. Иначе будет полное булшит бинго. Вплоть до жесткого корапта данных и прочих прелестей. Конечно не потому что из буфера вылезли, а потому что желаемое совсем не существовало. Но какая кому разница если в итоге какая-нибудь там ФС данные профачит?
2) Это вообще совсем ничего не стоит - MMU и так есть, он на уровне железа доступы к страницам чекает всегда - и на доступ к 0-й странице просто возбухнет как обычно.

И профит от этого наступает... например, в чем? Я бы сказал что бывают системы без mmu но там видите ли линух экзотика, и это (лол) нарушает допущения хруста. Он без MMU не очень то и безопасный и может на раз не только поиметь stack overflow но и перетереть оным унутренние состояния и что там еще, если оно ниже было.

> Это кстати не изобретение раста - оно появилось в эйфиле, а потом
> в C#, Kotlin, Swift, Dart и других.

Они видите ли ни в раз не позиционируются как системные яп...

> Как будто что-то мешает написать аналогичное на расте. Ну, только без богомерзких begin-end.

Первое на самом деле декларит массив структов, второе его терминирует. Это некий tradeoff, дело в том что массив struct'ов разного размера - безразмерный и я не знаю когда уже пора отвалить. Для парсера критерий терминации - специальный токен, "это последняя запись".

Фокус с END убивает 2 зайцев. Закрывает заполнение массива и железобетонно вешает запись-терминатор, удостоверяясь что парсер совершенно точно не будет out of bounds парсить "потому что лох забыл терминатор". Видите ли compile-time построение прогеров и антикосячные трюки нравится не только растаманам.

> let mut menu = Menu::new();
> menu.add("1", "Do something 1!", handler1);
> menu.add("2", "Do something 2!", handler2);

Ах да, я не сказал одну мелочь? Все меню в итоге являет собой одну большую *константу*. Это полностью precomputed в compile time - идет в именно RODATA. В случае МК в ридонли флеху, которой у меня видите ли больше RAM'ы.

Если кто не понял, это на самом деле дебажно-конфигурационные менюшки по типу сигейтовского монитора на сериальной консольке. А чо, я хуже сигейта? Ну и сдампить лишку памяти в дебажный шнурок парсером - последнее что бы мне хотелось в фирмвари. А вон тот Menu::new(); точно уйдет целиком в RODATA? Или таки будут динамические вычисления в рантайм, хлам в RAM и проч?

> И добавляешь сколько нужно. И никаких чеков, никаких закорючек. Даже более короткий
> и существенно менее отвратительный чем ваш вариант.

У моего варианта простые, понятные даже дауну правила. И он не даст лохануться даже, вот, сишнику. И бонусом это наглухо RODATA, настолько что целиком отправляется в flash ROM. И все потребные смещения компилер тоже предвычисляет так что парсер получает сие как массив структов а не какие там еще указатели и - довольно вменяемо итерирует через это все :)

> Конечно высокоуровневее. В си вы опечатались и вместо значения одного enum написали
> другой такого же базового типа. И ведь молча схавает. Про nested enums можно даже не вспоминать.

Си схавает. Статический анализатор - может и прочухать. Ну и я туда допустим адреса HW regs помещаю. Если я опечатаюсь в адресе - я по любому completely f...d up.

> Null safety - спасает от целого класса ошибок.

А оно не может в более generic проверки? Скажем, часто такая проблема: я знаю что входной параметр валиден от 1 до 100, а если больше - конкретное д-мо! Да, можно runtime проверку этого - но, блин, в фирмвари runtime error булшит полный. Я для сей научился макросами местами чекать такое, но это налагает жесткие лимиты: должно быть compile time constant. При том шаг в сторону (например передается как входной параметр функции) и оно уже не катит. В смысле компилер не умеет в range-analisys чтобы понять что там. Хотя нет, падло именно это делает для dead code elimination и оптимизации кода! Но извлечь сие знание для анализа constraints на передаваемый функции параметр в compile time....

Хруст имеет чего такого интересного предложить как именно compile time checks подобных вещей? В рантайме то любой рак может, но там уже малость поздняк в системщине, если честно. Как вы относитесь к unexpected termination фирмвары вашего гироскутера? Морда на асфальте одобрит это?

> Паттерн-матчинг - не киллер фича, но штука крутая (не, ну можно конечно все тоже самое
> нафигачить ифами, но... зачем?) Zero-Sized Types. Много элементов
> системного программирования.

А вон пример специфичной вещи системного программирования. А покажите как это на русте?

> И это без наверное главных фишек раста вроде borowing, ownership и lifetimes.

Так то я даже не спорю что в расте есть некоторые здравые идеи. Но они ориентировались все же на full blown апликухи в основном, а про аналог "freestanding" из C99 кажется не очень задумывались.

> Да тут очень долго можно перечислять. Потому что си это по факту
> переносимый человекочитабельный ассемблер.

И зачастую именно это я на допустим микроконтроллере и хочу - очень тонкая прослойка между мной и железом. А потому предсказуем чуть ли не потактово и я на уровне интуиции понимаю какой код и данныые будет вот тут.

> А синтаксис - это вкусовщина. Кто-то обожествляет лисп, а других от него
> блевать тянет. Или паскаль (хехе, begin-end). Но минимального знания раста дальнейший
> разговор не имеет смыслы - вы просто не совсем понимаете что там написано.

Насчет вкусовщины - на мой вкус даже в сях довольно много закорюк, у которых с читаемостью "не очень". Имхо зря rust усугубляет это. Я конечно понимаю что клаву топтать всем впадлу но все же. А больше всего в подобных вещах анноят всякие не однозначно трактуемые символы и проч, если на мой вкус.

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

420. "В ветку ядра Linux-next добавлен код для разработки драйверо..."  +1 +/
Сообщение от Аноним (318), 21-Мрт-21, 13:02 
> если проблема не только null?

То тогда это другая проблема.

> Не могло бы это выглядеть как-то менее наркомански?

Субъективно - вопрос для опшинал параметров много где используется - в Kotlin и Swift точно. Это уже нормально для для тех кто с ним знаком))

Да и логика в это есть:
fn(a: String) - тут вам пришла строка, работайте спокойно
fn(b: String?) - тут вам пришла строка, но это не точно, поэтому проверьте что там
Так что просто непривычно.

> Это что, везде будет вот эта чисто техническая дрянь на полэкрана?

Скорее нет, чем да. Во-первых оно занимает всего один символ (это если про ?, а если про цепочку вызовов, то никто не мешает их написать каждый одной строкой).
Вы просто не сможете передать в fn(a: String) параметр String? - компилятор не пропустит.
Т.е. есть туда может придти null - то на каком-то этапе вам придется проверить 1 (один!) раз, а дальше работать как обычно - или вы проверяете внутри своей функции если допускаете такое и возвращаете ошибку, или обязываете вызывающую сторону гарантировать валидность входного параметра.

> И профит от этого наступает... например, в чем?

А профит в том что проверка в compile time.

> Они видите ли ни в раз не позиционируются как системные яп...

И это не повод не взять из них хорошую идею)))

> Все меню в итоге являет собой одну большую *константу*

Ну что ж вы сразу не актцентировали на этом внимание)
Вот пример полностью precomputed в compile time - как локальной, так и глобальной: https://play.rust-lang.org/?version=nightly&mode=debug&editi...

> А оно не может в более generic проверки?

Конкретно эта штука - нет. Она решает одну конкретную задачу.
Но есть другие механизмы. Напр. https://crates.io/crates/static_assertions позволяет проверять разные вещи для const объектов в compile time. Возможно это можно сделать макросом самому, но я вряд ли смогу.
Вот что в данный момент раст может делать в compile time - https://doc.rust-lang.org/reference/const_eval.html
Насколько я знаю "Const generics" (https://github.com/rust-lang/rust/issues/44580) еще не в stable и там есть работа, но оно добавит еще возможностей.
С ним можно будет сделать то что вы пишете на уровне языка, а не макросов.
https://github.com/rust-lang/rfcs/issues/1621 - вы просто объявите свой тип и зададите его лимиты от 1 до 100. Но пока насколько я вижу оно еще не готово.

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

> А вон пример специфичной вещи системного программирования. А покажите как это на русте?

Если это было про меню, то вроде показал, если про лимиты для параметров - то сорян, я не настолько крут. Но варианты решения есть выше.

>  Но они ориентировались все же на full blown апликухи в основном, а про аналог "freestanding" из C99 кажется не очень задумывались.

Да, наверное они действительно ориентировались на универсальный язык. Поэтому там много высокоуровневых вещей вроде элементов функционального программирования.

Но, в раст есть "режим" no_std, кмк это аналог freestanding.
Если писать в этом режиме то оно вполне работает на микроконтроллерах. Вот тут можно почитать книжку по rust-embedded https://docs.rust-embedded.org/discovery/index.html. А тут список того что поддерживается в том или ином виде https://github.com/rust-embedded/awesome-embedded-rust.

PS: я не пытаюсь вас убедить бросить си и начать писать на расте. Скорее в том что добавление возможности писать драйверы на нем не сделает ядру хуже.

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

483. "В ветку ядра Linux-next добавлен код для разработки драйверо..."  +1 +/
Сообщение от Аноним (-), 27-Мрт-21, 06:41 
> То тогда это другая проблема.

Нельзя более общо сделать было? Это ж частный случай проверок параметров.

> Субъективно - вопрос для опшинал параметров много где используется - в Kotlin
> и Swift точно. Это уже нормально для для тех кто с ним знаком))

Ну знак вопроса хрен с ним. А всю такую штуку на полэкрана реально оформить макро с говорящим названием вместо печати таких прелестей?

> fn(b: String?) - тут вам пришла строка, но это не точно, поэтому проверьте что там

С одной стороны идея интересная. С другой это звучит как поле для грабель и могу себе представить что в safety critical если оно дотуда доберется это позапретят нафиг.

> Скорее нет, чем да. Во-первых оно занимает всего один символ (это если
> про ?, а если про цепочку вызовов, то никто не мешает их написать каждый одной строкой).

А оформить всю подобную цепочку и т.п. каким-нибудь коротким макро реально?

> Вы просто не сможете передать в fn(a: String) параметр String? - компилятор не пропустит.

Вот мне и стало интересно насколько далеко раст умеет заходить с compile-time проверками. Просто глупо если компилер внутрях умеет в range-check но наружу это не вывешено особо.

> Т.е. есть туда может придти null - то на каком-то этапе вам
> придется проверить 1 (один!) раз, а дальше работать как обычно -

Я и так все входные параметры функции 1 раз проверяю, в начале. Даже на си. Это тупо стандартное требование всех safety-critical и т.п. гайдов. А фича то в чем?

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

Мне был интересен случай когда функция жрет заведомо ограниченный range параметров и было бы очень круто если бы компилер мог проверить что они всегда именно такие. Да, это подразомевает некие ограничения (вычисляемые в runtime значения поддаются этому только частично).

> А профит в том что проверка в compile time.

Это то хорошо, мне такие вещи нравятся.

>> Они видите ли ни в раз не позиционируются как системные яп...
> И это не повод не взять из них хорошую идею)))

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

>> Все меню в итоге являет собой одну большую *константу*
> Ну что ж вы сразу не актцентировали на этом внимание)

Собссно прелесть макро в сях в том что оно generates no code, а const не даст это менять, учитывая что это массив struct разного размера это предотвращает много стремных ситуаций. Compile-time генереж таким манером заполнит как надо а в рантайм его никто не трогает. Места для лажи мало.

> Вот пример полностью precomputed в compile time - как локальной, так и
> глобальной: https://play.rust-lang.org/

Что-то не грузится. Может ему tor не нравится? Или кто там его знает. На что-нибудь менее переросточное типа paste.debian.net можете закинуть?

> Конкретно эта штука - нет. Она решает одну конкретную задачу.

А в чем прикол выделить null из всех остальных ограничений? Я бы сказал что он наименьшая проблема т.к. за его дереференс при правильном определении обычно дает в репу само железо, кроме, разве что AVR и PIC каких.

> проверять разные вещи для const объектов в compile time. Возможно это
> можно сделать макросом самому, но я вряд ли смогу.

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

> Вот что в данный момент раст может делать в compile time -

А там можно например тип enum сделать и рубать компил если параметр содержит что-то отличное от фиксированного значения опций? Это наверное катит только для небольшого числа значений, но все же?

> Насколько я знаю "Const generics" (https://github.com/rust-lang/rust/issues/44580)

Чудесатая штука. Хотя я бы сказал что трансмутации съели мой мозг... блин, глядя на это могу себе представить what it takes взять массив адресов и сказать что это у меня функции с прототипами (ничего особенного, типа bios-интерфейса к boot loader, чтобы основной код мог вызывать некоторые функции, хоть бут и отдал рули уже давно).

> его лимиты от 1 до 100. Но пока насколько я вижу оно еще не готово.

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

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

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

> Если это было про меню, то вроде показал,

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

> если про лимиты для параметров - то сорян, я не настолько крут. Но варианты решения
> есть выше.

Просто лимиты параметров ... ну вот напрягающая штука. Рантайм факапы мне не нравятся.

> Да, наверное они действительно ориентировались на универсальный язык. Поэтому там много
> высокоуровневых вещей вроде элементов функционального программирования.

Я заметил. И к сожалению это делает понимание того что происходит сильно менее тривиальным.
1) Чем сложнее и концептуальнее код, тем меньше людей в него въедет.
2) Чем сильнее закручены абстракции, тем больше шансов что их поймут неверно.
3) У плюсовиков это стало просто их стандартной граблей в результате.
4) В системщине хочется понимать что во что реально трансформируется. Вплоть до секвенсинга байтиков по шинам точным паттерном. Железки так сделаны.

> Но, в раст есть "режим" no_std, кмк это аналог freestanding.

Вот это похоже на правду.

> Если писать в этом режиме то оно вполне работает на микроконтроллерах.

Ага, вижу. По своему забавно. И все же, дорогие рустеры...


// Turn off the East LED
    gpioe.bsrr.write(|w| w.br11().set_bit());

У меня это было бы
EAST_LED_ON;
или
EAST_LED_OFF;
...вместо той лабуды. Да еще с дико эффективным оперделением (1 запись в регистр, пара команд на асме будет). А макросы еще и позволят определять EAST LED как какой-нить
PIN_XDEF(EAST_LED, PORT_A, 4)

(на самом деле волшебную константу делает, где вкодирован и порт и пин, 100% compiletime и дико эффективно). Ахтунг, PIN_XDEF нестандартен - мое макро, идея у кого-то подсмотрена.

Или настройка пина после вон того могут быть так:
pin_setup(EAST_LED, OUTPUT_50MHZ_PUSHPULL). Да, без ооп, зато просто как топор, понятно даже дауну, и хотя это функция, компилер ухитряется на удивление заинлайнить только очень частный code path, столь же крутой как лобовая запись регистра константой. Заодно конкретные порты, биты и проч нигде не фигурируют. А высокоуровневые чуваки навернули ... какие-то дико странные абстракции и вышло что код на сях зело высокоуровневее, лаконичнее, и бинарь раз в эн меньше, не? :)

> PS: я не пытаюсь вас убедить бросить си и начать писать на
> расте. Скорее в том что добавление возможности писать драйверы на нем
> не сделает ядру хуже.

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

В любом случае, спасибо за insight, было интересно. И вообще это какжется первый рустер который более-менее в курсе inner working. Ну, не люблю черную магию сделаную богами. Системщина о том чтобы самому ее уметь...

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

421. "В ветку ядра Linux-next добавлен код для разработки драйверо..."  +/
Сообщение от Аноним (318), 21-Мрт-21, 13:08 
И еще на счет системщины: на расте уже смогли написать микроядро и ОС и оно работает на реальном железе. В ней много чего нет, что-то стянули с линукса, где-то жестко срезали углы (как с той "утечкой" памяти - одной из вещей которую любят тут форсить), но это показывает что возможности языка достаточны для написания ос с нуля.
И да - раст может делать сисколы, может вызывать асм вставки, может собираться в минимальный бинарник.
Ответить | Правка | К родителю #399 | Наверх | Cообщить модератору

468. "В ветку ядра Linux-next добавлен код для разработки драйверо..."  +/
Сообщение от Аноним (-), 24-Мрт-21, 01:03 
> И еще на счет системщины: на расте уже смогли написать микроядро и
> ОС и оно работает на реальном железе.

ЕЩЕ там хватало asm и unsafe, насколько я помню поклацав по диагонали сорец в репе. При этом я имею наглость заметить что ASM - не раст. Как впрочем и не си. А unsafe отправляет в лес обещания безопасности про которые столько задвигали.

> но это показывает что возможности языка достаточны для написания ос с нуля.

С asm написать ОС можно вообще без ЯП, проверено колибри.

> И да - раст может делать сисколы, может вызывать асм вставки, может
> собираться в минимальный бинарник.

А насколько минимальный? Я сями микроконтроллер без асма и чужих объектников поднял. Но вообще замах неплохой и некоторые идеи типа borrow checker здравые.

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

414. "В ветку ядра Linux-next добавлен код для разработки драйверо..."  +1 +/
Сообщение от боня (?), 21-Мрт-21, 10:32 
> 1) Это как раз и есть засорение системы - не трекаемое пакетным менеджером васянское барахло.

растап устанавливает компилятор внутрь вашей домашней папки и не требует привелегий рута

> Pin::from(Box::try_new(unsafe { Mutex::new(0) })?); явно не выглядит офигенно

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

"читаемый и клевый код" это субъективное понятие, искажённое вашим собственным опытом, нельзя так просто вырвать одну строчку и тыкать ей в каждом посте и говорить "мне не нравится, не офигенно".

Складывается впечатление, что вы не разобрались в вопросе и делаете предварительные заключения основываясь ни на чём

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

469. "В ветку ядра Linux-next добавлен код для разработки драйверо..."  –1 +/
Сообщение от Аноним (-), 24-Мрт-21, 01:14 
> растап устанавливает компилятор внутрь вашей домашней папки и не требует привелегий рута

Я как раз не хочу левое исполняемое барахло в системе untracked by package manager. А то что хруст на юзеров маздая с их проблемами слишком ориентирован мне и не нравится как раз.

А конкретно rustup еще и не проверяет что и кто ему налил. Как впрочем и карго. В результате хипстеры попробовали сделать эрзац пакетного менеджера. Только в 20 раз дерьмовее чем он у меня в ОС был. Жалкая пародия на таковой.

> Че вы зацепились за эту строчку?

Мне так по жизни не нравится когда техническая галиматья занимает полскрина. Люблю читаемые и понимаемые программы. По многим причинам, начиная от экономии времени людей на въезд и заканчивая аннулированием возможностей влепить баг лишний раз.

> Во первых тут понятно что происходит, во вторых - это скорее всего не рядовое
> использование, а оптимизация.

В кернеле оптимизации на вес золота. А такое счастье в расте реально в какие-нибудь макро, чтоли, оформить? Вообще примеров разгаживания синтаксиса макросами как это модно у сишников я вообще особо не встречал.

> Любые оптимизации будут выглядеть немножко странно и не предназначены для того,
> чтобы вы ими любовались.

А таки wish лаконичного и эстетичного кода не пропьешь...

> "читаемый и клевый код" это субъективное понятие, искажённое вашим собственным опытом,

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

> Складывается впечатление, что вы не разобрались в вопросе и делаете предварительные
> заключения основываясь ни на чём

Может да, а может нет. И все же, красивые самолеты красиво летают.

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

471. "В ветку ядра Linux-next добавлен код для разработки драйверо..."  +1 +/
Сообщение от боня (?), 24-Мрт-21, 10:10 
> Я как раз не хочу левое исполняемое барахло в системе untracked by package manager.

Установите из пакетного менеджера.

> А конкретно rustup еще и не проверяет что и кто ему налил.

Почему вы так считаете? Проверяет же.

> Как впрочем и карго.

02298
В карго вы имеете возможность указать путь к зависимостям и на 100% контролировать код, на который вы ссылаетесь. Можно указать например папку на файловой системе или удалённый гит-репозиторий.

> Мне так по жизни не нравится когда техническая галиматья занимает полскрина. Люблю читаемые и понимаемые программы.

Если хотите абстрагироваться от технических подробностей и писать чистый код, то для вас уже придумали такие замечательные языки как например Котлин или с#. Если вы совсем тупой - вы можете попробовать заняться разработкой на джаваскрипте или питоне.

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

475. "В ветку ядра Linux-next добавлен код для разработки драйверо..."  +/
Сообщение от Аноним (-), 26-Мрт-21, 10:06 
> Установите из пакетного менеджера.

Он там все же не "месячной давности". По поводу чего и получается что подобное требование весьма неудобное. Жизнь на вулкане нравится не всем.

> Почему вы так считаете? Проверяет же.

Орда дал мне ссыль на секурити аудит всего этого и там английским по белому написано что не проверяет. И вообще, эти безопасТники чуть не пайп в шелл с ремотного сайта предлагают. Если кто не врубился: в этот момент ремотный сайт получает полное управление. Без какой либо проверки этого шелскрипта.

> контролировать код, на который вы ссылаетесь. Можно указать например папку на
> файловой системе или удалённый гит-репозиторий.

А дефолтовая централизованая репа мало того что рулится хзкем так еще и гарантий что налилось именно то что попросили - толком не дает. Теоретически там HTTPS, но сам по себе HTTPS не дает никаких гарантий origin данных или их аутенитчности. Поэтому если хакер Вася взломает репо и запихнет троян, он с чистой совестью скачается без каких либо предупреждений.

Заметьте, этот номер не катит с моим пакетным менеджером: там файло подписано ключом майнтайнеров, которого у хакеров нет. И соответственно заменить пакет на левак не получится. А если мне хочется свое репо - можно свой ключ добавить, тогда пакетник будет доверять еще и вот этому вот. ЧСХ оно такое уже более 10 лет, но до вебманки как до жирафа. Зачем мне та пародия на пакетный менеджер, когда у меня вот такое есть? Это "апгрейд" разве что для юзеров маздая. А для меня это махровый даунгрейд по всем аспектам управления компонентами в системе.

Потому что мало того что второй дублирующийся компонент делающий то же самое, так еще недопиленый и убогий. А преподносится как "фича".

> Если хотите абстрагироваться от технических подробностей и писать чистый код, то для
> вас уже придумали такие замечательные языки как например Котлин или с#.

Ага, напишите мне на них фирмварь для STM32. Или почему бы фирмвари мк не быть с чистым кодом? Чтобы там баги лепить проще было? Ух, а баги там - последнее что мне бы хотелось.

> Если вы совсем тупой - вы можете попробовать заняться разработкой на
> джаваскрипте или питоне.

Лол. Я так то умею немного на JS прогать, но абсолютный минимум потребный для создания вебморд в которые показывается статус хитрых делезок. И вот это - по совсем уж останочному принципу.

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

240. "В ветку ядра Linux-next добавлен код для разработки драйверо..."  +3 +/
Сообщение от burjui (ok), 20-Мрт-21, 11:15 
$ pacman -S rust
Действительно, через детскую жопу сделано, и этим нас кормят в 2021 году?! Должно устанавливаться силой мысли!
Ответить | Правка | К родителю #184 | Наверх | Cообщить модератору

375. "В ветку ядра Linux-next добавлен код для разработки драйверо..."  –1 +/
Сообщение от Аноним (-), 20-Мрт-21, 22:18 
> Действительно, через детскую жопу сделано,

Ну да, пакман с растишкой и порчими йогуртами - как-то так. Теперь так на продакшне попробуй.

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

390. "В ветку ядра Linux-next добавлен код для разработки драйверо..."  +/
Сообщение от burjui (ok), 20-Мрт-21, 23:28 
А в чём разница?
Ответить | Правка | Наверх | Cообщить модератору

401. "В ветку ядра Linux-next добавлен код для разработки драйверо..."  –1 +/
Сообщение от Аноним (-), 21-Мрт-21, 01:09 
> А в чём разница?

1) В том что обычно там йогурты и пакманы не в почете.
2) Требование распоследнего компилера означает что этого скорее всего нет в репах.
3) БезопасТность rustup'а с какого-то васянсайта, без проверок подписей? Ну, э, лол!
4) Кстати то же самое и карго-культа касается. Это мне орда подогнал security analisys. Я его про safety на самом деле спрашивал, но за неимением арфы и бубен, вот, сгодился.
5) Компилер которому менее месяца означает что все его баги вы на раз и соберете на своем заду самолично. И совсем не факт что в это было частью плана, особенно в продакшне.

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

412. "В ветку ядра Linux-next добавлен код для разработки драйверо..."  +2 +/
Сообщение от боня (?), 21-Мрт-21, 10:00 
> Теперь так на продакшне попробуй.

арч на продакшене?

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

167. "В ветку ядра Linux-next добавлен код для разработки драйверо..."  +/
Сообщение от Аноним (-), 20-Мрт-21, 02:38 
покажи-ка, что ты там напрограммировал, трепло
Ответить | Правка | К родителю #116 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




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

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