Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.
- Очевидный GCC. - clang: оче годно, батя рекомендует. - Intel C++ Compiler: оптимизации, тысячи их. - Visual Studio Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте. - Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное. - TCC: очень маленький компилятор с багами и поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.
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)
- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов). - http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.
>>2120045 >А потом узнают что у них не зарплата, а посмешище Да они и так знают, как будто бы у них интернета нет. Видимо, это их выбор, либо они больше ничего не умеют. Ведь в норм айтишной фирме придется постоянно учиться новому, ходить на конференции, участвовать в митапах, следить за качеством кода, соблюдать code-style принятый в фирме, делать таски в сжатые сроки, а им легче попивать чаек в нии, пинать хуи и писать говнокод для микриков. >- и начинают ливать со своих нии в какой-то аутсорс. Плез. Даже на последней галере если узнают, что к ним идет устраиваться "программист" из нии, его ливанут. Любой фирме лучше нанять новичка без опыта(самоучку или с курсов), чем переучивать недопрограммиста из нии, который (проектировал хуи) прогал микрики в нии за еду. >в какой-то аутсорс. Но не на Си же, а на js, javascript и прочих востребованные языках, на Си аутсорса быть не может по логике вещей.
>>2120060 Сам иди нахуй. Новички должны знать, что их ждет, если будут учить этот язык: работать за гроши в России и нулевая возможность релокейта в норм страну в принципе.
>>2120137 >То не вырастут долбоеба и смогут без труда вкатиться в C++ В приниципе тоже самое что и Си, тоже копейки получают. >или чего повыше. Так в чем и суть. Нахуя учить Си, чтобы потом учить другой язык? Лишняя трата времени, только и всего. Почему не учить сразу же нормальный язык, чтобы потом же найти нормальную работу, прогая на нем? А если уж для развития навыков программирования надо, то лучше тогда читать книгу SICP и решать задачки на языке Scheme, язык же си может научить разве что байтоебить указатели. Для работы байтоебом это конечно несомненно нужный навык, а для работы программистом нужны другие навыки, если что.
>>2120067 во первых какая тебе разница что какой-то хер без специализации вдруг выберет не максимально выгоный путь? или ты из тех хитрых дядек который перенасыщает рынок джуниор-специалистов в веб-макакерстве чтобы те вообще за тарелку борща работали?
во вторых, в этом треде сидят не только вкатывальщики во что-то чтобы бабки иметь, а просто люди, которые уже спецы в чем-то, и получают норм зп, но учат си для души. например я. я тебя успокою, в нии прогать микрики я не пойду, мб я и попробую попрогать микрики когда-нибудь, но так для души, для себя, не за деньги. А теперь плез, съеби с треда, тут мужики мб даже и женщины, которым нравится си, сидят-пердят тут, лампово общаются. А ты все портишь
>>2120259 >В приниципе тоже самое что и Си, тоже копейки получают. Видать, твои представления о крестовых вакансиях ограничиваются поддержкой на 99-м стандарте. Мань, в серьезных высонагруженных промышленных проектах вроде 3d-движков и операционных систем никакой нОрМаЛьНыЙ яЗыК не придет на замену, а коммитет успешно старается, чтоб никому от этого не было больно. ПоБаЙтОеБиТь же уКаЗаТеЛьЧиКи немножко полезно, чтоб научиться уважать кучу, когда имеешь дело с RAII, perfect forwarding и тому подобными вещами. >или чего повыше это я действительно хуйню написал, там уже нельзя провести вертикальное сравнение уровня абстракции, особенно если умеешь в темплейты. Но начинать, имхо, надо с Сишки, потому что это классика. Если тебе не доступна вся глубина значения слова классика, нет смысла продолжать.
>>2120281 >вроде 3d-движков и операционных систем Речь идёт о вкатунах, которые уже точно не будут делать движки и операционные системы, их вообще мало кто делает даже среди топ сеньоров, а как раз таки и будут прогать какую-то фигню за еду первые лет 10 точно. >ПоБаЙтОеБиТь же уКаЗаТеЛьЧиКи немножко полезно, чтоб научиться уважать кучу Зачем, если во всех современных языках уже есть сборщик мусора? Давай еще на ассемблере прогать, чтобы уважать процессор. > Но начинать, имхо, надо с Сишки, потому что это классика. Потому что ты так сказал? Фронтенд-девелоперу, например, Сишка точно нафиг не сдалась. И большинству программистов точно. Учить надо то, что имеет хотя бы отдаленное отношение к твоей работе и может пригодится в работе, как тому же веб-разработчику в работе пригодится сишка?
>>2120067 >Новички должны знать, что их ждет, если будут учить этот язык Их ждёт довольно лёгкое, приятное и, что немаловажно, БЫСТРОЕ обучение с использованием топовых бесплатных курсов вроде cs50, они не захлебнутся особенностями языка и не растеряют мотивацию на первых порах, им будет легко учить другой язык для работы, потому что раз у многих языков си-подобный синтаксис два многие языки для зарабатывания денег заточены под императивщину, как и си >>2120054 Клован, охуенный у тебя там поиск на хх, надеюсь ты в курсе что буква "С" встречается в выдаче несколько чаще, чем слово "JAVA", и отражает скорее ситуацию по всем языкам и ещё по куче вообще не программистских вакух, ведь буква "С" входит в состав слова "С++", "С#" и ещё миллиона слов, а так же широко используется в описаниях не-сишных вакансий. Тебя объём выдачи не смутил? Автор статьи на хабре видимо твой брат по разуму.
>>2120259 Ты просто еблан ньюфаг корчащий из себя погромиста, за плечами у тебя джаваскрипт интенсив с гикбрейнс, а в голове, в том месте где должна быть такая дисциплина как "архитектура эвм" — пустота. Это довольно легко определить — если человек утверждает, что не знает си, то это совершенно точно указывает на то, что он не знает архитектуру, потому что при изучении архитектуры сишка всегда идёт в нагрузку и чтобы не изучить её в процессе это надо избегать её осознанно. А если ты не знаешь архитектуру, и я не говорю глубоко, я говорю на уровне "прерывания и адресация памяти", то ты не вполне образован как программист. А если знаешь, то и сишку ты тоже знаешь и не прибегаешь срать в сишный тред — тебе прекрасно известны достоинства и недостатки языка и желания толсто набрасывать у тебя просто не может возникнуть, разве что по сильной пьянке.
>>2120259 >>2120416 Точнее за плечами у тебя сикп, брошенный на упражнении 1.13 (с обязательным выплёскиванием ведра помоев по этому поводу в сикпотред).
>>2120335 >будут прогать какую-то фигню за еду первые лет 10 точно Я, конечно, не такой эрудит, и, быть может, ты просветишь подробнее, но утверждение нелогичное. Как ни крути, индустрия нуждается в том самом меньшинстве знающих и ответственных специалистов, которых мало "даже среди топ сеньоров". И откуда их брать, если уважающий себя образованный человек не пойдет работать за еду 10 лет? Деды смертные и не такие обучаемые. Да, дебича, лишь формально владеющего стеком, даже не посвятят в возможный карьерный путь с нуля, но очень даже инвестируют в толкового челика, который умеет в матчасть и искренне хочет уметь больше. >уже есть сборщик мусора Да что ты говоришь? В системах реального времени тоже будешь срать аллоками с асинхронной очисткой памяти? >Фронтенд-девелоперу с верхом амбиций пориджа, например, Сишка точно нафиг не сдалась пофикисл. Я, конечно, тоже не сын маминой подруги, но и со своей мамкой уже не живу. Год проработал фронтендщиком, т.к. больше никуда брать не спешили, а укатываться с кормящей шеи торопился. Набрался полезного опыта, не зависящего от стека и направления, заебался, уволился и устроился C++ бэкендщиком. Хуй бы я новую работу потянул, если бы еще до первой работы не увлекался олдскульными материями, а слушал одногруппников с их НИНУЖНА и типичным смузихлебским имиджем, который уже на 3 курсе начинал проявляться, фубля. А мог, будь больше терпения, желания и запаса денег, таки вкатиться в разработку охуевшего 3d-движка, который не игровой, а для промышленных нужд с дохуиллионами полигонов. После собеса попросили запилить пет-прожектом какой-нибудь редактор, чтоб подтвердить понимание паттернов проектирования, но суть в том, что в плане DirectX реально инвестировали в девственников, и з/п, очевидно, отличаются от начальных фронтендерских не вниз, а вверх. Еще лично знаю пару человек, которые тоже вкатились без опыта сразу в кресты, при чем один из них практически на Си с классами пишет под что-то unix-подобное, с сетями работает, ебу, сложно короче. Ну, а второй вообще олимпиадник, криптографию какую-то хуячит за нехилые килобаксы. Такие з/п пориджам не снились. >>2120398 Тебя это тоже касается, а то съебался куда-то, знаю я вас подпездышей. Обнял.
>>2120335 Кстати, например, в нашей шараге олимпиадники через зав.кафедры с его связями на весьма неплохую работку пробивались, и там, как ни странно, почти всегда C++. Пару лет назад один выпускник, еще далеко моложе 30 лет, расчехлял у доски какие-то жутко пиздатые вещи, отлучившись из Германии, где скромненько делал 70000 евро в месяц не крестах.
>>2120449 > как именно это делает обучение программированию с использованием сишки тяжёлым и неприятным Да очень просто - сишка целиком состоит из вещей, на которые можно напороться. Среди них есть вещи, на которые можно напороться даже когда кажется, что все ок.
>>2120499 Но это все старые, как мир, грабли, и новобранцу только приятно в десятитысячный раз на них наступить, исследовать причину через gdb или давно адекватно написанные книжки, крепче причаститься к мозолям дедов и ощутить себя чуть больше и сильнее. А когда напарываешься на очередную криворукость разработчиков новомодной либы, исследовать в каких версиях какая содомия водится как-то опускаются руки, ведь ты все таки не говно чистить хочешь в лучшие годы, а из автомата стрелять, пусть и по ногам.
>>2120484 >разработку охуевшего 3d-движка, который не игровой, а для промышленных нужд с дохуиллионами полигонов
Я кстати чуть не устроился такой писать. Графический движок для САПР. Помимо очевидного досконального знания С++, WinAPI, OpenGL, Vulkan, алгоритмов графики, вычислительной математики, многопоточки, требовали еще матан, линал, дифференциальную геометрию и желательно топологию. На все про все - 180к в рублях. Испытательный срок 3 месяца. При этом сам код местами с жутким легаси из нулевых. Ну в общем у них вакансия до сих пор открыта, если что. И это вакансия миддла-сеньора. Джуны им в принципе не нужны были.
>суть в том, что в плане DirectX реально инвестировали в девственников, и з/п, очевидно, отличаются от начальных фронтендерских не вниз, а вверх
Вся графика сейчас либо в геймдеве, либо в геометрических движках САПР, про которые я уже рассказал выше. Про условия работы в геймдеве думаю сам знаешь. Либо какой-нибудь рендер карт, но опять же, это наверное только гугл, яндекс + пара компаний, которые занимаются ГИСами. Все это очень узкая отрасль, в которой много людей не нужно, ибо большого спроса на графику нет, для очень многих целей достаточно лишь Unreal/Unity.
>пишет под что-то unix-подобное, с сетями работает Да, знаем мы такую работу, как правило это инфобез и телекомы. Достают DPDK и пишут всякие анализаторы трафика. Интересная тема, только платят как всегда в С++ примерно нихуя, но требуют довольно много, я сам пытался устроиться в такое - меня очень жестко попустили на теме многопоточки, спрашивали про всякие Lock-Free структуры и С++ memory model, которую я увы полностью не смог осилить.
>индустрия нуждается в том самом меньшинстве знающих и ответственных специалистов, которых мало "даже среди топ сеньоров". И откуда их брать, если уважающий себя образованный человек не пойдет работать за еду 10 лет?
Из 8 миллиардов людей всегда найдутся те, кто захочет заниматься системной прогой. Другое дело, что обучение такого человека будет стоить довольно дорого, поэтому нанимают всяких додиков с PhD, студентов с прикормленных кафедр вузов. Достаточно лишь объяснить, что то, чем они будут заниматься, - это самое настоящее элитное программирование, а фронтенд и бекенд - для низкоинтеллектуального быдла.
>одногруппников с их НИНУЖНА и типичным смузихлебским имиджем, который уже на 3 курсе начинал проявляться, фубля В чем-то они правы. Программирование в конечном итоге превращается в обычную работу. В 35 лет ты вряд ли будешь сильно в восторге от того факта, что ты пилишь какой-то 3д движок, в то время как твой одногруппник вася делает быдлосайты на пхп. Тебе будет просто похуй. Поэтому одногруппники тоже не долбоебы - зачем себе намеренно усложнять жизнь ради нихуя? Я вот после тех самых попыток устройства в графику и сети решил бросить это дело и вкатиться в ГОвно, пока что всем +- доволен.
>>2120499 >Да очень просто - сишка целиком состоит из вещей, на которые можно напороться. Как и любой язык, было бы желание. >Среди них есть вещи, на которые можно напороться даже когда кажется, что все ок. А вот и приведи-ка пример, пока что только была попытка пукнуть 1 << 31, но выяснилось что во-первых никакой вкатун не двигает биты в сишке (как и никогда не пишет слова volatile, auto, goto, continue и так далее), тем более в знаковых переменных, а во-вторых и в главных, те кто двигают, прекрасно осведомлены о последствиях ведь в стандарте это прописано чёрным по белому. А ты вот дай мне недокументированную особенность сишки, на которую мог бы напороться ньюфаг.
Доброго времени суток, гуру программирования/байтоебства. На связи студент 4 курса МухГУ. Еще на 3 курсе я успел поработать 4 месяца на веб галере и понял, что веб - это точно не мое. Пусть говноеды сами этим занимаются. Сейчас читаю умные книги по алгоритмам, сетям и ОС. В общем, решил начать с самых низов и также неплохо поковырял ассемблер. И вот пришло время перейти к няшной Сишечке, но есть пару проблем, и именно из-за них я пришел сюда за советом. Через год мне нужно будет искать работу, поэтому какова вероятность того, что после ВУЗа я вкачусь в работу на Си? Или же мне сразу стоит учить плюсы? Два языка на должном уровне за год не смогу осилить, по этой причине, нужно выбрать что-то одно. Советы по изучению Си и напутствия также приветствуются.
>>2120544 > недокументированную особенность сишки Про недокументированную речи не шло. Языку полвека. Все, что можно было, уже миллион раз обсосано. Но ньюфаги стандарт не читают, и свои собственные грабли еще не собрали.
> но выяснилось что во-первых никакой вкатун не двигает биты в сишке (как и никогда не пишет слова volatile, auto, goto, continue и так далее), тем более в знаковых переменных Где выяснилось, что за фантазии? Двигают, пишут, используют, до unsigned вообще дорастают через полгода минимум, до этого искренне не понимают, нахуя оно.
> приведи-ка пример Даже если не углубляться в UB, которое злобный комитет повсюду раскидал, а разработчики компиляторов используют во вред. Классика: char array[5]; int j; for (j = 0; j <= 5; j++) array[j] = 1; Все ошибались в таком. И много ньюфагов тебе скажут, мол, нет тут проблем, не хочу задумываться, работает же. И ведь работает. Или другая классика, в которой тоже ошибались все: memcpy(array, array + 1, sizeof(array) / sizeof(array[0]) * 4). Или еще одна, всеми горячо любимая: void foo(int arg[4]) { memset(arg, 0, sizeof(arg) / sizeof(arg[0])); .... }.
> Как и любой язык Нет. Хуже только жс, но разница заключается в том, что в жс для того, чтобы получить по ебалу, нужно делать страннные вещи, а в си - обычные.
>>2120333 ты все еще тут? тебя попросили съебаться нахуй, будь добр, пожалуйста. я понимаю, что обидно такое услышать в свой адрес. но можно же уйти с достоинством, а не как истеричка, обматерив всех и хлопнув дверью
>>2120630 >Но ньюфаги стандарт не читают Ньюфаги и биты не двигают, об этом и сказал, читай внимательнее. >Где выяснилось, что за фантазии? Двигают, пишут, используют, до unsigned вообще дорастают через полгода минимум, до этого искренне не понимают, нахуя оно. А вот тут-то я уже проиграл. Двигают биты значит, ньюфаги, биты двигают, а до беззнакового не дорастают? Охуенные истории конечно, вот только все вкатунские курсы что я видел разъясняют за типы данных и знаковость (но не за endianness), а сдвиги в лучшем случае упоминают. Ещё раз — для разработки чего-то высокоуровневого сдвиги не нужны, твёрдо и чётко, они юзаются в коде который очень плотно работает с железом (не ньюфажная тема), там же где и волатайлы с инлайн ассемблером. >Нет. Хуже только жс, но разница заключается в том, что в жс для того, чтобы получить по ебалу, нужно делать страннные вещи, а в си - обычные. Нет. В си тоже нужно делать странные вещи, обычные делаются без проблем. >Классика: char array[5]; int j; for (j = 0; j <= 5; j++) array[j] = 1; Я просил привести пример — где пример? Мне нужна >недокументированную особенность сишки, на которую мог бы напороться ньюфаг Где она? То, что при попытке доступа в чужую память поведение неопределено — это недокументированная особенность? Да это БАЗА. Вот ты говоришь делать надо обычные вещи, а сам делаешь странную.
>>2120630 >>2120632 >>2120636 >for (j = 0; j <= 5; j++) При чем тут Си? Во множестве языка нумерация с нуля и half-open range в циклах используется, потому что это математически удобно, блядь, а не потому что "ряяяяяя, старперы байтоебы носилуют мозг амбициозных пориджей адресами и оффсетами" >memcpy потому memmove, все в описании есть, а если не хватает дисциплины наперед задуматься о возможных деталях, то и высокоуровневых языках обосрешься, в гуманитарии подаваться надо было >memset надо понимать, что приходит указатель и никакой больше инфы, как stl контейнере. Если нюфаня пытается в Си по опыту питона в школе, а не открывает K&R, земля ему пухом не только в Си, но и по жизни
>>2120807 > При чем тут Си? Во множестве языка нумерация с нуля и half-open range в циклах используется А какие из этих языков после этого рандомно выбирают, крашнуться или работать как ни в чем не бывало?
> надо понимать, что приходит указатель Тут надо понимать, там надо понимать, везде надо понимать, о чем я и писал >>2120499. Проебал строчку в книжке и уже не понимаешь. Это называется > довольно лёгкое, приятное и, что немаловажно, БЫСТРОЕ обучение
>>2120842 Пушто рантайм проверки хуета. Если не смотреть через призму современных умных структур данных, а учить с нуля, как средство работы с байтиками, то не так уж и много инфы придется освоить. А потом логическим продолжать осваивать штуки, которые эту работу упрощают, и вырастешь нормальным человеком. В этом прелесть bottom-up подхода, если не перегибать палку и не начинать с asm. Да, как минусы top-down в том, что больше срача в голове, так минуса bottom-up, что больше месяцев надо на чистой силе воли убить, пока не получится что-то прикольное. Но Си как раз золотая середина, потому что за пару месяцев вполне себе освоишься, а если и на то не готов, то нахуй такие на рынке не нужны, демпингуют еще сука.
>>2120842 >А какие из этих языков после этого рандомно выбирают Любые языки, предназначенные для работы в неуправляемой среде. В этом и соль — ты не можешь получить контроль над железом, не неся при этом ответственности за последствия своих действий. Остальное уже субъективно — ты топишь за то, что управляемая среда лучше, поскольку она запрещает НЕКОТОРЫЕ способы выстрелить себе в ногу (но подвозит ещё тележку других), и типа ньюфагу нельзя разрешать стрелять себе в ногу сишными способами, а надо разрешать только питоньими (почему? а хуй знает), я топлю за то, что написал ещё в самом первом посте и на что ты так ничего не возразил 1. Многие языки имеют схожий синтаксис 2. Многие языки подразумевают ту же самую парадигму в качестве основной (а именно — императивное программирование: когда мы пишем чёткий алгоритм и делаем это с помощью манипуляции стейтом) 3. Без си не вникнешь в работу интерпретатора своего любимого языка (а значит по дисциплине "языки и компиляторы" соснёшь хуй) 4. Без си сломаешь жопу в попытках изучить и воплотить некоторые структуры данных, которые требует плотной работы с памятью (хэшмепы, динамические массивы и т.д.), а значит соснёшь хуй уже по дисциплине "алгоритмы и структуры данных" 5. Соснёшь хуй по дисциплине "операционные системы" (пайпы семафоры блаблабла), стандартная либа си крепко связана с системными вызовами. 6. Соснёшь по архитектуре, конечно же, тут даже комментировать нечего. 7. Немножко соснёшь по сетям 8. Ну и ещё немного по БД и прочим таким вещам, где важна производительность.
Я ж сам таким был, раньше тоже воевал с сишкой кричал пердуны, а потом оно оказалось так что когда нужно будет конкретно начинать работать, а не борщи хлебать — везде си.
>>2120887 > если не перегибать палку и не начинать с asm Асм довольно-таки полезен. Как минимум хотя бы потому, что сишные указатели будут досконально поняты примерно через 30 секунд после прочтения что это за хуйня и пары примеров.
>>2120987 > ты топишь за то, что управляемая среда лучше Для новичка - да. Для того, чтобы быстро наговнякать, концентрируясь на алгоритме, а не задумываясь об управлении памятью и выходе за пределы массива - да. А кстати, расскажи нам, как выстрелить себе в ногу питоньим способом?
> Без си не вникнешь в работу интерпретатора своего любимого языка Писал на питоне эмулятор x86 и пару интерпретаторов. Это было чуть больнее, чем на Си, но в основном из-за отсутствия switch. В остальном удобнее.
> хэшмепы, динамические массивы Которые любой вменяемый язык предоставляет из коробки. Алсо, никто не мешает для обучения городить это хоть на жс, списки-массивы есть, индексы вместо указателей вполне сгодятся.
> пайпы семафоры блаблабла Есть везде. Заодно можно усвоить опыт предыдущих поколений, как от этого абстрагироваться.
> Соснёшь по архитектуре, Опять-таки концентрация на программировании, а не на том, как бы разложить данные, чтобы в кэш влезли. Если думать о микрооптимизациях до алгоритмов, получим вылизанную по агнеру фогу до такта сортировку пузырьком. Сто раз такое видел.
> Немножко соснёшь по сетям Любой язык, который отучает не учит новичка делать struct msg; recv(s, &msg, sizeof(msg), 0) - благо. Научится перекладывать байты правильно и кроссплатформенно - позже не возникнет желания закладываться на невыравненный доступ к памяти и прочий порядок байтов (и битов).
> Ну и ещё немного по БД Дергать query и cursor_next можно хоть из жс.
> производительность Мы сейчас точно про вкатывающихся говорим?
> раньше тоже воевал с сишкой кричал пердуны Если что, Си - мой основной язык. Просто Си в качестве первого языка в 2021 году не годится. Си - это устаревший кривой кусок говна, сделанный для задач 70х-80х годов, который уже никак не исправить. К сожалению, он еще и единственный вменяемый из существующих низкоуровневых языков, на котором вдобавок написано овердохуя кода, поэтому учить его так или иначе придется. Но не первым.
> работать, а не борщи хлебать — везде си Везде кресты, ты хотел сказать.
>>2121072 Я наоборот начинал с асма. И после этого примерно лет десять Си мне очень нравился, и я не замечал недостатков. А потом вырос.
>>2121085 >А кстати, расскажи нам, как выстрелить себе в ногу питоньим способом? Точно так же — забыть отступ поставить, попробовать прочитать несуществующего члена списка. >Для новичка - да. Для того, чтобы быстро наговнякать, концентрируясь на алгоритме А где связь между новичком и быстрым говняканьем? Пояснишь, почему новичок обязан быстро говнякать и ни о чём не задумываться, почему новичок не должен учиться например? >Писал на питоне эмулятор x86 и пару интерпретаторов. Жопочтец, пожалуйста. >Которые любой вменяемый язык предоставляет из коробки. Очень хорошо ты обучишься алгоритмам и структурам данных, не воплощая алгоритмы и структуры данных. Ты видимо и программировать научился, не прибегая к написанию программ. >никто не мешает для обучения городить это хоть на жс Никто не мешает и большие проекты целиком на асме писать, однако никто так не делает. >Заодно можно усвоить опыт предыдущих поколений, как от этого абстрагироваться. Очень хорошо ты обучишься дисциплине "операционные системы", не изучая сию дисциплину, ага-ага. Дальше не читал, слишком толсто пошло.
C is just about as close to a computer's hardware as you can get before you have assembly language (which would be too arcane, I think, for an introductory course like CS50). In C, there's no magic. If you want something to be somewhere in memory, you have to put it there yourself. If you want a hash table, you have to implement it yourself. The result by term's end, we hope, is that students understand how things work from the bottom up and, better yet, can explain as much. C is also a small language that, by mid-semester, students have seen nearly all of (except for, e.g., unions and function pointers).
>>2121085 >Си - это устаревший кривой кусок говна, сделанный для задач 70х-80х годов, который уже никак не исправить. А остальные промышленные языки - кривые куски говна, построенные на принципах, которые были известны еще в 70е и которыми пытаются решать задачи 10х-20х. Это относится и к C++, и к Java, и к Python.
>>2121223 Ньюфаг в программировании != ньюфаг в Си. И я ничего не требую. Я не рекомендую.
>>2121254 > Это относится и к C++, и к Java, и к Python. Давай сравним то, как изменился Си под требования времени с тем, как изменились джава, кресты и питон. Вот многопоточность завезли, которой никто уже не пользуется, потому что везде свои костыли. Что там еще? Два раза пытались добавить юникод, получилось не очень. Вот _Generic еще, мы его как раз в прошлом треде обсуждали, какой он удобный и нужный. Попутно проебали основную идею C takes the point of view that the programmer is always right, получился небезопасный язык, где программист не доверяет компилятору, а тот, в свою очередь, не доверяет программисту. Так и живем. Ну да и хуй с ним, в С23 доломают.
Подниму свой вопрос, ежжи, >>2120589 Кратко: На раскачку имею всего год, но хочется выучить БАЗУ. Собственно вопрос, как обстоят дела с вакансиями Си-джуниора? Или же стоит сразу начать учить плюсы?
>>2120608 > Кресты ты и одни за год не осилишь Маньчкин, плиз. За полгода выучил С++ по самоучителю, еще за полгода сделал пет-прджект на Qt. Устроился джуном за 100к. А ты и даьше сиди у мамши на шее и учи кресты всю жизнь.
>>2121383 С вакансиями на си дела так себе: >>2120054 Кроме как писать прошивки на микрики за миску риса работы на Си нет. С++ это тоже в основном работа за еду, потому что либо таже встраиваемка, либо работа на заводе или в госпараше.
>>2120054 Капртинка - чушь собачья. Нет данных по количесиву ваканчий. Что толку от говноязыка в топе с космической зарплатой, но рабочих мест - 2 штуки на всю страну.
>>2120630 >Классика... (бла-бла) Это сам язык, а вовсе никакая не "классика". Прямой доступ к памяти - это и есть язык Си. А ты чего хотел? Оберток с защитой, запрещающих доступ к памяти? Ты придурок или даун? Си для этого и существует - делать эти вещи, которые ты называешь "косяками". Откуда такие дебилы вообще лезут. А я скажу откуда, как раз из других языков, а точнее не языков, а сраной скриптовой параши вроде той же жс, из которой ты и вылез. Кто учится параше, навечно становится имбецилом с парашным мышлением, что ты и продемонстрировал.
>>2121521 >Кьют к С++ такое себе отношение имеет, реальные кресты Что в твоем понимании реальные кресты? >QML освоил? html и css в qt почти 1 к 1 как в вебе, ничего сложного, языки разметки. логика вся на плюсах
>>2121563 > Си для этого и существует - делать эти вещи, которые ты называешь "косяками". Си существует для работы на низком уровне, а не для того, чтобы делать косяки, косяки как раз лучше не делать. Поэтому тот же Rust лучше, так как также позволяет работать на низком уровне, но не делать косяков как в С/С++ где есть миллион способов выстрелить себе в ногу.
>>2121880 > вакансий на boost Чего, блядь? Ты ебанутый? Буст сейчас практически на той же позиции, что в свое время был TR1, они идут рука об руку с комитетом, это считай что часть стандартной библиотеки, только неофициально.
>>2121563 Лол, си оперирует с абстрактной машиной фон неймана, похожей на pdp-11, что давно не соответствует реальности. Сидебилы думают, что программируют на """низком уровне""", но на самом деле большинство работы за них делает компилятор и процессор.
>>2121563 >Прямой доступ к памяти - это и есть язык Си. >сраной скриптовой параши вроде той же жс, В Micropython есть прямой доступ к памяти контроллера. Вообще, память это просто массив байт или чего-то покрупнее. Вообще без разницы на чем этот массив читать/ писать. Я лично тот ещё имбицил, писал ассемблер на 3000 строк (недавно открыл посчитать), а потом открыл для себя питон и понял что это тот же ассемблер (полная интроспекция, делай что хочешь с любым полем или методом) но удобнее.
Так вот, а потом я как следует распробовал js и он оказался даже удобнее. Просто что угодно пиши в словарь и делай с ним что хочешь. Так мало того там полностью декларативный интерфейс с огромными мультимедиа возможностями. Так мало этого, его можно вообще запустить на любом телефоне. Открыл браузер и все, ничего не нужно качать устанавливать.
Вот и нахуй мне что-то ещё? Любой файл открыл, распарсил, посмотрел (не в консоле строчку вывел , а любую таблицу, диаграмму.воочию увидел, отмасштабировал), изменил, скачал, закрыл - все! Вот единственное жаль, что не научился я с файлами по-другому взаимодействовать, кроме как скачивать. Хочу хромбук, вот просто мечта уже такая. Ну и ограничение на файл где-то в районе 70мб. Больше у меня ломается браузер.
Вот если бы хоть какой-нибудь был графический интерфейс у других языков без пердолинга, я бы подумал что выбрать.
Так что на скрипты не гони, это нужная вещь. А смузихлебы и карьеристы везде есть.
>>2122332 Говно твои скрипты, скрипты используют в аппаратах ивл? В управлении боеголовками? В эбу автомобиля? Нет, там Си. А скрипты это только для браузерных игр и сайтиков магазина дилдаков.
>>2122028 > Назови альтернативу не обмазанну ООП говном "Я хочу альтернативу коболу, но чтобы страдать точно так же как в коболе, современные языки не нужны" а альтернатив-то и нет
>>2122462 Все правильно. Стандарт предполагает нечто подобное гарвардской архитектуре. Указатели на функции нельзя кастить в указатели на данные (точнее, кастить-то можно, но разыменовывать нельзя).
>>2122458 Скрипты используются, чтобы все перечисленное тобой собрать, протестировать, прошить, отладить и ещё много-много всего узкоспециализированного.
Говорить что скрипты только для игр может очень недалёкий, не очень далекий или очень далёкий от программирования человек.
Вот скажи, что makefile не скрипт. Скажи что баш не скрипт. Скажи что они лучше решают свои задачи, чем скриптовые языки общего назначения.
Может ты просто смузихлеб с моднявой иде, где все скрипты сделаны за тебя, привязаны к кнопочке и тебе все это не нужно?
А может ты пишешь для каждого частного случая консольную программу на си? Нужно переименовать файлы - пишешь утилиту. И так далее? Или вообще все готовое используешь?
>>2122028 Альтернативу чтобы программировать на хуй пойми каком уровне абстракций? >>2122458 там может быть и ада >>2122462 Потому что вы используете компиляторные расширения, а не стандартный си. >>2122472 пик C99, в 6.3.2.3 о касте функций в данные ничего нет
>>2122568 > о касте функций в данные ничего нет Да, я обосрался, можно кастить только в указатель на функцию другого типа. Но тем более. Функции и данные не пересекаются = гарвард.
> там может быть и ада Это все редкие или очень узкоспециализированные железки. А вот баш в фотоаппарате не хочешь? И питон с луа дохуя где, причем иногда одновременно.
>>2122002 >на """низком уровне""" Нелол дебил, подучи русский язык сначала, прежде чем лезть в другие языки. "Низкий" это понятие относительное, а не абсолютное. "Низкий" не бывает просто низкий, а только относительно чего низкий. Это называется относительность, тупорылое ебло. Так вот, ниже Си только ассемблер. Не суцществует кроме ассемблера ничего ниже Си и даже ничего равного Си нет, только выше. Поэтому Си - низкий уровень. И не просто низкий, а самый низкий из универсальных языков. Си это буквально чудо, сумевшее усидеть на двух стульях - низкий уровень с прямым доступом к железу и отвязки от от конкретного железа. Поэтому никогда не будет никаких аналогов Си, кропе парашных кукареков из говна.
>>2122332 >В Micropython есть прямой доступ к памяти контроллера В батниках тоже есть (думаю можно сделать), и что, дебил? Дело не в доступе (через анальные жопы), а в том, чем является сам язык. Язык Си сам по себе работает на уровне железа, на уровне прямой памяти, прямо в ней, а не имеет доступ через говняные пуповины, сам будучи парашным скриптом в виртуальной говномашине как другие языки.
>>2122942 >Так вот, ниже Си только ассемблер. Не суцществует кроме ассемблера ничего ниже Си и даже ничего равного Си нет, только выше. Но низость си заключается в прямой работе с памятью, возможностью инлайнить ассемблер и вызывать интринзики. Таких языков достаточно. Или какие ещё у си есть низкие опции?
>>2122947 Низость, достоинство и предназначение Си заключается в его собственной низости, нахождении и работе на низком уровне, а не сидеть вверху, опистив леску удочки на километры вниз, как это в парашных скриптах. Это то, что по-настоящему является программированием - программирование устройства на выполнение функций, а не парашные скрипты, где ты программируешь парашную виртуалку, так же бесконеячно далекую от устройства как анус твоей мамаши от девственности.
Потому что, повторяю для дебилов, программирование это понятие относительное. не бывает просто программирования, бывает только программирование чего-то. И вот это самое то, что ты программируешь и разделяет программистов с программированием от макак со скриптами, хороший софт, от жирной, тормозящей и разваливающейся блевотины, техников-специалистов от индусского свинобыдла с улицы, "вкатывающегося" ради моды и бабла.
>>2122950 И в чём заключается нахождение на низком уровне конкретно, а не абстрактно и метафорично? Я тебе назвал конкретные вещи, которые делают язык низкоуровневым.
>>2122951 В том и заключается, что не абстрактно и метафорично, а буквально, на самом деле. Скриптомакаке, у которой мышление в принципе застряло на высоком уровне, осмыслить сие будет сложно.
>>2122952 Ну вот зачем ты жопой вертишь? Я же нормально спросил, и примеры привёл. Что такого низкоуровнего умеет си, что не умеют другие языки? Напрямую управлять кэшлайнами, может?
>>2122954 Ну вот зачем ты жопой вертишь? Я же нормально ответил. Си находится на уровне железа - устройства, чтобы программировать это устройство. Это и есть программирование. Другие языки не такие, они висят на высоком уровне виртуальной параши и программируют эту парашу. Это не программирование, а имитация для даунов.
>>2122973 > Си находится на уровне железа - устройства, чтобы программировать это устройство. Это делают все языки, компилируемые в нативный ассемблер. Таких немало.
>>2122973 Профан детектед. Си не находится на уровне железа. На уровне железа позволяют работать ассемблерные вставки в Си. Но если ты юзаешь синтаксис Си - это уже высокоуровневое программирование.
>>2122943 >Язык Си сам по себе работает на уровне железа, на уровне прямой памяти, прямо в ней Это программирование на основе структур. Так бы и сказал сразу, и не горела бы твоя жопа. А прямой доступ к памяти есть везде. Запезделся ты короче, с кем не бывает.
>Низость, достоинство и предназначение Си заключается в его собственной низости, нахождении и работе на низком уровне, а не сидеть вверху, опистив леску удочки на километры вниз, как это в парашных скриптах. Это то, что по-настоящему является программированием - программирование устройства на выполнение функций, а не парашные скрипты, где ты программируешь Это всего лишь твое имхо, далёкое от реальности и размытое >парашную виртуалку, так же бесконеячно далекую от устройства как анус твоей мамаши от девственности. Не бесконечно, а всего лишь на один уровень абстракции выше. Вместо твоих любимых структур там ассоциативные массивы, реализованные на тех же структурах. Все остальное Такое же.
>Потому что, повторяю для дебилов, программирование это понятие относительное. не бывает просто программирования, бывает только программирование чего-то. Ассоциативный массив для тебя что? >И вот это самое то, что ты программируешь и разделяет программистов с программированием от макак со скриптами, хороший софт, от жирной, тормозящей и разваливающейся блевотины, техников-специалистов от индусского свинобыдла с улицы, "вкатывающегося" ради моды и бабла. Это твое субъективное отношение к людям, а не характеристика языка.
>>2123022 >>2123024 Весь букет демагогии, прямо по мануалу "Как илиоты ведут споры в интернете". Вот они, скриптомакаки. Не программисты, даже не люди, просто уличный сброд.
>>2123030 Это про тебя скорее. Оттого что ты написал это первым, ничего не изменится. Все прекрасно видят, кто сообщает факты, а кто жонглирует агрессией.
ну когда уже там придем к выводу что все скриптопарашники - макаки, и пусть пиздуют с треда обсасывать свои синглпэйдж сайты на реакте и бэком на петухоне в каком-нибудь другом треде?
мимо рандомный анон, не понимающий, какого хуя влетел какой-то рандомный черт погонять что си - параша, не хочешь не пиши на нем, делов-то
>>2122977 >вместо прямых адресов в памяти у нас переменная, которая при компиляции превратится в адрес >ойойойой пацаны ВЫСОКИЙ УРОВЕНЬ >>2123133 Недостаточно просто не писать на си, надо постоянно поддерживать манямир, в котором си — говно.
Я даже рад тому что твёрдые лбы не пробить. Дауны не умеющие находить компромиссы не нужны. Пускай сидят в своей отрасли, и не лезут больше никуда. Тот случай когда все эти понятия зашквара и некошерности работают как защита от дурака. Умный взвесит и выберет что ему нужно, дурак не полезет и правильно, зачем палить быдлу годноту? Тем более доказывать что-то. Понаедут и все поломают, ну его нафиг.
>>2123596 >>вместо прямых адресов в памяти у нас переменная, которая при компиляции превратится в адрес А может в регистр, а может во время выполнения попадёт в кэш, нельзя точно сказать, что произойдёт. Также как нельзя сказать, вставит ли компилятор выравнивание. >>2122973 Обычно для программирования устройств на си производитель предоставляет компилятор и hal/api. Тоже самое можно было бы проделать с любым другим языком. Си использует просто потому что он требует минимальный рантайм. Си это высокоуровневый язык, всегда им был, поэтому рассматривая его как высокоуровневый он действительно говно.
дебики называют си "низкоуровневым" изза высокой нативности трансляции. дебики правда забыли что такая нативность не часть штондарта, потому компелятор волен хуевертить как хочет. ну и волатилы с асм-инлайнами тоже вводят в заблуждашки
>>2123783 Ассемблер тоже высокоуровневый. Вот в любом ассемблере есть циклический сдвиг через флаг переноса (ror, rol), проверка, сброс, инверсия флага в любом регистре по номеру, а в си нету. На x86 есть функции (команда ассемблера это по сути функция с аргументами в регистрах) CRC, параллельных вычислений, сложение с накоплением, перестановки разные. Есть rep scas, lods, stos, реализующие поиск символа в памяти в одну строчку. А на си только голые числа и вызовы. Си очень низкоуровневый язык, ближе к verilog. Там тоже только +,-, &,|,! и числа. Но даже в верилоге есть допустим прямой доступ к любому биту. Ниже верилога уже только паяльник.
На fasm с его макросами .if .else . while гораздо проще программировать чем на си. Не нужно ебаться с приведением типов, например. Есть invoke/stdcall/ccall с аргументами в строчку. Сам выбираешь регистры или память. Все функции процессора под рукой, а чего нет в процессоре есть в ОС или в крайнем случае в сишных библиотеках. И препроцессор там настоящий, а не ебаные текстовые замены из 50х годов.
Так что на си не гоните, пожалуйста. Это самый низкий, самый тупой и прямой доступ к железу.
сори за головоеблю, я опять с тупым вопросом чет не понял ptrdiff_t и size_t по смыслу, допустим у меня есть функция void replace(char str, char dst, ptrdiff_t pos, size_t len); норм так будет в плане читаемости кода? что смещение (pos), по сути разница между указателями, эт у меня ptrdiff_t?
ну а размер заменяемой строки size_t тут вроде и так понятно
просто смотрю чужие исходники, ptrdiff_t не встречаю, все пихают size_t, даже для похожих на pos аргументы. Или вообще поебать и я черезчур загоняюсь?
>>2123910 Еще одной и той же машинной команде может соответствовать несколько разных команд ассемблера (и наоборот). Это позволяет утверждать, что команды ассемблера являются вовсе не мнемоническими именами, а самыми настоящими абстракциями. Мимо дилетант
>>2123910 >Ассемблер тоже высокоуровневый. Вот в любом ассемблере есть циклический сдвиг через флаг переноса (ror, rol), проверка, сброс, инверсия флага в любом регистре по номеру, а в си нету.
это тролленк? в какой точке у тебя асма высокоуровневая? каждая мнемоника взаимнооднозначно отображается в отдельный опкод со значениями. и откуда црц в х86?
>>2123910 >Си очень низкоуровневый язык, ближе к verilog
ну ты точно зеленый. сравниваешь ЯП с языком верификации и описания аппаратуры
>>2123933 ну пос у меня смещение src + pos = получается указатель на подстроку где len ее длинна ну т е эт норм что pos имеет тип ptrdiff_t > size_t безнаковый платформозависимый а бля, pos знаковый, мб лучше тогда туда size_t втопить? мне не надо чтобы отрицательный pos в функцию залетал
>>2123910 > fasm с высокоуровневыми макросами Казалось бы, треду было уже некуда катиться, но нет!
> гораздо проще программировать Эти макросы используют в основном те, кто не осилил сишку. Худшее из двух миров. Гораздо проще облажаться, код гораздо хуже чистого асма, гораздо хуже чистого си.
> И препроцессор там настоящий, а не ебаные текстовые замены из 50х годов. Препроцессор в фасме - это и есть текстовые замены. Кроме них есть только rept и match. Все остальное - те же самые дефайны с другими названиями.
>>2123929 > каждая мнемоника взаимнооднозначно отображается в отдельный опкод со значениями Простите, а mov eax,edx - это 8b c2 или 89 d0? А вот еще xchg eax,eax у меня тут, это какой опкод?
> и откуда црц в х86? Интел принес, очевидно же.
>>2123943 > а бля, pos знаковый, мб лучше тогда туда size_t втопить? Есть отрицательные смещения - сделай себе ssize_t или тащи местный (везде есть в том или ином виде). Если смещения/индексы беззнаковые (они чаще всего такие) - size_t. Оставь ptrdiff_t для реализации своей memmove.
>>2123933 > ptrdiff_t это чтобы кастить указатели к интам вроде Путаешь с (u)intptr_t. ptrdiff_t - это продукт вычитания двух указателей, в ином виде в дикой природе не встречается.
>>2123899 Fat pointers и еще tagged pointers в AArch64 смотрят на тебя с недоумением. Указатель в Си может быть чем угодно. То, что там случайно оказалось что-то, похожее на адрес - это всего лишь совпадение.
>>2123999 > Казалось бы, треду было уже некуда катиться, но нет! Это ты ещё не видел т.н. HLA от упоротого дида. https://en.wikipedia.org/wiki/High_Level_Assembly Книгу вроде не переводили, так что в рунете она не так известна, а у них вполне.
>>2124773 Все классификации по определению ущербны. Примерно до середины 90-х Си считался языком высокого уровня, потом потихоньку мнение изменилось. Поищи старые книги, изданные в этой или прошлой стране.
>>2124047 > Это ты ещё не видел Видел. Обсуждали на всех тематических форумах в начале 2000х, когда книжка вышла. Да и Рэндел сам по себе известный дядька.
>>2124825 >Примерно до середины 90-х Си считался языком высокого уровня, потом потихоньку мнение изменилось. А ты вижу не очень догадливый, и это не мнение изменилось, а языки программирования. Когда-то и ассемблер считался высоко-уровневым языком, что сказать-то хотел? Мы опираемся на иерархию исходя из развития языков в 2021-ом году, а не в 90-ом.
>>2124869 >а не в 90-ом Да хоть в -90-е. Тот пиздюк просто пиздит. Си никогда не был высокого уровня, всегда был низкого. Нужно только не пиздеть, а понимать что это значит. Как пример, в 80-х был компьютер с бейсиком и машинными кодами. Бейсик, хоть и структурно повторял синтаксис ассемблера, имел вставки машинного кода и доступ к памяти, и всяким регистрам железа, эти фичи были отдельными спец-фичами, а сам язык бейсик был высокого уровня, потому что он абстрактный. Когда пишешь на бейсике, о железе думать не нужно, так же как на жс или питоне. А вот на Си - нужно знать железо и думать о нем, просто по дефолту необходимо, даже если ты специально не собираешься с железом взаимодействовать, всё равно нужно, иначе никак, ведь сам Си - это и есть железо.
На практике это выражается в банальном отсутствии проверок на выход из массива. В бейсике и прочих языках высокого уровня эти проверки есть, а в Си - нет, потому что в Си нет никаких массивов, как нет и переменных, ведь ты можешь спокойно из одной переменной попасть в другую, просто так, "случайно", т.е. по дизайну языка. Си даже не пытается тебя огородить, ведь в этом нет смысла когда ты сидишь голой жопой на железе. Или возьми простое определение переменной: A=1 (в бейсике) и int a=1; (в Си). В бейсике всё просто, как и в любом языке высокого уровня - абстрактном. Концепция переменной везде одинаковая. А вот в Си - нихуя, в Си ты создаешь на стеке, а стек это не абстракция, стек существует, это железо, нужно понимать что это такое и сто ты этим делаешь в Си. Например, простой и очевидный массив из 100500 элементов, в Си будет нелегальной хуйнёй. И то, что компилятор умный и это может быть не стек, а маня-оптимизации в регистрах, ничепго не значит, необходимость понимания железа от этого не только не уходит, но скорее добавляется.
>>2125113 > Да хоть в -90-е Рандомный (первый) результат из гугла, искал книгу постарше (можешь найти другую): https://www.pcjs.org/documents/books/mspl13/msdos/advdos/ > Use of an assembler or high-level-language compiler (such as the Microsoft Macro Assembler or the Microsoft C Optimizing Compiler) to translate the source file into relocatable object code...
> на Си - нужно знать железо Не нужно. Есть такие штуки, называются библиотеки. Притащишь библиотеку с поддержкой звука в сишку, будут тебе PLAY и SOUND как в бейсике. Притащишь графику, будут тебе SCREEN, LINE и прочие PSET.
> из одной переменной попасть в другую, просто так, "случайно", т.е. по дизайну языка Мы точно о Си сейчас? Все, что ты перечислил - это UB. В дизайне языка заложено именно UB. А то, что оно работает так - это совпадение. Алсо, в том же самом бейсике (VB6) можно было выключить проверку границ массива, проверку переполнения интов и прочую хуйню, из-за которой бейсик был таким тормозным. В Си этих проверок нет по тем же самым причинам - быстродействие. При этом стандарт Си не запрещает делать проверку границ. По факту она много где есть, просто не по умолчанию: те же -fsanitize в gcc/clang или -b в tcc.
> А вот в Си - нихуя, в Си ты создаешь на стеке В стандарте Си нет стека вообще. Есть автоматические переменные. Компилятор волен хоть маллок делать на каждую, но не делает только потому, что стек быстрее.
> Например, простой и очевидный массив из 100500 элементов, в Си будет нелегальной хуйнёй Абсолютно нормальная практика. Например, если пишешь под десктопы. Никак не запрещено и работает.
в общем смотрю пример как сжимать разжимать данные с помощью zlib. https://zlib.net/zpipe.c этот пример сжимает вроде, потом скармливаю сжатые данные на разжатие, получаю изначальную строку. норм значит
но почему я не могу распоковать файл стандартными утилитами? это не gzip?
>>2125133 gzip - это формат для сжатия файлов, поэтому там заголовок, касающийся файлов (таймстамп, метод сжатия, имя, чексумма с размером в конце - дохуя всего, в общем). Внутри deflate (обычно). zlib - это либа это формат для сжатия потоков байтов, там тоже заголовок, но поменьше (метод сжатия, флаги и еще чексумма в конце). Внутри deflate (обычно). deflate - это тоже формат для сжатия (алгоритм может быть любым, и это позволило гуглу сделать zopfli), он ничего не предоставляет, просто описывает блок сжатых данных, и у него тоже есть свой заголовок, буквально несколько бит на блок.
Три разных формата, у всех есть свои заголовоки.
Твой zpipe делает zlib-поток: echo abcabcabc | zpipe > test.zlib Чтобы сделать из него gzip, надо достать оттуда deflate. Отрезаем два байта из начала и четыре байта с конца: tail -c+3 test.zlib | head -c-4 > test.deflate И нам нужен заголовок от gzip. Сигнатура: printf "\x1f\x8b" > test.gz Метод сжатия, флаги, таймстамп, стратегия сжатия, ОС. Это минимальная версия заголовка: printf "\x08\x00TIME\x04\x03" >> test.gz Наши данные в deflate: cat test.deflate >> test.gz И gzip-заголовок в конце файла: чексумма и размер. Оба неправильные, gzip при распаковке будет ругаться, но мне лень делать правильно: printf "CRC~SIZE" >> test.gz И теперь: gzip -cd test.gz
>>2125141 Нет. Если на входе не будет валидного zlib-потока, оно не будет знать, чем это упаковано и пошлет тебя нахуй.
>>2125146 >Нет. Если на входе не будет валидного zlib-потока, оно не будет знать, чем это упаковано и пошлет тебя нахуй. Я имл в виду, что она попытается stdin разжать, подразумевая, что там сжатые данные. Как она обрабатывает ошибки я не читал.
>>2125113 >На практике это выражается в банальном отсутствии проверок на выход из массива. Скажи проще что есть языки для неуправляемого окружения, а есть для управляемого. Просто способ понять, где ты — задать вопрос "а что происходит, если программа пытается в рантайме сделать хуйню?" Если ответ "вылетит исключение", то ты в управляемой среде, если ответ "а хуй его знает, всё что угодно" — в неуправляемой. Понятно что везде, где это возможно, лучше работать в управляемой среде. Где же это невозможно? Там где высокие требования к производительности заставляют рвать уровень абстракции и приблизиться к железу, либо там, где не на что ставить управляемую среду (ОС, драйвер, загрузчик, биос, прошивки для микриков) А так со всем согласен.
>>2125126 >В стандарте Си нет стека вообще. Ты его не понял. Нет разницы, если ли стек в стандарте или нет, если ситуация такова, что на бумаге у тебя вроде как более высокий уровень абстракции, но на деле ты всё время видишь через него более низкий, то по факту никакой абстракции у тебя нет и ты сидишь на железе. Вот если бы в сишке не надо было бы помнить про стек, то уровень абстракции существовал бы.
>>2125198 >не на что ставить управляемую среду (ОС, драйвер, загрузчик, биос, прошивки для микриков) Не совсем понятно, что значит "делать хуйню" и "не на что". Исключения везде есть и везде их можно обработать. ,В контроллерах - прерывания, а в Винде SEH. В википедии пишут что даже свои try блоки для си под Винду есть.
Добавить свои исключения через проверки - можно везде.
Разница наверное в том что в питоне свою проверку исключения можно встроить в синтаксис, а в си доступ к массиву всегда будет без проверок.
На уровне функций в принципе разницы нет. На контроллере можно все проверить внутри функции и вызывать при нужде программное прерывание с обработкой исключений.
вот скажите, знатоки, если в теории конпелятор начнет запрашивать кучу для array[], или/и наоборот кидать mallocи в стэк, будет ли противоречить какому-то из стандартов?
>>2125146 хмм вроде понял, тип zlib и gz 2 разных формата, оба оборачивают deflate, и если хочу gz надо вместо zlib хедеров закинуть gz?
нашел в документации что можно минимальный гзип хедер подкинуть > Add 16 to windowBits to write a simple gzip header and trailer around the compressed data instead of a zlib wrapper. сделал > deflateInit2(&gz_stream, Z_DEFAULT_COMPRESSION, Z_DEFLATED, WINDOW_BITS | 16, 8, Z_DEFAULT_STRATEGY) заработало
>>2125508 Кучу для array[] - не противоречит, лишь бы при выходе из блока free не забывал. Маллоки на стеке невозможны принципиально, потому что время жизни объекта не должно зависеть от времени жизни стекфрейма. Даже если ты не будешь привязываться к стекфрейму и сделашь void ∗stack_malloc(size_t n) { uint8_t obj[n]; return obj; }, то оно, конечно, будет выглядеть, как будто работает, но следующий же вызов любой функции затрет все нахуй.
Хотя ты можешь разместить кучу на стеке: в main() выделить на стеке дохуя, записать адрес в глобальную переменную и заставить маллок брать память оттуда. Это работать будет, потому что по сути ничем не отличается от статически выденного для кучи куска памяти. И еще маллок обычно умеет просить больше памяти у ОС, если у него кончилась, а тут такой фокус не прокатит.
>>2125514 > alloca() попал в один из последних стандартов Нет, оно по-прежнему нестандартное. Есть только VLA, которые делают что-то похожее.
>>2125202 Хоть кто-то понял. И помнить нужно не только о стеке, но и о памяти. Вот код: int a=1; int b=2; a[1]=3; С точки зрения языка высокого уровня это абсурд, ошибка синтаксиса, но в Си это нормальный рабочий код. А всё потому, что, повторяю: в Си нет переменных и массивов, это фальшивка лишь на вид похожая, а на самом деле это лишь сахарок голой памяти и арифметики указателей. Поэтому в Си это нормальный код, хотя выглядит как бред, потому что Си это нихуя не то, чем он кажется дауну с жаваскрипта, где типа тоже похожий синтаксис. Авотхуй.
Аноны, поясните за программирование микроконтроллеров. Легко ли джуну вкатываться в эту область? Есть ли в этом смысл, или сфера вымирает? Хочу заниматься программированием под фитнес-браслеты, умные холодильники и микроволновки, вот это все. Худо-бедно паять умею, программировать на С тоже (хоть и не на уровне бородатого сурового сеньора), в электронике почти не шарю, разве что знаю законы Ома и Кирхгофа, а также имею примерное понимание того, как работают диод и транзистор. У меня есть пара плат с stm32f103c8t6, которые blue pill, я подавал данные на логический анализатор через UART и I2C, принимал их через контроллер прерываний и обрабатывал эти события. Однако, я не пилил какие-либо крутые проекты, да и идей нет
>>2120065 > постоянно учиться новому, ходить на конференции, участвовать в митапах, следить за качеством кода, соблюдать code-style принятый в фирме, делать таски в сжатые сроки Разве в embedded-сфере не то же самое? Там тоже дохуя документации под различную периферию (команды, схемотехника) а также камни, на один stm32f103c8t6 много даташитов, считай, целых книг, которые надо осиливать. К тому же, embedded-разработчик помимо программирования (будь то С, С++, Rust, Go) должен знать физику (по крайней мере, один ее раздел - электротехнику). > Даже на последней галере если узнают, что к ним идет устраиваться "программист" из нии, его ливанут Даже если в "элитной" галере занимаются тупорылым формошлепством и CRUD'ами, а в сфере микроконтроллеров - наука, прогресс, космос. Из рабсиянского НИИ можно в перспективе уехать работать в SpaceX и заколачивать бабло.
>>2125637 >Поэтому в Си это нормальный код, Пиздабол в треде.
Я как вспомнил, как мне си мозг ебал из-за того что переменная не uint32, а uint16 или типа того. Как я заебался кастить каждый раз число в указатель. А если массив uint32, хуй туда сунешь int или ещё что точно такого же размера.
Я уже просил "дружочек, ну тебе не похуй? Я пишу байт по адресу или слово, какая разница, ну тебе же просто поменять команду а?" Хуй тебе, иди гугли касты.
В универе ебали java ООП, нахуй все это надо я думал. С тех пор ЯВУ считал говном пока коллега не показал питон и как его легко юзать. Я тогда переборол себя, попробовал и приятно удивился, как питону похуй на то что я делаю.
>>2125716 > Легко ли джуну вкатываться в эту область Не сложнее, чем писать под десктопы на той же сишке.
>>2125735 > должен знать физику Не путать плюс с минусом, переменный ток с постоянным, напряжение с током, 3.3V с 5V, ну и краем глаза прочитать про open drain. Это примерно все.
>>2125600 > Гораздо меньше. Ну хоть не сказал, что не нужно, уже прогресс. Единственная ситуация, когда мы вспоминаем о стеке - это когда мерзкие детали реализации лезут наружу при рекурсии. В любом языке лезут, будь то жабка или си. А в остальном сишные автоматичкские переменные от локальных переменных в других языках не отличаются совершенно ничем. И пока ты остаешься в рамках, заданных абстрактной машиной Си (== пишешь нормальный, валидный код без UB), помнить про стек не нужно.
>>2125816 >Не путать плюс с минусом, переменный ток с постоянным, напряжение с током, 3.3V с 5V, ну и краем глаза прочитать про open drain. Это примерно все. А если я начну пилить собственный проект? Мне ведь так или иначе придется сталкиваться с другими разделами физики, если я буду делать своего робота, например.
>>2125531 >Кучу для array[] - не противоречит, лишь бы при выходе из блока free не забывал
в таком случае деаллокации - уже задача конпелятора и опять же в таком случае деалокации будут либо по завершению функции, либо по завершению программы, однако это тоже не противоречит стандарту, хоть и контроль за памятью уже не на программисте.
>. Маллоки на стеке невозможны принципиально, потому что время жизни объекта не должно зависеть от времени жизни стекфрейма.
да, забыл про это, сорри. впрочем лайфтайм стэковых объектов уже ставит особняком стэк от других типов памяти.
>Хотя ты можешь разместить кучу на стеке: в main() выделить на стеке дохуя, записать адрес в глобальную переменную и заставить маллок брать память оттуда. Это работать будет, потому что по сути ничем не отличается от статически выденного для кучи куска памяти.
ну речь об условном экзотическом компеляторе, а не костылях программиста. мне было просто интересно предусматривает ли стандарт определенную работу трансляторов со стэковыми ресурсами (регистры, селекторы) или он в общем случае он волен кидать объекты куда хочет
>>2125879 >в таком случае деаллокации - уже задача конпелятора
сам себя пофикшу (только-только доперло). согласно стандарту деалокации - забота программиста в любом случае. а это значит попытка вызвать free() приведет к динамике стэку, что вапщет пиздец. так что стэк в Си есть, шах и мат
>>2125884 > забота программиста в любом случае Нет, локальные переменные автоматические, и компилятор сам о них заботится. А что конкретно он будет делать: add $sp, N или free() - стандарт не регламентирует.
> это значит попытка вызвать free() приведет к динамике стэку Не распарсил фразу. Но нельзя вызывать free() для того, что ты не получил через malloc()/calloc() (сам, или кто-то, кого ты вызывал). Т.е., даже если наш условный компилятор при входе в блок кода делает malloc() для локальных переменных и подставляет адреса, а ты сделаешь int main(void) { int x; free(&x); }, то независимо от того, сработает ли это - это все равно UB.
>>2125879 > ну речь об условном экзотическом компеляторе, а не костылях программиста Без разницы, кто это будет делать. Хотя в принципе поддержка компилятором тут не нужна. Алсо, я придумал чрезвычайно тормозной и слегка ограниченный способ делать malloc() на стеке, выделяя объекты в текущем стекфрейме, но обо мне тут и без моих ненормальных идей плохо думают.
>>2125916 Я вот свой недоязык делаю, пытаюсь понять как раз, какие способы распределения памяти существуют и какая у них иерархия. До этого момента у меня все адреса и переменные были статические. Но уже сил нет без объектов все делать. А объекты невозможно сделать без вычисления адресов, даже статический объект нужно на этапе компиляции куда-то разместить. Структуры имеют фиксированный размер и их легко было считать.
Короче я к тому, что можешь рассказывать, я все читаю и анализирую, даже если не отвечаю.
>>2125916 >локальные переменные автоматические, посмотри логи разговора. речь об объектах, аллоцированных с помощью стандартных malloc(), которые транслятор записал, как мы допустили, в стэк. это никакие не автоматические переменные согласно стандарту. следовательно сам стандарт требует, чтобы эти ресурсы были высвобождены кодерком. и
>Но нельзя вызывать free() для того, что ты не получил через malloc()/calloc() (сам, или кто-то, кого ты вызывал).
речь о том, как в данном случае в твоём глобальном стэке от мэйна free() будет реализовано. если после деалокации не трогать наш объект в стэке (хуй с ним, пусть полежит), то это будет пустая функция; или маппинг стэк-фрейма (чтобы кто-тобтв, кто именно, лол? знал о доступных ресурсах); и самый худший вариант - уменьшать фрейм с релокацией других объектов. по-моему это всё полный бред и стало быть каноны Си строго подчёркивают разницу между стэком и остальной памятью. да, возможно речь шла об организации памяти (то есть никаких push()/pop() в Си), а не просто специфическом куске памяти. но разница есть потому я всех разгромил в этой демагогии
>>2126078 А, так ты про кучу в стеке, а не локальные переменные в куче? Что мы вообще обсуждаем, лол? Я запутался.
> как в данном случае в твоём глобальном стэке от мэйна free() будет реализовано Как обычно кучу делают. Простейший вариант: связный список (free-list или block-list), блок помечаем как свободный, объединяем с предыдущим или следующим, если они свободны.
>>2125440 Не понял ты меня. >Управляемый код (англ. managed code) — термин, введённый фирмой Microsoft, для обозначения кода программы, исполняемой под «управлением» виртуальной машины .NET[1][2][3] — Common Language Runtime или Mono. При этом машинный код называется неуправляемым кодом (англ. unmanaged code). >Слово «управляемый» (англ. managed) здесь относится к методу обмена информацией между программой и исполняющей средой. Оно означает, что в любой точке исполнения управляющая среда может приостановить исполнение и получить информацию, специфичную для текущего состояния. Я об вот этом. "Добавить свои исключения через проверки" это не совсем то же самое, что "иметь возможность в любой момент остановить выполнение при нелегитимном поведении и показать что именно пыталась делать программа". Одно дело когда у тебя приложуха работает в виртуалке, и виртуалка всегда сможет корректно завершить падающий процесс и подробно показать, что там с ним было не так, другое — когда программа контролируется только осью, а ось максимум что сделает это скажет "сегфолт карочи ебать", и тем более когда оси вообще нет и там ты вообще один на один со своей писаниной и никто не подскажет, что же ты там такого нахуевертил от чело всё ложится.
>>2125816 >Единственная ситуация, когда мы вспоминаем о стеке - это когда мерзкие детали реализации лезут наружу при рекурсии. Ну в сишке у тебя дихотомия на стек и кучу, поэтому ты помнишь о нём постоянно, посколько постоянно решает вопрос "а куда это лучше положить?" В питоне про стек действительно вспоминаешь только при его переполнении, ведь там выделением памяти занимается интерпретатор/виртуалка/что-там-этим-в-питоне-занимается
Вопрос по tcp/ip. Не уверен, к вам ли или к линуксоидам лучше.
Короче, есть небольшая платка ethernet -> rs232, которая переправляет сообщения между двумя протоколами. Проблема в запуске TCP сервера на компьютере.
Если я сделаю просто "nc -l <ip> <port>", то всё нормально работает: пишу что-то в последовательный порт и оно отображается в выводе netcat'а. Если же я пытаюсь запустить сервер так, как показано тут — https://stackoverflow.com/questions/5533282/receiving-data-from-ethernet-port-in-c (как ADDR_ANY, так и чисто мой адрес), то он висит на accept'е, а в wireshark'е вижу, что все SYN запросы от чипа отвергаются RST,ACK'ами. При этом пример клиента оттуда же нормально коннектит, то есть сокет открывается и выходит слушается, хотя netstat его не отображает нигде (но он и netcat'овский тоже до подключения клиента не пишет почему-то).
К слову, тестовая программа от вендора (для винды) тоже не работает: вроде как сервер запускает, но никакие сообщения не посылает / не принимаем, ошибок не выводит, и что там конкретно происходит (от китайцев же всё с полурабочим сайтом, где и скачать-то прогу нельзя было, пришлось по интернету искать) непонятно.
Собственно, можете ли что-нибудь посоветовать? Куда копать, что можно поменять ли попробовать?
>>2126769 > посколько постоянно решает вопрос "а куда это лучше положить?" Нет, я решаю вопрос, нужна ли мне переменная за пределами определившей ее функции. То же самое я делаю и в питоне. Только там я не указатель возвращаю, а в dict, tuple или класс заворачиваю.
>>2127032 Я попросил бы! int array[n][m] в аргументах деградирует до указателя на массив из m интов, а не до указателя на указатель на int.
>>2127098 > ты просто передаешь в ф-ю где указатель на указатель array #include <stdio.h> void use_array(int arg) { printf("%d\n", arg[1][1]); } int main(void) { int array[2][2] = {{1, 2},{3,4}}; use_array(array); }
>>2127027 Ничего не показывает, так что и правда не открылся. Вероятнее всего, проблема либо в одном из этих двух (далее уже просто listen(id, 1) идёт и accept(id, ...)): > id = socket(AF_INET, SOCK_STREAM, 0); > setsockopt(id,SOL_SOCKET,SO_REUSEADDR,&idReuse,sizeof(idReuse))==-1) либо просто чего-то ещё не хватает, что скорее всего.
Вообще какой-то неправильный, похоже, сервер-то: если я запущу его пример клиента, который подконнектит и что-то пришлёт, то lsof всё равно ничего не отображает, то есть как таковая связь-то и не устанавливается выходит?
Если же nc -l запустить, то всё верно: там есть нужные айпи/порт в состоянии LISTENING, а потом на ESTABLISHED меняется как до него плата достучится.
>>2127126 > надо же так Но зачем? Это фу, фу, кака, не делой так больше никогда. Такое нужно, когда тебе хочется, чтобы вложенные массивы были разной длины.
>>2127134 А вот про это я и писал: >>2127038 Так можно. Еще можно VLA притащить, если второе измерение массива не фиксированное.
C котаны, как думаете каковы топ 5 причин по которым Сишечка - это фактически бессмертный ЯП? или хотя бы будет дить еще ближайшие лет 50 Несмотря на существование более продвинутого С++ и более современного и хипстерского Раста, Сишечка как была актуальна, так и остаётся таковой. Буду рад версиям анонов.
>>2127905 >каковы топ 5 причин по которым Сишечка - это фактически бессмертный ЯП?
Потому что новых языков для низкого уровня не придумали. Просто потому что никому это не нужно. У сишки есть компиляторы для всех возможные в мире платформ и устройств. У нового языка такой фичи не будет, увы
>>2127935 >Потому что новых языков для низкого уровня не придумали Чем тебе С++ не язык низкого уровня? Это ведь некий суперсет языка С. Хотя, как видим, плюсы сишечку не убили, а лишь дополнили. Интересно как во всю эту движуху впишется ржавый (Rust).
>>2125716 F103 не актуален, тем более с алика, если хочешь стать ембдерром запили свою библу на сложное и актуальное устройство(датчик, дисплей и тд), все протоколы и ядро кортекс ты должен знать и ещё дохуя чего, поэтому лучше оставь как хобби и занимайся чем нибудь другим
>>2130748 > F103 не актуален, тем более с алика Я знаю, но выбрал его для старта, т.к. под него очень много гайдов. > если хочешь стать ембдерром запили свою библу на сложное и актуальное устройство(датчик, дисплей и тд) А это довольно сложно, т.к. требует разбираться в документации по командам. Попытался наладить общение между микриком и ssd1306, в итоге утонул в информации, юзаю в итоге готовую либу.
> все протоколы и ядро кортекс ты должен знать и ещё дохуя чего Что именно знать? Нужно уметь программировать все это на уровне регистров? А что насчет Cortex, я должен наизусть знать архитектуру?
> поэтому лучше оставь как хобби и занимайся чем нибудь другим Не хочется заниматься ебанными сайтами или чем-то близким к этому, но работу искать надо. Я долгое время увлекаюсь реверс-инжинирингом, пентестом, поиском уязвимостей, но, к сожалению, не могу сделать это источником заработка.
>>2130545 Просто повезло )) На первую сишную работу устраивался с опытом программирования PIC16 и показал сишный код, который писал для себя, в том числе ядерный. А там как раз требовалось такое для поддержки самопальных железок.
Как делал я. Нашел код на питоне. Запустил через esp32/8266 или black pill через mycropython. Прочитал исходник. Нашел инициализацию. Выписал в строку байт (там чтение не нужно, всегда запись). Отправил их прямо строкой через i2c на питоне без либы. Прочитал смысл каждой команды в даташите. Собрал те функции которые мне нужны уже в ассемблере. Сохранил. Закрыл. Разъебал экран. Забыл.
>>2131089 Привет, школа 42 как же вы заебали.Никаких указателей там нет, есть дескрипторы и традиция написания нечитаемого когда с магическими числами, которая до сих пор тянется к нам из 80х. Поэтому тебе стоит сначала man read и потом загуглить STDIN_FILENO, дальше сам.
>>2131113 > Привет, школа 42 С чего ты взял? > Никаких указателей там нет, есть дескрипторы и традиция написания нечитаемого когда с магическими числами, которая до сих пор тянется к нам из 80х. Поэтому тебе стоит сначала man read и потом загуглить STDIN_FILENO, дальше сам. Спасибо большое
>>2131966 Плюсы это пиздец, там надо очень много знать, ведь разработчики высрали множество различных стандартов. Да и перспектив у этого языка нет, там одно легаси.
>>2132011 А чего тебе именно не хватает? Он наоборот является языком, предоставляющим тебе максимальные возможности в пределах выделенной твоей программе памяти (разве что после ассемблера). > раст Сам думаю выучить его.
>>2130752 Гайды хуяйды, изучи даташит, изучи программирование. Программирование это твой стиль написания кода. На хуй брать говно f103(каюсь сам раньше грешил по незнанию сейчас это говно валяется, потому что нормальную купил) китайцы продают самопал ёбаный за счет вас хомячков кормяться, бери нормальный девборд(если не в терпеж адаптируй гайды под нее) На производстве никто f103 не юзает, залезь лучше в форум стм и почитай
>>2130752 Знай как работает spi, i2c, 1wire, can, uart, usart Знай cortex почитай книгу, взвесь все за и против хватит ли времени, у тебя должно быть дохуя мотивации вкатиться, у ембдеров нету джунов, сеньоров
>>2132026 абстракций не хватает, процедурная парадигма очень скудна.
>>2132072 > Я вот попробовал Го да я тоже пробовал, диплом когда-то давно на го писал. Прикольно, структуры с методами, и утиная типизация, такое бы в си завезли. но го не то. Там ГЦ, а я хочу че-нить без ГЦ, вот си и плюсы. есть еще раст, но там борроу чекер залупский, который ебет тебя в жопу, и слегка делает память безопасней. А я не хочу ебаться с борроу чекером, я хочу ебаться с памятью.
> есть ПХП да я и так уже рубист
хотя с си я больше профита поимею, нативные экстеншены для рубей смогу клепать.
Зацените ats. Встроенный прувер, безопаснее раста, адресная арифметика, мл-лайк синтаксис, фичи мл(автовывод типов, алгебраические типы и т.д.), линейные типы, зависимые типы, компиляция в си и много чего ещё.
>>2132306 Это нормально, язык появился где-то в конце нулевых, вышло две версии, на подходе третья, более простая. До сих пор о нём знает очень мало людей.
>>2132314 абстрактные типы нужны для удобства и безопасности. Никто не мешает вызывать сишные функции, которые, вроде, можно верифицировать с помощью ats.
Имеет ли смысл компилировать (небольшие) части своего проекта в статические либы и линковать с ними? Допустим, если у меня под stm проект, а там hal, freertos и несколько файлов с собственно юзер кодом. Я как-то вот сделал, чтобы hal и freertos компилировались, собирались ar'ом ну и лежали себе готовенькие. Зачем только? Изначально я туда полез, потому что где-то писали, что поможет уменьшить размер бинарника (типа, возьмёт из либы только использумые функции), но с -ffunction-setions и --gc-sections разницы никакой нет (а без этих флагов компиляция в либу мало чего даёт). Разве что makefile может читабельней выходит, когда не всё в кучу накладывается.
>>2132146 Ни одной книги полезнее даташита или app note не встречал. Все что нужно знать об интерфейсах, есть в даташитах на чипы, которые этот интерфейс имеют. С ПЛИС ситуация точно такая же, и даже более характерная. Не понимаешь один даташит - возьми другой. Совсем плохо - гугли.
>>2132386 Готовые либы хороши если вдруг их старые проверенные исходники перестанут собираться по какой-то причине. У меня есть короткая полезная функция на ассемблере, которую я вставляю как массив байт и вызываю где хочу. Не нужно ебаться с поддержкой ассемблера.
>>2132558 >У меня есть короткая полезная функция на ассемблере, которую я вставляю как массив байт и вызываю где хочу. В исходниках на турбо паскале такого говна было полно. Ты оттуда вылез?
>>2132608 Так он же в любом случае перекомпилирует только те объекты, в исходниках которых были изменения (у меня по крайней мере каждый .c в .o делается по-отдельности). Скорее наборот, без либы было бы быстрее (если миллисекунды считать), так как не нужно дополнительно архивировать это всё потом.
Статические либы придумали только для того, чтобы объектники (один на функцию, в идеале) не лежали россыпью. Потом туда присобачили индексы, чтобы собирать быстрее.
>>2133022 Это правильно с т.з. теории (сокрытие деталей реализации), но вынуждает выделять струку динамически. А нормальные сишники не спешат маллочить.
>>2132826 Это в идеале так. А в жизни ты поправил CMakeLists, и оно опять пересобирается. Дописал комментарий в хедере либы, и пересобирается твоя либа, и твои приложения, которые ее используют. Так что да, статические либы в большом проекте - спасение.
>>2133022 Публичная структура - имя и поля в хедере, можно определять переменные такого типа. Приватная структура - в хедере только имя, переменные определять может только реализация, которая объявила полноценную версию структуры, а внешний код будет довольствоваться только непрозрачными указателями.
>>2132220 >абстракций не хватает, процедурная парадигма очень скудна Ты на С можешь программировать хоть объектно-ориентированно, хоть функционально. Например, свои классы можно пилить из структур, в которых содержатся указатели на функции.
да только уже чем так изъебываться проще для структур делать методы mylib mylib_create() void mylib_free(mylib self) mylib mylib_clone(mylib self) и так далее и не выебываться. Либо сразу плюсы взять
А про функциональщину интерестно, каким это боком на си можно?
>>2133039 ФП на Си в конечном счете вырождается в ООП, ибо для захвата каждого отдельного окружения придется объявлять структуру, а при захвате вручную инициализировать эту структуру.
>>2133035 >А в жизни ты поправил CMakeLists, и оно опять пересобирается Так это же всё будет зависеть от того, как у тебя зависимости настроены. Откуда ему знать, может ты там убрал или добавил каких-то объектов, ясное дело, что нужно перекомпилировать. А если никакие объекты от мейкфайла не зависят (я в cmake не очень, пользуюсь обычным gnu'шным makefile'ом, но полагаю, что там примерно то же самое всё), то изменения внутри этого файла необходимость перекомпиляции не возбудят.
>Дописал комментарий в хедере либы, и пересобирается твоя либа То же самое. Как ему разобрать, просто комментарий ты написал или каких-то новых вещей напихал или поля структур изменил? Произошли изменения — нужно пересобрать всё.
Не очень понимаю, как именно статическая либа тут что-то изменит-то? Были изменения, затронувшие файлы "либы" — нужно бует перекомпилировать. Линковаться со всеми этими объектами или предварительно собрать всё в архив, какая разница-то?
>>2133105 >если никакие объекты от мейкфайла не зависят (я в cmake не очень, пользуюсь обычным gnu'шным makefile'ом, но полагаю, что там примерно то же самое всё), то изменения внутри этого файла необходимость перекомпиляции не возбудят.
>>2119301 (OP) пишу tui под линуксами без сторонних библиотек .Проблема заключается в том,что операционная система отправляет сигнал SIGWINCH только когда в UI-цикле задержка между записями в stdout составляет порядка 200 миллисекунд .Если понижать задержку ,при изменении размера терминала сигнал начинает приходить не всегда , а то вообще не приходит в 100% случаев.
стабильная робота только при 5-ти кадрах в секунду это неприемлемо
>>2133105 > Не очень понимаю, как именно статическая либа тут что-то изменит-то? Считаешь, что функциональность заморожена @ уберешь либу и ее хедеры из зависимостей остального проекта @ ребилдишь либу, если нужно, явным способом make mylib.a @ профит, если правки не влияют на интерфейс либы. Экономишь кучу времени на ребилдах.
Ну тут на самом деле код ничем не поможет потому что это операционная система сигнал не шлет , тут мои полномочия все.Единственный вариант что я должен куда-нибудь пару байтиков записать что бы что-то сбросилось, или syscall какой-то нужен.Я собственно к сишникам на ковер пришел потому что плюсовики вряд ли про такие тонкости оси знают
>>2133412 Возможно, твоему терминальному эмулятору становится хуево от того, что ты пишешь каждый байт отдельным вызовом. И оно не посылает тебе сигнал. Буферизуй записи или поменяй терминал.
>>2133462 Ну поменяй терминал точно не вариант т.к программа должна работать везде,даже в нативном линупс терминале,без иксов.
Я не могу чисто теоретически записывать например построчно ,потому что каждая клеточка терминала должна иметь свой цвет,который я ,перед тем как положить char ,должен записать в stdout в виде esc-кода .То есть от посимвольной записи уйти невозможно.
>>2133497 попробовал построчный write : не сработало. запись всех данных одним разом результатов тоже не дал.
>ознакомиться с внутренностями curses Ну по-хорошему надо лезть в исходники огромных библиотек и вычитывать как они там это реализовали, но если бы я хотел этим заниматься ,то не пошел бы просить совета на двачах
>>2133199 Я в курсе, про это и писал, что если мейкфайл вот так вот не указан как зависимость, то ничего не произойдёт.
>>2133386 Да, но точно так же можно было бы убрать и объекты этой "либы" из зависимостей, но оставить в списке, передаваемом линкеру.
То есть, что у тебя будет >app.elf: main.c > $(CC) -c $< -o $•.o > $(LD) -o $@ $•.o -lmylib Что так: >app.elf: main.c > $(CC) -c $< -o $•.o > $(LD) -o $@ $•.o mylib.o
Результат-то один, не? Сколько mylib.c не изменяй, .elf не удет пересобираться. Понятное дело, что с либой удобнее, когда много файлов, вопрос-то в другом. Либа это лишь возможность более удобно организовать всё, как говорил >>2132869 (и как мне кажется), или всё же есть какая-то функциональная разница?
>>2133547 анон,который писал про то что терминал перегружен записями ,судя по всему, прав потому что пустой while(1) все прекрасно ловит , а если добавить туда запись даже одного байтика в stdout все идет пиздой.
Как я уже говорил : 5 к/с это неприемлемо,так что при изменении картинки буду двигать курсор и точечно править,а не писать весь массив без остановки.
>>2134573 >Before you start, please keep in mind that studying existing code is not necessarily the best way to learn programming. Programming, in the end, is about applied problem solving, and the best way to get better at problem solving is through lots of practice. Just reading existing snippets of code isn't likely to teach you as much. Usually, when people do study code, it's in a targeted and specific way. For example, if a dev was interested in writing a game using some engine, it would be helpful to see the source code for various demos using that engine.
>>2134709 Ну по существу, научиться програмировать можно программируя. Что понимается под программированием? Вот у меня есть мир. В этом мире есть некая задача. Я могу эту задачу решить вручную (это ВАЖНО, блядь, новички иногда часто забывают, что нельзя автоматизировать то, что ты не понимаешь как сделать вручную), но мне лень либо я не могу её решать достаточно быстро. К примеру я могу вручную рендерить кадры из 3д игры, но это мне мало что даст - моей скорости не хватит чтобы игра шла плавно и работала так, как было задумано. А компьютер может делать это быстро, поэтому приходим к программированию. Решая подобные задачи, мы учимся программировать. Читая же чужой код, можно понять, что хотел сказать автор той конкретной программы, которую ты читаешь. А можно не понять. Более важный вопрос - и чё дальше? Чукча, конечно читатель, и чукча может понять, как работает программа некоего дяди, которая делает то-то и то-то. Но что дальше чукча сделает с этими знаниями? Напрашивается ответ - чукча будет либо дебажить программу дяди, либо добавлять к ней фичи. Если чукче это нужно - то флаг ему в руки. Но если нет?
Как же всё заебало. Понаделали кнопочек и умничают. Что нравиться тебе этот сайт, нравится полуанонимное общение с модерацией? Зато кнопочки есть. У вас есть какая-то философия, принципы, для чего вы это делаете? Не только же для автоматизации, или только? Слабо придумать систему в которой будут не нужны модераторы? Конечно, тут ведь логику надо подключать, это вам не кнопочки делать.
>>2134891 >Ну по существу, научиться програмировать можно программируя. Ну да, а научиться говорить можно только говоря, слушать необязательно. Или можно послушать негров каких-нить - и заговорить на правильном английском. >Решая подобные задачи, мы учимся программировать. Вот так и появляется индусский код, который решает задачи (как бы вручную, но быстрее), а значит все хорошо.
>>2138687 Зачем нужен Си, если все в конце концов собирается в машинный код?
Ответ: потому что программы на языках программирования пишут для людей, а не компом. Компы и битами/байтами прекрасно довольствуются. Различные языки позволяют программы понятными для людей, что облегчает и их (программ) создание и доработку.
>>2138727 Но тогда страдает производительность, а если программа непроизводительная, и неэффективная, и жирная, то зачем она нужна вообще. Языки это вообще тогда не языки, а просто трансляторы в Си. Это же тупо. Получается, что кроме Си ничего нет и Си это такой же фюрер как и жс, но в мире системного по. Я не могу просто сидеть, когда хеллоу ворды сейчас буквально 10ки мб весят. Это же тупо
>>2138744 что ты несешь? мало что транслируется в си
а про производительность открою тебе истину - железо стоит дешевле времени еба сеньера c/c++, тут как бы рыночек порешал. Да и в подавляющем большинстве итшных задач веб макакинг производительность конкретно твоего кода мало че решает, главное понятный код и sql запросы нормальные пиши, тут не нужен челик, который ебет байты
>>2138744 >Языки это вообще тогда не языки, а просто трансляторы в Си. Это же тупо. Получается, что кроме Си ничего нет и Си это такой же фюрер как и жс, но в мире системного по. Metaprog, ты? Узнал тебя по шизоидной любви к си.
Есть колибри ос, традиционно помещается на дискету. А толку?
Люди не умеют писать код, для этого нужно знать всю айти область от математики до ангуляров через схемотехнику, цифровуху, ПЛИС, эмбед, оптимизацию, алгоритмы, драйвера, ос, системное по, наконец стеки протоколов и прикладные программы.
Вот такой человек сможет написать реально годную прогу, быстро и на ассемблере, потому что знает как и что устроено и может отсечь ненужные детали на всех этапах.
Но большинство не умеет писать код. Готовые решения, стандартные функции по мануалам, стандартные аргументы, стандартные подходы.
Так что ты пока очень далеко от своей цели, продолжай учиться и постигать Дзен и Дао.
Поступил в уник ездь два потока бутылки C/C++ и C# Описание обоих в кратце: ➕Поток “плюсов” Программа состоит из трех частей: 1. теория (базовая информация по алгоритмам) 2. Язык C 3. Архитектура ЭВМ и ассемблер
#️⃣Поток “шарпов” Программа состоит из двух частей: 1. Первые три модуля изучается C# 2. В 4 модуле C++ в 4 Так вот то есть по сути выбор между C + asm и потом плюсы и C# и потом плюсы(чуть меньше видимо). Я насколько понимаю первый вариант более предпочтительный так как из C вкатываться в плюсы более естественно чем из шарпов? Че выбрать?
>>2139544 вот так и думаю, шарпы с винформами/другой хуйнёй по необходимости вполне можно самому освоить, а вот низкоуровневые вещи лучше под чьим то надзором учить
>>2139020 >железо стоит дешевле времени еба сеньера c/c++, тут как бы рыночек порешал Эмм, если твой не-ёба джун посчитает скажем числа фибоначчи рекурсивно и эта процедура будет дохуя где использоваться и считать большие числа, то тебя никакое железо не спасёт, я прям сейчас могу показать насколько ощутимое время будет занимать процедура на твоём манятоповом железе. Правда это не проблема си-оптимизаций, а алгоритмическая недоработка, уровень абстракции повыше малёха, но и в мире машинных оптимизаций такого говна пруд пруди, как например разница между копированием массива построчно и постолбцово (один из способов в восемь раз медленнее другого). Всегда есть предел долбоебизму, после которого железо перестаёт спасать.
>>2139851 я говорил про основную часть задач, которые требует среднестатистический бизнес от среднестатистического программиста. свои числа фибоначчи от большого числа можешь в универе на первом курсе в качестве лабы сдать либо засунуть себе в жопу. В стандартной задаче взять откуда-то данные распарсить их и положить в другое место можно и питоном на не-еба джуне сделать. Только купи виртуалочку нормальную, а сдачу оставь джуну на тарелку риса за которую он работает.
>>2140512 Это все равно что сказать, что часы со стрелками умерли и больше не нужны, ведь есть цифровые. И потом принципиально избегать все случаи, где аналоговые и механические часы просто упоминаются. То есть ты проводишь мысленно черту через условный 2022 год, когда раст станет популярнее си для новых проектов и говоришь: я работаю только с тем что написано после 22 года. Все остальное вне моей компетенции.
>>2140518 >есть ты проводишь мысленно черту через условный 2022 год, когда раст станет популярнее си для новых проектов и говоришь: Воу, что-то ты разогнался.
если не кратко, то раст - это просто сборник каких-то идей и подходов, которые сейчас будут обкатываться, какие-то удачные уйдут на вооружение в другие языки.
под удачными я понимаю соотношение головной боли самой проблемы к головной боли от решения на расте, которое решает эту проблему. Например борроу чекер - решает UB с памятью, но ценой того что тебя в жопу ебет компилятор, какая боль страшнее? править баги с памятью, или заниматься всякой дрочью типа описывать время жизни ссылки из-за чего код превращается в какую-то вырвиглазную хуиту?
>>2141231 в tiobe 24 перед делфи кек и то это рейтинг основанный на интересе пользователей, а всяким смузиглотателям всегда нравлось поизощеренней покалупать себе эйнус, поэтому такие языки в подобных рейтингах обычно на плаву. Но по факту продакшн у него нулевой, да и не скоро появится
>>2120987 Где почитать про семафоры, пайпы, простым языком? Все что гуглил это либо абстрактная статья на вики, либо уже высокоуровневые реализации на с++ с абстракциями из стандартной либы. Ну то есть я понял, что такое семафор в целом и для чего они используются в программирование, но как они работают в ОС и для чего нужны там, непонятно. Про прерывания тоже хотелось бы почитать.
Неспешно ищу хорошего человека, который поможет c clang.. Нужен бакенд для PDP11. Собственно помощь нужна в написании этого бакэнда. За меня писать не надо, нужно подсказать как это сделать. Или кооперация.
>>2143227 Нет. Не ошибся. Вполне серьёзно. Очень логичная и простая система команд. Для изучения TableGen лучше ничего придумать невозможно. Вопрос в силе.
>>2143504 хз у меня же для любого типа массивы, а на макросах типо как дженерики. а как на функциях? void dynarray_push(void arr, void value)? и все на указателях? или как надо?
Преимущества: 1. Красивая и простая архитектура. 2. На 90-нм техпроцессе чип будет размером с блоху. 3. Батарейки от наручных часов хватит на год работы. 4. Идеальная архитектура для интернета вещей. 5. Красивая и простая система команд, чьи идеи не были подхвачены индустрией. 6. Оказал огромное влияние на язык Си.
Ничего лучше не придумаешь, чтобы научиться писать Backend для llvm.
>>2143217 >Нужен бакенд для PDP11 >>2145223 >Нет богатырей, способных описать PDP11? Как бы взять и открыть таблицу команд и написать по ней какую-нибудь фигню ничего не стоит, а вот разобраться с llvm... Теоретически это было бы интересно, но я не программист и помимо этого у меня есть другие занятия.
>>2145272 Все преимущества ни о чем. >1. Красивая и простая архитектура. Фигня, можно еще проще. >2. На 90-нм техпроцессе чип будет размером с блоху. На всякой простой фигне в любом случае память занимает большую часть площади. А на совсем простой еще и умножитель весьма большой по сравнению с остальным. >3. Батарейки от наручных часов хватит на год работы. Нет. Берем MSP430G2203IPW20 в качестве примера наследника PDP-11. Ток потребления без учета токов портов ввода/вывода заявлен 230 µA на 1 MHz. Допустим тактовая частота будет 1 МГц (это при максимальной 16 МГц). Допустим батарейка CR2032 с емкостью 200 мАч, тогда батарейки хватит на 200/(24*0,23)=36 дней. Ну а если использовать режимы пониженного потребления, то от системы команд мало что будет зависеть. >4. Идеальная архитектура для интернета вещей. Не нужно. Да и сомнительно про идеальность. >5. Красивая и простая система команд, чьи идеи не были подхвачены индустрией. А мне не нравится, в FPGA оно как-то не очень, особенно учитывая возможности блочной памяти.
>>2146234 >а вот разобраться с llvm... Вот та же беда. Дожить до пенсии и сесть за llvm. Вижу тебе не интересна PDP-11, но интересна llvm. Давай вместе разбираться?
>>1. Красивая и простая архитектура. >Фигня, можно еще проще. И красивее можно.
> На всякой простой фигне в любом случае память занимает большую часть площади. Он 16-битный. Сколько мм2 64 Кб статической памяти займёт?
>Допустим тактовая частота будет 1 МГц (это при максимальной 16 МГц) Допустим 16 МГц. Но с оборванным клоком, подключаемым по необходимости. И картина резко меняется.
>>2146274 >64 Кб статической памяти займёт? Очевидно что зависит от технологии, но однозначно больше чем "ядро" у простенького микроконтроллера. Вот например внутренности простенького микроконтроллера, у которого всего лишь 256 байт памяти. Логично ожидать что при той же технологии 64 кб займут в 256 раз больше площади, что очевидно будет больше всего остального.
>Но с оборванным клоком, подключаемым по необходимости. И картина резко меняется. И в таком случае, если не учитывать потребление в активном режиме (допустим его доля мала по сравнению с остальным), потребление в режиме "сна" толком не зависит от системы команд. В режиме standby у MSP430G2203IPW20 заявлено 0.5 μA, но нужно еще учесть потребление периферии. Так вот если микроконтроллер "бодрствует" меньше 0.1% времени, то потребление в активном режиме будет явно меньше остальных факторов и система команд тут не при чем. Ну и у MSP430 показатель 230 µA/MHz не выдающийся, например у серии EFM32TG заявлено 150 μA/MHz, а это уже простенький ARM.
>>2146234 >>Батарейки от наручных часов хватит на год работы. У меня были часы наручные, которые работали 2 года на одной тоненькой литиевой батарейке. Поэтому я тоже очень усомнился в этом утверждении.
>>2146394 >>64 Кб статической памяти займёт? >Очевидно что зависит от технологии, но однозначно больше чем "ядро" у простенького микроконтроллера. Не я начал эту войну. Пришось рыться в интернетах, дабы найти площадь 64 килобайта ОЗУ.
>>2146715 Дело не в том что хватит или нет. Как раз вероятно что хватит, только не благодаря системе команд, а из-за режимов пониженного потребления. Недостаточно просто "оборвать клок", нужно еще и включить его по внешнему сигналу, а в промежутке между этим время должно считаться каким-то счетчиком. В часах один только тактовый генератор вероятно будет потреблять больше "процессора", а еще в нормальных часах тактовый генератор должен быть не просто так, а с термокомпенсацией. В свою очередь термокомпенсация это не просто так, там и кварц специальный и отдельно отобранный и сама схема результат отдельного труда. Для примера вот генератор JSO15B1TR потребляет 1.2 мкА, что уже больше чем потребляет MSP430 в режиме standby. Скажешь это я не тот генератор притащил, а попробуй найти с меньшим потреблением. Впрочем, этого уже хватит на несколько лет работы часов на MSP430, но вовсе не благодаря системе команд. Таким образом, сказки про высокую энергоэффективность системы команд PDP-11 это чушь, оно тут не при чем. Остальные утверждения про PDP-11 тоже мимо, только о субъективной красоте системы команд не оспоришь, так как у всех разные вкусы.
>>2147187 И чем тебе та моя картинка не угодила? По моему вполне доказывает мое утверждение. И я писал только о том, что площадь 64 кБ статической памяти намного больше площади "ядра" простенького микроконтроллера/процессора. Как статьи, которые ты притащил, доказывают или опровергают это утверждение? Никак. Ладно, тогда можно рассудить иначе. Простейший триггер требует уже два транзистора, а реально 6 транзисторов на бит по твоим ссылкам, соответственно 64 кБ памяти потребует явно больше 64к×8×6=3 млн. транзисторов. Сколько транзисторов займет сам PDP-11 без всего "лишнего"? В 8080 - 4758 транзисторов, в 6502 - 3510 транзисторов, в советском клоне PDP-11 К1801ВМ1 - 16646 транзисторов, если не врут. А 64 кБ памяти потребует в 200 раз больше транзисторов чем "ядро" PDP-11. Может в памяти оно упаковано лучше, не в 200 раз же "ядро" будет "рыхлее".
>>2147265 Насчёт картинки. С тем, что статическая память занимает больше ядра процессора, я не спорил. Я лишь утверждал что техпроцессе 90 нм всё это поместится на чипе, размеров с блоху. Условно 1-2 мм2 достаточно для простого чипа.
Конкретно за PDP-11 - двухадресная система команд, интересные режимы адресации, автоинкремент/автодекрмемент. Оно конечно дико для любителей ARM.
Ладно, спорить дальше не вижу смысла. MSP 430 довольно близко к PDP-11, пойду изучать TableGen для него.
Кстати, ты чем занимаешься? Признался что не программист.
>>2147593 >С тем, что статическая память занимает больше ядра процессора, я не спорил. Я лишь утверждал что техпроцессе 90 нм всё это поместится на чипе, размеров с блоху. Условно 1-2 мм2 достаточно для простого чипа. Вот. PDP-11 тут не при чем, любой простенький процессор вместе с памятью займет примерно так же, даже 32-х разрядный.
>Оно конечно дико для любителей ARM. Им оно без разницы, они не трогают ассемблер. Если речь про микроконтроллеры, а PDP-11 тянет только на микроконтроллер, то можно любить ARM за наличие на уровне ядра JTAG+SWD (хватит одного программатора на все армы), контроллера прерываний, а также MPU и системного таймера (а это упрощает дело с операционными системами). Ну и еще много их, можно выбрать наиболее подходящий к задаче.
>Кстати, ты чем занимаешься? Какой-то ерундой в одном из московских НИИ. По большей части занимаюсь схемотехникой.
Вопрос, вероятно, больше к линуксоидам, но всё же.
Нужно работать через pty-tty пару псевдотерминалов. Предполагается, что клиент может когда угодно отключиться и подключиться.
Пару создал, имя/дескрипторы получил. Дальше жду через select поступления данных на входе мастера. Проблема в том, что если клиент подключится и затем отключится от созданного ttys'а, то select начнёт мгновенно выходит (возвращает >0), но при этом fd мастера в fd_set'е выставлен не будет. В итоге 100% нагрузка на процессор пока клиент не подключится назад. То есть, пока никто не подключался он ждать может, а после одного раза что-то там у него ломается.
При этом если я в питоне сделаю то же самое — там всё работает хорошо, select как порядочный джентельмен-таки ждёт данных. Заметил, наконец, что питоновский os.openpty() вовращает два дескриптора — и мастера, и слейва. Попробовал сделать то же самое в C и да, селект тоже стал спокойно ждать.
Код в питоне такой — https://ideone.com/JnYHTW , всё работает "хорошо" И вот на C — https://ideone.com/iISYn1 без строки 15 будут проявлятся описанные мной проблемы. С ней, вроде, работает, но не может ли это что-то испортить, данные вдруг куда-то не туда "попадут"? Понятное дело, что из slave_fd я читать никогда не буду, но мало ли? Плюс, хранить же его где-то ещё надо, чтобы закрыть потом. Или можно забить и, закрывая мастер, слейв сам закроется тоже?
Сап, аноны. Учусь на 2 курсе уника, в этом семе надо писать курсовую на C. Я вообще не знаю, какие есть возможности у этого языка. Поэтому хочу попросить помощи в выборе темы от просвещённых анонов. Заранее спасибо.
>>2150349 >Я вообще не знаю, какие есть возможности у этого языка. Никаких. Си - мультиплатформенный язык. Такм образом, возможности есть у конкретных платформ. Берешь платформу и изучаешь её возможности.
Как сделать if (числа != числа с 1 по 10)? Чтоб программа сравнивала число с рядом чисел 1-10 и если не совпадает с числами с 1 по 10 выполняло это самое if? Искал в интернетах, но мне предлагает только распечатать числа с 1-10, но мне нужно лишь записать коротко набор чисел с 1 по 10 для условия.
>>2151446 Спасибо, твой вариант чутка логичнее моего изначального. Но какого-то более короткого варианта указать набор чисел с 1 до 10 по типу 1->10 нету?
> if (число >= 1 && число <= 10) Это варождается в 4 (ЧЕТЫРЕ!!!) машинных инструкции!!! Это мало, никакме Пайтоны никогда не смогут это повторить.
>Но какого-то более короткого варианта указать набор чисел с 1 до 10 по типу 1->10 нету?
if( ((unsigned int) (i-1)) > 9 )
На х86 это три машинных инструкции, но работать будет работать быстрее, потому что один бранч вместо двух, а не потому что на одну инструкцию меньше
Если i изначально беззнаковое, то приводить к беззнаковому не нужно, если знаковое - то обязательно, иначе компилятор не поймёт чего от него хочешь.
Эх, детишки, ничего хорошего из вас не выйдет, если вы основ не понимаете. И да, я не проверял с компилятором - если ошибся, то сс компилятором в руках бы стразу это увидел и поправил.
>>2151986 >указатель на число и массив - суть одно и то же >массив указателей - массив массивов >т.е. двумерный массив >т.е. двумерный массив Пиздабольство. int array[][] и int* array[] - разные вещи. Ведут себя схоже, но компилятор их по-разному рассматривает.
Как же заебал этот ебучий си везде и всюду, почему сука нельзя писать библиотеке на с++, вот например тот ффмпег, чтобы разобраться в этом говноси апи, нужно потратить сука неделю другую непрерывного ебания себя в жопу говносишкой.
мимо С++ боярин
Алсо, раньше тоже писал на си и думал это круто, когда был молодой.
>>2151984 >никакме Пайтоны никогда не смогут это повторить. М-метапрограммирование. На любом языке можно сгенерить твои три байта, дед. Чекни litex проект https://github.com/enjoy-digital/litex где на питоне генерируют верилог.
>Ряяя неэффективно это же Пайтон!!!!! ДОЛБОЕБ!1111 Повторяю для танкистов, python - это генератор. Ты же gcc не добавляешь в каждый проект, чтобы запустить его? Вот и пайтон нужен только на компе. А качество кода по прежнему зависит только от тебя.
>>2152224 Ты путаешь байты и машинные инструкции. Вот когда на Пайтоне сможешь показать подобное, как на картинке, тогда приходи. А то, что теоретически возможно, а на практике не существует, то и смысла не имеет.
> Чекни litex проект https://github.com/enjoy-digital/litex Чекнул. Нуууууу такое. Штука чтобы скомпоновать готовые корки. Просто более высокий уровень абстракции. Ничего серьёзного он не умеет.
>>2152741 >Он чекнул! и вынес экспертное мнение >Поясняет человеку который написал на нем несколько ip ядер, что все это несерьёзно Ой иди нахуй. Когда уже вайти придут профессионалы и вытеснят казуалов.
>>2152951 Резко разбежался, сделал реверанс, и выложил какой-то непонятной хуйне свои наработки, чтобы не дай бог она не подумала что я пизжу.
Да ради бога, можешь думать что я пиздабол. Скатертью дорога, твой долбоебизм исправлять и еще твою пацанскую риторику слушать? Сам ебись. Квота на вежливость исчерпана, соси баранку.
>>2153244 Тебе, пиздаболу, достаточно было показать как этот тул генерит always@(posedge i_clk or posedge i_rst) и его внутреннисти на простейшем примере, и твой оппонент сдулся бы и промолчал.
Что? Не умеет? Тогда нахуй идёшь ты. Но ещё не поздно доказать что умеет, если умеет.
>>2153367 Ну конечно, главное же давануть, а не разобраться. Ну ты к нему обращайся в следующий раз, он норм чёткий пацан все пояснит по факту. А таких как я опущей надо со двача гнать нахуй вообще. Никакой пользы один пиздеж. Вон тот чёткий пацан сразу раскусил пиздабола, поставил на место. Теперь у него срака гореть будет полтреда.
>>2153461 >твой оппонент сдулся бы и промолчал. Хоть раз такое было? Ты хоть раз признавал свою неправоту и забирал все свои оскорбления назад? Вот садись теперь и сам гугли, понятийный петушок, если тебе интересно, а я пиздабол, мне верить нельзя! Меня тут конкретно приложили и поделом! Норм пацаны таких не любят. Норм пацаны должны друг с другом перетереть нормально такие вопросики и решить четенька, а опущи не нужны.
>как этот тул генерит Молча генерит, когда нужно, ведь это типичный бойлер.
В общем главное мы выяснили - я пиздабол, а ты пацан чёткий. Всем спасибо, всем удачи. Я должен съебать с треда, что я и сделаю.
И пусть такой опус не вызовет ни у кого подозрение, что проект годнота, которую я пытаюсь скрыть. Нет, проект говно. Не гуглить.
>>2153521 Я одного не пойму - у тебя осеннее обострение или очередной непризнанный гений? Или и то, и другое?
Чем опусы строчить, показал бы два скриншота - реализацию простейшего счётчика или дешифратора на Питоне и сгенерённый тулом код на Верилоге. Всё! Вопросы сразу отпали бы. А кто-нибудь может быть заинтересовался бы. И ушёл бы ты довольный и важный. Но вместо этого нервничаешь и топаешь ногами. Зачем так жить?
Так-то есть и C-to-Verilog конверторы, а толку? Вот тебе - https://github.com/sabbaghm/c-ll-verilog Обрати внимание на вот это замечание: Only combinational logic with data modeling Verilog style is supported (no registers and clock)
Ну так что там с регистрами и клоками у "твоего" litex?
>>2153880 Ты просто хочешь уломать меня все тебе разжевать, раз на понт не удалось взять, чтобы потом снова "обосрать". Соси баранку.
Ситуация сейчас такая: Я один владею информацией (пока что). Я представляю одну сторону. Ты и тот анон представляете вторую сторону, которая враждебна ко мне.
Таким образом ты не имеешь права что-либо у меня просить, ты и не просишь, а включаешь разводки. Очевидно, тебе не похуй на информацию, которой я владею, хоть она и общедоступна. Вот ты и начинаешь вертеться.
Так что мой ответ прост: гугли, изучай и расскажи всему треду о прекрасном мире метапрогинга
А у меня по ходу уже теневой бан за офтоп, тред пришлось искать поиском, хотя до бамплимита далёко.
>Я одного не пойму Перевод темы. Напоминаю, что я уже пошел нахуй и пиздабол. Не общайся с пиздаболом. >- у тебя осеннее обострение или очередной непризнанный гений? Или и то, и другое? Сделал реверанс, и побежал опровергать. Ты понятия не имеешь о том, кто такие гении, и если уж Литекс гениальный, то гении французы которые его придумали, а не я. > Всё! Вопросы сразу отпали бы. Изначально я доказал, что любой язык может сгенерировать любой код. Как видишь, вопросы не только не отпали, но я стал изгоем.
>А кто-нибудь может быть заинтересовался бы. И ушёл бы ты довольный и важный. Но вместо этого нервничаешь и топаешь ногами. Зачем так жить? Ахахха, клоун изображает товарища, давит на справедливость, живёт только ради денег и думает что понял жизнь. Довольным и важным хочешь быть ты >>2153461 поэтому ты и занял сейчас высокую моральную позицию а мне изначально плевать на ваше отношение ко мне. Ты пытаешься продать мне свое одобрение в обмен на мою информацию. Но видишь ли, срал я на твое одобрение. Почему? Ну ты же сам выбрал ты сторону, а меня поставил в изгои всего двача. Сделка срывается. Моральный авторитет из ауешника так себе.
>Так-то есть и C-to-Verilog конверторы, а толку? Мда, ты прав, прав. Я же не спорю с тобой. Я уже признал что я пиздабол.
>Ну так что с регистрами и клоками Как же ты изворачиваешься, даже "твоего" взял в кавычки чтобы заставить меня оправдываться. Ну давай пооправдываюсь.. Так он не мой, я вообще ни разу не претендую. Это ты все на себя одеяло тянешь, я даже не претендую на истину. Да, я понимаю как изнутри он работает, но он ни разу не мой.
Кабаны, вам придется сменить интонации чтобы получать годноту на форумах, мир меняется. Ваш гоп-стоп стиль общения уже не будет работать.И вы перестанете получать бабло, ради которого живёте.
@ Заходишь в Си тред с предвкушением обсуждения кусков кода вкатышей, джоуков от видавших ram-порно олдов
@ Видишь как новый-питонский поясняет за высокоуровневость Си
@ С улыбкой глотаешь чай и листаешь дальше
@ Познавшие Си-дзен мужики дают отпор набежавшим с змеиного треда порриджам с такой мощью что выстраивают из ячеек стека лестницу к богу
@ Довольно урча пододвигаешь свой старенький Thinkpad поближе и видишь что питонисты уже собрали все абстракции с питона и стреляют ими в щиты Си воинов.
@ Пока сие снаряды летели к цели Си бойцы уже адресовали свои "ячейки памяти" прямо в змеиное дупло
А всё потому что порриджи не могут в холодное оружие а дерутся дилдаками и доказывают что дилдаки режут лучше клинка "
>>2154940 >Syntax: >ClassName ObjectName; >>2154946 Ну да, я действительно высрал код на крестах, щито поделать. >этот прав Лев. >аже если брать этот пример, то это далеко далеко явно не решающий фактор Ну был бы это единственный пример, я бы конечно согласился. Ты просил именно пример привести, ты не просил на сто страниц начинать рассказ про всё-всё-всё, это ты и сам можешь погуглить, если не можешь в кресты, а если можешь то ты ещё красочнее меня про всю эту пиздаболию расскажешь.
>>2154959 Так я то на крестах уже давно пишу, и то что ты привел даже за пример нельзя рассматривать. Просто си - это реально устаревшая, небезопасная, хуита, которая должна быть заменена либо на С++ либо на раст, максимум для чего может использоваться си это объявление интерфейсов к либам, которые прямо требуют совместимости с си или импорты в другие яп ( и то это тоже не безопасно ). Но как язык, сам по себе си - кусок говна, где даже адекватных стандартизированных контейнеров еще не завезли и не завезут. Как вообще можно расценивать язык где ты работаешь с голой памятью, и довольно слабой типизацией, где нету дженириков, и где чтобы даже написать какой-то общий объектно-подобный код напирмер контейнер аля std::vector ты этого не можеш сделать и тебе приходится приводить типы в void* чтобы хранить как-то указатели на структуры. Короче хуита полная. По скорости С++ не уступает Си, а в некоторых моментах даже превосходит ее из-за лучшей оптимизации, вместо кривых васяподелок имитирующих кострукции из нормальных языков.
>>2154980 Я не говорил будто си это новая хуита, но кресты вообще нихуя не лучше если именно с си сравнивать, там все детские болезни сишки на месте, плюс свои. Дальше не читал.
И больше у меня никаких примеров для тебя не будет, если ты как говоришь давно на крестах пишешь то либо ты понимаешь какое говно ешь, либо ты травмирован крестами так что никакими примерами с тобой не совладать. Так-то у приведённого примера есть далеко идущие последствия, о которых ты должен бы знать, но о которых я уже забесплатно рассказывать не буду.
>>2155029 Да ты просто С++ не знаешь вообще, раз так считаешь. Приведи пример какие это там детские болезни из си? С++ и Си это два разных языка уже давно, которые не совместимы друг с другом.
>>2155031 Лол, так кресты я не говорю что кресты идеал, но по крайней мере за последние годы они сильно улучшились и работа по их улучшению постоянно ведется, в отличие от богом забытого говно си, который нахуй ни кому не нужен и лучшее, что случалось с си это появление С++. Но сравнивать си с с++ это либо надо быть полным нубом и в том и в другом, либо полным идиотом.
>>2155049 Ты еблан? Че за хуйню ты несешь? Ты мне тут затираешь что си лучше с++, я спрашиваю чем, ты по факту не можешь ответить и все что от тебя я слышу это "бэ-мэ эмм кхмм эээ" вот и все. Ты просто лох, который ни си не знает, ни с++ и все чем можешь ты оперировать - это твои иллюзии основанные на чужом мнении.
>>2155045 Что не улучшилось как это концепт — кресты были и остаются маркетинговым буллщитом, пытающимся сидеть на двух стульях — у нас с одной стороны типа ооп, с другой стороны язык типа как для неуправляемого окружения. В итоге у нас нет инкапсуляции как в компайл- так и в рантайме, т.е. нет ооп, но для неуправляемого окружения наш язык сложен и переполнен ненужным нерабочим дерьмом. Сишный код хотя бы реально дебажить. Можно писать на крестах как на си, используя по минимуму возможности крестов, тогда будет получаться что-то рабочее. Собственно это и делается в геймдеве, где неоднократно признавались что пишут си-стайл код, но как бы формально проект на крестах, чтобы разрабов было проще найти.
>>2155053 Мань, я по факту привёл тебе пример, и всё что ты нашлась высрать в ответ это "мм ну это нищитово это хуйня пример мне он не нравиться". Никто к тебе, собаке с гонором, не подряжался учить тебя всему на свете, тебя подрядились обоссать и обоссали. Ты мне лучше расскажи, каким именно ты образом определяешь бегло глядя на код, чем именно является НИГГА, чтобы понять что именно за синтаксическое недоразумение перед тобой? Как только ты начнёшь отвечать на этот вопрос, ты выудишь ещё пачку СЛОЖНОСТЕЙ языка, и одну широко известную не пофикшенную с сишки детскую болезнь, которую уже давно победили везде кроме си- и крестоговна. Назовёшь какую — с тобой будет разговор.
>>2155054 Ты хоть сам понял, что сказал? Что за неуправляемое окружение? С хуяли нет инкапсуляции? Ты о чем? Что тебе мешает дебажить с++ код?
>Можно писать на крестах как на си, используя по минимуму возможности крестов, тогда будет получаться что-то рабочее. Тогда будет точно такое же говно аля си с классами. Никто так уже давно не пишет с появлением новых стандартов.
>Собственно это и делается в геймдеве, где неоднократно признавались что пишут си-стайл код, но как бы формально проект на крестах, чтобы разрабов было проще найти Лол, ты хоть раз открывал исходники анрила?
>>2155056 Ты че несешь, шизло? Что ты по факту привел? Нихуя. Ты нулина не знающая ни си ни с++, лучше нахуй съеби от сюда учить уроки или чем ты там занимаешься, в пятерочке кассиром работаешь и мечтаешь о вкате в айти? Это тебя тут я обоссал, недоносок сопливый.
>НИГГА Ясно, и этому школьнику я еще что-то отвечаю, просто нахуй послан, тиктокерский выблядок.
>>2155059 Да, я понял, что сказал. А ты, судя по всему — нихуя. Ещё раз, для терминальных дегенератов — я не буду бесплатно объяснять почему 2+2 это четыре, а не пять. >огда будет точно такое же говно аля си с классами. Понятное дело, но это будет работать, а "по новым стандартам" превратится в помойное легаси ещё до того, как будет дописано. >Лол, ты хоть раз открывал исходники анрила? Нет, и что бы мне это дало? Ах да, в мире же нет ничего, кроме одобренного лично тобой. Дальше уже вообще какое-то каканье ртом, не на что отвечать, научись мысли оформлять в предложения.
>>2155064 >Да, я понял, что сказал. Конечно, твой делирий ясен только тебе.
>я не буду бесплатно пук среньк я просто нулина не могущая ничего доказать и привести какие либо аргументы т.к. мне 15 лет и я тупорылый школьник выебовающийся на форумах, против взрослых опытных разработчиков.
>Понятное дело, но это будет работать, а "по новым стандартам" превратится в помойное легаси ещё до того, как будет дописано. Хуйню не неси, урод интеллектуальный.
>Нет, и что бы мне это дало? Ах да, в мире же нет ничего, кроме одобренного лично тобой. Дальше уже вообще какое-то каканье ртом, не на что отвечать, научись мысли оформлять в предложения. Ставит под сомнение всемирно признанный топовый игровой движок на острие технологий. Конечно, ты не читал, тебе бы это нихуя не дало, потому что ты бы нихуя не понял, потому что ты нулина ебаная, которую я тут обоссал с ног до головы и лучше бы тебе перестать мне отвечать во избежание дальнейших унижений и траты моего времени на бессмысленные разговоры с анскильным дауном не знающим хоть малейшей матчасти того, о чем он спорит.
>>2155070 Ага, уже читаю, чекай. Если я в первых строках не вижу объяснения как ты будешь понимать чем является НИГГА в первоначальном примере — я не вижу от тебя конструктива, соответственно не ощущаю в себе желания с тобой дискутировать. Сначала объясняешь, как выясняешь чем является выражение внутри скобок AAAAA BBBB(CCC); , далее с тобой может вестись какой-то разговор, в противном случае ты либо вообще не понимаешь о чём речь, и в этом случае ты не нужен, либо понимаешь и знаешь куда это тебя заведёт, и боишься обосраться потому что ты крутой и пришёл всем всё доказывать, а не узнавать новое, и в этом случае ты не нужен вдвойне. Чем является CCC, опиши алгоритм как это узнать, время пошло.
>>2155059 > С хуяли нет инкапсуляции? Когда ты меняешь код в приватном члене класса, приводит ли это к необходимости перекомпиляции всех, кто этот класс использует, ответ либо да либо нет.
>>2155116 Ты схуяли, дух анскильный, со мной в таком тоне разговариваешь? Это ты там за монитором такой смелый? Попробуй ебани что-нибудь подобное на реальном собесе по с++, если тебя оттуда ссаными тряпками сразу не прогонят, хотя бы посмеются. Хотя ты даже первоначальный отбор не пройдешь, чтобы тебя туда вызвали...
Ладно, я с тобой разговор уже закончил и тем более не буду отвечать на твои жалкие тупорылые примеры из учебников уровня beginner по с++98, тем более которые уже потеряли актуальность лет 10 назад.
Долбоеб, пойми, что си язык которому уже хуева туча лет, который создавался в другие времена, когда твой дед за пару килобайт памяти в жопу давал, и что тогда были совершенно другие возможности и требования да и языки особо не умели проектировать и это было реально лучше альтернативой, чем ебашить на фортране или ассемблере, с тех пор времена изменились и те ебучие метода и конструкции, что были в си уже сейчас в современном мире не нужны ни в какой сфере, все пытаются избавиться от си, потому что понимают что это устаревшее очень небезопасное говно, на котором стабильнй софт сделать довольно трудно. Даже в ядро линукс уже сейчас раст внедряют. Никто из адекватных людей не считает си пиздатым языком. Единственный верный шаг по искоренению этого говна из мира разработки по, был создание с++, который медленно из надстройки над си перерос в совершенно другой язык, из которого постепенно выкидывали этот ебучий мусор си наследия, и до сих пор продолжают этим заниматься, потому что невозможно было моментальной перейти на что-то другое, когда существует огромнейшая база кода написанного на си. Постепенно все это легаси дерьмище переписывают на нормальные языки, но лишь бы избавиться от злоебучего си. Да ты хоть открой рынок вакансий разработчика на чистом си вообще не найти, единственная работа оставшаяся на си это поддержание\перепиливание легаси говна на нем. Все давно уже пишется на С++, драйвера, ядра ОС, критические компоненты систем различных систем, HFT, автомобильная промышленность. Просто преимущество с++ в том что ты не платишь за то что не используешь, но в то же время имеешь скорость сравнимую с нативной к железу, такую же как на си, только код получается в разы более безопасным при условии использования концепций С++ типа RAII. Вот и все. И как бы ты не тужился, как бы ты не хотел, как бы у тебя не свербило в жопе от этого, си как был говном по современным меркам так им и останется. Так что сейчас предлагаю тебе просто пойти нахуй и больше не возникать тут.
>>2155183 Скрыто с первых слов. Учись в коммуникацию. Если я в первых строках не вижу объяснения как ты будешь понимать чем является НИГГА в первоначальном примере — я не вижу от тебя конструктива, соответственно не ощущаю в себе желания с тобой дискутировать. Сначала объясняешь, как выясняешь чем является выражение внутри скобок AAAAA BBBB(CCC); , далее с тобой может вестись какой-то разговор, в противном случае ты либо вообще не понимаешь о чём речь, и в этом случае ты не нужен, либо понимаешь и знаешь куда это тебя заведёт, и боишься обосраться потому что ты крутой и пришёл всем всё доказывать, а не узнавать новое, и в этом случае ты не нужен вдвойне. Чем является CCC, опиши алгоритм как это узнать, время пошло.
>>2154980 >Как вообще можно расценивать язык где ты работаешь с голой памятью, и довольно слабой типизацией, где нету дженириков, и где чтобы даже написать какой-то общий объектно-подобный код напирмер контейнер аля std::vector ты этого не можеш сделать и тебе приходится приводить типы в void* чтобы хранить как-то указатели на структуры. >Короче хуита полная.
В голанге дженериков тоже нет, ну и что с того? Всякие поделия для клауд инфраструктуры на нем отлично заходят. Все остальное в какой-то мере связано с тем, что Си - это доисторическая древность, его проектировали таким образом, чтобы получился язык пригодный для системного программирования и чтобы компилятор Си можно было очень быстро написать для любой архитектуры тех времен. Тогда из других языков был фортран, кобол и ассемблер, первые два для системного программирования не шибко годились, поэтому компиляторы деды писали на асме. Вот и подумай, каких усилий бы стоило им включить в язык дженерики? Ты бы еще начал жаловаться на то, что в начале 70-х деды не додумались до того, чтобы написать борроу-чекер. В те времена на безопасность было всем тотально похуй, лишь бы работало кое-как и жрало относительно мало ресурсов, которые были на вес золота.
>>2155314 Омега-униженец, ты еще тут? Я думал уже ты совершил героический самовыпил и очистил этот мир от своих наивных шизоидных фантазий о языках программирования. Нет, же ты все просишь еще мочи себе лицо, снова и снова. Как только у тебя хватает терпения, выносить такое обращение к себе? Наверное ты какой-то мазохист извращенец который любит себе дергать анус и когда его макают в говно. Пойми, ты просто тупая бездарность, которая никогда никем не станет и твой максимум это сидеть в этих тредах и кидаться чужим мнением без какого либо понимания сути, я это понял, кто ты только начал открывать свой рот и откуда стал выливаться этот бессмысленный шизойдный бред тупорылого школьника с синдромом дефицита внимания. Ты же просто больное животное, которое возможно еще и опасно для общества, я бы на месте твоих родителей вообще бы усыпил тебя, от греха подальше, чтобы не убил случаем никого, хотя ты скорее всего такое омежъе чмо, что в реальности вряд ли тебе хватает смелости даже открывать свой рот и отрывать взгляд от пола, лол. Просто обдаю твою тупую физиономию измазанную в говне за все эти посты еще мощной струей своей мочи и пойду открою себе пива, а потом выебу свою топ тян, пока ты будешь с дрожащими руками набивать мне свой жалкий ответ, на то что тебе все равно, про свои бредовые ААА ССС БББ и прочий твой шизойдный бред который мне абсолютно не интересен. Просто почувствуй разницу: я сеньор на высокооплачиваемой работе, а ты жалкий безработный анскил над которым я глумлюсь убивая пару мин своего свободного времени, в перерыве между важными делами. Харьк тфу на тебя, животное))
>>2155330 В голанге есть интерфейсы и какое-то подобие системы типов + сборщик мусора, а вообще голанг же для даунов макак. Так что похуй что там есть, язык то тоже говно, но хотя бы безопасное, в отличие от си.
>Тогда из других языков был фортран, кобол и ассемблер, первые два для системного программирования не шибко годились, поэтому компиляторы деды писали на асме. Вот и подумай, каких усилий бы стоило им включить в язык дженерики? Ты бы еще начал жаловаться на то, что в начале 70-х деды не додумались до того, чтобы написать борроу-чекер. Так я про это и говорю, что си в свое время был да, заебись, но это было-то в каком году. Сейчас по современным меркам си говно от которого надо избавляться как можно быстрее. А восхвалять сейчас си это все равно, что орать вот раньше жигули были какие пиздатые не то что сейчас ваши мерседесы амг со стартер-генераторами напичканные электроникой.
>В те времена на безопасность было всем тотально похуй, лишь бы работало кое-как и жрало относительно мало ресурсов, которые были на вес золота. Вот и я об этом.
А вообще про голанг.
>golang > Я только сегодня понял, что почти никто толком-то и не понимает, зачем вообще Go нужен. Если коротко, то Go нужен для того, чтобы проектировать robust software. Я не знаю, как правильно перевести это слово на русский, но это скорее всего что-то вроде «надежный». Так вот, Go сделали, потому что гуглу нужен был инструмент для написания надежного кода. На самом деле не сколько гуглу, сколько Робу Пайку, который последние две декады, как минумум, одержим идеей сделать сишку с каналами и зелеными потоками. Так получилось, что Роб Пайк попал в нормальную компашку с другими штрихами из Bell Labs, крутейшим Russ Cox, Фицпатриком и т.д. Этим ребятам несложно было убедить гугл, что им нужен новый язык и вобщем-то, бабосики они на него выбили.
> Так, это было небольшое лирическое отступление, давайте вернемся к теме. Да, зачем же все-таки гуглу был нужен новый язык? Ну, тут все понятно, давайте послушаем слова самого Роба Пайка:
> Фишка в том, что наши программисты гуглеры, а не ученые. Это обычно молодые, только выпустившиеся пацаны, которые возможно выучили Java, возможно даже C/C++ и может быть Python. Они не в состоянии понимать пробздетый язык, но мы все равно хотим, чтобы они делали хороший софт. Таким образом, мы даем им легкопонимаемый язык, к которому они быстро привыкнут.
> А теперь давайте попытаемся понять, что же он имел ввиду. Если грубо говоря, то он сказал, что в гугле работают не самые умные ребята («не способные понимать крутой язык»), так что они придумали такой язык, который просто невозможно не понять. Это на самом деле очень круто для менеджмента. Посудите: можно нанять 100 посредственных программистов, дать им в руки Go и эта армия обезьян будет генерить вам много «неплохого» и очень даже поддерживаемого кода! Go это фантастический инструмент для менеджмента, лучше не придумать: моментально загоняем всех программистов в рамки go-fmt (никто не сможет пропихнуть свой стиль форматирования), забираем у них любые абстракции сложнее интерфейса и получается такой конвеер кода, в котором developer is just another brick in the wall. По-моему, очень круто! Ну, программистам скорее всего такой расклад не очень понравится — мало кто любит быть винтиком в системе.
>>2154980 >Как вообще можно расценивать язык где ты работаешь с голой памятью Самое смешное что в крестах ты точно так же работаешь с голой памятью, ровно с момента как в твоей программе появляется баг. Всё, вася, нет тут больше твоих объектиков сраных, потому что кресты это язык для стрельбы в ногу, такой же как си, но только себя таковым в силу субъективных причин не считающий. Любой указатель в любой точке кода в любой момент позволяет взять и переписать любой участок твоей говнопрограммы, хоть всю её дерьмом залить, и ебал он в рот твои прайваты, и удачи тебе, когда ты писал объектики, но дебажишь ОПЕРАТИВНУЮ ПАМЯТЬ перемешанную с говном. Это тебе не джавы с питонами, где рантайм физически не позволит программе залезть и поменять приватный член класса, это кресты это хардкор, это не для слабых. >где нету дженириков А какие дженерики есть в крестах? Кривые и убогие. Они не являются кодом (но при этом они разворачиваются только во время компиляции и никогда иначе), они перекомпилируются по 100500 раз потому что в крестах, как и в си, нет возможности находить местоположение кода по его имени и т. д. и т. п. В си, как и в крестах, есть макросы, поэтому говорить об отсутствии метапрограммирования в си просто смешно.
>>2155378 Скрыто с первых слов. Учись в коммуникацию. Если я в первых строках не вижу объяснения как ты будешь понимать чем является НИГГА в первоначальном примере — я не вижу от тебя конструктива, соответственно не ощущаю в себе желания с тобой дискутировать. Сначала объясняешь, как выясняешь чем является выражение внутри скобок AAAAA BBBB(CCC); , далее с тобой может вестись какой-то разговор, в противном случае ты либо вообще не понимаешь о чём речь, и в этом случае ты не нужен, либо понимаешь и знаешь куда это тебя заведёт, и боишься обосраться потому что ты крутой и пришёл всем всё доказывать, а не узнавать новое, и в этом случае ты не нужен вдвойне. Чем является CCC, опиши алгоритм как это узнать, время пошло.
>>2155398 >крестах ты точно так же работаешь с голой памятью, ровно с момента как в твоей программе появляется баг. Если ты криворукий уебок пишущий на си с классами то да, а если нормальный пацан, пишущий на с++ то нет.
>Любой указатель в любой точке кода в любой момент позволяет взять и переписать любой участок твоей говнопрограммы Такое исключено но этапе компиляции, если ты работаешь с типами, а не с голой памятью.
>А какие дженерики есть в крестах? Очень мощные, называется метапрограммирование.
>разворачиваются только во время компиляции Да и предотвращают большинство ошибок еще на этапе компиляции. Круто же.
>они перекомпилируются по 100500 раз Они инстанцируются один раз под каждый использованный в них тип.
>В си, как и в крестах, есть макросы >метапрограммирования Лол, макросы это не метапрограммирование, это текстовый препроцессор, и сравнивать их просто смешно. И в С++ от этого говна постепенно избавляются.
>>2155399 >МАААААМ СКОЖИ ЕМУ МААААМ Я НЕ ДАУН >ВЫБЕРУ СТРАТЕГИЮ ТУПОГО РЕФОРСА СООБЩЕНИЙ.
>>2155415 Скрыто с первых слов. Учись в коммуникацию. Если я в первых строках не вижу объяснения как ты будешь понимать чем является НИГГА в первоначальном примере — я не вижу от тебя конструктива, соответственно не ощущаю в себе желания с тобой дискутировать. Сначала объясняешь, как выясняешь чем является выражение внутри скобок AAAAA BBBB(CCC); , далее с тобой может вестись какой-то разговор, в противном случае ты либо вообще не понимаешь о чём речь, и в этом случае ты не нужен, либо понимаешь и знаешь куда это тебя заведёт, и боишься обосраться потому что ты крутой и пришёл всем всё доказывать, а не узнавать новое, и в этом случае ты не нужен вдвойне. Чем является CCC, опиши алгоритм как это узнать, время пошло.
>>2155116 Я тут мимо проходил, но что-то странный вопрос какой-то. >Чем является CCC, опиши алгоритм как это узнать, время пошло. очевидно, нужно всего лишь нажать # (?\<word\>) и увидил, откуда этот CCC пришёл. Ну, то есть, прочитать ранее идущий код, как ещё-то можно что-то узнать? Либо посмотреть, что такое BBB и что принимает на вход. Или что ты услышать тут вообще хочешь?
>>2155429 На сколько я понял из его шизойдного делирия, он имеет ввиду типа чем является такое выражение: объявлением функции или инстанцированием объекта, в некоторых случаях компилятор это может не понять, чем из этих двух является такое выражение и вываливает ошибку, но ему уже десять раз тут сказали что в С++ давно уже пишут для объектов TYPE NAME{ARG} для объектов. Но этот даун видимо недавно прочитал кусок от десятилетней книжки Майерса где он разбирал такой пример и теперь козыряет своим единственным аргументом который он знает.
>>2155378 >Омега-униженец, ты еще тут? Я думал уже ты совершил героический самовыпил и очистил этот мир от своих наивных шизоидных фантазий о языках программирования. Нет, же ты все просишь еще мочи себе лицо, снова и снова. Как только у тебя хватает терпения, выносить такое обращение к себе? Наверное ты какой-то мазохист извращенец который любит себе дергать анус и когда его макают в говно. >Пойми, ты просто тупая бездарность, которая никогда никем не станет и твой максимум это сидеть в этих тредах и кидаться чужим мнением без какого либо понимания сути, я это понял, кто ты только начал открывать свой рот и откуда стал выливаться этот бессмысленный шизойдный бред тупорылого школьника с синдромом дефицита внимания. Ты же просто больное животное, которое возможно еще и опасно для общества, я бы на месте твоих родителей вообще бы усыпил тебя, от греха подальше, чтобы не убил случаем никого, хотя ты скорее всего такое омежъе чмо, что в реальности вряд ли тебе хватает смелости даже открывать свой рот и отрывать взгляд от пола, лол. >Просто обдаю твою тупую физиономию измазанную в говне за все эти посты еще мощной струей своей мочи и пойду открою себе пива, а потом выебу свою топ тян, пока ты будешь с дрожащими руками набивать мне свой жалкий ответ, на то что тебе все равно, про свои бредовые ААА ССС БББ и прочий твой шизойдный бред который мне абсолютно не интересен. >Просто почувствуй разницу: я сеньор на высокооплачиваемой работе, а ты жалкий безработный анскил над которым я глумлюсь убивая пару мин своего свободного времени, в перерыве между важными делами. Харьк тфу на тебя, животное))
>>2155467 >>2155444 >>2155429 Скрыто с первых слов. Учись в коммуникацию. Если я в первых строках не вижу объяснения как ты будешь понимать чем является НИГГА в первоначальном примере — я не вижу от тебя конструктива, соответственно не ощущаю в себе желания с тобой дискутировать. Сначала объясняешь, как выясняешь чем является выражение внутри скобок AAAAA BBBB(CCC); , далее с тобой может вестись какой-то разговор, в противном случае ты либо вообще не понимаешь о чём речь, и в этом случае ты не нужен, либо понимаешь и знаешь куда это тебя заведёт, и боишься обосраться потому что ты крутой и пришёл всем всё доказывать, а не узнавать новое, и в этом случае ты не нужен вдвойне. Чем является CCC, опиши алгоритм как это узнать, время пошло.
>>2155444 Скрыто с первых слов. Учись в коммуникацию. Если я в первых строках не вижу объяснения как ты будешь понимать чем является НИГГА в первоначальном примере — я не вижу от тебя конструктива, соответственно не ощущаю в себе желания с тобой дискутировать. Сначала объясняешь, как выясняешь чем является выражение внутри скобок AAAAA BBBB(CCC); , далее с тобой может вестись какой-то разговор, в противном случае ты либо вообще не понимаешь о чём речь, и в этом случае ты не нужен, либо понимаешь и знаешь куда это тебя заведёт, и боишься обосраться потому что ты крутой и пришёл всем всё доказывать, а не узнавать новое, и в этом случае ты не нужен вдвойне. Чем является CCC, опиши алгоритм как это узнать, время пошло.
>>2155429 Речь о том, что ответ на этот вопрос вскрывает убогость крестов (и сишки, раз на то пошло, но сейчас речь о говнокрестах, которые в перформанс задачах сосут у си, которая в 100 раз проще а недостатков столько же, если не меньше, а в неперформанс задачах у любого динамического языка). Как узнать, чем является ССС, чтобы понять в итоге, что же за конструкция перед нами описана? Надо найти, где он объявлен. Как это выглядит в НОРМАЛЬНЫХ языках? В нормальных языках есть понятие модулей: нам нужно найти модуль, в котором определён ССС. Это либо тот же самый модуль (и тогда его надо скомпилить один раз), либо это какой-то другой модуль и ССС там объявлен как экспортный, и тогда тот модуль тоже надо скомпилить. Всё. Так это происходит в нормальных языках. Что же происходит в топовых-на-острие-прогресса крестах? Ну а в крестах у нас нет модулей, у нас есть препроцессор родом прямиком из си, который копипастит текст файлов прямо в наш компилящийся файл. Результатом этого является то, что каждый файл в нашей программе нужно скомпилировать столько раз, сколько раз он был включён в другие файлы. Что-то подобное я хотел услышать, но блядина никогда этого не скажет, она будет жрать говно и нахваливать.
>>2155658 Униженный шизофреник, ты все прододжаешь сглатывать мочу и просишь добавки? Во-первых, ты больное животное, сначала научись формировать свои шизойдные мысли в нормальные предложения, прежде чем писать сюда что-то. Этот сумбур из маняфантазий шизофреника просто читать невозможно. Во-вторых. > крестах у нас нет модулей Опять же ты сосешь, как жалкая дешевая шлюха, которую ебут таджики за пачку ролтона. https://en.cppreference.com/w/cpp/language/modules А все почему? Да потому, что, как я и раньше сказал, ты ничтожество не знающее ни си ни с++.
>которые в перформанс задачах сосут у си Манюничка, опять твой наивный девичий мир фантазий. Пруфы в студию.
>которая в 100 раз проще а недостатков столько же Ухх бляяя манюня опять выдает желаемое за действительное.
>а в неперформанс задачах у любого динамического языка Просто орнул с этого.
Выебаная в жопу макака, перестань уже унижаться и просто заткни свой вонючий рот, полный говна, пока туда еще кто-нибудь не насрал, лол.
>>2155659 Да, никто не будет называть переменную int, char или Class. А если назовет, то уверен, что компилятор заорет, хотя бы варнингом, не проверял если честно, так как не встречался никогда с таким и даже мыслей не было о подобном изврате.
А чего вы тут срётесь с С++-шизиком? Вот когда рантайм крестовый с модулями, контейнерами и дженериками будет влезать в 10 кбайт, то тогда и поговорим с ним о необходимости Си.
>>2156177 Лол, мань, если ты микроконтрелер шизик, то можешь не подрубать stdlib и писать без шаблонов, всяко будет лучше чем на говноси. Тем более >10кб Вспомнил времена когда твой дед в жопу за 10 килобайт давал.
Ну и какой мудак забыл закрыть дверь в подъезд? Проник с++ бомж чтобы погреться, завонял весь падик. Теперь сами и выгоняйте эту мразь, и проветрить не забудьте
Я начинал с плюсов. Первое неудобство при переходе на си было отсутствие new и delete[], а также отсутствие горячо любимых компонентов библиотеки vcl и обвязки из борландской среды. Зато можно хватать байты голыми руками за минимальную себестоимость. )
>>2156879 А точно; конструктор, деструктор... :'-(
А как там со всем этим в языке ДИ? Кстати интересно, что поначалу я допускал ошибку инициализации переменных. int a, b; Я считал, что создаю 2 указателя, а не 1. Однако с удивлением обнаружил только что, что в ДИ такая конструкция делает именно то, что я интуитивно предполагал ранее.
С того времени я в СИ пишу иначе. int a, *b; Так логичнее. Однако такое написание можно встретить не всегда.
>>2132120 >Дишка лучше крестов, ржавого и говняшки. У меня проект с разделяемой памятью, сигналами реального времени, возможно многопоточностью и внушительным препроцессором. Это всё поднимаемо на ДИ? Если учесть, что написаны только наброски на СИ, стоит ли переписывать всё на ДИ, попутно ещё его и изучая, и далее продолжить писать уже на нём?
>>2157714 >>2157165 Кстати об указателях. Можно ли как-нибудь в одну строку объявить статический объект и указатель на него же? Т.е. Вот это вот: >static char buf[10] = {0} >static char p_b = &buf; Соединить в одну строку. Мне даже и и переменная "buf" как таковая нафиг не нужна, к объекту только по указателю обращаюсь.
Здравствуйте ребята. Есть тут, кто хорошо разбирается в Сишном компиляторстве? Не получается скомпилировать проект onionphone ставил mingw, cmake, cygwin на винду, пытался запустить в папках make.exe и mingw32-make.exe выходила ошибка, что файл не найден с разрешением .o и пишет что-то типа Error 2 (e=2). Пытался поставить eclipse и скомпилить разными способами в нем, но все никак не получилось. Поставил убунту, скачал на нее эклипс, mingw64, скомпилить так и не получилось в общем. В линуксе ошибка, что не видит make в PATH. Пошуршал в папках линуксовых, так и не нашел make, но если я ставил mingw то он же где-то должен быть?!
суп двачик, я обосрался жиденько. суть: заебала вс студия, накатил clion. в нём какого то хуя не возбуждался компилятор/дебаг, я такой "ок" накатил minGW, нихуя не возбудилось ничего, я такой "ок", снёс minGW папку, снёс слион, переустановил слион, и... снова нихуя. докучи накатил кодблокс, но он тоже не возбуждается, типа мингв не обнаружен. мингв снизу справа выкидывает окошко с ошибкой, типа "файлы не найдены"( логично, лол, папку то я снёс для переустановки). в итоге что я имею? мёртвый кодблокс, мёртвый силион, фантомный минГВ (в PATH его нет, но он каким то раком выкидывает мне ехидное окошко ошибки). что я делаю не так помимо моего существования и как это исправить. ось вин10
>>2158233 > как это исправить 1. Накатить ЖМУ/Пинус 2. Минимально освоить пакетный менеджер, vim, make и git 3. Даже не притрагиваться к отладчику первый год
>>2158246 линукс поставить не могу, по причине собственной никчёмности, разумеется (нет, это никак не связано с ПО для работы, я просто днище, ага). что такое вим, мейк, пакетный менеджер и гит первый раз слышу (нет) отладчик мне и не нужен, по крайней мере в с/с++, ничего что требует отладки я на этих языках не пишу. а знаешь что мне действительно нужно? понять что я блять наебнул в своём компе, что у меня не работает ранее работавший кодблокс хотя бы.
>>2158274 Так. я принял душ и пофиксил кодблокс. кажется не спать два дня было плохой идеей и я немного разнервничался. да и с мингв я разобрался. пожалуй пойду посплю, вопросов больше нет.
Я уже не понимаю че надо делать. Пробовал через кодблокс, визуал студию поставил посмотреть может она что-нибудь сделает, пздц какой-то неделю не могу скомпилить проект.
>>2158606 Анонче, тебе уже посоветовали годноту в этом посте >>2158246. Не ленись, попердолься пару дней и все у тебя наладится. По личному опыту скажу, что после линукса на окнах кодить не возможно.
>>2158606 Через кодблокс такая ошибка кстати, и что очень странно один файл с разрешением .h не находил в проекте хотя он там был пришлось тупо копипастнуть код вместо инклуда, но от ошибке в прикрепленной пикче уйти не получается.
>>2158623 Все бы ничего, но проект не мой и собран на мейкфайлах, мне лишь его скомпилировать нужно и достать от туда экзешники для своего диплома в уник. Но я все равно уже и линукс поставил и на нем попердолиться успел так ничего и не получив.
>>2158678 Не секрет. Исследование методов передачи речи при наличии ошибок в канале связи. По сути хотел собрать .bat файлы которые вызывают экзешники кодеков и делают разные манипуляции с ними. Сжатие, перевод в блокбитовое состояние, добавление ошибки или без нее и потом разжатие. Все это на разных скоростях нужно проделать. Составить объективные и субъектинвные оценки, ну и быстроту каждого кодека оценить. Желательно было сделать это на распберри, чтобы скорость точнее определить, но мне бы пока что хотя бы на винде это все собрать.
Может ли что-то пойти не так, если я в юнионе буду иметь только uint атрибут, но запишу туда число со знаком (чтобы и прочитать потом назад со знаком тоже)? Или всё же лучше иметь два и в них писать в зависимости от типа переменной?
Вот примерно так: https://ideone.com/S3PttS Можно ли иметь лишь data2_t (проще/меньше писать, и вроде работает), или строго лучше только data1_t? Не очень в курсе, как именно пройдёт конвертация переменной из возможно int32_t в uint64_t, наверняка же может знаковый бит где-то пропасть? Или будет int32_t -> int64_t -> uint64_t? Как-то спецификация это оговаривает?
>>2159288 Я, очевидно, просто упростил и убрал все другие элементы юниона, чтобы лишним не засорять. Там как struct'ы, так и без них, поэтому сделать как в твоём коде не получится.
Просто уж очень не хочется фактически дублировать все комбинации для signed и unsigned.
Вроде все возможные переводы туда-сюда работают, как и при передаче в функции — https://ideone.com/3ME1uF, так что может и норм?
>>2159408 У меня-то по коду вопрос, но он про авр соответственно.
Допустим есть два микроконтроллера, нужно передать один байт данных от одного к дугому как можно быстрее. Загвоздка в том, что доступны только четыре ноги из порта а (atmega32), то есть никакие серийные протоколы (uart, spi, i2c) передачи использовать не получится. Прерывания как на передатчике, так и на приемнике тоже использовать нежелательно, так как они могут замедлить основную программу. Как это сделать наиболее оптимально?
>>2159626 > Освобождаешь ноги Эй, программист, полегче. Плата уже спаяна, ничего там освободить не получится. Задача не в этом. > Либо пишешь программную реализацию какого-нибудь протокола для свободных ног. Вот в этом собственно задача.
>>2159620 >Прерывания как на передатчике, так и на приемнике тоже использовать нежелательно, так как они могут замедлить основную программу. Ничего быстрее правильно написанного прерывания не существует. Из других вариантов: постоянный опрос в цикле или по таймеру. Вот это легко замедлит основную программу.
>передать один байт как можно быстрее Очень плохая постановка вопроса. А что 2-го байта не будет? Нужна частота передачи данных и периодичность, если данные передаются не постоянно. Но на 4 пинах ничего быстрее spi все равно нет. Делай программный SPI. Если передача в одну сторону, делай 2 битный SPI, как в sd картах.
>>2158630 >>2158644 Лол, так тебе надо было брать gstreamer и не ебать мозги. >>2158680 Какой пиздец. Даже дауну должно быть очевидно, что победят SILK (потому что внутри самого кодека есть FEC) и Opus (потому что там внутри SILK для речи). Остальное же окаменелое говно эпохи GSM всосет, потому что их пускают уже поверх канала с какими-нибудь турбокодами, что у тебя даже не предполагается в сетапе. Пидорашье образование в своем репертуаре. >>2159620 > доступны только четыре ноги из порта а (atmega32) > то есть никакие серийные протоколы (uart, spi, i2c) передачи использовать не получится Я в упор не понимаю каким образом ты сделал такой вывод. Вешай SPI на эти четыре ноги, как >>2159850 говорит и не еби мозги. >>2160456 RTFM, блядь: https://docs.microsoft.com/en-us/cpp/build/reference/compiler-options Там внутри cl.exe, он собирает как крестовый код, так и просто сишный.
>>2162150 ну начнём с того что программы из этой книги не компилятся. просто копируешь вставляешь и нихуя. какого хера я сам должен догадываться методом тыка почему она не рабоатет?? во вторых абсолютно не объясняются некоторые термины, опять самому догадываться. приходится гуглить, хуюглить, короче пиздец, учебный процесс превращается в непойми что, повезёт если догадаешься, что имели в виду авторы
Когда я изучал его синтаксис, он мне показалася вроде так ниЧО. Можно пописать. Но когда увидел размер исполняемых файлов, то проклял его. Вы там совсем ебанулись, делая исполняемые файлы от чьи размеры кратными десяткам мегабайт?
Это понятно, что к исполняему файлу линкуются все необходмые библиотеки и он будет работать на любой конфигурации и версии целевой платформы, но всё равно это хуёвый подход и место голангу только в кластерах. Нахуй нахуй.
>>2162580 Кстати вот попробовал скомпилить пустой проект на дланг. Очень удивился, когда увидел почти 10МБ-ный бинарник. Ну чушь же. Там не было даже стандартной библиотеки. Нашёл в нете совет воспользоваться утилитой стрип для сброса прилинкованного мусора, но та всё-равно пару мегов оставляет. А проект же абсолютно пустой, абсолютно. Это дланг - прямая надстройка над си.
Это важно хотя бы потому, что каждый раз при компиляже генерить 10МБ - заметная задержка, насилие диска и цпу; это даже помимо просто размера как такового.
>>2163430 da posholo ono; vo-1, u menya tolko 'gdc' + linux, a vo-2, eto 'dmd' + win, kotorij toge tolsto kompilit; nu budet 1MB na pustoj main() - eto toge hren' kakaya-to... ya ne mogu etogo ponyat'
tam esho eti pontovie - import stdlib: printf - budto addskij minimalizm sha menya gdet
>>2164540 и почему тогда компилятор не изъебывается? по-моему в любом стандарте си есть сложение, а значит ты либо пиздобол, либо слишком тонко чтобы я понял что это тролинг
>>2139020 >главное понятный код и sql запросы нормальные пиши, тут не нужен челик, который ебет байты не только это. ещё важно писать безглючный код, который верно работает. производительность да - не шибко критична
>>2164579 Ричард Хэзфилд, Лоуренс Кирби и др. Искусство программирования на С. Фундаментальные алгоритмы, структуры данных и примеры приложений. Может эта? Сам ещё на середине Праты, эту следующей хочу смотреть.
>>2165245 >Сам язык очень простой. Сколько лет программируешь на Си? Попробуй написать синатксический анализатор, чтобы хавал 100% Си кода и охуеешь насколько он простой.
>>2165284 >Попробуй написать синатксический анализатор, чтобы хавал 100% Си кода и охуеешь насколько он простой. Сложность самого языка и сложность программирования на нем - это разные вещи. Си - один из самых простых языков, в нем почти ничего нет, кроме основных конструкций и типов. Но чтобы писать на нем что-то годное, необходимы большие компетенции.