Тред, посвященный прародителю всех С-подобных языков и по совместительству единственному идеальному и всесторонне годному средству программирования как на системном, так и на прикладном уровне.
- Очевидный GCC. - clang: оче годно, батя рекомендует. - Intel C++ Compiler: оптимизации, тысячи их. - Visual Studio 2017 Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте. - Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное. - TCC: очень маленький компилятор с багами и поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.
Samuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition" (2002) Ебаный пересказ стандартов C89 и C99 (включая стандартную библиотеку). Для не осиливающих стандарт в оригинале. Читать в качестве подготовки к собеседованиям (есть задачник с ответами) и для ознакомления с масштабами пиздеца перед написанием своего парсера/компилера.
Peter Van Der Linden "Expert C Programming. Deep C Secrets" (1994) "Си: грязные истории". Смехуечки, немного объяснений, чем обусловлены особенности языка, всем известные подводные камни кто там ругал косяки в JS? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).
Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели.
Ben Klemens "21st Century C: C Tips from the New School" (2012)
Paul Deitel, Harvey Deitel "C for Programmers with an Introduction to C11" (2013)
Stephen G. Koch@n "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)
- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов). - http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.
Есть какие нибудь мануалы о том как написать эмулятор процессора, ну там двоичный сумматор и все такое? Хочу лучше разобраться в работе железа, и при том по практиковать Си.
>>1329873 Сперва в железе разберись, Петцольда там почитай, для начала очень годно. Потом накидай сам проц в каком-нибудь логисиме, чтобы не париться. Потом переходи на Verilog, наркоман
>>1329873 > ну там двоичный сумматор До такого эмуляция обычно не опускается - зачем складывать побитово, если можно сложить инструкцией add хоста и потом лишь посчитать флаги, если нужно.
С другой стороны, про работу железа есть Харрисы. Или лекции индусов.
>>1329874 Читать без практики мало полезно. Не влезает в голову, и не запоминается. Как я накидаю проц, если не знаю полное его устройство? У Петцольда по моему мнению слишком размыто, обрывками как то. Читал, но цельной картины не получил.
>>1329875 Ну это я для примера написал. Вообще хотелось бы понять, насколько отличаются от процессора регистровые виртуальные машины. Что лучше книга Харрисов или Таненбаума? Пробовал читать и то и другое, занудно очень, без практики не заходит. Вот бы была книга, где бы реализовывали регистровую ВМ, аналогичную современному процессору.
>>1329873 Алсо, кидал уже сюда статью: http://www.gtoal.com/sbt/ Это на случай, если надоест играться с медленным switch/case и захочется зделать, как у взрослых дядь.
>>1329875 >зачем складывать побитово, если можно сложить инструкцией add хоста и потом лишь посчитать флаги, если нужно Для обучения. Чтобы понять как устроен процессор.
>>1329878 > Что лучше книга Харрисов или Таненбаума? Харрисы гораздо, гораздо глубже. Если тебе для общего развития - лучше Таненбаум.
> Как я накидаю проц, если не знаю полное его устройство? Нахуй тебе полное устройство? Это слишком низкий уровень для Си. Тебе правильно посоветовали не писать для этого по сути свой логисим, а взять готовый. А потом, когда наиграешься в гейты, уйти в какой-нибудь HDL.
А уровнем выше внутреннее устройство процессора перестает тебя волновать, ты просто придумываешь, что вот у тебя сколько-то регистров, такие-то инструкции, а вот так ты их кодируешь. Вот ты читаешь инструкцию по PC, разбираешь на опкод и операнды, вычисляешь ее и пишешь результаты. Это задача на вечер, а необходимые для ее выполнения знания приобретаются по ходу дела.
>>1329878 Запускаешь Logisim @ делоешь. Сперва АЛУ, потом память (с ней можно не запариваться и взять готовую), связываешь, прикручиваешь управляющие сигналы, после чего долго ебешься с устройством управления и его табличками истинности но я слабак и сделал все на микрокоде.
>>1329879 То есть мы опускаем свитч-кейс и опускаемся сами на уровень ниже, заменяя свитч на кучу побитовых операций. Ну да, так быстрее, но несведущий в железе хуй поймет, как эти побитовые выполняются на процах с разной разрядностью.
>>1330302 >заменяя свитч на кучу побитовых операций. >несведущий в железе хуй
Там же заменили switch/case на goto по массиву меток. Тогда у нас не будет множества сравнений и нужный адрес перехода будет получен сразу по опкоду. Но эта штука ломает предиктор переходов, на малом числе инструкций должна проигрывать по скорости.
>>1330322 Я не знаю Си, просто предположил, что там делается исходя из своих знаний в джаве. Циклы кстати увидел, флаги увидел, но так и не допер, зачем все это надо. Сишку только начал учить.
>>1330322 >Там же заменили switch/case на goto по массиву меток. Это как-то похоже на специализированный хеш? Cразу отмечу, я нуб но ты уже сам догадался
>>1330281 > чем заменяют CASE/SWITCH взрослые дяди? Ну, во-первых, бывает удобнее табличками, а во-вторых, я слегка неправильно выразился. Можно транслировать эмулируемый код в нативный, и выполнять уже его. switch, конечно, останется, но уже в трансляторе, зато однажды оттранслированный код уже можно выполнять быстро, безо всяких switch. Можно делать это статически и итеративно, как в статье, а можно динамически, как делает QEMU.
>>1330516 Ты блять ебанутый штоле? Иди сука хотя бы одну книжку прочитай, урод блять. А то еще даже синтаксиса не знают, уже пидоры компиляторы качают. ХУЙ СОСИ БЛЯДИНА ЕБАНАЯ
>>1330393 С какого перепугу switch/case раскроется в if/else? Если сишник предпочел написать | switch (suka) { | case 1: | deystvie1(); | break; | case 2: | deystvie2(); | break; ................ | default: | idinahui(); | } вместо нисколько не более длинного варианта | if (suka == 1) { | deystvie1(); | } else if (suka == 2) { | deystvie2(); | } ................ | } else { | idinahui(); | } значит так надо, и должна использоваться jump table для выбора нужного адреса по индексу, а не N ненужных проверок на равенство с небольшим int. Следующая метка не задает логический конец куска кода под предыдущей, а просто показывает, откуда начать, и в случае, если break опущен, программа по вполне defined behaviour должна выполняться дальше, ведь так было задумано.
>>1330548 Не знаю... Русской литаратуры практически не существует, стало быть, речь идет о переводах. Я перевод этой книжки никогда не искал, а перед гуглом все равны, так что пусть помогает без посредников)
Откуда при файловом вводе вылезает символ ? Если я пытаюсь завершить вывод массива когда его элемент равен NULL, то он не выводится, но с NULL в условии записи символа в ячеййку массива всё равно попадает в нулевую ячейку.
>>1330556 У тебя файл выглядит так: 30\ndh fh\n Когда ты в 12 строке читаешь k, у тебя каретка переходит на перый\n, и в name записывается "\ndh". Чтобы подобной хуйни не было, читай сначала построчно с помощью fgets, а потом уже парси отдельно строки.
Вообще, кто бы тебя чему не учил, используй эти советы:
1. Никогда не объявляй кучу переменных построчно char name[30]; char b = '.'; 2. Всегда инициализируй переменные, даже если это не несет смысла. int k = 0; 3. Объявляй переменные как можно ближе к месту использования и как можно быстрее их пришибай FILE* vvod; fopen_s(...); int k = 0; fscanf(vvod, "%i", &k); 4. По возможности объявляй перменные прямо в цикле for for (int yoba = 0 ... 5. Думай о переполнении буфера. Из-за него цикл while тебе на самом деле не очень нужен int i; for (i = 0; i < 30; ++i) { int b; fscanf(vvod, "%c", &b); if (b == ' ') { break; } if (b != '\n') { name = b; } } for (int i1 = 0; i1 < i; ++i1) { //... } 5. Всегда обрамляй if, for и прочее в фигурные скобки, даже если там одна строка.
Про вменяемые имена переменных и константы вместо магических цифр молчу, это не так принципиально в таком коротком коде. А вот это принципиально. Пока поймешь, что делает твой код, охуеешь, потому что постоянно нужно бегать глазами вверх-вниз между объявлениями переменных и непосредственно тем,что делается.
>>1330562 Я всегда обрамлял if в фигурные скобки, если там больше одного двоеточия, но в этот раз что-то забыл. Я хз как это давало мне ту закорючку, но именно фигурные скобки решили проблему. Спасибо, что напомнил.
А можно ли как-то при файловом вводе при выполнении определённого условия переместить курсор программы в начало следующей строки, если на текущей ещё что-то написано?
>>1330587 почему мудак сразу?) между прочим, это удобно в макросах, когда надо сделать несколько последовательных действий, и в конце еще что-то "вернуть"
>>1330549 >С какого перепугу switch/case раскроется в if/else? >значит так надо, и должна использоваться jump table для выбора нужного адреса по индексу, а не N ненужных проверок на равенство с небольшим int Это уже компилятор решает, в данном случае тот же gcc таблицу делать не будет из-за явной потери скорости на inderect-переходах.
>Следующая метка не задает логический конец куска кода под предыдущей, а просто показывает, откуда начать, и в случае, если break опущен, программа по вполне defined behaviour должна выполняться дальше, ведь так было задумано. И без таблицы переходов абсолютно такое же поведение, он сначала ищет нужную метку по значению, дальше никаких проверок нет.
>>1330882 Нужен для ядра твоей Windows/Linux/MacOS, системного софта, драйверов, интерпретаторов и VM, СУБД, встроенных систем и различных задач, требующих от кода максимальной производительности.
>>1330942 Агась. Понятно. Этим занимается ничтожный процент умеющих срать не снимая свой прокуренный свитер, с бородой до хуя и очками толщиной с увеличительное стекло. Остальным 99% бетономешалка?
>>1330956 >Этим занимается ничтожный процент умеющих срать не снимая свой прокуренный свитер, с бородой до хуя и очками толщиной с увеличительное стекло Да >Остальным 99% На них похуй
>>1330956 >Этим занимается ничтожный процент умеющих срать не снимая свой прокуренный свитер, с бородой до хуя и очками толщиной с увеличительное стекло. Не всё так плохо, но в целом - близко.
>>1330961 Значитца или элитка или полное дно. Нормально. Борода и свитер у меня уже есть, дело осталось за малым. Программировать программирование не имеет смысла, какую литературу читать для специфики, чтобы избежать бетономешалки обосцатой.
>>1330974 Это не так работает. Учишься годами никому ненужной хуйне, потом торгуешь попкой на Толоке. Если не сложно покажи вакансии для тех кто смог, чтобы по требованиям было понято хуле им надо кроме свитера и бороды.
>>1330984 Чот долго отвечал, я уж думал путь вам открыл и вы все на толоку сбежали. Ну ладно. Сейчас смотрю вакансии в Миллионной мухосране. 70% 1С погроммист, остальные 30% кресты в сочетании с С#, питончиком. По СИ ни одной. Судя по рынку труда рисковые вы ребята..
>>1330967 >>1330961 >>1330956 Мне кстати очень приятен внешне этот образ. Я даже иногда видеотрансляции смотрю, как такие вот прогмики пишут что-то сложное на сиплюсплюс или чистом си. Может даже сделаю этот образ своим личным стилем.
>>1330993 Стой. Тебя-то я и искал. Извиняюсь за много постов ребята, но в таком деле не помешает определиться стоит ли ввязываться, не на пять минут развлечение. А что ты продаёшь? Подучу там инкремент, указатель, хуё-моё, что знать надо, подетальнее бы. >>1330992 >А нахера тебе вакансии? Представляю собой анахронизм в виде устаревшего гетеросексуального меньшинства. Не хотелось бы торговать попкой оставшись без денег с навыком 999lvl по погромированию калькулятора.
>>1330997 >Представляю собой анахронизм в виде устаревшего гетеросексуального меньшинства. Надеюсь, это шутка. То, что тебе борда мозги промыла по поводу того, что все геи и битарды, это не отменяет того, что в реальной жизни ничего не меняется.
>>1331012 Типаж смузихлеба с выбритой бородкой, у меня грязная и дырявая майка, волосы с хвостиком завязанные резинкой для денег, самостоятельная борода и пивной живот.
>>1331001 Спасибо. Кек. Вы мне нравитесь, вакансий нет, какие-то слова по запросам на которые гугл находит поехавших психологов. Заманчиво, но надо подумать.
>>1331052 А я в 2008-2012 вообще ходил с неким подобием каре, как сейчас ходят какие-то школьники. Но я специально так делал, потому что забивал на внешку, чтобы быть не как все, что собственно делаю по сей день.
Тупой вопрос, конечно, но никак не могу найти пример интеграции flex и bison в программу. Все примеры как-то сами по себе. Хочу, например, считать конфиг файл, что-то с данными сделать и записать обратно.
>>1331328 Зависит от ассемблера. В Си тоже можно имена переменных на русском писать, и это тоже зависит от компилятора (в шланге все ок, а в гцц можно только кодировать через \u): https://wandbox.org/permlink/70CQj8G6CNhTpJio
>>1330942 >требующих от кода максимальной производительности. А почему в геймдеве с++ это стандарт? На нем легче проектировать? Или в каких-то задачах с++ производительнее? Я понимаю что это уже сто раз схавано и высрано, но реально не найти нормального объяснения.
>>1331582 wut flex/bison - это программы которые генерят код парсинга, не библиотеки. Тебе нужно скомпилировать этот сгенерированный код как часть твоей программы. Соответсвенно нужно настроить сборку чтобы она запускала flex/bison, а потом компилировала сгенерированный код
Как сделать так, чтобы, например, память выделялась для количества строк или ячеек массива, которое задаётся заранее и может быть меньше, чем объявлено константой в самом коде? Например, я не могу сначала сделать так: int n; scanf ("%i", &n); int massiv[n];
Аноны, посоветуйте, что можно написать такого на Сишке? Желательно как-то связанное с сетями и безопасностью. Может, малварь какую? Есть какое чтиво по этой теме?
>>1331914 Да я уже вроде разобрался. Теперь осталось придумать как, например, оттуда заполнять какую-нибудь структуру из моей части программы. Автор оригинального вопроса
>>1332088 Непереносимо. В остальном ок. Присмотрись к dialog manager, ему можно скормить шаблон окна из ресурсов, заставив делать всю эту кучу CreateWindowEx с проверкой ошибок вместо тебя. Даже если у тебя не диалог на самом деле.
>>1332094 Написав в тысячный раз "конструктор" для структуры, ты передумаешь. И много ли ты знаешь сколько-нибудь современных движков на Си? Незаконченный и кривой Corange, да движки стратежек, где все гвоздями прибито к конкретной игре.
>>1332181 Можно хоть на Брейнфаке написать, он Тьюринг-полный. Вопрос в том, что если сама задача распологает к использованию парадигмы ООП, почему надо избегать подходящего инструмента? Только потому, что на Си тоже можно? У меня создается впечатление, что ты залетный петушок, который учебник еще не закончил читать.
>>1332196 >ты понимаешь под парадигмой ООП? Больной? То же самое, что и другие, тебе что, определение сюда скопипастить? Гугл в помощь. >ты очередной онально-ориентированный-питух Как что-то плохое
>>1332181 >Что писал? Какие-нибудь игровые движки или что-то схожее (на C/C++).
>Что обычно не говорят? В среде хоть как-то разбирющихся людей такой вопрос никогда бы не встал.
>Хочешь сказать нельзя написать движок на Си или на Хаскелле, потому что в них якобы нет ООП? Это только ты такую чушь можешь выдать.
Представь себе простую ситуацию, тебе нужно создать некоторый новый "тип" объектов в игре. В плюсах ты просто создаешь нужный класс-наследник, модифицируешь несколько методов и voilà. В Си же ты заметишь, что код нечитаем и представляет из себя кривой копипаст, чуть ли не экспоненциально разрастающийся. Си не очень подходит для написания игровых движков.
>>1332189 >У меня создается впечатление, что ты залетный петушок, который учебник еще не закончил читать.
>>1332225 > модифицируешь несколько методов А в си у тебя инкапсуляция, ты делаешь пару оберток над методами, и норм, никакого копипаста. Вот с виртуальными функциями (или каким-то иным способом взаимодействия объектов) слегка сложнее, но тоже решаемо. И еще писать игровые движки сильно мешает необходимость изобретать даже сраный динамический массив или тащить какую-то левую либу для этого, тогда как в крестах все из коробки, да еще и с дженериками.
>>1332225 Ты не понял, о чем он говорит, он говорит не о том, что писать на плюсах используя ООП менее удобно, чем на Си. Он пишет про то, что можно написать движок не используя ООП, и все твои аргументы про объекты вообще смысла не имеют, смекаешь?
>>1332091 На самом деле нет. В движках очень много попарных взаимодействий, а классическое ООП очень хуево диспетчеризует их. А конструктор структуры это не признак ООП, такое и в хаскелле есть.
>>1332206 А моя интуиция рисует мне -максималиста, который о других анонах строит необоснованные выводы и что-то сам себе наговаривает, ни разу не выйдя в объеме своего кода на Си за 500 строк.
>>1332235 Ты точно писал что-то действительно сложное? Просто ты ты в противоположность ООП скинул какой-то странный нечитаемый код. Или по-твоему если не использовать ООП, то тогда писать код можно только так?
>>1332241 Приведи какой-то другой пример. Если в твоем примере будет не говнокод, там будут структуры и функции для работы с ними. Это ничем не отличается от объектов и методов, кроме названия, особенно если говорить об изначальном понятии ООП.
>>1332225 >Представь себе простую ситуацию, тебе нужно создать некоторый новый "тип" объектов в игре. В плюсах ты просто создаешь нужный класс-наследник, модифицируешь несколько методов и voilà. Нит.
Допустим, у тебя есть корабль и астероид. Они должны сталкиваться. То есть ты хочешь написать методы
Но в С++ диспетчеризация основана на VMT и класс, по которому ты диспетчеризуешь, только один. Поэтому если ты захочешь написать класс Yoba, который будет collide, модификацией нескольких методов ты не обойдешься. Проще всего будет написать класс Pawn, из которого как из кубика в конструкторе можно будет создать новый тип, а в его методе collide уже разбираться что там да как с помощью банального свитча
корабль - это Pawn, у которого такая-то текстура, при взрыве хуячится Pawn.setAnimation(animation), ну и куча подобного. Никакого наследования не нужно, только композиция таких хуевин. И современные движки так и работают.
>>1332231 >Ты не понял, о чем он говорит >Он пишет про то, что можно написать движок не используя ООП... Даже если так, то я на это прямо ответил. А это не так, смотри:
>>1332126 >Зачем мне конструктор. При чем тут Си? Если у тебя движок ассоциируется с ООП, то мне тебя жаль. Культ-карго ООП.
Да, у меня игровые движки ассоциируются с ООП. Как и у тех, кто их пишет. По крайней мере даже самый плохой код движка, который пишут на Си, будет к этой концепции стремиться.
>>1332247 >Да, у меня игровые движки ассоциируются с ООП. Как и у тех, кто их пишет. Это не так. Движки нужно писать компонентно-ориентированными. То, что с точки зрения ООП является лютым зашкваром. Выше я описал концепцию кратко: игровые сущности не являются инстансами класса с наследованием, они являются одним универсальным классом, в который как кубики вставляются различного рода модификаторы. А далее случается такая хуйня, что ООП-ньюфаги видят слово класс и говорят, мол "ну это же тоже ООП", но нет, ООП, несмотря на свое желеобразное определение, компонентый подход не является. Unity сильно компонентен, Unreal стар и появился еще во времена доминирования ООП, но дрейфует в сторону компонентов, писать новый движок с ООП нет никакого смысла.
>>1332252 Это просто новый баззворд, который почему-то противопоставляют ООП. А на самом деле: объекты есть? - есть, сообщениями обмениваются (методы вызывают)? - да. Все, ООП. А дальше ты уже можешь различать способы, как наиболее удобно этого добиться.
>>1332254 >Это просто новый баззворд Я тебя inb4 разъебал: 'А далее случается такая хуйня, что ООП-ньюфаги видят слово класс и говорят, мол "ну это же тоже ООП", но нет, ООП, несмотря на свое желеобразное определение, компонентый подход не является.' Этот новый баззворд старше тебя. >А на самом деле: объекты есть? - есть, сообщениями обмениваются (методы вызывают)? - да Оу, ну тогда хаскель - ооп язык. И машинные коды, хули.
>>1332252 Компоненты это скорее архитектурный паттерн. Если ты не маньяк, то в любом случае даже в компонетном движке у тебя будет множество классов для самих компонентов, векторов, матриц, строк, коллекций, геймплейныйх объектов и т.п. даже если ты напишешь все на С, то все равно придешь к ООП просто сделаному через жопу
>>1332256 > хаскель - ооп язык. И машинные коды, хули Насчет хаскелей не скажу, но "ООП-язык" - это, видимо, что-то, содержащее сахарок для реализации какого-то сорта ООП. В Си сахарка нет, в машинных кодах тем более. Но писать объектно-ориентированный код на этих языках можно.
>>1332257 >у тебя будет множество классов Аналогично: 'ООП-ньюфаги видят слово класс и говорят, мол "ну это же тоже ООП"'. А если я #define class struct напишу у меня ООП перестанет быть ООП?
>>1332258 >В Си сахарка нет, в машинных кодах тем более. Но писать объектно-ориентированный код на этих языках можно. Писать объектно-ориентированный код можно, и примером такого кода является оконная система WinAPI - при чем там сообщения это не просто какие-то функции, это действительно сообщения а-ля смоллток, которые ты можешь послать кому угодно, это наследование и прочая хуйня. И это ООП.
Но объектно ориентированный код - это не все, что содержит структуры с конструкторами и деструкторами, как думают ньюфаги. Основной признак ООП - это иерархия наследования реализации. Если у тебя нет наследования, у тебя нет ООП. Например, STL в С++ - не ООП, и автор STL ООП не любит. std::vector не наследник std::abstractcontainer. И в игровых движках ОО-подход не используется. Какие-то фичи ОО-языков могут использоваться для каких-то своих целей или эмуляции других парадигм, но с мыслью об ООП никто не программирует.
>>1332265 Нет, это та вещь, которая отличает ООП от любой другой парадигмы. Определения они вообще про это - как отличить одну парадигму от другой. То, что ты вокруг себя нихуя, кроме ООП не видишь, это проблемы твоей малообразованности, а не моих попыток тебя образовать.
Ребят, но я всего лишь спросил почему в геймдеве доминирует анальное с++.. Ответа я так и не понял. На нем легче? Не легче? Тогда почему все практически на нем?
>>1332277 C++ практически единственный язык, который предлагает тебе т. н. zero cost abstractions - то есть ты используешь высокоуровневые абстракции, а компилируется это в эффективный машинный код, как если бы ты писал на С. Сишка таким языком не является, в ней высокоуровневых абстракций просто нет. И, что важнее, он в такой роли уже практически 30 лет. То есть если сейчас появится язык, который лучше С++ в этой области, 30 лет доминирования хуй обойдешь.
>>1332277 Изначально геймдев на крестах из-за байтоёбства, потом сам язык стал стандартом отрасли, это как у физиков фортран, и ссать они на всех хотели, особенно зарубежные, там написано уже почти всё и заебёшься заново пердолить.
>>1332284 Аргументация будет или продолжать тебе хуем по губам водить? >>1332286 >Это всего лишь твоя охуительная теория. Нет, это общепринятное в индустрии определение. Потому что твое определение, которое используют люди недалекие, сводится к тому, что ООП - это все, что угодно. Это хуевое определение.
>>1332247 >Да, у меня игровые движки ассоциируются с ООП. Секта свидетелей ООП. Еще до плюсов писали сложные проекты. И тут ты такой выполз, и кричишь что без ООП код не читаемый. Не обобщай, просто ты не умеешь писать.
>>1332262 Слышь, хватит пургу нести. В Си функции значит не сообщения, а твои такие же функции в классе уже значит сообщения? Придумали ерундуу, те же самые функции пишут, а кричат типа это сообщения.
>>1332268 Вот ты и попался. Говоришь значит, что если есть наследование, то уже ООП? И говоришь, что в Хаскелле нет ООП? Хорошо, а ты в курсе, что в Хаскелле тоже есть наследование?
>>1332281 >Сишка таким языком не является, в ней высокоуровневых абстракций просто нет. ШТА? Это каких нет? Ты вообще знаешь что такое абстракция? Иди СИКП читай, неуч.
>>1332281 >И, что важнее, он в такой роли уже практически 30 лет. То есть если сейчас появится язык, который лучше С++ в этой области, 30 лет доминирования хуй обойдешь. Ладно ты ООП сектант, но оказывается еще и упоротый по крестам. Типичный пример эффекта Даннинга-Крюгера. Не видел ни одного языка кроме крестов, и заикаешься о том, что лучше, где абстракции мощнее.
Все, тебя уже не исправить. Такое бывает когда начал с C++ и дальше не изучил ни одного языка. Мозг искривляется в сторону крестов, и больше не способен адекватно мыслить.
Спасибо тому кто в прошлом треде тыкнул меня в Bloom Filter >>1326938 , благодаря этому решил свою задачу гораздо проще чем собирался. Также обнаружил для себя существование таких алгоритмов как HyperLogLog и MinHash, но пока моих математических знаний не достаточно для того чтоб нормально понять как этим пользоватся
>>1332325 Пожалуйста. >>1332310 >В Си функции значит не сообщения, а твои такие же функции в классе уже значит сообщения? Я такого не писал. >>1332311 >Говоришь значит, что если есть наследование, то уже ООП? И говоришь, что в Хаскелле нет ООП? В секте свидетелей ООП немного другое - они считают, что если что-то написано с использованием ключевого слово class - это уже ООП. Например, STL - это ООП. Потому что вектор, епта, это класс, епта, и мы ему, епта, посылаем сообщение resize, епта. Что, конечно же, не так. Даже с учетом того, что vector в современной реализации STL может наследоваться от _GLIBCXX_STD_C::vector, все равно ООП это не станет. >>1332313 >Говоришь значит, что если есть наследование, то уже ООП? И говоришь, что в Хаскелле нет ООП? Хорошо, а ты в курсе, что в Хаскелле тоже есть наследование? Цитирую себя >>1332262 основной признак ООП - это иерархия наследования реализации Проблема в том, что ты не читаешь, что пишут, а ищешь, как бы так сделать, чтобы я попался. Во-первых, пососи хуй. Во-вторых, даже если я где-то опечатался, это не значит, что я не прав. Впрочем, см. во-первых, потому что для таких долбоебов я заранее написал уточнение. >>1332314 Что ты блядь с этим сицпом носишься. Я эту книгу прочитал 8 лет назад. Еще про Даннинга-Крюгера мне что-то втирает, лол, прочитал одну книжку и уверен, что стал богом программирования, лол. В SICP термин object oriented встречается один раз, в сноске, в которой говорится, что наследование - это пиздец и источник сложности, поэтому мы сфокусировались на состоянии и сознательно эту тему обходим, пока не придумают что-то получше. Видишь ли какое совпадение, даже в SICP термины object oriented и inheritance стоят рядом. >>1332315 Бля, обожаю этих бордошизиков, которые выдумали себе картину мира и дальше их манямирок трескается: оказывается в мире есть С++ программисты, которые знают больше языков, чем шизики, прочитали больше книжек и каким-то чудом ПРОЧИТАННЫЙ СИЦП не превращает их в каких-то гениев аргументации по существу, а они так и остаются маньками с гонором и с тупыми, не относящимися ко мне вангованиями.
>>1332352 Опять стандартная ситуация - пишешь пост, разъебывающий кого-то, в ответ жалкое блеянье в стиле "обосрался - притворись троллем". >>1332352>>1332354 Ты с кем вообще разговариваешь, шизик? Найди у меня фразу "Абстракция не равно ООП". У тебя дислексия похоже.
>>1332337 Ты даун походу. ООП это объекты и сообщения. Все, только эти две концепции определяют ООП. Такое можно писать и на Лисп, и на Хаскелле. Об этом в СИКПе говорится тоже. Ты конечно же не читал.
Бля, я понял. Когда шизик читает: "В секте свидетелей ООП немного другое - они считают, что если что-то написано с использованием ключевого слово class - это уже ООП. Например, STL - это ООП." он видит фразу "STL - это ООП" и из-за клипового сознания уверен, что это я утверждаю, что STL - ООП. Лол. Насколько тупым нужно быть, чтобы не видеть, что написано.
>>1332356 >ООП это объекты и сообщения. Все, только эти две концепции определяют ООП Приведи пример не ООП. > Об этом в СИКПе говорится тоже И тут ты такой с цитатой.
>>1332355 Тебя уже раскусили, дошколенок. Ты написал, что в Си нет высокоуровневых абстракций. Если бы ты читал СИКП, то знал бы, что можно кодировать данные на функциях, создавать свои абстрактные структуры данных. Про абстракцию данных ты ничего не знаешь. Это ты так СИКП читал, ну-ну. Это и есть абстракции высокого уровня.
>>1332369 Ты тупой что ли. Я тебе написал - объекты и сообщения. На этом было основано ООП, это главная идея. Это легко в основу Smalltalk и Simula, а потом было стянуто Страуструпом.
>>1332373 Нет, это ты тупой. Я не спрашиваю тебя, что такое ООП в твоем уебанском определении, я спрашиваю тебя, что ООП в твоем уебанском определении не является.
>>1332376 Возьми и отними от всей чепухи объекты и сообщения. Идеальным ООП языком можно назвать Erlang. Там настоящие сообщения, как в Smalltalk. Даже сам Кей об этом говорил.
>>1332378 Это называется доказательство от противного. Шизофреник тот, кто определяет ООП через объекты и сообщения. Я показываю, что это определение не работает, потому что оно слишком обобщенно, это все равно, что сказать, что человек - животное без волос. Что для местных школьников является недостижимым уровнем дискуссии.
короче, посоны. ооп это костыль для людейкак и фп, для людлей поумнее, шоб им понятнее и проще было. вы можете оборачивать это во сколько хотите слоёв филосовствовоний и прочей поебени для юзеров, но на самом дне это всё еще опкод
>>1332377 Идея ООП изначально была глупой. Алан Кей же был биологом, и еще очень любил громкие высказывания, якобы он все понимает лучше других. В математике насколько мне известно он ничего не открыл. Из этого следует, что у него была прочная профессиональная деформация в сторону биологии. Биология имеет мало общего с техническими науками, и инженерией. Но Кей все равно решил скрестить бульдога с носорогом. И насколько мне известно не реализовал свои громкие заявления. Его модель ООП так и осталась никому не известной, но из-за него появились другие модели, которые еще более провальны.
Поэтому книги по OОП, старые или новые, априори содержат в себе чепуху. Так как сама идея чепуха, а реализация еще хуже. И не стоит забывать, что ООП на классах не единственная модель. Есть еще прототипное ООП из языка Self, и якобы тру-модель из языка Smalltalk, которая потом (в Smalltalk-80 и далее, а может чуть раньше) тоже была сильно извращена.
>>1332383 Это я и писал если что. Но это никак не мешает тому факту, что ООП определяют объекты и сообщения. Вся остальная шелуха была введена уже после.
>>1332381 >Шизофреник тот, кто определяет ООП через объекты и сообщения. Потеряйся. Умник тут нашелся. Ты что ли ООП создавал? Создатель ООП Алан Кей. Он сказал, что главная идея ООП объекты и сообщения между ними, все. Ты понимаешь или у тебя мозгов нет.
>>1332377 Ты так с придыханием произносишь "сам Кей", как будто слова дедушки кого-то волнуют. Он даже не первый ООП-язык придумал. Все, что он сделал - это дал людям хайповый термин, который наполнили содержанием другие люди. Когда критикуют ООП, критикуют не какие-то рандомные утверждения об объектах (без определения) и сообщениях (без опеределения), а монструозные иерархии наследования, паттерны gof (которые делают эти иерархии еще более монструозными) и прочее. >Идеальным ООП языком можно назвать Erlang За такое тебе в лучшем случае перезвонят, если ты где-то назовешь Erlang ООП-языком.
>>1332388 >Он даже не первый ООП-язык придумал. Чяво? Щас будем тебя носом тыкать.
Разработал язык программирования Smalltalk, где впервые был применён объектно-ориентированный подход. Лауреат премии Тьюринга 2003 года за работу над объектно-ориентированным программированием, Премии Киото (2004). Один из создателей проекта One Laptop Per Child.
>>1332388 >Когда критикуют ООП, критикуют не какие-то рандомные утверждения об объектах (без определения) и сообщениях (без опеределения), а монструозные иерархии наследования, паттерны gof (которые делают эти иерархии еще более монструозными) и прочее. Эта вся чепуха не относится к эталонной модели ООП. Тем более паттерны от банды четырех наркоманов. Снова шах и мат тебе. Иди матчасть учи.
>>1332388 >За такое тебе в лучшем случае перезвонят, если ты где-то назовешь Erlang ООП-языком. Эрлангистов разбирают как горячие пирожки в голодный год. Он наиболее близок к эталонной модели ООП.
>>1332389 >Создатель ООП Оле-Йохан Даль. Алан Кей придумал этому название. И дал неверное определение. Чепуху несешь. То что он там наваял, не называлось ООП, это обычная наркомания как в C++.
«Я придумал термин «объектно-ориентированный», и могу сказать, что я не имел в виду С++». Алан Кэй, конференция OOPSLA, 1997.
>>1332390 >Чяво? Щас будем тебя носом тыкать. Тово, школьник с даннингом-крюгером. Тово. Впрочем, ключевые слова для судорожного гугления я уже назвал в прошлом посте, можешь пиздовать гуглить. >Эта вся чепуха не относится к эталонной модели ООП. Относится. И в смоллтоке были ебанутые иерархии. Это уже задним числом Кей начал от них открещиваться.
>>1332394 >Впрочем, ключевые слова для судорожного гугления я уже назвал в прошлом посте, можешь пиздовать гуглить. Основателем ООП считается Кей, а никакой не Даль. Далевская наркомания это процедурка на классах.
>>1332394 >И в смоллтоке были ебанутые иерархии. Это уже задним числом Кей начал от них открещиваться. Не ври. Их ввели в Smalltalk-80, когда он уже не участвовал в разработке.
Короче, даже Джон Бэкус, создатель первого высокоуровневого языка (предка Си), говорил что ФП превосходит императивное программирование во всем. Есть уйма инфы по этой теме, его доклады и статьи.
>>1332398 Да заебал ты уже со своим декраративным подходом. Императивное программирование ближе человеку. Императивная программа выполняется так, как было задумано, без ебучих отложенных вычислений, которые всю память сжирают.
>>1332397 >Основателем ООП считается Кей, а никакой не Даль. Далевская наркомания это процедурка на классах. Кем считается? Кей - калифорнийский хипстер, а Даль - норвежский ученый. В этом разница. Хипстеры тебя тебя слышат друг от друга о Кее, потому что из Калифорнии проще хайповать и уверены, что смолток первый ОО-язык. Хотя в среде профессионалов подобной хуйни нет. >Далевская наркомания это процедурка на классах. Ты 5 минут назад первый раз услышал о симуле и у тебя уже готов вердикт. Википедийный школьник как есть. Сообщество с тобой не согласно, оно Далю за изобретение ООП премии дает. >Не ври. Их ввели в Smalltalk-80, когда он уже не участвовал в разработке. А почему ввели, лол? Потому что это ключевая концепция для ООП. То, что Кей в первой редакции забыл реализовать наследование из-за желания максимально упростить симулу, не делает смолток каким-то священным идеалом. Термины со временем уточняются и усложняются, а твоя позиция типа "св. Кей сказал вот так вот" мало отличается от религиозных догматиков. Что имел в виду Кей - похуй, потому что с тех пор прошло 40 лет, ООП успело появиться, оказаться в зените в 90-е и после этого постепенно сгнило и сдохло. Поэтому твой подход "ща я в википедии прочитаю определение" и не работает - приходится делать охуительные выводы о том, что Erlang - ООП-язык. В манямирке, может, оно и так, но в сообществе за такое посмотрят как на шизика.
>>1332399 Все наоборот, школьник. Декларативному подходу учат с детства, в школе. В вычислениях нет понятия времени, они декларативны по своей природе. Императивная природа только у процессора.
Какие еще отложенные вычисления? Все понятно, ты ноль в программировании.
>>1332398 >ФП превосходит императивное программирование орнул с этого куска мяса. на дне это всё императивее некуда. если мясным мешкам нужны абстракции над скрутками, баг им судья мимо бендер
>>1332401 Короче, я уже понял что у тебя ноль знаний CS. Кей ученый. Кей создатель ООП, везде можно об этом прочитать. Кей получил премию Тьюринга за ООП.
В современном ООП, в любой книжке написано, что объекты передают сообщения. Это придумал Кей. У Даля такого не было, обычная процедурщина с классами. Если даже современные адепты Java, C++, признают что в ООП есть передача сообщений, которую придумал Кей, то какой Даль может быть создатель ООП.
Erlang ООП язык, да. На этом все. Иди матчасть учи. Не собираюсь тратить на тебя свое время.
>>1332402 >Императивная природа только у процессора. Состояние придумали жиды, ирл ни у чего состояния нет, только платонические идеи, плавающие в океане монады.
>>1332407 >Кей создатель ООП, везде можно об этом прочитать. Ну правильно, если быть википедийным школьником и везде видеть упоминание калифорнийского хипстера. Только "везде можно прочитать" - это не аргумент. А вот факт того, что симула - первый ООП язык, это факт. >Кей получил премию Тьюринга за ООП. На два года позже Даля. При чем Далю дали за что? За ООП, ЛАЛ. Ты определись, авторы премии Тьюринга, они как, хуесосы (как Тьюринг), или ты хуесос? >Erlang ООП язык, да. На этом все. Иди матчасть учи. Не собираюсь тратить на тебя свое время. Erlang не ООП язык. Это функциональный язык с динамическими типами.
Так, чувак, поясните мне одну хуйню. Вот у меня есть множество битов в озу. Теоритически, я могу провернуть над ними вот эту всю чисто математическую поебень и это будет считаться фп? А что я должен провернуть, чтобы это стало ооп?
>>1332412 В ФП ты не можешь изменять свое множество, только скопировать и при копировании что-то поменять, создав новое множество. А чтобы это стало ООП, не знаю, подрочи. Все равно никто не знает, что такое ООП, потому что никто не знает, что такое объект.
>>1332416 >Тоесть, ооп это ёбаный симулякр? Так же, как и процедурное, функциональное и всякое другое программирование. Правильно парадигмы применять к дизайну программ, а не к языку. Просто некоторые языки заточены под определенный дизайн.
Процедурная программа - это программа, архитектура которой основывается на модели данных и изменяющих эти данные процедур. Объектный дизайн основывается на модели объектов и общений, таких изолированных компьютеров, которые что-то сами собой считают и взаимодействуют с другими объектами посредством передачи сообщений, такая абстракция компьютерной сети внутри твоей программы. Датафлоу дизайн основывается на том, что у тебя есть данные, которые как по конвееру передаются и обрабатываются определенными блоками и т.д. Любой такой дизайн можно реализовать хоть на си, хоть на java.
>>1332416 >Некая совокупность инструкций и даты? Ну окей, стек процессора в языке ассемблера - это объект в терминах ООП? Нет.
>Тоесть, ооп это ёбаный симулякр? ООП - это кот. Ты даешь определение кота, типа, животное такое-то, класс, род, вид, я не биолог, ты понел, короче, а тебе показывают картинку nyan-cat или тома из тома и джерри и ты говоришь, это нихуя не кот, это нарисованный персонаж и будешь прав. Но те, кто скажет, что том - это кот, будут правы, потому что а кто это, СИМУЛЯКР что ли. Я вижу выход только в том, чтобы дать людям характерные признаки кота, а они уже пусть решают, кот перед ними, или нет. И характерный признак ООП это объекты (некая совокупность инструкций и даты), которые состоят между собой в иерархии наследования. Вот теперь думай, как прилепить сюда множество бит в озу. Да никак. Но если твое множество состоит в иерархии множеств, то тут уже можно думать об ООП.
>>1332422 Можно определить так: посылка сообщения это late binding, то есть если при выполнении кода можно подменить один объект другим из-за того, что диспетчеризация происходит в рантайме, а вызов процедуры это early binding, то есть сообщение жестко привязано к типу адресата. Проблема в том, что в таком определении отвалится большинство ООП-языков.
>>1332422 Конечно есть. Разница уровня шаблонов проектирования. Архитектура твоей программы это ЧЕРТЕЖ, а то, на каком станке были выточены ДЕТАЛИ этого чертежа - это уже вторично.
>>1332431 Да это не важно. Это все особенности реализации конкретного станка. Например, в java есть перегрузка методов, а в js нет. Ну и что. Это конкретные особенности языка. В одном может быть много абстракций, упрощающих написание программы, а в другом может их не быть.
>>1332436 Это потому что ты не понял, что я имел ввиду. Дизайн программы и реализация этого дизайна на языке программирования - это две раздельные сущности. А ты этого не видишь и мыслишь все как одну сущность, отсюда ошибки.
>>1332438 К сожалению из-за того, что люди этого не понимают, у нас программирование по прежнему является кустарной областью, где все решения по ходу дела принимает дядя Ваня на основе личного опыта.
Антош, как разобраться в архитектуре/устройстве Си++?
Поискал в сети, не нашел никакой толковой литературы. Хочется понять основы, особенности устройства системы, отличия. Я так понимаю у пользователей чистого Си нет проблем в переходе на С++, они там как рыба в воде, но для тех кто всю жизнь писал на питоне есть ряд непонятных вещей.
Скажем, интересуют особенности ввода-вывода, отличия пайтона и с++, необходимость ручного управления памятью, использовать ли одну парадигму или две, нужно ли писать код под конкретный компилятор, как обстоят дела с юникодом и т.д и т.п.
Хотелось бы найти ответы на эти вопросы, в идеале бы какую-нибудь литературу, а не просто набор статей из интернета. Спасибо
>>1332468 >Хотелось бы найти ответы на эти вопросы, в идеале бы какую-нибудь литературу, а не просто набор статей из интернета. Спасибо Книжка называется Дизайн и эволюция С++ Затем несколько книжек Мейерса и Саттера на выбор Чтобы понимать бусты-хуюсты и метапрограммирования на шаблонах - Александреску, хотя может есть что поновее.
>>1332507 Да обычный аэрозоль 150 мл от адидас. Запах не понравился, хочу выкинуть, сосед на заднем дворе покрышки жгет от камаза, хочу приколоться и подкинуть сюрприз.
>>1332531 >Мы поставили унитаз в зале. Сначала он проходил все тесты, но потом внезапно сломался тест на запахи. Придется все переделать, с вас еще $1000
>>1332531 >Ты бы доверил строить свой дом команде строителей агильщиков, или тем кто построят твой дом по TDD? Строительство хорошего индивидуального жилья это всегда эджайл, потому что предусмотреть все заранее как тебе нужно невозможно, сколько бы бабок ты архитектору не отвалил. То же касается и типовых коробок - тебе предоставлен отлаженный фреймворк, но ремонт один хер индивидуально надо делать.
>>1332602 Нет сборщика мусорщика оптимизированного под минимальные паузы. Там пилят что-то вроде модульного сборщика мусорщика, но такими темпами они еще лет 10 будут пилить
>>1332531 >или тем кто построят твой дом по TDD? Проиграл со строителей, которые в процессе строительства ломают тестами дом и каждый раз заново его пересобирают.
>>1332638 Не ломают, а проводят испытания компонентов. Ты удивишься наверное, но вся область техники и строительства именно этим и руководствуется. Так что ты пукнул в лужу, смешной дурачок.
>>1332655 >проводят испытания компонентов Типа автомобильные краш-тесты? И где ты видел, чтобы на стройке делали испытания ЖБИ под нагрузкой или проверяли канализацию под давлением? Все делают про проверенным веками технологиям, и тесты тут нахуй никому не нужны.
>>1332655 >Не ломают, а проводят испытания компонентов. В TDD сначала придумывают тест на фундамент, потом строят фундамент, потом проверяют че построили, потом доделывают/ломают/переделывают. Тесты позеленели? Жить можно!
От кастомера пришел баг-репорт. Пишем, тест. Чтобы его позеленить, надо лифтовую шахту залить монтажной пеной, и временно повесить люльку снаружи вместо него.
Этот код должен был запрашивать количество символов <=razmer и заполнить ими переменную pstr как массив, но что-то не особо получается. Что именно я делаю не так? Прошу нормально объяснить без подъёбов и желчи.
>>1332729 Спасибо за помощь. Можешь теперь объяснить почему если размер будущего массива объявить сразу при объявлении переменной, то всё в порядке, но если присвоить значение через scanf, то выводит на одну ячейку меньше? https://ideone.com/comC3P
>>1332738 После ввода цифры у тебя во входном потоке остается символ перевода строки, вот и выводится так. Можно заметить, что строка лишний раз перевелась. Можно пофиксить, добавив после ввода размера fflush(stdin), но это Undefined Behavior и нехорошо. Хотя лично у меня всегда работало как ожидалось, и для обучения в принципе сойдет.
>>1332753 Но ведь если убрать scanf для razmer, а razmer сразу присвоить значение, то циклы будут отрабатывать правильно без всяких костылей. Почему так?
>>1332757 scanf жрет из входного потока все, что у него попросят. Ты просишь число, его он и дает. Но нажав Enter для завершения ввода ты посылаешь во входной поток символ конца строки ака '\n'. Вот его scanf из потока уже не берет. Далее ты с помощью scanf считываешь символы, но в потоке-то уже есть наш '\n'! Вот он его в нулевую ячейку массива и помещает, после чего уже все остальное разбирает. Альтернативный вариант решения проблемы - пикрелейтед. Тупо запроси у scanf ждать еще и символ конца строки.
>>1332774 Какой курсор? Это поток, который к тому же не умеет в fseek, там нет никаких курсоров. Ты имеешь в виду "пропустить n символов"? Можно так: scanf("%*123c"), где 123 - количество пропускаемых символов.
>>1332774 Это зависит от ловкости твоих рук и возможностей клавиатуры/usb/ps/2. Если сможешь молниеносно отправить 2 символа за то время, пока не сработает команда новой строки, то молодец. В джаве так сборщик мусора работает. Никогда не знаешь, удалится ли ссылка на объект после удаления объекта или нет.
>>1332889 Можно и так, и так: struct something { size_t length; char ∗dynamic_data; }; struct something { size_t length; char dynamic_data[]; } В первом случае у тебя два malloc(), но зато при realloc() dynamic_data не меняется адрес самой структуры. Во втором случае malloc() один, но изменение адреса структуры при realloc() может доставлять неудобства.
Начал параллельно читать SICP. Ебанутся какая нудятина. Со слезами радости с удвоенным удовольствием читаю дальше Прату. Неужели кто-то еще способен это пережевывать? Да мне все было понятно. Да, делал задания.
>>1332963 Ты вероятно школьник еще. Меня в школе учили по советским учебникам. Да, они были нудные, но изложение было строгим, математически строгим. СИКП очень похож по манере изложения.
А теперь делайте выводы. Современное поколение не способно с серьезному глубокому обучению. Всему виной клиповое мышление, которое выработалось из-за гаджетов и интернета.
>>1332986 K&R уступает только по причине вменяемых примеров в главах. В остальном нахуй лисп не нужон вместе с сикпом шеме прочими питушиными диалекатми.
>>1332963 В SICP'е любому программисту нужна 2 и 3 глава. 1-я с основами ФП - ну такое, скучновато, но там есть прикольные вещи типа чисел Черча. Я помню я сидел в очереди в больнице и на бумажке и хуячил их, почти кончил на виду у бабок. 4 и 5 - про то, как пилить интерпретаторы, нахуй не нужная ебатория, особенно делать там упражнения. В жизни тебе это не пригодится, если ты не ебанат типа авторов язык julia, который всерьез решил часть реализации написать на scheme.
А вот 2 и 3 глава, где описаываются потоковый и объектный подход, делаются философские замечания по этому поводу, описывается как символьно дифференцировать (про tensorflow корочъ) и прочее, это одно из самых охуенных чтив для программиста. Но, если ты с удовольствием читаешь Прату, очевидно, что ты не дорос до подобного - Прата ведь хуевый клон Кернигана и Ричи.
>>1333070 Конечно, v-то уничтожается по выходу из функции. То, что на стеке физически число 5 остается - это везение, очень мерзкое при том, потому что такой баг может годами жить и проявляться изредка.
>>1333096 А если серьезно, то что? Пхп сейчас хороший язык для серверов, не побоюсь этого слова - лучший язык для веба. Слоупоки сейчас конечно будут рассказывать истории своего опыта на версии эдак 5.6 и меньше, которые уже даже не поддерживаются, но те к в курсе дел знают, что пыха развивается семимильными шагами.
>>1333079 > если знать некоторые нюансы Ага, например весь конфиг php.ini на котором будет крутится твой код и какие опции из него будут удалены в следующей версии интерпретатора
>>1333098 >А если серьезно Он и правда тупой. Впрочем, термин пхпдебил родился из жизни и полностью заслужен. Какой язык - такое и комьюнити. Какое комьюнити - такой и язык. Почти как govno, хаха.
>>1333171 Cмешно, да. Но я правда серьезно спрашиваю: за что ненавидеть пыху последней версии? И самое главное, почему ее ненавидят по большей части те, кто на ней пишет?
>>1333210 >ненавидеть К чему такие громкие слова - почти никто не ненавидит говно. Презирать, брезговать, блевать - скорее так. >почему Из-за комьюнити по больше части - быдло и дебилы же, почти как одножопые. Вот и ты, например.
>>1333210 Потому что только если ты пишешь на чем-то ты можешь полностью осознать какое это дерьмо. я вот никогда на пхп не писал и в душе не ебу, что там не так
>>1333232 Этот ответ полон эмоций и субъективности. Дело тут не в быдле и не в гопниках, которым полюбился пых. Я говорю про людей, которые не в начале 21 века в кодирование вкатились, а в конце 20-ого. За что его не любить? Альтернативы пыху просто нет.
>>1333238 >Дело тут не в быдле и не в гопниках, которым полюбился пых. Нет, дело именно в этом. Дело всегда в людях, омежка. >Альтернативы пыху просто нет. Очередная иллюстрация пыхыпыдебила, хаха.
>>1333238 ПХП чудовищно эстетически некрасив, для языка, которому нет 20 лет, он жутко неортогонален и полон какого-то легаси-говна. Его пилили люди, которые понятия не имели об устройстве языков и ничего сложнее си в своей жизни не видели. И это в нулевые годы. Любить его точно не за что. Что касается каких-то подводных камней внутри языка, то до такого как правило не доходит, потому что нахуя нормальному человеку погружаться в это говно? Есть красивые языки, руби или питон, например. Даже жс, сделанный за две недели, на бесконечно красивее, чем пхп.
>>1333242 Да не в этом. Можно даже аналогию привести с политикой и народностями. Все знают, что хохлов никто не любят, но украинский язык занял первое место по красивости и приятности звучания в каком-то году, не помню уже. Так же вот и с пыхой. На нем пишет много людей. Много перекатывальщиков из тех же самых низкоуровневых. Бывшие инженеры пишут на пхп. Но вот даже работнички корпорации гугл говорили, что стали бы писать на php только разве что сервис для доставки пиццы им в офис. Я не пытаюсь тебе проиллюстрировать тут какой-то образ, но мне вот интересно, почему в мире кодирования пхп стоит особняком, на который каждый считает своим долгом поссать.
>>1333252 >На нем пишет много дебилов и быдла. Поправил эту мечтательную туповатую омежку. >Все знают, что хохлов никто не любят А, так ты лахтинский. Это ВСЕ объясняет.
>>1333253 Перл создан лингвистом и при неортогональности у него есть свой шарм - он лаконичен, например. Я бы его не использовал, но ничего плохого в нем не вижу, раз привлекает, хули нет-то.
>>1333247 >ПХП чудовищно эстетически некрасив, для языка, которому нет 20 лет Я думаю, что это все-таки дело привычки, да и в последних версиях ввели синтаксический сахарок некоторый.
>Его пилили люди, которые понятия не имели об устройстве языков и ничего сложнее си
Не знаю ничего насчет этого, но возможно ты прав. Хотя программирование все-таки наука вне времени, тут своя структура развития, так сказать. И все что угодно можно написать на любом языке, практически.
> руби или питон, например. Даже жс, На руби не писал, не люблю узкоглазых, а вот питон мне не полюбился синтаксисом. И еще тем, что я не могу форматировать код, как мне вздумается. А жс сейчас уже не тот, что был раньше. Но насчет красивости не спорю. Хотя опять же повторюсь, что это дело привычки.
>>1333267 >Я думаю, что это все-таки дело привычки, да и в последних версиях ввели синтаксический сахарок некоторый. Нет. Дело привычки - это синтаксис хаскеля, например, J или, не знаю, лиспа. Я вот не умею глазами парсить лисп, но у меня нет вопросов, что это дело привычки. А здесь именно что антиэстетичность. А то, что ты этого не видишь - за это собственно пхпшников и не любят. >На руби не писал, не люблю узкоглазых Еще и расист. При этом "не все пользователи пхп быдло и дебилы". Ну да, не все, но где они? >питон мне не полюбился синтаксисом А пхп полюбился.
>Все знают, что хохлов никто не любят, но украинский язык занял первое место по красивости и приятности звучания в каком-то году Ну да, "не все пользователи пхп быдло и дебилы"
>>1333318 >Ой, описался. >этот шизофреник с энурезом Очаровательно :3 >Почему не любят пользователей пхп Потому что тупые и/или быдло и энурезники, хаха
>>1333314 >не любят именно пхп, а не сам язык Чтоу >Антиэстетичность это тоже субъективизм чистой воды. Ну да, субъективизм, например, хирург может вообще не понять, что я имею в виду. Но если я вижу программиста, который этого не понимает, то для меня он не совсем программист уже. Потому что его субъективный мир допускает такую каку.
>>1333342 Для тебя это может быть шоком, но я на дваче не живу >>1333343 >То есть ты даже не допускаешь хотя бы мысли о том, что твой субъективный мир может отличаться от субъективного мира другого программиста? При чем тут субъективный мир. У любой профессии есть стандарты. Например, я допускаю, что людям может нравиться здание театра et cetera в Москве, но если такой человек скажет, что он архитектор, для мне он не будет архитектором, он будет долбоебом. Потому что с точки зрения архитектуры этот театр пиздец. И архитектор тебе даже формально распишет, почему это пиздец, но для этого достаточно взгляда. То же касается и пхп. Этот язык один из самых страшных из существующих. И если кто-то этого не видет, это не программист. Как вот тут >>1332753 смотришь на код, и видишь, что человек не программист, а учится. Субъективно? Возможно. Неверно? Нет.
>>1333016 Мне 35, я инженер, большей частью имею дело с ТРИЗ. Давай, рассказывай мне про математически строгие абстракции. > советским учебникам Лютейшее дерьмо, есть буквально один-два учебника в каждой области, но и они говно по сравнению с западными. Последний раз годные учебники были еще при Сталине, потом все говно.
Проблема с динамической памятью в двумерном массиве. https://ideone.com/flp1E0 Одномерный массив компилятор пропускает, но двумерный почему-то не хочет. Как заставить пропускать?
>>1333555 1) Инициализаторов в структурах (5 строка) в Си нет. 2) razmer + 5 это неправильный размер динамического массива, судя по циклам ниже. Возможно, ты хотел умножить? 3) Многомерных массивов в Си нет, но ты можешь делать массив массивов. Например, массив из razmer массивов по 5 char. Если на стадии компиляции известно хотя бы последнее измерение (5), ты можешь заставить компилятор индексировать динамический массив, например, так: https://ideone.com/WAGTWz Если нет, то Си тебе ничем помочь не может, и для массива n ∗ m (n строк по m элементов), ты получаешь из строки i элемент j вручную с помощью выражения типа array[i ∗ m + j].
>>1333582 Многомерный массив - это такой тип, который хранит все размерности сразу. Т.е., условный многомерный massiv[x,y,z] - это массив с тремя размерностями x, y и z.
> А massiv[x][y][z] это какой, одномерный? Да. Это (одномерный) массив из x элементов, каждым из которых является (одномерный) массив из y элементов, которые являются (одномерными) массивами из z элементов. Эту конструкцию можно использовать, как многомерный массив, но "настоящим" многомерным массивом она от этого не становится.
>>1333659 В Си указатели на void сами отлично кастятся в указатели на другие типы, в крестах нужен явный каст. Добавь каст у calloc(), и все заработает.
Анон, в универе на уровне оси(убунты вроде) заблокирован запуск компилятора(ссылается на права) во время экзамена. Есть теоретическая возможность запуска/компиляции проги на си без gcc и ко?
>>1333685 В то время, когда это дизайнили, никто не писал сложных крупных программ. Поэтому необходимость каста в крестах - это шаг в правильную сторону. Еще бы неявный каст между целочисленными типами убрали, и было бы совсем заебись.
>>1333686 Зависит от того, какие именно там права. Если для тебя r нету, то ничего не сделать. Если такая проблема только у gcc/cc, можешь научиться самостоятельно, без драйвера дергать все эти cpp, сс1, as и ld. Или, может быть, у тебя есть возможность заранее притащить и спрятать по-тихому какой-нибудь tcc?
>>1333549 >Мне 35, я инженер, большей частью имею дело с ТРИЗ. ТРИЗ - шарлатанство, если ты в 35 это не понял, то ты не инженер, а так, символ деградации российской промышленности.
>>1334159 Чини детектор, я в СШУ живу и работаю уже 15 лет, в сфере высокоточной обработки сплавов. Российской промышленности блядь. У нас курсы и семинары по TRIZ хз имеет ли отношенин этот ТРИЗ к оригинальному.
>>1333779 Ээээ. Именно потому что она псевдослучайна, ее можно воспроизвести, зная секрет (значение, которым инициализирован генератор, зерно). Вот если бы она случайна была, то ее пришлось бы хранить и заранее передавать, и у тебя бы получился классический OTP.
>>1334309 Говно - это быть школодебилом (вроде тебя) Все остальное на твоем фоне не так уж и плохо.
Кретин с сигарой!03BA8gvmdc25/01/19 Птн 07:36:35#416№1334441
>>1334309 ТРИЗ всего лишь современный метод разработки систематизированый по опыту предыдущих изобретателей. Ещё в совке были всякие технологические прогнозирования без задач при РАН. Морфологический анализ комбинаторика выбора из существующих вариантов, а ТРИЗ на новые решения больше нацелен.
>>1334441 >ТРИЗ всего лишь современный метод разработки систематизированый по опыту предыдущих изобретателей. Ну и чего там за последние 50 лет наизобретали? Как жгли динозавров в цилиндрах так и жгут, как петарды хуярили в недокосмос так и хуярят.
>>1334571 >Квантовые пекарни Какое то маркетинговое оверхайповое говно, я бы этим квантовым маняматикам платил бы зарплату в квантовых состояних, типа одновременно деньги уже потрачены на все ништяки и в итоге 0, распишитесь.
>>1334572 Ну, говорят, что поиск по БД сокращает на треть без хешей даже. Для огромных БД это неслыханная экономия. Им это и выгодно. Когда-нибудь на Сях будут писать даже для квантовых архитектур. Да и для меня тоже интересно, ведь заставляет мыслить иными категориями. Логические вентили там не классические NOR, AND, OR, XOR, NXOR, NAND, NOR а вентили смены поляризации по фазам в цикле 3600. Так если поляризацию поставить 50/50по фазе либо на 900 либо на 2700, то получится аппаратный генератор случайных чисел и кубит будет схлапываться в 1 или 0 с шансом 50 на 50. Полезно, если ржаветь начну, но само собой классическую бинарную логику они никогда не вытеснят. Зато в хуйлоаде пригодится. >типа одновременно деньги уже потрачены на все ништяки Нихуя, они только по бумагам будут в неопределённом состоянии в зависимости от фазы квантовых регистров, а на деле они всегда будут либо однозначно приваливать, либо однозначно утекать хуй пойми куда в квантовые подпространства, лол
>>1334579 >Ну, говорят, что поиск по БД сокращает на треть Пусть зделоют, будем посмотреть, >от фазы квантовых регистров, а на деле они всегда будут либо однозначно приваливать, либо однозначно утекать хуй пойми куда Еще им столовку зделоть с квантовыми состоянимя, типа приходят, а им говорят вы уже пожрали, идите на хуй, вмиг начнут рационально думать, а не нести хуйню.
Ты записал в бинарном виде, а считываешь обратно как текст. Там fscanf вообще должен был ошибку вернуть, а 33.0 случайно в стеке лежало на месте ff2. Или fprintf вместо fwrite, или fread вместо fscanf используй, тогда норм будет.
Бинарный вид - такое представление в нулях и единицах, с которым уже напрямую работает процессор, когда что-то вычисляет, а текстовый - это когда человеческими цифрами/буквами записано.
>>1335819 Спасибо заменил fprintf`ом. А как теперь лучше записать и считать массив? Тупо в цикле прокручивать каждую цифру? И ещё если мне после запятой достаточно двух знаков, во fprintf`е я могу указать "%.2f", но во fscanf`е такое не работает?
>>1335753 ну, бля, используешь union чтобы удобно работать с представлением вещественного числа, извлекаешь мантиссу и экпоненту, дальше сохраняешь их как целые числа изи
Существует ли Русская локализация для крестов, как типа разные версии 1С Предприятие, который помимо оригинальной версии с командами на Русском есть с командами и на других языках?
>>1335720 > Как сохранить массив флоатов в файл Можно записать просто так, вот банальным fwrite. Гарантируется, что в пределах одной машины все прочитается без проблем. На самом деле прочитается на любой машине, которую ты сможешь найти, если совпадает endianess, потому что IEEE754 умеют все. Если хочется максимум переносимости (C99 и выше), то fprintf(fp, "%a", number).
>>1335844 Очень костыльный и сложный метод, не стоит так делать.
>>1336469 > поверь мне Не поверю. Для тебя сделали %a, которая сериализует и восстанавливает без проблем. Это если про плавающую точку говорить. С фикседпоинтом все сложно.
>>1336459 >>1336466 Что-то вы, уважаемый, хуйню какую-то сказали про циклы. Просто анон считал один символ, а остальное - мусор ('i' на второй позиции попалось, '\0' на седьмой). %s строки считывать надо, как и выводить
>>1334307 Спасибо, анон, я вроде как и сам вкурил! Раз ты в теме, дай совет. Я хочу написать сам что-нибудь связанное с безопасностью и/или сетями. Есть книги, ресурсы или идеи по теме? Может какой-то простенький протокол, который можно реализовать? Если честно даже простеший A5/1 по RFC нихуя не понятен. Пару лет назад читал том Олиферов по Сетям-нихуя не понятно было, на практике как-то лучше идёт.
>>1336626 Действительно. Тут люди про переносимость на уровне архитектуры думают (endianness). Не понятно, с чего бы у кого-то #include <sys/mman.h> вызвало вопросы. Кому линуксовые фичи не завезли, тот не программист... А вообще: - чувак, как интеграл вычислить? - чего ты как ламер? Загугли "scientific calculator online" и будет тебе счастье.. Тут люди целенаправленно основы изучают, а ты им юзерские ништяки предлагаешь.
>>1336626 > И файл уже в оперативе так-то Нет. Файл будет читаться понемногу, разве что делать это будет ядро, а не ты. Причем медленнее, чем если бы ты выделил память и прочитал туда файл за раз. > дрочим байты как хотим Тут-то я и достаю флешку, с которой ты этот файл открыл.
>>1336617 В PowerPC кроме как с endianess проблем нет. Свопаешь байты и живешь спокойно.
>>1336620 > а ты из него прочитаешь +-Inf или NaN. Если ты пишешь NaN в файл, у тебя проблемы с головой, а не с представлением чисел.
>>1336713 Стало быть, я недостаточно очевидно обозначился, как третье лицо. Чувак, это не у меня препод и лаба. И у того анона тоже не факт. Может для собственного развития пробует в ручную запись и чтение числовых данных с использованием буферов. И, кстати, чтоб просто несчастный массив вычитать, только быдлокодер станет дергать mmap(). Есть подозрения, что веду диалог с наполовину троллем, наполовину любителем похвастать, что читал Advanced Linux Programming. Это все мимо кассы.
>>1337437 Чтоб не путаться в пространстве нормальных имен. Позволяет избежать конфликта имен. Вряд ли ты назовешь переменную t_varname, но вполне может захотеться написать point, и будь тип назван так же без префикса - +1 лишний стресс. Есть вариант с суффиксом zalupa_t, но это в POSIX зарезервировано (pthread_t, ...), так что нежелательно.
>>1337199 И что это доказывает? NaN - это такая штука, которая говорит, что твоим вычислениям пришла пизда. Нет никакой необходимости писать заведомо бесполезные результаты в файл или читать их оттуда. Тем более на PS2.
Анон, где можно прочитать про видимость функций в Си? Где переменная создается, где им можно пользоваться, структура, массив. А то иногда передаю указатель из функции в функцию, а компилятор жалуется , что данные локальные
>>1337824 Под локальный массив место в стеке выделяется. Как только функция возвращается, никто этот отрезок RSP-RBP не защитит от перезаписи другими вызовами. Warning как раз намекает, что ты стреляешь на удачу. На высоком уровне абстракции не может быть внятной инфы, как это все работает. Чисто high-level категориями описываются другие языки, которые без указателей. Или покорно следуешь правилам, к чему можно обращаться, а к чему нельзя, мирясь со своим положением и не пытаясь вникать, что за магия больших дядь под этим лежит, или читаешь, как работает сегмент стека, heap, malloc и free (new и delete) и т.д. Любая нормальная книжка по Assembly начинается с этой теории. За вечерок(-другой, если туго) перевариваешь, и потом никаких вопросов, подводных камней, исключений, частных случаев и прочей поеботы, одно счастье и Сишечка one love.
Эксперты, я запутался. Почему корректно возвращает целую часть? Почему не странный мусор от прочтения double как int? Возврат функции автоматически кастует?
>>1338088 да, там ведь return z; явно по контексту анализируется: return type - int, z type - double. Вот возвращался бы указатель - уже бы хрен что внятное распечаталось.
>>1338088 Добавлю: > Почему не странный мусор от прочтения double как int? Это когда printf("%d\n", 1.0);? Дело в том, что printf(fmt, ...) - функция с переменным числом аргументов, и ни Си, ни сама функция не знают, что ей передали в ..., поэтому компилятор не может ни контролировать тип на самом деле может, сейчас в компиляторах есть костыль, который парсит форматную строку, если она доступна, ни преобразовать его в описанный форматной строкой. Поэтому все передается как есть, и printf, когда читает %d, читает int, несмотря на то, что был передан double. А вот в твоем примере вся информация о типах доступна, поэтому все само конвертируется.
>>1338115 >>1338105 Еще чуток вашего внимания: Я так понимаю, это конвертируется компилятором. Вопрос - это в соответсвии со стандартом? Где это искать вообще? Уточню: возвращает int и конвертирует в int я понимаю что разные вещи.
>>1339163 > Биты считаются справа налево Потому что тут тебя намеренно запутывают. Тут биты в байте считаются справа налево, но p указывает самый старший (самый левый) бит в битовом поле. Поэтому и такое выражение. Если бы считали справа как люди (getbits(x, 3, 4) = взять 4 бита, начиная с третьего, т.е., 3, 4, 5, 6), тогда бы ты сдвигал просто на p.
>>1339424 > Поч сегментейшн фолл, не пойму И мы по огрызку кода тоже не поймем. Может быть, у тебя один из файлов не открылся, а ты не проверил?
Пожалуйста, пользуйтесь https://ideone.com/ или 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 (драфт)
- man/Dash/zealdocs
Чем компилировать:
- Очевидный GCC.
- clang: оче годно, батя рекомендует.
- Intel C++ Compiler: оптимизации, тысячи их.
- Visual Studio 2017 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://www.iso-9899.info/wiki/Books#Learning_C
Онлайн-утилиты:
- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов).
- http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.
Прошлые треды:
- №35: https://arhivach.ng/thread/398891/
- №36: https://arhivach.ng/thread/407257/
- №37: https://arhivach.ng/thread/414099/