The OpenNET Project / Index page

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



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

Оглавление

Релиз ядра Linux 6.5, opennews (?), 28-Авг-23, (0) [смотреть все]

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


42. "Релиз ядра Linux 6.5"  +3 +/
Сообщение от Аноним (42), 28-Авг-23, 13:50 
Я боюсь что итогом будет 2 яп в ядре и раст, скорей всего, отвалится в какой-то момент но драйвера останутся в легаси и придется их тянуть хз сколько.

По поводу безопасности раста: статический анализ в С чинит все проблемы что и раст, не исключено появление разширения для С в виде стандарта что добавит "умную" работу с памятью, переход на полдмножество с++ может решить эту проблему, например. И все раст можно хоронить, но драйвера никуда не денутся... итог печален будут тянуть легаси лет 20.

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

95. "Релиз ядра Linux 6.5"  +/
Сообщение от keydon (ok), 28-Авг-23, 16:40 
Так и будет. Я об этом говорю уже ~ лет 10 и без привязки к ядру.
Раст умрет, а кому-то придется собирать кучу ненужного софта.
К счастью в основном на расте писали мелкие бесполезные утилитки и в энтерпрайз он только начинал заходить, так что есть шанс что обойдется малой кровью.
Ответить | Правка | Наверх | Cообщить модератору

136. "Релиз ядра Linux 6.5"  +1 +/
Сообщение от _ (??), 28-Авг-23, 18:45 
Забудь надежду ... (С)
Нашинские, Ынрерпрайзные - _всегда_ выбирают наихудшее решение :)
Ответить | Правка | Наверх | Cообщить модератору

107. "Релиз ядра Linux 6.5"  +2 +/
Сообщение от fyjybvec (?), 28-Авг-23, 17:07 
> статический анализ в С чинит все проблемы что и раст

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

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

135. "Релиз ядра Linux 6.5"  +/
Сообщение от Аноним (135), 28-Авг-23, 18:44 
Это не говоря уж о OpenSSL с его бесконечными дырами - а ведь он уже обмазан статическими анализаторами, да и размером несоизмеримо меньше ядра.

Как обычно, у опеннетных критиков Раста уровень знаний о нем "слышал звон, да не знаю, где он".

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

137. "Релиз ядра Linux 6.5"  +3 +/
Сообщение от _ (??), 28-Авг-23, 18:50 
Но есть нюанс ... (С)
OpenSSL - есть и используется, а вот замену ему на ржавчике раз 300 анонсировали, уеб сайты(С) делали ... (для поха - там даже СоС был!!! :-р ) ... но все как сидели насишныхдыренях(С) так почему-то и сидят ...
Не понимают дураки своего счастья ...
Ответить | Правка | Наверх | Cообщить модератору

126. "Релиз ядра Linux 6.5"  +/
Сообщение от Аноним (126), 28-Авг-23, 18:08 
То есть ты вбрасываешь мысль от том, что "Раст не нужен, просто сишку надо сделать подмножеством С++". Я как сишник скажу - Плюсам в ядре места нет!
Ответить | Правка | К родителю #42 | Наверх | Cообщить модератору

191. "Релиз ядра Linux 6.5"  +/
Сообщение от Аноним (187), 29-Авг-23, 04:01 
> То есть ты вбрасываешь мысль от том, что "Раст не нужен, просто
> сишку надо сделать подмножеством С++". Я как сишник скажу - Плюсам в ядре места нет!

Однако какой-нить _Generic в С11 таки сделали. Это не совсем то что в плюсах но все же.

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

190. "Релиз ядра Linux 6.5"  +1 +/
Сообщение от Аноним (187), 29-Авг-23, 04:00 
> По поводу безопасности раста: статический анализ в С чинит все проблемы что
> и раст, не исключено появление разширения для С в виде стандарта

У сей есть определенная проблема с статическим анализом указателей. Особенно void* какого-нибудь. Там прсото нет аннотации намерений кодера. Мы не знаем что хотел кодер, какой у этого был размер и валидна ли вон та операция. Ни компил тайм ни даже ран тайм вот так нахаляву. Конечно если вообще совсем все трекать, как asan - ну да, только из сишки получается дотнет какой-то: жрет гигазы рамы на трек этого, бинарь жирнеет в разы и скорость сливается.

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

277. "Релиз ядра Linux 6.5"  –1 +/
Сообщение от keydon (ok), 30-Авг-23, 14:13 
>> По поводу безопасности раста: статический анализ в С чинит все проблемы что
>> и раст, не исключено появление разширения для С в виде стандарта
> У сей есть определенная проблема с статическим анализом указателей. Особенно void* какого-нибудь.
> Там прсото нет аннотации намерений кодера. Мы не знаем что хотел
> кодер, какой у этого был размер и валидна ли вон та
> операция. Ни компил тайм ни даже ран тайм вот так нахаляву.
> Конечно если вообще совсем все трекать, как asan - ну да,
> только из сишки получается дотнет какой-то: жрет гигазы рамы на трек
> этого, бинарь жирнеет в разы и скорость сливается.

Ну в таких случаях и раст включает unsafe.
Только вот почему-то вынести небезопасный код в unsafe растоманы считают нормой, а вынести работу с указателями в либу/функцию это "дырявый си", а в плюсах и вовсе давно все вынесено и с указателями стараются не работать.
Почему-то криворукое поделие на си это "дырявый си", а криворукое поделие на расте "это разработчик виноват, сейчас поправим и дальше все будет безопасно"...до следующего найденного бага.
Лицемерие чистой воды.

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

281. "Релиз ядра Linux 6.5"  +1 +/
Сообщение от Аноним (-), 30-Авг-23, 15:55 
> Ну в таких случаях и раст включает unsafe.

В сях это все ж почаще - указатели юзают часто, и весьма часто они "безразмерные" и даже чисто теоретичеси в компилтайме это просчитать получается нельзя. Только в рантайме чекать тяжеловесами типа asan+ubsan, а это уже дотнет какой-то из сишки получается. Бинарь жиреет в разы особенно с asan, скорость тоже в пару раз может слететь, и рам asan жрет очень даже. Ubsan скромнее но ловит не все.

> Только вот почему-то вынести небезопасный код в unsafe растоманы считают нормой, а
> вынести работу с указателями в либу/функцию это "дырявый си",

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

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

Да даже на сях культурным определением типов это решить можно. Тут кто-то ссыль давал кажись как из сей + гнутого расширения для мутексов сделали GUARD который так то жутко далек от стандартного управления ресурсами в си.

Но можно решить это одно. А то что там в древнем коде это сделано - сильно другое. Ну и вот чтобы понимать где нас reboot в этих знаниях древних - и появились asan'ы и ubsan-ы с fuzzer'ами. Которые так то недурно ловят факапы дидов оптом методом миллиона обезьян^W вообще процессоров генерящих рандом по сути.

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

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

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

300. "Релиз ядра Linux 6.5"  –1 +/
Сообщение от keydon (ok), 31-Авг-23, 15:24 
> В сях это все ж почаще - указатели юзают часто, и весьма
> часто они "безразмерные" и даже чисто теоретичеси в компилтайме это просчитать
> получается нельзя. Только в рантайме чекать тяжеловесами типа asan+ubsan, а это
> уже дотнет какой-то из сишки получается. Бинарь жиреет в разы особенно
> с asan, скорость тоже в пару раз может слететь, и рам
> asan жрет очень даже. Ubsan скромнее но ловит не все.

Прям как в анекдоте https://www.anekdot.ru/id/75546/

> Ну как бы положа руку на сердце, диды кодили как полные раздолбаи
> - и за ними их чудные апи и код писаный безбашенно
> приходится разруливать. Они ж вообще тогда не думали что кто-то коду
> пришлет пакет, чего доброго по воздуху, без спроса и - явно
> кривой?!
> Но можно решить это одно. А то что там в древнем коде
> это сделано - сильно другое. Ну и вот чтобы понимать где
> нас reboot в этих знаниях древних - и появились asan'ы и
> ubsan-ы с fuzzer'ами. Которые так то недурно ловят факапы дидов оптом
> методом миллиона обезьян^W вообще процессоров генерящих рандом по сути.

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

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

315. "Релиз ядра Linux 6.5"  +1 +/
Сообщение от Аноним (-), 03-Сен-23, 16:04 
> Прям как в анекдоте https://www.anekdot.ru/id/75546/

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

Видите ли, я управляющими системами развлекаюсь. Микроконтроллеры, одноплатники, вот это все. И меня при этом интересует знать именно истинное состояние дел. И чтобы код был как можно качественнее. Если ему что-то ответственное доверить собираемся - это как-то так. Сейчас компьютеры и мк управляют АЭС, химпредприятиями, энергетикой, производствами, транспортом всех мастей и направлений. Наша цивилизация изменилась. И требования к коду стали в ряде аспектов здорово другие.

И просто для понимания, по состоянию на сейчас в линух домерживают последние оставшиеся патчи проекта RT_LINUX. Которые, как вы понимаете, совсем не для красоты. Да что там, отсутствие багов в ядре актуально даже на обычном десктопе, потому что порушенная В ЯДРЕ рама может накрыть структуры файлухи, с чудной кончиной ОС или потерей данных, или уронить систему в панику. В этом месте дидам надлежит познать тао antibug coding - или уйти. Как исправивший ряд вулнов в их чудном коде говорю.

> Деды уже как 20+ лет не при делах, уже 20+ лет есть сети и все про это в
> курсе и даже с менеджерских позиций их давно поперли, но все равно
> продолжают валить на дедов.

Чей код фэйлит - к тому и претензии. Все просто. Я за олдовым и весьма кондовым кодером вот прям ща например алго запатчил - могло отрицательные индексы массиву скормить при определенных входных данных. Круто, да? Люблю дидов, int в индексах, пофигизм на проверки входных параметров функции и валидацию математики, неструктурированные апи и void* в каддой дырке, так что ни я ни компилер даже в проекте не разберемся что реально хотел засабмитить кодер - за отсутствием аннотаций намерений. Это именно их стиль писать вот так :). К сожалению натурный эксперимент показал что стиль богов не годится для смертных - они на богов не тянут и сажают тупейшие баги. Ну, вот, индексы отрицательные. Куда оно там по памяти скатается при этом только ubsan и знает :)

> Но что-то в расте уязвимостей меньше не стало, а вот фейспалмов
> стало больше.

Ну мне не нравятся эти типы - но иногда они таки имеют пойнт. В том числе с UB, жестко оговоренным размером типов без разночтений вместо "int" е...чего. А еще у си вообще довольно много странной фигни в стандартах. Скажем integer promotion. Или формат представления знаковых - разные варианты при этом и результирующий UB при врапе. Это уж совсем незачет.

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

330. "Релиз ядра Linux 6.5"  –2 +/
Сообщение от keydon (ok), 04-Сен-23, 13:11 
> Не, нам так не катит. Я хочу знать о своем и чужом коде истинное состояние дел а не пребывать в блаженном неведении под красивые сказки.

Поэтому используете раст, где сплошные сказки про безопасность, а реальные механизмы сводятся к профанации?

> И чтобы код был как можно качественнее.

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

> Сейчас компьютеры и мк управляют АЭС, химпредприятиями, энергетикой, производствами, транспортом всех мастей и направлений. Наша цивилизация изменилась. И требования к коду стали в ряде аспектов здорово другие.

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

> И просто для понимания, по состоянию на сейчас в линух домерживают последние оставшиеся патчи проекта RT_LINUX. Которые, как вы понимаете, совсем не для красоты.

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

> Да что там, отсутствие багов в ядре актуально даже на обычном десктопе, потому что порушенная В ЯДРЕ рама может накрыть структуры файлухи, с чудной кончиной ОС или потерей данных, или уронить систему в панику.

Только хруст не избавляет от багов, а только добавляет их.

> В этом месте дидам надлежит познать тао antibug coding - или уйти.

Так дедов нет уже. Не пишут они уже код. Деды это вы.
Для начала antibug coding должен быть читаемым, а не быть изотерическим ЯП с магическими символами из...начала двухтысячных. О да, раст создан дедом на основе языков дедов и изначально вообще был наколеночным проектом для полтора пользователей, это потом в мозилле в спешке начали править синтаксис. Результат на лицо. А вы тут про антибаг кодинг...

> Как исправивший ряд вулнов в их чудном коде говорю.

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

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

И все это человеческие проблемы, которые раст может решить примерно никак.

> В том числе с UB, жестко оговоренным размером типов без разночтений вместо "int" е...чего. А еще у си вообще довольно много странной фигни в стандартах. Скажем integer promotion. Или формат представления знаковых - разные варианты при этом и результирующий UB при врапе. Это уж совсем незачет.

Только вот UB это по сути unsafe для разработчиков компиляторов. Но unsafe в расте это "модно и необходимо", а UB в си это "деды понаписали".

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

341. "Релиз ядра Linux 6.5"  +1 +/
Сообщение от Аноним (341), 05-Сен-23, 17:09 
> Поэтому используете раст, где сплошные сказки про безопасность,

Пока еще нет. Но вообще рассматриваю идею выучить его когда в gcc будет нормальная поддержка и я пойму как обходиться без закладывания на стремные пакеты из реп от гугломайкрософтамазона.

> а реальные механизмы сводятся к профанации?

А таки у сей есть слабые стороны...
1) Те доперли до данных фиксированой ширины. А не "int" е...чий! В сях этот рак вклинился очень глубоко. Поэтому в макросах, enum и проч возникает много вопросов "какой реально тип данных будет?!" и "безопасна ли такая математика вообще?". Особенно если учесть определение "int" в стандарте.
1.1) Благодать с НОРМАЛЬНЫМИ типами вроде uintXX_t - на макросы и enum не распостраняется! По крайней мере в цивильном и контролируемом виде.
2) integer promotion в си работает совсем не так как представляло себе большинство кодеров. Почему это должно быть через такой @нус для меня загадка. А ваш код переживает -Wconversion без единого варнинга? Скажите честно!
3) UB. Извините но в си это за гранью добра и зла, стандартизаторы упростили жизнь себе в ущерб остальным. Даже wrap "int" - ub?! Потому что было минимум 2 формата хранения signed? А сам "int" - что угодно, от 16 битов и далее со всеми остановками? И сколько кода готово все возможные варианты "int" без фаллаута схарчить?! Примрено нисколько?! Круто! А мы точно хотели такие стандарты и такой код? Потому что он разваливается от тыкания палочкой.
4) Переменная типа "enum" в си жрет любой хлам. Даже зачастую без варнинга. Круто, но можно это и получше сделать так то.
5) В сях аннотации массивов весьма декоративные. В функцию можно с кормить func(arr[10]) но реально это - указатель. Без малейшего намека на bounds checking. Продвинутые анализаторы в принципе могут поспорить с этим но по дефолту это так не работает и аннотация смысла не имеет. Можно через struct сделать - но тогда это крайне неэффективно будет.
6) Struct в си кстати отдельная боль. На уровне апей и абей профачено все что можно профачить. Поэтому если вы мечтали о структурированом апи, да еще с предсказуемым аби - забудьте. Хотя затрахавшиеся люди все равно стали нормальные апи с "struct" делать. Потому что неструктурированные апи без аннотации намерений кодера ведут к багам.
6.1) Битовые поля в оных. Это грабледром. Код который генерят компилеры ужасен. А определено это так что можно получить более 9000 грабель. Ряд кода на это кладет и все равно юзает. Потому что все остальные способы еще ужаснее. За это он становится непортабельным и этот арбалет - с термоядерным наконечником стрелы. Эта обугленная косточка - пятка кодера который пытался перенести сие на соседнюю платформу. Не прокатило.
7) Даже самый крутой статический анализатор не знает что вы намеревались дать в void* и было ли это валидно, и не порушит ли это память. Узнать это можно только рантайм чекерами типа asan, делающими из сей долбаный дотнет. А в математике указателей можно прострелить себе пятки более 9000 разных способов.
7.1) Сишники повернуты на сабмите неструктурированного хлама в функции и поэтому аргументы не подлежат какой либо автоматической проверке. Что ведет к морю багов.
7.2) И возврате такого же хлама. С тем же эффектом. В си вообще нельзя вернуть 2 значения по простому. На самом деле, правда, struct это позволяет. Но за это вас проклянут по линии ABI.
8) 1, 1U, 1UL и 1ULL это 4 довольно разные вещи. А 01 вообще - октальное число. Как и +/- 0 в плавучке. И граблями это может #%нуть мама не горюй.
9) Половину stdlib сей стоило бы запретить к использованию. Особенно олдовые функции работы с строками и неудачно сделанную аллокацию памяти где то забывают освободить, то дважды освобождают, то юзают после этого - и ничего хорошего конечно же не выходит.

...за последнюю неделю я зашиб минимум 2 ошибки работы с памятью (unchecked alloc) и чЮдную математику сабмитящую (в который раз!) в массив отрицательный "int" как индекс.

> О да, поэтому надо использовать раст, который разрабатывало 1,5 специалиста и орава
> студентов во время учебы.

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

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

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

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

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

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

Торвальдс и вся его шайка таки заинтересованы в отсутствии багов и неплохой работе своего кода. Я это вижу. И с сями это приблизилось к своим лимитам. В силу особенности конструкции сей. С11 немного улучшает это но - лишь маргинально. А у кернела есть более 9000 собственных костылей для компил-тайм чеков, воркэраундов сишной идиотеки и много чего еще. Это не значит что нас не задолбало i++'й раз изобретать вел с квадратными колесами.

> Только хруст не избавляет от багов, а только добавляет их.

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

>> В этом месте дидам надлежит познать тао antibug coding - или уйти.
> Так дедов нет уже. Не пишут они уже код. Деды это вы.

Нет, вон тот код с вон тем качеством - оставили таки мои предшественники. И я имею кое-что против такого уровня качества кода, такого структурирования апи, и проч. Потому что можно намного лучше. Но с сями это тяжко. Вплоть до того что if (i = 10) в сях может прокатить. И даже без варнингов если не повезет. Это ляп сразу на уровне дизайна конструкции ЯП.

> Для начала antibug coding должен быть читаемым, а не быть изотерическим ЯП
> с магическими символами из...начала двухтысячных.

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

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

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

>> Как исправивший ряд вулнов в их чудном коде говорю.
> Осталось дождаться пока ваше чудное исправление кто-то посмотрит и найдет в нем баг.

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

> И все это человеческие проблемы, которые раст может решить примерно никак.

А таки - какой-нибудь borrow checker или нормальные типы целых здорово снижают предпосылки для багов. На сях тоже можно сделать ряд забавных вещей - см что в рассылке сделали с GUARD для мутексов (почти RAII-style из плюсов но на сях). Однако уповает на гнутый экстеншн, в стандарте дефера для cleanup при выходе из видимости нетути. И вот так - в 20 раз меньше вариантов как облажаться с мутексом. А если его наимно попробовать как обычно в си - вот там можно откушать от души. И откушают.

> Только вот UB это по сути unsafe для разработчиков компиляторов. Но unsafe
> в расте это "модно и необходимо", а UB в си это "деды понаписали".

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

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

357. "Релиз ядра Linux 6.5"  +/
Сообщение от Аноньимъ (ok), 06-Сен-23, 00:57 
Долгих вам лет и здоровья.
На таких людях оно всё как-то ещё и держится.
Ответить | Правка | Наверх | Cообщить модератору

362. "Релиз ядра Linux 6.5"  +1 +/
Сообщение от Аноним (-), 06-Сен-23, 14:52 
> Долгих вам лет и здоровья.На таких людях оно всё как-то ещё и держится.

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

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

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

p.s. Linux достаточно интересная штука поучиться antibug приемам. Но им и самим нехило взять мастеркласс по смежным топикам.

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

358. "Релиз ядра Linux 6.5"  +/
Сообщение от Аноньимъ (ok), 06-Сен-23, 01:07 
> Эзотерика типа ады деланая академами - для системного програмизма непригодна от слова вообще. Пусть сами ей пользуются, перепрофилировавшись из теоретиков в системных кодеров, если им так угодно. Тогда глядишь их попустит ментальный булшит чутка.

Вроде всё не так там плохо.
А что на счет хаскеля например? Я недавно пробегался бегло по нему.

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

363. "Релиз ядра Linux 6.5"  +/
Сообщение от Аноним (-), 06-Сен-23, 14:55 
> Вроде всё не так там плохо.
> А что на счет хаскеля например? Я недавно пробегался бегло по нему.

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

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

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

368. "Релиз ядра Linux 6.5"  +/
Сообщение от keydon (ok), 06-Сен-23, 16:00 
> Ни то ни другое не маппится в нормальном виде на мой низкоуровневый
> системный мозг. Если вы хотите делать системщину на этом, и понимаете
> как оно - окей, делайте.

Хочу надежно и безопасно, но разбираться не хочу. Окай.

> Я придерживаюсь достаточно простой идеи: чем менее навороченны концепции, тем выше шанс
> что я и другие кодеры поймут что там творится и поймут
> правильно. Это делает код поддерживаемым, и спасает от целого класса багов
> "кодер неверно понял что делает этот код".

Поэтому буду использовать раст на LLVM и не буду понимать как же он спасет меня от багов и спасет ли?

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

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

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

374. "Релиз ядра Linux 6.5"  +/
Сообщение от Аноним (-), 07-Сен-23, 00:33 
> Хочу надежно и безопасно, но разбираться не хочу. Окай.

Хочу простой, предсказуемый, читаемый код БЕЗ навороченных концепций и абстракций. Не вызывающий разночтения у разных двуногих и проблемы майнтенанса. И чтобы рантайм, концепции и проч не стояли лишний раз на пути. Вот си - примерно это. Но с дурацкостями. А ады и хаскели это противоположный полюс, и почему надо из крайности в крайность шарахаться я не понимаю. Это контрпродуктивно и выглядит как обычная оверкомпенсация.

> Поэтому буду использовать раст на LLVM и не буду понимать как же
> он спасет меня от багов и спасет ли?

Предпочту GCC. И таки от вон тех сишных проблем - некоторые предпосылки для этого я вижу. А вот эзотерикой заниматься в мои планы не входит. Особенно в системшине. Более того я ни разу не видел на этом кода который бы вызвал желание в него сунуться или интересных мне проектов.

> Растоман не осилил хаскель? Ну как же, тут же максимально как вы
> любите - сильная типизация с автоматическим выведением типов, охраняющие выражения, чистые
> функции, гарантии для компилятора, математическая доказуемость...

Раст видите ли уловил некоторые идеи сишников. Как то не усложнять сущности без необходимости, нормальные целочисленные типы, таки - возможность гранд оверрайда где это реально надо - и отсутствие оверхеда за вот это все. Так что называя вещи своими именами он единственный реальный претендент на звании "второго системного ЯП".

...во всяком случае есть потуги писать на этом кернелы, бутлоадеры, фирмвары МК и при этом не выглядит совсем уж ужастиком. Когда вы на ваших хаскелях и адах это все покажете как оно, делом проиллюстрировав чем это лучше - будет разговор. А абстрактные блабла о достоинствах от тех кто судя по всему системщину не практикует - это о чем? Кто из вас хоть раз в жизни программировал DMA автомат? И как, сие очень удобно из вашего хаскеля было? Не, извините, DMA не умеет в лямбды. Он от сих до сих блок данных тасует. Ему интересны размер и адрес. А мне - контроль lifetime, дабы не вышло так что под автоматом пакет убрали уже и там что-то совсем иное.

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

Я не намерен шарахаться из крайности в крайность. Мне больше импонирует сбалансированный подход к решению проблем и итеративное заруливание known issues. Я считаю что это лучше в целом работает. Это так сложно понять?

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

380. "Релиз ядра Linux 6.5"  +/
Сообщение от keydon (ok), 08-Сен-23, 16:49 
> Хочу простой, предсказуемый, читаемый код БЕЗ навороченных концепций и абстракций. Не вызывающий
> разночтения у разных двуногих и проблемы майнтенанса. И чтобы рантайм, концепции
> и проч не стояли лишний раз на пути.

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

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

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

> Раст видите ли уловил некоторые идеи сишников.

Ага, вижу, самые худшие уловил и усилил, а мимо самых лучших прошел мимо.

> Как то не усложнять сущности без необходимости

Это в расте то? Не смешите.

> возможность гранд оверрайда где
> это реально надо

Это тот который не усложняет сущности?

> Так что называя вещи своими именами он единственный реальный претендент на
> звании "второго системного ЯП".

Он вообще не претендент. Еще лет 5 с ним повозюкаются, а через 10 никто и не вспомнит.

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

Толку то от этих потугов. Знаю ровно 2 работающих проекта на расте. Один аналог грепа, другой тимвивера. Все остальные проекты либо используются примерно нигде, либо в принципе не работают, либо давно заброшены.

> Я не намерен шарахаться из крайности в крайность. Мне больше импонирует сбалансированный
> подход к решению проблем и итеративное заруливание known issues. Я считаю
> что это лучше в целом работает. Это так сложно понять?

Променять си на еще более худший си, да, это тяжело для понимания.

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

384. "Релиз ядра Linux 6.5"  +/
Сообщение от Аноним (-), 11-Сен-23, 22:07 
> В общем-то я тоже этого хочу ближе к ассмеблеру, но увы, ничего похожего нет.

Zig/hare/C с минимальным ubsan (лезет даже в мелкие МК типа cortex m0/m3). В любом случае - шарахаться в противоположный полюс - такое себе.

> Функциональщина гораздо ближе к процессору чем может показаться и как раз таки
> избавляет от многих лишних абстракций.

К сожалению абстракции провоцирует навороченные, другие кодеры их потом не понимают или понимают неверно. Для совместной разработки - не вариант. По проектам и их состоянию это отлично видно. Почти все - (полу)дохлые проекты, с 1 кодером. Зачем оно такое?

> Ага, вижу, самые худшие уловил и усилил, а мимо самых лучших прошел мимо.

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

>> Как то не усложнять сущности без необходимости
> Это в расте то? Не смешите.

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

>> возможность гранд оверрайда где это реально надо
> Это тот который не усложняет сущности?

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

> Он вообще не претендент. Еще лет 5 с ним повозюкаются, а через
> 10 никто и не вспомнит.

Мне почему-то кажется что это у вас wishful thinking.

> Толку то от этих потугов. Знаю ровно 2 работающих проекта на расте.

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

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

Ну как бы да, часть этого добра сделано на волне хайпа. Ну, вон, librdvg. С свежим безопасным CVE из соседней новости, чего уж :). Хотя конечно мерзотная жирнолиба для веьманкового формата.

> Променять си на еще более худший си, да, это тяжело для понимания.

Чинит часть косяков. Наиболее задолбавших из. Вот и весь секрет. Остальные и так не смогли. Ну не, есть конечно zig/hare и еще парочка наподобие. Но у них своих траблов, главная из которых - у них там перетрясы еще злее.

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

369. "Релиз ядра Linux 6.5"  +/
Сообщение от Аноньимъ (ok), 06-Сен-23, 20:35 
Не думаю что есть проблема в понимании по крайней мере в связи с новороченностью концепций.

Системный софт успешно писали на смаллтаке и на Лиспе пишут прямо сейчас, хотя Лисп конечно очень простой, и для системщины хорошо иметь сильную систему типов.

Что даёт Хаскель и Ада.

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

Сильная типизация как раз сильно пониманию помогает.

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

373. "Релиз ядра Linux 6.5"  +/
Сообщение от Аноним (-), 07-Сен-23, 00:15 
> Не думаю что есть проблема в понимании по крайней мере в связи
> с новороченностью концепций.

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

> Системный софт успешно писали на смаллтаке и на Лиспе пишут прямо сейчас,

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

> хотя Лисп конечно очень простой, и для системщины хорошо иметь сильную
> систему типов.

Для системщины хорошо - делать то что попросил программер и не делать мозг. И предсказуемо работать с железом. А не вы#$%ываться с концепциями, абстракциями, всякими лямбда-заподвыподвертами и чем там еще. Там чем проще - тем надежнее и предсказуемее, в общем то. А заодно толпа народа прочекает что делается и правда что задумано. Но для этого они должны въехать в этот код.

> Что даёт Хаскель и Ада.

Как я уже сказал - можете програмить системщину на этом если хотите. Я этого за вас делать совершенно точно не буду. Как и въезжать в все ваши вы#$%ны с высокими концепциями. Цель системщины не показать что вы первый кодер на деревне а написать понятный, читаемый, предсказуемый код. Без разночтений его другими двуногими.

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

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

> Сильная типизация как раз сильно пониманию помогает.

Видите ли - иногда надо и гранд-оверрайд. С вполне легитимными целями. Простой пример: вот тут я могу хотеть рассмотреть пакет как массив - чтобы его отдать DMA автомату по (адрес, размер) - а вот там дербанить его на субкомпоненты, чтобы осмысленно поля кроить. Ну и какой у него при этом тип? В терминах си это "union" если что. И если жесткие типы вообще совсем зарубят эту идею - окей, инструмент встал на моем пути и нагнул решение задачи. И это не круто. А ключевая претензия к сям будет пожалуй "хреново определенный struct в стандарте". В том плане что не, взять и рассмотреть его поля как части struct - не то чтобы совсем нельзя, но за это очень даже может воздаться. А вот когда вы захотите с DMA автоматом, не понимающим ничего кроме (addr, len) поработать - я посмотрю как вы захотите крутые абстракции и жесткие типы. И чесать репу что в DMA автомат впрограмить при этом всем.

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

365. "Релиз ядра Linux 6.5"  –1 +/
Сообщение от keydon (ok), 06-Сен-23, 15:34 
> Пока еще нет. Но вообще рассматриваю идею выучить его когда в gcc
> будет нормальная поддержка и я пойму как обходиться без закладывания на
> стремные пакеты из реп от гугломайкрософтамазона.

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

> А таки у сей есть слабые стороны...

У всего есть слабые стороны.

> 1) Те доперли до данных фиксированой ширины. А не "int" е...чий! В
> сях этот рак вклинился очень глубоко. Поэтому в макросах, enum и
> проч возникает много вопросов "какой реально тип данных будет?!" и "безопасна
> ли такая математика вообще?". Особенно если учесть определение "int" в стандарте.

Потому что типов нет. Есть байтики, а ты сам можешь их интерпретировать. И раст и вообще всё именно так и работают. Где-то с большим контролем, где-то с меньшим. Нет у процессора знания что же туда положил программист на ДРУГОМ КОМПЬЮТЕРЕ НА ДРУГОЙ АРХИТЕКТУРЕ С НЕИЗВЕСТНЫМИ ВВОДНЫМИ. А в пределах одной программы и у сей никаких проблем нет. Компилятор знает на сколько байтиков у него int, а всякие извращенные типы инта используются крайне редко на редкоиспользуемых архитектурах (а не только x64 и arm как на расте). Более того именно из-за этого комитет по плюсам так долго мурыжил C++11 в котором ABI наконец решили поменять. И у раста будут точно такие же проблемы (если уже не случились). Но смузипогромистов не знакомых с ассемблером это конечно вряд ли волнует, для них программа это не инструкции, а типы и классы головного мозга.

> 1.1) Благодать с НОРМАЛЬНЫМИ типами вроде uintXX_t - на макросы и enum
> не распостраняется! По крайней мере в цивильном и контролируемом виде.

Не понял.

> 2) integer promotion в си работает совсем не так как представляло себе
> большинство кодеров. Почему это должно быть через такой @нус для меня
> загадка. А ваш код переживает -Wconversion без единого варнинга? Скажите честно!

Вот как раз integer promotion достаточно подробно описан в стандарте. Большинство кодеров (подходящее слово) очевидно не читали его и не собирались, но ВНЕЗАПНО он работает не так как они ОЖИДАЛИ. Ну знаете ли, многое работает не так как я ожидаю.  

> 3) UB. Извините но в си это за гранью добра и зла,
> стандартизаторы упростили жизнь себе в ущерб остальным. Даже wrap "int" -
> ub?! Потому что было минимум 2 формата хранения signed? А сам
> "int" - что угодно, от 16 битов и далее со всеми
> остановками? И сколько кода готово все возможные варианты "int" без фаллаута
> схарчить?! Примрено нисколько?! Круто! А мы точно хотели такие стандарты и
> такой код? Потому что он разваливается от тыкания палочкой.

Уже обсуждалось. Специфичные условия чтобы развязать руки разработчикам компилятора. В реальной жизни в рамках одной программы проблемы не встречается, компилятор знает что у него UB и как на него реагировать, еще и расскажет об этом. А то что байтики на разных компьютерах могут перекладываться по-разному, так это ВНЕЗАПНО всегда будет, хотя бы из-за разных архитектур (собственно поэтому и добавили UB). Мне и самому не нравится концепция UB, я считаю ее неудачной (да и авторы тоже). Но сишники уже на нее наступили, а раст...ее повторил! При этом UB в си это плохо-плохо-как-так-можно, а unsafe в расте который ТОЖЕ САМОЕ это почему-то благо. Лицемерие, сэр.

> 4) Переменная типа "enum" в си жрет любой хлам. Даже зачастую без
> варнинга. Круто, но можно это и получше сделать так то.

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

> 5) В сях аннотации массивов весьма декоративные. В функцию можно с кормить
> func(arr[10]) но реально это - указатель. Без малейшего намека на bounds
> checking. Продвинутые анализаторы в принципе могут поспорить с этим но по
> дефолту это так не работает и аннотация смысла не имеет. Можно
> через struct сделать - но тогда это крайне неэффективно будет.

Как и в любом другом языке. И в расте тоже (кто-то из растоманов даже ПРЕДЛАГАЛ ОТКЛЮЧАТЬ ПРОВЕРКУ ВЫХОДА ЗА ПРЕДЕЛЫ МАССИВА ДЛЯ УСКОРЕНИЯ ПРОГРАМММ НА РАСТЕ, ну просто верх лицемерия). Внезапно и в сях ты можешь использовать типы с bounds checking и подозреваю при грамотно написанном коде производительность будет выше чем в расте.

> 6) Struct в си кстати отдельная боль. На уровне апей и абей
> профачено все что можно профачить. Поэтому если вы мечтали о структурированом
> апи, да еще с предсказуемым аби - забудьте. Хотя затрахавшиеся люди
> все равно стали нормальные апи с "struct" делать. Потому что неструктурированные
> апи без аннотации намерений кодера ведут к багам.

Такие абстрактные вещи сказать про любой проект/ЯП и т.д.. Про то что у N отстойное апи я слышу всю жизнь. У N меняются названия, языки, разработчики, платформы, годы разработки, но смысл всегда один "неструктурированный, неудобный, непонятный апи", даже сейчас во времена протобафа. Очевидно это больше психологическая проблема, чем технологическая.

> 6.1) Битовые поля в оных. Это грабледром. Код который генерят компилеры ужасен.
> А определено это так что можно получить более 9000 грабель. Ряд
> кода на это кладет и все равно юзает. Потому что все
> остальные способы еще ужаснее. За это он становится непортабельным и этот
> арбалет - с термоядерным наконечником стрелы. Эта обугленная косточка - пятка
> кодера который пытался перенести сие на соседнюю платформу. Не прокатило.

Вот тут согласен, все популярные компиляторы  это !@#$%^, особенно gcc. Ну а раст еще больше этого !@#$%^ добавляет и внезапно работает на... сишном llvm. Ну т.е. да, разобраться что и почему генерит компилятор это проблема, а раст ВСЕ ЕЩЕ УСЛОЖНЯЕТ.

> 7) Даже самый крутой статический анализатор не знает что вы намеревались дать
> в void* и было ли это валидно, и не порушит ли
> это память. Узнать это можно только рантайм чекерами типа asan, делающими
> из сей долбаный дотнет. А в математике указателей можно прострелить себе
> пятки более 9000 разных способов.

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

> 7.1) Сишники повернуты на сабмите неструктурированного хлама в функции и поэтому аргументы
> не подлежат какой либо автоматической проверке. Что ведет к морю багов.

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

> 7.2) И возврате такого же хлама. С тем же эффектом. В си
> вообще нельзя вернуть 2 значения по простому. На самом деле, правда,
> struct это позволяет. Но за это вас проклянут по линии ABI.

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

> 8) 1, 1U, 1UL и 1ULL это 4 довольно разные вещи. А
> 01 вообще - октальное число. Как и +/- 0 в плавучке.
> И граблями это может #%нуть мама не горюй.

Так ты же можешь выбрать что-то одно и использовать. А остальное не использовать. Ну и в расте не то чтобы сильно лучше, например 0b1111_0000. А еще в расте есть юникод, который нехило так добавляет интересных применений в коде.

> 9) Половину stdlib сей стоило бы запретить к использованию. Особенно олдовые функции
> работы с строками и неудачно сделанную аллокацию памяти где то забывают
> освободить, то дважды освобождают, то юзают после этого - и ничего
> хорошего конечно же не выходит.

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

> ...за последнюю неделю я зашиб минимум 2 ошибки работы с памятью (unchecked
> alloc) и чЮдную математику сабмитящую (в который раз!) в массив отрицательный
> "int" как индекс.

А я видел 2 аварии, переводим всех водителей машин на самокаты? Примерно такая же логика у растоманов. "А машинам можно будет ездить только по unsafe дорогам" !@#$%, кэп, итак все нормальные люди так уже и делают.

> Ну он по крайней мере решает ряд осточертевших проблем сей.

Пока ни одну не услышал.

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

Уже видно.

> Конечно же с ограничениями. И длииииинный список рулесов типа MISRA какой намекает
> что половина этого должна была быть вбита в стандарт, с расчисткой
> от UB, недоговорок и маразма. Но это не было сделано. Поэтому
> наш софт норовит нас отыметь.

Если вы пишете софт для АЭС на сях, то у меня плохие новости. И на расте у вас будут точно такие же проблемы.

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

Не подскажешь где ваш софт используется, может я успею переехать?

> RT_LINUX к раст не относится - но намекает что линух очень хотят
> юзать для управляющих систем толпа народа.

Так он не для управляющих систем. Он для "типа управляющих систем". Т.е. какому-то музыканту ЦАП наверное заменит, а вот для чего-то серьезного надо использовать специализированные RTOS. Т.е. RT в линуксе это "мы попробуем подтюнить линукс чтобы снизить задержки, но ничего не гарантируем". Где-то применимо, но далеко не там где нужны реальные RTOS.

> А раст... некоторые кодеры ядра полагают что он им позволит лепить меньше
> багов и писать более читаемый и майнтенабельный код. И они имеют
> определенный пойнт.

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

> И с сями это приблизилось
> к своим лимитам. В силу особенности конструкции сей. С11 немного улучшает
> это но - лишь маргинально.

Вот только лучше пока не придумали.

> А у кернела есть более 9000
> собственных костылей для компил-тайм чеков, воркэраундов сишной идиотеки и много чего
> еще. Это не значит что нас не задолбало i++'й раз изобретать
> вел с квадратными колесами.

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

> Но
> у него есть предпосылки есть ряд вещей сильно лучше чем си.

Пока ни одну не услышал, зато есть куча проблем, от которых походу никто не собирается избавляться к расте. Раст это не современный язык, это домашний проект из двухтысячных который по-быстрому попытались привести к чему-то похожему на поделия конца двухтысячных, но который подхватили маркетологи и довольно успешно зафорсили. Примерно то же самое было с php, ничем хорошим это не закончилось. Но php хотя бы был хорош как темплейтер в свое время, а раст просто предлагает все переписать на раст не предлагая ничего взамен кроме как переставлять кровати (unsafe, встроенный в компилятор линтер, встроенные проверки в стандартные типы, да этот список даже смешно звучит, раньше бы я подумал что это юмористический язык). Раст это не будущее, не решение проблем си (которые конечно есть, но в основном не те которые вы назвали).

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

Ваши предшественники это не деды. Это вы. Деды это Столлман, Ритчи, можно наверное Линукса туда запихнуть. А 35летний мужик который уволился перед вами это ваш современник и вероятно он и дальше пишет код в другой шаражке.

> Это ляп сразу на уровне дизайна конструкции ЯП.

А ляпы в конструкциях раста вас не смущает? Или итераторы вместо индексов (которые тоже есть в расте) существенно меняют дело?

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

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

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

Похвальное качество но раст в этом не помогает.

> UB это UB. Это не unsafe, это х-вые стандарты. И только. Если
> что я махровый сишник повернутый на антибаги.

Который не знает что Linux RT это не RTOS и вероятно не знает альтернатив? Который не знает как пишут софт с особыми требованиями к надежности? Который знает проблемы указателей и стандартных типов, но не знает современных альтернатив и не использует их? Который ругает си за проблемы, которых фактически нет у практикующих разработчиков, но про которые пишут новички столкнувшись с проблемами потому что учились по учебникам 1980ых переведенных в РФ в 2000ых? Вы либо студент, либо начинающий разработчик какой-то шаражки, либо пришли из какого-нибудь особо высокоуровнего языка вроде джавы и не особо развивались.

Практически все что вы назвали сводится к теоритическим проблемам. Их часто ругают, но по факту они не столь влияют на работу. UB ну есть такое, есть предпоссылки почему они попыли в стандарт, стандарт не описывает как с ними работать, потому что не должен, реализации довольно успешно их обрабатывают. Да, можно встретить на конференции как какой-нибудь проженный сишник ругается на UB в стандарте в какой-нибудь специфичной ситуации из которой он вполне успешно на практике выходит. Встроенные типы си из коробки были рассчитаны на производительность и простоту, а не на разработку надежного кода, а сейчас просто являются наследием. Для этого есть отдельные либы, есть отдельные гайдлайны по современному безопасному кодингу, потому что применений множество и разработчики стандарта си не ограничивают применение. Вот например регэкспы - кому-то нужны быстрые проверяемые, кому-то нужны быстро компилируемые, кому-то с определенным функционалом, а кому-то с наименьшим количеством потребляемых ресурсов, кому-то под опеределнную архитектуру, а кому-то под определенные данные. Что должен сделать разработчик ЯП?
1) Ограничить оптимизации компилятора (явно прописать какие типы и как должны использоваться и сколько байтов в них должно быть и все равно не достигнуть бинарной совместимости на разных платформах), зато без UB
2) Ограничить сферу применения (по сути написать фреймворк по конкретную задачу, как сделали в php, тогда ЯП не будет способен использоваться в других сферах)
3) Описать все варианты (нереально, по сути сводится к п.2 только с переусложеннным ЯП, в некотором роде плюсы частично следовали этой логике и раст ее частично применяет, тот же safe/unsafe это попытка совместить две области).
4) Описать только то что явно понятно (и получить UB, а реализацию оставить на откуп компиляторам)
Теперь уберем первый пункт потому что непонятно какая архитектура будет через 5-10 лет. Теперь уберем второй пункт потому что си это язык общего назначения. Теперь уберем третий пункт потому что си это язык общего назначения. Прошу, выбирайте.

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

В целом согласен. Но на мой взгляд комитет просто видит свою цель в строительстве нового языка, а в неполомании текущего. Очевидно что как только комитет начнет ломать ABI (как раст), то на си все сразу забьют, поэтому он вынужден ломать оооочень медленно почуть-чуть, чтобы жильцы (и это не хипстеры-студенты, а целые устоявшиеся отрасли) успели переехать. С другой стороны на си итак рано или поздно забьют. Но я надеюсь что за это время придет что-то поадекватнее и посовременней раста и желательно без корпораций которые будут полностью контролировать закулисье ЯП.

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

376. "Релиз ядра Linux 6.5"  +/
Сообщение от Аноним (-), 07-Сен-23, 02:55 
> Никак, раст это гугломайкрософтамазон, избавление от их влияния уже проходили например
> в андройде, ничем хорошим это не закончилось.

Ну насколько я вижу по librust-* в дебиане, прошаренные господа с своим путем на все свой антидот найти в принципе могут, если захотят. Но как вариант - мне может зайти что-то типа zig или hare. Но точно не ады с хаскелями, блин.

> У всего есть слабые стороны.

И вопрос в том насколько оно далеко от моих хотелок, соответственно. И насколько проблемы под интересную мне проблематику фиксятся. А еще мне нравится curly bracket.

> Потому что типов нет. Есть байтики, а ты сам можешь их интерпретировать.

У процов нативно есть юниты N байтов за присест, т.е. u16/u32/u64/... - и при этом еще начинает интересовать видение проца в регистре vs в оперативе. Возникает такая штука как endianess. Это не пустой звук, если я пакет в DMA зарядил. Он то шлет "как в RAM было". А не как в регистрах считалось. А если мы в сериальный интерфейс данные шлем, на самом нижнем уровне кроме этого еще вопрос и какой _бит_ каждого _байта_ первый. Даже байт можно слать по разному. Старшим битом вперед или младшим ;).

А в C "int" трабл в том что мы не знаем сколько там битов. И байтов. Ведет к эпикфейлам в анализе граничных условий. А если кто удумает мандатом стандарта воспользоваться... ну вот на AVR можете заказать 16-битный int. Как вы думаете сколько кода потом работать будет правильно? По стандарту можно же. Де факто половина кода сломается.

> ВВОДНЫМИ. А в пределах одной программы и у сей никаких проблем нет.

Зато как только IO с внешним миром (сеть, файлы, интерфейсы, ...) становится очень уж не очень. Как платформенно нейтрально сериализовать "int"?! Никак?! Т.е. надо отдельно договориться что там столько-то битов? О конкретном формате signed? А в лоб в "int" вообще нини? Теперь вы догадываетесь почему появились (u)intXX_t... ибо "int" системщиков заманало в край на самом базовом уровне: мы даже не знаем хватит ли точности переменной для работы с вот этим полем пакета, например.

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

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

> (а не только x64 и arm как на расте).

Что-то мне подсказывает что gccrs будет уметь почти все что умеет GCC. Минус совсем заброшенные архитектуры конечно. Во всяком случае был тут один кадр пытавшийся под AVR на расте. Ну а вы можете показать как под такого уродца на хаскеле и аде получается. У того гражданина хоть что-то получалось.

> (если уже не случились). Но смузипогромистов не знакомых с ассемблером

А, теперь я понимаю - вы шарахаетесь от асма в хаскел. Без особых промежуточных вариантов. Знакомый антипаттерн. Предпочитаю более сбалансированные варианты.

>> 1.1) Благодать с НОРМАЛЬНЫМИ типами вроде uintXX_t - на макросы и enum
>> не распостраняется! По крайней мере в цивильном и контролируемом виде.
> Не понял.

Что бы вы ни сделали, препроцессор не оперирует НОРМАЛЬНЫМИ, ПРЕДСКАЗУЕМЫМИ типами вроде "uint16_t" при вычислениях! Все числовые константы которые в нем встречаются (да, он умеет в математику и почти-тюринг-полный) работают более-менее эквивалентно "классическим" типам сей. Зафорсить там конкретную битность математики как C99? Щаз! И "enum" определен весьма фривольно, вкатив -Wconversion можно узнать много нового о своем коде. И как он делал не то что вы себе вообразили и не так. Зафорсить enum в конкретный тип? И даже с конкретными диапазонами? Чтобы баги в заполнении многочисленных констант ловить? Ишь размечтались. Существуют весьма неортодоксальные трюки с препроцессором позводяющим все-равно запилить компилтайм-чеки, и САБЖ даже даст мастеркласс как это. Но это через ж... в левый глаз и выглядит довольно мерзко в коде. В С11 еще компилтайм ассерты но препроцессор может и попродвинутее чем это, в большем числе случаев.

> Вот как раз integer promotion достаточно подробно описан в стандарте.

Да. Но он все равно контринтуитивный, дурацкий, и часто делает совсем не то что ожидал кодер.

> Большинство кодеров (подходящее слово) очевидно не читали его и не собирались,

И это было большой ощибкой с их стороны.

> но ВНЕЗАПНО он работает не так как они ОЖИДАЛИ. Ну знаете ли, многое
> работает не так как я ожидаю.

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

>> такой код? Потому что он разваливается от тыкания палочкой.
> Уже обсуждалось. Специфичные условия чтобы развязать руки разработчикам компилятора.

Можно создать море проблем на ровном месте. Это один из способов - и это фигово. Я за то чтобы подкрутить в очередном C2x спеки и - прибить такой булшит на корню. Иначе раст прибьет сишников, вон то никуда не годится.

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

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

> компилятор знает что у него UB и как на него реагировать,

А надо чтобы знал програмер. И имел конкретные ожидания поведения. Одинаковые на разных платформах. Тогда будет меньше глупых багов в математике.

> могут перекладываться по-разному, так это ВНЕЗАПНО всегда будет, хотя бы из-за
> разных архитектур (собственно поэтому и добавили UB).

И с этим явно перестарались. В ущерб всему остальному. А вот это уже фэйл.

> Мне и самому не нравится концепция UB, я считаю ее неудачной (да и авторы тоже).

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

> Но сишники уже на нее наступили, а раст...ее повторил!

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

> Уже описывал. Ну используй другой класс,

В сях нет классов, на минуточку.

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

В сях нет исключений. Более того - это не самая удачная идея в кернелах, бутлоадерах и особенно фирмварях. Но я бы посмотрел на ваш фэйс когда ECU авто на скорости за стольник в исключение уйдет, и как вы это оцените по достоинству. Мы, кажется, про системщину? :)

> если байтики не похожи на класс, вот только заплатишь за это производительностью.

В системщине я не ОК с оверхедом в run time. И с исключениями тоже. Вы точно системщик? Кому и зачем нужны тормозящие и непредсказуемо фэйлящие системы?

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

Сгородив пачку проверок и предвычислений препроцессором я готов поспорить с этим утверждением. А Zig может предвычислить произвольное выражение на этапе сборки используя основной синтаксис ЯП. Так что наблюдаемые факты не подтверждают вашу теорию. И хотя это окучивает частные случаи, спасает от множества багов и/или сильно оптимизирует код.

> Ну а в рамках одной программы ты внезапно можешь этого не делать.

Вы задолбали одной программой. Даже в пределах 1 ОС программ сейчас сильно более 1 и они даже могут взаимодействовать. Если даже забыть про файлы, сеть, интерфейсы, и все такое. Хотя если про это все забыть то что останется то - особенно в системщине?

> Как и в любом другом языке. И в расте тоже

Моя претензия к сям что они по факту 100% сливают аннотацию без какого либо использования. А нехило бы обязать компилеры детектить левые доступы как минимум при предвычисляемых сценариях. ЧСХ вещи типа LTO optimizer отлично в курсе всех краевых условий. Только наружу знание вывесить не могут. В этом месте внешний интерфейс сей из стандарта клинит state of art компилеров.

> ты можешь использовать типы с bounds checking и подозреваю при грамотно
> написанном коде производительность будет выше чем в расте.

В сях нет типов с встроенным bounds checking, а если его в рантайм делать получится, извините, дотнет какой-то. Хотя для ряда статических сценариев когда и размер массива и индекс известны можно и проверить такие вещи. LTOшный оптимизер так половину кода выкидыает, ДОКАЗАВ что энные ветки кода никак не могут вызываться во всей программе вообще.

> Такие абстрактные вещи сказать про любой проект/ЯП и т.д..

В сях видите ли вообще по сути нет ABI на struct. Нельзя заявить struct в апи и потом получить interop в сколь-нить гарантированном виде. Более того - у gcc для ARM есть минимум 2 варианта ABI как передавать структы. Хотите вызвать функцию "bios" (boot loader, ...) с культурным, структурированным апи из основной фирмвари? Нннну, хотеть не вредно. Как вам требование что бут и фирмвара будут обязаны собираться 1 компилером с 1 набором флагов? Круто и интероперабельно. Давайте, еще раз булшит про "одну программу". Бутлоадеры же не нужны, а код реюз для лохов. Или нет?!

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

Да вот нормальные сишники таки взмахнули факами - и таки struct всякие в апях юзать стали. А чтоб эффективно - как указатель. На вот именно конкретный тип. С typedef даже не так плохо получается. И код не очень мерзкий, и левак ему в отличие от void* уже не впаришь. Вот так у них в коде багов на порядок меньше чем у кодеров с "одной программой" видимо подвешенной в сферическом вакууме а потому не обрабатываюшей внешние данные вообще никак.0

> Вот тут согласен, все популярные компиляторы  это !@#$%^, особенно gcc.

Это связано в основном с дурным определением этого хлама в стандартах. А сами struct плохо определены по выравниванию. Но вот тут есть __attribute__(()) и прочие pragma, а то что не стандартно... ну... если у вас не GCC, и даже не шланг - suxx to be you, just f...g die! Как-то так, да. Потому что packed struck форсанутый на конкретные адреса - позволяет таки по простому поработать с чем-то типа хардварных регистров и их вот блин реально отдельных битов.

> сишном llvm. Ну т.е. да, разобраться что и почему генерит компилятор
> это проблема, а раст ВСЕ ЕЩЕ УСЛОЖНЯЕТ.

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

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

У unsafe есть жирный плюс. Это большой красный флаг места где я должен трижды проверить код этого господина что все ЗБС. А у сишника void* с безразмерным нечто - норма жизни, удачи в проверках что они сделали и как это совпало с намерениями вообще.

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

У сей препроцессор тоже видите ли не совпадает по синтаксису с основным яп. И никакого проигрыша нет. Дада, и "uint16_t" препроцессор сей сожрать в принципе не может. Мне больше всего нравится как это в zig сделано. Просто компилтайм вычисления, сразу основным ЯПом. Самое логичное решение, и самое крутое и гибкое.

Как злостному юзеру макро в С мне показалось что хрустиковские макро мощнее сишных. Хоть и инопланетнее в замен.

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

Это вопрос отсутствия багов и кода который не выглядит как УГ.

> Так ты же можешь выбрать что-то одно и использовать.

В этом месте мы узнаем что one size doesnt fits all. Более того - что такое 1U может быть еще и платформозависимо, бжад. Не, конечно можно везде 1ULL ввернуть. К сожалению это настолко круто промотит все вычисления что резко деоптимизирует код. В самых критичных местах, типа операций с битиками регистров. Самое то - заякорить всю работу с периферией в пару раз. И вот выбирайте дескать между тормозами и прострелом пяток, дорогой сишник. А поприкольнее выбор нельзя ли? Чувствую что можно.

> 0b1111_0000.

Это кстати как раз весьма читабельно. А в именно сях это легально только в C23, кажется, и без разделителя. Хотя конечно все МКщники юзали GCC экстеншн со времен 99 и плевали на формальности. Потому что иные способы выражения констант для регистров железа не очень информативны.

> О, первый нормальный наброс и то случайный. В си и правда есть
> проблемы со строками. Их много. Конечно они не просто так появились

А потому что функции stdlib это окаменелое дерьмо мамонта. Которое давно надо было списать в утиль. Те варианты которые не чекают размер буфера calle'а и выносят все.

> используй умные указатели.

В сях нет никаких умных указателей. Можно конечно скроить себе самому много чего - даже функции для работы с строками. Что половина софта и делает. А дырявый мусор в stdlib зачем?!

> А я видел 2 аварии, переводим всех водителей машин на самокаты?

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

> по unsafe дорогам" !@#$%, кэп, итак все нормальные люди так уже и делают.

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

> Пока ни одну не услышал.

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

И не надо меня плсами кормить. Это здоровый страшный урод. Который не си. И которому совсем не место в кернеле, фирмвари МК и проч. Во избежание. Потому что вот эти ваши экспешны там - ну совсем не айс например.

> Уже видно.

Ну дык, если GCC разовьется на эту тему - я подумаю. Кент вон тоже так считает. Я такой далеко не один имхо.

> Если вы пишете софт для АЭС на сях, то у меня плохие
> новости. И на расте у вас будут точно такие же проблемы.

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

> Не подскажешь где ваш софт используется, может я успею переехать?

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

> Так он не для управляющих систем. Он для "типа управляющих систем".

И теперь мы собираемся избавиться от "типа" повысив гарантии...

> использовать специализированные RTOS. Т.е. RT в линуксе это "мы попробуем подтюнить
> линукс чтобы снизить задержки, но ничего не гарантируем". Где-то применимо, но
> далеко не там где нужны реальные RTOS.

В линух уже довольно много чего вкомитили на тему именно выдачи достаточно жестких гарантий, вида что на интервале X программа будет выполняться не менее Y. Это именно ртосовские гарантии. И там очень много оговорок и специфики. Вплоть до рефактора кода, блин, консолей. Дабы printk оптом таки не смог заякорить реалтаймный софт.

А когда мне жесткое реальное время надо - ну я могу себе фирмварь МК накодить. Там вообще весь камень может быть посвящен задаче и я могу менее чем микросекунду потрогать руками.

> Некоторые компании хотели бы больше контроллировать ядро и раст это очередная попытка,

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

> раст явно не читаемый (си, кстати тоже).

Ну уж не фанатам хаскеля про читаемый код рассуждать.

> Вот только лучше пока не придумали.

А таки для меня раст смотрелся бы апгрейдом по ряду моментов. И даунгрейдом по другим. Но как я вижу в истории с кернелом - они не чужды решению проблем. Выгодное отличие от ISO.

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

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

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

А таки для меня это выглядит как инкрементальный фикс ряда проблем сей. Не, ваши ады и заскелы сеье оставьте, это не ко мне с их парадигмами и синтаксисом.

> Примерно то же самое было с php, ничем хорошим это не закончилось.

...но ничего лучше phpbb для форумов и mediawiki для вики так никто и не смог.

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

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

> Раст это не будущее, не решение проблем си (которые конечно есть, но
> в основном не те которые вы назвали).

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

> Ваши предшественники это не деды. Это вы. Деды это Столлман, Ритчи, можно
> наверное Линукса туда запихнуть.

А кто сказал что вот у Столлмана такой уж офигенный код? И нет если багу влепил некто возрастом почти с столлмана и еще в C89 - это, очевидно, был не я. Я вообще в принципе менее чем C99 не оперирую. Такая ерунда.

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

Это реверанс про XFSника чтоли? А то передо мной увольняться некому - я сам себе режиссер.

> А ляпы в конструкциях раста вас не смущает? Или итераторы вместо индексов
> (которые тоже есть в расте) существенно меняют дело?

Хм, сделать итератором аналог отрицательного индекса в массив я бы уже напрягся. Как и последствия от всего сэмулировать в виде шарахания в совсем левую память.

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

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

> человека с узким кругозором (иначе он бы уже знал про питон например),

Я не желаю иметь ничего общего с питоном. И это уж точно не системный ЯП.

> Похвальное качество но раст в этом не помогает.

Это не вам судить. Да и работоспособных рецептов лучше вы не предложили.

> Который не знает что Linux RT это не RTOS

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

> и вероятно не знает альтернатив?

Знает но - крепко не любит иметь с ними дело. Для себя я предпочитаю вообще выпихнуть low level на мк а линух - координатор. При этом можно избавить себя от сомнительной радости иметь дело с недо-ос.

> Который не знает как пишут софт с особыми требованиями к надежности?

И только опеннетовские посетители все в белом и мастеркласс в скромности дадут.

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

Удачи убедить препроцессор рассматривать числа как именно вот те современные типы. Ах, этот крап все равно будет трактовать 1ULL как нечто близкое к (unsigned long long) в результате?

> Который ругает си за проблемы, которых фактически нет у практикующих разработчиков,

Длинный список CVE что-то с вами не согласен.

> но про которые пишут новички столкнувшись с проблемами потому что учились
> по учебникам 1980ых переведенных в РФ в 2000ых?

Я уж точно не учился по этому хламу. А antibug для сей в рф вообще никто не преподаст. Этого знания у россиян вообще мизер. У вас больше апломба, в что-то практическое он не транслируется.

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

"Играл но не угадал ни 1 буквы. Ход переходит к анониму!" :)

> Практически все что вы назвали сводится к теоритическим проблемам.

Это _практические_ проблемы доставшие меня и вон тех кодеров кернела. Но вы можете конечно рассказывать всем что проблем нет. Только не обижайтесь на то что за этим последует.

> Их часто ругают, но по факту они не столь влияют на работу. UB ну
> есть такое, есть предпоссылки почему они попыли в стандарт,

Мне похрен на предпосылки если это ведет к такому числу багов, вулнов и т.п. - пора пересмотреть эти предпосылки. И либо радикально починить - либо нехай вон те из rust, hare, zig и т.п. порубятся за звание "более хорошего си" если ISO совсем уж импотенты стали.

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

Я не желаю видеть станларты с кучей UB, implementation defined и прочего крапа. И хочу чтобы long standing issues были решены. ISO это либо обеспечит, либо его сделают obsolete те же хрустики - или "убийцы хруста". Там уже очередь за головами - и таки имея на то веские причины. Все уже поняли что можно сильно лучше чем вон то, сохранив общую идею. Что бы вы там не вещали.

> Встроенные типы си из коробки были рассчитаны на производительность и простоту,

Это все булшит бинго. Даже просто прочитать "int" из файла это нечто ... почти нереализуемое в нормальном кроссплатформенном виде. И это уж точно не эталон простоты и производительности будет если файло захочется читать на других платформах.

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

Да и как по мне настало время либо починить long standing BS который нагибает девов в планетарном масштабе - либо вон те займут нишу.

> кому-то под опеределнную архитектуру, а кому-то под определенные данные. Что должен
> сделать разработчик ЯП?

А ничего - опцией/сторонней либой/etc. В этом смысле то что си не стали чрезмерно отращивать stdlib как раз умный ход.

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

Тогда их доломают хрустики или убийцы хруста. Сделав "как си только лучше и без топовых грабель оного". Выбор за ними как им там угодно. Я не вижу смысл принимать новый стандарт если он не чинит старые проблемы. Кому это надо и зачем?

> Очевидно что как только комитет начнет ломать ABI (как раст),

Да оно и так сломаное - а какой у struct abi? А, implementation defined, да еще с абы каким выравниванием по дефолту? Ох, круто, это конечно такое ABI...

> (и это не хипстеры-студенты, а целые устоявшиеся отрасли) успели переехать.

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

> и желательно без корпораций которые будут полностью контролировать закулисье ЯП.

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

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

379. "Релиз ядра Linux 6.5"  +/
Сообщение от keydon (ok), 08-Сен-23, 14:28 
> Ну насколько я вижу по librust-* в дебиане, прошаренные господа с своим
> путем на все свой антидот найти в принципе могут, если захотят.

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

> Но как вариант - мне может зайти что-то типа zig или
> hare. Но точно не ады с хаскелями, блин.

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

> И вопрос в том насколько оно далеко от моих хотелок, соответственно. И
> насколько проблемы под интересную мне проблематику фиксятся.

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

> А еще мне нравится
> curly bracket.

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

> У процов нативно есть юниты N байтов за присест, т.е. u16/u32/u64/... -
> и при этом еще начинает интересовать видение проца в регистре vs
> в оперативе. Возникает такая штука как endianess. Это не пустой звук,
> если я пакет в DMA зарядил. Он то шлет "как в
> RAM было". А не как в регистрах считалось. А если мы
> в сериальный интерфейс данные шлем, на самом нижнем уровне кроме этого
> еще вопрос и какой _бит_ каждого _байта_ первый. Даже байт можно
> слать по разному. Старшим битом вперед или младшим ;).

Вот запомни свои слова.

> А в C "int" трабл в том что мы не знаем сколько
> там битов. И байтов. Ведет к эпикфейлам в анализе граничных условий.
> А если кто удумает мандатом стандарта воспользоваться... ну вот на AVR
> можете заказать 16-битный int. Как вы думаете сколько кода потом работать
> будет правильно? По стандарту можно же. Де факто половина кода сломается.

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

> Зато как только IO с внешним миром (сеть, файлы, интерфейсы, ...) становится
> очень уж не очень. Как платформенно нейтрально сериализовать "int"?! Никак?! Т.е.
> надо отдельно договориться что там столько-то битов? О конкретном формате signed?
> А в лоб в "int" вообще нини? Теперь вы догадываетесь почему
> появились (u)intXX_t... ибо "int" системщиков заманало в край на самом базовом
> уровне: мы даже не знаем хватит ли точности переменной для работы
> с вот этим полем пакета, например.

Когда ты взаимодействуешь с внешним миром ты либо контроллируешь данные, либо нет. Если контроллируешь, то для тебя нет разницы что с внешним миром ты взаимодействуешь или в рамках одной программы, ты всегда знаешь в каком формате тебе придет, сколько байт и в каком порядке. Если ты не контроллируешь данные, то тебе в любом случае придется договариваться или перепроверять. Более того те данные которые к тебе отправились могут не быть теми данными которые пришли в твою программу. Например может поменяться порядок. Ты просто сериализуешь по выбранному протоколу и у тебя нет никаких проблем. На любой архитектуре на любом ЯП. Если в протоколе указн BE то преобразуешь (если требуется в BE), если указано 8 бит на поле, то делаешь необходимые преобразования для своей архитектуры, своего компилятора, etc.

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

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

> Что-то мне подсказывает что gccrs будет уметь почти все что умеет GCC.
> Минус совсем заброшенные архитектуры конечно. Во всяком случае был тут один
> кадр пытавшийся под AVR на расте.

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

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

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

> А, теперь я понимаю - вы шарахаетесь от асма в хаскел. Без
> особых промежуточных вариантов. Знакомый антипаттерн. Предпочитаю более сбалансированные
> варианты.

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

>[оверквотинг удален]
> типам сей. Зафорсить там конкретную битность математики как C99? Щаз! И
> "enum" определен весьма фривольно, вкатив -Wconversion можно узнать много нового о
> своем коде. И как он делал не то что вы себе
> вообразили и не так. Зафорсить enum в конкретный тип? И даже
> с конкретными диапазонами? Чтобы баги в заполнении многочисленных констант ловить? Ишь
> размечтались. Существуют весьма неортодоксальные трюки с препроцессором позводяющим
> все-равно запилить компилтайм-чеки, и САБЖ даже даст мастеркласс как это. Но
> это через ж... в левый глаз и выглядит довольно мерзко в
> коде. В С11 еще компилтайм ассерты но препроцессор может и попродвинутее
> чем это, в большем числе случаев.

Потому что все что делает препроцессор это делает автозамены строк. Просто подстановщик. Отсюда и все его ограничения. Собственно поэтому он и ПРЕпроцессор. Вообще это дикий костыль, одно из худших решений в си, но раст СКОПИРОВАЛ его и СДЕЛАЛ ЕЩЕ ХУЖЕ.

> Да. Но он все равно контринтуитивный, дурацкий, и часто делает совсем не
> то что ожидал кодер.

Если кодер не читал и не учил, то понятно что он НЕ ОЖИДАЛ. Ну тут ССЗБ.

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

У вас одни ожидания, у меня другие. Чьи именно ожидания инструмент не должен обламывать?

> Можно создать море проблем на ровном месте. Это один из способов -
> и это фигово. Я за то чтобы подкрутить в очередном C2x
> спеки и - прибить такой булшит на корню. Иначе раст прибьет
> сишников, вон то никуда не годится.

В целом я согласен. Вот только сейчас ясно что раст никого не прибьет кроме себя.

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

Никто и не обещал что оно будет работать. Либо контролируешь свои данные (например используешь протокол), либо нет. И раст тут не поможет.

> А надо чтобы знал програмер. И имел конкретные ожидания поведения. Одинаковые на
> разных платформах. Тогда будет меньше глупых багов в математике.

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

> И с этим явно перестарались. В ущерб всему остальному. А вот это
> уже фэйл.

Я тоже так считаю, но это скорее теоритическая проблема, чем практическая.

> Ну так либо починить - либо сишников замнет раст. Не вижу тут
> места для компромиссов, наслаждаться багами изниоткуда до упора мы, таки, не
> будем. Хоть там как!

Так починили, но не в стандарте, а в реализациях.

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

Растоманы уже еще больше сишников бестолково лажают. Просто потому что они даже не слышали об алгоритмах, об структурах, об альтернативах, все что они знают это вот так создать переменную и как-то там с помощью магии какой-то борроу чекер что-то за меня проверит. А если ошибка, то это наверняка в unsafe. Увы, есть вещи которые ЯП решить не в силах, поэтому раст их не решит. Есть вещи которые ЯП может решить или улучшить, но по иронии раст ничего с ними не делает или ухудшает.

> В сях нет классов, на минуточку.
> В сях нет исключений.

В perl тоже почти всю жизнь не было классов, но это не мешало их использовать ;)

> Более того - это не самая удачная идея
> в кернелах, бутлоадерах и особенно фирмварях. Но я бы посмотрел на
> ваш фэйс когда ECU авто на скорости за стольник в исключение
> уйдет, и как вы это оцените по достоинству. Мы, кажется, про
> системщину? :)

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

> В системщине я не ОК с оверхедом в run time. И с
> исключениями тоже. Вы точно системщик? Кому и зачем нужны тормозящие и
> непредсказуемо фэйлящие системы?

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

> Сгородив пачку проверок и предвычислений препроцессором я готов поспорить с этим утверждением.
> А Zig может предвычислить произвольное выражение на этапе сборки используя основной
> синтаксис ЯП. Так что наблюдаемые факты не подтверждают вашу теорию.

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

> Вы задолбали одной программой. Даже в пределах 1 ОС программ сейчас сильно
> более 1 и они даже могут взаимодействовать. Если даже забыть про
> файлы, сеть, интерфейсы, и все такое. Хотя если про это все
> забыть то что останется то - особенно в системщине?

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

> Моя претензия к сям что они по факту 100% сливают аннотацию без
> какого либо использования. А нехило бы обязать компилеры детектить левые доступы
> как минимум при предвычисляемых сценариях. ЧСХ вещи типа LTO optimizer отлично
> в курсе всех краевых условий. Только наружу знание вывесить не могут.
> В этом месте внешний интерфейс сей из стандарта клинит state of
> art компилеров.

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

> В сях нет типов с встроенным bounds checking, а если его в
> рантайм делать получится, извините, дотнет какой-то. Хотя для ряда статических сценариев
> когда и размер массива и индекс известны можно и проверить такие
> вещи. LTOшный оптимизер так половину кода выкидыает, ДОКАЗАВ что энные ветки
> кода никак не могут вызываться во всей программе вообще.

Так в сях и то и другое есть. И либы с структурами с bounds checking и компиляторы с LTO.

> В сях видите ли вообще по сути нет ABI на struct. Нельзя
> заявить struct в апи и потом получить interop в сколь-нить гарантированном
> виде.

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

> Более того - у gcc для ARM есть минимум 2
> варианта ABI как передавать структы.

Даже на x64 знаю как миниум 3 варианта.

> Хотите вызвать функцию "bios" (boot loader,
> ...) с культурным, структурированным апи из основной фирмвари? Нннну, хотеть не
> вредно.

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

> Как вам требование что бут и фирмвара будут обязаны собираться
> 1 компилером с 1 набором флагов? Круто и интероперабельно.

Все нулевые так и было. Сейчас стало получше, решили придумать раст, который в принципе делает тоже самое, но со своим компилятором. Было 10 проблем, стало 11.

> Давайте, еще
> раз булшит про "одну программу". Бутлоадеры же не нужны, а код
> реюз для лохов. Или нет?!

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

> Да вот нормальные сишники таки взмахнули факами - и таки struct всякие
> в апях юзать стали. А чтоб эффективно - как указатель. На
> вот именно конкретный тип. С typedef даже не так плохо получается.
> И код не очень мерзкий, и левак ему в отличие от
> void* уже не впаришь. Вот так у них в коде багов
> на порядок меньше чем у кодеров с "одной программой" видимо подвешенной
> в сферическом вакууме а потому не обрабатываюшей внешние данные вообще никак.0

Не буду повторяться про одну программу.

> Это связано в основном с дурным определением этого хлама в стандартах. А
> сами struct плохо определены по выравниванию. Но вот тут есть __attribute__(())
> и прочие pragma, а то что не стандартно... ну... если у
> вас не GCC, и даже не шланг - suxx to be
> you, just f...g die! Как-то так, да. Потому что packed struck
> форсанутый на конкретные адреса - позволяет таки по простому поработать с
> чем-то типа хардварных регистров и их вот блин реально отдельных битов.

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

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

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

> У unsafe есть жирный плюс. Это большой красный флаг места где я
> должен трижды проверить код этого господина что все ЗБС. А у
> сишника void* с безразмерным нечто - норма жизни, удачи в проверках
> что они сделали и как это совпало с намерениями вообще.

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

> У сей препроцессор тоже видите ли не совпадает по синтаксису с основным
> яп. И никакого проигрыша нет.

Есть. В си препроцессор это жесткий костыль. От которого страдает и безопасность и читаемость и скорость компиляции. А в расте это еще более жесткий костыль.

> Как злостному юзеру макро в С мне показалось что хрустиковские макро мощнее
> сишных. Хоть и инопланетнее в замен.

Вас не смутило что в си макро подставляется препроцессором-подстановщиком, а в расте это ЦЕЛЫЙ ОТДЕЛЬНЫЙ ЯП В ЯП имеющего мало общего с самим растом?

> Это вопрос отсутствия багов и кода который не выглядит как УГ.

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

> В этом месте мы узнаем что one size doesnt fits all. Более
> того - что такое 1U может быть еще и платформозависимо, бжад.
> Не, конечно можно везде 1ULL ввернуть. К сожалению это настолко круто
> промотит все вычисления что резко деоптимизирует код. В самых критичных местах,
> типа операций с битиками регистров. Самое то - заякорить всю работу
> с периферией в пару раз. И вот выбирайте дескать между тормозами
> и прострелом пяток, дорогой сишник. А поприкольнее выбор нельзя ли? Чувствую
> что можно.

Про одну программу я уже писал, тут тоже самое.

> А потому что функции stdlib это окаменелое дерьмо мамонта. Которое давно надо
> было списать в утиль. Те варианты которые не чекают размер буфера
> calle'а и выносят все.

И не должны чекать. Поэтому то она и СТАНДАРТНАЯ либа.

> В сях нет никаких умных указателей. Можно конечно скроить себе самому много
> чего - даже функции для работы с строками. Что половина софта
> и делает. А дырявый мусор в stdlib зачем?!

Ох черт, что же ты такое. Ну так НЕ ИСПОЛЬЗУЙ СТАНДАРТНУЮ ЛИБУ ЕСЛИ ОНА ТЕБЕ НЕ ПОДХОДИТ. Это же очевидно.

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

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

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

Не рушит реже. Такие же типы как и в gcc например.
Реализовали один вид многопоточности со своими проблемами и забили на остальные. Как я и говорил очередное старое решение с побочками под новой упаковкой.

> И не надо меня плсами кормить. Это здоровый страшный урод. Который не
> си. И которому совсем не место в кернеле, фирмвари МК и
> проч. Во избежание. Потому что вот эти ваши экспешны там -
> ну совсем не айс например.

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

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

385. "Релиз ядра Linux 6.5"  +/
Сообщение от Аноним (-), 12-Сен-23, 01:43 
> может объяснить как же он работает, включая растоманов, ничего нового раст не предлагал.

Еще нормальные типы, отсутствие UB, явное маркирование откровенно опасных операций. То на что тупарей из ISO никак прожать в сях не получается, особенно по ВСЕЙ площади вплоть до препроцессора, enum и прочих struct'ов. Мне похрен новое оно или как, меня решение практических проблем "в интерьере" интересует.

> Тогда нет математического доказательства и вся надежность сведется к "что
> нашли тестировщики".

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

> Впрочем и на хаскеле будут нюансы, например все равно придется уйти
> от чистых функций (и это точно такой же unsafe, так что
> не понимаю что с ним носятся растоманы).

На хаскеле по моему основной нюанс в том что потом кроме автора программы ее вообще читать никто не хочет и въезжать в это все. У меня тоже нет никакого желания вкуривать в крутые абстракции уникальные для 1 проекта на всю планету. А если чувак кодивший ECU модуль кода неверно поймет намерения коллеги, ничем хорошим это не закончится.

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

У меня может быть более 1 предпочтения! И если тул сразу эн окучивает, это бонус в пользу тула. Представляете, это сложный комплексный процесс с интегральной оценкой факторов. От реюза знаний по "backend" до возможности других людей въехать в код и вероятностей что они поймут его правильно.

> Сочувствую. Сильно ухудшает читаемость, приводит к проблемам у новичков

Меня читаемость устраивает. Лучше чем у других. И к тому же печатать не сильно много а несовпадение скобок сразу хайлайтит что что-то пошло сильно не так.

> новичков - у школьников), замедляет написание кода (даже с подстановками от
> редакторов).

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

> когда программа могла состоять из одной строки или номер строки мог
> иметь решающее значение для выполнения программы.

Номера строк тут не при чем. Это про логическое выделение блоков - и контроль что блок существует атомарно, не вынесли часть случайно при редактировании, копипасте, вот это все.

> Си и не должен знать, потому что это стандарт, а не реализация.
> Реализация (компилятор) знает.

Я нахожу такой подход крайне неудачным. Спихивает все проблемы стандартизаторов и имплементеров на кодера. Это ведет к багам на ровном месте - 100% булшит.

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

А хотели мы таки писать более-меенее портабельно, реюзабельно, шустро и без багов. Get the idea. Если до додиков из исы туго доходит, мы им популярно объясним какой у нас выбор на самом деле может быть. Может и без них - если с ними не получается.

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

Я использую типы из C99 и не имею глупых проблем. Но правила математики в си таки остаются кривыми и костыльными, а препроцессор и enum таки все равно грабли. И это утомило.

> Это принципиальная трилемма.

Принципиально это
1) Решать имеющиеся проблемы а не заметать под ковер.
2) Достигать нормального результата по общему набору свойств за разумное время.
3) Не заниматься откровенными идиотизмами и прыгом по минному полю.

> И си как язык общего назначения оставляет тебе решать что ты выберешь.

Я для себя уже и выбрал типы из C99 и ниже в принципе не оперирую. А "int" безжалостно выпиливается если вдруг попадается. И апи совсем иначе строятся.

> Раст же более ограничен и решает за тебя. Как я и сказал, раст предлагает старые
> методы с сомнительными и отвергнутыми побочными эффектами
> под новой упоковкой. Вот и вся разница.

Остальные вообще адекватных решений не предложили.

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

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

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

До первого хаксора который решит это палочкой потыкать, не загонит ли олд отрицательный индекс своим "int" куда.

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

И когда это типы фиксированной битности все почему-то проще а багов в цать раз меньше. Откуда и идея отправить горбатые типы на свалку истории и если не валить компил с error то как минимум warning кидать. Сразу минус 9000 багов на программу. Особенно если идиотские правила integer promotion и UB при signed overflow пофиксить.

> не быть теми данными которые пришли в твою программу. Например может
> поменяться порядок.

Вот это на самом деле сильно зависит от. В сериальном интерфейсе порядок ну вот не поменяется хоть там как. Чисто физически некуда.

> нет никаких проблем. На любой архитектуре на любом ЯП.

"int" в его изначальном определении - сериализации вот так по простому вообще не подлежит. Такая ерунда. И это фигово.

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

Кроме того что этот код на другом проце сломается к хренам. И это источник багов.

> Если не контролируешь и не собираешься их проверять, то можешь дальше есть кактус и раст (и
> никто другой) тут тебе не поможет.

В расте по крайней мере доперли СРАЗУ сделать нормальные типы более годные для вон того - и не делать мозг "int" неопределенного размера что ведет к факапищам математики, IO и проч на всех мыслимых уровнях и тоннам CVE на этом поприще. А даунплеить это я таки вам не дам. Зело дохрена зафиксил такого чтобы игнорить топик.

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

Я форшу сбалансированное сочетание свойств и реюз знаний. Ну и шустрый и компактный код, нафиг мне в системщине дотнет очередной.

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

Что-то мне подсказывает что от кадавра который постоянно жрет лучше отойти на безопасное расстояние. LLVM это капец на уровне архитектуры. Либа весом аж 80 мегов, с вообще всеми кодогенераторами подо все что можно одним куском? Концептуалы, с си++ жутковатым. Подмятые на двоих аж гуглем и эплом. Весьма такое себе.

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

Я предпочитаю разумный общий баланс свойств, реюз знаний по бэку тулчейна по возможности и проч. Видите ли, в системщине меня могут интересовать весьма интересные вещи. Вот вы когда-нибудь компоновали кастомно бинарник? С написанием линкер скрипта? А теперь покажите как вы это - в ваших альтернативах? И там бутлоадерок на этом - разложите? DMA транзакцию, с жестким контролем лэйаута памяти, времени жизни буфера, и формата данных - зарядите? Без всего этого булшита про взаимодействие сам с собой. Заодно и узнаете почему реюзать эти знания хочется.

А на чем-то с атмегу или cortex M0 - заведется? Без булшита про докупите проц пожирнее. Хотя за ваш счет я и суперкомпьютер, конечно, купить готов. А за свой - вот пардон.

> императивных и поэтому стали жертвой расторекламы, которая предлагает старые вещи под
> новыми именами.

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

> Потому что все что делает препроцессор это делает автозамены строк. Просто подстановщик.

Он еще умеет математику и условные операторы. И даже рекурсию до энного предела. Поэтому он "почти тюринг полный". Это по сути почти отдельный яп позволяющий весьма мощную логику.

> Отсюда и все его ограничения. Собственно поэтому он и ПРЕпроцессор. Вообще
> это дикий костыль, одно из худших решений в си, но раст СКОПИРОВАЛ его и СДЕЛАЛ ЕЩЕ ХУЖЕ.

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

> Если кодер не читал и не учил, то понятно что он НЕ ОЖИДАЛ. Ну тут ССЗБ.

Не облегчают нашу участь на тему кучи багов от ССЗБ-кодеров -> бесполезное по жизни знание.

> У вас одни ожидания, у меня другие. Чьи именно ожидания инструмент не
> должен обламывать?

Я буду ориентироваться на статистику по числу багов и общее состояние проектов в поиске ответа на этот вопрос. Если 90% обломается а 10% нет, мне наплевать входите вы в те 10% или где.

> никого не прибьет кроме себя.

Да пока вроде не собирается. Даже вон в gcc начальную реализацию втулили. Она еще не полная но таки - вот - уже есть.

> Никто и не обещал что оно будет работать. Либо контролируешь свои данные
> (например используешь протокол), либо нет. И раст тут не поможет.

Как минимум нормальные типы данных с самого начала багов в таком коде поубавят. Почему-то. А "int" в коде - это почти гарантия багованости - уж пардон. Чисто статисически. И мне похрен чем это вызвано. Это ФАКТЫ, спорить с ними, винить кодеров и проч контрпродуктивно.

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

Как показал натурный эксперимент, програмеры возомнив себя богами начали неимоверно лажать в этом самом. И загоняя очередной void* хзкакого размера и array[int] с чем-то отрицательным в индексе получается знатный й0пс с пантеона то. И вот у именно олдов зачастую самый поганый код, нубы более трезво свои скиллы оценивают и более параноидальны, а заодно и новые стандарты изучить не ломаются - и не доверяя себе чрезмерно предпринимают меры для отсутствия лажи если не ленивые. А ленивые вообще идут в питоняши и сишку не используют.

>> И с этим явно перестарались. В ущерб всему остальному. А вот это уже фэйл.
> Я тоже так считаю, но это скорее теоритическая проблема, чем практическая.

Это таки жесткая практическая проблема - куча багов изниоткуда на ровном месте. Стандарт или будет переделан - или писать софт будут на чем-то ином. Глупо получать левые баги за сам факт дурости стандарта.

> Так починили, но не в стандарте, а в реализациях.

Это не есть приемлимый на практике вариант имхо.

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

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

> ЯП может решить или улучшить, но по иронии раст ничего с
> ними не делает или ухудшает.

Вопрос еще и в цене которую приходится за то или иное действо платить и общий баланс.

> В perl тоже почти всю жизнь не было классов, но это не мешало их использовать ;)

И тем не менее в сях нет классов. Поэтому простой лаконичный код без левых багов - ага, ща.

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

Это показывает насколько вы некомпетентны в вопросах системного программирования. Потому что есть. Работает. И этого - не просто дофига, а "почти все". Если теории не стыкуются с фактами - хреновые теории. Ну то-есть можно. Если захотеть. Но сложно. И с ограничениями. Типа дохреналиона правил MISRA намекающих на "удачность" дизайна ЯП.

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

Это упрощает жизнь кодеру - ценой потери предсказуемости, что в системщине смерти подобно. Этим и плохо.

> Нет, я вообще не системщик.

Оно и видно. А какого черта вы лезете учить системщиков что им должно быть надо? Идите вон хирурга поучите как вас оперировать.

> В расте не ок с оверхедом и с тормозами и даже с предсказуемостью как показывает
> практика не ок. Но почему-то вы сюда свернули.

Ну как бы хруст даже в атмегу вон засунул 1 из местных. А вы так сможете с своими "альтернативами"? Если нет - тогда какие нахрен альтернативы и чему?! Явно не сям. И даже не хрусту. Такая ерунда - вы можете так же, или нет, это bool.

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

Разумеется так можно обыграть не все. Зато можно очень крутой и годный препроцессинг оформить, тем же синтаксисом, и менее ограниченно. В сях с этим больше изврашений. Не, извините, на МК питаемом от мелкой батареечки я не могу навороченные вычисления - мелкая батареечка от них быстро сядет и юзер меня проклянет. Добро пожаловать в системщину - "energy-aware coding". Поэтому если что-то можно предвычислить и загнать результат - это нужно предвычислить.

> Совсем люди головой не думают. А заменить функцию из констант на константу
> так это еще паскаль делал когда я в школе учился.

В системщине хочется получать этот процесс явно и гарантированно. С четким отлупом на фазе компила если это вдруг сделать не удалось. Вместо ВНЕЗАПНОГО получения ломового жора батарейки вон той пакостью на ровном месте, с постоянной тряской над профайлингом. Мы вам тут не жабисты и не дотнетчики.

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

В системщине хочется весьма конкретный и явный контроль над такими вещами. Например для energy aware coding. Когда я четко понимаю истинную вычислительную сложность вот этого вот - и сколько у меня батарейки в трубу с этого улетит, ага.

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

Примем как факт. В мире более 1 программы, данные мы не всегда контролируем - и в нем более 1 человека, вендора железа, протоколов и прчо. Поэтому мы хотим чтобы этот сценарий работал без гимора и багов. "int" в эту хотелку совсем не вписывается.

> Возможно дело в том что добавление в стандарт аннотаций приведет к тому
> что их нужно будет реализовать всем,

И вообще-то - да вы знаете - надо прожать этих господ чтобы не делать это проблемой ВСЕХ ВООБЩЕ. Если они так не могут - вот отлично! Это - легаси е...чее! Noncompliant. Которое не имеет право называть себя C2X. Пусть C99 декларят! Или что там они могут. А C2X сорец, вот, не соберется на этом хламе с совершенно законными основаниями. Заодно добавит желания поднапрячься и - заимплементить, вместо переваливания своих проблем на других. Иначе хрустики это за них сделают.

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

Как показал пример C99 - ничего там не снизится. Просто булшит надо вытряхнуть не наполовину а весь. А очевидно снизится - число багов. Со всякими отрицательными индексами в массивах бжад. Более того - в сях можно завернуть array -> struct и это даже работать будет. С вполне приличной эффективностью в общем то, если как указатель на тип передать. И даже - таки - будет злой typecheck. А почему сразу нельзя без этого извращения uint8_t[10] как конкретный тип рассмотреть и требовать везде вот именно это и так - кто б его знает. Просто легаси тупняк.

> А на уровне реализаций итак есть аннотации и если не ошибаюсь например
> clang может их вывести.

Аннотация вида u8[10] видите ли для машины и в общем то автопроверок, так то по задумке. Там где это катит. Си же так сразу сливает это знание в толч и не пользуется. То что кто-то где-то сбоку - ну, это уже не то. Это надо на гвозди, в стандарт, как mandatory. Тогда станет хорошо. А noncompliant'ы - не имеют право декларить стандарт. Прям так. Чтобы отделять мух от котлет и дидов с осточертевшим "int" от более нормального кода.

> Так в сях и то и другое есть. И либы с структурами с bounds checking и компиляторы с LTO.

Либы не катят - это в половине случаев работать не будет. Попробуйте такое на мк какой вкатить. Вот в компилтайме прочекать - оно как бы и там нормально будет. И да, вы ж не хотите фирмвару падающую в рантайм?! Поэтому чекать и считать в компил тайм все по максимуму.

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

Это все булшит. Я хочу видеть нормальные базовые типы. Предсказуемые и без UB. Точка.

> Даже на x64 знаю как миниум 3 варианта.

И это совсем не круто, между прочим.

> Ох уж это поколение смузи. Ну используй подходящую либу.

Вот когда вы это сами такие умные это все вот именно в ранний бутлоадер втулить попробуете - тогда с вами будет смысл разговаривать об этом. Представляете, там даже malloc какой делать еще может некуда быть делать - потому что DRAM еще не подняли, а SRAM с гулькин нос. И тут вы такой с своей либой. Даже если забыть что 80% клевых либ обгадиться собраться или адекватно работать в "freestanding". Когда попробуете что-то в этом режиме сей тогда и вещайте.

> Она тебе и проверки автоматически сделает и тесты и доку составит и либы сгенерит.

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

Я вообще хочу посмотреть как вы "либу" из бутлоадера будете с другой стороны звать. Это будет гимор на всю голову. Потому что для начала - вот вы же ABI и создаете наполовину. Типа call table какого, через которого вас вообще вызывать. И вот именно какие-то либы на этом пути резко прибавят гимора на раз.

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

Я считаю сильно иначе - хрустики очень правильно нормальные целые типы оформили. Так как это должно быть в сях было.

> Все нулевые так и было. Сейчас стало получше,

В каком месте? С ABI Struct как был бардак так и есть. Сами же вон там написали.

> в принципе делает тоже самое, но со своим компилятором. Было 10
> проблем, стало 11.

У них как бы свои траблы тоже есть. Но они по крайней мере дали мастеркласс на тему что на самом деле надо было в сях сделать в ряде мест. И так то давно пора.

> Там то как раз есть протокол который определяет как бутлоадер будет дальше
> запускать код.

А что если я часть бутлоадера потом из кода хочу позвать? И да, прототип и там будет. Но если я захочу одупляемое API с чем-то типа struct вместо вашего окаменелого кала с void* - до чего уже даже САБЖИ доперли как и все минимально продвинутые сишники, вот с ABI этого таки будет много радости. По причинам которые вы сами же и озвучили.

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

Си вообще не дает прямой контроль над ABI вызова. Равно как и скажем не позволяет стандартно поместить вон то в конкретную секцию. Это пара мест где стандартный си таки сольет асму и это будет либо кусочек на асм либо экстеншн типа attribute((section)) какой.

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

На мой вкус - нехило бы определить стандартный способ решения этого вопроса, когда надо именно packed. Иногда предсказуемость ABI важнее. И это, DMA автомат вообще гораздо эффективнее это все пошлет чем проц. Он даже трафик из кода на шине не создает, а вот дырки в данных ему не подарок, он блок данных от сих видите ли тягает. Посоревнуйтесь с ними в эффективности, ага! Думаете, за что мы лю DMA? Это хардварная асинхронщина - и весьма эффективная.

> Какую-то дичь вы пишете. int в си подлежит сериализации, иначе вы бы
> на линуксе не смогли бы пользоваться интернетом, например, потому что внезапно
> ваш драйвер сетевухи написан на си и скорее всего с int'ами.

И грабель по этой линии там скушали тыщи. САБЖ унутрях поэтому заводил сто лет к ряду свои кастомные типы, куда более вменяемые. А с переходом на C11 смогут, видимо, и не изобретать вел с квадратными колесами лишний раз.

> Unsafe это большой красный плащ конкистадора для быка програмера.

Не важно. Важно что заметный и хайлайтит место требуюшее внимания.

> Есть. В си препроцессор это жесткий костыль. От которого страдает и безопасность
> и читаемость и скорость компиляции. А в расте это еще более жесткий костыль.

Если в регистре было 32 бита, а препроцессор меня кастомной логикой жестко завернул с попыткой сунуться в 35-й бит, коего нет, на фазе компила - очевидно, фирварь безопаснее стала, ага. Потому что если бы этого не случилось, оно бы в рантайм сделало какую-то хрень в стиле олдов с отрицательными массивами, эта хрень не имела бы смысла и далее это undefined: програмер хотел невозможного, гарантировано-бажный код.

> Вас не смутило что в си макро подставляется препроцессором-подстановщиком, а в расте
> это ЦЕЛЫЙ ОТДЕЛЬНЫЙ ЯП В ЯП имеющего мало общего с самим растом?

В си это тоже по сути отдельный яп. Вы просто не видели что с ним сделать можно. От генерации предвычисляемых массивов констант для довольно сложной хрени до проверки параметров и констант в компилтайме. Простой пример:


const uint8_t ones[256] =
{
    #define B2(n) n,     n+1,     n+1,     n+2
    #define B4(n) B2(n), B2(n+1), B2(n+1), B2(n+2)
    #define B6(n) B4(n), B4(n+1), B4(n+1), B4(n+2)
    B6(0), B6(1), B6(1), B6(2)
};
Да, это всего лишь автозамена. И немного математики. Даже условные операторы не поюзали еще. Те же ядерщики и поинтереснее умеют. Как вам генерация масок для операций длля битового поля от сих до сих на автомате? Да и проверить что в 35-й бит 32-битного регистра не влезли заодно можно. И да, железки опять же нативно маппятся в память как C99-style типы.

>> Это вопрос отсутствия багов и кода который не выглядит как УГ.
> Нет, это просто синтаксичесис никак на баги не влияющий.

Как тот кто загасил кучу багов из-за тупых типов я имею основания считать сильно иначе.

> Про одну программу я уже писал, тут тоже самое.

ИМХО Вы можете курить бамбук с одной программой. Это не от мира сего.

> И не должны чекать. Поэтому то она и СТАНДАРТНАЯ либа.

С чего бы стандарт должен быть дырявым гамном?

> Ох черт, что же ты такое. Ну так НЕ ИСПОЛЬЗУЙ СТАНДАРТНУЮ ЛИБУ
> ЕСЛИ ОНА ТЕБЕ НЕ ПОДХОДИТ. Это же очевидно.

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

> И ты опять попытался решить человеческую проблему техническими методами.

А таки частично работает. CAD чекает что я все подключил - вместо упования на внимательность. ERC/DRC чекает что фаба это сможет сделать и нет явных ляпов. Анализатор в компилере чекает что я не сделал что-то явно левое, где декларация и реализация явно разошлись. Машины должны помогать решать проблемы а не перепихивать все на человека и создавать проблемы.

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

А, ну это решаемо, Судья Дредд показал как надо. Можно и автоматизировать - автоматическая туррель справится не хуже. А для надежности противотанковой ракетой можно подкрепить.

> Не рушит реже. Такие же типы как и в gcc например.

Да вот видите ли GCC таки может и хлам с "int" собирать. И хотелось бы хайлайтить такой код. Потому что статистически, там обычно полный хлам с математикой и граничными условиями. А на стандарты эти ваши олды как раз возлагали известно что.

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

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

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

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

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




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

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