Этого треда уже нет.
Это копия, сохраненная 31 марта 2021 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
C Propaganda.jpg1,9 Мб, 2000x2610
C Programming Language #62 /clang/ # OP 1807650 В конец треда | Веб
Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.

Пожалуйста, пользуйтесь https://ideone.com/ https://wandbox.org/ или https://pastebin.com/ для вставки кода, если он длиной больше нескольких строк или содержит [​i​] или ∗.

Что читать:

- Brian Kernighan, Dennis Ritchie "The C Programming Language": http://www.cypress.com/file/56651/download
- Stephen Prata "C Primer Plus, 6th Edition" (2014): относительно свежая, знает про C89/C99/C11, описывает различия, объемная (около тысячи страниц), годная, с вопросами, упражнениями и ответами. Читать после K&R или до.
- Zed A. Shaw "Learn C the Hard Way" (2015): годное пособие для гуманитариев для гуманитариев!
- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html
- ООП, например: http://www.cs.rit.edu/~ats/books/ooc.pdf
- Стандарт ISO/IEC 9899:1999 (C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт)
- Стандарт ISO/IEC 9899:2011 (C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)
- Черновик стандарта ISO/IEC 9899:202x (C2x): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2479.pdf (февраль 2020, с диффами)

Чем компилировать:

- Очевидный GCC.
- clang: оче годно, батя рекомендует.
- Intel C++ Compiler: оптимизации, тысячи их.
- Visual Studio Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте.
- Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное.
- TCC: очень маленький компилятор с багами и поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.

Что еще почитать:

http://c-faq.com/
FAQ из comp.lang.c. Древний, но все еще актуален.

Samuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition" (2002)
Ебаный пересказ стандартов C89 и C99 (включая стандартную библиотеку). Для не осиливающих стандарт в оригинале. Читать в качестве подготовки к собеседованиям (есть задачник с ответами) и для ознакомления с масштабами пиздеца перед написанием своего парсера/компилера.

Peter Van Der Linden "Expert C Programming. Deep C Secrets" (1994)
"Си: грязные истории". Смехуечки, немного объяснений, чем обусловлены особенности языка, всем известные подводные камни кто там ругал косяки в JS? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).

Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели.

Ben Klemens "21st Century C: C Tips from the New School" (2012)

Paul Deitel, Harvey Deitel "C for Programmers with an Introduction to C11" (2013)

Stephen G. Koch@n "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)

MISRA Ltd. "Guidelines for the Use of the C Language in Critical Systems" (2013)
Набор рекомендаций по написанию надежного кода на C (промышленный стандарт). Читать - однозначно, следовать - вдумчиво и без фанатизма. Также можно посмотреть https://www.securecoding.cert.org/confluence/display/c/SEI+CERT+C+Coding+Standard и http://web.archive.org/web/20190213011655/homepages.inf.ed.ac.uk/dts/pm/Papers/nasa-c-style.pdf

Еще более длинный список: http://www.iso-9899.info/wiki/Books#Learning_C

https://github.com/kozross/awesome-c

Онлайн-утилиты:

- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов).
- http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.

Прошлые треды:

- №59: http://arhivach.ng/thread/597021/
- №60: http://arhivach.ng/thread/610540/
- №61: http://arhivach.ng/thread/610541/ >>1786992 (OP)
dead per dead 2 1807713
Первый
3 1807739
>>07650 (OP)
Фтарой
4 1808052
>>07739
Попрошу не засорять тред ненужными сообщениями.
1600250428267.png238 Кб, 1080x1920
5 1808054
1600250845852.png347 Кб, 1080x1920
6 1808057
7 1808433
>>08054
Плюс ещё на уровне стандарта запретить использование скобок в логических выражениях.
sage 8 1808460
>>08054
Шутки шутками, а nullptr и так скорее всего будет в C2x в рамках восстановления совместимости с крестами.
dead per dead 9 1808465
>>08460
Ненужен.
#define NULL ((void звезда)0)
10 1808785
>>08465
nullptr будет корректно проверятся с указателем, а с переменной будет падать на компиляции. Макрос подобной гибкости обеспечить не может.
11 1808878
Помогите ньюфагу, операции с плавающей точкой - операции не над целыми числами, или что?
12 1808899
>>08878
Наоборот, над нецелыми. А откуда такой вопрос?
13 1808900
>>08899
Мне нужно реализовать поиск тригонометрических функций без использования операций с плавающей точкой. Хотел просто синусами, косинусами сделать, но похоже нужен какой-то алгоритм.
14 1808901
>>08900
Что реализовать?
15 1808902
>>08878
Хз что там у тебя за задание, но плавающую точку всегда можно заменить фиксированной, т.е. парой целых, или рациональными числами числитель/знаменатель.
16 1808904
>>08901
Операции sin, cos, tg, ctg чисел.
17 1808905
>>08900

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



Значение COS и SIN это нецелое число в диапазоне от -1 до 1.
Как его можно целым числом записать?
Ну в теориии то извратиться можно, но если ты не знаешь что такое IEEE 754, то очевидно что ты не тот человек, который может сегодня извратиться.
1448107194128.jpg110 Кб, 600x898
18 1808907
>>08905
Умножив на 1000000
19 1808912
>>08907

>Умножив на 1000000


Nice. Но это половина решения.
20 1808940
Ок, я так понял, что могу реализовать через ряды Тейлора, но вот проблемка, у меня же число пи не целое шоб задать частоту в синусе, мне его получается нужно округлить до 3?
21 1809016
>>08940
А чего бы не взять таблицу Брадиса за основу? Забить её в массив и наслаждаться погрешностью.
22 1809111
>>08940
Ох лол, настоящий инженер
23 1809189
>>08940
Что вообще значит "не используя числа с плавающей запятой"? Где ты результат хранить собираешься? Сформулируй задание как можно точнее.
dead per dead 24 1809383
>>08900
Используй CORDIC или таблицы с представлением fixed point.
25 1809392
Нужна помощь с программированием на C
Постараюсь норм заплатить за это, но уровень знаний нужен неплохой.
Напишите сюда, пожалуйста @twoomer
26 1809446
>>09392
Ты в универе на второй год остался?
27 1809452
>>09392

>Постараюсь норм заплатить за это


Это сколько?
28 1809492
>>09446
ой, ты меня помнишь, эхе.
>>09452
стукни в телегу, с тебя не убудет
29 1809668
>>07650 (OP)
Ещё могу подкинуть такую книжку:

http://buildyourownlisp.com/

Учишь Си путём написания своего Лиспа.
30 1809685
Совсем недавно начал изучать C.
Читаю книгу, заглядываю в стандарт, много гуглю, пытаюсь ковырять разные исходники простых утилит.
И, конечно, вместе с этим решаю и пытаюсь решать различные упражнения, практические задания.
Не скажу, что всё идёт как по маслу, но настроен серьёзно, не планирую сдаваться.
На фоне всего этого почти всё время, которое провожу сейчас за компьютером, трачу на такое самообучение в одиночестве.
И как-то ощущается: нехватка живого общения по теме программирования на C и недостаток возможности обсуждать то, что с ним (C-программированием) связано.
Не поймите превратно, я не имею вообще ничего против C-тредов (пару раз успел получить дельные советы тут), но часто на самом деле как-то не хватает именно живого общения по теме. (посмотрел конфы в телеге, xmpp, но путного ничего не нашёл)

Ещё есть желание найти собеседников в первую очередь из числа тех, кто тоже серьёзно заинтересован в обучении программированию на C.
Может быть получится как-то иногда помогать друг другу, пробовать вместе разрешить ту или иную особо сложную "задачку", обсуждать что-то по теме.

Всё вышеуказанное побудило создать сегодня дискорд-сервер. Надеюсь, что кто-нибудь откликнется и присоединится.
Создал буквально пару часов назад, поэтому на первых порах сразу после входа будут открыты: голосовой канал и 2 текстовых (general и no-microphone).
Ссылку в форме картинки оставил тут: https://2ch.hk/ch/res/161664.html (М)

Буду особенно рад, если кто-нибудь из опытных олдов-специалистов решит зайти, что иногда делиться своей мудростью и давать советы неофитам вроде меня.
sage 31 1809767
>>09685
Пашол нахуй социоблядок.
32 1809769
>>09668
А нет книжки на СИ по написанию своего Хаскеля?
33 1809777
>>09769
Тебе никакая книга не поможет, если ты не понимаешь как работает компилятор, транслятор, сборщик мусора и так далее.
34 1809781
>>09777
Душный трипл.
35 1809786
>>09781
Трипл хуйни не скажет. Он тебе всё верно написал. Как ты будешь компилировать свой хаскел? Синтаксис уже придумал? Парадигму используемую для программирования? Как это все будет транслироваться в байт код/виртуальную машину/ассемблерное представление? Или это будет транслироваться на кресты?

Не толсти толстый школьник-зумерок.
36 1809794
>>09769

>книжки на СИ


Содомит.
37 1809796
38 1809811
>>09786
Чел, ты вообще не выкупаешь. Перечитай на что я отвечал.
39 1809816
Чота новый тред не очень интересен. Нет задора. Разочаровываете. Обнадёживает лишь то, что он только начался, может быть чего интересного подвезут.

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

>операцию


оператор
41 1809834
>>09816
Да тут и про оператор "стремиться к" не слышали.

#define as ;while

do printf("n is %d\n", n) as ( n --> 0);
42 1809854
>>09834
А вот тут уже у меня глаза на лоб полезли. Ты точно не троллишь?
Если что, пишу на Си с 1993 года.
1526280974918.png49 Кб, 1194x502
43 1809864
>>09854
Ни в коем разе.
44 1809866
>>09767

Как-то ты грубо написал (без необходимости в этом). И сажа совсем неуместна.
Будь добрее что ли.
45 1809874
>>09864
В какой версии стандарта появилось?
46 1809875
>>09864

#define begin {
#define end }
47 1809883
>>09874
Стандартошизик на месте, я спокоен.
Главно что в компиляторах работает.
48 1809886
>>09883
Нельзя быть таким ебанутым, как ты. Кроссплатформенное приложение писал хоть раз? Наверняка же нет.
49 1809888
>>09886
Откуда у Си кроссплатформенность, лул? Это же не джава.
50 1809889
51 1809894
>>09874
Вообще это древняя фишка, видел чуть ли не в исходниках линукса.
52 1809897
>>09888
Вот когда ядро ОС на Java напишут, тогда приходи. Java без виртуальной машины не работает. Виртуальная машина Java работает поверх ОС.

Sun Microsystems как раз и сдох? когда решил заебощить Java CPU/
53 1809915
>>09889
Швабропетух, уходи
55 1809932
>>09897
При чем тут ядро ОС.? У меня есть обычные программы на Java и я этим калом пользуют только сдерживая рвоту от безысходности отсутствия альтернатив. Если бы весь софт был на Java я бы просто повесился или отказался от использования компьютеров, потому что моя психика дороже.
56 1809935
>>09932

>У меня есть обычные программы на Java


Зачем так жить? Ну C# ещё как-то можно понять и простить, но Java?
57 1809949
>>08460
Я бы ещё от ссылочек, как в плюсах, не отказался бы.
58 1809970
>>09949
Ненужны, это как var в паскале, который внезапно оказывается указателем, хотя таковым не выглядит.
59 1810024
>>09919
pub fn
Не, ну это пиздец конечно
60 1810047
>>09970
Ссылка является частным случаем указателя. Когда передаешь объект в параметр функции, то передаешь его по ссылке. Использование ссылок в этом случае отменяет проверку на валидность указателя. Почему? Т.к ссылка указывает на существующий объект. Будешь брать ссылку из голого nullptr - получишь ошибку на этапе компиляции.
61 1810049
int main(void){
char *str = "Hi!";
return 0;
}

сохраняю, например, в файле hi.c
Затем в терминале выполняю команду: gcc -nostdlib -o hi hi.c
В ответ, конечно, получаю предупреждение /usr/bin/ld: warning: cannot find entry symbol _start; ...

Но почему после этого исполняемый файл hi всё равно весит примерно 13 килобайт?
62 1810056
>>10049

>Но почему после этого исполняемый файл hi всё равно весит примерно 13 килобайт?



strip hi

Но сначала лучше прочти вот это - https://www.thegeekstuff.com/2012/09/objdump-examples
И посмотри сам.
63 1810065
>>10049
Вангую отладочные символы внутри. Можно strip'ом воспользоваться.
Строки поубирает. Можешь попробовать флагами gcc убрать отладочные символы опцией -g0, но вряд ли оно прям все вырежет
64 1810066
>>10049
А чего ты хочешь добиться?
65 1810082
>>10065

strip и g0 не помогают.

>>10066
Для начала того, чтобы линкер не подрубал посторонние библиотеки, если уж я использую опцию nostdlib.
66 1810114
>>10082
У strip есть ключи. Можно хорошо порезать.

Выше же ссылка на ключи objdump. Это 100% ответ на твой вопрос.
67 1810117
>>10082

>nostdlib



попробуй ещё nostdinc - в инклудах докуя чего может прицепится.
68 1810124
>>10082
Если так интересно, можешь ознакомиться со статьей: https://habr.com/ru/post/88101/
Мне всё-таки интересно, куда тебе размер уменьшать-то?
Может другой компилятор попробовать стоит или поиграться с оптимизацией (только что в этом коде оптимизировать..., нужно рассматривать примеры побольше)? То смотри и поменьше размера добъёшься.
dead per dead 69 1810127
>>10047
При наличии ссылок по коду х=1 трудно определить, меняется тут аргумент или параметр за пределами функции.
70 1810138
>>10124
глянул на статью, вот цитата оттуда:
"...Использоваться будут только явно переданные линкеру файлы».

jesstess@kid-charlemagne:~/c$ gcc -nostdlib -o hello hello.c
/usr/bin/ld: warning: cannot find entry symbol _start; defaulting to 00000000004000e8

Всего лишь предупреждение, все равно попробуем:

jesstess@kid-charlemagne:~/c$ wc -c hello
1329 hello

Выглядит неплохо! Мы уменьшили размер до значительно более вменяемого (аж на целый порядок!)…"

Тут >>10049 абсолютно идентичная команда выполняется "gcc -nostdlib -o hi hi.c" Но размер исполняемого файла не уменьшается, как это происходит в статье.
71 1810147
>>10056
>>10114

Плохо знаком с objdump, но судя по тому, что именно он выводит, причина тяжеловесности исполнительного файла вроде в ld-linux-x86-64.so.2
72 1810158
>>10147
Поиграйся ключами - получишь массу информации. Он даже дизассемблирует.
73 1810177
>>10127
Обсуждалась не передача обычных типов, а конкретно объектов. С теми же самыми структурами в Си приходится работать? - Приходится. Производится проверка на передаваемый указатель на структуру: эквивалентен ли полученный указатель NULL-у? Понятное дело, что такого рода проверка нужна для избежания ошибки сегментирования. При ссылке не пришлось бы этого делать, код стал бы занимать меньше места (ещё +1 в пользу ссылки).

Ранее упоминалось, что ссылка - частный случай указателя. Значит при изменении значения внутри функции передаваемой по ссылке переменной, значение вне функции будет также меняться.
74 1810179
>>10049
Куски ELF выравниваются на страницу, чтобы его удобней мапить в память. Заголовок будет минимум страница. Дальнейшее зависит от кунпелятора и архитектуры.
clang -m32 даст файл чуть больше страницы.
75 1810194
>>07650 (OP)
Няши, напомните, каков сейчас максимальный сегмент данных в исполняемом файле? Указатель 64?
1446925821324.png71 Кб, 1582x543
76 1810210
>>10177
Ты лепишь какую то фигню. Ничего никакие ссылки не проверяют.
77 1810226
>>09392
Извините - бамп
78 1810238
>>10226
Что такое неплохой уровень знаний? Надо уметь писать свои ОС или Гугол?
79 1810240
>>10238
Напиши - ничего страшного не случится.
Скажем так, я студент раздолб.
80 1810241
>>10240
Что написать? Свою ОС или Гугол?
81 1810243
>>10241
Консольную программу :)
82 1810263
>>10210
Ты разыменовываешь nullptr и передаешь его, естественно будет неудачное завершение программы. Я говорил о другом.
Допустим у тебя есть структура, тебе её нужно передать в функцию.
Если ты передаешь по указателю, то тебе придётся делать проверку на nullptr (для устойчивости функции), если ты делаешь проверку по ссылке - проверку такого плана делать не придётся. В твоём случае ссылка верна - компилятор не ругается, но ссылка указывает на неинициализированный объект, поэтому обратиться к полям объекта не получится, в следствие чего ловим ошибку сегментирования. Всё правильно я сказал, подумай сначала, перед тем, как что-то писать.
83 1810273
>>10263
Не "проверку по ссылке", а "передачу по ссылке". Опечатку допустил.
image.png73 Кб, 1016x459
84 1810282
>>10210
Ознакомься, будь добр, ещё с этим отрывком. Основные мысли выделил, чтоб не сбить тебя с толку.
85 1810284
>>10263

>Если ты передаешь по указателю, то тебе придётся делать проверку на nullptr (для устойчивости функции)


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

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


Опять же я тебе показал что программа обратилась к неинициализированному полю без всяких ошибок сегментации.
86 1810285
>>10284
Ссылка указывает на указатель, в то время как указатель указывает на неинициализированный объект. Этого объекта в памяти нет. Какое-либо изменение, обращение к объекту приведет к ошибке сегментирования.
Ты сломал логику иным путем, а вот теперь попробуй передать ссылкой невалидный указатель напрямую. Так не получится.
87 1810293
>>10285
Я тебе уже все показал. Я разыменовал nullptr прямо перед ебалом компилятора и он никак не среагировал. Nullptr никак тебя не защитит. Если ты напишешь свою библиотеку которая в функциях принимает ссылки, ей точно так же смогут передать указатель. Поэтому тебе все равно придется проверять на NULL если ты печешься о "непадучести".
dead per dead 88 1810303
>>10285

> Ссылка указывает на указатель


Ссылка на разыменование указателя тождественна этому указателю. Указатель может быть 0. Эрго, можно передать 0 в качестве ссылки. Шах и мат.
sage 89 1810355
>>09794

>> книжки на СИ


> Содомит.


Книжка "A Retargetable C Compiler" написана на Си. Но она, конечно, не про хаскель.

>>09834

> "стремиться к" не слышали


Мы даже про головастиков слышали. Которые ~-~-n и -~-~n.
90 1810360
>>10303
Да, это так.
Компилятор не может проверить адрес объекта. Вся защита ссылок от того чтобы они не были nullptr - проверки типов чтобы ты не мог вместо ссылки присвоить nullptr или передать его в качестве ссылки.
Во всем остальном все хаки будут работать. Можешь 0 передавать хоть с ассемблера в код крестовый который принимает ссылку и все будет дружно падать, а ссылка будет 0.
91 1810382
>>09811
Пошли маняманевры. Чел, ты мне-тотне пизди итт. Я всё прекрансо видел на что ты отвечал.
92 1810393
>>10210
Почему это говно не упало на шестой строке?
Вот тут должен был segfault случиться:

mov eax, QWORD PTR, [rax]

Вакаба, сука скобки наверное пожрёт на rax
93 1810395
>>10284

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



Потому что там какой-то ёбаный эмулятор. Реальная программа сразу бы свалилась в корку.
94 1810396
>>10303

>Указатель может быть 0.



Смешно до слёз.
95 1810399
>>10393
Вообще оно и сегфолтнулось. Ошибка 139 в godbolt намекает.
96 1810401
>>10396
Плакали всей деревней программистов под Москвой
97 1810403
>>10399
Это не "ошибка" а возвращенное return из main значение.
изображение.png20 Кб, 1213x301
98 1810407
>>10403
Тогда почему тут 139?
99 1810409
>>10360
Чел, ну зачем ты продолжаешь позориться? Ты вообще не понимаешь зачем ввели nullptr.
Если бы он, как ты говоришь, проверялся в компайлтайме на присваивание какой-то ссылке (а он не проверяется, как мы видели выше), то есть он в константном выражении, то и присвоение NULL (Someref& = 0) так же легко отлавливалось и никакой nullptr для этого не нужен.
nullptr как отдельный в плюсах введен по двум причинам:
1) перегрузка функций (foo(NULL) вызовет foo(int) а не foo(some*))
2) шаблоны (аналогично, some<NULL> развернется в some<int>, а не some<some_ptr_t>)
Но - в Си нет ни того, ни другого! И снова nullptr не нужен.
100 1810410
>>10382
Ну тогда ты видел что отвечал я на "посоны вон книга где пишут Лисп"
101 1810411
>>10409
Я только про плюсы писал.
Кстати там ходят слухи про шаблоны и перегрузку функций в Си, и что их могут и добавить, тогда и твои причины будут касаться Си, и можно будет о nullptr говорить.
1573905011083.png18 Кб, 557x398
102 1810414
>>10407
А почему нет?
103 1810415
>>10407

>Тогда почему тут 139?


Потому что это ёбаный эмулятор.
Кто ж тебе даст запускать реальные бинарники на сервере?
Попробуй локально в консоли выполнить - словишь Segmentation fault. Core dumped. Или ""Программы выполнила недопустимую операцию и будет закрыта.".

Это я без всяких проверок тебе говорю.
sage 104 1810417
>>10415
Это не эмулятор. Это реальные компиляторы.
Выше скрин без всяких коре дампов.
изображение.png5 Кб, 476x278
105 1810418
>>10414
Рекомендую перекатиться на операционную систему со своего спермоговна.
106 1810419
>>10415
Какой эмулятор? Ты про sandbox слышал?
Оно и на godbolt упало. 139 кидает оно в любом случае, с любым кодом там если процесс падает в сегментацию.
sage 107 1810420
>>10418
Советую перекатиться на операционную систему со своей прошивки для микроволновки, которая падает от любого чиха.
image.png46 Кб, 436x860
108 1810421
>>10418
>>10419
>>10414

Windows ебанутая - не падает. Возвращает отрицательное число.
Вот же гандоны. И давно так?
109 1810422
>>10420

>которая падает от любого чиха.



setjmp/longjmp позволяют творить чудеса
Но Windows ведёт себя неправильно.
110 1810424
>>10421

>И давно так?


Возможно что-то в нулевой странице висит с отрицательным значением, оно оттуда тянет результат и отдает. На линуксе страница по адресу 0х00000000 не замаплена в процесс и ее убивает ядро. Это сродни тому чтобы полагаться на возврат локальных переменных по указателю. Вроде и работает, а вроде и не должно.
111 1810427
>>10420
А по-моему это нормально когда ОС имеет адекватное поведение. И если программа полезла не туда куда надо - она не продолжила исполняться дальше, а была остановлена операционной системой.
И с какого хуя разыменовывание nullptr это вообще адекватно?
112 1810433
Я чё тут один пишу на винде, потом компилю сорц под Винду в дебиане, и запускаю бинарник на винде?
sage 113 1810435
>>10427
Это UB, поэтому по стандарту может быть что угодно, а понятия адекватно-не адекватно это уже пространные рассуждения уровня морали и чести.
114 1810436
>>10433
А зачем ты делаешь этот лишний шаг? Шланг и на винде работает.
115 1810439
>>10436

>Не пользоваться божественным msvc


>Использовать ссаный шланг от анальной помпы Стива Кука

image.png18 Кб, 464x378
116 1810442
>>10424

>На линуксе страница по адресу 0х00000000 не замаплена в процесс и ее убивает ядро.



Это понятно. Нихуя непонятно с каких хуёв MSVC даёт спокойно завершиться программе.

Впрчем, я победил проблему и считаю что в данном случае разработчики MSVC просто ебанулись.
117 1810443
>>10439

>божественным msvc


C++20 when?
118 1810452
>>10424
Нет связи между nullptr (или NULL) и адресом 0x00000000. Может быть виртуальная память. Может быть микроконтроллер у которого адрес 0 это вектор прерываний.
119 1810455
>>10452

>Нет связи между nullptr (или NULL) и адресом 0x00000000



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

Что касается NULL то испокон веков это нето вроде
#define NULL (void*) 0
и никак иначе
120 1810457
>>10455
Это не значит что тебе дадут лезть по физическому адресу 0
121 1810458
>>10457
это и коню понятно.
да и полюбому адресу не даст - ОС обязана пресекать все попытки обращения к любому адресу, не отображённому в адресное пространства процесса.
122 1810577
>>10452
Тебе расписали один из вариантов UB.
Странно отрицать что если NULL или nullptr подставляют зачастуюпро магические указатели по типу 0xDEADBEEF мы все помним при запуске всяких меморичекеров 0 значение, и если попытаться их разыменовать в указателях, то код будет содержать команду обращения к памяти по 0 адресу. Дальше дело железа и ОС
123 1810623
>>10458
Нахуй такая ОС не нужна, где нельзя писать в другой процесс и в саму ОС. Да и не ОС это будет, а прошивка тостера.
124 1810639
>>10623
Про Shared Memory слышал?
125 1810650
>>08052
Но в таком случае тред всегда будет полностью пустой
126 1810652
>>10577
На каких то платформах nullptr равен 0xFFFFFFFF
127 1810721
>>10401
плакать надо было когда медведев поднял два лярда рубасов на постройке ваших хайтек сараев
128 1810722
>>10623
Долой безопасность! Делай (int )0x7CFF5051 = 666; во славу Ленину, чтоб ебнуть ОС и все запущенные приложухи! MMU зло! Коммунизм памяти! Каждой программе по потребностям!
129 1810724
>>10652
На каких?
130 1810871
>>10639
Хуйня без задач
131 1810927
>>10871
Если вот это >>10623 писал ты, то пиздуй в школу. Иначе возможны нюансы.
132 1810972
>>1788067 →

>Забугром эмбедщина


>Quallcom, Mellanox, Marvell, Nvidia, Xilinx, Tesla


Речь идет про рядового анона, либо без во, либо закончившего говновуз, которые забугром нафиг не кому не нужны даже с 10 годами опыта.
Поэтому если выбирать из работы в России: прогать микрики, как даун, или стать веб-разработчиком, очевидно выгоднее выбрать второе. Можно как завести трактор в ДС, так и перейти на удаленку, фриланс, когда прогером мкк будешь всю жизнь сосать за 30-40к максимум при работе оффлайн 5/2.
133 1810975
>>1788546 →

>Причём настолько, что любой человек с опытом 3+ лет на этом самом эмбедеде может спокойно ехать в какую-нибудь Германию или Францию на 4-5к рейхсмарок ежемесячно,


Но реальность такова, что типичный байтоеб из НИИ, не закончивший топ вуз в дс, будет пахать за 20к-30к и ни в какую германию и францию не уедет, потому что он там нафиг не нужен.
В то время как веб-разработчик даже в рахе может получать эквивалент 2-3 рейхсмарок через пару лет работы и работать на в разваливающемся заводе или нии, а в крутом офисе с печеньками и кондиционером со свободным графиком.
134 1810976
>>1795877 →

> не одними деньгами, анонче. Есть ещё то, что у тебя в мозгу и душе.


Угу, пока норм прогеры уже и квартиру в новостройке/жилье купят, машину, и семью заведут, ты будешь ездить на работу на жигулях микросхемы паять и жить с мамкой, зато ДЛЯ ДУШИ работаешь, лол.
135 1811007
>>10975

>ни в какую германию и францию не уедет, потому что он там нафиг не нужен.


Потому что ссыт боится и ленится. А съездить на пару лет не помешало бы. Культурный обмен и всё такое. Копеечку заработать чтобы стать дома на ноги. Почему нет?
136 1811010
>>10976
А ты хоть жилье купил? Думаю язык Си обеспечит шансами на светлое будущее ещё не одно поколение инженеров-программистов. Все равно любой boot код писать проще на нем. Какой бы вы раст не хотели юзать или С++ для написания ядра, костяк все равно будет на Си. Тонна устройств которые имеют прошивку написанную Си - носишь mi band? Прошивка на Си. Фитнес трекер не на айос/ведре - тоже на Си написано. Юзаешь дома игровую приставку - на геймпаде и консоли прошивка написанная на Си вероятнее всегоили asic в геймпаде, не изучал точно. Юзаешь клаву USB или мышь? Тоже прошивка на Си. Куда не глянь, а он нас все равно окружает. И это охуенно.
Ну и да, зачем оставаться в РФ? Аргумент "ты там не нужен"? Смешно. С таким же подходом можно сказать - а зачем вообще кто-то нужен в России? Правительству нужна труба, нужны месторождения, остальные просто мешают им обогащаться.
137 1811011
>>10976

>на жигулях


Как что-то плохое.
Vesta SW Cross - доволен и пока мне лучше не надо. Или это не Жигули?

А микросхемы это для души.
138 1811078
>>10972
Дружище, ты продолжаешь срать писать в этом треде, агитируя всех вступать в ряды WEB-разработки. Напоминаю, ты намеренно приходишь в Си-тред и, затрачивая свое личное скорее всего время, делаешь это.

Я у тебя попрошу совсем немного. Я не буду тебя стебать, троллить и т.д., мне чисто интересно. И так, что тебя мотивирует это делать? Какая у тебя мотивация? Что тобой движет? Какая цель этих действий?
Ну и попрошу тебя рассказать о себе в двух словах, а именно - прости за нескромный вопрос, твой возраст и род занятий (если софтваре инжиниринг, то какой).

Ну... Либо же ты просто тролль, которому просто нечего делать.
139 1811080
>>11078

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


Ну да, а тебя ебет?

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


Ну да, а тебя ебет?

> Я у тебя попрошу совсем немного. Я не буду тебя стебать, троллить и т.д., мне чисто интересно. И так, что тебя мотивирует это делать? Какая у тебя мотивация? Что тобой движет? Какая цель этих действий?


А тебя ебет?

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


А тебя ебет? 26 ЛВЛ, курьер в Delivery Club

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


А тебя ебет?
140 1811090
>>11080
Не, меня никто не ебет (и ничего) а вот тебя, раз ты такие вопросы задаешь, возможно, кто-то и ебет по выходным

Мне всего лишь интересна твоя мотивация, лол.

> 26 ЛВЛ


А общаешься с людьми как шкила))))))

> курьер


Что и требовалось доказать - ты просто приходишь сюда посрать, дружище. Проследуйте в /b/, там для Вас место освободилось!
141 1811104
>>11090
Не корми его
142 1811117
>>11104
Понял-принял.
143 1811314
>>11090
>>11104
Не понимаю вашего копротивления одному человеку, когда весь тред полон таких же.

Псмотри >>10623 , а потом на ответы. Дебики даже не поняли написанное, отсутствует понимание что такое компьютер, и как следствие что такое программирование. Рассуждают с позиции мобилки или веб-браузера, будто си это такой джаваскрипт, только более быстрый и со своими замутами. Просто сейчас одни веб-дебилы везде и есть, не в смысле что они пишут на хтмл, а в том, что отношение к программированию именно такое. А какой конкретно язык они для этого используют, какая разница.
144 1811352
>>10293
Ссылка в твоём случа же корректна, невалидным явл указатель, как ты хочешь проверять невалидность объекта?

И о чём у нас спор? О том, что понятие ссылки в Си будет ненужным?
Тогда зачем ссылки были добавлены в кресты? Почему рекомендуют передавать по ссылке, когда имеется возможность, а не по указателю?
Давай, давай, нападай, раздави меня полностью своими железеными аргументами.
145 1811372
>>11352

>Почему рекомендуют передавать по ссылке


Это кто?

>>11314

>Дебики даже не поняли написанное


Уйди остюда в спешке. Ты же глуп и не представляешь как работает MMU. При этом выкручиваешься, заявляя что Shared Memory не нужна. А вот своим последним постом ты вообще расписался в том, что ты биомусор - в ответ на резкие, но справедливые замемечания, ты полез в бочку. То, что ты чего-то не знаешь, это поправимо, но твоя реакция на указанные тебе ошибки с головой выдаёт в тебе тупую биомассу. Сдохни, наверное. Сделай мир чище.

Или обоснуй ненужность MMU, чтобы хоть как-то оправдать себя в глазах шарящх анонимусов.
146 1811386
>>11372
Воспользуйся ресурсами сети Интернет, посмотри мнения людей. Вот здесь неплохое объяснение, когда и что необходимо использовать:
https://ru.stackoverflow.com/questions/349/Чем-отличаются-ссылки-от-указателей-в-С

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

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

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

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

Столько агрессии в треде, даже в жизни столько не видел.
147 1811387
>>11352
Компиляторы С++ имплементят ссылки через указателину и открытие, да?, без особых валидаций. Стандарт не требует рантаймовых проверок ссылки на nullptr. Так что все поведение в принципе возможно, хотя и является UB. Да и в принципе избегать и обрабатывать UB в С/С++ это задача программиста, компилятор зачастую только рад подкинуть дров в огонь
Если ещё добавить к тому что ссылки в С++ не имеют адресной арифметики.
То наверное единственная польза от ссылок аля С++ в языке Си - синтаксический сахар, чтобы везде не писать разыменования указателя, а делать это просто по обращению к идентификатору.
Может вы ещё какие-то пользы подкинете, но с текущей реализацией которую можно слизать - пользы реально мало выходит. Либо надо все в куче переносить, с шаблонами и перегрузкой. Либо совсем нинужно.
148 1811389
>>11314

>Дебики даже не поняли написанное


О великий анон, расскажи же нам, непосвящённым и тёмным, зачем везде и всюду в многопользовательские ОС вставляются MMU, и делается защита памяти и запрещается запись в память другой программы, а межпроцессное взаимодействие сводится к посылке сообщений через shared очередь и передаче данных между сокетами
149 1811400
>>11352
Когда тебе учитель объясняет тему, ты считаешь что он "спорит" с тобой? Пиздец.
150 1811401
>>11386
Здесь у нас свободное общение. Ты можешь писать агрессивно, а можешь писать как лох ибаный и мямлить. В жизни ты столько агрессии и не увидишь, мы людоеды только на этом сайте
Противники топят за то, что ссылки в С++ кривые и уебищные, и чем такое пытаться переносить - лучше сидеть с указателями, которые дают тебе весь карт-бланш.
Тебе сверху по ссылкам показали что никаких проверок на null избежать не удастся.
И ещё, например, чего стоит олдовая шутка с ссылкой на локальную переменную, смешно, но работает - и является вовсе пиздецом. gcc насколько взбугуртнул от подобного что эту ссылку возвращает всегда 0 константой, мягко говоря запрещает подобное, да. А вот msvc и clang выдают рабочий код
Итог - чем такие ссылки, лучше с указателями ебаться.
151 1811403
>>11400
Учитель тоже учится во время учебного процесса. Факт.
152 1811407
>>11386

>Спор начался с твита человека, описывающего что он хотел бы добавить в ЯП Си.


Чел, ты... Он не хочет ничего "добавить" в ЯП Си, это ирония такая была над тем как комитет извращает фичи из с++ когда добавляет их.

> Какой-то анон на меня напал


На тебя никто не "нападал", ребенок, ты начал нести ахинею что ссылка защищена от присваивания nullptr, на что тебя обоссали с пруфами, приведя листинг в котором ссылки не запрещают никакие присваивания nullptr.
Просто съеби куда нибудь в страхе.
153 1811412
>>11407
Он "сломал" ссылку другим способом (при котором сама ссылка корректная, а объект - нет). Ссылка защищает от явной передачи nullptr.
Если передаешь по указателю, то nullptr можно передать в ЧИСТОМ ВИДЕ. Со ссылкой такое у него не получилось, хотя я попросил его предоставить такой пример. А знаете почему? Потому что ссылка должна указывать не реально существующий объект. Кто ещё обоссан? С чего такие резкие выводы?
154 1811415
>>11412

>при котором сама ссылка корректная, а объект - нет


Что за хуйню ты несешь?
В общем тебе уже все объяснили.
Ссылка защищает от конструкции MyStruct& ref = nullptr и от конструкции foo(nullptr)
Так просто не будь дауном и не пиши так. Это совсем нетрудно, это личералли два слова рядом, а не какие то сложные конструкции, которые надо искать по всем файлам.
Больше ни ссылка ни nullptr ни от чего не защищают.
Когда твою функцию foo(&) вызовут так ptr=NULL;foo(ptr) никакая защита не поможет и твоя функция упадет
Поэтому тебе ВСЕ РАВНО придется проверять то что тебе передали по ссылке на NULL, если ты не хочешь чтобы твоя функция падала.
155 1811416
>>11415
ptr=NULL;foo(*ptr)
быстрофикс
156 1811419
>>11415
Это я и хотел донести, что ссылка защитит от явной передачи nullptr.
157 1811420
>>11419
Не всегда.
158 1811422
>>11420
Но мы же и не рассматриваем все случаи.
159 1811423
>>11422
А нужно рассмотреть все случаи. Чтобы принимать какую-то вещь правильно.
Принимая закон в государстве, не рассматривают же его только с одной стороны?
160 1811425
>>11423
Но я изначально указал пример, который мы рассматриваем (передача структуры в функцию, проверка указателя на nullptr).
Спор не про то, что лучше: указатель или ссылка, а про то, что мой оппонент утверждает (пусть и не явно), что ссылки бесполезны. Зачем же тогда были введены ссылки? - рит.вопрос.
Я не могу полагать что такие языки, как C и C++ будут забивать ненужным г*вном. Значит всё-таки применение ссылочкам-то нашлось. Вариаций решения проблемы может быть много, выберите то, какое вам по душе. Вечно эти споры программистов (или ещё личинок) в интернете ни о чём. Может закроем тему?
161 1811426
>>11419
И про это тебе уже поясняли - для этого никакой тип nullptr заводить не нужен, компилятор ровно так же может обнаруживать передачу обычного 0.
162 1811429
>>11425
В с++ и шаблоны добавили, это не значит что надо раздувать си и тянуть все подряд.
163 1811432
>>11426
Про nullptr разговора и не было, я не говорил, что его нужно вводить. В Си пока что хватает обычного NULL-а.
164 1811434
>>11429
Когда обрабатываешь разные по типу параметры, то приходится функции копировать. Насколько мне известно, дубляж очень схожих или даже эквивалентных кусков кода является плохим тоном.
Языку нужно как-то развиваться и не стоять на месте.
Можно предположить, что Си пойдет по какой-то из нижеперечисленных дорог:
1. Не перенасыщен функционалом, но при этом безопасный язык.
2. Большой функционал, по безопасности остаёмся на этом же уровне.

Сугубо мне сипатичен 1-ый вариант. Большой функционал и определенная совместимость с Си есть у крестов. Пока хватает.
165 1811435
>>11432
Пошли маневры
>>10047
166 1811437
>>11435
Какие ещё маневры?
167 1811441
>>11437

>Про nullptr разговора и не было


>весь тред обсуждается nullptr

168 1811444
>>11441
Мы разговаривали о ссылках и о проверка на nullptr.
Я подумал, что ты говоришь о введении nullptr-а в Си, такую тему я лично не поднимал.
169 1811445
>>11444
проверке*
170 1811446
>>10442

>разработчики MSVC просто ебанулись


или победил скриптовый мир, в котором консольному приложению не нужно показывать окано "Программа выполнила недопустимую операцию и будет закрыта."
171 1811449
>>11446
Скриптовый мир победил...
Интерпретатор оказался сильней...
172 1811463
>>11434

> безопасный язык


> Си


Галоперидола ему вколите, быстрее!
АХАХАХАХАХАХАХАХАХАХАХАХАХА
173 1811464
>>11463
Очевидно он имел в виду что Си не будет добавлять фичи, а пойдет в сторону безопасности.
174 1811467
>>11464

> Си не будет добавлять фичи


> а пойдет в сторону безопасности


АХАХАХАХАХАХАХАХАХАХАХАХАХАХА
175 1811471
>>11449
Та даже в embedded суки какие-то тянут Javascript и Micropython. Реально побеждает.
176 1811475
>>11471

> embedded


Не огорчайся. Со временем это всё отсохнет и отомрёт. Не совсем, конечно, но выродится в какую-нибудь гильдию писателей прошивок для маяков или чего-нить подобного. Короче, выродятся в секту.
177 1811481
>>11475
Будет секта Сишников и будем молится святому юниксу, и умному ершику для унитаза.
178 1811482
>>11475
Нихуя придумают какую нибудь новую хуйдуину и все начнется по новой.
179 1811494
>>11467
А что в этом смешного?
180 1811518
>>11494
Думаю ты сам понимаешь что язык Си не пойдет в этом направлении.
Ах, насчет nullptr - в proposal стандарта c2x оно уже есть https://hal.inria.fr/hal-02167929/file/n2394+appendix.pdf, но безопасности не добавляет особо
181 1811541
>>11518
Раз думаешь так, то изволь предположить и написать своё мнение о дальнейшем разивитие обсуждаемого ЯП. Небольшое условие: мы заведомо отменяем ту ветвь разгвора, что язык не будет развиваться или даже умрёт. Только вперёд, ни шагу назад!
182 1811555
>>11541
Просто перепишут все либы на Zig.
183 1811557
>>11555
хайль?
184 1811560
>>11541
Моё скромное мнение: легко может не состояться
- Докинут в стандарт пару функций. Видел про strdup и strndup
- Добавят в стандарт языка bool, true и false, и не будет больше ебли с числамине, она безусловно останется, но будет считаться дурным тоном или старым кодом
- nullptr добавят чтобы не тянуть макрос с приведением типа к универсальному указателюNULL короче сделают deprecated
- Систематизируют все эти __attribute__, __typeof__ может добавят.
- Видел ещё хотят добавить __attribute__(cleanup(func)) в стандарт как оператор defer, хорошая затея, приходится его макросить нынче. Весьма полезная штука, позволяет на Си сделать подобие RAIIне в полной мере, передачу владения сделать никак нельзя, но освобождать ресурс по выходу из функции - на ура
- Может докинут в стандарт __attribute__(constructor(ctor)) и __attribute__(destructor(dtor)). По сути одно ранится перед стартом приложухи, второе atexit по сути.
- Из спойлеров нового стандарта - есть предложение описать работу со знаковыми числами и дополнительным кодом, и описать правила переполнения чисел знаковых, минус 1 UB, и это наверное единственное что касается улучшения безопасности кода.
Какую-то часть из этого может докинули в c11
185 1811561
>>11557
Sieg было бы, тогда шутка была бы уместной.
186 1811562
>>11555
Зачем нужен Zig когда есть Rust?
187 1811563
>>11560
А как же строки (буфера)? Думаешь с ними делать ничего не будут?
188 1811564
>>11541
А если на минуту представить что в своей нише язык Си достик совершенства?

Вот тут забавно было когда шло обсуждения, а кто-то не понимал что генерирует компилятор. Вот каким боком мнение такого человека может быть весомым?
189 1811566
>>11562
Растоговно не нужно.
190 1811568
>>11564
Совершенству нет предела.
191 1811572
>>11563
Язык Си пытается быть как можно ближе к железу. Текущие строки как можно ближе. Вряд ли они будут что-то менять а их представлении. Максимум добавят ещё каких-то функций для работы с ними, если захотят кончено же.
192 1811575
>>11566
Зигговно не нужно.
193 1811577
>>11561
Шо то зиг, шо то зиг.
image.png45 Кб, 310x102
194 1811578
195 1811582
>>11572
Паскалевские строки настолько же близки к железу, насколько и сишные.
196 1811584
>>11572
Устройство строк можно было бы и не менять, хотя тоже неплохая идейка. Вот новые ф-и добавить действительно уже хорошо, а также усилить безопасность уж имеющихся.
197 1811585
>>11584
уже*
198 1811587
>>11582

> Паскалевские строки настолько же близки к железу, насколько и сишные.


По-моему единственное чем там от Си отличается - перегрузка "+" в конкатенацию строк. Но я с Паскалем вообще не работал.
>>11584
Устройство строк делает их легко переносимыми на любой тостер. Если функций добавить и можно, то каких? В голову приходят только для работы над unicode. Впрочем, у меня в проекте свои строки используются с динамической аллокацией, и я не капли не парюсь по этому поводу.
199 1811591
>>11584
Чего люди не придумают, лишь бы не изучать С++.
200 1811593
>>11591
Или Rust
201 1811604
>>11593
Слишком высокая абстракция. С++ этот тот же Си на стероидах. Точнее - его можно так использовать.
202 1811616
>>11575

>пук

203 1811618
>>11582
В паскалевских строках первым байтом идет ее длина, емнип. Что дает безопасность, которой в си строках нет, но делает всякую конкатенацию посложнее.
204 1811620
>>11593
Ненужен.
205 1811640
>>11618
А по сути-то нет вообще ни одной причины, запрещающий на Си реализовать паскалевские строки и наоборот.

На помню какой из компиляторjd, кажется майкрософтовский, а может и любой, схвавает вот такое описнаие

struct pascal_string {
int len;
char str[0];
}

И для Паскаля
Var
char_ptr :^byte;

То же самое что указатель на строку.
206 1811643
>>11591
Не будем делать поспешных выводов, дорогуша.
207 1811644
Что такое этот ваш Зиг? Очередная Vala/D?
208 1811657
>>11618
Это упрощает конкатенацию и прочее, ибо длину не надо считать.
209 1811661
>>11657
В си ты бы просто циклом копировал вторую строку на место первого NULL-терминатора, до первого встреченного NULL. В паскале тебе придется выделить новое место.
210 1811662
>>11644
Да, это лучший Си.
211 1811669
>>11661
В паскале ещё и ограничения на 255 символов, т.к длина указывается однобайтовым числом. Что насчёт лисп-лайк строк?
dead per dead 212 1811670
>>11661
Что тебе мешает скопировать вторую строку по смещению N+1, а потом прибавить L к байту длины.

Главный недостаток паскастрок - в ограничении 255.
213 1811673
>>11669
Ничего не мешает. Вроде в Zig так и работает.
214 1811683
>>11669

>В паскале ещё и ограничения на 255 символов


Это в классическом. Сейчас накидали новыйх типов. А пока Delphi гуляла по рукам, сделали по умолчанию string с бОльшим количеством байт. И добавили ключи компиляции, управляющие этим поведением.
215 1811684
>>11644
Кусок говна, вышедший из под очка хуесоса.
216 1811686
>>11684
Этот растаман порвался, несите нового.
217 1811687
>>11670
На глаз кажется тут больше операций в ассемблере выходит.
218 1811689
>>11673

>пук


Нафиг вы лезете со своим говном сюда?
219 1811690
>>11686
Мать твоя порвалась, когда я ее ебал.
Катись нахуй со своим говном. Си лучший.
220 1811691
>>11687
Напиши на Си и чекни через godbolt
Мне самому интересно, но лениво чекать
221 1811695
>>11687
s t r l e n
t
r
l
e
n
222 1811709
>>11662
А чем он лучше Си, чем Vala и D?
224 1811711
>>11710
https://godbolt.org/z/xv4bKr
фиксанул ворнинги
225 1811713
>>11695
Ну strlen сейчас наверное на интринсинках чтобы в 64 битный регистр по 8 байт строки читать, довольно быстрый.
226 1811736
>>11709
Vala и D скорее с++ - там есть ооп, функциональщина и т.д.
Zig - простой язык в духе си, минус сишный препроцессор, вместо которого есть comptime, т.е. constexpr, на них же получаются дженерики, также есть defer некое подобие деструктора для raii, обработка ошибок нечто среднее между исключениями и optional типом (err, result), async await, и легкая интеграция с Си либами из коробки.
227 1811738
>>09864
Ты же троллишь. Там же по факту вот что написано:

int n = 10;
do{
printf("n is %d\n", n);
}while(n-- > 0);


Я ХЗ почему никто не понял. Вот.
228 1811739
>>11736
Ну и модули вместо инклюдов.
229 1811740
>>11738
Форматирование слетело

int n = 10;
do{
printf("n is %d\n", n);
}while(n--> 0);

быстрофикс
230 1811784
>>11494

>А что в этом смешного?



В сишке одно из главных требований - обратная совместимость. Не ломая обратной совместимости, не убрать основныых граблей. Потому "расти в сторону безопасности" она может очень ограниченно. На самом деле, тебе уже сейчас никто не мешает делать рантаймовые проверки выходя за границы массивов. Более того, во многих арзитектурах это уже делается(каждый вызов маллока выдаёт кусок памяти на новой виртуальной странице, выход за её границе будет пойман механизмом виртуальной памяти).
231 1811791
>>11736

>Zig - простой язык в духе си, минус сишный препроцессор, вместо которого есть comptime, т.е. constexpr, на них же получаются дженерики, также есть defer некое подобие деструктора для raii, обработка ошибок нечто среднее между исключениями и optional типом (err, result), async await, и легкая интеграция с Си либами из коробки.


Ну и что это даёт?
232 1811792
>>11739
Это типа разница?
233 1811805
>>11791
Как известно в с++ три разных языка - сам с++, макросы си, и шаблоны.
Сишные макросы на подмене текста вообще зло, и при этом довольно слабые по возможностям. В зиге это все работает на одном языке.
Defer означает что ты пишешь код инициализации чего-либо и тут же под ним код деинициализации - не надо скролить по десяткам файлах в поисках этого и путаться в лапше вызовов.
Обработка ошибок в сишке это всегда лотерея, угадывать куда там в errno записали или вернули 0 это успех или 1 это успех. Единый механизм это хорошо. Плюс он заставляет тут же switch обработать все ошибки - не забудешь проверить что файл не открылся.
234 1811809
>>11711
И чисто по строчкам Сишный подход меньше по размеру. Хммммммм. Заставляет задуматься
235 1811811
>>11809
Еще и переменную под счетчик пришлось завести.
236 1811815
>>11805
И, зачем ещё нужен очередной велосипед?
Если не велосипед, то как мне написать прошивку на Zig и собрать ее под stm32f4?
237 1811831
>>11815
Да вроде без проблем, глянул народ такое делал.
238 1811854
>>11831
А лямбды и функции внутри функций есть?
239 1811861
>>07650 (OP)
Поясните нубасику.
Есть библиотека и в ней надо объявить глобальную переменную(да, их надо применять в крайних случаях, но иногда они необходимы).
Я правильно понял:
1)в файле library.c пишем:
uint8_t var = 0;
2)в файле library.h пишем:
uint8_t var;
3)в main.c подключаем хеадер либы;
#include "library.h"
4)а если переменная var должна быть доступна в other_librari.c без подключения хедера, тогда в ней пишем:
extern var:
240 1811865
>>11854
Не уверен. Может быть уже есть. Даже если нет кто-то писал библиотечную.
241 1811892
>>11861

> 1)в файле library.c пишем:


> uint8_t var = 0;


Да.

> 2)в файле library.h пишем:


> uint8_t var;


Нет, extern uint8_t var;

> 3)в main.c подключаем хеадер либы;


> #include "library.h"


Да.

> 4)а если переменная var должна быть доступна в other_librari.c без подключения хедера, тогда в ней пишем:


> extern var:


Вроде так. Но лучше включать заголовочник
242 1811905
>>11475
АААА, ХУЙ ТЕБЕ!))))))))))))
243 1811912
>>11475
А как же интернет вещей и эпоха web3.0?
244 1811920
>>11078

>Я у тебя попрошу совсем немного. Я не буду тебя стебать, троллить и т.д., мне чисто интересно. И так, что тебя мотивирует это делать? Какая у тебя мотивация? Что тобой движет? Какая цель этих действий?


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

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


25 лвл, прогаю микрики.
245 1811946
>>11912
там скрипты даже вредны, ты же не хочешь чтобы твоя кофеварка грелась процессором, а не тэном.
246 1811975
>>11912

> интернет вещей


помойка говна

> и эпоха web3.0?


Эпоха подкатов на штанах, клубничного смузи, моноколес и гироскутеров, жидких бородок и андеркатов, миллиона библиотек, typescript, babel, gulp, d3, npm, jest, angular, react, vue, и прочего говна для пидорасов, миллиарда вкатывальщиков и знакомых которые "ха, я сча вот джаваскрипт учу, устроюсь программистом и буду 20к рубать на изян, а ты как %аноннейм% поживаешь?". Фу блять, мерзко.
image.png17 Кб, 640x361
247 1811991
>>07650 (OP)
А можно сделать так?
К библиотеке 1 подключить хедер библиотеки 2, а к библиотеке 2 подключить хедер библитеки 1? Т.е. встречно включить хедеры.
И как тогда хедеры библиотек подключать к main.c?
Описал и нарисовал немного сумбурно, но суть думаю вы поняли.
image.png18 Кб, 619x353
248 1811997
>>11991
Фикс картинки.
Понятное дело, что хедеры либ к своим с-файлам тоже подключены.
249 1811999
>>11997
Для этого надо будет умно писать хедеры, чтобы не было циклических зависимостей.
Только интерфейс грубо говоря
250 1812068
>>11999
#pragma once или #ifndef + #define + #endif хватит для подобной задачи.
251 1812087
>>12068
Не хватит если в одном struct A; struct B { A a; }
а во втором struct B; struct A { B b; }
252 1812112
>>12087
Не думаю что он долбоеб так писать.
253 1812114
>>12112
Новичку очень легко запутаться в зависимостях.
sage 254 1812121
>>12087
Такого кода не может быть, рекурсивное вкладывание структур лишено какого-либо смысла, и не может быть реализовано нигде и никак. А если там указатели, то такие forward-декларации, как у тебя, отлично решают проблему. Это нормальный подход, или можно так же тайпдеф запилить.
255 1812124
>>12121
Плюсую тебя
256 1812130
>>11861
Если хочешь глобальные переменные, то это делается так:

- в library.c пишешь:
#ifdef DEFINE_GLOBALS
#define GLOBAL
#define INIT(x) =x
#else
#define GLOBAL extern
#define INIT(x)
#endif

- там же объявляешь свои переменные:
GLOBAL uint8_t var INIT(0);

- в один файл (library.c) инклюдишь:
#define DEFINE_GLOBALS
#include "library.h"
#undef DEFINE_GLOBALS

- во все остальные инклюдишь как обычно.
257 1812131
>>12130

>в library.c пишешь


в library.h то есть
быстрофикс
258 1812135
>>12130
Галоперидольчика вколите ему!
259 1812156
>>11920
Спасибо за ответ.

Но... Неужели прямо так всё плохо в embedded? Неужели нету надежды никакой от слова "совсем"?
260 1812158
>>11975
Фублять, ненавижу этих пидарасов и их эту пидарскую хуйню.

НАХУЙ СМУЗИ! СЛАВА ВОДКЕ! Я, БЛЯТЬ, СЕРЬЕЗНО!
261 1812164
>>12121
Естественно код был условный. И естественно чтобы решить проблему надо знать о форвард декларейшнах. О том и было сказано - надо продумывать зависимости. Хуй знает с чем ты поспорить решил.
262 1812165
>>12130
Во, этот шарит.
263 1812179
>>12165
Как усложнить простое, да. Шарит, определенно.
264 1812794
Подскажите, пожалуйста, почему fgets нихуя не хочет считывать.
https://onlinegdb.com/r1hNQ8USw
Я вычитал, что проблема в сканфе - я избавился от сканфов, но по-прежнему считывается только первый инпут.
265 1812815
>>12794
Если я правильно понимаю код, то ты создаёшь на стеке массив из 2 структур, внутри структуры 2 массива char, по 20/25 символов. Данные в стеке могут быть заполнены мусором. Ты от этого мусора считаешь strlen(), и пытаешься от высчитаного считать символы в stdin.
В вызовах fgets вызов функции strlen поменяй на 20 и 25 соответственно, вроде должно будет работать.
266 1812818
>>12815
Забыл добавить это прям известный всем факт - strlen() и strnlen() считают длину фактической нультерминированной строки в каком-то буфере. У тебя же в строках был мусор.
Тебе же надо было считать длину буфера, ведь именно ее запрашивает fgets вторым аргументом.
Если буфер выделен статически или на стеке - можешь заюзать sizeof(buffer)/sizeof(buffer[0])
Если динамически в куче - изволь самостоятельно трекать что в malloc передал.
Ещё есть gcc расширение на выделение на стеке динамических буферов и alloca, но это маньяк-style
267 1812903
>>12815
>>12818

простой замены strlen на sizeof в его случае будет достаточно.
268 1812911
>>07650 (OP)
Программирую контроллеры на Си. Решил привести прогу в порядок - разбить на несколько .с и .h файлов.
Проблема заключается в том, что большинство *.с файлов обращаются к переменным, которые находятся в UNION.
Каким образом мне правильно объявить union как extern, чтоб иметь доступ к переменным union?
269 1812913
>>12815
>>12818
Огромное спасибо за развернутый ответ, заработало.
правда все равно осталось неработающим говном, но я смог разобраться
270 1812925
>>12903
Именно.
>>12913
Пожалуйста.
271 1812930
>>12911
Так же, как и остальные, см. выше: >>12130 >>12131

Объяви свой юнион в отдельном .h файле:

typedef union
{
struct hui_t hui;
struct pizda_t pizda;
struct jigurda_t jigurda;
} yoba_union_t;

И используй как тип глобальной переменной:

GLOBAL yoba_union_t INIT({.hui = {...}, .pizda = {...}, jigurda = {...}});

Ну ты понел.
272 1812933
>>12930
GLOBAL yoba_union_t yoba INIT({.hui = {...}, .pizda = {...}, jigurda = {...}});

быстрофикс, что ж такое-то по вечерам...
273 1812947
>>12911
Все работает как с переменной.
Можешь заюзать страшные макросы типа сверху или просто ебнуть в си файл:
union { //fields
} my_union;
И в заголовочник:
extern union { //fields
} my_union;
Везде добавляешь заголовочник, появляется в видимости юнион из другого юнита компиляции.
Надеюсь у тебя нету там каких-то трюков с ним, в union хватает подводных камней и UB, и не знаю как это может отразиться на работе с extern
052245218361200.jpeg219 Кб, 836x1200
274 1813047
275 1813098
Привет, анон. Есть два вопроса:
1) Можно ли как-то кастить поинтеры (причем любого порядка) в простые значения? Знаю, что есть ptrdiff_t, но желательно обойтись без него.
2) Нужно передать в функцию лист аргументов неопределенного размера. Причём тип аргументов может быть как символьный указатель, так и указатель на объект иного типа, или (вытекает из первого вопроса) просто long long int. Ничего иного кроме https://pastebin.com/wTMeN8Lm мой моск пока не выдумал.
276 1813104
>>13098
Ты явно страдаешь какой то хней.
277 1813123
>>13098
зачем? В стандартной либе уже есть stdarg.h c va_list
278 1813133
>>13098
1. Берешь и кастишь. Хотя задача странная какая-то раз тебе нужно числовое значение указателя.
2. Заведи структуру список отдельную, и пили функции для работы с ней, конец списка - элемент NULL. И передавай его как 1 аргумент. Это вариант если тебе стек жалко.
Если не жалко или список будет не слишком большой - va_list и функция с ... аргументом.
279 1813749
Как вкатиться в имбед ньюфане? Знаю СИ(стандартные библиотеки только) довольно неплохо знаю С++(очень много библиотек и функцонала весь не знаю конечно, но могу на нём писать).

Знаю популярные алгоритмы: пузырёк, всатвка, слияние, быстрая и подобные.

Что ещё нужно изучить? Где искать вакансии для вкатунов в имбед?
280 1813762
>>13749
Как мне кажется - для эмбеддеда нужно больше знать особенности микроконтроллеров и разные технологии по типу spi, i2c, uart как работает и прочее. Ну и быть хорош в схемотехнике, понимать базово какие-то электронные моменты. Шарить в RTOS, и просто в написании софта для baremetal.
281 1813763
>>13762
анон, спасибо большое, я примерно так и думаю. но мне желательно услышать бы конкретные указания и посмотреть вакансии на эмбед.
282 1813779
>>07650 (OP)

> Visual Studio Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2.


Подскажите, есть один параметр который передает аргументы напрямую в clang, стоит ли так засовывать Ofast? Или O3?
283 1813783
>>13763
Это была очень плохая идея в одном посте спросить "как вкатится" и за вакансии. Универсальное правило - вкатывайся до тех пор, пока тебе на начнут спамить хеадхантеры. И вот на этом уровне работа тебя найдёт.

Был бы работодателем, сразу бы скомкал твоё резюме . У меня нет ресурсов чтобы тебя обучать.
284 1813829
>>12794
работают на заводе им. Масленникова,
Ты из Самары? Какого года эта методичка?
285 1813936
Сколько в универах изучают теорию Си и сколько уделяют практике время?
4 часа в день учить теорию реально совместно с 2 часами практики эдак 4-2? Или 2-2 оптимально?
286 1814001
>>13829
Несоответствие тематике треда, рекомендуется выдать условное предупреждение.
Рекомендую в дальнейшем не покушаться на определённую анонимность участников форума. Благодарю за внимание, Аноним!
287 1814022
>>13936
Хах, если бы хоть кто-то изучал так.
А по факту - забей на это все, измучаешь себя темпом не своим, потом забьешь и будешь ненавидеть.
Читай и изучай, практикуйся сколько можешь, а если надоедает - отдыхай столько, чтобы интерес опять появился.
Будто в этом что-то есть непонятное вообще
288 1814032
>>13936
Многовато теории. Начинай ковырять код смолоду.
289 1814033
>>14001
Ты даун?
290 1814036
>>13783
ну ресурсы на сбoрку шкoльнoгo ранца у тебя надеюсь есть?
291 1814038
>>14022
Ты прав тут. Для инфы скажу что не начинаю изучать, уже знаю все об поинтерах, решаю задачки на кодеваре, думаю алгоритмы изучать начать с математикой, ибо нравится.
Вот сегодня сидел весь день и изучал строковые функции по учебнику Праты, но я успел только повторить и завтуплять над книгой но таки понять как работает strcmp и написал пару программ. С утра правда еще рефактор задачки сделал.
А щас думаю что не потяну. Вчера не отдохнул сидел над задачей и туплю сижу. В общем 2 часа теорий буду.
Кстати еще слышал от кого то что практики должно быть 90% а теорий 10%.
>>14032
Оки.
292 1814040
>>14038
правильно слышал, практики всегда должно быть больше, я вообще делаю так - 1 час залипаю в того же прату, 2 часа кодирую, и один час тупо учу инглиш
план уберчеловека
293 1814052
>>14040
как ты "учишь инглиш"?
294 1814082
>>14052
Играю в ультиму онлайн на американском сервере.
295 1814084
>>14082
нoрм. я на фoрчoнге сижу
296 1814085
Вкатываюсь в ламповый (надеюсь) тред. Что в 2020 году пишется на С кроме операционных систем, драйверов и прошивок для микроконтроллеров? Я хотел бы писать как можно больше кода на С для того, чтобы очень хорошо понимать его (хотя основные концепции языка вроде указателей и структур я осилил), но хочется выйти дальше хэллоуворлдов в юзерспейсе. Сейчас я программирую под STM32F103C8T6 - если, конечно, дергание ног и посылку самых разных данных в логический анализатор по UART и I2С можно назвать так.
297 1814088
>>14085
напиши гта на си.
298 1814090
>>14088
Лол.
299 1814092
>>14090
или бoрду написать на си. вoт этo реальнo крутo будет, абу пoвесится тoчнo
300 1814096
>>14092
А вот сейчас я проиграл неистово.
301 1814110
>>14092
Это совсем не сложно
302 1814111
>>14085
Попробуй оконное Win32 приложение. Когда вернёшься к микроконтроллерам, будешь писать уже в другом стиле.
303 1814136
>>14090

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

https://www.lua.org/pil/24.html

https://docs.python.org/3/extending/embedding.html

и да, первая и вторая жта, которые с видом сверху на С и написаны, шах и мат, оопетросяны.
304 1814140
>>14110

Угу, сложно только что бы нельзя было URI инъекцией сервер сдампить.
305 1814145
>>14085

>Сейчас я программирую под STM32F103C8T6 - если, конечно, дергание ног и посылку самых разных данных в логический анализатор по UART и I2С можно назвать так.



Ну то есть ты сракотан тамошними таймерами и их режимами и множителями еще себе не порвал? И даже USB девайс не написал, хоть это даже червекореш Хластер сделал?
306 1814150
>>14145
Этого я пока еще не сделал, так как переходник UART-USB пока не пришел с алиэкспресса, лол.
307 1814151
>>14111
А такое я год назад делал, кстати.
308 1814159
>>14150

>Этого я пока еще не сделал, так как переходник UART-USB пока не пришел с алиэкспресса, лол.



Ненене, девид блейн, аппаратный USB, где там в дескрипторе одна история охуительнее другой.
309 1814160
>>14159
А, это надо будет сделать.
310 1814162
>>14150
Так тебе он не нужен, тебе нужно имеющийся на плате usb задействовать, а программировать и отлаживаться через STLink v2, который ты и должен был купить себе вместо USB-Uart.
311 1814164
>>14140
Блин ну это же простой CRUD. Надо просто быть немного повнимательнее.
Или взять Zig
312 1814168
>>14162

> тебе нужно имеющийся на плате usb задействовать


Это уже я понял по сказанному выше.

> программировать и отлаживаться через STLink v2, который ты и должен был купить себе вместо USB-Uart


STLink v2 я как раз и юзаю для прошивки, а переходник я заказал затем, чтобы запилить устройство, которое можно будет подключить к пекарне по USB.
313 1814194
>>14168

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



http://we.easyelectronics.ru/STM32/stm32-organizaciya-virtualnogo-com-porta.html
314 1814200
>>14194
Спасибо за ссылку.
315 1814244
>>14085
Ох, я щаз тоже этим развлекаюсь)))

ЧИТАЙ RM - ПИШИ - ПРОШИВАЙ - ЕБИ ГУСЕЙ ДЖАВАСКРИПТЕРОВ!
316 1814245
>>14145
Та че прям сракотан разрывают таймеры? Не, если сразу сесть и педалить - то да, а если почитать и потом уже их "ковырять", то нихера не разрывает, лол. Вообще, таймеры на стм32 мне пиздец как зашли. Шо хош на них можно сделать.

мимо >>14244 -анон
317 1814259
>>14245
Таймеры не нужны.
318 1814360
>>14244
Согласен, системное программирование - вещь крайне охуительная.
319 1814420
>>14136
Есть AngelSript и ChaiScript.
320 1814456
>>14259
Почему, анон?
321 1814509
>>14456

Потому что кекогерцы порешают, азазаза, берем дорогой камень для копеечной задачи, очевидно же.
sage 322 1814511
>>13098

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


uintptr_t

> Нужно передать в функцию лист аргументов неопределенного размер


Да, все делаешь правильно, но обычно это делают через массив struct { int tag; union { type1 v1; type2 v2; type3 v3; type4ptr v4; }; }, где тег указывает тип.

>>14245
Обычные таймеры там. Если есть предшествующий опыт с таймерами, хоть с 8254, то никаких проблем не возникает.
323 1814516
>>14509
Ыыыыыыыы))0))0)) Жопаскрыпт паришаит))0)0))))00)0)
324 1814518
>>14516
Добрый день, это филиал типичного программиста из ВКонтакте?
325 1814525
>>14518
Добрый пень, нет, это Абиг Траоре на связи опять выхожу, мудило
326 1814529
>>14456

Потому что в правильных ядрах вместо них испольхуются синхронные сообщения с таймаутом. И на этих таймаутах реализуются любые задержки.
327 1814544
Продолжаю искать: IEEE-754_2019.PDF, DO-178C.PDF (A и В тоже подойдут), DO-254.PDF, ARINC-653.PDF. Без смс и регистрации!
328 1814549
>>14529

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


Речь про ARM? Пришли ссылку с примерами.
329 1814564
>>14549
Речь про микроядра.
Но потренироваться можно и на

DWORD WaitForSingleObject(
HANDLE hHandle,
DWORD dwMilliseconds
);


и

DWORD WaitForMultipleObjects(
DWORD nCount,
const HANDLE *lpHandles,
BOOL bWaitAll,
DWORD dwMilliseconds
);
330 1814573
>>14564

>микроядра


Нинужно
331 1814574
>>14525
А по-моему ты просто бимбоунитаз или мясо
332 1814576
>>14573
Ещё б ты чего нибудь в них понимал.
333 1814594
>>14529
Хммм... Анон, я чутка в замешательстве. А вот если нужно загенерить, например, ШИМ или измерять импульсы там? Ну да, это таймеры стм32 умеют.
334 1814597
>>14544
На 754 на вики есть номер doi, а по нему ищется в сай-хабе.
335 1814599
>>14594

> ШИМ или измерять импульсы там?


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

Через таймеры это как микроскопом гвозди забивать. Сообщениями можно тоже читать ШИМ, но это так же криво, как и таймерами.
336 1814602
>>14599

>Сообщениями можно тоже читать ШИМ


Точнее, выдерживать интервалы для чтения шировты импульса с помощью сообщений это кривизна.
337 1814638
>>14576
Ты дегенерат? Зачем в них что-то понимать, если они не нужны?
338 1814661
>>14638
От тебя это не зависит. Они как в анекдоте про старого и молодого быков - медленно, важно и с достоинством спустятся с холма вниз и покроют всё стадо.
339 1814680
340 1814689
>>14661
Если ты намекаешь что захватят все ОС микроядра - дрочи у батареи о своей маняфантазии, хуй вам собакам на рыло с говноидеей, вам бы на джаваскрипте понаписывать гондонкода и операционку на реакте переписать, знаем вас пидрил долбоебских.
Если хочешь пороться в жопу с низкой производительностью - проследуй на парашу, говно.
341 1814719
>>14689
Мнение глупых людей меня мало интересует.
Особенно повеселило "низкой производительностью" - сразу видно укушенного Торвальдсом.
342 1814725
>>14719
Какая илита нарисовалась. На микроядра дрочит бесполезные. Когда у тебя десктоп будет работать на полноценном микроядре - приходи.
Про макос втирать не надо, там сервисом стартует бсдшное ядро и вертится как большой монолит поверх mach. Иначе перфа нету.
Весели нас дальше, ебантроп.
343 1814742
>>14725

>Какая илита нарисовалась.


Да.

>Иначе перфа нету.


Ты сам-то хоть мерял? Или веришь Торвальдсу?
Что до десктопа, то когда линуксы на десктопе хотя бы близко сравнятся по отзывчиваости GUI с Windows, тогда приходи.
344 1814743
>>14599
Анон, в STM32 таймеры умеют в ШИМ "искаропке". Т.е. "руками" ничего делать не нужно, кроме настройки-инициализации.

Там прямо есть режим, который в документации так и называется "PWM". Все, что нужно сделать, это настроить нужный канал таймера на выход, задать частоту этого самого ШИМ, задать duty cycle, запустить таймер (бтв, задаётся это в 4 если не проебался регистра, лол; хочешь - можешь вообще взять hal но он слегка странноват и говноват, там надо будет дернуть пару функций и все). Все.
345 1814744
>>14743

>настроить нужный канал таймера на выход, задать частоту этого самого ШИМ, задать duty cycle, запустить таймер (бтв, задаётся это в 4 если не проебался регистра, лол; хочешь - можешь вообще взять hal но он слегка странноват и говноват, там надо будет дернуть пару функций и все). Все.



Ключевой вопрос в том, как используется таймер. Генерирует ли он прерывания и суть этих прерываний. Всё остальное вторично.
346 1814751
>>14744
Если не включать прерывания в режиме генерации ШИМ, их, соответственно, не будет. Т.е. таймер будет генерить ШИМ э самостоятельно, без вызова прерываний т.е. сама "железка" таймера будет это делать, как бы в фоне, без участия программы.
347 1814753
>>14751
Против таких таймеров таймеров я ничего не имею. А вот прерывания от таймера это зло. Пока ещё необходимое, но зло, от которого надо избавляться.
348 1814931
char strtoupper(char arg)
{
while(((arg++) = toupper(arg)));
return arg;
}

В чем подводные камни?
349 1814935
>>14931
Сколько заплатишь за свои задачки?
350 1814937
>>14742

> Да.


Пизда.

> Ты сам-то хоть мерял? Или веришь Торвальдсу?


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

> Что до десктопа, то когда линуксы на десктопе хотя бы близко сравнятся по отзывчиваости GUI с Windows, тогда приходи.


Мне отзывчивости wayland и kde5 хватает, делаю ещё nice по процессу композитора, очень отзывчиво работает все. Так что я тут, пришел уже. Что ещё скажешь, мразь?
351 1814939
>>14753
Что плохого в прерывании от таймера? Прям сферическое прерывание в вакууме от таймера.
352 1814959
353 1814961
>>14935
Типа почему \*arg++ это плохая затея.
354 1814962
>>14939

>Что плохого в прерывании от таймера?


То, что оно асинхронное. Как результат, тебе придётся быстро-быстро его обработать в контексте прерывания, а затем синхронизировать с лругими процессами.

В нвстоящий момент прерывание от таймера нужно только лишь переключения задач, которые не осуществляют никакого ввода/вывода.
355 1814973
356 1814976
>>14973
Говно ты?
357 1814979
>>14976
Мать твоя говно петушиная джаваскриптерская
358 1814980
>>14979
Хуя порвало
359 1814981
>>14980
Мамку твою порвало когда ее районом всем ебали)))
360 1814985
361 1815026
Если создам статический массивчик структур и к нему в том же сурце напишу врайт, гет и рид методы, то это сразу всё пиздец, о-о-пэ, слыш говно уебывай в свои кресты)))0)?
362 1815042
>>15026
Даже за одну мысль о таком - "эээ слыш уебывай в кресты!", не для того штульман и пердолики долбились в сракотан, чтобы ты писал код адекватно.
363 1815043
>>14962

>То, что оно асинхронное



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

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

Собственно, если брать специализированные МК такие как популярный в последнее десятилетие в автомобилях TriCore, то там так и делают, физически разделяя "реалтаймовую" и "умную часть":

https://www.infineon.com/dgdl/TC1797_DS_V1 3.pdf?fileId=db3a30431ed1d7b2011efeaa4ad16b6d
364 1815056
>>15043
Кажется, тот анон пытается сказать что если у него устоявшиеся процессы, то простой скедулер, по типу корутины, чекающий по очереди состояния, будет иметь меньший оверхед, чем переключение контеста в прерываниях, сохранение регистров, вот это все.
365 1815057
>>15043

>Наш физический мир и его события в принципе асинхронны


Это только на первый взгляд. Повышая частоту ты понимаешь что он синхронный.
366 1815078
>>15057

Ну так я и говорю, азазаза кекогерцы порешают, вьебем камень за 50 баксов вместо камня за 5 и все проблемы решены прерывания и таймеры не нужны.
367 1815082
>>15056

Если у него устоявшиеся процессы, то им в принципе не нужна система управления.

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

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

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

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

Поэтому шизой любителя микроядер в реальности никто не занимается, а блоки управления делают на TriCore, где по отдельным физическим ядрам разнесены ускоренная програмируемая обработка прерываний и генерик-расчеты.
368 1815092
>>15057
>>15082
>>15056

Чтобы исключить бессмысленные споры, я говорю вот об этом микроядре - https://www.l4ka.org/65.php и конкретно вот об этой спецификации - http://l4ka.org/l4ka/l4-x2-r6.pdf
369 1815096
>>15092

Ну я и говорю, что бы превратить асинхронные события типа зуба датчика грм/датчика детонации (грм - это, например, классический шкив 50-2 умножить на обороты, детонация - это аудиочастотный спектр от слышимого к ультразвуку и для эффективной обработки нужно сложные вейвлеты быстро гонять на по-сути аудиосигнале) в синхронные и сделать православно на микроядрах и сообщениях - это где-то гиперпыня на 4-5 ггц.
370 1815097
>>15096

>шкив 60-2



самофикс
image.png395 Кб, 1056x930
371 1815100
>>15078

>вьебем камень за 50 баксов вместо камня за 5 и все проблемы решены прерывания и таймеры не нужны



Не нужны. У тебя ограничение в пять баксов за чип? Доку в руки и пили вот это на пятибаксовом чипе.
372 1815106
>>15057
Не, частицы мерцают не дискретно.
изображение.png754 Кб, 640x381
373 1815111
>>15100

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

Напомню, шкив 60-2 крутится с частотой вращения коленвала, что дает частоту событий от 59 кгц на холостых до 590 кгц++ на всраку крученном спортивном моторе.

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

Вот, собственно, фотография платы известного древнего блока, даташит и характеристики МК, который в нем напаян - можешь поискать сам.
image.png99 Кб, 1053x595
374 1815118
>>15111

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



Ты просто не понимаешь с чем ты споришь. Я тебе маленько намекну, а ты уж сам решай.
375 1815121
>>15111

И, для сравнения, вот высер подобных тебе осешизиков, правда еще не таких поехавших как ты:

https://github.com/rusefi/rusefi/tree/master/firmware

Они притащили с собой ChibiOS, топовый 32битный STM32 камень и при этом у них всё равно всё это работает намного хуже, чем блок из 90х годов прошлого века на снятом с производства 8-битном МК.
376 1815122
>>15092
А где это микроядро можно покрутить ирл?
изображение.png18 Кб, 866x385
377 1815123
>>15118

> 59 кгц


> 9


>


> к


> г


> ц



> 16 Мгц


> 6


>


> М


> г


> ц

378 1815124
>>15122
На любой виртуальной машине. Делаешь обрраз флоппика и грузишь виртуалку с него.
379 1815125
>>15122

>А где это микроядро можно покрутить ирл?



https://os.inf.tu-dresden.de/download/snapshots/pre-built-images/
380 1815126
>>15125
А там что, ничего кроме hello world и монолита(линукса) поверх микроядра нету? Ахахаххахахахахахха
381 1815127
>>15123
Не имеет значения. Но если хочешь поспорить, то давай спецификацию на датчик оборотов и датчик детонации. Тогда поспорим.
382 1815128
>>15106
Вообще-то синхронно. Они передают между собой сообщения, а весь мир работает под управлением микроядра L4Ka::Pistachio.
383 1815129
>>15125
Как корабль назовёшь, так он и поплывёт.
Не Дрезден, а Карлсруе.
384 1815130
>>15124
Флопик? Оно ещё живо?
385 1815131
>>15118

>Ты просто не понимаешь с чем ты споришь



Понимаю, спорю с поехавшим дебилом.

16000000 / 59000 = 271.2 тактов

16000000 / 590000 = 27.12 тактов

А он мне какие-то потоки предлагает. Я там в них вилкой буду чистить, в окне в 27 тактов?
386 1815132
>>15131
У тебя выйдет некрасивый код. Решать тебе.
387 1815136
>>15131
Спеку на датчики неси. Или у тебя каждый оборт коленвала фотодиодом моргает и генерирует прерывание?
388 1815140
>>15136
Вообще-то зачастую реально он создаёт прерывание на каждый поворот коленвала.
389 1815142
>>15127

>то давай спецификацию на датчик оборотов



https://www.infineon.com/dgdl/Infineon-TLE4929C-DataSheet-v01_10-EN.pdf?fileId=5546d46265257de8016537ce85935e53

На датчик детона спецификацию не найду - считай его сейсмомикрофоном.
390 1815145
>>15136

>Или у тебя каждый оборт коленвала



60 раз за оборот, мань.
391 1815146
>>15145

И в определенное прерывание из этих 60 надо брызнуть малафьёй бенулином в цилиндр и поджечь искру.
392 1815147
>>15140
>>15142

Сделайте уже спецчип и не партье мозги. Или в ПЛИСину залейте.
И чтобы несколько режимов понимала - Эконом, Город, Трасса, Спорт.

И не ебите мозги. Ниша ДВС узкоспециализированная.
393 1815151
>>15147
Зачем? Это выйдет слишком дорого делать и не выгодно.
Плюс нельзя будет подтюнить ДВС так как необходимо, если все будет в железку зашито.
394 1815154
>>15147

>Сделайте уже спецчип и не партье мозги. Или в ПЛИСину залейте.


>И чтобы несколько режимов понимала - Эконом, Город, Трасса, Спорт.



Никто мозги не ебет, всё это с завода работает на заводских мозгах на вот этом восмибитном камне на 16 мгц частоте, даже самые крутильные срако моторы за десятку:

http://pdf4.datasheet.su/831911.pdf

Без каких либо плисов-хуисов.
395 1815156
>>15111
Анон. Я вижу, ты вроде бы разбираешься в automotive, а именно в ЭБУ и вот всей этой кухне.

У меня есть пару вопросов:
1. Какие сейчас самые распространенные МК в данной сфере? C509, так понимаю, уже снят с производства. TriCore знаю, а... еще какие?
2. Возможно ли достать сам кайнд оф отладочные платы на этих камнях где-нибудь? Желательно, у китайцев, по дешману, ггггг. Но, если не - то не. Ну или, хуй с ним, сами МК.
image.png237 Кб, 805x753
396 1815160
>>15151
>>15154
С этим можно бороться. Ничего сверхестественного.
Компилятор Си хоть есть для этой беды?
397 1815163
>>15156

>1. Какие сейчас самые распространенные МК в данной сфере?



В большинстве современных блоков ты встретишь Infineon Tricore различных модификаций.

https://www.infineon.com/cms/en/product/microcontroller/32-bit-tricore-microcontroller/

>>15156

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



Сами камни по дешману можно - так как они суть ходовые запчасти для ремонта блоков. На алике тот же TC1797 за тыщу-300

На маузере вот:

https://ru.mouser.com/Semiconductors/Embedded-Processors-Controllers/Microcontrollers-MCU/32-bit-Microcontrollers-MCU/TriCore/_/N-a85nmZ1yzmonk

Всякие отладочные ардуины тоже в наличии:

https://www.infineon.com/cms/en/product/microcontroller/32-bit-tricore-microcontroller/32-bit-tricore-aurix-tc2xx/aurix-family-tc27xt/
398 1815164
>>15160
Зачем бороться если и так работает?
Компилятор естественно есть.
399 1815167
>>15164
Для развития конечно. Например, для ДВС энергопотреблением этого контроллера можно пренебречь. А если где-то от батарейки будет работать, то уже всё не так радужно.
400 1815172
>>15167
Где нужно работать от батарейки - там будет другой микроконтроллер, заточенный на работу от батарейки. Но мы в данный момент говорим за решения для контроля над двигателем.
401 1815178
>>15163

Вот, собственно, ардуина из камня для эбу за 140 bucks:

https://www.infineon.com/cms/en/product/evaluation-boards/kit_aurix_tc275_ard_sb/
402 1815187
>>15172
Вернёмся к этому разговору несколько позже.
У меня чувство что ты вербуешь в свою "религию", а я в свою. Посмотрим чей "бог" сильнее.
403 1815188
>>15187
Естественно мой сильнее
изображение.png88 Кб, 437x766
404 1815192
>>15178

Ебать, а вот тут я уже проиграл так проиграл.
405 1815196
>>15163
Анон, огромное тебе спасибо! Теперь буду знать куда двигаться. Добра тебе! :3
406 1815198
>>15196
А вступишь в секту свидетелей микроядра L4Ka::Pistachio?
407 1815251
>>15198
Ха ха ха. Ну знаешь, если те, кто чтят священную спецификацию L4.X2 это секта, то вы - те, кто идолам поклоняются, да с бубном над исходным кодом танцуют - язычники.
408 1815377
>>15251
У нас ещё круче. Ща расскажу как у нас происходят встречи любителей микроядер. Мы собираемся у кого-то на квартире. Раздеваемся. До гола, далее мы берём и бреем очко, смазываем качественной смазкой на базе канифоли/спермы бомжа/гнили с дна мусорника. Затем начинаем плеваться в распечатанное фото Линуса Порвальдса. Долго плюемся. Назначаем главного падре данной встречи(скоро узнаешь зачем) с помощью генератора случайных чисел. Потом начинаем подсасывать друг другу хуй и дрочить на скрин mac os xникто не знает почемувсе дело в замашках на микроядерность наверное.Потом мы открываем спецификацию микроядра L4Ka::Pistachio, и начинаем неистово ебаться в жопу, гул стоит на весь двор. Затем заходит главпетух всех микроядер вместе с ручным гусем под руку. В руках главпетуха большой дилдо. Он начинает ебать гуся большим фаллосом. Все оргазмируют на спецификацию микроядра и ее неистовое совершенство, кончают на распечатку спеки на куске оборванного листа. Назначенный падре начинает слизывать сперму с этого листа.
409 1815408
>>15142
>>15145
А что нельзя считать только саму дырку, а остальное не считать?
Ну тупыыыые
410 1815431
>>15408
Посчитаешь дырку - узнаешь за какое время проходит 4 такта. На этом все.
Посчитаешь каждый зубец - точно сможешь знать когда происходит каждый такт. И в зависимости от этого отрегулировать обогащенность смесь, или время упреждения зажигания свечи.
image.png28 Кб, 640x213
411 1815434
>>15408
Просто им в голову не приходит что небольшим, ничтожным по современным меркам, транзисторным бюджетом можно добавить два регистра, один из которых считает количество такктов за один поворот коленчатого вала, а друой - число тактов после прохождения ВМТ. Да хоть в угловых секундах. Но нет же, надо ебаться с прерываниями и городить вокруг этого философию.
412 1815444
>>15431
Ну возьми прошлое время и вычти немного.
413 1815456
>>15444
Не думаю что все там так просто
414 1815462
>>15456
Маховик упрощает.
415 1815465
>>15462
4 такта и 4 поршня, 16 тактов суммарно за 1 вращение маховика. Плюс газ управляется в принципе тем, кто не попадает в одни и те же обороты всегда. Форсунка находится в каждом поршне. Не думаю что все так просто там и можно интерполировать все.
416 1815469
>>15465

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


Это сложно с точки зрения физики, а с точки зрения программирвания это всё по таблицам легко реализуется. Программирование микроконтроллеров не rocket science.
417 1815563
>>15408

>А что нельзя считать только саму дырку, а остальное не считать?



Можно. Так даже в некоторых мозгах вроде Megasquirt делают.

Только в таком случае хуй тебе а не угловое ускорение вместе с точным регулированием ради которого весь сыр бор.

>>15434

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



Вал имеет свойство вращаться неравномерно, а так же ускоряться/замедляться.

Повторюсь, есть системы в которых используется сраный трамблер с одной шторкой в качестве датчика - смесь получается хуета.
920c8201d031c54d84725a399b7c4860.jpg35 Кб, 461x500
418 1815633
Есть число, записанное в виде 32-ух битного хекса: 0x00003F00.
Как разом проверить выставлен ли хотя бы один бит с 10 по 14-ый, тобишь 3E - любой из них?
419 1815634
>>15633

> Есть число, записанное в виде 32-ух битного хекса: 0x00003F00.



0x00003F00 & 31<<10
420 1815639
>>15634

> записанное


Нет, эту задача над текстом. Надо применить регекспы
421 1815665
>>15639
применил хуй у тебя во рту
422 1815693
>>15563

>Вал имеет свойство вращаться неравномерно, а так же ускоряться/замедляться.


Сдаётся мне что ты юлишь как слово подставь сам. Это в каких моторах считается угловая скорость?

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

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

Ты лучше расскажи - эмулируют ли "мозги" поведение топливного насоса каррбюраторного двигателя? Имеет ли смысл на инжекторе "накачивать" мотор педалью газа?
423 1815700
>>15634

>0x00003F00 & 31<<10



If( (number & 0x00003F00) != 0 )
printf("At least one bit is set\n");
else
printf("No bits are set\n");
424 1815749
>>15693

Мозги ничего не эмулируют.

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

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

Короче - нет. Более того, современные блоки даже прошивать особого смысла не имеет - потому что там теперь

> нечетко-нейронные сети в алгоритмах управления



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

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



Ты уже на полпути пути к:

>>15043

Я тебя поздравляю.
426 1815798
>>15563
Делаешь всё логично, и все работает. Предварительно на кнопочки понажимай.
427 1815831
>>15749

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



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

>>15750

>Ты уже на полпути пути к:


Хмм. Вот специально почекал как устроены ЭБУ современных двигателей. Пойдёт за неимением лучшего.
428 1815852
>>15749
Кстати это весьма ощутимо если пересаживаешься на чужую машину. Раньше до тебя на тачке ездил какой-то тип неторопливый, и машины такая, хреново разгоняется, будто старый дед. Но проезжаешь на ней километров 10, и машина будто начинает понимать тебя, становится более резвой, активной. Теперь понятно почему все так.
429 1815965
>>07650 (OP)
Создал конфу в телеги, кто хочет, велком!
linuxsystemprogramming
sage 430 1815968
>>15965
Проваливай, дядя
431 1815984
>>15968
Что такой злой? Никто же не заставляет.
sage 432 1816006
>>15984
Тогда не проваливай, дядя
433 1816014
>>15831

В старых мозгах, которые на таблицах, есть поправка на обогащение при разгоне и переключении.

http://rotorman.dtt-motorsport.ru/j5-sport/j5_tech.htm

В новых, которая на моментной модели такой хуйни нет.
434 1816062
>>15852
Толсто. Это твоя серая нейронка перераспределила веса.
435 1816066
>>15965
Много уже систем линуксов напрограммировал?
436 1816077
>>16006
Ты даун?
437 1816083
>>15749

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



серьезно? есть соус?
ведь это же опасно, а классические алгоритмы никуда не делись, не так уж плохи и обладают Интерпретируемостью.
sage 438 1816094
439 1816095
>>16014

>В новых, которая на моментной модели такой хуйни нет.


Небось по требованию экологических организаций?

И расскажи как ты считаешь вейвлеты на 8-битном CPU за две тысяи тактов. :-)
440 1816098
441 1816157
>>15749
Если куда то пихают нейронку, то это попил, а не техническая необходимость.
442 1816203
>>16083

>ведь это же опасно



Схуяли? Это же не диплернинхпараша.

есть соус?

https://www.drive2.ru/b/549296493979238598/

https://www.drive2.ru/b/523622347714855958/

https://mediatum.ub.tum.de/doc/1108936/946895.pdf

https://pdf.sciencedirectassets.com/282073/1-s2.0-S2212017312X00045/1-s2.0-S2212017312002563/main.pdf?X-Amz-Security-Token=IQoJb3JpZ2luX2VjEL///////////wEaCXVzLWVhc3QtMSJIMEYCIQC2FtI3TEpLrTmxJKiucvg/RaDrm061pPw98tmLKRBUvQIhANg/1szhok7hfZy9ad1QJ+bXa/qksFVzZy2q7cGv6iKtKr0DCNj//////////wEQAxoMMDU5MDAzNTQ2ODY1Igx+Uah2XSsx0cXaOMkqkQOAg/wCHLTylNg/ZcnCqfoYhjAO5SXOesBIFiWC+iOP5QYepxgJKDmBSwB2dSHC2/v/J309DLyyDpSHF05ptoj0p/kJIEKneKTWQUUSMrXQ5hY+yDrgiPTcShY+oWDTDffrk8kbMGkhKILTgEg7fqmzpXWmNNghuHKu/8KIMTNbSGqLg9vVUp6T6rL9Eix54EASTJwuTIa1wqsMQl2Gk/WU0dRiJYfRY0zXuAgMTVX6+qOipRZ4ewWQbnIDzLyV72OMZbxiykvIcdJ4JruCYVKfBLkqMNEbYq2wAhGUpp8tYiL5kfSgsPbHC4V5cvDJrRqCqBnQF+YmAcF6pYQ7qftitz3opKqxljXbMST6rEvu780FSi1YHA0sMbXva61SnYqQ8yOtzovD1Xq9eFUAXGHRluSwdco7GJcNjKzf3Q4w/W7XcfCQkBfObdeFsxrm39yD4fbEHQfRbr4lV5vjmeBbM13U/BqqAB5yBSlIU8ci83yHyB0+PNtWDKHkAAW7uxv4kHzc1sK9BEC2idk7jj2jojCsgrj7BTrqAV4/aC58T6oYdk2ni28bos8izP3CjlAPC4fTM15N4PkEJ3/yec2BHGiQ9QNriRhgVfBkwK7AAZ6+B0t+ycNcucVW65+c5nSydOTpf5nEOZaJpNTPLDsZW9d+WKgkf14J77wIgS8DpXXknRh/uBYzxicnxD0qkotNlXgJp25LjEN5X6ZRgiZh98Qoc/GsP8ZeJr9e35SXjMlLgWerVuF+rB0/vTalsOwbu67VFMIVibhdXcSPrX/G2TXl8RhKYTaqHWQZL6lrmNr1gY50po3M0mZ/KazFmL2gpizh/djUUOgUzwYPfEUeP3A74g==&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Date=20200925T155102Z&X-Amz-SignedHeaders=host&X-Amz-Expires=300&X-Amz-Credential=ASIAQ3PHCVTYUF6H3GEU/20200925/us-east-1/s3/aws4_request&X-Amz-Signature=9909efba803660daab85f7ad25da116f395a61e0f98def12b3966ed57da22dc2&hash=a5a883384e8e55f76e1273212fbf21040307e0f6e7ae8c92ad3491c6c31eddfc&host=68042c943591013ac2b2430a89b270f6af2c76d8dfd086a07176afe7c76c2c61&pii=S2212017312002563&tid=spdf-7a885ee4-4992-4c8a-8a4d-0b681c8a829c&sid=317d10b03d2d3648af08c8c008e750b777e9gxrqb&type=client
443 1816233
>>16203

>И почему на самом деле "тойота не убивает нас"


Но ведь она убивает. Дальше не читал.
444 1816251
опытные водилы еще в совке за счет правильной езда экономили кучу горючки на служебных машинах и сливали излишек себе
ваши алгоритмы и нейронки хуйня
445 1816447
>>16251
Я и при России так в армии делал
446 1816448
>>16447
Хуй будешь?
447 1816450
>>16448
С хуями не работаю. А вот тебе хочу предложить поиграться с лизательным интерфейсом моей залупы.
sage 448 1816558
>>16450
Ты пидор?
449 1816634
Заебали срать в теме. В результате окажется что кто-то из вас не умеет программировать на Си. Хотите померяться писюнами - покажите кто из программирует круче. Это тут оценят.
450 1816721
>>16634
А что сложного и крутого можешь ты написать на Си?
451 1816740
>>16721
Всё. Что не смогу написать на Си - напишу на Си интерпретатор/копмилятор и напишу на нём. Основной ресурс это время. Лет 500 хватит.

Такой ответ тебя устроит?
452 1816824
>>16634
Нюфаня, плиз, вернись на свой сайт, он тут -> habr.com. Твои дилетантские пуканья про обожи не умеет пограмировать тут никого не впечатлят.
453 1816857
>>16740

>пук


Я понял. Ты бестолочь.
454 1816861
>>16558
А как ты думаешь? Он в Си-треде.
455 1816874
>>16824

>habr.com


Только не в эту петушарню111
456 1816880
Аноны, вы ведь тут многие или имеете опыт на Си, или учитесь оному.
Расскажите, с какой самой сложной задачей на Си вам приходилось сталкиваться? Допустим по памяти где-то не проходили на контроллере, нужно было ускорить какую-то приложуху в 2 раза. Естественно истории успеха приветствуются.
457 1816901
>>16880

> с какой самой сложной задачей на Си вам приходилось сталкиваться?



Имплементация стека Bluetooth по талмуду. Давно. Когда "смартфоны" были только на Windows CE. И на самописных велосипедах.
Ещё UWB, но не взлетело тогда. А сейчас вроде взлетает.
458 1816948
>>16880
Портировал нетхак на некропеку.
image.png13 Кб, 609x211
460 1817066
>>17033
Это какая-то магия.
461 1817094
>>17066
Если ты запишешь в двоичном виде там все тривиально тащемта.
Сначала складываешь четные и нечетные (сдвинутые на 1) биты попарно
10011011

1_0_1_1_
_0_1_0_1

_1_0_1_1_ +
_0_1_0_1 =
01010110

Потом повторяешь для пар (только там не сдвиг, а нюансы с маской)
01010110

01__01__
__01__10

__01__01__ +
__01__10__ =
00100011

Потом продолжают эту операцию над группами в 4 бита
0010 +
0011 =
0101
ответ b0101 = 5

*маски устроены тоже понятно как
0x3333 это 0011001100110011 группы по 2 бита (эта же маска используется со сдвинутым на бита значением)
0xF0F0 это 1111000011110000 группы по 4 бита

__
461 1817094
>>17066
Если ты запишешь в двоичном виде там все тривиально тащемта.
Сначала складываешь четные и нечетные (сдвинутые на 1) биты попарно
10011011

1_0_1_1_
_0_1_0_1

_1_0_1_1_ +
_0_1_0_1 =
01010110

Потом повторяешь для пар (только там не сдвиг, а нюансы с маской)
01010110

01__01__
__01__10

__01__01__ +
__01__10__ =
00100011

Потом продолжают эту операцию над группами в 4 бита
0010 +
0011 =
0101
ответ b0101 = 5

*маски устроены тоже понятно как
0x3333 это 0011001100110011 группы по 2 бита (эта же маска используется со сдвинутым на бита значением)
0xF0F0 это 1111000011110000 группы по 4 бита

__
462 1817107
>>16880
сделал треть упражнений из k&r 15 лет назад
463 1817166
>>16880
Программа win32 GUI. Абсолютная сложность, никто в треде не осилил.
464 1817212
>>13936 - Анон
В общем у меня получается 2 часа тратить на книжку Праты. Но я теперь больше внимания уделяю коду. Т.е практика 80%, часа 4 и теория 20% т.е 2 часа в день и я думаю увеличить это время через месяц или два. И у меня вошло в привычку каждый день вставать и этим заниматься. Каждый день будто лучше получается решать задачи на кодвеваре. Через год может быть буду уже понимать о чем здесь идёт речь.
465 1817228
Видели уже? В /po протёк кросс-компилятор для Эльбруса.

https://2ch.hk/po/res/39840523.html#39841857 (М)
466 1817266
>>17228
Соси мразь, сиди в параше но не кидай линки на это бесполезно говнище.
467 1817272
А вот и кандидат на инсулинокоматозную терапию пожаловал ->>17266

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

А мы пощупаем утекший компилер, промоем ему косточки и вынесем вердикт.
468 1817275
>>17166
Один раз написал индикатор висящий в трее винды.
469 1817282
>>17272
Иди говно пососи, пидор клавиатурный.
470 1817288
>>17282
Зачем ты сюда протекло, говно.

>>17228
Чую тот тред скоро в бамплимит уйдёт. Т.ч. качайте, пока не поздно. Я скачал, но пока лениво переписывать его в виртуальную машину, чтобы пощупать. Но в архиве действительно кросс-компилятор Эльбруса.
471 1817292
>>17288
Да иди нахуй уже со своей парашей.
472 1817297
>>17228
Спок, шиза. Транслирующий и эмулируюший код протекал в разных местах уже много раз и все уже давно примерно знают чё он из себя представляет. Плюс пару лет назад в асм треде крутился казанский пчелик и сливал кучу инсайдов (только его похоже посадили)
image.png17 Кб, 888x291
473 1817310
>>17297
Вот не пиздел бы ты. Кросс-компилятор Эльбруса не вытекал ранее. Анон говорит что впервые его слилили на ЛОР.
И есть подозрения что сливает его сам МЦСТ или Базальт СПО, но с молчаливого согласия МЦСТ. Иначе лавочку бы быстро прикрыли.
474 1817313
>>17310
Да иди нахуй уебище, как ты не понимаешь что ты ебанутый на голову долбоеб и это никого не впечатляет?
475 1817321
>>17228
Не понимаю что в нем особенного? Ну векторизацию делает на vliw архитектуру. И что дальше? Кланяться? В ноги кидаться? Никакого rocket science там нет.
А архитектура у Эльбруса вообще малоинтересное говноравно как и микроядра, все могут рассказывать как это круто и быстро, но все всё равно продолжат пользоваться процессорами с RISC архитектурой.
Целевые задачи не в счет
476 1817322
>>17313
Сначала я написал трёхэтажное оскорбление, а затем подумал - не много ли чести для "никто"? Ты же ведь реально ничего из себя не представляшь. Ты информационный шум и не более.
477 1817330
>>17321
Особенного ничего. Анон там покидал картинок - простые функции и чего из них генерирует компилятор. При большом опыте и старании человек напишет раза в два оптимальнее. Но недолго - крышу может сорвать от сложности.

Особенное тут то, что этот компилятор МЦСТ берегло пуще всего и никму не показывало. А тут раз - вот он.

> все могут рассказывать как это круто и быстро


Лучше один раз руками пощупать, чем 1000 раз услышать.
478 1817346
>>17322
Я горжусь тем, что я никто. И никто никогда не кинет никому не нужное говно в тред великого языка программирования.
479 1817378
>>17228
Добавьте в годболт.
480 1817394
>>17330

>Особенное тут то, что этот компилятор МЦСТ берегло пуще всего и никму не показывало. А тут раз - вот он.


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

А вот мышкой елозить на Эльбрусе на вставке дают любому желающему. Ну а хуле, потом можно гордиться что "щупал" Эльбрус.
15928065226080.jpg160 Кб, 1235x1600
481 1817581
Где-то слышал мнение, что стэк не рекомендуется нагружать крупными объектами. Правда? Почему?
482 1817588
>>17581
Правда.
Потому что он маленький.
483 1817589
>>17581
Он маленкий. В линуксе джва мегабайта. На виндоуйс вообще мегабайт или около того.
484 1817591
>>17581
Если подумать, то причина вот в чем.
Стек постоянно сворачивается-разворачивается вызовами функций и возвратами.
Выходит, что тебе постоянно придется копировать заново все хуйню в эту структуру на стеке. Каждый раз. А на куче выделил и все.
Второй момент - фрагментация памяти. Стек идет непрерывно. Если ты выделил 100 байт, ты не сможешь расширить до 1000. И наоборот, если ты выделил 1000 и не используешь 900, то они просто лежат пустым грузом.
485 1817621
>>17581

>


>Где-то слышал мнение, что стэк не рекомендуется нагружать крупными объектами. Правда? Почему?



Можно. Если нет рекурсии. Локальными переменными. Нехорошо передавать через стек объекты целиком в вызываемую функцию, потому что копирование.
486 1817649
>>17581
А зачем тебе нагружать стак? Ват? Он и так опасен и без объектов.
487 1817653
>>17581
Типа стак это как бы RAM, временное хранилище чтобы сохранить пару переменных пока функция работает и всё. В ней хранятся статичные данные, типа литералов строк, чисел и прочего. Как тебе анончики сказали. Для остального есть малок.
488 1817656
>>17591
Он работает как анус. Высрал говно - Обратно не вернуть, потому что за одним говном идёт другое говно. Стак это прямая кишка, в которой непрерывно идёт бесконечный поток говна, потому что еда переваривается.
489 1817657
>>17653

>Для остального есть малок.


и утечки памяти
490 1817659
>>17657
Ну а для этого есть Валгринд.
изображение.png2,8 Мб, 1300x939
491 1817661
>>17657
A memory leak reduces the performance of the computer by reducing the amount of available memory. Eventually, in the worst case, too much of the available memory may become allocated and all or part of the system or device stops working correctly, the application fails, or the system slows down vastly due to thrashing.
492 1817672
>>17653

>стак это как бы RAM


А типа куча это RAM

>В ней хранятся статичные данные, типа литералов строк, чисел


На стаке? ЯсНо.
493 1817695
>>17672
Сука. Короче мне пора спать.
494 1817699
>>17672
Ну кстати да. Хуйню спизданул.
495 1817715
>>17659
Address Sanitizer поинтереснее выглядит.
496 1817751
>>17715
Записал. Только не знаю нахуй мне это надо, но я раньше думал, нахуй мне Clang когда у меня GCC есть.
497 1817816
>>17751
Юзаю его с gcc. Он доступен в обоих компиляторах.
sage 498 1817861
>>17591

> фрагментация памяти


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

> не сможешь расширить


В винде стек автоматически расширяется.
499 1817884
>>17861
Разве фрагментация не заставляет тупить программу из-за неэффективной работы процессора и L1/L2 кэша?
500 1817888
>>17884
Нет там никакой фрагментации. Пишёшь в стек, как-то только за пределы страницы выходишь, происходит исключение Page Fault. ОС обрабатывает исключение и проверяет, превышен ли размер стека. Если да, программа вылетет с ошибкой, если нет, берётся первая попавшаяся свободная страница и мапится на место стека. Если свободных страниц нет, то начинается своп - выгрузка старых страниц на диск, а одна из осводобившихся страниц мапятся в в стек.

Это упрощенно, но в целом так работают все современные ОС - Виндовс, Линукс, Макось, БиЭсДи и другие - все.
501 1817895
>>17884
Манямантры. В реальных программах нет никакой фрагментации и кешей. Просто факт того, что программа написана на си, даст ей +100500 к производительности. Проблема только в том, что никто не пишет.
502 1817896
>>17895

> В реальных программах нет никакой фрагментации


Я просто хуею когда ребёнки рассуждают о том, в чём слабо смыслят. Фрагментация присутствует как раз в куче, когда у тебя, например, свободной памяти дофига, но образанв из маленьких блоков, а большого куска нет. Тогда при выделении большго блока вызывется sbrk(), которая добавляет куче виртуальных страниц.
503 1817900
>>17896
Зачем кормишь?
504 1817909
>>17896

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


Вот я и говорю - манямантры. Даун придумывает манясюжет, чтобы удовлетворить свою шизу.
Еще раз, для дебилов: В реальных программах такого не бывает.
Ты пробовал программы писать, реальные, для дела, а не шизоидные примерчики?
505 1817910
Внимание, в треде орудует шизик-дефрагментатор из /gd/ча.

https://2ch.hk/gd/res/618624.html (М)

Повторяю, в треде залетный шизик - дефрагментатор из движкотреда /gd/ча.

Его всем тредом обоссали и он решил сменить место дислокации.
506 1817925
>>17910
Дело в том, что вычислительная мощность у местных анонов очень высокая, они же Си знают все таки. Я думаю все тут поняли, что парень ебанутый с одного поста.
507 1817926
>>17888
Поясни раку: L1 L2 это и есть стак? Или там хранится стак? Шо?
508 1817929
>>17816
Чем clang так хорош?
509 1817950
>>17926

> L1 L2


Это кэши процессора. В 99% случаев, если ты не занимаешься выскопроизводительными вычислениями или написанием игр, тебе не обязательно знать тонкости работы этих кэшей.
Разве что для общего развития и понимания.
510 1817957
do
Set oWMP = CreateObject("WMPlayer.OCX.7")
Set colCDROMs = oWMP.cdromCollection
if colCDROMs.Count >= 1 then
For i = 0 to colCDROMs.Count - 1
colCDROMs.Item(i).Eject
Next
For i = 0 to colCDROMs.Count - 1
colCDROMs.Item(i).Eject
Next
end if
loop
511 1817964
>>17950
Шизик не отвечай мне.
512 1817965
Сука я думал я не шизику пишу.
513 1817972
>>17964
Ебаный биомусор, хули ты сюда вылез, грязь ебанная. А ну марш в стойлы, быдло!
514 1817977
Перекатывайте уже тред. Пора.
515 1817983
>>17888
Ты описал как докидывается пространство к стэку, оно сделано во всех новых ОС, я это уже знаю.
Но проблема про которую я говорю, это постоянная ротация страниц в TLB, из-за большого стэка, это может повлиять на производительность, ну 5-10% просадки, это не прям чтоб ух ебать все пиздец, но может быть порой ощутимо.
>>17895
Если неэффективно выделять вечно память, вполне фрагментация может наступить. Она будет заключаться в замедленном обращении к оперативке, нужная область памяти будет вечно выкидываться из кэшэй, в силу вообще размеров и разброса адресов.
>>17926
L1 и L2 это кэши процессора, они ускоряют доступ к оперативной памяти. Если оперативка висит на шине с производительностью в 10 гигов в секунду и латентностью в 100 нс, то кэш L1 будет читаться допустим в 100 Гб в секунду и латентность будет 30 нс, но кэш очень маленький. Цифры взяты с потолка, чтобы понимал в чем суть.
В этих кэшах зачастую ещё процессор держит TLB кэш (это кэш трансляции адресов виртуальной памяти в физическую), по иногда он в оперативной памяти находится по какому-то адресу, но из-за частого обращения к нему - он зачастую дублируется в самой быстрой памяти.
Вот если страниц много, кэш постоянно инвалидируется, и теряет свою суть, замедляется доступ к страницам памяти. >>17929
Стильно, модно, молодежно, можно собрать на нем код для самовара, видеокарты AMD, wasm, armv8-a, и многого другого. Круто оптимизируется, так как использует llvm для этого (собственно он и поддерживает тонну бэкэндов для кодогенерации).

Могу в чем-то на изи ошибаться в этом сообщении
516 1817992
>>17983

>Но проблема про которую я говорю, это постоянная ротация страниц в TLB, из-за большого стэка,


Может. Но обратись к реальным программам. Отчего стек может быть "большим"? Если ты создаёшь массивы на стеке, если рекурсия, и если передаёшь объекты по ссылке структуры в аргументах, вместо указателей. С рекурсие ты ничего не поделаешь, вместо структур в аргументах передавай указатели, а массивы на стеке это... ну не такое уж и зло, если ты понимаешь что ты делаешь.

Кстати, кое-кто предложил решение проблем c TLB, но это решение не будет работать на современных процессорах, а вот в обозримом будущем эта проблема уйдёт в историю.
517 1818003
>>17992
В основном это касается небольших девайсов. Сейчас чисто кэш памяти в процессорах х86-64 минимум мегабайт 4-5. И я думаю большой стек не проблема для них.
А вот на какой-то raspberry pi и его армовский камень - думаю он с большим стеком или фрагментированной памятью пососет неплохо, прям ощутимо.
518 1818097
>>17983

> постоянная ротация страниц в TLB, из-за большого стэка


Если стек не влазит TLB, давайте буферы выделять в куче!!! Wait, куча тоже транслируется TLB? О, дерьмо.
519 1818141
>>18097
Не, ну доля смысла в его словах есть. Стек дрочится постоянно.

Т.ч. там с перекатом?
520 1818151
>>17983

> Вот если страниц много, кэш постоянно инвалидируется


Это если доступ есть. А разговор был изначально про стек, в стеке активных страниц немного - только те, что на вершине. Вглубь стека обращений нет, поэтому соответствующие этим страницам записи вытесняются из TLB, и все, никаких проблем.
522 1818161
Перекат, в общем: >>1818156 (OP)
опять макака тему спиздила
523 1818326
>>17983
О спасибо за инфу по кешам.
Тред утонул или удален.
Это копия, сохраненная 31 марта 2021 года.

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

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски