Вы видите копию треда, сохраненную 20 января 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Пожалуйста, пользуйтесь https://ideone.com/ https://wandbox.org/ или https://pastebin.com/ для вставки кода, если он длиной больше нескольких строк или содержит [i] или ∗.
Что читать:
- Brian Kernighan, Dennis Ritchie "The C Programming Language": http://www.cypress.com/file/56651/download
- Stephen Prata "C Primer Plus, 6th Edition" (2014): относительно свежая, знает про C89/C99/C11, описывает различия, объемная (около тысячи страниц), годная, с вопросами, упражнениями и ответами. Читать после K&R или до.
- Zed A. Shaw "Learn C the Hard Way" (2015): годное пособие для гуманитариев для гуманитариев!
- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html
- ООП, например: http://www.cs.rit.edu/~ats/books/ooc.pdf
- Стандарт ISO/IEC 9899:1999 (C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт)
- Стандарт ISO/IEC 9899:2011 (C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)
- Черновик стандарта ISO/IEC 9899:202x (C2x): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2479.pdf (февраль 2020, с диффами)
- Последний черновик ISO/IEC 9899:202x (C2x): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2596.pdf (декабрь 2020)
Чем компилировать:
- Очевидный GCC.
- clang: оче годно, батя рекомендует.
- Intel C++ Compiler: оптимизации, тысячи их.
- Visual Studio Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте.
- Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное.
- TCC: очень маленький компилятор с багами и поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.
Что еще почитать:
http://c-faq.com/
FAQ из comp.lang.c. Древний, но все еще актуален.
Samuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition" (2002)
Ебаный пересказ стандартов C89 и C99 (включая стандартную библиотеку). Для не осиливающих стандарт в оригинале. Читать в качестве подготовки к собеседованиям (есть задачник с ответами) и для ознакомления с масштабами пиздеца перед написанием своего парсера/компилера.
Peter Van Der Linden "Expert C Programming. Deep C Secrets" (1994)
"Си: грязные истории". Смехуечки, немного объяснений, чем обусловлены особенности языка, всем известные подводные камни кто там ругал косяки в JS? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).
Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели.
Ben Klemens "21st Century C: C Tips from the New School" (2012)
Paul Deitel, Harvey Deitel "C for Programmers with an Introduction to C11" (2013)
Stephen G. Koch@n "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)
MISRA Ltd. "Guidelines for the Use of the C Language in Critical Systems" (2013)
Набор рекомендаций по написанию надежного кода на C (промышленный стандарт). Читать - однозначно, следовать - вдумчиво и без фанатизма. Также можно посмотреть https://www.securecoding.cert.org/confluence/display/c/SEI+CERT+C+Coding+Standard и http://web.archive.org/web/20190213011655/homepages.inf.ed.ac.uk/dts/pm/Papers/nasa-c-style.pdf
Еще более длинный список: http://www.iso-9899.info/wiki/Books#Learning_C
https://github.com/kozross/awesome-c
Онлайн-утилиты:
- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов).
- http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.
Прошлые треды:
- №67: http://arhivach.net/thread/667170/
- №68: http://arhivach.net/thread/667171/
- №69: http://arhivach.net/thread/688454/ >>2027897 (OP)
Первыйнах
лол, так у сишников же очевидно вниз среднюю зарплату тянет кузьмич из оборонного нии, кодящий за банку перловки
лол, как будто у сишников есть другая работа кроме как прогать микрики за еду в нии или прогать микрики за еду у кабанчиков
Тем не менее зарплату сишникам понизил
Мимолетом участвуют. А потом узнают что у них не зарплата, а посмешище - и начинают ливать со своих нии в какой-то аутсорс.
Мимосам такой путь прошел.
А я напоминаю.
Язык Си - самый низкооплачиваемый язык программирования в России.
https://habr.com/ru/article/569026/
https://hh.ru/
инбифо: вы всё врети
>А потом узнают что у них не зарплата, а посмешище
Да они и так знают, как будто бы у них интернета нет. Видимо, это их выбор, либо они больше ничего не умеют. Ведь в норм айтишной фирме придется постоянно учиться новому, ходить на конференции, участвовать в митапах, следить за качеством кода, соблюдать code-style принятый в фирме, делать таски в сжатые сроки, а им легче попивать чаек в нии, пинать хуи и писать говнокод для микриков.
>- и начинают ливать со своих нии в какой-то аутсорс.
Плез. Даже на последней галере если узнают, что к ним идет устраиваться "программист" из нии, его ливанут. Любой фирме лучше нанять новичка без опыта(самоучку или с курсов), чем переучивать недопрограммиста из нии, который (проектировал хуи) прогал микрики в нии за еду.
>в какой-то аутсорс.
Но не на Си же, а на js, javascript и прочих востребованные языках, на Си аутсорса быть не может по логике вещей.
Сам иди нахуй.
Новички должны знать, что их ждет, если будут учить этот язык: работать за гроши в России и нулевая возможность релокейта в норм страну в принципе.
>если будут учить этот язык
То не вырастут долбоеба и смогут без труда вкатиться в C++ или чего повыше.
>в норм страну
либераха, плез
Блядь, как же вы заебали своими свиньями. Что то говно, что это.
>То не вырастут долбоеба и смогут без труда вкатиться в C++
В приниципе тоже самое что и Си, тоже копейки получают.
>или чего повыше.
Так в чем и суть. Нахуя учить Си, чтобы потом учить другой язык? Лишняя трата времени, только и всего. Почему не учить сразу же нормальный язык, чтобы потом же найти нормальную работу, прогая на нем?
А если уж для развития навыков программирования надо, то лучше тогда читать книгу SICP и решать задачки на языке Scheme, язык же си может научить разве что байтоебить указатели. Для работы байтоебом это конечно несомненно нужный навык, а для работы программистом нужны другие навыки, если что.
во первых какая тебе разница что какой-то хер без специализации вдруг выберет не максимально выгоный путь? или ты из тех хитрых дядек который перенасыщает рынок джуниор-специалистов в веб-макакерстве чтобы те вообще за тарелку борща работали?
во вторых, в этом треде сидят не только вкатывальщики во что-то чтобы бабки иметь, а просто люди, которые уже спецы в чем-то, и получают норм зп, но учат си для души. например я. я тебя успокою, в нии прогать микрики я не пойду, мб я и попробую попрогать микрики когда-нибудь, но так для души, для себя, не за деньги.
А теперь плез, съеби с треда, тут мужики мб даже и женщины, которым нравится си, сидят-пердят тут, лампово общаются. А ты все портишь
>В приниципе тоже самое что и Си, тоже копейки получают.
Видать, твои представления о крестовых вакансиях ограничиваются поддержкой на 99-м стандарте. Мань, в серьезных высонагруженных промышленных проектах вроде 3d-движков и операционных систем никакой нОрМаЛьНыЙ яЗыК не придет на замену, а коммитет успешно старается, чтоб никому от этого не было больно. ПоБаЙтОеБиТь же уКаЗаТеЛьЧиКи немножко полезно, чтоб научиться уважать кучу, когда имеешь дело с RAII, perfect forwarding и тому подобными вещами.
>или чего повыше
это я действительно хуйню написал, там уже нельзя провести вертикальное сравнение уровня абстракции, особенно если умеешь в темплейты. Но начинать, имхо, надо с Сишки, потому что это классика. Если тебе не доступна вся глубина значения слова классика, нет смысла продолжать.
Ух, захотелось в нии устроиться. Но меня туда не возьмут
Во-первых, ты мелкобуквенный, неграмотный даун и твоё мнение может не учитываться.
Во-вторых, на этом и закончим.
>вроде 3d-движков и операционных систем
Речь идёт о вкатунах, которые уже точно не будут делать движки и операционные системы, их вообще мало кто делает даже среди топ сеньоров, а как раз таки и будут прогать какую-то фигню за еду первые лет 10 точно.
>ПоБаЙтОеБиТь же уКаЗаТеЛьЧиКи немножко полезно, чтоб научиться уважать кучу
Зачем, если во всех современных языках уже есть сборщик мусора? Давай еще на ассемблере прогать, чтобы уважать процессор.
> Но начинать, имхо, надо с Сишки, потому что это классика.
Потому что ты так сказал?
Фронтенд-девелоперу, например, Сишка точно нафиг не сдалась. И большинству программистов точно. Учить надо то, что имеет хотя бы отдаленное отношение к твоей работе и может пригодится в работе, как тому же веб-разработчику в работе пригодится сишка?
>3d-движков
Их делают 2.5 конторы в мире, мань
>операционных систем
Их вообще на С++ не пишут. Как раз на старом древнем Си.
>в серьезных высонагруженных промышленны
В высоконагруженном бекенде отлично справляется го и даже жаба.
>Новички должны знать, что их ждет, если будут учить этот язык
Их ждёт довольно лёгкое, приятное и, что немаловажно, БЫСТРОЕ обучение с использованием топовых бесплатных курсов вроде cs50, они не захлебнутся особенностями языка и не растеряют мотивацию на первых порах, им будет легко учить другой язык для работы, потому что
раз у многих языков си-подобный синтаксис
два многие языки для зарабатывания денег заточены под императивщину, как и си
>>20054
Клован, охуенный у тебя там поиск на хх, надеюсь ты в курсе что буква "С" встречается в выдаче несколько чаще, чем слово "JAVA", и отражает скорее ситуацию по всем языкам и ещё по куче вообще не программистских вакух, ведь буква "С" входит в состав слова "С++", "С#" и ещё миллиона слов, а так же широко используется в описаниях не-сишных вакансий. Тебя объём выдачи не смутил? Автор статьи на хабре видимо твой брат по разуму.
Ты просто еблан ньюфаг корчащий из себя погромиста, за плечами у тебя джаваскрипт интенсив с гикбрейнс, а в голове, в том месте где должна быть такая дисциплина как "архитектура эвм" — пустота. Это довольно легко определить — если человек утверждает, что не знает си, то это совершенно точно указывает на то, что он не знает архитектуру, потому что при изучении архитектуры сишка всегда идёт в нагрузку и чтобы не изучить её в процессе это надо избегать её осознанно. А если ты не знаешь архитектуру, и я не говорю глубоко, я говорю на уровне "прерывания и адресация памяти", то ты не вполне образован как программист. А если знаешь, то и сишку ты тоже знаешь и не прибегаешь срать в сишный тред — тебе прекрасно известны достоинства и недостатки языка и желания толсто набрасывать у тебя просто не может возникнуть, разве что по сильной пьянке.
И как именно это делает обучение программированию с использованием сишки тяжёлым и неприятным, потрудишься объяснить?
Черепашка в лого не даёт почувствовать студенту почувствовать контроль над машиной.
>будут прогать какую-то фигню за еду первые лет 10 точно
Я, конечно, не такой эрудит, и, быть может, ты просветишь подробнее, но утверждение нелогичное. Как ни крути, индустрия нуждается в том самом меньшинстве знающих и ответственных специалистов, которых мало "даже среди топ сеньоров". И откуда их брать, если уважающий себя образованный человек не пойдет работать за еду 10 лет? Деды смертные и не такие обучаемые. Да, дебича, лишь формально владеющего стеком, даже не посвятят в возможный карьерный путь с нуля, но очень даже инвестируют в толкового челика, который умеет в матчасть и искренне хочет уметь больше.
>уже есть сборщик мусора
Да что ты говоришь? В системах реального времени тоже будешь срать аллоками с асинхронной очисткой памяти?
>Фронтенд-девелоперу с верхом амбиций пориджа, например, Сишка точно нафиг не сдалась
пофикисл. Я, конечно, тоже не сын маминой подруги, но и со своей мамкой уже не живу. Год проработал фронтендщиком, т.к. больше никуда брать не спешили, а укатываться с кормящей шеи торопился. Набрался полезного опыта, не зависящего от стека и направления, заебался, уволился и устроился C++ бэкендщиком. Хуй бы я новую работу потянул, если бы еще до первой работы не увлекался олдскульными материями, а слушал одногруппников с их НИНУЖНА и типичным смузихлебским имиджем, который уже на 3 курсе начинал проявляться, фубля. А мог, будь больше терпения, желания и запаса денег, таки вкатиться в разработку охуевшего 3d-движка, который не игровой, а для промышленных нужд с дохуиллионами полигонов. После собеса попросили запилить пет-прожектом какой-нибудь редактор, чтоб подтвердить понимание паттернов проектирования, но суть в том, что в плане DirectX реально инвестировали в девственников, и з/п, очевидно, отличаются от начальных фронтендерских не вниз, а вверх. Еще лично знаю пару человек, которые тоже вкатились без опыта сразу в кресты, при чем один из них практически на Си с классами пишет под что-то unix-подобное, с сетями работает, ебу, сложно короче. Ну, а второй вообще олимпиадник, криптографию какую-то хуячит за нехилые килобаксы. Такие з/п пориджам не снились.
>>20398
Тебя это тоже касается, а то съебался куда-то, знаю я вас подпездышей. Обнял.
>будут прогать какую-то фигню за еду первые лет 10 точно
Я, конечно, не такой эрудит, и, быть может, ты просветишь подробнее, но утверждение нелогичное. Как ни крути, индустрия нуждается в том самом меньшинстве знающих и ответственных специалистов, которых мало "даже среди топ сеньоров". И откуда их брать, если уважающий себя образованный человек не пойдет работать за еду 10 лет? Деды смертные и не такие обучаемые. Да, дебича, лишь формально владеющего стеком, даже не посвятят в возможный карьерный путь с нуля, но очень даже инвестируют в толкового челика, который умеет в матчасть и искренне хочет уметь больше.
>уже есть сборщик мусора
Да что ты говоришь? В системах реального времени тоже будешь срать аллоками с асинхронной очисткой памяти?
>Фронтенд-девелоперу с верхом амбиций пориджа, например, Сишка точно нафиг не сдалась
пофикисл. Я, конечно, тоже не сын маминой подруги, но и со своей мамкой уже не живу. Год проработал фронтендщиком, т.к. больше никуда брать не спешили, а укатываться с кормящей шеи торопился. Набрался полезного опыта, не зависящего от стека и направления, заебался, уволился и устроился C++ бэкендщиком. Хуй бы я новую работу потянул, если бы еще до первой работы не увлекался олдскульными материями, а слушал одногруппников с их НИНУЖНА и типичным смузихлебским имиджем, который уже на 3 курсе начинал проявляться, фубля. А мог, будь больше терпения, желания и запаса денег, таки вкатиться в разработку охуевшего 3d-движка, который не игровой, а для промышленных нужд с дохуиллионами полигонов. После собеса попросили запилить пет-прожектом какой-нибудь редактор, чтоб подтвердить понимание паттернов проектирования, но суть в том, что в плане DirectX реально инвестировали в девственников, и з/п, очевидно, отличаются от начальных фронтендерских не вниз, а вверх. Еще лично знаю пару человек, которые тоже вкатились без опыта сразу в кресты, при чем один из них практически на Си с классами пишет под что-то unix-подобное, с сетями работает, ебу, сложно короче. Ну, а второй вообще олимпиадник, криптографию какую-то хуячит за нехилые килобаксы. Такие з/п пориджам не снились.
>>20398
Тебя это тоже касается, а то съебался куда-то, знаю я вас подпездышей. Обнял.
Кстати, например, в нашей шараге олимпиадники через зав.кафедры с его связями на весьма неплохую работку пробивались, и там, как ни странно, почти всегда C++. Пару лет назад один выпускник, еще далеко моложе 30 лет, расчехлял у доски какие-то жутко пиздатые вещи, отлучившись из Германии, где скромненько делал 70000 евро в месяц не крестах.
> как именно это делает обучение программированию с использованием сишки тяжёлым и неприятным
Да очень просто - сишка целиком состоит из вещей, на которые можно напороться. Среди них есть вещи, на которые можно напороться даже когда кажется, что все ок.
Но это все старые, как мир, грабли, и новобранцу только приятно в десятитысячный раз на них наступить, исследовать причину через gdb или давно адекватно написанные книжки, крепче причаститься к мозолям дедов и ощутить себя чуть больше и сильнее. А когда напарываешься на очередную криворукость разработчиков новомодной либы, исследовать в каких версиях какая содомия водится как-то опускаются руки, ведь ты все таки не говно чистить хочешь в лучшие годы, а из автомата стрелять, пусть и по ногам.
>разработку охуевшего 3d-движка, который не игровой, а для промышленных нужд с дохуиллионами полигонов
Я кстати чуть не устроился такой писать. Графический движок для САПР. Помимо очевидного досконального знания С++, WinAPI, OpenGL, Vulkan, алгоритмов графики, вычислительной математики, многопоточки, требовали еще матан, линал, дифференциальную геометрию и желательно топологию. На все про все - 180к в рублях. Испытательный срок 3 месяца. При этом сам код местами с жутким легаси из нулевых. Ну в общем у них вакансия до сих пор открыта, если что. И это вакансия миддла-сеньора. Джуны им в принципе не нужны были.
>суть в том, что в плане DirectX реально инвестировали в девственников, и з/п, очевидно, отличаются от начальных фронтендерских не вниз, а вверх
Вся графика сейчас либо в геймдеве, либо в геометрических движках САПР, про которые я уже рассказал выше. Про условия работы в геймдеве думаю сам знаешь. Либо какой-нибудь рендер карт, но опять же, это наверное только гугл, яндекс + пара компаний, которые занимаются ГИСами.
Все это очень узкая отрасль, в которой много людей не нужно, ибо большого спроса на графику нет, для очень многих целей достаточно лишь Unreal/Unity.
>пишет под что-то unix-подобное, с сетями работает
Да, знаем мы такую работу, как правило это инфобез и телекомы. Достают DPDK и пишут всякие анализаторы трафика. Интересная тема, только платят как всегда в С++ примерно нихуя, но требуют довольно много, я сам пытался устроиться в такое - меня очень жестко попустили на теме многопоточки, спрашивали про всякие Lock-Free структуры и С++ memory model, которую я увы полностью не смог осилить.
>индустрия нуждается в том самом меньшинстве знающих и ответственных специалистов, которых мало "даже среди топ сеньоров". И откуда их брать, если уважающий себя образованный человек не пойдет работать за еду 10 лет?
Из 8 миллиардов людей всегда найдутся те, кто захочет заниматься системной прогой. Другое дело, что обучение такого человека будет стоить довольно дорого, поэтому нанимают всяких додиков с PhD, студентов с прикормленных кафедр вузов. Достаточно лишь объяснить, что то, чем они будут заниматься, - это самое настоящее элитное программирование, а фронтенд и бекенд - для низкоинтеллектуального быдла.
>одногруппников с их НИНУЖНА и типичным смузихлебским имиджем, который уже на 3 курсе начинал проявляться, фубля
В чем-то они правы. Программирование в конечном итоге превращается в обычную работу. В 35 лет ты вряд ли будешь сильно в восторге от того факта, что ты пилишь какой-то 3д движок, в то время как твой одногруппник вася делает быдлосайты на пхп. Тебе будет просто похуй. Поэтому одногруппники тоже не долбоебы - зачем себе намеренно усложнять жизнь ради нихуя? Я вот после тех самых попыток устройства в графику и сети решил бросить это дело и вкатиться в ГОвно, пока что всем +- доволен.
>разработку охуевшего 3d-движка, который не игровой, а для промышленных нужд с дохуиллионами полигонов
Я кстати чуть не устроился такой писать. Графический движок для САПР. Помимо очевидного досконального знания С++, WinAPI, OpenGL, Vulkan, алгоритмов графики, вычислительной математики, многопоточки, требовали еще матан, линал, дифференциальную геометрию и желательно топологию. На все про все - 180к в рублях. Испытательный срок 3 месяца. При этом сам код местами с жутким легаси из нулевых. Ну в общем у них вакансия до сих пор открыта, если что. И это вакансия миддла-сеньора. Джуны им в принципе не нужны были.
>суть в том, что в плане DirectX реально инвестировали в девственников, и з/п, очевидно, отличаются от начальных фронтендерских не вниз, а вверх
Вся графика сейчас либо в геймдеве, либо в геометрических движках САПР, про которые я уже рассказал выше. Про условия работы в геймдеве думаю сам знаешь. Либо какой-нибудь рендер карт, но опять же, это наверное только гугл, яндекс + пара компаний, которые занимаются ГИСами.
Все это очень узкая отрасль, в которой много людей не нужно, ибо большого спроса на графику нет, для очень многих целей достаточно лишь Unreal/Unity.
>пишет под что-то unix-подобное, с сетями работает
Да, знаем мы такую работу, как правило это инфобез и телекомы. Достают DPDK и пишут всякие анализаторы трафика. Интересная тема, только платят как всегда в С++ примерно нихуя, но требуют довольно много, я сам пытался устроиться в такое - меня очень жестко попустили на теме многопоточки, спрашивали про всякие Lock-Free структуры и С++ memory model, которую я увы полностью не смог осилить.
>индустрия нуждается в том самом меньшинстве знающих и ответственных специалистов, которых мало "даже среди топ сеньоров". И откуда их брать, если уважающий себя образованный человек не пойдет работать за еду 10 лет?
Из 8 миллиардов людей всегда найдутся те, кто захочет заниматься системной прогой. Другое дело, что обучение такого человека будет стоить довольно дорого, поэтому нанимают всяких додиков с PhD, студентов с прикормленных кафедр вузов. Достаточно лишь объяснить, что то, чем они будут заниматься, - это самое настоящее элитное программирование, а фронтенд и бекенд - для низкоинтеллектуального быдла.
>одногруппников с их НИНУЖНА и типичным смузихлебским имиджем, который уже на 3 курсе начинал проявляться, фубля
В чем-то они правы. Программирование в конечном итоге превращается в обычную работу. В 35 лет ты вряд ли будешь сильно в восторге от того факта, что ты пилишь какой-то 3д движок, в то время как твой одногруппник вася делает быдлосайты на пхп. Тебе будет просто похуй. Поэтому одногруппники тоже не долбоебы - зачем себе намеренно усложнять жизнь ради нихуя? Я вот после тех самых попыток устройства в графику и сети решил бросить это дело и вкатиться в ГОвно, пока что всем +- доволен.
>Да очень просто - сишка целиком состоит из вещей, на которые можно напороться.
Как и любой язык, было бы желание.
>Среди них есть вещи, на которые можно напороться даже когда кажется, что все ок.
А вот и приведи-ка пример, пока что только была попытка пукнуть 1 << 31, но выяснилось что во-первых никакой вкатун не двигает биты в сишке (как и никогда не пишет слова volatile, auto, goto, continue и так далее), тем более в знаковых переменных, а во-вторых и в главных, те кто двигают, прекрасно осведомлены о последствиях ведь в стандарте это прописано чёрным по белому. А ты вот дай мне недокументированную особенность сишки, на которую мог бы напороться ньюфаг.
>Кресты ты и одни за год не осилишь, туда надо жизнь положить.
Это понятно. Я же имел ввиду освоение необходимых навыков для вката.
> недокументированную особенность сишки
Про недокументированную речи не шло. Языку полвека. Все, что можно было, уже миллион раз обсосано. Но ньюфаги стандарт не читают, и свои собственные грабли еще не собрали.
> но выяснилось что во-первых никакой вкатун не двигает биты в сишке (как и никогда не пишет слова 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])); .... }.
> Как и любой язык
Нет. Хуже только жс, но разница заключается в том, что в жс для того, чтобы получить по ебалу, нужно делать страннные вещи, а в си - обычные.
лол, вот примерно об этом я и говорю. sizeof(array) - sizeof(array[0]) надо больше спать и перечитывать сообщения перед отравкой
ты все еще тут?
тебя попросили съебаться нахуй, будь добр, пожалуйста.
я понимаю, что обидно такое услышать в свой адрес. но можно же уйти с достоинством, а не как истеричка, обматерив всех и хлопнув дверью
>Но ньюфаги стандарт не читают
Ньюфаги и биты не двигают, об этом и сказал, читай внимательнее.
>Где выяснилось, что за фантазии? Двигают, пишут, используют, до unsigned вообще дорастают через полгода минимум, до этого искренне не понимают, нахуя оно.
А вот тут-то я уже проиграл. Двигают биты значит, ньюфаги, биты двигают, а до беззнакового не дорастают? Охуенные истории конечно, вот только все вкатунские курсы что я видел разъясняют за типы данных и знаковость (но не за endianness), а сдвиги в лучшем случае упоминают.
Ещё раз — для разработки чего-то высокоуровневого сдвиги не нужны, твёрдо и чётко, они юзаются в коде который очень плотно работает с железом (не ньюфажная тема), там же где и волатайлы с инлайн ассемблером.
>Нет. Хуже только жс, но разница заключается в том, что в жс для того, чтобы получить по ебалу, нужно делать страннные вещи, а в си - обычные.
Нет. В си тоже нужно делать странные вещи, обычные делаются без проблем.
>Классика: char array[5]; int j; for (j = 0; j <= 5; j++) array[j] = 1;
Я просил привести пример — где пример? Мне нужна
>недокументированную особенность сишки, на которую мог бы напороться ньюфаг
Где она? То, что при попытке доступа в чужую память поведение неопределено — это недокументированная особенность? Да это БАЗА.
Вот ты говоришь делать надо обычные вещи, а сам делаешь странную.
>>20632
>>20636
>for (j = 0; j <= 5; j++)
При чем тут Си? Во множестве языка нумерация с нуля и half-open range в циклах используется, потому что это математически удобно, блядь, а не потому что "ряяяяяя, старперы байтоебы носилуют мозг амбициозных пориджей адресами и оффсетами"
>memcpy
потому memmove, все в описании есть, а если не хватает дисциплины наперед задуматься о возможных деталях, то и высокоуровневых языках обосрешься, в гуманитарии подаваться надо было
>memset
надо понимать, что приходит указатель и никакой больше инфы, как stl контейнере. Если нюфаня пытается в Си по опыту питона в школе, а не открывает K&R, земля ему пухом не только в Си, но и по жизни
> При чем тут Си? Во множестве языка нумерация с нуля и half-open range в циклах используется
А какие из этих языков после этого рандомно выбирают, крашнуться или работать как ни в чем не бывало?
> надо понимать, что приходит указатель
Тут надо понимать, там надо понимать, везде надо понимать, о чем я и писал >>20499. Проебал строчку в книжке и уже не понимаешь. Это называется
> довольно лёгкое, приятное и, что немаловажно, БЫСТРОЕ обучение
Пушто рантайм проверки хуета. Если не смотреть через призму современных умных структур данных, а учить с нуля, как средство работы с байтиками, то не так уж и много инфы придется освоить. А потом логическим продолжать осваивать штуки, которые эту работу упрощают, и вырастешь нормальным человеком. В этом прелесть bottom-up подхода, если не перегибать палку и не начинать с asm. Да, как минусы top-down в том, что больше срача в голове, так минуса bottom-up, что больше месяцев надо на чистой силе воли убить, пока не получится что-то прикольное. Но Си как раз золотая середина, потому что за пару месяцев вполне себе освоишься, а если и на то не готов, то нахуй такие на рынке не нужны, демпингуют еще сука.
>А какие из этих языков после этого рандомно выбирают
Любые языки, предназначенные для работы в неуправляемой среде.
В этом и соль — ты не можешь получить контроль над железом, не неся при этом ответственности за последствия своих действий.
Остальное уже субъективно — ты топишь за то, что управляемая среда лучше, поскольку она запрещает НЕКОТОРЫЕ способы выстрелить себе в ногу (но подвозит ещё тележку других), и типа ньюфагу нельзя разрешать стрелять себе в ногу сишными способами, а надо разрешать только питоньими (почему? а хуй знает), я топлю за то, что написал ещё в самом первом посте и на что ты так ничего не возразил
1. Многие языки имеют схожий синтаксис
2. Многие языки подразумевают ту же самую парадигму в качестве основной (а именно — императивное программирование: когда мы пишем чёткий алгоритм и делаем это с помощью манипуляции стейтом)
3. Без си не вникнешь в работу интерпретатора своего любимого языка (а значит по дисциплине "языки и компиляторы" соснёшь хуй)
4. Без си сломаешь жопу в попытках изучить и воплотить некоторые структуры данных, которые требует плотной работы с памятью (хэшмепы, динамические массивы и т.д.), а значит соснёшь хуй уже по дисциплине "алгоритмы и структуры данных"
5. Соснёшь хуй по дисциплине "операционные системы" (пайпы семафоры блаблабла), стандартная либа си крепко связана с системными вызовами.
6. Соснёшь по архитектуре, конечно же, тут даже комментировать нечего.
7. Немножко соснёшь по сетям
8. Ну и ещё немного по БД и прочим таким вещам, где важна производительность.
Я ж сам таким был, раньше тоже воевал с сишкой кричал пердуны, а потом оно оказалось так что когда нужно будет конкретно начинать работать, а не борщи хлебать — везде си.
> если не перегибать палку и не начинать с asm
Асм довольно-таки полезен. Как минимум хотя бы потому, что сишные указатели будут досконально поняты примерно через 30 секунд после прочтения что это за хуйня и пары примеров.
Вообще, да. Это я слабак с Си начал и только потом поинтересовался ASM, сразу развеяв для себя кучу сишной магии.
> ты топишь за то, что управляемая среда лучше
Для новичка - да. Для того, чтобы быстро наговнякать, концентрируясь на алгоритме, а не задумываясь об управлении памятью и выходе за пределы массива - да. А кстати, расскажи нам, как выстрелить себе в ногу питоньим способом?
> Без си не вникнешь в работу интерпретатора своего любимого языка
Писал на питоне эмулятор x86 и пару интерпретаторов. Это было чуть больнее, чем на Си, но в основном из-за отсутствия switch. В остальном удобнее.
> хэшмепы, динамические массивы
Которые любой вменяемый язык предоставляет из коробки. Алсо, никто не мешает для обучения городить это хоть на жс, списки-массивы есть, индексы вместо указателей вполне сгодятся.
> пайпы семафоры блаблабла
Есть везде. Заодно можно усвоить опыт предыдущих поколений, как от этого абстрагироваться.
> Соснёшь по архитектуре,
Опять-таки концентрация на программировании, а не на том, как бы разложить данные, чтобы в кэш влезли. Если думать о микрооптимизациях до алгоритмов, получим вылизанную по агнеру фогу до такта сортировку пузырьком. Сто раз такое видел.
> Немножко соснёшь по сетям
Любой язык, который отучает не учит новичка делать struct msg; recv(s, &msg, sizeof(msg), 0) - благо. Научится перекладывать байты правильно и кроссплатформенно - позже не возникнет желания закладываться на невыравненный доступ к памяти и прочий порядок байтов (и битов).
> Ну и ещё немного по БД
Дергать query и cursor_next можно хоть из жс.
> производительность
Мы сейчас точно про вкатывающихся говорим?
> раньше тоже воевал с сишкой кричал пердуны
Если что, Си - мой основной язык. Просто Си в качестве первого языка в 2021 году не годится. Си - это устаревший кривой кусок говна, сделанный для задач 70х-80х годов, который уже никак не исправить. К сожалению, он еще и единственный вменяемый из существующих низкоуровневых языков, на котором вдобавок написано овердохуя кода, поэтому учить его так или иначе придется. Но не первым.
> работать, а не борщи хлебать — везде си
Везде кресты, ты хотел сказать.
>>21072
Я наоборот начинал с асма. И после этого примерно лет десять Си мне очень нравился, и я не замечал недостатков. А потом вырос.
> ты топишь за то, что управляемая среда лучше
Для новичка - да. Для того, чтобы быстро наговнякать, концентрируясь на алгоритме, а не задумываясь об управлении памятью и выходе за пределы массива - да. А кстати, расскажи нам, как выстрелить себе в ногу питоньим способом?
> Без си не вникнешь в работу интерпретатора своего любимого языка
Писал на питоне эмулятор x86 и пару интерпретаторов. Это было чуть больнее, чем на Си, но в основном из-за отсутствия switch. В остальном удобнее.
> хэшмепы, динамические массивы
Которые любой вменяемый язык предоставляет из коробки. Алсо, никто не мешает для обучения городить это хоть на жс, списки-массивы есть, индексы вместо указателей вполне сгодятся.
> пайпы семафоры блаблабла
Есть везде. Заодно можно усвоить опыт предыдущих поколений, как от этого абстрагироваться.
> Соснёшь по архитектуре,
Опять-таки концентрация на программировании, а не на том, как бы разложить данные, чтобы в кэш влезли. Если думать о микрооптимизациях до алгоритмов, получим вылизанную по агнеру фогу до такта сортировку пузырьком. Сто раз такое видел.
> Немножко соснёшь по сетям
Любой язык, который отучает не учит новичка делать struct msg; recv(s, &msg, sizeof(msg), 0) - благо. Научится перекладывать байты правильно и кроссплатформенно - позже не возникнет желания закладываться на невыравненный доступ к памяти и прочий порядок байтов (и битов).
> Ну и ещё немного по БД
Дергать query и cursor_next можно хоть из жс.
> производительность
Мы сейчас точно про вкатывающихся говорим?
> раньше тоже воевал с сишкой кричал пердуны
Если что, Си - мой основной язык. Просто Си в качестве первого языка в 2021 году не годится. Си - это устаревший кривой кусок говна, сделанный для задач 70х-80х годов, который уже никак не исправить. К сожалению, он еще и единственный вменяемый из существующих низкоуровневых языков, на котором вдобавок написано овердохуя кода, поэтому учить его так или иначе придется. Но не первым.
> работать, а не борщи хлебать — везде си
Везде кресты, ты хотел сказать.
>>21072
Я наоборот начинал с асма. И после этого примерно лет десять Си мне очень нравился, и я не замечал недостатков. А потом вырос.
>А кстати, расскажи нам, как выстрелить себе в ногу питоньим способом?
Точно так же — забыть отступ поставить, попробовать прочитать несуществующего члена списка.
>Для новичка - да. Для того, чтобы быстро наговнякать, концентрируясь на алгоритме
А где связь между новичком и быстрым говняканьем? Пояснишь, почему новичок обязан быстро говнякать и ни о чём не задумываться, почему новичок не должен учиться например?
>Писал на питоне эмулятор x86 и пару интерпретаторов.
Жопочтец, пожалуйста.
>Которые любой вменяемый язык предоставляет из коробки.
Очень хорошо ты обучишься алгоритмам и структурам данных, не воплощая алгоритмы и структуры данных.
Ты видимо и программировать научился, не прибегая к написанию программ.
>никто не мешает для обучения городить это хоть на жс
Никто не мешает и большие проекты целиком на асме писать, однако никто так не делает.
>Заодно можно усвоить опыт предыдущих поколений, как от этого абстрагироваться.
Очень хорошо ты обучишься дисциплине "операционные системы", не изучая сию дисциплину, ага-ага.
Дальше не читал, слишком толсто пошло.
>Если что, Си - мой основной язык.
А твоя основная задача — стоять на страже своего стека, чтоб ньюфаги не демпинговали тебе зп.
Лол, и поэтому я в этом итт отвечаю этим самым ньюфагам с их ньюфагопроблемами, да?
>Си - это устаревший кривой кусок говна, сделанный для задач 70х-80х годов, который уже никак не исправить.
А остальные промышленные языки - кривые куски говна, построенные на принципах, которые были известны еще в 70е и которыми пытаются решать задачи 10х-20х. Это относится и к C++, и к Java, и к Python.
Ньюфаг в программировании != ньюфаг в Си. И я ничего не требую. Я не рекомендую.
>>21254
> Это относится и к C++, и к Java, и к Python.
Давай сравним то, как изменился Си под требования времени с тем, как изменились джава, кресты и питон. Вот многопоточность завезли, которой никто уже не пользуется, потому что везде свои костыли. Что там еще? Два раза пытались добавить юникод, получилось не очень. Вот _Generic еще, мы его как раз в прошлом треде обсуждали, какой он удобный и нужный. Попутно проебали основную идею C takes the point of view that the programmer is always right, получился небезопасный язык, где программист не доверяет компилятору, а тот, в свою очередь, не доверяет программисту. Так и живем. Ну да и хуй с ним, в С23 доломают.
Кратко: На раскачку имею всего год, но хочется выучить БАЗУ. Собственно вопрос, как обстоят дела с вакансиями Си-джуниора? Или же стоит сразу начать учить плюсы?
> Кресты ты и одни за год не осилишь
Маньчкин, плиз.
За полгода выучил С++ по самоучителю, еще за полгода сделал пет-прджект на Qt.
Устроился джуном за 100к.
А ты и даьше сиди у мамши на шее и учи кресты всю жизнь.
>еще за полгода сделал пет-прджект на Qt
Кьют к С++ такое себе отношение имеет, реальные кресты это пиздец тащемто. QML освоил?
Капртинка - чушь собачья. Нет данных по количесиву ваканчий. Что толку от говноязыка в топе с космической зарплатой, но рабочих мест - 2 штуки на всю страну.
>Классика... (бла-бла)
Это сам язык, а вовсе никакая не "классика". Прямой доступ к памяти - это и есть язык Си. А ты чего хотел? Оберток с защитой, запрещающих доступ к памяти? Ты придурок или даун? Си для этого и существует - делать эти вещи, которые ты называешь "косяками". Откуда такие дебилы вообще лезут. А я скажу откуда, как раз из других языков, а точнее не языков, а сраной скриптовой параши вроде той же жс, из которой ты и вылез. Кто учится параше, навечно становится имбецилом с парашным мышлением, что ты и продемонстрировал.
>Кьют к С++ такое себе отношение имеет, реальные кресты
Что в твоем понимании реальные кресты?
>QML освоил?
html и css в qt почти 1 к 1 как в вебе, ничего сложного, языки разметки.
логика вся на плюсах
> Си для этого и существует - делать эти вещи, которые ты называешь "косяками".
Си существует для работы на низком уровне, а не для того, чтобы делать косяки, косяки как раз лучше не делать.
Поэтому тот же Rust лучше, так как также позволяет работать на низком уровне, но не делать косяков как в С/С++ где есть миллион способов выстрелить себе в ногу.
> вакансий на boost
Чего, блядь? Ты ебанутый? Буст сейчас практически на той же позиции, что в свое время был TR1, они идут рука об руку с комитетом, это считай что часть стандартной библиотеки, только неофициально.
Лол, си оперирует с абстрактной машиной фон неймана, похожей на pdp-11, что давно не соответствует реальности. Сидебилы думают, что программируют на """низком уровне""", но на самом деле большинство работы за них делает компилятор и процессор.
>Прямой доступ к памяти - это и есть язык Си.
>сраной скриптовой параши вроде той же жс,
В Micropython есть прямой доступ к памяти контроллера. Вообще, память это просто массив байт или чего-то покрупнее. Вообще без разницы на чем этот массив читать/ писать.
Я лично тот ещё имбицил, писал ассемблер на 3000 строк (недавно открыл посчитать), а потом открыл для себя питон и понял что это тот же ассемблер (полная интроспекция, делай что хочешь с любым полем или методом) но удобнее.
Так вот, а потом я как следует распробовал js и он оказался даже удобнее. Просто что угодно пиши в словарь и делай с ним что хочешь. Так мало того там полностью декларативный интерфейс с огромными мультимедиа возможностями. Так мало этого, его можно вообще запустить на любом телефоне. Открыл браузер и все, ничего не нужно качать устанавливать.
Вот и нахуй мне что-то ещё? Любой файл открыл, распарсил, посмотрел (не в консоле строчку вывел , а любую таблицу, диаграмму.воочию увидел, отмасштабировал), изменил, скачал, закрыл - все!
Вот единственное жаль, что не научился я с файлами по-другому взаимодействовать, кроме как скачивать. Хочу хромбук, вот просто мечта уже такая.
Ну и ограничение на файл где-то в районе 70мб. Больше у меня ломается браузер.
Вот если бы хоть какой-нибудь был графический интерфейс у других языков без пердолинга, я бы подумал что выбрать.
Так что на скрипты не гони, это нужная вещь. А смузихлебы и карьеристы везде есть.
Мимо
Говно твои скрипты, скрипты используют в аппаратах ивл? В управлении боеголовками? В эбу автомобиля? Нет, там Си. А скрипты это только для браузерных игр и сайтиков магазина дилдаков.
> Лол, си оперирует с абстрактной машиной фон неймана
Лол ору с дебики.
Си компилируется и на машины с гарвардской ахитектурой в том числе.
> Назови альтернативу не обмазанну ООП говном
"Я хочу альтернативу коболу, но чтобы страдать точно так же как в коболе, современные языки не нужны" а альтернатив-то и нет
>>22462
Все правильно. Стандарт предполагает нечто подобное гарвардской архитектуре. Указатели на функции нельзя кастить в указатели на данные (точнее, кастить-то можно, но разыменовывать нельзя).
Скрипты используются, чтобы все перечисленное тобой собрать, протестировать, прошить, отладить и ещё много-много всего узкоспециализированного.
Говорить что скрипты только для игр может очень недалёкий, не очень далекий или очень далёкий от программирования человек.
Вот скажи, что makefile не скрипт. Скажи что баш не скрипт. Скажи что они лучше решают свои задачи, чем скриптовые языки общего назначения.
Может ты просто смузихлеб с моднявой иде, где все скрипты сделаны за тебя, привязаны к кнопочке и тебе все это не нужно?
А может ты пишешь для каждого частного случая консольную программу на си?
Нужно переименовать файлы - пишешь утилиту. И так далее?
Или вообще все готовое используешь?
> о касте функций в данные ничего нет
Да, я обосрался, можно кастить только в указатель на функцию другого типа. Но тем более. Функции и данные не пересекаются = гарвард.
> там может быть и ада
Это все редкие или очень узкоспециализированные железки. А вот баш в фотоаппарате не хочешь? И питон с луа дохуя где, причем иногда одновременно.
>на """низком уровне"""
Нелол дебил, подучи русский язык сначала, прежде чем лезть в другие языки.
"Низкий" это понятие относительное, а не абсолютное. "Низкий" не бывает просто низкий, а только относительно чего низкий. Это называется относительность, тупорылое ебло. Так вот, ниже Си только ассемблер. Не суцществует кроме ассемблера ничего ниже Си и даже ничего равного Си нет, только выше. Поэтому Си - низкий уровень. И не просто низкий, а самый низкий из универсальных языков. Си это буквально чудо, сумевшее усидеть на двух стульях - низкий уровень с прямым доступом к железу и отвязки от от конкретного железа. Поэтому никогда не будет никаких аналогов Си, кропе парашных кукареков из говна.
>В Micropython есть прямой доступ к памяти контроллера
В батниках тоже есть (думаю можно сделать), и что, дебил? Дело не в доступе (через анальные жопы), а в том, чем является сам язык. Язык Си сам по себе работает на уровне железа, на уровне прямой памяти, прямо в ней, а не имеет доступ через говняные пуповины, сам будучи парашным скриптом в виртуальной говномашине как другие языки.
>Так вот, ниже Си только ассемблер. Не суцществует кроме ассемблера ничего ниже Си и даже ничего равного Си нет, только выше.
Но низость си заключается в прямой работе с памятью, возможностью инлайнить ассемблер и вызывать интринзики. Таких языков достаточно. Или какие ещё у си есть низкие опции?
Низость, достоинство и предназначение Си заключается в его собственной низости, нахождении и работе на низком уровне, а не сидеть вверху, опистив леску удочки на километры вниз, как это в парашных скриптах. Это то, что по-настоящему является программированием - программирование устройства на выполнение функций, а не парашные скрипты, где ты программируешь парашную виртуалку, так же бесконеячно далекую от устройства как анус твоей мамаши от девственности.
Потому что, повторяю для дебилов, программирование это понятие относительное. не бывает просто программирования, бывает только программирование чего-то. И вот это самое то, что ты программируешь и разделяет программистов с программированием от макак со скриптами, хороший софт, от жирной, тормозящей и разваливающейся блевотины, техников-специалистов от индусского свинобыдла с улицы, "вкатывающегося" ради моды и бабла.
И в чём заключается нахождение на низком уровне конкретно, а не абстрактно и метафорично? Я тебе назвал конкретные вещи, которые делают язык низкоуровневым.
В том и заключается, что не абстрактно и метафорично, а буквально, на самом деле. Скриптомакаке, у которой мышление в принципе застряло на высоком уровне, осмыслить сие будет сложно.
Ну вот зачем ты жопой вертишь? Я же нормально спросил, и примеры привёл. Что такого низкоуровнего умеет си, что не умеют другие языки? Напрямую управлять кэшлайнами, может?
Ну вот зачем ты жопой вертишь? Я же нормально ответил. Си находится на уровне железа - устройства, чтобы программировать это устройство. Это и есть программирование. Другие языки не такие, они висят на высоком уровне виртуальной параши и программируют эту парашу. Это не программирование, а имитация для даунов.
> Си находится на уровне железа - устройства, чтобы программировать это устройство.
Это делают все языки, компилируемые в нативный ассемблер. Таких немало.
Профан детектед. Си не находится на уровне железа. На уровне железа позволяют работать ассемблерные вставки в Си. Но если ты юзаешь синтаксис Си - это уже высокоуровневое программирование.
>Язык Си сам по себе работает на уровне железа, на уровне прямой памяти, прямо в ней
Это программирование на основе структур. Так бы и сказал сразу, и не горела бы твоя жопа.
А прямой доступ к памяти есть везде. Запезделся ты короче, с кем не бывает.
Ну давай по частям тобою написанное.
>Низость, достоинство и предназначение Си заключается в его собственной низости, нахождении и работе на низком уровне, а не сидеть вверху, опистив леску удочки на километры вниз, как это в парашных скриптах. Это то, что по-настоящему является программированием - программирование устройства на выполнение функций, а не парашные скрипты, где ты программируешь
Это всего лишь твое имхо, далёкое от реальности и размытое
>парашную виртуалку, так же бесконеячно далекую от устройства как анус твоей мамаши от девственности.
Не бесконечно, а всего лишь на один уровень абстракции выше. Вместо твоих любимых структур там ассоциативные массивы, реализованные на тех же структурах. Все остальное Такое же.
>Потому что, повторяю для дебилов, программирование это понятие относительное. не бывает просто программирования, бывает только программирование чего-то.
Ассоциативный массив для тебя что?
>И вот это самое то, что ты программируешь и разделяет программистов с программированием от макак со скриптами, хороший софт, от жирной, тормозящей и разваливающейся блевотины, техников-специалистов от индусского свинобыдла с улицы, "вкатывающегося" ради моды и бабла.
Это твое субъективное отношение к людям, а не характеристика языка.
Это про тебя скорее. Оттого что ты написал это первым, ничего не изменится. Все прекрасно видят, кто сообщает факты, а кто жонглирует агрессией.
мимо рандомный анон, не понимающий, какого хуя влетел какой-то рандомный черт погонять что си - параша, не хочешь не пиши на нем, делов-то
>Не суцществует кроме ассемблера ничего ниже Си и даже ничего равного Си нет, только выше.
С--? Forth?
Питухонщик, уходи
Имелось ввиду скриптовые языки программирования вроде жс, а не скрипты как таковые.
Можно список хороших скриптов? Можно узнать, почему плохие скрипты плохие как таковые?
Ой блядь, лучше бы ты не пытался оправдаться, а просто молчал бы сидел.
>Сидебилы думают, что программируют на """низком уровне"""
Ведь на самом деле содержание указателей в си это не реальные адреса в памяти
>Вот скажи, что makefile не скрипт. Скажи что баш
Ни то ни другое не претендует на звание ЕЗЫКА ПРАГРАМИРАВАНИЯ
>>вместо прямых адресов в памяти у нас переменная, которая при компиляции превратится в адрес
А может в регистр, а может во время выполнения попадёт в кэш, нельзя точно сказать, что произойдёт. Также как нельзя сказать, вставит ли компилятор выравнивание.
>>22973
Обычно для программирования устройств на си производитель предоставляет компилятор и hal/api. Тоже самое можно было бы проделать с любым другим языком. Си использует просто потому что он требует минимальный рантайм.
Си это высокоуровневый язык, всегда им был, поэтому рассматривая его как высокоуровневый он действительно говно.
Я думаю, эти люди не поймут, что это им адресовано.
>Ведь на самом деле содержание указателей в си это не реальные адреса в памяти
это эффективные адреса энивей. а их трансляция в физические зависит от текущего мода цп
Ассемблер тоже высокоуровневый. Вот в любом ассемблере есть циклический сдвиг через флаг переноса (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 аргументы. Или вообще поебать и я черезчур загоняюсь?
Еще одной и той же машинной команде может соответствовать несколько разных команд ассемблера (и наоборот). Это позволяет утверждать, что команды ассемблера являются вовсе не мнемоническими именами, а самыми настоящими абстракциями.
Мимо дилетант
>Ассемблер тоже высокоуровневый. Вот в любом ассемблере есть циклический сдвиг через флаг переноса (ror, rol), проверка, сброс, инверсия флага в любом регистре по номеру, а в си нету.
это тролленк? в какой точке у тебя асма высокоуровневая? каждая мнемоника взаимнооднозначно отображается в отдельный опкод со значениями. и откуда црц в х86?
>>23910
>Си очень низкоуровневый язык, ближе к verilog
ну ты точно зеленый. сравниваешь ЯП с языком верификации и описания аппаратуры
ptrdiff_t это чтобы кастить указатели к интам вроде. size_t безнаковый платформозависимый тип.
ну пос у меня смещение
src + pos = получается указатель на подстроку где len ее длинна
ну т е эт норм что pos имеет тип ptrdiff_t
> size_t безнаковый платформозависимый
а бля, pos знаковый, мб лучше тогда туда size_t втопить? мне не надо чтобы отрицательный pos в функцию залетал
А может в регистр, а может твоей матери в очко, сути дела не меняет, си это не особо навороченная надстройка над асмом.
Да ты сам дебик если не осознаешь отсутствие четких критериев уровневости.
И поэтому си это лисп
> fasm с высокоуровневыми макросами
Казалось бы, треду было уже некуда катиться, но нет!
> гораздо проще программировать
Эти макросы используют в основном те, кто не осилил сишку. Худшее из двух миров. Гораздо проще облажаться, код гораздо хуже чистого асма, гораздо хуже чистого си.
> И препроцессор там настоящий, а не ебаные текстовые замены из 50х годов.
Препроцессор в фасме - это и есть текстовые замены. Кроме них есть только rept и match. Все остальное - те же самые дефайны с другими названиями.
>>23929
> каждая мнемоника взаимнооднозначно отображается в отдельный опкод со значениями
Простите, а mov eax,edx - это 8b c2 или 89 d0? А вот еще xchg eax,eax у меня тут, это какой опкод?
> и откуда црц в х86?
Интел принес, очевидно же.
>>23943
> а бля, pos знаковый, мб лучше тогда туда size_t втопить?
Есть отрицательные смещения - сделай себе ssize_t или тащи местный (везде есть в том или ином виде). Если смещения/индексы беззнаковые (они чаще всего такие) - size_t. Оставь ptrdiff_t для реализации своей memmove.
>>23933
> ptrdiff_t это чтобы кастить указатели к интам вроде
Путаешь с (u)intptr_t. ptrdiff_t - это продукт вычитания двух указателей, в ином виде в дикой природе не встречается.
>>23899
Fat pointers и еще tagged pointers в AArch64 смотрят на тебя с недоумением. Указатель в Си может быть чем угодно. То, что там случайно оказалось что-то, похожее на адрес - это всего лишь совпадение.
> fasm с высокоуровневыми макросами
Казалось бы, треду было уже некуда катиться, но нет!
> гораздо проще программировать
Эти макросы используют в основном те, кто не осилил сишку. Худшее из двух миров. Гораздо проще облажаться, код гораздо хуже чистого асма, гораздо хуже чистого си.
> И препроцессор там настоящий, а не ебаные текстовые замены из 50х годов.
Препроцессор в фасме - это и есть текстовые замены. Кроме них есть только rept и match. Все остальное - те же самые дефайны с другими названиями.
>>23929
> каждая мнемоника взаимнооднозначно отображается в отдельный опкод со значениями
Простите, а mov eax,edx - это 8b c2 или 89 d0? А вот еще xchg eax,eax у меня тут, это какой опкод?
> и откуда црц в х86?
Интел принес, очевидно же.
>>23943
> а бля, pos знаковый, мб лучше тогда туда size_t втопить?
Есть отрицательные смещения - сделай себе ssize_t или тащи местный (везде есть в том или ином виде). Если смещения/индексы беззнаковые (они чаще всего такие) - size_t. Оставь ptrdiff_t для реализации своей memmove.
>>23933
> ptrdiff_t это чтобы кастить указатели к интам вроде
Путаешь с (u)intptr_t. ptrdiff_t - это продукт вычитания двух указателей, в ином виде в дикой природе не встречается.
>>23899
Fat pointers и еще tagged pointers в AArch64 смотрят на тебя с недоумением. Указатель в Си может быть чем угодно. То, что там случайно оказалось что-то, похожее на адрес - это всего лишь совпадение.
> Казалось бы, треду было уже некуда катиться, но нет!
Это ты ещё не видел т.н. HLA от упоротого дида. https://en.wikipedia.org/wiki/High_Level_Assembly
Книгу вроде не переводили, так что в рунете она не так известна, а у них вполне.
Лучше быть упоротым чем до конца своих дней компенсировать нищету из детства, продавая свое время жирному начальнику.
>на Си аутсорса быть не может по логике вещей
Вообще есть. Либо олдовые проекты и поддержка. Либо написание прошивок для всяких устройств.
Все классификации по определению ущербны. Примерно до середины 90-х Си считался языком высокого уровня, потом потихоньку мнение изменилось. Поищи старые книги, изданные в этой или прошлой стране.
>>24047
> Это ты ещё не видел
Видел. Обсуждали на всех тематических форумах в начале 2000х, когда книжка вышла. Да и Рэндел сам по себе известный дядька.
>Примерно до середины 90-х Си считался языком высокого уровня, потом потихоньку мнение изменилось.
А ты вижу не очень догадливый, и это не мнение изменилось, а языки программирования. Когда-то и ассемблер считался высоко-уровневым языком, что сказать-то хотел? Мы опираемся на иерархию исходя из развития языков в 2021-ом году, а не в 90-ом.
>а не в 90-ом
Да хоть в -90-е. Тот пиздюк просто пиздит.
Си никогда не был высокого уровня, всегда был низкого. Нужно только не пиздеть, а понимать что это значит.
Как пример, в 80-х был компьютер с бейсиком и машинными кодами. Бейсик, хоть и структурно повторял синтаксис ассемблера, имел вставки машинного кода и доступ к памяти, и всяким регистрам железа, эти фичи были отдельными спец-фичами, а сам язык бейсик был высокого уровня, потому что он абстрактный. Когда пишешь на бейсике, о железе думать не нужно, так же как на жс или питоне. А вот на Си - нужно знать железо и думать о нем, просто по дефолту необходимо, даже если ты специально не собираешься с железом взаимодействовать, всё равно нужно, иначе никак, ведь сам Си - это и есть железо.
На практике это выражается в банальном отсутствии проверок на выход из массива. В бейсике и прочих языках высокого уровня эти проверки есть, а в Си - нет, потому что в Си нет никаких массивов, как нет и переменных, ведь ты можешь спокойно из одной переменной попасть в другую, просто так, "случайно", т.е. по дизайну языка. Си даже не пытается тебя огородить, ведь в этом нет смысла когда ты сидишь голой жопой на железе.
Или возьми простое определение переменной: A=1 (в бейсике) и int a=1; (в Си). В бейсике всё просто, как и в любом языке высокого уровня - абстрактном. Концепция переменной везде одинаковая. А вот в Си - нихуя, в Си ты создаешь на стеке, а стек это не абстракция, стек существует, это железо, нужно понимать что это такое и сто ты этим делаешь в Си. Например, простой и очевидный массив из 100500 элементов, в Си будет нелегальной хуйнёй. И то, что компилятор умный и это может быть не стек, а маня-оптимизации в регистрах, ничепго не значит, необходимость понимания железа от этого не только не уходит, но скорее добавляется.
> Да хоть в -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 элементов, в Си будет нелегальной хуйнёй
Абсолютно нормальная практика. Например, если пишешь под десктопы. Никак не запрещено и работает.
этот пример сжимает вроде, потом скармливаю сжатые данные на разжатие, получаю изначальную строку. норм значит
но почему я не могу распоковать файл стандартными утилитами? это не gzip?
Твоя программа? Он просто разжимает, что ты ей на вход подашь, даже если это не сжатые данные.
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
>>25141
Нет. Если на входе не будет валидного zlib-потока, оно не будет знать, чем это упаковано и пошлет тебя нахуй.
>Нет. Если на входе не будет валидного zlib-потока, оно не будет знать, чем это упаковано и пошлет тебя нахуй.
Я имл в виду, что она попытается stdin разжать, подразумевая, что там сжатые данные. Как она обрабатывает ошибки я не читал.
>На практике это выражается в банальном отсутствии проверок на выход из массива.
Скажи проще что есть языки для неуправляемого окружения, а есть для управляемого. Просто способ понять, где ты — задать вопрос "а что происходит, если программа пытается в рантайме сделать хуйню?" Если ответ "вылетит исключение", то ты в управляемой среде, если ответ "а хуй его знает, всё что угодно" — в неуправляемой.
Понятно что везде, где это возможно, лучше работать в управляемой среде. Где же это невозможно? Там где высокие требования к производительности заставляют рвать уровень абстракции и приблизиться к железу, либо там, где не на что ставить управляемую среду (ОС, драйвер, загрузчик, биос, прошивки для микриков)
А так со всем согласен.
>В стандарте Си нет стека вообще.
Ты его не понял. Нет разницы, если ли стек в стандарте или нет, если ситуация такова, что на бумаге у тебя вроде как более высокий уровень абстракции, но на деле ты всё время видишь через него более низкий, то по факту никакой абстракции у тебя нет и ты сидишь на железе. Вот если бы в сишке не надо было бы помнить про стек, то уровень абстракции существовал бы.
>не на что ставить управляемую среду (ОС, драйвер, загрузчик, биос, прошивки для микриков)
Не совсем понятно, что значит "делать хуйню" и "не на что".
Исключения везде есть и везде их можно обработать. ,В контроллерах - прерывания, а в Винде SEH. В википедии пишут что даже свои try блоки для си под Винду есть.
Добавить свои исключения через проверки - можно везде.
Разница наверное в том что в питоне свою проверку исключения можно встроить в синтаксис, а в си доступ к массиву всегда будет без проверок.
На уровне функций в принципе разницы нет. На контроллере можно все проверить внутри функции и вызывать при нужде программное прерывание с обработкой исключений.
https://datatracker.ietf.org/doc/html/rfc1950 zlib
https://datatracker.ietf.org/doc/html/rfc1950 deflate
https://datatracker.ietf.org/doc/html/rfc1950 gzip
>>25202
> если бы в сишке не надо было бы помнить про стек
Скажи, в питоне или жс надо помнить про стек или нет?
>>25466
https://datatracker.ietf.org/doc/html/rfc1950 zlib
https://datatracker.ietf.org/doc/html/rfc1951 deflate
https://datatracker.ietf.org/doc/html/rfc1952 gzip
Вот что копипаст с людьми делает!
>стэк
>не стандарт
вот скажите, знатоки, если в теории конпелятор начнет запрашивать кучу для array[], или/и наоборот кидать mallocи в стэк, будет ли противоречить какому-то из стандартов?
бтв слышал звон про то что alloca() попал в один из последних стандартов. если так, то это разве не "стэк в Си"?
хмм вроде понял,
тип 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)
заработало
Кучу для array[] - не противоречит, лишь бы при выходе из блока free не забывал. Маллоки на стеке невозможны принципиально, потому что время жизни объекта не должно зависеть от времени жизни стекфрейма. Даже если ты не будешь привязываться к стекфрейму и сделашь void ∗stack_malloc(size_t n) { uint8_t obj[n]; return obj; }, то оно, конечно, будет выглядеть, как будто работает, но следующий же вызов любой функции затрет все нахуй.
Хотя ты можешь разместить кучу на стеке: в main() выделить на стеке дохуя, записать адрес в глобальную переменную и заставить маллок брать память оттуда. Это работать будет, потому что по сути ничем не отличается от статически выденного для кучи куска памяти. И еще маллок обычно умеет просить больше памяти у ОС, если у него кончилась, а тут такой фокус не прокатит.
>>25514
> alloca() попал в один из последних стандартов
Нет, оно по-прежнему нестандартное. Есть только VLA, которые делают что-то похожее.
Хоть кто-то понял.
И помнить нужно не только о стеке, но и о памяти. Вот код:
int a=1;
int b=2;
a[1]=3;
С точки зрения языка высокого уровня это абсурд, ошибка синтаксиса, но в Си это нормальный рабочий код. А всё потому, что, повторяю: в Си нет переменных и массивов, это фальшивка лишь на вид похожая, а на самом деле это лишь сахарок голой памяти и арифметики указателей. Поэтому в Си это нормальный код, хотя выглядит как бред, потому что Си это нихуя не то, чем он кажется дауну с жаваскрипта, где типа тоже похожий синтаксис. Авотхуй.
> постоянно учиться новому, ходить на конференции, участвовать в митапах, следить за качеством кода, соблюдать code-style принятый в фирме, делать таски в сжатые сроки
Разве в embedded-сфере не то же самое? Там тоже дохуя документации под различную периферию (команды, схемотехника) а также камни, на один stm32f103c8t6 много даташитов, считай, целых книг, которые надо осиливать. К тому же, embedded-разработчик помимо программирования (будь то С, С++, Rust, Go) должен знать физику (по крайней мере, один ее раздел - электротехнику).
> Даже на последней галере если узнают, что к ним идет устраиваться "программист" из нии, его ливанут
Даже если в "элитной" галере занимаются тупорылым формошлепством и CRUD'ами, а в сфере микроконтроллеров - наука, прогресс, космос. Из рабсиянского НИИ можно в перспективе уехать работать в SpaceX и заколачивать бабло.
>Поэтому в Си это нормальный код,
Пиздабол в треде.
Я как вспомнил, как мне си мозг ебал из-за того что переменная не uint32, а uint16 или типа того.
Как я заебался кастить каждый раз число в указатель.
А если массив uint32, хуй туда сунешь int или ещё что точно такого же размера.
Я уже просил "дружочек, ну тебе не похуй? Я пишу байт по адресу или слово, какая разница, ну тебе же просто поменять команду а?"
Хуй тебе, иди гугли касты.
В универе ебали java ООП, нахуй все это надо я думал. С тех пор ЯВУ считал говном пока коллега не показал питон и как его легко юзать. Я тогда переборол себя, попробовал и приятно удивился, как питону похуй на то что я делаю.
> но в Си это нормальный рабочий код
error: subscripted value is not an array, pointer, or vector
Попизди мне тут.
> Легко ли джуну вкатываться в эту область
Не сложнее, чем писать под десктопы на той же сишке.
>>25735
> должен знать физику
Не путать плюс с минусом, переменный ток с постоянным, напряжение с током, 3.3V с 5V, ну и краем глаза прочитать про open drain. Это примерно все.
>>25600
> Гораздо меньше.
Ну хоть не сказал, что не нужно, уже прогресс. Единственная ситуация, когда мы вспоминаем о стеке - это когда мерзкие детали реализации лезут наружу при рекурсии. В любом языке лезут, будь то жабка или си. А в остальном сишные автоматичкские переменные от локальных переменных в других языках не отличаются совершенно ничем. И пока ты остаешься в рамках, заданных абстрактной машиной Си (== пишешь нормальный, валидный код без UB), помнить про стек не нужно.
>Не путать плюс с минусом, переменный ток с постоянным, напряжение с током, 3.3V с 5V, ну и краем глаза прочитать про open drain. Это примерно все.
А если я начну пилить собственный проект? Мне ведь так или иначе придется сталкиваться с другими разделами физики, если я буду делать своего робота, например.
>Кучу для array[] - не противоречит, лишь бы при выходе из блока free не забывал
в таком случае деаллокации - уже задача конпелятора и опять же в таком случае деалокации будут либо по завершению функции, либо по завершению программы, однако это тоже не противоречит стандарту, хоть и контроль за памятью уже не на программисте.
>. Маллоки на стеке невозможны принципиально, потому что время жизни объекта не должно зависеть от времени жизни стекфрейма.
да, забыл про это, сорри. впрочем лайфтайм стэковых объектов уже ставит особняком стэк от других типов памяти.
>Хотя ты можешь разместить кучу на стеке: в main() выделить на стеке дохуя, записать адрес в глобальную переменную и заставить маллок брать память оттуда. Это работать будет, потому что по сути ничем не отличается от статически выденного для кучи куска памяти.
ну речь об условном экзотическом компеляторе, а не костылях программиста. мне было просто интересно предусматривает ли стандарт определенную работу трансляторов со стэковыми ресурсами (регистры, селекторы) или он в общем случае он волен кидать объекты куда хочет
>в таком случае деаллокации - уже задача конпелятора
сам себя пофикшу (только-только доперло). согласно стандарту деалокации - забота программиста в любом случае. а это значит попытка вызвать free() приведет к динамике стэку, что вапщет пиздец. так что стэк в Си есть, шах и мат
> забота программиста в любом случае
Нет, локальные переменные автоматические, и компилятор сам о них заботится. А что конкретно он будет делать: add $sp, N или free() - стандарт не регламентирует.
> это значит попытка вызвать free() приведет к динамике стэку
Не распарсил фразу. Но нельзя вызывать free() для того, что ты не получил через malloc()/calloc() (сам, или кто-то, кого ты вызывал). Т.е., даже если наш условный компилятор при входе в блок кода делает malloc() для локальных переменных и подставляет адреса, а ты сделаешь int main(void) { int x; free(&x); }, то независимо от того, сработает ли это - это все равно UB.
>>25879
> ну речь об условном экзотическом компеляторе, а не костылях программиста
Без разницы, кто это будет делать. Хотя в принципе поддержка компилятором тут не нужна. Алсо, я придумал чрезвычайно тормозной и слегка ограниченный способ делать malloc() на стеке, выделяя объекты в текущем стекфрейме, но обо мне тут и без моих ненормальных идей плохо думают.
Я вот свой недоязык делаю, пытаюсь понять как раз, какие способы распределения памяти существуют и какая у них иерархия.
До этого момента у меня все адреса и переменные были статические. Но уже сил нет без объектов все делать. А объекты невозможно сделать без вычисления адресов, даже статический объект нужно на этапе компиляции куда-то разместить.
Структуры имеют фиксированный размер и их легко было считать.
Короче я к тому, что можешь рассказывать, я все читаю и анализирую, даже если не отвечаю.
>локальные переменные автоматические,
посмотри логи разговора. речь об объектах, аллоцированных с помощью стандартных malloc(), которые транслятор записал, как мы допустили, в стэк. это никакие не автоматические переменные согласно стандарту. следовательно сам стандарт требует, чтобы эти ресурсы были высвобождены кодерком. и
>Но нельзя вызывать free() для того, что ты не получил через malloc()/calloc() (сам, или кто-то, кого ты вызывал).
речь о том, как в данном случае в твоём глобальном стэке от мэйна free() будет реализовано. если после деалокации не трогать наш объект в стэке (хуй с ним, пусть полежит), то это будет пустая функция; или маппинг стэк-фрейма (чтобы кто-то бтв, кто именно, лол? знал о доступных ресурсах); и самый худший вариант - уменьшать фрейм с релокацией других объектов.
по-моему это всё полный бред и стало быть каноны Си строго подчёркивают разницу между стэком и остальной памятью.
да, возможно речь шла об организации памяти (то есть никаких push()/pop() в Си), а не просто специфическом куске памяти. но разница есть потому я всех разгромил в этой демагогии
А, так ты про кучу в стеке, а не локальные переменные в куче? Что мы вообще обсуждаем, лол? Я запутался.
> как в данном случае в твоём глобальном стэке от мэйна free() будет реализовано
Как обычно кучу делают. Простейший вариант: связный список (free-list или block-list), блок помечаем как свободный, объединяем с предыдущим или следующим, если они свободны.
Не понял ты меня.
>Управляемый код (англ. managed code) — термин, введённый фирмой Microsoft, для обозначения кода программы, исполняемой под «управлением» виртуальной машины .NET[1][2][3] — Common Language Runtime или Mono. При этом машинный код называется неуправляемым кодом (англ. unmanaged code).
>Слово «управляемый» (англ. managed) здесь относится к методу обмена информацией между программой и исполняющей средой. Оно означает, что в любой точке исполнения управляющая среда может приостановить исполнение и получить информацию, специфичную для текущего состояния.
Я об вот этом. "Добавить свои исключения через проверки" это не совсем то же самое, что "иметь возможность в любой момент остановить выполнение при нелегитимном поведении и показать что именно пыталась делать программа". Одно дело когда у тебя приложуха работает в виртуалке, и виртуалка всегда сможет корректно завершить падающий процесс и подробно показать, что там с ним было не так, другое — когда программа контролируется только осью, а ось максимум что сделает это скажет "сегфолт карочи ебать", и тем более когда оси вообще нет и там ты вообще один на один со своей писаниной и никто не подскажет, что же ты там такого нахуевертил от чело всё ложится.
>Единственная ситуация, когда мы вспоминаем о стеке - это когда мерзкие детали реализации лезут наружу при рекурсии.
Ну в сишке у тебя дихотомия на стек и кучу, поэтому ты помнишь о нём постоянно, посколько постоянно решает вопрос "а куда это лучше положить?" В питоне про стек действительно вспоминаешь только при его переполнении, ведь там выделением памяти занимается интерпретатор/виртуалка/что-там-этим-в-питоне-занимается
Короче, есть небольшая платка 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'овский тоже до подключения клиента не пишет почему-то).
К слову, тестовая программа от вендора (для винды) тоже не работает: вроде как сервер запускает, но никакие сообщения не посылает / не принимаем, ошибок не выводит, и что там конкретно происходит (от китайцев же всё с полурабочим сайтом, где и скачать-то прогу нельзя было, пришлось по интернету искать) непонятно.
Собственно, можете ли что-нибудь посоветовать? Куда копать, что можно поменять ли попробовать?
> посколько постоянно решает вопрос "а куда это лучше положить?"
Нет, я решаю вопрос, нужна ли мне переменная за пределами определившей ее функции. То же самое я делаю и в питоне. Только там я не указатель возвращаю, а в dict, tuple или класс заворачиваю.
>>27032
Я попросил бы! int array[n][m] в аргументах деградирует до указателя на массив из m интов, а не до указателя на указатель на int.
> ты просто передаешь в ф-ю где указатель на указатель 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); }
> и усе
Segmentation fault (core dumped)
Ничего не показывает, так что и правда не открылся.
Вероятнее всего, проблема либо в одном из этих двух (далее уже просто listen(id, 1) идёт и accept(id, ...)):
> id = socket(AF_INET, SOCK_STREAM, 0);
> setsockopt(id,SOL_SOCKET,SO_REUSEADDR,&idReuse,sizeof(idReuse))==-1)
либо просто чего-то ещё не хватает, что скорее всего.
Весь код (удалив лишние притнф'ы) — https://ideone.com/J0J0Gj
Вообще какой-то неправильный, похоже, сервер-то: если я запущу его пример клиента, который подконнектит и что-то пришлёт, то lsof всё равно ничего не отображает, то есть как таковая связь-то и не устанавливается выходит?
Если же nc -l запустить, то всё верно: там есть нужные айпи/порт в состоянии LISTENING, а потом на ESTABLISHED меняется как до него плата достучится.
Или так!
#include <stdio.h>
void use_array(int arg[2][2]) {
printf("%d\n", arg[1][1]);
}
int main(void) {
int array[2][2] = {{1,2},{3,4}};
use_array(array);
}
sin_port = htons(port). От души возблагодарим дидов за хорошие, годные интерфейсы к сокетам.
Мда. Спасибо, заработало.
>каковы топ 5 причин по которым Сишечка - это фактически бессмертный ЯП?
Потому что новых языков для низкого уровня не придумали. Просто потому что никому это не нужно. У сишки есть компиляторы для всех возможные в мире платформ и устройств. У нового языка такой фичи не будет, увы
Сисюны, реквистирую стайлгайд!!!!
Ворочаю байтики и выделяю мэлоком а указать чар. Так вот
как лучше, везде считать их указателями ⚝(data + 1) или массивами data[1]?
Перейдут на квантовые компьютеры, и все сишники отправятся на помойку.
Или пойдут чистить сортиры в поместьях хаскелистов.
>квантовые компьютеры
Такого не случится. Максимум что-нибудь для вычислений сделают, что-то типа GPU.
> все сишники отправятся на помойку.
Или пойдут чистить сортиры в поместьях хаскелистов.
Что мешает перейти на хаскель?
>Потому что новых языков для низкого уровня не придумали
Чем тебе С++ не язык низкого уровня? Это ведь некий суперсет языка С. Хотя, как видим, плюсы сишечку не убили, а лишь дополнили. Интересно как во всю эту движуху впишется ржавый (Rust).
>>новых языков для низкого уровня не придумали
>Это ведь некий суперсет языка С
Сам спросил, сам ответил. Что еще ожидать от хрюсто-дебила.
Ыксперт с попеннета не палится.
Как добился этого? Возможно ли джуну без опыта устроиться сишником? Я потихоньку под микрики программирую.
F103 не актуален, тем более с алика, если хочешь стать ембдерром запили свою библу на сложное и актуальное устройство(датчик, дисплей и тд), все протоколы и ядро кортекс ты должен знать и ещё дохуя чего, поэтому лучше оставь как хобби и занимайся чем нибудь другим
> F103 не актуален, тем более с алика
Я знаю, но выбрал его для старта, т.к. под него очень много гайдов.
> если хочешь стать ембдерром запили свою библу на сложное и актуальное устройство(датчик, дисплей и тд)
А это довольно сложно, т.к. требует разбираться в документации по командам. Попытался наладить общение между микриком и ssd1306, в итоге утонул в информации, юзаю в итоге готовую либу.
> все протоколы и ядро кортекс ты должен знать и ещё дохуя чего
Что именно знать? Нужно уметь программировать все это на уровне регистров? А что насчет Cortex, я должен наизусть знать архитектуру?
> поэтому лучше оставь как хобби и занимайся чем нибудь другим
Не хочется заниматься ебанными сайтами или чем-то близким к этому, но работу искать надо. Я долгое время увлекаюсь реверс-инжинирингом, пентестом, поиском уязвимостей, но, к сожалению, не могу сделать это источником заработка.
Просто повезло ))
На первую сишную работу устраивался с опытом программирования PIC16 и показал сишный код, который писал для себя, в том числе ядерный. А там как раз требовалось такое для поддержки самопальных железок.
>ssd1306
Как делал я.
Нашел код на питоне.
Запустил через esp32/8266 или black pill через mycropython.
Прочитал исходник.
Нашел инициализацию.
Выписал в строку байт (там чтение не нужно, всегда запись).
Отправил их прямо строкой через i2c на питоне без либы.
Прочитал смысл каждой команды в даташите.
Собрал те функции которые мне нужны уже в ассемблере.
Сохранил. Закрыл. Разъебал экран. Забыл.
Вышмат обязателен для всех инженеров, т.к. он мозги формирует.
Я сдал его долгом на тройки и жалею об этом. Самое главное - это фундаментальное образование, а языки и фреймворки - уже второстепенно
У меня такая хрень с ЦОС. Препод мудак попался и теперь травма на всю жизнь.
А ведь тема интересная.
>>30752
Вспомнил ссылку
https://github.com/micropython/micropython/blob/master/drivers/display/ssd1306.py
> ЦОС
В моей шараге не было ни цифровой электроники/схемотехники, ни системного программирования, ни просто сишки.
Неплохо? JS макаки рубят по 300к, зная сраный реакт... Рыночек решает...
Привет, школа 42 как же вы заебали.Никаких указателей там нет, есть дескрипторы и традиция написания нечитаемого когда с магическими числами, которая до сих пор тянется к нам из 80х. Поэтому тебе стоит сначала man read и потом загуглить STDIN_FILENO, дальше сам.
> Привет, школа 42
С чего ты взял?
> Никаких указателей там нет, есть дескрипторы и традиция написания нечитаемого когда с магическими числами, которая до сих пор тянется к нам из 80х. Поэтому тебе стоит сначала man read и потом загуглить STDIN_FILENO, дальше сам.
Спасибо большое
Код может и оттуда, но не я
Не в провайдере, но обработка трафика. Для ткаих задач С как раз хватает, хотя иногда хочется владеть плюсами.
Плюсы это пиздец, там надо очень много знать, ведь разработчики высрали множество различных стандартов. Да и перспектив у этого языка нет, там одно легаси.
мб тогда раст? бля, но там педики позасовывали в язык того, что и нахуй не надо, дебилы. хуй знает, как по мне лучше уже плюсы
не хватает мне все-таки си, слишком топорный. понятно что для байто ебства лучше пока не сделали.
обоссыте, но не бейте
А чего тебе именно не хватает? Он наоборот является языком, предоставляющим тебе максимальные возможности в пределах выделенной твоей программе памяти (разве что после ассемблера).
> раст
Сам думаю выучить его.
Я вот попробовал Го учить, но это просто лютый пиздец а не язык... Лучше кресты выучить, на крайний случай есть ПХП если совсем жрать нечего
Гайды хуяйды, изучи даташит, изучи программирование. Программирование это твой стиль написания кода. На хуй брать говно f103(каюсь сам раньше грешил по незнанию сейчас это говно валяется, потому что нормальную купил) китайцы продают самопал ёбаный за счет вас хомячков кормяться, бери нормальный девборд(если не в терпеж адаптируй гайды под нее)
На производстве никто f103 не юзает, залезь лучше в форум стм и почитай
Знай как работает spi, i2c, 1wire, can, uart, usart
Знай cortex почитай книгу, взвесь все за и против хватит ли времени, у тебя должно быть дохуя мотивации вкатиться, у ембдеров нету джунов, сеньоров
абстракций не хватает, процедурная парадигма очень скудна.
>>32072
> Я вот попробовал Го
да я тоже пробовал, диплом когда-то давно на го писал. Прикольно,
структуры с методами, и утиная типизация, такое бы в си завезли. но го не то. Там ГЦ, а я хочу че-нить без ГЦ, вот си и плюсы. есть еще раст, но там борроу чекер залупский, который ебет тебя в жопу, и слегка делает память безопасней. А я не хочу ебаться с борроу чекером, я хочу ебаться с памятью.
> есть ПХП
да я и так уже рубист
хотя с си я больше профита поимею, нативные экстеншены для рубей смогу клепать.
Это нормально, язык появился где-то в конце нулевых, вышло две версии, на подходе третья, более простая. До сих пор о нём знает очень мало людей.
Низкоуровневому языку нужна не ебля с какими-то там абстрактными типами, а возможность memory ordering задавать указателю без костылей.
абстрактные типы нужны для удобства и безопасности. Никто не мешает вызывать сишные функции, которые, вроде, можно верифицировать с помощью ats.
Изначально я туда полез, потому что где-то писали, что поможет уменьшить размер бинарника (типа, возьмёт из либы только использумые функции), но с -ffunction-setions и --gc-sections разницы никакой нет (а без этих флагов компиляция в либу мало чего даёт). Разве что makefile может читабельней выходит, когда не всё в кучу накладывается.
Ни одной книги полезнее даташита или app note не встречал. Все что нужно знать об интерфейсах, есть в даташитах на чипы, которые этот интерфейс имеют.
С ПЛИС ситуация точно такая же, и даже более характерная.
Не понимаешь один даташит - возьми другой. Совсем плохо - гугли.
Готовые либы хороши если вдруг их старые проверенные исходники перестанут собираться по какой-то причине. У меня есть короткая полезная функция на ассемблере, которую я вставляю как массив байт и вызываю где хочу. Не нужно ебаться с поддержкой ассемблера.
быстрее соберется еще наверн, когда ты перекомпиливашь только часть проекта, там где изменения
>У меня есть короткая полезная функция на ассемблере, которую я вставляю как массив байт и вызываю где хочу.
В исходниках на турбо паскале такого говна было полно. Ты оттуда вылез?
У тебя комплекс неполноценности?
Так он же в любом случае перекомпилирует только те объекты, в исходниках которых были изменения (у меня по крайней мере каждый .c в .o делается по-отдельности).
Скорее наборот, без либы было бы быстрее (если миллисекунды считать), так как не нужно дополнительно архивировать это всё потом.
>У меня есть короткая полезная функция на ассемблере, которую я вставляю как массив байт и вызываю где хочу.
ТАК ТАК ТАК, ЧТО ТАМ У НАС
Это правильно с т.з. теории (сокрытие деталей реализации), но вынуждает выделять струку динамически. А нормальные сишники не спешат маллочить.
struct foo;
struct foo alloc_foo(void);
void free_foo(struct foo );
Это в идеале так. А в жизни ты поправил CMakeLists, и оно опять пересобирается. Дописал комментарий в хедере либы, и пересобирается твоя либа, и твои приложения, которые ее используют. Так что да, статические либы в большом проекте - спасение.
>>32963
Есть. #include <stdbool.h>
>>33022
Публичная структура - имя и поля в хедере, можно определять переменные такого типа. Приватная структура - в хедере только имя, переменные определять может только реализация, которая объявила полноценную версию структуры, а внешний код будет довольствоваться только непрозрачными указателями.
>абстракций не хватает, процедурная парадигма очень скудна
Ты на С можешь программировать хоть объектно-ориентированно, хоть функционально. Например, свои классы можно пилить из структур, в которых содержатся указатели на функции.
да я начал читать https://www.cs.rit.edu/~ats/books/ooc.pdf
да только уже чем так изъебываться проще для структур делать методы
mylib mylib_create()
void mylib_free(mylib self)
mylib mylib_clone(mylib self)
и так далее и не выебываться. Либо сразу плюсы взять
А про функциональщину интерестно, каким это боком на си можно?
ФП на Си в конечном счете вырождается в ООП, ибо для захвата каждого отдельного окружения придется объявлять структуру, а при захвате вручную инициализировать эту структуру.
>А в жизни ты поправил CMakeLists, и оно опять пересобирается
Так это же всё будет зависеть от того, как у тебя зависимости настроены. Откуда ему знать, может ты там убрал или добавил каких-то объектов, ясное дело, что нужно перекомпилировать. А если никакие объекты от мейкфайла не зависят (я в cmake не очень, пользуюсь обычным gnu'шным makefile'ом, но полагаю, что там примерно то же самое всё), то изменения внутри этого файла необходимость перекомпиляции не возбудят.
>Дописал комментарий в хедере либы, и пересобирается твоя либа
То же самое. Как ему разобрать, просто комментарий ты написал или каких-то новых вещей напихал или поля структур изменил? Произошли изменения — нужно пересобрать всё.
Не очень понимаю, как именно статическая либа тут что-то изменит-то? Были изменения, затронувшие файлы "либы" — нужно бует перекомпилировать. Линковаться со всеми этими объектами или предварительно собрать всё в архив, какая разница-то?
>если никакие объекты от мейкфайла не зависят (я в cmake не очень, пользуюсь обычным gnu'шным makefile'ом, но полагаю, что там примерно то же самое всё), то изменения внутри этого файла необходимость перекомпиляции не возбудят.
⛧.o: Makefile
То stm32, и это самое безобидное что я делаю с ним.
нет
пишу tui под линуксами без сторонних библиотек .Проблема заключается в том,что операционная система отправляет сигнал SIGWINCH только когда в UI-цикле задержка между записями в stdout составляет порядка 200 миллисекунд .Если понижать задержку ,при изменении размера терминала сигнал начинает приходить не всегда , а то вообще не приходит в 100% случаев.
стабильная робота только при 5-ти кадрах в секунду это неприемлемо
что делать?
> Не очень понимаю, как именно статическая либа тут что-то изменит-то?
Считаешь, что функциональность заморожена @ уберешь либу и ее хедеры из зависимостей остального проекта @ ребилдишь либу, если нужно, явным способом make mylib.a @ профит, если правки не влияют на интерфейс либы. Экономишь кучу времени на ребилдах.
по-моему вопрос описан нормально,я не понимаю к чему ты это написал
код плюсовый, вот ui-цикл :
55 while (1)
56 {
57
58 // DBG_WRITE_SIZE
59 std::this_thread::sleep_for (std::chrono::milliseconds (200));
60 tui::terminal::draw ();
61 }
62
108 void
109 tui::terminal::draw ()
110 {
111 cursor::move ({ 0, 0 });
112
113 for (uint i = 0; i < size.y; i++)
114 for (uint j = 0; j < size.x; j++)
115 {
116 flush (BG_color_map[j]);
117 flush (FG_color_map[j]);
118 flush (char_map[j]);
119 }
120 }
43 namespace
44 {
45 void
46 flush (const tui::ForegroundColor& fg)
47 {
48 write (STDOUT_FILENO, fg.escape_sequance ().data (),
49 fg.escape_sequance ().size ());
50 }
51 void
52 flush (const tui::BackgroundColor& bg)
53 {
54 write (STDOUT_FILENO, bg.escape_sequance ().data (),
55 bg.escape_sequance ().size ());
56 }
57 void
58 flush (const char ch)
59 {
60 write (STDOUT_FILENO, &ch, 1);
61 }
62 }
Ну тут на самом деле код ничем не поможет потому что это операционная система сигнал не шлет , тут мои полномочия все.Единственный вариант что я должен куда-нибудь пару байтиков записать что бы что-то сбросилось, или syscall какой-то нужен.Я собственно к сишникам на ковер пришел потому что плюсовики вряд ли про такие тонкости оси знают
код плюсовый, вот ui-цикл :
55 while (1)
56 {
57
58 // DBG_WRITE_SIZE
59 std::this_thread::sleep_for (std::chrono::milliseconds (200));
60 tui::terminal::draw ();
61 }
62
108 void
109 tui::terminal::draw ()
110 {
111 cursor::move ({ 0, 0 });
112
113 for (uint i = 0; i < size.y; i++)
114 for (uint j = 0; j < size.x; j++)
115 {
116 flush (BG_color_map[j]);
117 flush (FG_color_map[j]);
118 flush (char_map[j]);
119 }
120 }
43 namespace
44 {
45 void
46 flush (const tui::ForegroundColor& fg)
47 {
48 write (STDOUT_FILENO, fg.escape_sequance ().data (),
49 fg.escape_sequance ().size ());
50 }
51 void
52 flush (const tui::BackgroundColor& bg)
53 {
54 write (STDOUT_FILENO, bg.escape_sequance ().data (),
55 bg.escape_sequance ().size ());
56 }
57 void
58 flush (const char ch)
59 {
60 write (STDOUT_FILENO, &ch, 1);
61 }
62 }
Ну тут на самом деле код ничем не поможет потому что это операционная система сигнал не шлет , тут мои полномочия все.Единственный вариант что я должен куда-нибудь пару байтиков записать что бы что-то сбросилось, или syscall какой-то нужен.Я собственно к сишникам на ковер пришел потому что плюсовики вряд ли про такие тонкости оси знают
Возможно, твоему терминальному эмулятору становится хуево от того, что ты пишешь каждый байт отдельным вызовом. И оно не посылает тебе сигнал. Буферизуй записи или поменяй терминал.
Ну поменяй терминал точно не вариант т.к программа должна работать везде,даже в нативном линупс терминале,без иксов.
Я не могу чисто теоретически записывать например построчно ,потому что каждая клеточка терминала должна иметь свой цвет,который я ,перед тем как положить char ,должен записать в stdout в виде esc-кода .То есть от посимвольной записи уйти невозможно.
Просто сложи все байтики в буфер хоть на одну строку, потом делай один write.
А вообще тебе стоит ознакомиться с внутренностями curses.
попробовал построчный write : не сработало.
запись всех данных одним разом результатов тоже не дал.
>ознакомиться с внутренностями curses
Ну по-хорошему надо лезть в исходники огромных библиотек и вычитывать как они там это реализовали, но если бы я хотел этим заниматься ,то не пошел бы просить совета на двачах
108 void
109 tui::terminal::draw ()
110 {
111 for (uint i = 0; i < size.y; i++)
112 {
113 std::string buffer;
114 for (uint j = 0; j < size.x; j++)
115 {
116 buffer += BG_color_map[j].escape_sequance ();
117 buffer += (FG_color_map[j]).escape_sequance ();
118 buffer += (char_map[j]);
119 }
120
121 write (STDOUT_FILENO, buffer.c_str (), buffer.size ());
122 }
123 }
Я в курсе, про это и писал, что если мейкфайл вот так вот не указан как зависимость, то ничего не произойдёт.
>>33386
Да, но точно так же можно было бы убрать и объекты этой "либы" из зависимостей, но оставить в списке, передаваемом линкеру.
То есть, что у тебя будет
>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 не удет пересобираться. Понятное дело, что с либой удобнее, когда много файлов, вопрос-то в другом. Либа это лишь возможность более удобно организовать всё, как говорил >>32869 (и как мне кажется), или всё же есть какая-то функциональная разница?
> есть какая-то функциональная разница
Принципиальной разницы нет. Это всегда вопрос удобства.
анон,который писал про то что терминал перегружен записями ,судя по всему, прав потому что пустой while(1) все прекрасно ловит , а если добавить туда запись даже одного байтика в stdout все идет пиздой.
Как я уже говорил : 5 к/с это неприемлемо,так что при изменении картинки буду двигать курсор и точечно править,а не писать весь массив без остановки.
Вопрос закрыт.
Свинья же некошерное животное, она не может быть маскотом еврейской расовой энциклопедии.
Интересно сделать что-нибудь с алгоритмами
Чукча, читать научись сначала. И почитай хорошо оформленный код. Потом сам придумаешь себе педопроект.
https://github.com/rby90/project-based-tutorials-in-c
https://github.com/tuvtran/project-based-learning#cc
>>34573
>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.
Оно и видно
операционная система
Ну по существу, научиться програмировать можно программируя. Что понимается под программированием? Вот у меня есть мир. В этом мире есть некая задача. Я могу эту задачу решить вручную (это ВАЖНО, блядь, новички иногда часто забывают, что нельзя автоматизировать то, что ты не понимаешь как сделать вручную), но мне лень либо я не могу её решать достаточно быстро. К примеру я могу вручную рендерить кадры из 3д игры, но это мне мало что даст - моей скорости не хватит чтобы игра шла плавно и работала так, как было задумано. А компьютер может делать это быстро, поэтому приходим к программированию.
Решая подобные задачи, мы учимся программировать.
Читая же чужой код, можно понять, что хотел сказать автор той конкретной программы, которую ты читаешь. А можно не понять. Более важный вопрос - и чё дальше? Чукча, конечно читатель, и чукча может понять, как работает программа некоего дяди, которая делает то-то и то-то. Но что дальше чукча сделает с этими знаниями? Напрашивается ответ - чукча будет либо дебажить программу дяди, либо добавлять к ней фичи. Если чукче это нужно - то флаг ему в руки. Но если нет?
Прошивка для микроконтроллера.
У вас есть какая-то философия, принципы, для чего вы это делаете? Не только же для автоматизации, или только?
Слабо придумать систему в которой будут не нужны модераторы?
Конечно, тут ведь логику надо подключать, это вам не кнопочки делать.
>хочу вкатится
в этот оборот купли-продажи все хотят вкатится, а не в программирование.
>Ну по существу, научиться програмировать можно программируя.
Ну да, а научиться говорить можно только говоря, слушать необязательно. Или можно послушать негров каких-нить - и заговорить на правильном английском.
>Решая подобные задачи, мы учимся программировать.
Вот так и появляется индусский код, который решает задачи (как бы вручную, но быстрее), а значит все хорошо.
Что ты хочешь от нищих.
>Ну да, а научиться говорить можно только говоря, слушать необязательно
Эта аналогия тут для чего? Это аргумент в пользу твоей позиции?
да
возможно
проиграл
Если простой напишешь, то должны взять. Впрочем, можно так отформатировать код, что и не возьмут.
Зачем нужны абсолютно все языки, если все в конце концов собирается в Си?
Зачем нужен Си, если все в конце концов собирается в машинный код?
Ответ: потому что программы на языках программирования пишут для людей, а не компом. Компы и битами/байтами прекрасно довольствуются. Различные языки позволяют программы понятными для людей, что облегчает и их (программ) создание и доработку.
Но тогда страдает производительность, а если программа непроизводительная, и неэффективная, и жирная, то зачем она нужна вообще. Языки это вообще тогда не языки, а просто трансляторы в Си. Это же тупо. Получается, что кроме Си ничего нет и Си это такой же фюрер как и жс, но в мире системного по. Я не могу просто сидеть, когда хеллоу ворды сейчас буквально 10ки мб весят. Это же тупо
что ты несешь? мало что транслируется в си
а про производительность открою тебе истину - железо стоит дешевле времени еба сеньера c/c++, тут как бы рыночек порешал. Да и в подавляющем большинстве итшных задач веб макакинг производительность конкретно твоего кода мало че решает, главное понятный код и sql запросы нормальные пиши, тут не нужен челик, который ебет байты
>Языки это вообще тогда не языки, а просто трансляторы в Си. Это же тупо. Получается, что кроме Си ничего нет и Си это такой же фюрер как и жс, но в мире системного по.
Metaprog, ты? Узнал тебя по шизоидной любви к си.
Есть колибри ос, традиционно помещается на дискету. А толку?
Люди не умеют писать код, для этого нужно знать всю айти область от математики до ангуляров через схемотехнику, цифровуху, ПЛИС, эмбед, оптимизацию, алгоритмы, драйвера, ос, системное по, наконец стеки протоколов и прикладные программы.
Вот такой человек сможет написать реально годную прогу, быстро и на ассемблере, потому что знает как и что устроено и может отсечь ненужные детали на всех этапах.
Но большинство не умеет писать код. Готовые решения, стандартные функции по мануалам, стандартные аргументы, стандартные подходы.
Так что ты пока очень далеко от своей цели, продолжай учиться и постигать Дзен и Дао.
Описание обоих в кратце:
➕Поток “плюсов”
Программа состоит из трех частей:
1. теория (базовая информация по алгоритмам)
2. Язык C
3. Архитектура ЭВМ и ассемблер
#️⃣Поток “шарпов”
Программа состоит из двух частей:
1. Первые три модуля изучается C#
2. В 4 модуле C++ в 4
Так вот то есть по сути выбор между C + asm и потом плюсы и C# и потом плюсы(чуть меньше видимо). Я насколько понимаю первый вариант более предпочтительный так как из C вкатываться в плюсы более естественно чем из шарпов? Че выбрать?
с шарпами проще работу будет найти
Первый вариант даст тебе базу, поэтому выбирай его. Шарпы сможешь сам потом выучить, если надо будет.
вот так и думаю, шарпы с винформами/другой хуйнёй по необходимости вполне можно самому освоить, а вот низкоуровневые вещи лучше под чьим то надзором учить
>железо стоит дешевле времени еба сеньера c/c++, тут как бы рыночек порешал
Эмм, если твой не-ёба джун посчитает скажем числа фибоначчи рекурсивно и эта процедура будет дохуя где использоваться и считать большие числа, то тебя никакое железо не спасёт, я прям сейчас могу показать насколько ощутимое время будет занимать процедура на твоём манятоповом железе. Правда это не проблема си-оптимизаций, а алгоритмическая недоработка, уровень абстракции повыше малёха, но и в мире машинных оптимизаций такого говна пруд пруди, как например разница между копированием массива построчно и постолбцово (один из способов в восемь раз медленнее другого). Всегда есть предел долбоебизму, после которого железо перестаёт спасать.
Два чаю.
я говорил про основную часть задач, которые требует среднестатистический бизнес от среднестатистического программиста.
свои числа фибоначчи от большого числа можешь в универе на первом курсе в качестве лабы сдать либо засунуть себе в жопу.
В стандартной задаче взять откуда-то данные распарсить их и положить в другое место можно и питоном на не-еба джуне сделать. Только купи виртуалочку нормальную, а сдачу оставь джуну на тарелку риса за которую он работает.
Соси хуй, быдло
Хуй знает, лично я их учил сам, так как в универе как раз были только шарп, джава и функции управления (учет, анализ, планирование), лол.
Это все равно что сказать, что часы со стрелками умерли и больше не нужны, ведь есть цифровые. И потом принципиально избегать все случаи, где аналоговые и механические часы просто упоминаются.
То есть ты проводишь мысленно черту через условный 2022 год, когда раст станет популярнее си для новых проектов и говоришь: я работаю только с тем что написано после 22 года. Все остальное вне моей компетенции.
>есть ты проводишь мысленно черту через условный 2022 год, когда раст станет популярнее си для новых проектов и говоришь:
Воу, что-то ты разогнался.
> когда раст станет популярнее си
чет ору в голос
раст не станет популярным продакшн языком, сколько бы его не форсили разные дэлбики.
если кратко то да
если не кратко, то раст - это просто сборник каких-то идей и подходов, которые сейчас будут обкатываться, какие-то удачные уйдут на вооружение в другие языки.
под удачными я понимаю соотношение головной боли самой проблемы к головной боли от решения на расте, которое решает эту проблему. Например борроу чекер - решает UB с памятью, но ценой того что тебя в жопу ебет компилятор, какая боль страшнее? править баги с памятью, или заниматься всякой дрочью типа описывать время жизни ссылки из-за чего код превращается в какую-то вырвиглазную хуиту?
в tiobe 24 перед делфи кек
и то это рейтинг основанный на интересе пользователей,
а всяким смузиглотателям всегда нравлось поизощеренней покалупать себе эйнус, поэтому такие языки в подобных рейтингах обычно на плаву. Но по факту продакшн у него нулевой, да и не скоро появится
Где почитать про семафоры, пайпы, простым языком? Все что гуглил это либо абстрактная статья на вики, либо уже высокоуровневые реализации на с++ с абстракциями из стандартной либы.
Ну то есть я понял, что такое семафор в целом и для чего они используются в программирование, но как они работают в ОС и для чего нужны там, непонятно. Про прерывания тоже хотелось бы почитать.
Благодарю, добрчеловек
Нужен бакенд для PDP11. Собственно помощь нужна в написании этого бакэнда. За меня писать не надо, нужно подсказать как это сделать. Или кооперация.
https://pastebin.com/bug8B3n5
рад любой критике
можете даже обоссать меня
Нет. Не ошибся. Вполне серьёзно. Очень логичная и простая система команд. Для изучения TableGen лучше ничего придумать невозможно.
Вопрос в силе.
хз
у меня же для любого типа массивы, а на макросах типо как дженерики.
а как на функциях? void dynarray_push(void arr, void value)? и все на указателях?
или как надо?
я за основу брал вот эту статью
https://solarianprogrammer.com/2017/01/08/c99-c11-dynamic-array-mimics-cpp-vector-api-improvements/
Ты так решил?
Вот пожалуйста - https://pdp2011.sytse.net/wordpress/download/
Или вот - https://github.com/wfjm/w11
Живая, как видишь.
Преимущества:
1. Красивая и простая архитектура.
2. На 90-нм техпроцессе чип будет размером с блоху.
3. Батарейки от наручных часов хватит на год работы.
4. Идеальная архитектура для интернета вещей.
5. Красивая и простая система команд, чьи идеи не были подхвачены индустрией.
6. Оказал огромное влияние на язык Си.
Ничего лучше не придумаешь, чтобы научиться писать Backend для llvm.
>Ничего лучше не придумаешь, чтобы научиться писать Backend для llvm.
Ну так учись, нам то это говно зачем?
Нам по хуй, уходи
>Нужен бакенд для PDP11
>>45223
>Нет богатырей, способных описать PDP11?
Как бы взять и открыть таблицу команд и написать по ней какую-нибудь фигню ничего не стоит, а вот разобраться с llvm...
Теоретически это было бы интересно, но я не программист и помимо этого у меня есть другие занятия.
>>45272
Все преимущества ни о чем.
>1. Красивая и простая архитектура.
Фигня, можно еще проще.
>2. На 90-нм техпроцессе чип будет размером с блоху.
На всякой простой фигне в любом случае память занимает большую часть площади. А на совсем простой еще и умножитель весьма большой по сравнению с остальным.
>3. Батарейки от наручных часов хватит на год работы.
Нет. Берем MSP430G2203IPW20 в качестве примера наследника PDP-11. Ток потребления без учета токов портов ввода/вывода заявлен 230 µA на 1 MHz. Допустим тактовая частота будет 1 МГц (это при максимальной 16 МГц). Допустим батарейка CR2032 с емкостью 200 мАч, тогда батарейки хватит на 200/(24*0,23)=36 дней. Ну а если использовать режимы пониженного потребления, то от системы команд мало что будет зависеть.
>4. Идеальная архитектура для интернета вещей.
Не нужно. Да и сомнительно про идеальность.
>5. Красивая и простая система команд, чьи идеи не были подхвачены индустрией.
А мне не нравится, в FPGA оно как-то не очень, особенно учитывая возможности блочной памяти.
>а вот разобраться с llvm...
Вот та же беда. Дожить до пенсии и сесть за llvm.
Вижу тебе не интересна PDP-11, но интересна llvm.
Давай вместе разбираться?
>>1. Красивая и простая архитектура.
>Фигня, можно еще проще.
И красивее можно.
> На всякой простой фигне в любом случае память занимает большую часть площади.
Он 16-битный. Сколько мм2 64 Кб статической памяти займёт?
>Допустим тактовая частота будет 1 МГц (это при максимальной 16 МГц)
Допустим 16 МГц. Но с оборванным клоком, подключаемым по необходимости. И картина резко меняется.
>64 Кб статической памяти займёт?
Очевидно что зависит от технологии, но однозначно больше чем "ядро" у простенького микроконтроллера. Вот например внутренности простенького микроконтроллера, у которого всего лишь 256 байт памяти. Логично ожидать что при той же технологии 64 кб займут в 256 раз больше площади, что очевидно будет больше всего остального.
>Но с оборванным клоком, подключаемым по необходимости. И картина резко меняется.
И в таком случае, если не учитывать потребление в активном режиме (допустим его доля мала по сравнению с остальным), потребление в режиме "сна" толком не зависит от системы команд. В режиме standby у MSP430G2203IPW20 заявлено 0.5 μA, но нужно еще учесть потребление периферии. Так вот если микроконтроллер "бодрствует" меньше 0.1% времени, то потребление в активном режиме будет явно меньше остальных факторов и система команд тут не при чем.
Ну и у MSP430 показатель 230 µA/MHz не выдающийся, например у серии EFM32TG заявлено 150 μA/MHz, а это уже простенький ARM.
>>Батарейки от наручных часов хватит на год работы.
У меня были часы наручные, которые работали 2 года на одной тоненькой литиевой батарейке. Поэтому я тоже очень усомнился в этом утверждении.
>>64 Кб статической памяти займёт?
>Очевидно что зависит от технологии, но однозначно больше чем "ядро" у простенького микроконтроллера.
Не я начал эту войну. Пришось рыться в интернетах, дабы найти площадь 64 килобайта ОЗУ.
180 нм - https://www.ijert.org/research/sram-memory-layout-design-in-180nm-technology-IJERTV4IS080677.pdf
90 нм - https://sciendo.com/downloadpdf/journals/cjece/12/1/article-p29.pdf (но без усилителей и без декодера адреса)
https://www.citefactor.org/journal/pdf/Design-and-Analysis-of-8x8-Static-RAM.pdf
Дело не в том что хватит или нет. Как раз вероятно что хватит, только не благодаря системе команд, а из-за режимов пониженного потребления. Недостаточно просто "оборвать клок", нужно еще и включить его по внешнему сигналу, а в промежутке между этим время должно считаться каким-то счетчиком. В часах один только тактовый генератор вероятно будет потреблять больше "процессора", а еще в нормальных часах тактовый генератор должен быть не просто так, а с термокомпенсацией. В свою очередь термокомпенсация это не просто так, там и кварц специальный и отдельно отобранный и сама схема результат отдельного труда.
Для примера вот генератор JSO15B1TR потребляет 1.2 мкА, что уже больше чем потребляет MSP430 в режиме standby. Скажешь это я не тот генератор притащил, а попробуй найти с меньшим потреблением. Впрочем, этого уже хватит на несколько лет работы часов на MSP430, но вовсе не благодаря системе команд. Таким образом, сказки про высокую энергоэффективность системы команд PDP-11 это чушь, оно тут не при чем.
Остальные утверждения про PDP-11 тоже мимо, только о субъективной красоте системы команд не оспоришь, так как у всех разные вкусы.
>>47187
И чем тебе та моя картинка не угодила? По моему вполне доказывает мое утверждение. И я писал только о том, что площадь 64 кБ статической памяти намного больше площади "ядра" простенького микроконтроллера/процессора. Как статьи, которые ты притащил, доказывают или опровергают это утверждение? Никак.
Ладно, тогда можно рассудить иначе. Простейший триггер требует уже два транзистора, а реально 6 транзисторов на бит по твоим ссылкам, соответственно 64 кБ памяти потребует явно больше 64к×8×6=3 млн. транзисторов. Сколько транзисторов займет сам PDP-11 без всего "лишнего"? В 8080 - 4758 транзисторов, в 6502 - 3510 транзисторов, в советском клоне PDP-11 К1801ВМ1 - 16646 транзисторов, если не врут. А 64 кБ памяти потребует в 200 раз больше транзисторов чем "ядро" PDP-11. Может в памяти оно упаковано лучше, не в 200 раз же "ядро" будет "рыхлее".
Дело не в том что хватит или нет. Как раз вероятно что хватит, только не благодаря системе команд, а из-за режимов пониженного потребления. Недостаточно просто "оборвать клок", нужно еще и включить его по внешнему сигналу, а в промежутке между этим время должно считаться каким-то счетчиком. В часах один только тактовый генератор вероятно будет потреблять больше "процессора", а еще в нормальных часах тактовый генератор должен быть не просто так, а с термокомпенсацией. В свою очередь термокомпенсация это не просто так, там и кварц специальный и отдельно отобранный и сама схема результат отдельного труда.
Для примера вот генератор JSO15B1TR потребляет 1.2 мкА, что уже больше чем потребляет MSP430 в режиме standby. Скажешь это я не тот генератор притащил, а попробуй найти с меньшим потреблением. Впрочем, этого уже хватит на несколько лет работы часов на MSP430, но вовсе не благодаря системе команд. Таким образом, сказки про высокую энергоэффективность системы команд PDP-11 это чушь, оно тут не при чем.
Остальные утверждения про PDP-11 тоже мимо, только о субъективной красоте системы команд не оспоришь, так как у всех разные вкусы.
>>47187
И чем тебе та моя картинка не угодила? По моему вполне доказывает мое утверждение. И я писал только о том, что площадь 64 кБ статической памяти намного больше площади "ядра" простенького микроконтроллера/процессора. Как статьи, которые ты притащил, доказывают или опровергают это утверждение? Никак.
Ладно, тогда можно рассудить иначе. Простейший триггер требует уже два транзистора, а реально 6 транзисторов на бит по твоим ссылкам, соответственно 64 кБ памяти потребует явно больше 64к×8×6=3 млн. транзисторов. Сколько транзисторов займет сам PDP-11 без всего "лишнего"? В 8080 - 4758 транзисторов, в 6502 - 3510 транзисторов, в советском клоне PDP-11 К1801ВМ1 - 16646 транзисторов, если не врут. А 64 кБ памяти потребует в 200 раз больше транзисторов чем "ядро" PDP-11. Может в памяти оно упаковано лучше, не в 200 раз же "ядро" будет "рыхлее".
>64 кБ памяти
На всякий случай уточню что статической памяти, тем более ты сам первый написал о статической памяти.
Насчёт картинки. С тем, что статическая память занимает больше ядра процессора, я не спорил. Я лишь утверждал что техпроцессе 90 нм всё это поместится на чипе, размеров с блоху. Условно 1-2 мм2 достаточно для простого чипа.
Конкретно за PDP-11 - двухадресная система команд, интересные режимы адресации, автоинкремент/автодекрмемент.
Оно конечно дико для любителей ARM.
Ладно, спорить дальше не вижу смысла. MSP 430 довольно близко к PDP-11, пойду изучать TableGen для него.
Кстати, ты чем занимаешься? Признался что не программист.
>С тем, что статическая память занимает больше ядра процессора, я не спорил. Я лишь утверждал что техпроцессе 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 я читать никогда не буду, но мало ли?
Плюс, хранить же его где-то ещё надо, чтобы закрыть потом. Или можно забить и, закрывая мастер, слейв сам закроется тоже?
>Или можно забить и, закрывая мастер, слейв сам закроется тоже?
Не, проверил, вроде ничего само не закрывается.
>m_fd = openpt() // 3
>s_fd = open(ptsname(m_fd)) // 4
>close(m_fd)
>m_fd = openpt() // 3
>m2_fd = openpt() // 5
Вот лучшее руководство для вката. Начинать с этого - https://opus4.kobv.de/opus4-fau/files/1108/tricore_llvm.pdf
После него и остальные доки станут понятнее.
Операционка.
>Я вообще не знаю, какие есть возможности у этого языка.
Так узнай. Ты же учишься, вот и учись.
>Я вообще не знаю, какие есть возможности у этого языка.
The C programming Language By Brian W. Kernighan and Dennis M. Ritchie.
>Я вообще не знаю, какие есть возможности у этого языка.
Никаких. Си - мультиплатформенный язык. Такм образом, возможности есть у конкретных платформ. Берешь платформу и изучаешь её возможности.
if (числа != числа с 1 по 10)?
Чтоб программа сравнивала число с рядом чисел 1-10 и если не совпадает с числами с 1 по 10 выполняло это самое if?
Искал в интернетах, но мне предлагает только распечатать числа с 1-10, но мне нужно лишь записать коротко набор чисел с 1 по 10 для условия.
Спасибо, твой вариант чутка логичнее моего изначального.
Но какого-то более короткого варианта указать набор чисел с 1 до 10 по типу 1->10 нету?
>>51446
>>51512
>>51540
> if (число >= 1 && число <= 10)
Это варождается в 4 (ЧЕТЫРЕ!!!) машинных инструкции!!! Это мало, никакме Пайтоны никогда не смогут это повторить.
>Но какого-то более короткого варианта указать набор чисел с 1 до 10 по типу 1->10 нету?
if( ((unsigned int) (i-1)) > 9 )
На х86 это три машинных инструкции, но работать будет работать быстрее, потому что один бранч вместо двух, а не потому что на одну инструкцию меньше
Если i изначально беззнаковое, то приводить к беззнаковому не нужно, если знаковое - то обязательно, иначе компилятор не поймёт чего от него хочешь.
Эх, детишки, ничего хорошего из вас не выйдет, если вы основ не понимаете. И да, я не проверял с компилятором - если ошибся, то сс компилятором в руках бы стразу это увидел и поправил.
>указатель на число и массив - суть одно и то же
>массив указателей - массив массивов
>т.е. двумерный массив
>т.е. двумерный массив
Пиздабольство. int array[][] и int* array[] - разные вещи. Ведут себя схоже, но компилятор их по-разному рассматривает.
>if( ((unsigned int) (i-1)) > 9 )
тут наверное инверсия надо, чувак же просит от 1-10 а не за пределами.
си хоть и старый но новые сандарты появляются, хоть и редко
а эта книга вообще про самый первый стандарт
мимо С++ боярин
Алсо, раньше тоже писал на си и думал это круто, когда был молодой.
Там изменения выходят косметические, а не посоны, давайте сделаем g 14.88 для прикола.
ну могли бы уже и норм изменения добавить тогда, пидоры
такой крутой язык, но морально устарел уже
>никакме Пайтоны никогда не смогут это повторить.
М-метапрограммирование.
На любом языке можно сгенерить твои три байта, дед. Чекни litex проект https://github.com/enjoy-digital/litex где на питоне генерируют верилог.
>Ряяя неэффективно это же Пайтон!!!!! ДОЛБОЕБ!1111
Повторяю для танкистов, python - это генератор. Ты же gcc не добавляешь в каждый проект, чтобы запустить его? Вот и пайтон нужен только на компе.
А качество кода по прежнему зависит только от тебя.
Ты путаешь байты и машинные инструкции.
Вот когда на Пайтоне сможешь показать подобное, как на картинке, тогда приходи.
А то, что теоретически возможно, а на практике не существует, то и смысла не имеет.
> Чекни litex проект https://github.com/enjoy-digital/litex
Чекнул. Нуууууу такое. Штука чтобы скомпоновать готовые корки. Просто более высокий уровень абстракции. Ничего серьёзного он не умеет.
>Он чекнул! и вынес экспертное мнение
>Поясняет человеку который написал на нем несколько ip ядер, что все это несерьёзно
Ой иди нахуй. Когда уже вайти придут профессионалы и вытеснят казуалов.
Резко разбежался, сделал реверанс, и выложил какой-то непонятной хуйне свои наработки, чтобы не дай бог она не подумала что я пизжу.
Да ради бога, можешь думать что я пиздабол. Скатертью дорога, твой долбоебизм исправлять и еще твою пацанскую риторику слушать? Сам ебись. Квота на вежливость исчерпана, соси баранку.
Тебе, пиздаболу, достаточно было показать как этот тул генерит always@(posedge i_clk or posedge i_rst) и его внутреннисти на простейшем примере, и твой оппонент сдулся бы и промолчал.
Что? Не умеет? Тогда нахуй идёшь ты.
Но ещё не поздно доказать что умеет, если умеет.
Ну конечно, главное же давануть, а не разобраться. Ну ты к нему обращайся в следующий раз, он норм чёткий пацан все пояснит по факту. А таких как я опущей надо со двача гнать нахуй вообще. Никакой пользы один пиздеж. Вон тот чёткий пацан сразу раскусил пиздабола, поставил на место. Теперь у него срака гореть будет полтреда.
>>53461
>твой оппонент сдулся бы и промолчал.
Хоть раз такое было? Ты хоть раз признавал свою неправоту и забирал все свои оскорбления назад? Вот садись теперь и сам гугли, понятийный петушок, если тебе интересно, а я пиздабол, мне верить нельзя! Меня тут конкретно приложили и поделом! Норм пацаны таких не любят.
Норм пацаны должны друг с другом перетереть нормально такие вопросики и решить четенька, а опущи не нужны.
>как этот тул генерит
Молча генерит, когда нужно, ведь это типичный бойлер.
В общем главное мы выяснили - я пиздабол, а ты пацан чёткий. Всем спасибо, всем удачи. Я должен съебать с треда, что я и сделаю.
И пусть такой опус не вызовет ни у кого подозрение, что проект годнота, которую я пытаюсь скрыть. Нет, проект говно. Не гуглить.
Я одного не пойму - у тебя осеннее обострение или очередной непризнанный гений? Или и то, и другое?
Чем опусы строчить, показал бы два скриншота - реализацию простейшего счётчика или дешифратора на Питоне и сгенерённый тулом код на Верилоге. Всё! Вопросы сразу отпали бы. А кто-нибудь может быть заинтересовался бы. И ушёл бы ты довольный и важный. Но вместо этого нервничаешь и топаешь ногами. Зачем так жить?
Так-то есть и 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?
Ты просто хочешь уломать меня все тебе разжевать, раз на понт не удалось взять, чтобы потом снова "обосрать".
Соси баранку.
Ситуация сейчас такая:
Я один владею информацией (пока что).
Я представляю одну сторону. Ты и тот анон представляете вторую сторону, которая враждебна ко мне.
Таким образом ты не имеешь права что-либо у меня просить, ты и не просишь, а включаешь разводки.
Очевидно, тебе не похуй на информацию, которой я владею, хоть она и общедоступна. Вот ты и начинаешь вертеться.
Так что мой ответ прост: гугли, изучай и расскажи всему треду о прекрасном мире метапрогинга
А у меня по ходу уже теневой бан за офтоп, тред пришлось искать поиском, хотя до бамплимита далёко.
>Я одного не пойму
Перевод темы. Напоминаю, что я уже пошел нахуй и пиздабол. Не общайся с пиздаболом.
>- у тебя осеннее обострение или очередной непризнанный гений? Или и то, и другое?
Сделал реверанс, и побежал опровергать. Ты понятия не имеешь о том, кто такие гении, и если уж Литекс гениальный, то гении французы которые его придумали, а не я.
> Всё! Вопросы сразу отпали бы.
Изначально я доказал, что любой язык может сгенерировать любой код. Как видишь, вопросы не только не отпали, но я стал изгоем.
>А кто-нибудь может быть заинтересовался бы. И ушёл бы ты довольный и важный. Но вместо этого нервничаешь и топаешь ногами. Зачем так жить?
Ахахха, клоун изображает товарища, давит на справедливость, живёт только ради денег и думает что понял жизнь.
Довольным и важным хочешь быть ты >>53461 поэтому ты и занял сейчас высокую моральную позицию а мне изначально плевать на ваше отношение ко мне. Ты пытаешься продать мне свое одобрение в обмен на мою информацию.
Но видишь ли, срал я на твое одобрение. Почему? Ну ты же сам выбрал ты сторону, а меня поставил в изгои всего двача. Сделка срывается. Моральный авторитет из ауешника так себе.
>Так-то есть и C-to-Verilog конверторы, а толку?
Мда, ты прав, прав. Я же не спорю с тобой. Я уже признал что я пиздабол.
>Ну так что с регистрами и клоками
Как же ты изворачиваешься, даже "твоего" взял в кавычки чтобы заставить меня оправдываться. Ну давай пооправдываюсь.. Так он не мой, я вообще ни разу не претендую. Это ты все на себя одеяло тянешь, я даже не претендую на истину. Да, я понимаю как изнутри он работает, но он ни разу не мой.
Кабаны, вам придется сменить интонации чтобы получать годноту на форумах, мир меняется. Ваш гоп-стоп стиль общения уже не будет работать.И вы перестанете получать бабло, ради которого живёте.
Ты просто хочешь уломать меня все тебе разжевать, раз на понт не удалось взять, чтобы потом снова "обосрать".
Соси баранку.
Ситуация сейчас такая:
Я один владею информацией (пока что).
Я представляю одну сторону. Ты и тот анон представляете вторую сторону, которая враждебна ко мне.
Таким образом ты не имеешь права что-либо у меня просить, ты и не просишь, а включаешь разводки.
Очевидно, тебе не похуй на информацию, которой я владею, хоть она и общедоступна. Вот ты и начинаешь вертеться.
Так что мой ответ прост: гугли, изучай и расскажи всему треду о прекрасном мире метапрогинга
А у меня по ходу уже теневой бан за офтоп, тред пришлось искать поиском, хотя до бамплимита далёко.
>Я одного не пойму
Перевод темы. Напоминаю, что я уже пошел нахуй и пиздабол. Не общайся с пиздаболом.
>- у тебя осеннее обострение или очередной непризнанный гений? Или и то, и другое?
Сделал реверанс, и побежал опровергать. Ты понятия не имеешь о том, кто такие гении, и если уж Литекс гениальный, то гении французы которые его придумали, а не я.
> Всё! Вопросы сразу отпали бы.
Изначально я доказал, что любой язык может сгенерировать любой код. Как видишь, вопросы не только не отпали, но я стал изгоем.
>А кто-нибудь может быть заинтересовался бы. И ушёл бы ты довольный и важный. Но вместо этого нервничаешь и топаешь ногами. Зачем так жить?
Ахахха, клоун изображает товарища, давит на справедливость, живёт только ради денег и думает что понял жизнь.
Довольным и важным хочешь быть ты >>53461 поэтому ты и занял сейчас высокую моральную позицию а мне изначально плевать на ваше отношение ко мне. Ты пытаешься продать мне свое одобрение в обмен на мою информацию.
Но видишь ли, срал я на твое одобрение. Почему? Ну ты же сам выбрал ты сторону, а меня поставил в изгои всего двача. Сделка срывается. Моральный авторитет из ауешника так себе.
>Так-то есть и C-to-Verilog конверторы, а толку?
Мда, ты прав, прав. Я же не спорю с тобой. Я уже признал что я пиздабол.
>Ну так что с регистрами и клоками
Как же ты изворачиваешься, даже "твоего" взял в кавычки чтобы заставить меня оправдываться. Ну давай пооправдываюсь.. Так он не мой, я вообще ни разу не претендую. Это ты все на себя одеяло тянешь, я даже не претендую на истину. Да, я понимаю как изнутри он работает, но он ни разу не мой.
Кабаны, вам придется сменить интонации чтобы получать годноту на форумах, мир меняется. Ваш гоп-стоп стиль общения уже не будет работать.И вы перестанете получать бабло, ради которого живёте.
@ Видишь как новый-питонский поясняет за высокоуровневость Си
@ С улыбкой глотаешь чай и листаешь дальше
@ Познавшие Си-дзен мужики дают отпор набежавшим с змеиного треда порриджам с такой мощью что выстраивают из ячеек стека лестницу к богу
@ Довольно урча пододвигаешь свой старенький Thinkpad поближе и видишь что питонисты уже собрали все абстракции с питона и стреляют ими в щиты Си воинов.
@ Пока сие снаряды летели к цели Си бойцы уже адресовали свои "ячейки памяти" прямо в змеиное дупло
А всё потому что порриджи не могут в холодное оружие а дерутся дилдаками и доказывают что дилдаки режут лучше клинка
"
>Syntax:
>ClassName ObjectName;
>>54946
Ну да, я действительно высрал код на крестах, щито поделать.
>этот прав
Лев.
>аже если брать этот пример, то это далеко далеко явно не решающий фактор
Ну был бы это единственный пример, я бы конечно согласился. Ты просил именно пример привести, ты не просил на сто страниц начинать рассказ про всё-всё-всё, это ты и сам можешь погуглить, если не можешь в кресты, а если можешь то ты ещё красочнее меня про всю эту пиздаболию расскажешь.
Так я то на крестах уже давно пишу, и то что ты привел даже за пример нельзя рассматривать.
Просто си - это реально устаревшая, небезопасная, хуита, которая должна быть заменена либо на С++ либо на раст, максимум для чего может использоваться си это объявление интерфейсов к либам, которые прямо требуют совместимости с си или импорты в другие яп ( и то это тоже не безопасно ).
Но как язык, сам по себе си - кусок говна, где даже адекватных стандартизированных контейнеров еще не завезли и не завезут.
Как вообще можно расценивать язык где ты работаешь с голой памятью, и довольно слабой типизацией, где нету дженириков, и где чтобы даже написать какой-то общий объектно-подобный код напирмер контейнер аля std::vector ты этого не можеш сделать и тебе приходится приводить типы в void* чтобы хранить как-то указатели на структуры.
Короче хуита полная.
По скорости С++ не уступает Си, а в некоторых моментах даже превосходит ее из-за лучшей оптимизации, вместо кривых васяподелок имитирующих кострукции из нормальных языков.
Я не говорил будто си это новая хуита, но кресты вообще нихуя не лучше если именно с си сравнивать, там все детские болезни сишки на месте, плюс свои.
Дальше не читал.
Да ты просто С++ не знаешь вообще, раз так считаешь.
Приведи пример какие это там детские болезни из си? С++ и Си это два разных языка уже давно, которые не совместимы друг с другом.
О, это как раз вытекает из уже сказанного. Могу привести, конечно. Если приведу, ты перестанешь сопротивляться и пойдёшь нахуй?
Лол, так кресты я не говорю что кресты идеал, но по крайней мере за последние годы они сильно улучшились и работа по их улучшению постоянно ведется, в отличие от богом забытого говно си, который нахуй ни кому не нужен и лучшее, что случалось с си это появление С++.
Но сравнивать си с с++ это либо надо быть полным нубом и в том и в другом, либо полным идиотом.
Давно бы уже привел и я бы это быстро и легко опроверг, чем сидеть тут и копротивляться правде.
Ты еблан? Че за хуйню ты несешь?
Ты мне тут затираешь что си лучше с++, я спрашиваю чем, ты по факту не можешь ответить и все что от тебя я слышу это "бэ-мэ эмм кхмм эээ" вот и все. Ты просто лох, который ни си не знает, ни с++ и все чем можешь ты оперировать - это твои иллюзии основанные на чужом мнении.
Что не улучшилось как это концепт — кресты были и остаются маркетинговым буллщитом, пытающимся сидеть на двух стульях — у нас с одной стороны типа ооп, с другой стороны язык типа как для неуправляемого окружения. В итоге у нас нет инкапсуляции как в компайл- так и в рантайме, т.е. нет ооп, но для неуправляемого окружения наш язык сложен и переполнен ненужным нерабочим дерьмом. Сишный код хотя бы реально дебажить.
Можно писать на крестах как на си, используя по минимуму возможности крестов, тогда будет получаться что-то рабочее. Собственно это и делается в геймдеве, где неоднократно признавались что пишут си-стайл код, но как бы формально проект на крестах, чтобы разрабов было проще найти.
Мань, я по факту привёл тебе пример, и всё что ты нашлась высрать в ответ это "мм ну это нищитово это хуйня пример мне он не нравиться". Никто к тебе, собаке с гонором, не подряжался учить тебя всему на свете, тебя подрядились обоссать и обоссали.
Ты мне лучше расскажи, каким именно ты образом определяешь бегло глядя на код, чем именно является НИГГА, чтобы понять что именно за синтаксическое недоразумение перед тобой? Как только ты начнёшь отвечать на этот вопрос, ты выудишь ещё пачку СЛОЖНОСТЕЙ языка, и одну широко известную не пофикшенную с сишки детскую болезнь, которую уже давно победили везде кроме си- и крестоговна. Назовёшь какую — с тобой будет разговор.
Ты хоть сам понял, что сказал? Что за неуправляемое окружение? С хуяли нет инкапсуляции? Ты о чем? Что тебе мешает дебажить с++ код?
>Можно писать на крестах как на си, используя по минимуму возможности крестов, тогда будет получаться что-то рабочее.
Тогда будет точно такое же говно аля си с классами. Никто так уже давно не пишет с появлением новых стандартов.
>Собственно это и делается в геймдеве, где неоднократно признавались что пишут си-стайл код, но как бы формально проект на крестах, чтобы разрабов было проще найти
Лол, ты хоть раз открывал исходники анрила?
>>55056
Ты че несешь, шизло? Что ты по факту привел? Нихуя. Ты нулина не знающая ни си ни с++, лучше нахуй съеби от сюда учить уроки или чем ты там занимаешься, в пятерочке кассиром работаешь и мечтаешь о вкате в айти? Это тебя тут я обоссал, недоносок сопливый.
>НИГГА
Ясно, и этому школьнику я еще что-то отвечаю, просто нахуй послан, тиктокерский выблядок.
Да, я понял, что сказал. А ты, судя по всему — нихуя. Ещё раз, для терминальных дегенератов — я не буду бесплатно объяснять почему 2+2 это четыре, а не пять.
>огда будет точно такое же говно аля си с классами.
Понятное дело, но это будет работать, а "по новым стандартам" превратится в помойное легаси ещё до того, как будет дописано.
>Лол, ты хоть раз открывал исходники анрила?
Нет, и что бы мне это дало? Ах да, в мире же нет ничего, кроме одобренного лично тобой.
Дальше уже вообще какое-то каканье ртом, не на что отвечать, научись мысли оформлять в предложения.
>Да, я понял, что сказал.
Конечно, твой делирий ясен только тебе.
>я не буду бесплатно пук среньк я просто нулина не могущая ничего доказать и привести какие либо аргументы т.к. мне 15 лет и я тупорылый школьник выебовающийся на форумах, против взрослых опытных разработчиков.
>Понятное дело, но это будет работать, а "по новым стандартам" превратится в помойное легаси ещё до того, как будет дописано.
Хуйню не неси, урод интеллектуальный.
>Нет, и что бы мне это дало? Ах да, в мире же нет ничего, кроме одобренного лично тобой.
Дальше уже вообще какое-то каканье ртом, не на что отвечать, научись мысли оформлять в предложения.
Ставит под сомнение всемирно признанный топовый игровой движок на острие технологий.
Конечно, ты не читал, тебе бы это нихуя не дало, потому что ты бы нихуя не понял, потому что ты нулина ебаная, которую я тут обоссал с ног до головы и лучше бы тебе перестать мне отвечать во избежание дальнейших унижений и траты моего времени на бессмысленные разговоры с анскильным дауном не знающим хоть малейшей матчасти того, о чем он спорит.
Ага, уже читаю, чекай.
Если я в первых строках не вижу объяснения как ты будешь понимать чем является НИГГА в первоначальном примере — я не вижу от тебя конструктива, соответственно не ощущаю в себе желания с тобой дискутировать. Сначала объясняешь, как выясняешь чем является выражение внутри скобок AAAAA BBBB(CCC); , далее с тобой может вестись какой-то разговор, в противном случае ты либо вообще не понимаешь о чём речь, и в этом случае ты не нужен, либо понимаешь и знаешь куда это тебя заведёт, и боишься обосраться потому что ты крутой и пришёл всем всё доказывать, а не узнавать новое, и в этом случае ты не нужен вдвойне. Чем является CCC, опиши алгоритм как это узнать, время пошло.
> С хуяли нет инкапсуляции?
Когда ты меняешь код в приватном члене класса, приводит ли это к необходимости перекомпиляции всех, кто этот класс использует, ответ либо да либо нет.
Ты схуяли, дух анскильный, со мной в таком тоне разговариваешь? Это ты там за монитором такой смелый? Попробуй ебани что-нибудь подобное на реальном собесе по с++, если тебя оттуда ссаными тряпками сразу не прогонят, хотя бы посмеются. Хотя ты даже первоначальный отбор не пройдешь, чтобы тебя туда вызвали...
Ладно, я с тобой разговор уже закончил и тем более не буду отвечать на твои жалкие тупорылые примеры из учебников уровня beginner по с++98, тем более которые уже потеряли актуальность лет 10 назад.
Долбоеб, пойми, что си язык которому уже хуева туча лет, который создавался в другие времена, когда твой дед за пару килобайт памяти в жопу давал, и что тогда были совершенно другие возможности и требования да и языки особо не умели проектировать и это было реально лучше альтернативой, чем ебашить на фортране или ассемблере, с тех пор времена изменились и те ебучие метода и конструкции, что были в си уже сейчас в современном мире не нужны ни в какой сфере, все пытаются избавиться от си, потому что понимают что это устаревшее очень небезопасное говно, на котором стабильнй софт сделать довольно трудно. Даже в ядро линукс уже сейчас раст внедряют. Никто из адекватных людей не считает си пиздатым языком. Единственный верный шаг по искоренению этого говна из мира разработки по, был создание с++, который медленно из надстройки над си перерос в совершенно другой язык, из которого постепенно выкидывали этот ебучий мусор си наследия, и до сих пор продолжают этим заниматься, потому что невозможно было моментальной перейти на что-то другое, когда существует огромнейшая база кода написанного на си. Постепенно все это легаси дерьмище переписывают на нормальные языки, но лишь бы избавиться от злоебучего си. Да ты хоть открой рынок вакансий разработчика на чистом си вообще не найти, единственная работа оставшаяся на си это поддержание\перепиливание легаси говна на нем. Все давно уже пишется на С++, драйвера, ядра ОС, критические компоненты систем различных систем, HFT, автомобильная промышленность. Просто преимущество с++ в том что ты не платишь за то что не используешь, но в то же время имеешь скорость сравнимую с нативной к железу, такую же как на си, только код получается в разы более безопасным при условии использования концепций С++ типа RAII. Вот и все. И как бы ты не тужился, как бы ты не хотел, как бы у тебя не свербило в жопе от этого, си как был говном по современным меркам так им и останется.
Так что сейчас предлагаю тебе просто пойти нахуй и больше не возникать тут.
Ты схуяли, дух анскильный, со мной в таком тоне разговариваешь? Это ты там за монитором такой смелый? Попробуй ебани что-нибудь подобное на реальном собесе по с++, если тебя оттуда ссаными тряпками сразу не прогонят, хотя бы посмеются. Хотя ты даже первоначальный отбор не пройдешь, чтобы тебя туда вызвали...
Ладно, я с тобой разговор уже закончил и тем более не буду отвечать на твои жалкие тупорылые примеры из учебников уровня beginner по с++98, тем более которые уже потеряли актуальность лет 10 назад.
Долбоеб, пойми, что си язык которому уже хуева туча лет, который создавался в другие времена, когда твой дед за пару килобайт памяти в жопу давал, и что тогда были совершенно другие возможности и требования да и языки особо не умели проектировать и это было реально лучше альтернативой, чем ебашить на фортране или ассемблере, с тех пор времена изменились и те ебучие метода и конструкции, что были в си уже сейчас в современном мире не нужны ни в какой сфере, все пытаются избавиться от си, потому что понимают что это устаревшее очень небезопасное говно, на котором стабильнй софт сделать довольно трудно. Даже в ядро линукс уже сейчас раст внедряют. Никто из адекватных людей не считает си пиздатым языком. Единственный верный шаг по искоренению этого говна из мира разработки по, был создание с++, который медленно из надстройки над си перерос в совершенно другой язык, из которого постепенно выкидывали этот ебучий мусор си наследия, и до сих пор продолжают этим заниматься, потому что невозможно было моментальной перейти на что-то другое, когда существует огромнейшая база кода написанного на си. Постепенно все это легаси дерьмище переписывают на нормальные языки, но лишь бы избавиться от злоебучего си. Да ты хоть открой рынок вакансий разработчика на чистом си вообще не найти, единственная работа оставшаяся на си это поддержание\перепиливание легаси говна на нем. Все давно уже пишется на С++, драйвера, ядра ОС, критические компоненты систем различных систем, HFT, автомобильная промышленность. Просто преимущество с++ в том что ты не платишь за то что не используешь, но в то же время имеешь скорость сравнимую с нативной к железу, такую же как на си, только код получается в разы более безопасным при условии использования концепций С++ типа RAII. Вот и все. И как бы ты не тужился, как бы ты не хотел, как бы у тебя не свербило в жопе от этого, си как был говном по современным меркам так им и останется.
Так что сейчас предлагаю тебе просто пойти нахуй и больше не возникать тут.
Скрыто с первых слов. Учись в коммуникацию.
Если я в первых строках не вижу объяснения как ты будешь понимать чем является НИГГА в первоначальном примере — я не вижу от тебя конструктива, соответственно не ощущаю в себе желания с тобой дискутировать. Сначала объясняешь, как выясняешь чем является выражение внутри скобок AAAAA BBBB(CCC); , далее с тобой может вестись какой-то разговор, в противном случае ты либо вообще не понимаешь о чём речь, и в этом случае ты не нужен, либо понимаешь и знаешь куда это тебя заведёт, и боишься обосраться потому что ты крутой и пришёл всем всё доказывать, а не узнавать новое, и в этом случае ты не нужен вдвойне. Чем является CCC, опиши алгоритм как это узнать, время пошло.
Чё типа у меня подгореть должно от того что ты за мной повторяешь? Напротив, мне приятно видеть твою бессильную злость.
>Как вообще можно расценивать язык где ты работаешь с голой памятью, и довольно слабой типизацией, где нету дженириков, и где чтобы даже написать какой-то общий объектно-подобный код напирмер контейнер аля std::vector ты этого не можеш сделать и тебе приходится приводить типы в void* чтобы хранить как-то указатели на структуры.
>Короче хуита полная.
В голанге дженериков тоже нет, ну и что с того? Всякие поделия для клауд инфраструктуры на нем отлично заходят.
Все остальное в какой-то мере связано с тем, что Си - это доисторическая древность, его проектировали таким образом, чтобы получился язык пригодный для системного программирования и чтобы компилятор Си можно было очень быстро написать для любой архитектуры тех времен. Тогда из других языков был фортран, кобол и ассемблер, первые два для системного программирования не шибко годились, поэтому компиляторы деды писали на асме. Вот и подумай, каких усилий бы стоило им включить в язык дженерики? Ты бы еще начал жаловаться на то, что в начале 70-х деды не додумались до того, чтобы написать борроу-чекер.
В те времена на безопасность было всем тотально похуй, лишь бы работало кое-как и жрало относительно мало ресурсов, которые были на вес золота.
Омега-униженец, ты еще тут? Я думал уже ты совершил героический самовыпил и очистил этот мир от своих наивных шизоидных фантазий о языках программирования. Нет, же ты все просишь еще мочи себе лицо, снова и снова. Как только у тебя хватает терпения, выносить такое обращение к себе? Наверное ты какой-то мазохист извращенец который любит себе дергать анус и когда его макают в говно.
Пойми, ты просто тупая бездарность, которая никогда никем не станет и твой максимум это сидеть в этих тредах и кидаться чужим мнением без какого либо понимания сути, я это понял, кто ты только начал открывать свой рот и откуда стал выливаться этот бессмысленный шизойдный бред тупорылого школьника с синдромом дефицита внимания. Ты же просто больное животное, которое возможно еще и опасно для общества, я бы на месте твоих родителей вообще бы усыпил тебя, от греха подальше, чтобы не убил случаем никого, хотя ты скорее всего такое омежъе чмо, что в реальности вряд ли тебе хватает смелости даже открывать свой рот и отрывать взгляд от пола, лол.
Просто обдаю твою тупую физиономию измазанную в говне за все эти посты еще мощной струей своей мочи и пойду открою себе пива, а потом выебу свою топ тян, пока ты будешь с дрожащими руками набивать мне свой жалкий ответ, на то что тебе все равно, про свои бредовые ААА ССС БББ и прочий твой шизойдный бред который мне абсолютно не интересен.
Просто почувствуй разницу: я сеньор на высокооплачиваемой работе, а ты жалкий безработный анскил над которым я глумлюсь убивая пару мин своего свободного времени, в перерыве между важными делами. Харьк тфу на тебя, животное))
>>55330
В голанге есть интерфейсы и какое-то подобие системы типов + сборщик мусора, а вообще голанг же для даунов макак. Так что похуй что там есть, язык то тоже говно, но хотя бы безопасное, в отличие от си.
>Тогда из других языков был фортран, кобол и ассемблер, первые два для системного программирования не шибко годились, поэтому компиляторы деды писали на асме. Вот и подумай, каких усилий бы стоило им включить в язык дженерики? Ты бы еще начал жаловаться на то, что в начале 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. По-моему, очень круто! Ну, программистам скорее всего такой расклад не очень понравится — мало кто любит быть винтиком в системе.
Омега-униженец, ты еще тут? Я думал уже ты совершил героический самовыпил и очистил этот мир от своих наивных шизоидных фантазий о языках программирования. Нет, же ты все просишь еще мочи себе лицо, снова и снова. Как только у тебя хватает терпения, выносить такое обращение к себе? Наверное ты какой-то мазохист извращенец который любит себе дергать анус и когда его макают в говно.
Пойми, ты просто тупая бездарность, которая никогда никем не станет и твой максимум это сидеть в этих тредах и кидаться чужим мнением без какого либо понимания сути, я это понял, кто ты только начал открывать свой рот и откуда стал выливаться этот бессмысленный шизойдный бред тупорылого школьника с синдромом дефицита внимания. Ты же просто больное животное, которое возможно еще и опасно для общества, я бы на месте твоих родителей вообще бы усыпил тебя, от греха подальше, чтобы не убил случаем никого, хотя ты скорее всего такое омежъе чмо, что в реальности вряд ли тебе хватает смелости даже открывать свой рот и отрывать взгляд от пола, лол.
Просто обдаю твою тупую физиономию измазанную в говне за все эти посты еще мощной струей своей мочи и пойду открою себе пива, а потом выебу свою топ тян, пока ты будешь с дрожащими руками набивать мне свой жалкий ответ, на то что тебе все равно, про свои бредовые ААА ССС БББ и прочий твой шизойдный бред который мне абсолютно не интересен.
Просто почувствуй разницу: я сеньор на высокооплачиваемой работе, а ты жалкий безработный анскил над которым я глумлюсь убивая пару мин своего свободного времени, в перерыве между важными делами. Харьк тфу на тебя, животное))
>>55330
В голанге есть интерфейсы и какое-то подобие системы типов + сборщик мусора, а вообще голанг же для даунов макак. Так что похуй что там есть, язык то тоже говно, но хотя бы безопасное, в отличие от си.
>Тогда из других языков был фортран, кобол и ассемблер, первые два для системного программирования не шибко годились, поэтому компиляторы деды писали на асме. Вот и подумай, каких усилий бы стоило им включить в язык дженерики? Ты бы еще начал жаловаться на то, что в начале 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. По-моему, очень круто! Ну, программистам скорее всего такой расклад не очень понравится — мало кто любит быть винтиком в системе.
>Как вообще можно расценивать язык где ты работаешь с голой памятью
Самое смешное что в крестах ты точно так же работаешь с голой памятью, ровно с момента как в твоей программе появляется баг.
Всё, вася, нет тут больше твоих объектиков сраных, потому что кресты это язык для стрельбы в ногу, такой же как си, но только себя таковым в силу субъективных причин не считающий. Любой указатель в любой точке кода в любой момент позволяет взять и переписать любой участок твоей говнопрограммы, хоть всю её дерьмом залить, и ебал он в рот твои прайваты, и удачи тебе, когда ты писал объектики, но дебажишь ОПЕРАТИВНУЮ ПАМЯТЬ перемешанную с говном. Это тебе не джавы с питонами, где рантайм физически не позволит программе залезть и поменять приватный член класса, это кресты это хардкор, это не для слабых.
>где нету дженириков
А какие дженерики есть в крестах? Кривые и убогие. Они не являются кодом (но при этом они разворачиваются только во время компиляции и никогда иначе), они перекомпилируются по 100500 раз потому что в крестах, как и в си, нет возможности находить местоположение кода по его имени и т. д. и т. п.
В си, как и в крестах, есть макросы, поэтому говорить об отсутствии метапрограммирования в си просто смешно.
Скрыто с первых слов. Учись в коммуникацию.
Если я в первых строках не вижу объяснения как ты будешь понимать чем является НИГГА в первоначальном примере — я не вижу от тебя конструктива, соответственно не ощущаю в себе желания с тобой дискутировать. Сначала объясняешь, как выясняешь чем является выражение внутри скобок AAAAA BBBB(CCC); , далее с тобой может вестись какой-то разговор, в противном случае ты либо вообще не понимаешь о чём речь, и в этом случае ты не нужен, либо понимаешь и знаешь куда это тебя заведёт, и боишься обосраться потому что ты крутой и пришёл всем всё доказывать, а не узнавать новое, и в этом случае ты не нужен вдвойне. Чем является CCC, опиши алгоритм как это узнать, время пошло.
>крестах ты точно так же работаешь с голой памятью, ровно с момента как в твоей программе появляется баг.
Если ты криворукий уебок пишущий на си с классами то да, а если нормальный пацан, пишущий на с++ то нет.
>Любой указатель в любой точке кода в любой момент позволяет взять и переписать любой участок твоей говнопрограммы
Такое исключено но этапе компиляции, если ты работаешь с типами, а не с голой памятью.
>А какие дженерики есть в крестах?
Очень мощные, называется метапрограммирование.
>разворачиваются только во время компиляции
Да и предотвращают большинство ошибок еще на этапе компиляции. Круто же.
>они перекомпилируются по 100500 раз
Они инстанцируются один раз под каждый использованный в них тип.
>В си, как и в крестах, есть макросы
>метапрограммирования
Лол, макросы это не метапрограммирование, это текстовый препроцессор, и сравнивать их просто смешно.
И в С++ от этого говна постепенно избавляются.
>>55399
>МАААААМ СКОЖИ ЕМУ МААААМ Я НЕ ДАУН
>ВЫБЕРУ СТРАТЕГИЮ ТУПОГО РЕФОРСА СООБЩЕНИЙ.
Скрыто с первых слов. Учись в коммуникацию.
Если я в первых строках не вижу объяснения как ты будешь понимать чем является НИГГА в первоначальном примере — я не вижу от тебя конструктива, соответственно не ощущаю в себе желания с тобой дискутировать. Сначала объясняешь, как выясняешь чем является выражение внутри скобок AAAAA BBBB(CCC); , далее с тобой может вестись какой-то разговор, в противном случае ты либо вообще не понимаешь о чём речь, и в этом случае ты не нужен, либо понимаешь и знаешь куда это тебя заведёт, и боишься обосраться потому что ты крутой и пришёл всем всё доказывать, а не узнавать новое, и в этом случае ты не нужен вдвойне. Чем является CCC, опиши алгоритм как это узнать, время пошло.
Я тут мимо проходил, но что-то странный вопрос какой-то.
>Чем является CCC, опиши алгоритм как это узнать, время пошло.
очевидно, нужно всего лишь нажать # (?\<word\>) и увидил, откуда этот CCC пришёл.
Ну, то есть, прочитать ранее идущий код, как ещё-то можно что-то узнать? Либо посмотреть, что такое BBB и что принимает на вход.
Или что ты услышать тут вообще хочешь?
На сколько я понял из его шизойдного делирия, он имеет ввиду типа чем является такое выражение: объявлением функции или инстанцированием объекта, в некоторых случаях компилятор это может не понять, чем из этих двух является такое выражение и вываливает ошибку, но ему уже десять раз тут сказали что в С++ давно уже пишут для объектов TYPE NAME{ARG} для объектов. Но этот даун видимо недавно прочитал кусок от десятилетней книжки Майерса где он разбирал такой пример и теперь козыряет своим единственным аргументом который он знает.
>Омега-униженец, ты еще тут? Я думал уже ты совершил героический самовыпил и очистил этот мир от своих наивных шизоидных фантазий о языках программирования. Нет, же ты все просишь еще мочи себе лицо, снова и снова. Как только у тебя хватает терпения, выносить такое обращение к себе? Наверное ты какой-то мазохист извращенец который любит себе дергать анус и когда его макают в говно.
>Пойми, ты просто тупая бездарность, которая никогда никем не станет и твой максимум это сидеть в этих тредах и кидаться чужим мнением без какого либо понимания сути, я это понял, кто ты только начал открывать свой рот и откуда стал выливаться этот бессмысленный шизойдный бред тупорылого школьника с синдромом дефицита внимания. Ты же просто больное животное, которое возможно еще и опасно для общества, я бы на месте твоих родителей вообще бы усыпил тебя, от греха подальше, чтобы не убил случаем никого, хотя ты скорее всего такое омежъе чмо, что в реальности вряд ли тебе хватает смелости даже открывать свой рот и отрывать взгляд от пола, лол.
>Просто обдаю твою тупую физиономию измазанную в говне за все эти посты еще мощной струей своей мочи и пойду открою себе пива, а потом выебу свою топ тян, пока ты будешь с дрожащими руками набивать мне свой жалкий ответ, на то что тебе все равно, про свои бредовые ААА ССС БББ и прочий твой шизойдный бред который мне абсолютно не интересен.
>Просто почувствуй разницу: я сеньор на высокооплачиваемой работе, а ты жалкий безработный анскил над которым я глумлюсь убивая пару мин своего свободного времени, в перерыве между важными делами. Харьк тфу на тебя, животное))
Ебать, наконец-то годнота, достойная олдов дотатреда. Схоронил.
>>55444
>>55429
Скрыто с первых слов. Учись в коммуникацию.
Если я в первых строках не вижу объяснения как ты будешь понимать чем является НИГГА в первоначальном примере — я не вижу от тебя конструктива, соответственно не ощущаю в себе желания с тобой дискутировать. Сначала объясняешь, как выясняешь чем является выражение внутри скобок AAAAA BBBB(CCC); , далее с тобой может вестись какой-то разговор, в противном случае ты либо вообще не понимаешь о чём речь, и в этом случае ты не нужен, либо понимаешь и знаешь куда это тебя заведёт, и боишься обосраться потому что ты крутой и пришёл всем всё доказывать, а не узнавать новое, и в этом случае ты не нужен вдвойне. Чем является CCC, опиши алгоритм как это узнать, время пошло.
Как что-то плохое. Шизоиды как раз и меняют мир,остальные только потребляют ресурсы.
При объявление функции нужно указывать тип параметра. При определение объекта нет.
объявление функции: Class foo(int n) или Class foo(int);
инициализация объекта: Class myObject(n) или Class myObject{n};
О чем речь вообще?
Скрыто с первых слов. Учись в коммуникацию.
Если я в первых строках не вижу объяснения как ты будешь понимать чем является НИГГА в первоначальном примере — я не вижу от тебя конструктива, соответственно не ощущаю в себе желания с тобой дискутировать. Сначала объясняешь, как выясняешь чем является выражение внутри скобок AAAAA BBBB(CCC); , далее с тобой может вестись какой-то разговор, в противном случае ты либо вообще не понимаешь о чём речь, и в этом случае ты не нужен, либо понимаешь и знаешь куда это тебя заведёт, и боишься обосраться потому что ты крутой и пришёл всем всё доказывать, а не узнавать новое, и в этом случае ты не нужен вдвойне. Чем является CCC, опиши алгоритм как это узнать, время пошло.
Речь о том, что ответ на этот вопрос вскрывает убогость крестов (и сишки, раз на то пошло, но сейчас речь о говнокрестах, которые в перформанс задачах сосут у си, которая в 100 раз проще а недостатков столько же, если не меньше, а в неперформанс задачах у любого динамического языка). Как узнать, чем является ССС, чтобы понять в итоге, что же за конструкция перед нами описана? Надо найти, где он объявлен. Как это выглядит в НОРМАЛЬНЫХ языках? В нормальных языках есть понятие модулей: нам нужно найти модуль, в котором определён ССС. Это либо тот же самый модуль (и тогда его надо скомпилить один раз), либо это какой-то другой модуль и ССС там объявлен как экспортный, и тогда тот модуль тоже надо скомпилить. Всё. Так это происходит в нормальных языках. Что же происходит в топовых-на-острие-прогресса крестах? Ну а в крестах у нас нет модулей, у нас есть препроцессор родом прямиком из си, который копипастит текст файлов прямо в наш компилящийся файл. Результатом этого является то, что каждый файл в нашей программе нужно скомпилировать столько раз, сколько раз он был включён в другие файлы.
Что-то подобное я хотел услышать, но блядина никогда этого не скажет, она будет жрать говно и нахваливать.
Униженный шизофреник, ты все прододжаешь сглатывать мочу и просишь добавки?
Во-первых, ты больное животное, сначала научись формировать свои шизойдные мысли в нормальные предложения, прежде чем писать сюда что-то. Этот сумбур из маняфантазий шизофреника просто читать невозможно.
Во-вторых.
> крестах у нас нет модулей
Опять же ты сосешь, как жалкая дешевая шлюха, которую ебут таджики за пачку ролтона.
https://en.cppreference.com/w/cpp/language/modules
А все почему? Да потому, что, как я и раньше сказал, ты ничтожество не знающее ни си ни с++.
>которые в перформанс задачах сосут у си
Манюничка, опять твой наивный девичий мир фантазий.
Пруфы в студию.
>которая в 100 раз проще а недостатков столько же
Ухх бляяя манюня опять выдает желаемое за действительное.
>а в неперформанс задачах у любого динамического языка
Просто орнул с этого.
Выебаная в жопу макака, перестань уже унижаться и просто заткни свой вонючий рот, полный говна, пока туда еще кто-нибудь не насрал, лол.
Да, никто не будет называть переменную int, char или Class. А если назовет, то уверен, что компилятор заорет, хотя бы варнингом, не проверял если честно, так как не встречался никогда с таким и даже мыслей не было о подобном изврате.
Лол, мань, если ты микроконтрелер шизик, то можешь не подрубать stdlib и писать без шаблонов, всяко будет лучше чем на говноси.
Тем более
>10кб
Вспомнил времена когда твой дед в жопу за 10 килобайт давал.
крестовая стандартная библиотека большей частью это шаблоны в хедерах, она будет занимать столько, сколько ты их нее используешь
Проник с++ бомж чтобы погреться, завонял весь падик. Теперь сами и выгоняйте эту мразь, и проветрить не забудьте
А точно; конструктор, деструктор... :'-(
А как там со всем этим в языке ДИ? Кстати интересно, что поначалу я допускал ошибку инициализации переменных.
int a, b;
Я считал, что создаю 2 указателя, а не 1. Однако с удивлением обнаружил только что, что в ДИ такая конструкция делает именно то, что я интуитивно предполагал ранее.
С того времени я в СИ пишу иначе.
int a, *b;
Так логичнее. Однако такое написание можно встретить не всегда.
>Так только пориджная петушня пишет
https://www.programiz.com/c-programming/c-pointers
https://docs.microsoft.com/ru-ru/dotnet/csharp/language-reference/unsafe-code
>>57159
Не могу ответить конкретно; по сложному комплексу причин и обстоятельств. В плюсах много лишнего; мне импонирует аскетизм.
>>32120
>Дишка лучше крестов, ржавого и говняшки.
У меня проект с разделяемой памятью, сигналами реального времени, возможно многопоточностью и внушительным препроцессором. Это всё поднимаемо на ДИ? Если учесть, что написаны только наброски на СИ, стоит ли переписывать всё на ДИ, попутно ещё его и изучая, и далее продолжить писать уже на нём?
>>57165
Кстати об указателях. Можно ли как-нибудь в одну строку объявить статический объект и указатель на него же? Т.е. Вот это вот:
>static char buf[10] = {0}
>static char p_b = &buf;
Соединить в одну строку. Мне даже и и переменная "buf" как таковая нафиг не нужна, к объекту только по указателю обращаюсь.
>к и не нашел make, но если я ставил mingw то он же где-то должен быть?!
Он там как mingw32-make переименуй его в make
Переименовывал. Выдает ошибку e=2.
Через саму программу нет. Пробовал в эклипсе выбирать разные компиляторы. Вечером попробую поставить кодблок и через него скомпилировать.
двачик, я обосрался жиденько. суть: заебала вс студия, накатил clion. в нём какого то хуя не возбуждался компилятор/дебаг, я такой "ок" накатил minGW, нихуя не возбудилось ничего, я такой "ок", снёс minGW папку, снёс слион, переустановил слион, и... снова нихуя. докучи накатил кодблокс, но он тоже не возбуждается, типа мингв не обнаружен. мингв снизу справа выкидывает окошко с ошибкой, типа "файлы не найдены"( логично, лол, папку то я снёс для переустановки). в итоге что я имею? мёртвый кодблокс, мёртвый силион, фантомный минГВ (в PATH его нет, но он каким то раком выкидывает мне ехидное окошко ошибки). что я делаю не так помимо моего существования и как это исправить. ось вин10
так. я обосрался в квадрате. ошибку выдаёт кодблокс, что не найден компилятор.
> как это исправить
1. Накатить ЖМУ/Пинус
2. Минимально освоить пакетный менеджер, vim, make и git
3. Даже не притрагиваться к отладчику первый год
линукс поставить не могу, по причине собственной никчёмности, разумеется (нет, это никак не связано с ПО для работы, я просто днище, ага).
что такое вим, мейк, пакетный менеджер и гит первый раз слышу (нет)
отладчик мне и не нужен, по крайней мере в с/с++, ничего что требует отладки я на этих языках не пишу.
а знаешь что мне действительно нужно? понять что я блять наебнул в своём компе, что у меня не работает ранее работавший кодблокс хотя бы.
Так. я принял душ и пофиксил кодблокс. кажется не спать два дня было плохой идеей и я немного разнервничался. да и с мингв я разобрался. пожалуй пойду посплю, вопросов больше нет.
Ты ещё поспи - и Линукс поставишь.
Через кодблокс такая ошибка кстати, и что очень странно один файл с разрешением .h не находил в проекте хотя он там был пришлось тупо копипастнуть код вместо инклуда, но от ошибке в прикрепленной пикче уйти не получается.
Все бы ничего, но проект не мой и собран на мейкфайлах, мне лишь его скомпилировать нужно и достать от туда экзешники для своего диплома в уник. Но я все равно уже и линукс поставил и на нем попердолиться успел так ничего и не получив.
>мне лишь его скомпилировать нужно и достать от туда экзешники для своего диплома в уник.
Могу помочь, если исходники дашь.
Я был бы очень при очень при очень благодарен, анон!
https://github.com/gegel/onionphone
Вот тут в папочке libcodecs все.
Не секрет. Исследование методов передачи речи при наличии ошибок в канале связи. По сути хотел собрать .bat файлы которые вызывают экзешники кодеков и делают разные манипуляции с ними. Сжатие, перевод в блокбитовое состояние, добавление ошибки или без нее и потом разжатие. Все это на разных скоростях нужно проделать. Составить объективные и субъектинвные оценки, ну и быстроту каждого кодека оценить. Желательно было сделать это на распберри, чтобы скорость точнее определить, но мне бы пока что хотя бы на винде это все собрать.
Или всё же лучше иметь два и в них писать в зависимости от типа переменной?
Вот примерно так: https://ideone.com/S3PttS
Можно ли иметь лишь data2_t (проще/меньше писать, и вроде работает), или строго лучше только data1_t? Не очень в курсе, как именно пройдёт конвертация переменной из возможно int32_t в uint64_t, наверняка же может знаковый бит где-то пропасть? Или будет int32_t -> int64_t -> uint64_t? Как-то спецификация это оговаривает?
ну во втором варианте тебе вообще не нужен юнион, если по правильному то почему бы, вот так не сделать:
https://ideone.com/2P6QAk
а так самому интересно, нет ли ub в касте отрицательного инта к беззнаковому?
Я, очевидно, просто упростил и убрал все другие элементы юниона, чтобы лишним не засорять. Там как struct'ы, так и без них, поэтому сделать как в твоём коде не получится.
Просто уж очень не хочется фактически дублировать все комбинации для signed и unsigned.
Вроде все возможные переводы туда-сюда работают, как и при передаче в функции — https://ideone.com/3ME1uF, так что может и норм?
запускаться это всё будет, если что, на stm32
Значит умер, раньше там всегда был. Можешь у СТМщиков спросить, всяко ближе, чем тут. Если только у тебя не по, собственно, коду вопросы.
>>59390
>В радио уже пролистал, не нашел. Пойду в хард.
https://www.linux.org.ru/tag/avr
Кстати, там на лоре можно 2 тега выставить? Иногда нужно бывает. Кто знает?
У меня-то по коду вопрос, но он про авр соответственно.
Допустим есть два микроконтроллера, нужно передать один байт данных от одного к дугому как можно быстрее.
Загвоздка в том, что доступны только четыре ноги из порта а (atmega32), то есть никакие серийные протоколы (uart, spi, i2c) передачи использовать не получится. Прерывания как на передатчике, так и на приемнике тоже использовать нежелательно, так как они могут замедлить основную программу.
Как это сделать наиболее оптимально?
Освобождаешь ноги на которых uart/i2c сидит, очевидно же. Либо пишешь программную реализацию какого-нибудь протокола для свободных ног.
> Освобождаешь ноги
Эй, программист, полегче. Плата уже спаяна, ничего там освободить не получится. Задача не в этом.
> Либо пишешь программную реализацию какого-нибудь протокола для свободных ног.
Вот в этом собственно задача.
>Прерывания как на передатчике, так и на приемнике тоже использовать нежелательно, так как они могут замедлить основную программу.
Ничего быстрее правильно написанного прерывания не существует.
Из других вариантов: постоянный опрос в цикле или по таймеру. Вот это легко замедлит основную программу.
>передать один байт как можно быстрее
Очень плохая постановка вопроса. А что 2-го байта не будет? Нужна частота передачи данных и периодичность, если данные передаются не постоянно.
Но на 4 пинах ничего быстрее spi все равно нет. Делай программный SPI. Если передача в одну сторону, делай 2 битный SPI, как в sd картах.
>>58644
Лол, так тебе надо было брать gstreamer и не ебать мозги.
>>58680
Какой пиздец. Даже дауну должно быть очевидно, что победят SILK (потому что внутри самого кодека есть FEC) и Opus (потому что там внутри SILK для речи). Остальное же окаменелое говно эпохи GSM всосет, потому что их пускают уже поверх канала с какими-нибудь турбокодами, что у тебя даже не предполагается в сетапе. Пидорашье образование в своем репертуаре.
>>59620
> доступны только четыре ноги из порта а (atmega32)
> то есть никакие серийные протоколы (uart, spi, i2c) передачи использовать не получится
Я в упор не понимаю каким образом ты сделал такой вывод. Вешай SPI на эти четыре ноги, как >>59850 говорит и не еби мозги.
>>60456
RTFM, блядь: https://docs.microsoft.com/en-us/cpp/build/reference/compiler-options Там внутри cl.exe, он собирает как крестовый код, так и просто сишный.
Аахахах, про пидорашье образование даже спорить не буду. Но за gstreamer почитаю, спасибо)
От всего тредика проголосовал за Единую Россию.
Спасибо, ЕР опять выиграла, ура!
и это по вашему лучший учебник по си? охуеть
ну начнём с того что программы из этой книги не компилятся. просто копируешь вставляешь и нихуя. какого хера я сам должен догадываться методом тыка почему она не рабоатет??
во вторых абсолютно не объясняются некоторые термины, опять самому догадываться. приходится гуглить, хуюглить, короче пиздец, учебный процесс превращается в непойми что, повезёт если догадаешься, что имели в виду авторы
есть вообще в природе нормальный учебник по си?
Вот еще хороший учебник.
>А вообще про голанг.
Когда я изучал его синтаксис, он мне показалася вроде так ниЧО. Можно пописать. Но когда увидел размер исполняемых файлов, то проклял его. Вы там совсем ебанулись, делая исполняемые файлы от чьи размеры кратными десяткам мегабайт?
Это понятно, что к исполняему файлу линкуются все необходмые библиотеки и он будет работать на любой конфигурации и версии целевой платформы, но всё равно это хуёвый подход и место голангу только в кластерах. Нахуй нахуй.
Кстати вот попробовал скомпилить пустой проект на дланг. Очень удивился, когда увидел почти 10МБ-ный бинарник. Ну чушь же. Там не было даже стандартной библиотеки. Нашёл в нете совет воспользоваться утилитой стрип для сброса прилинкованного мусора, но та всё-равно пару мегов оставляет. А проект же абсолютно пустой, абсолютно. Это дланг - прямая надстройка над си.
Так это ж регулириется вроде, флагами какими-то. Можно в .so собирать зависимости, а не мегаебу.
Мимокрок
Если хочешь мелкие бинарники, то используй betterC - это урезанная дишка, практически сишка.
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
AGA, shas )))
Двачую. Прата намного лучше старается разжевывать.
Где вообще можно почитать о таких фишечках и хаков с языком?
мимо джун
мимо даже не джун, но нихуя не понял почему это шедевр?
это же херня какая-то, нахера вообще такое делать?
и почему тогда компилятор не изъебывается?
по-моему в любом стандарте си есть сложение, а значит ты либо пиздобол, либо слишком тонко чтобы я понял что это тролинг
На картинку серьезного внимания не обращайте. Лучше на вопрос ответьте, есть ли какая нибудь книга с хаками и фишечками по Си?
>главное понятный код и sql запросы нормальные пиши, тут не нужен челик, который ебет байты
не только это. ещё важно писать безглючный код, который верно работает. производительность да - не шибко критична
Ричард Хэзфилд, Лоуренс Кирби и др.
Искусство программирования на С.
Фундаментальные алгоритмы, структуры данных и примеры приложений.
Может эта? Сам ещё на середине Праты, эту следующей хочу смотреть.
да пошёл ты нахуй пидарас со своей классикой, индусы на ютубе и то лучше объясняют
индус, залогинься
>да пошёл ты нахуй пидарас со своей классикой, индусы на ютубе и то лучше объясняют
А что там обьяснять-то, блядь? Сам язык очень простой.
>Сам язык очень простой.
Сколько лет программируешь на Си?
Попробуй написать синатксический анализатор, чтобы хавал 100% Си кода и охуеешь насколько он простой.
Вот тебе полностью корректное выражение на Си:
х = (у = 3, у + 1);
Только не говори что ты это знал.
даже я это знал
мимо другой анон, который вкатился в си по приколу пару месяцев назад, и еще когда-то давно на си писал в унике лабы
>Попробуй написать синатксический анализатор, чтобы хавал 100% Си кода и охуеешь насколько он простой.
Сложность самого языка и сложность программирования на нем - это разные вещи. Си - один из самых простых языков, в нем почти ничего нет, кроме основных конструкций и типов. Но чтобы писать на нем что-то годное, необходимы большие компетенции.
Я читал как-то Шилдта. Он хуйню пишет безграмотную порой. Надо Страуструпа читать.
Не знаю про хаки. Есть книжечка Hacker's Delight
автора Henry S. Warren Jr.
Вот там куча разных интересных трюков
Вы видите копию треда, сохраненную 20 января 2022 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.