Тред синтаксического сахара над языком ассемблера, ака языка си. /clang/
C09/02/24 Птн 19:47:31№30421921
Давно меня не было и вероятно прошлый сдох. Однако назрел вопрос с чем вы, аноны, склеиваете свои числодробилки, чтобы красивенько отображать информацию на экране монитора?
Из моих рассуждений я бы выбрал джаву. Да у нее есть проблемы с визуалом, графические библиотеки говно аляпистое и скорость вычсилений так себе. Однако графическую библу можно набросать и свою (помню как то делал уже подобие бустрапа под джаваформы, который тягал CSS листы и красивенько рисовал, но компик сгорел, надо заного набрасывать), а скорость вычислений мы как раз поручаем числодробилкам на языке си, запакованным в билбиотечки.
>>3042241 Возможностей консоли недостаточно. Нужна именно пиксельная графика, то бишь мордорисование. Через какие костыли не так уж важно, я могу и с нуля накалякать какой нибудь визуальный конвеер для покраски кнопочек (прямоугольник в котором текст, это разве страшная задача для отрисовки кнопки), но хотелось бы не сильно заморачиваться именно с мордорисованием а все творческие силы пустить на алгоритмы числодробилок.
Аноны, подскажите дегенерату, пожалуйста, а можно ли за-memset-ить двумерный динамическивыделенный массив? Обеспечивается ли линейность памяти для массива массивов?
>>3053301 На вывод массиав не смотрите, судя по gdb он валится прямо на мемсете. "Сжатый" двумерный массив мемсетится легко, двумерный статический массив мемсетится легко, а вот массив массивов нихрена.
>>3053976 Упадет с ошибкой. Куча и стек находятся в разных концах виртуальной памяти. Например, в линуксе куча растет снизу вверх, а стек - сверху вниз. Есть специальный регистр stack pointer, который указывает на текущую вершину стека (или низ). Можно вычислить, находится ли твой адрес в куче или нет, и упасть по ассерту.
>>3042192 (OP) >а скорость вычислений мы как раз поручаем числодробилкам на языке си, запакованным в билбиотечки. Если нормально писать то и джава неплохо дробит числа. Вот недавно был челлендж https://github.com/gunnarmorling/1brc - джава обошла раст по скорости и почти догнала С++ (но тут неточно, потому что С++ запускался не на эталонном железе, которое само было производительнее)
>>3068213 >https://pastebin.com/n5fEZnW6 можешь задать свою хуйню одномерным массивом по типу char huyn9[] = {,,,,,,'#',,'#' ... ,,,}; и потом вором вывести на экран где каждый n символ будет принтефатся \n
>>3068946 сомнительно, потеря скорости вычислений на трансляцию в джавамашине, это даже в теории не близко к числодроблению
>>3068965 >вором фором >будет принтефатся \n но можно и не принтить перенос строки если ты фулл экран консоли заливаешь каким то своим рисунком в псевдографике
>>3074808 > кодите что то на сях? Полностью переехал на плюсы. Благо они уже для кофеварок научились компилировать. Не помню уже когда писал что-то на чистом Си.
>>3074808 Я проштрудил книжку оч хорошую OOC, которая в шапке треда раньше висела. Потом ппц мотивация привалила, решил сделать свой евентлуп с асинхронными корутинами, ебался с этим парк недель, но забросил и уже полгода не притрагивался.
>>3079569 Да хз. Черт дернул пройти заного эту христоматию. Ковыряю задачки все подряд прямо с первой. Но так... не на энтузиазме, а лениво, час ютюба 2 строчки кода если грубо говорить.
Да и книга сложная, уже в первых главах где написан пример программы копирования файлов надо голову поломать как эта программа должна была работать по задумкам Ритчи (Керниган полюбасу там заложил тонну общения с консолью, а Ритчи повелся и кидает файлы в поток консоли а не в фопен).
Крч, вот так прям с наскока хуй кто осилит K&R Clang. Реально сложная книга со своими заковырками и неочевидными подводными камнями.
Я вот сидел и пытался в a.out скормить файлик чтобы проверить по заданию работу гетча, и нихуя у меня не вышло, но зато я нашел Heredoc о котором не знал, сижу вот читаю про эту волшебную штуку-дрюку.
>>3079578 upd Если у кого то то же возникает затык в первых главах как программа Кернигана считает символы из файла без фопена, то задумка у них была пикрил.
У меня вопросы по кодстайлу. Анончики скажите пожалста, вы стараетесь писать читабельно как в этом примере: в ифе стейт сравнивается со значением. Или стараетесь писать более краткие формы: иф(стейт) иф(!стейт)
Бля пиздец, всю башку сломал себе этими вертикальными гистаграммами. Нет, я понимаю можно просто нарисовать гистаграмму челез юникодовые управляющие последовательности или курсы подрубить... Но смысл в том чтобы решить задачку средствами которые предоставлены в книжке, а там хуй да нихуя, циклы ифы и путчары... Еще блять эта кодировка вайдчарами русского текста... Непечатные символы...
>>3068965 >сомнительно, потеря скорости вычислений на трансляцию в джавамашине, это даже в теории не близко к числодроблению Там есть специальные подсистемы в JIT (C1 и C2), которые по сути кэшируют трансляцию часто используемого кода. То есть ты будто в рантайме бинарник компилишь и с ним работаешь. Плюс т.к. джава может в рантайме менять код, в отличии от С++, она может оптимизировать в зависимости от того как код используется - разворачивать циклы, переставлять операции и т.д. https://habr.com/ru/articles/305894/
>>3082115 хабр помойка, тем не менее, это потеря скорости компил в рантайме/трансляция это потеря скорости исполнения кода, как вы этого понять то не можете? совсем обджавились уже заместо пармы мувов по регистрам ты делаешь компил + пара мувов по регистрам уже на пальцах вынужден объяснять джавистам как работает джавамашина пиздец до чего дошли
>>3082317 спора нет, жаба уже двадцать лет по производительности не хуже плюсов, и ебет в хвост и гриву всякие высокоскоростные всхрюки типа растов. и причину тебе уже озвучили - оптимизация кода в рантайме основанная на статистике исполнения кода, фича, которая в принципе недоступна компилируемым языкам.
>>3082318 >компил в рантайме/трансляция это потеря скорости исполнения кода, как вы этого понять то не можете? книжки почитай прежде чем хуйню пороть
>>3082318 ты там на перфокартах код пишешь что у тебя программы штучными мувами по регистрам измеряются?
>заместо пармы мувов по регистрам ты делаешь компил + пара мувов по регистрам правильно так - заместо пары миллиардов мувов по регистрам ты делаешь пару миллионов мувов, потом оптимизацию, и потом еще пару сотен миллионов мувов.
>>3082326 >по производительности не хуже плюсов, и ебет в хвост и гриву всякие высокоскоростные всхрюки типа растов чел мы в ситреде, тут бенчи по асму меряются, а не по твоим тормозным джавам плюсам растам питонам джиэсам, проснись
>>3082329 оптимизировать и гцц умеет и будут теже мувы но зато без потери процессорного времени
>>3082318 >компил в рантайме/трансляция это потеря скорости исполнения кода, как вы этого понять то не можете? совсем обджавились уже >заместо пармы мувов по регистрам ты делаешь компил + пара мувов по регистрам Чел ну ты ебанат? Трансляция 1 раз происходит, потом ты из кэша достаешь свои мувы по регистрам >тем не менее, это потеря скорости манямирок затрещал, но выстоял, упорный!
>>3082336 >оптимизировать и гцц умеет и будут теже мувы но зато без потери процессорного времени гцц не знает как ты будешь использовать программу каждый раз когда ты её запускаешь, а жит знает >джависты вам тут не рады не гори только от джавабогов
>>3082336 >чел мы в ситреде, тут бенчи по асму меряются, а не по твоим тормозным джавам плюсам растам питонам джиэсам, проснись Спецом для тебя я скинул пруф https://github.com/gunnarmorling/1brc , тут как раз на джаве угорают по лоу левелу и постят результаты бенчмарков
>>3082807 пруф чего ты мне скинул? это чисто джава бенчи насколько я вижу тк тут написано напишите программу на джаве пруф того что жаба умеет складывать вычитать и компейрить числа? ахуенно
>>3082802 >гцц не знает как ты будешь использовать программу каждый раз когда ты её запускаешь, а жит знает хз чо ты высрал, даже разбирать тобою написанное не хочу
>>3082798 а если проц без кешлиний? поешь говна лучше и не пиши сюда
Вы тут срете бесполезной хуйней в тред, а лучше бы занялись ментальной гимнастикой. Вот вам пикрил задачка и книги K&R попробуйте решить ее. Из доступных инструментов первой главы: ветвления ифами, циклы, массивы, функции (без поинтеров, векторов, макросов и всего прочего).
Без каких либо ограничений на размер строки означает что нам недоступно хранение строки внутри char arr[size_t]. Удачи.
>>3084007 >пруф чего ты мне скинул? это чисто джава бенчи насколько я вижу тк тут написано напишите программу на джаве >пруф того что жаба умеет складывать вычитать и компейрить числа? ахуенно здесь сравнения с другими языками https://github.com/gunnarmorling/1brc/discussions
>>3084361 Пруфы того что ты не читаешь ридми. Там эталонный сервер на Хетцнере, иначе каждый бы мог просто на более мощной машине запустить и сказать что у него питон быстрее работает.
>>3084362 а если проц без кешлиний? Не пойму как ты через сишку кажешь процу что ему кэшировать, а что - нет, может расскажешь? Просто хочу разобраться
>>3084462 ты принес какую то хуету, а я должен бегать по крупицам собирать инфу что это все значит и что ты хотел сказать своим высером? да пошел ты нахуй анон, поебать мне на твои бенчи хуенчи сделанные ПАПРИКОЛУ, жаба медленне си, это аксиома, хочешь опровергнуть - неси бенчмарки
>>3084467 >а если проц без кешлиний? тогда одинакого будет, холодный старт только медленее, нужно время на транслейт > как ты через сишку кажешь процу что ему кэшировать, а что - нет префетчинг, паттерны известны, однако это все равно неуправляемый напрямую процесс
>>3084476 >ты принес какую то хуету, а я должен бегать по крупицам собирать инфу что это все значит и что ты хотел сказать своим высером? Ты ничего не должен, я дал тебе таблицу результатов, ты со сгровешей жопой побежал проверять на локалке, потому что не верил что джабба может быть такой быстрой. Тут уж не моя вина.
>>3084501 >на какой локалке, даун? это твои две ссылки, делать мне нехуй проверять на своей машине какой то паприколубенч Не гори только, скуф Что тогда за вторая картинка с замерами от тебя была? Мне мысли твои чтоли читать?
>>3084502 я вообще ничо не сравнивал, тут нечего сравнивать ты принес ссылки я их открыл нашел сишный тредик и сфоткал результы теперь ты говоришь что я принешь жабу на локалке, а вот ты то принес сишник на хетцентре, но по твоей ссылке как раз сишник на локале покинь тредик, ты не в адеквате, чел
ладно я то же погорячился давайте раз и навсегда определимся почему си быстрее жабы есть только одно пруфабельное определение - си быстрее жабы потому, что на совершение действия А ему не нужно совершать дейтсвие Б. о чем ручь? о строительстве объектов и вызове череды колбеков для записывания какого нибудь несчастного стринга в память. ооп это априори медленно.
в остальном можете играть в суррогатные гонки с миллиардом повтроений одной вычислительной инструкции и говорить что все одинакого. этот тест необъективен так как байткод исполняется фактически один и тот же на одной и той же машине, тут нет никакой гонки
к слову мне кажется этот странный челлендж из ссылки - посчитать много даблов в мультипотоке, звучит как задача для гпу
>>3084554 >есть только одно пруфабельное определение - си быстрее жабы потому, что на совершение действия А ему не нужно совершать дейтсвие Б. о чем ручь? о строительстве объектов и вызове череды колбеков для записывания какого нибудь несчастного стринга в память. ооп это априори медленно. Это слишком упрощенное определение, потому что: 1) совершение меньшего количества действий не всегда даёт быстрее выполнение на современных процах. 2) Java - мультипарадигма, а не чистый ООП, писать как на С никто не запрещает, даже с ручным выделением памяти 3) Тот же пример с размоткой цикла - сишка тупая и если ей сказали крутить циклы - она будет крутить циклы и нарушать instruction pipelining, в то время как джава умная и может понять что цикл можно развернуть и ускорить таким образом код. 4) возвращаясь к "совершение действия А ему не нужно совершать дейтсвие Б" -> джава может в рантайме понять что ей не нужно что-то совершать и таким образом будет быстрее кода, который не адаптируется к рантайму. А захламить код мусорными аллокациями можно и на С, было бы желание.
>в остальном можете играть в суррогатные гонки с миллиардом повтроений одной вычислительной инструкции и говорить что все одинакого. этот тест необъективен так как байткод исполняется фактически один и тот же на одной и той же машине, тут нет никакой гонки ничего не понял суррогатные гонки - это и есть суть бенчмарков, ты о чем?
>к слову мне кажется этот странный челлендж из ссылки - посчитать много даблов в мультипотоке, звучит как задача для гпу Ну так челлендж выжать максимум конкретно из джавы, а не просто считать числа где-нибудь
>>3084669 >сишка тупая кукарек, ничем не подкрепленный >джава может в рантайме понять что ей не нужно что-то совершать и таким образом будет быстрее время на "понять" конечно же не нужно, ведь это происходит по волшебству
>конкретно из джавы типичная жавазадача - компайрить даблы, верим
>суррогатные гонки - это и есть суть бенчмарков, ты о чем? то к чему они пришли, а не их суть
Бля, даже для кубейсика был компилятор, который исполняемый файл выдавал. Для тех же джавы и сишарпа есть АОТ, которая выдаёт машинный код. Только это нахуй не надо, потому что собираешь в машинные коды ты для конкретного набора инструкций, и на более старых процессорах это просто не запустится, а на более новых не будут использоваться новые сокращающие время исполнения инструкции. В это же время байткод джавы, ИЛ сишарпа, да даже код джаваскрипта выполняются рантаймом, который знает, что поддерживает процессор, а что нет, и во что можно код переводить, а во что нельзя.
>>3042192 (OP) Если я в проге использую printf с параметром %d, компилятор засовывает в прогу весь функционал функции или даже stdio.h? Как удалить ненужное?
>>3087089 линкуй только функцию так как есть скрытый флаг в компиляторе -lstd то линкер так или иначе найдет бинарное исполнение любых функций из стд либы без хидера (малоки хуялоки) вопрос лишь в том нахуй оно тебе надо? бинарь все равно форматный, будут просто куча пустых адресов, покури ELF если ты на винде
>>3086197 >даже для кубейсика был компилятор Что значит даже? Для бейсика есть компилятор, а для джавы и шарпа нет, потому что, в отличие от бейсика, жабошарп это скриптовое говно, а не языки программирования.
>>3089524 Да я не настаиваю, решай задачу которая тебе удобней. В любом случае это был просто челлендж ак 100 задачек литкода или типа того, и каждый сам для себя решает принимать участие или нет. Я только прошу внимательно читать условия задачи, а то я уже заебался повторять одно и то же.
Ошибся, но где? Есть какой нибудь гайдик что засунуть в мантиссу и сонование чтобы получить максимальное и минимальное значение флоатов по границам? Я ничего не нашел в интернетике кроме формулы. Пойду пока цветовую схему поковыряю, а то дефолтная всратая.
>>3042192 (OP) Всем салют. Чисто из любопытства: как в чистых сях обстоит дело со строками, конкретно с кодировкой? Вот чтобы максимально переносимо было, какой тип используют люди? Utf8, или 16 или 32? Спасибо
>>3094012 я не иксперт, но вроде как в чистых сях есть какая то библа в наборе стандарта которая работает с вайдчарами и переносимо покрывает все кодировки но я хз, не пишу переносимые. обработчики текста, так что на своей машине юзаю утф8 юникоды где латинские в один байт русские в два вот собсна и все
Повторяю, в подавляющем большинстве случаев JIT лучше, чем нативная компиляция, потому что JIT может транслировать твою программу в команды текущего процессора, используя всю его мощь, а говноязык без JIT может только нацелиться на какой-то конкретный процессор, причём на более старых моделях программа просто не будет работать, а на более новых она будет выполняться неоптимально.
>>3094136 да успокойся ты, джитошиз, покури флаги компилов и статистику по используемым инструкциям процессоров а еще раз тебе не лень срать ссылкми принеси джит компиляцию которая юзает все 2к+ инструкций современно проца
я прпльно понимаю что для иучения с в visual studio мне нужно иметь примерно 50 гб свод места? пиздец много весят "файлы" для него. охуеть. жаль а) я нищий б) у ноута всего один слот ссд. придется отлодить учебу ( так бы купил 8тб ссд м.2
>>3086630 c если нужен минимализмc++ если проц без хидера (малоки хуялоки)вопрос лишь в отличии от бейсика, жабошарп это скриптовое говно, а лениво, час ютюба 2 строчки кода в рантайме понять то дефолтная всратая.
схера ли варнинг? сначала мы определяем что это присваивание и что инкремент постфиксный (после присваивания) потом начинаем вычислять правую часть присваивания где сначала вычисляется условие тернарника, а затем вычисляется одна из его веток потом происходит само присваивание и вот только теперь постфиксный инкремент
>>3097769 Это UB. Поведение зависит от того, будет ли сначала выполнено выражение слева от знака равенства, или справа. Так что ругается он по делу. Не делай так, короче.
>>3097841 приветствую уб шиза в этом итт треде поясни за выполнение выражения слева от знака равенства или справа как вычисление этих частей соотносится с приоритетом вычисления постфиксного инкремента слева от знака присваивания?
>>3097769 https://en.cppreference.com/w/c/language/eval_order > и вот только теперь постфиксный инкремент Найди ордеринг рул который говорит что сайд-эффект постфиксного инкремента вычисляется после assignment оператора. Я сходу такой не нашёл, есть что-то похожее в последних стандартах плюсов.
>>3097895 ну вот например тебе твой ордеринг рул который говорит что сайд эффект постфиксного инкремента вычисляется после эсс игнмент оператора как видно из таблички приоритетов = и += обладают одним уровнем приоритета выполнения и вычисляются справа налево
и пик 3 небольшая справочка для тебя лично, любителя носится со стандартом как со святой грамотой
>>3097849 > скрины из K&R Ну хуй знает. > и вычисляются справа налево Я аж сначала охуел от такого пиздабольства, потом открыл и понял что "справа-налево" это сука про ассоциативность оператора. И в этой же сука главе тебе говорят что порядок вычисления операндов не специфицируется для большинства операторов, и приводят твой же UB как пример UB: a[ i ] = i++, долбоёба ты кусок. > любителя носится со стандартом как со святой грамотой Если в стандарте нет явно-указанного ордеринга вычисления, они спокойно могут быть как угодно упорядочены компилятором, и разрабам компилятора похуй что ты там думал, щенок ебаный.
>>3098564 Лучше конечно компиляция в машинный код с глубокой оптимизацией. В идеале под конкретную модель процессора, с учётом его микроархитектуры.
Касательно c# - претензий к скорости программ не имею, но вот этот jit во время работы большого проекта (300 тыс. строк, не считая библиотек) очень неприятно и мерзко лагает. Слава богам что не часто. Но при старте программы есть несколько мест где реакция гуя достигает несколько секуд (!!!). К этому быстро привыкаешь, потому что дальше всё работает весьма сносно. Но когда запустил аналогичную программу, написанную на компилируемом языке, было очень приятно работать из за неестественно отзывчивого интерфейса с нулевой латентностью.
>>3098564 >И есть ли реальная компиляция джава/шарпа говна в машинный код. Конечно есть, иначе бы программы не выполнялись. >Так все таки, что лучше (с фактами) jit или компиляция в машиный код? В большинстве случаев JIT лучше - это факт У джавы и шарпа есть возможность компилить сразу в машинный код, без JIT, как на C. Судя по бенчам выигрышь получается в потреблении памяти, но не в производительности (после разогрева конечно). Иметь рантайм оптимизации лучше чем не иметь - это тоже факт
>>3099710 Это будет не соревнование языков, а соревнование кто ебанутей оптимизации напишет. Я, при этом, абсолютно уверен, что программа на си будет быстрее программы на сишарпе/джаве хотя бы за счёт оверхеда из-за абстракций и управляемой памяти. Одновременно я абсолютно уверен, что в большинстве случаев си не нужен, потому что код на си будет писаться раз в пять медленнее и содержать в пять раз больше богов. И выбор в итоге будет не между быстрой программой на си и медленной на джарпе, а между работающей программой на джарпе и недописанной на си. мимо
>>3099718 >программа на си будет быстрее программы на сишарпе/джаве Если не будет сборки мусора, будут работать с одинаковой скоростью. Шарп и джава очень хорошо могут в оптимизацию.
В math.h обработка ошибок зависит от значния math_errhandling. Если math_errhandling & MATH_ERRNO != 0, то в errno выставляется значение ошибки, если math_errhandling & MATH_ERREXCEPT != 0, то выкидывается соответствующий excpetion.
Тогда почему у меня при math_errhandling = MATH_ERNNO | MATH ERREXCEPT при вызове acos(2) не происходит исключения? glibc вроде как выполняет стандарт POSIX 2008, я проверил там точно также
Я ожидаю что мне придет SIGFPE, но де факто лишь errno выставляется
>>3100307 >math_errhandling = MATH_ERNNO | MATH ERREXCEPT >math_errhandling & MATH_ERRNO != 0 >math_errhandling & MATH_ERREXCEPT != 0 я не наблюдаю эквала между a = b|c и a&c !=0 а ты наблюдаешь?
>>3100483 не хочу вдаваться в подробности, но >ЗБс соотвествие стандарту арифметика не может быть стандартизирована так как она за исключением ансигнедов абсолютно машинозависима ты стандартошиз что ли?
>>3100708 хммм я наверное глупость сейчас скажу, но последнее время чот на меня напал интересный язык лисп, кажется он идельно подходит для быстрого прототипирования (макеты программ) ну и соответственно тестирования всякой фигни то же, но лисп СТРАННЫЙ, условно сумма всех чисел в обычном языке это забить массив, пройтись фором все сложить, в лиспе это (PLUS числа через пробел) вот и все манит меня попробовать эту штуку
>>3099718 >программа на си будет быстрее программы на сишарпе/джаве хотя бы за счёт оверхеда из-за абстракций и управляемой памяти ты можешь писать на джаве (и наверное на шарпе?) без абстракций и без управляемой памяти
>>3101273 А можно из буханки хлеба сделать трамвай, и линукс на домашний комп поставить. Вся суть джарпа в менеджд коде и ООП. Глупо отказываться от таких удобных вещей в угоду небольшого буста производительности.
>>3101285 Конечно глупо, но это ведь абстрактное соревнование в скорости. Плюс к тому Ява позволяет выборочно писать высокопроизводительный код только там где это необходимо и писать как удобно там где нет смысла гнаться за скоростью.
>>3102556 ну это не особо влияет задачка не под бенчмарки и эта функция вызывается 5 раз, все основные мощности в другом куске ренджовый свич еще не был рассмотрен в этой главе так что его тут быть не могло
>>3102533 >а что ты тут собрался оптимизировать? Во первых - ничего. Зачем мне оптимизировать твой код, пущай этим занимаешься ты и/или компилятор.
Во вторых, isdigit() и isalpha() для простоты.
В третьих, неоптимизирующий компилятор сгенерил бы такой говнокод, что ты бы охуел - s[p-1] на х86 выродился бы в нечто такое mov %al, (%esi,%eax, -1) и постоянно обращался бы к памяти.
Оптимизирующий компилятор выполнит обращение к памяти один раз, загонит значение из памяти в регистр и дальше будет сравнивать с регистром.
>>3102591 >Во вторых, isdigit() и isalpha() для простоты. на пике просто наружка твоих издигитов изальф это уже кому какие сексуальные предпочтения по душе, кто то любит блекбоксить кто то нет
>В третьих, неоптимизирующий компилятор сгенерил бы такой говнокод, что ты бы охуел - s[p-1] на х86 выродился бы в нечто такое mov %al, (%esi,%eax, -1) и постоянно обращался бы к памяти. чот я тут такого не увидел
>>3102643 у тебя процентики а тут их нет а еще я тут могу только sp регистр опознать остальное не знаю >Как же ARM посасывает у x86 на этом примере. Загляденье. ну и в чем же?
>>3102678 >а такие мувы не считаются ансейфед или типа того? Так за этим ядро следит. Если к незамапленой странице полезет, то сгенерится прерывание, OC его перехватит и посмотрит что произошло - полезла программа в чужую память или страницы в свопе.
Если в свопе, то подгрузит страницу и свопа и перезапустит операцию, а если память чужая, то Core Dump и программа вылетела в ОС с ошибкой.
>>3102680 бля чел твой мув это ldrsb ты как без вычисленных оффсетов по стеку решил грузануть мувом байты? получается ты меня наебываешь вот тут - >>3102655 точно так же будешь делать свои 4 инструкции
>>3102687 >ты как без вычисленных оффсетов по стеку решил грузануть мувом байты? Хмм. Ну да, я форшманулся. Две инструкции на ARM, одна инструкция на X86.
>>3102693 насколько я знаю разница архитектур в том что на арме интрукции одинаковой длинны по машкодам а в х86 разной думаю листинг асма не такой уж и показатель не получится так что твой волшебный мув по машкодам и декодингу длиннее в тактах чем мой крестьянский мув в две инструкции? вот щепетильный вопрос вообще я хуй знает какой то оффтредовый холивар надо в асмотред идти там срать этим
>>3100307 Итак, нашел причину тряски Оказывается Posix ТАК ХОРОШО написан, что под raise invalid pointer exception он имеет ввиду лишь установку флага в структуре из <fenv.h>
А кто-нибудь шарит за асинхронный ввод-вывод в Linux? А то нужно скопировать файл с помощью aio_read и aio_write, а на выходе какая-то херня... Код: https://pastebin.com/EaiXPnUz ЧЯДНТ?
Аноны, чёт ничего не понимаю! Вроде у меня везде unsigned long long, а результат всё равно - превышение предельного значения (пик 1). Щито делать? В чём причина?
>>3111587 Аноны, я чутка улучшил ф-цию, но всё равное какая-то залупа происходит: величина переменной num правильная, а когда сохраняю её в массив, то он мне выдаёт превышение допустимого значения!!! Как это побороть?
>>3111822 Да, анон, это, короче, мой косяк я в деббагере не увидел, что можно также unsigned выбрать. И вообще я победил эту проблему - у меня спецификатор в sprintf был неверно указан.
не могу заставить себя продолжить делать K&R, уже вторую или третью неделю прокрастинирую... как найти мотивейшон, анонцы? ладно бы какая то задача попалась сложная и поставила бы в тупик, я бы себя понял, но я даже не вникал, чисто глазами пробежался что там надо atoi() переписать и все, тупо не могу даже файлик точнуть...
>>3112085 >и поставила бы в тупик Пиши на чистом Си, без использования ф-ций из стандартной библы, но только, если ввод/вывод, и то, можешь сам сделать эти ф-ции, используя низкоуровневые вызовы.
>>3112258 канешн, пишу велосипедики, конпелирую, отлаживаю, стараюсь делать для общих случаев, но юникод с разной длинной символов уже заебал костылить его так что последние только на энглюсике работают ну листинг с пика мало чо показывает, бинари на гит не заливаются, а дебаг выхлопы и кордампы я деличу прост (хотя там то же гитигнор на наих настроен, но прост привычка подчищать всякое говное ненужное)
>>3112244 >хули толку, мотивации нет говорю же Ну тут хуууй знает, чем тебе помочь. Отдохни, отвлекись, или, если нет мотивации, то и живи дальше в говне (в скрипто-макакном высоко-уровневом мире)!!!
Пытался понять ошибку Затем файл просто исчез непонятно почему и я ебанулся :~/so$ vim lol.c user@user-A320M-S2H:~/so$ gcc lol.c lol.c: In function ‘main’: lol.c:20:40: warning: passing argument 2 of ‘connect’ from incompatible pointer type [-Wincompatible-pointer-types] 20 | int result = connect(socketFD, &address, sizeof address); | ^~~~~~~~ | | | struct sockaddr_in In file included from /usr/include/netinet/in.h:23, from lol.c:2: /usr/include/x86_64-linux-gnu/sys/socket.h:126:52: note: expected ‘const struct sockaddr ’ but argument is of type ‘struct sockaddr_in *’ 126 | extern int connect (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len); | ^ user@user-A320M-S2H:~/so$ gcc -o lol.c c /usr/bin/ld: cannot find c: No such file or directory collect2: error: ld returned 1 exit status
Хуй мне кто поможет, но я ахуел, что файл просто так исчез и все что я писал
>>3116165 >incompatible pointer type >‘const struct sockaddr ’ but argument is of type ‘struct sockaddr_in *’ >No such file or directory помог тебе понять
>файл просто так исчез ну мб у тебя остался вимдамп, а может и не остался нехуй вирусы всякие писать
Молись, чтобы в той директории у тебя не было файла с Иначе твой исходник отправится в страну, откуда файлы не возвращаются. Ибо ключ -о требует аргумент (параметр).
>>3116373 >>3116344 Так-то надо мейкфайл написать. Можно сделать это один раз, написать "дженерик" мейкфайл, который потом всегда реиспользовать для мелких проектиков типа лаб.
>>3116382 соглашусь с этим аноном минималистичный тулчейн для поделок (текстовик + сборщик + линтер + тесты) это уже не только уровень, но и удобство мейк такой же простой как и вим, чуть подрочить его и впринципе уже будет готов мейкфайлик со всеми таргетами ветвелниями параллельной сборкой флажками на тестолинтерах и прочими наваротами потом уже можно поковырять какие нибудь грейдлы мавены если нужда есть для галеры
по изоляции приложунек я хуй знает, я ничо не юзаю никаких докеров кубернейтсов, пока что не было нужды
Почему за столько лет не разработали удобную инфраструктуру под си? Чтобы удобно было собирать проект одной командой, подтягивать библиотеки из репозитория? Такое ощущение, что всё застряло на уровне 80-90-х и не развивается.
>>3120324 > Почему за столько лет не разработали удобную инфраструктуру под си? Да а нахуй он нужен? Си никому не интересен кроме парочки нердов. Кроме программирования каких-нибудь PIC16 как альтернатива ассемблеру. Нерды умеют и любят пердолить конфиги. А обычным нормальным людям си нахуй не обосрался. Поэтому и удобную инфраструктуру никто не делает.
>>3129305 Никак. В современных многозадачных ОС с экраном работать невозможно, это прерогатива ОС которая пользовательским приложениям такого делать не позволяет, иначе одно приложение поломает другие. Если же пишешь под DOS, там просто пишешь в видеопамять и готово, так же в DOS можно пользоваться функциями BIOS, но они тормозные.
>>3120324 >Почему за столько лет не разработали удобную инфраструктуру под си? Разработали, и имя ей - UNIX. Командная строка рулит.
>Чтобы удобно было собирать проект одной командой make и CMake в той же командной строке
>подтягивать библиотеки из репозитория Средства Linux для работы с пакетами, а единого центрального репозитория нет. Сишники - люди свободные и гордые, их не заставишь ходить строем, и в цифровой концлагерь Шваба с жучиной похлебкой они не пойдут.
>Такое ощущение, что всё застряло на уровне 80-90-х и не развивается. Дух старой школы, хакерской романтики и цифрового анархизма жив только в Си. Дедушка Столлман наш учитель и вождь, а порриджам-смузизлебам из пейсбука и реддита здесь не рады.
>>3129305 На низком уровне по-разному, зависит от архитектуры ОС. Например, в Linux можно записывать в файлы /deb/fb (фреймбуфер экрана) и /dev/dri (интерфейс DRI/DRM). Вот пример вывода 2D графики без библиотек, путем записи во фреймбуфер:
Библиотеки SDL, OpenGL, Vulkan и др. являются надстройками над ОС и позволяют делать это кроссплатформенно, не вникая в детали, не нужные прикладному программисту.
>>3129349 Реализация OpenGL и Vulkan предоставляется драйвером видеокарты и работает на уровне ядра. А пользовательское приложение уже вызывает OpenGL функции.
>>3132699 >только char ну не будь таким строгим, не обязательно только чары, можно и инты, а в случаях ловли ЕОФа исключительно инт да и вообще инты как то предпочтительнее, так как у большинства машин шина четырехбайтная - меньше жонглирования = быстрее рантайм
>>3132836 >>3132845 или ты имеешь ввиду что это длина элемента в массиве что ли? типдеф тогда слепи себе из структуры в котором массив чаров лежит нужной длины
>>3132847 В других языках типы данных делают точной длины, поэтому можно делать массивы нужного размера, а си расплывчато. Тип может 1 байт, а может 2, иногда 4, хуй знает вообщем. Кто вообще это придумал? Неужели нельзя было сделать чёткие типы в 1, 2, 4 или 8 байт?
>>3132863 Нельзя, потому что наличие таких типов зависит от системы, на которой исполняется код. А вообще смотри типы в stdint.h, если не пишешь код под что-то экзотическое.
>>3132863 >Кто вообще это придумал? Неужели нельзя было сделать чёткие типы в 1, 2, 4 или 8 байт? Нельзя, это зависит от железа. Я например имел дело с железкой с минимальной адресацией 16 бит, соответственно и char был 16 бит. Остальные языки или работают на виртуальных машинах, или это раст, работающий в тепличных условиях (не на любом говне).
>>3132901 В Vala как-то сделали типы с гарантированным размером (int8, int16, int32, int64, uint8, ..., uint64), хотя это кросс-компилятор поверх обычного си.
>>3132785 > ну не будь таким строгим, не обязательно только чары, можно и инты, а в случаях ловли ЕОФа исключительно инт Я только и исключительно о представлении строк. > да и вообще инты как то предпочтительнее, так как у большинства машин шина четырехбайтная Отстал ты.
>>3132863 >. Кто вообще это придумал? Ричи. Он отталкивался от В, где был один тип данных. > Неужели нельзя было сделать чёткие типы в 1, 2, 4 или 8 байт? Нельзя было вот так вот сплеча. На пдп-11 слово было длиной 36 бит.
А если я так напишу? typedef signed char int8; typedef unsigned char uint8; typedef signed short int16; typedef unsigned short uint16; typedef signed int int32; typedef unsigned int uint32; typedef signed long long int64; typedef unsigned long long uint64;
Аноны, вопрос: Как понять с каким типом данных я имею дело? Т.е. задача такая: в зависимости от типа данных направить исполнение кода в нужном направлении? Например, при выводе на экран, т.е., в зависимости от типа данных, я должен выбрать необходимый спецификатор. Поискал в тырнете, и мне пишут, что можно использовать ф-цию typeof(), но эту ф-цию понимают компиляторы, начиная со стандарта С11. И мне стало интересно, а как до этого стандарта определяли тип данных? И какой алгоритм определения типа у ф-ции typeof()? И да, речь не идёт, допустим, о типах данных int или double, которые отличаются размером и можно ветвление построить через sizeof(), мне интересны такие моменты, как допустим long long int и double?
Хотя можешь форматную строку делать с помощью _Generic. Но это всё равно не >в зависимости от типа данных направить исполнение кода в нужном направлении Это просто удобная генерация кода на этапе компиляции.
>>3133102 полагаю дженериками/макросами ветвили, ну в общем то си как раз и предполагает, что такие ветвления делаются до рантайма прямо в рантайме нахуя если можно до? ну это примерно кейс мультиплатформенности: ифдеф дарвин типдеф лонг инт инт32_т типдеф лонг лонг инт инт32_т эндиф
ну вот нахуя нам этот кусок в рантайме вычислять? нет никакой необходимости
>>3133703 Раст не подходит: - Большой порог входа. Вы должны освоить borrowed checker семантику с которой поставляется Rust. И он совсем не похож на парадигму C к использованию которой мы все привыкли. - Приличный, но недостаточный набор инструментов. До сих пор нет IDE для раста. Плагины для других редакторов кода в вечной бете. - Очень мало GTK приложений написанных на Rust, там 5 или 6 toy приложений на которые можно посмотреть, состоящих из 200 строчек кода, но ничего большого сделанного на Rust я не видел(эмм fractal, привет, он уже был в 2017) - Медленная компиляция, что плохо для итерационного цикла разработки который вам действительно нужен при разработке GUI
>>3133598 >переходить зачем? это какая то психологическая болезнь - постоянно переходить на инструмент посвежее? чисто по фрейду: в детстве играл деревянными игрушками прибитыми к полу а дноклы в сегу - теперь вечно прыгаешь на все что вышло вчера. мои соболезнования
Можно как-то к указателю прибавлять без адресной арифметики? Например: int pInt = 0; pInt = pInt + 3; в этом случае прибавится 3 sizeof (int) а мне нужно, чтоб прибавилось 3 и выглядело не так уёбищно: pInt = (int)((char)pInt + 3);
>>3134516 >>3134515 Без адресной арифметики нельзя. Можешь использовать поинтер на чары или на войды и делать сдвиги нужного типоразмера. Но вообще хуй пойми зачем тебе нужно сдвигать на 3 байта если это поинтер на инты.
Пожалуй стоит добавить что это часть механизма переносимости сишника. На одной машине инты дефолтные четырехбайтные, а на другой вот допустим шестибайтные. В этом случае тебе не нужно парится и писать костыли чтобы вычислять нужные адреса на разных машинах. Все механики и типоразмеры уже зашиты в типс.аш и в стд либы нужной машины. Ты просто делаешь поинтер на инты и он каждый раз будет двигаться на сайзоф инта той машины на которую скомпилен. Очень удобно. Хайлевл язык. Никакой ебли с БЕ ЛЕ и размерами.
>>3134518 >Но вообще хуй пойми зачем тебе нужно сдвигать на 3 байта если это поинтер на инты. Мне такое требовалось для динамической кодогенерации. Указатель на int, short и т.д. - когда нужно записать параметр такого размера, указатель на байт unsigned char - когда нужно записать опкод инструкции. Еще возможно работа с видеопамятью, байты - отдельные цветовые компоненты, 4 байта - 1 пиксель. Во всех таких случаях следует использовать union.
>>3134535 >На одной машине инты дефолтные четырехбайтные, а на другой вот допустим шестибайтные Для этого нужно использовать типы из <stdint.h> - uint32_t и т.д. Они явно задают размер в 1/2/4/ 8 байтов.
>>3137637 ><stdint.h> Это интринсики, задаются компилятором, а не стандартом, и зависят от машины. Естественно на машине с шестибайтным интом они будут отличаться. Хотя конечно сейчас надо постараться, чтобы найти чтото настолько нестандартное. https://en.cppreference.com/w/c/language/arithmetic_types
>>3137666 Машину с шестибайтным словом сейчас наверно будет тяжело найти. Сейчас практически везде стандартные архитектуры: x86, ARM, PowerPC, SPARC или RISC-X. На других тоже кратная 8 разрядность. Хотя PDP-7 (на котором появился первый компилятор Си) был как раз нестандартным, 18-битным.
>>3098564 jit это и есть компиляция байт-кода в машинный код; иногда это называют еще и "интерпретатор компилирующего типа" чтобы отличать от "простого интерпретатора"; тащем то в вики неплохая статья https://en.wikipedia.org/wiki/Interpreter_(computing)
>>3137832 >Машину с шестибайтным словом сейчас наверно будет тяжело найти. >>3137666 >Хотя конечно сейчас надо постараться, чтобы найти чтото настолько нестандартное.
Это было просто для примера взято с потолка. Всегда проще объяснять принципы на пальцах.
Меня вот из хардварных вопросов больше интересует почему не спроектируют шину потолще. Многоядерность есть, а широкие шины чтобы сразу по 100500 слов забирать - не, интовой достаточно, копошитесь там как нить, жонглируйте.
Пытаюсь собрать окамл и с в один бинарник. Но почему то когда я добавляю файл bindings.o который был получен компиляцией исходника ocaml, вся сборка начинается выжирать 100Гигов оперативки (и больше). Как так получается, что попытка добавить один объектный файл приводит к такому результату?
>>3141140 Да хуй знает, чекни объектник там же таблица символов есть чо откуда куда и зачем. Либо ошибка в ней, либо он реально дохуя референсов тащит. мимо
>>3141238 U caml_apply2 00000054 D camlBindings 000001d0 d camlBindings__1 000001b4 d camlBindings__10 000001ac d camlBindings__11 000001a0 d camlBindings__12 00000194 d camlBindings__13 00000188 d camlBindings__14 00000168 d camlBindings__15 0000015c d camlBindings__16 00000144 d camlBindings__17 00000128 d camlBindings__18 00000048 d camlBindings__19 0000011c d camlBindings__2 00000038 d camlBindings__20 0000002c d camlBindings__21 00000020 d camlBindings__22 00000014 d camlBindings__23 00000004 d camlBindings__24 00000110 d camlBindings__3 000000fc d camlBindings__4 000000f0 d camlBindings__5 000000dc d camlBindings__6 000000d0 d camlBindings__7 0000009c d camlBindings__8 00000090 d camlBindings__9 00000000 T camlBindings__code_begin 000004aa T camlBindings__code_end 00000000 D camlBindings__data_begin 000001fc D camlBindings__data_end 00000440 T camlBindings__entry 00000220 T camlBindings__fix_union_349 000000d0 T camlBindings__flattern_type_351 00000200 D camlBindings__frametable 000000b0 T camlBindings__fun_420 00000330 T camlBindings__fun_433 00000064 D camlBindings__gc_roots 00000410 T camlBindings__ocaml_function_hello_407 000003d0 T camlBindings__ocaml_function_sum_367 00000000 T camlBindings__remove_duplicates_281 U caml_call_gc U caml_c_call U caml_curry2 U caml_notequal U caml_register_named_value U Caml_state U camlStdlib U camlStdlib__failwith_7 U camlStdlib__List__1 U camlStdlib__List__find_all_679 U camlStdlib__List__flatten_477 U camlStdlib__List__fold_left_521 U camlStdlib__List__length_aux_270 U camlStdlib__List__map_482 U camlStdlib__List__rev_append_308 U camlStdlib__Printf__fprintf_422
>>3141244 >>3141245 куча какого то нонейм говна тут вижу по циферкам которые не относятся к исполняемому коду так что полагаю второй вариант - реально тащит дохуя референсов чтобы это твое говно на 1200 строк работало скомпиль через раздутый своп да и все, в итоге я думаю линкер выкинет все оттуда на твои 100 гигов, это чисто какой то билдинг блоб для окемла, всяких типов хуипов и прочего говна под циферками это лично мое мнение, я не знаю как на самом деле
>>3141259 >скомпиль через раздутый своп да и все Уже выставил своп 128 гигов. Хуй знает куда дальше. У меня всего на диске 500. Еще, конечно, до 248 попробую поднять, если наскребу где то, но он так быстро все жрет, что я до сих пор думаю, что где то ошибка
>>3144133 ну чел, ты работаешь и не знаешь а я знаю и не работаю чувствуешь подвох? врят ли тебе тут будут помогать, давай сам выгребай, удачи с наебом хозяина работодателя а мы уже на дне
Спрошу тут. Это не совсем вопрос. Но тем не менее.
Обзавёлся серверов в домашней сети. Построил на нём инфраструктуру в виртуалках.. Самое главное - gitlab. Переащил в него пару проектов. Это предыстория.
Гитлаб нндоступен за пределами сервера. Насколько безопасно открыть его в домашнюю сеть? А насколько безопасно сделать его доступным из Интернета?