Это копия, сохраненная 11 марта 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Пожалуйста, пользуйтесь 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/
Странно. Как ни зайду, тут все время какие-то срачи на пустом месте.
Сперва в железе разберись, Петцольда там почитай, для начала очень годно. Потом накидай сам проц в каком-нибудь логисиме, чтобы не париться. Потом переходи на Verilog, наркоман
> ну там двоичный сумматор
До такого эмуляция обычно не опускается - зачем складывать побитово, если можно сложить инструкцией add хоста и потом лишь посчитать флаги, если нужно.
С другой стороны, про работу железа есть Харрисы. Или лекции индусов.
Читать без практики мало полезно. Не влезает в голову, и не запоминается. Как я накидаю проц, если не знаю полное его устройство? У Петцольда по моему мнению слишком размыто, обрывками как то. Читал, но цельной картины не получил.
>>29875
Ну это я для примера написал. Вообще хотелось бы понять, насколько отличаются от процессора регистровые виртуальные машины. Что лучше книга Харрисов или Таненбаума? Пробовал читать и то и другое, занудно очень, без практики не заходит. Вот бы была книга, где бы реализовывали регистровую ВМ, аналогичную современному процессору.
Алсо, кидал уже сюда статью: http://www.gtoal.com/sbt/ Это на случай, если надоест играться с медленным switch/case и захочется зделать, как у взрослых дядь.
>зачем складывать побитово, если можно сложить инструкцией add хоста и потом лишь посчитать флаги, если нужно
Для обучения. Чтобы понять как устроен процессор.
> Что лучше книга Харрисов или Таненбаума?
Харрисы гораздо, гораздо глубже. Если тебе для общего развития - лучше Таненбаум.
> Как я накидаю проц, если не знаю полное его устройство?
Нахуй тебе полное устройство? Это слишком низкий уровень для Си. Тебе правильно посоветовали не писать для этого по сути свой логисим, а взять готовый. А потом, когда наиграешься в гейты, уйти в какой-нибудь HDL.
А уровнем выше внутреннее устройство процессора перестает тебя волновать, ты просто придумываешь, что вот у тебя сколько-то регистров, такие-то инструкции, а вот так ты их кодируешь. Вот ты читаешь инструкцию по PC, разбираешь на опкод и операнды, вычисляешь ее и пишешь результаты. Это задача на вечер, а необходимые для ее выполнения знания приобретаются по ходу дела.
>>29880
> Для обучения.
Так это... https://www.nand2tetris.org/
Запускаешь Logisim @ делоешь.
Сперва АЛУ, потом память (с ней можно не запариваться и взять готовую), связываешь, прикручиваешь управляющие сигналы, после чего долго ебешься с устройством управления и его табличками истинности но я слабак и сделал все на микрокоде.
Где сейчас можно скачать свежее русскоязычное издание Цифровая схемотехника и архитектура компьютера? Вроде на оф. сайте уже не скачаешь.
Не знаю. Не читаю переводы, если есть возможность найти оригинал. Кому нужна русифицированная терминология, если все статьи - на английском?
http://gen.lib.rus.ec/ и разные зеркала http://booksdescr.org/ https://b-ok.cc/ https://ambry.pw/ http://bookfi.net/
Но действительно, читай лучше оригиналы. Угрюмова можешь почитать, ничуть не хуже. Методички для студентов тоже неплохие попадаются.
Попробуй задуматься, где можно применить знания по цифровой схемотехнике? Или ты принципиальный тракторист?
goto.
Python
То есть мы опускаем свитч-кейс и опускаемся сами на уровень ниже, заменяя свитч на кучу побитовых операций. Ну да, так быстрее, но несведущий в железе хуй поймет, как эти побитовые выполняются на процах с разной разрядностью.
>труды Торвальдства
Вообще не попадались, только высеры где он в очередной раз что-то поливает говном.
>заменяя свитч на кучу побитовых операций. >несведущий в железе хуй
Там же заменили switch/case на goto по массиву меток. Тогда у нас не будет множества сравнений и нужный адрес перехода будет получен сразу по опкоду.
Но эта штука ломает предиктор переходов, на малом числе инструкций должна проигрывать по скорости.
Я не знаю Си, просто предположил, что там делается исходя из своих знаний в джаве. Циклы кстати увидел, флаги увидел, но так и не допер, зачем все это надо. Сишку только начал учить.
Я имею ввиду само ядро. Открывай исходники да изучай. Или на чем ты программировать собрался?
Потом почитай что-нибудь по ассемблеру и Таненбаума по архитектуре.
>Там же заменили switch/case на goto по массиву меток.
Это как-то похоже на специализированный хеш?
Cразу отмечу, я нуб но ты уже сам догадался
Ага, ага, сам хотел привести аналогию с хешом. Switch раскроется в if-конструкции, а в методе выше будет jmp на адрес arr[index].
Есть ли альтернатива? inb4 исключения
>>30208
Да!
>>30281
> чем заменяют CASE/SWITCH взрослые дяди?
Ну, во-первых, бывает удобнее табличками, а во-вторых, я слегка неправильно выразился. Можно транслировать эмулируемый код в нативный, и выполнять уже его. switch, конечно, останется, но уже в трансляторе, зато однажды оттранслированный код уже можно выполнять быстро, безо всяких switch. Можно делать это статически и итеративно, как в статье, а можно динамически, как делает QEMU.
Окей, при беглом чтении увидел в нем обычный функциональный симулятор.
Как в C выглядит пробел и отступ? Ни \n, ни "\n" не проходят.
' ' для пробела и '\t' для табуляции.
Отступ это на строку ниже. Нет?
Ты блять ебанутый штоле? Иди сука хотя бы одну книжку прочитай, урод блять. А то еще даже синтаксиса не знают, уже пидоры компиляторы качают. ХУЙ СОСИ БЛЯДИНА ЕБАНАЯ
А тебя вообще за шитпостинг зарепортил.
https://richard.esplins.org/static/downloads/linux_book.pdf
Все основные возможности упомянуты, но при этом не подавишься избытком инфы. Дальше четкое знание, куда копать по тому или иному вопросу, да и с одной этой книгой уже можно много что сделать.
С какого перепугу 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 должна выполняться дальше, ведь так было задумано.
Не знаю...
Русской литаратуры практически не существует, стало быть, речь идет о переводах. Я перевод этой книжки никогда не искал, а перед гуглом все равны, так что пусть помогает без посредников)
У тебя файл выглядит так: 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 и прочее в фигурные скобки, даже если там одна строка.
Про вменяемые имена переменных и константы вместо магических цифр молчу, это не так принципиально в таком коротком коде. А вот это принципиально. Пока поймешь, что делает твой код, охуеешь, потому что постоянно нужно бегать глазами вверх-вниз между объявлениями переменных и непосредственно тем,что делается.
У тебя файл выглядит так: 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 и прочее в фигурные скобки, даже если там одна строка.
Про вменяемые имена переменных и константы вместо магических цифр молчу, это не так принципиально в таком коротком коде. А вот это принципиально. Пока поймешь, что делает твой код, охуеешь, потому что постоянно нужно бегать глазами вверх-вниз между объявлениями переменных и непосредственно тем,что делается.
Я всегда обрамлял if в фигурные скобки, если там больше одного двоеточия, но в этот раз что-то забыл. Я хз как это давало мне ту закорючку, но именно фигурные скобки решили проблему. Спасибо, что напомнил.
простые expression можно в один statement поместить
if (b != '\n') name = b, ++i, ++a;
и никакие { } не понадобятся
почему мудак сразу?) между прочим, это удобно в макросах, когда надо сделать несколько последовательных действий, и в конце еще что-то "вернуть"
Что, тоже ебёшься с файловым вводом?
Это прекрасно делается с помощью do {} while (0), и не надо придумывать своих костылей.
>С какого перепугу switch/case раскроется в if/else?
>значит так надо, и должна использоваться jump table для выбора нужного адреса по индексу, а не N ненужных проверок на равенство с небольшим int
Это уже компилятор решает, в данном случае тот же gcc таблицу делать не будет из-за явной потери скорости на inderect-переходах.
>Следующая метка не задает логический конец куска кода под предыдущей, а просто показывает, откуда начать, и в случае, если break опущен, программа по вполне defined behaviour должна выполняться дальше, ведь так было задумано.
И без таблицы переходов абсолютно такое же поведение, он сначала ищет нужную метку по значению, дальше никаких проверок нет.
мои пардоны. Опять меня студента занесло. Не подумал про адекватную реализацию цепочки else-if, когда все тесты вначале.
Нахуй он нужон в 2019? Микроконтроллер на бетономешалке погромировать или нахуя?
Нужен для ядра твоей Windows/Linux/MacOS, системного софта, драйверов, интерпретаторов и VM, СУБД, встроенных систем и различных задач, требующих от кода максимальной производительности.
Агась. Понятно. Этим занимается ничтожный процент умеющих срать не снимая свой прокуренный свитер, с бородой до хуя и очками толщиной с увеличительное стекло. Остальным 99% бетономешалка?
>Этим занимается ничтожный процент умеющих срать не снимая свой прокуренный свитер, с бородой до хуя и очками толщиной с увеличительное стекло
Да
>Остальным 99%
На них похуй
>Этим занимается ничтожный процент умеющих срать не снимая свой прокуренный свитер, с бородой до хуя и очками толщиной с увеличительное стекло.
Не всё так плохо, но в целом - близко.
Значитца или элитка или полное дно. Нормально. Борода и свитер у меня уже есть, дело осталось за малым. Программировать программирование не имеет смысла, какую литературу читать для специфики, чтобы избежать бетономешалки обосцатой.
>Программировать программирование не имеет смысла
Ну ты еще не придумал ебописечку которую нужно оптимизировать и переписывать ни си
Это не так работает. Учишься годами никому ненужной хуйне, потом торгуешь попкой на Толоке. Если не сложно покажи вакансии для тех кто смог, чтобы по требованиям было понято хуле им надо кроме свитера и бороды.
>Это не так работает
Так
>Учишься годами никому ненужной хуйне, потом торгуешь попкой на Толоке.
Нет
>вакансии
Пиздуй на ХХ
Чот долго отвечал, я уж думал путь вам открыл и вы все на толоку сбежали. Ну ладно. Сейчас смотрю вакансии в Миллионной мухосране. 70% 1С погроммист, остальные 30% кресты в сочетании с С#, питончиком. По СИ ни одной. Судя по рынку труда рисковые вы ребята..
Си вне времени. Ты сдохнешь через несколько десятков лет, а си будет жить. Он жил в 20 веке, будет жить в 21 веке. Си вечен.
>Судя по рынку
Лол, у меня джва стартапа которые нужно оптимизировать, хочешь работать на дядю, тогда да, вкатывайся в 1С
https://www.youtube.com/channel/UCUhQNuTAQ933YBTy6awC0Pw/featured
Вот тут частенько бывает. Владелец канала типикал битард.
Стой. Тебя-то я и искал. Извиняюсь за много постов ребята, но в таком деле не помешает определиться стоит ли ввязываться, не на пять минут развлечение. А что ты продаёшь? Подучу там инкремент, указатель, хуё-моё, что знать надо, подетальнее бы.
>>30992
>А нахера тебе вакансии?
Представляю собой анахронизм в виде устаревшего гетеросексуального меньшинства. Не хотелось бы торговать попкой оставшись без денег с навыком 999lvl по погромированию калькулятора.
>Представляю собой анахронизм в виде устаревшего гетеросексуального меньшинства.
Надеюсь, это шутка. То, что тебе борда мозги промыла по поводу того, что все геи и битарды, это не отменяет того, что в реальной жизни ничего не меняется.
>А что ты продаёшь
Поиск и NLP, там нужны скоростя, так что без вариантов как и в OCR, попробуй в риалтайме 1920x1080 фрейм обработать.
>и с другими по скайпу код пишет.
Пиздос, ну и на хуй он нужен, я же типаж хотел посмотреть, а не говнокод
Типаж смузихлеба с выбритой бородкой, у меня грязная и дырявая майка, волосы с хвостиком завязанные резинкой для денег, самостоятельная борода и пивной живот.
Спасибо. Кек. Вы мне нравитесь, вакансий нет, какие-то слова по запросам на которые гугл находит поехавших психологов. Заманчиво, но надо подумать.
>у меня грязная и дырявая майка, волосы с хвостиком завязанные резинкой для денег, самостоятельная борода и пивной живот.
Покажешь примерный типаж на фотке , или скинь свою?
Мне нравится такая мода, раньше все спрашивали почему оброс как макака, а сейчас вот модно.
А я в 2008-2012 вообще ходил с неким подобием каре, как сейчас ходят какие-то школьники. Но я специально так делал, потому что забивал на внешку, чтобы быть не как все, что собственно делаю по сей день.
Каких именно? Как настроишь APIC, так и будет. А программные так и подавно под твоим контролем.
Зависит от ассемблера. В Си тоже можно имена переменных на русском писать, и это тоже зависит от компилятора (в шланге все ок, а в гцц можно только кодировать через \u): https://wandbox.org/permlink/70CQj8G6CNhTpJio
>Нахрена?
Для общего развития и упрощения
>Есть же стандартные средства
В студию?
Писать ручками разбор пикрелейтеда желания нет Не осилю, вернее
Я как-то делал такое, но в C# проекте. Все упирается в систему сборки, которой ты пользуешься. Если простым make, то вообще элементарно.
Но вообще это неправильно. Надо разобраться зачем вообще эта интеграция.
Если этот код - часть какой-то сторонней библиотеки или фреймворка, его править нельзя.
Если этот код часть flex/bison - тоже нельзя.
Ты должен умело изменять поведение программы, а не лепить зависимости, из-за которых потом нельзя перенести проект.
printf("Your number squared is: %d.", mess.imess.i);
mess.i>mess.i
Типо умножить обьект структуры (i) на саму себя ?
> Этим занимается ничтожный процент умеющих срать не снимая свой прокуренный свитер
Умею срать не снимая пуховика, суров.
Благодарствую
Все верно, лучше иди вебом займись))ведь это щас модно
>требующих от кода максимальной производительности.
А почему в геймдеве с++ это стандарт?
На нем легче проектировать? Или в каких-то задачах с++ производительнее?
Я понимаю что это уже сто раз схавано и высрано, но реально не найти нормального объяснения.
wut
flex/bison - это программы которые генерят код парсинга, не библиотеки. Тебе нужно скомпилировать этот сгенерированный код как часть твоей программы. Соответсвенно нужно настроить сборку чтобы она запускала flex/bison, а потом компилировала сгенерированный код
int n;
scanf ("%i", &n);
int massiv[n];
Желательно как-то связанное с сетями и безопасностью. Может, малварь какую? Есть какое чтиво по этой теме?
malloc
А в GCC/MinGW можешь.
Да я уже вроде разобрался. Теперь осталось придумать как, например, оттуда заполнять какую-нибудь структуру из моей части программы.
Автор оригинального вопроса
Непереносимо. В остальном ок. Присмотрись к dialog manager, ему можно скормить шаблон окна из ресурсов, заставив делать всю эту кучу CreateWindowEx с проверкой ошибок вместо тебя. Даже если у тебя не диалог на самом деле.
>>32094
Написав в тысячный раз "конструктор" для структуры, ты передумаешь. И много ли ты знаешь сколько-нибудь современных движков на Си? Незаконченный и кривой Corange, да движки стратежек, где все гвоздями прибито к конкретной игре.
Зачем мне конструктор. При чем тут Си? Если у тебя движок ассоциируется с ООП, то мне тебя жаль. Культ-карго ООП.
Что писал? Что обычно не говорят? Хочешь сказать нельзя написать движок на Си или на Хаскелле, потому что в них якобы нет ООП?
Можно хоть на Брейнфаке написать, он Тьюринг-полный.
Вопрос в том, что если сама задача распологает к использованию парадигмы ООП, почему надо избегать подходящего инструмента?
Только потому, что на Си тоже можно?
У меня создается впечатление, что ты залетный петушок, который учебник еще не закончил читать.
Что там конкретно располагает? И что ты понимаешь под парадигмой ООП? Сдается мне, что ты очередной онально-ориентированный-питух.
>ты понимаешь под парадигмой ООП?
Больной? То же самое, что и другие, тебе что, определение сюда скопипастить? Гугл в помощь.
>ты очередной онально-ориентированный-питух
Как что-то плохое
Знаешь только на уровне определений. Все понятно. Значит я был прав. Интуиция не подвела.
>Что писал?
Какие-нибудь игровые движки или что-то схожее (на C/C++).
>Что обычно не говорят?
В среде хоть как-то разбирющихся людей такой вопрос никогда бы не встал.
>Хочешь сказать нельзя написать движок на Си или на Хаскелле, потому что в них якобы нет ООП?
Это только ты такую чушь можешь выдать.
Представь себе простую ситуацию, тебе нужно создать некоторый новый "тип" объектов в игре. В плюсах ты просто создаешь нужный класс-наследник, модифицируешь несколько методов и voilà. В Си же ты заметишь, что код нечитаем и представляет из себя кривой копипаст, чуть ли не экспоненциально разрастающийся. Си не очень подходит для написания игровых движков.
>>32189
>У меня создается впечатление, что ты залетный петушок, который учебник еще не закончил читать.
> модифицируешь несколько методов
А в си у тебя инкапсуляция, ты делаешь пару оберток над методами, и норм, никакого копипаста. Вот с виртуальными функциями (или каким-то иным способом взаимодействия объектов) слегка сложнее, но тоже решаемо. И еще писать игровые движки сильно мешает необходимость изобретать даже сраный динамический массив или тащить какую-то левую либу для этого, тогда как в крестах все из коробки, да еще и с дженериками.
Ты не понял, о чем он говорит, он говорит не о том, что писать на плюсах используя ООП менее удобно, чем на Си.
Он пишет про то, что можно написать движок не используя ООП, и все твои аргументы про объекты вообще смысла не имеют, смекаешь?
На самом деле нет. В движках очень много попарных взаимодействий, а классическое ООП очень хуево диспетчеризует их.
А конструктор структуры это не признак ООП, такое и в хаскелле есть.
> написать движок не используя ООП
https://github.com/angelXwind/OpenSyobonAction/blob/master/main.cpp получится как-то так.
А моя интуиция рисует мне -максималиста, который о других анонах строит необоснованные выводы и что-то сам себе наговаривает, ни разу не выйдя в объеме своего кода на Си за 500 строк.
Ты точно писал что-то действительно сложное?
Просто ты ты в противоположность ООП скинул какой-то странный нечитаемый код.
Или по-твоему если не использовать ООП, то тогда писать код можно только так?
Да, почти все можно. Но кроме как эксперимента ради в больших проектах так делать не будут.
Приведи какой-то другой пример. Если в твоем примере будет не говнокод, там будут структуры и функции для работы с ними. Это ничем не отличается от объектов и методов, кроме названия, особенно если говорить об изначальном понятии ООП.
>Представь себе простую ситуацию, тебе нужно создать некоторый новый "тип" объектов в игре. В плюсах ты просто создаешь нужный класс-наследник, модифицируешь несколько методов и voilà.
Нит.
Допустим, у тебя есть корабль и астероид. Они должны сталкиваться. То есть ты хочешь написать методы
collide(ship, asteroid);
collide(asteroid, ship);
collide(asteroid, asteroid);
с разными последствиями.
Но в С++ диспетчеризация основана на VMT и класс, по которому ты диспетчеризуешь, только один. Поэтому если ты захочешь написать класс Yoba, который будет collide, модификацией нескольких методов ты не обойдешься. Проще всего будет написать класс Pawn, из которого как из кубика в конструкторе можно будет создать новый тип, а в его методе collide уже разбираться что там да как с помощью банального свитча
void Pawn::collide(Pawn another_pawn) {
switch (another_pawn.type) {
.......
}
}
корабль - это Pawn, у которого такая-то текстура, при взрыве хуячится Pawn.setAnimation(animation), ну и куча подобного. Никакого наследования не нужно, только композиция таких хуевин. И современные движки так и работают.
>Ты не понял, о чем он говорит
>Он пишет про то, что можно написать движок не используя ООП...
Даже если так, то я на это прямо ответил. А это не так, смотри:
>>32094
>Без ООП еще лучше.
>>32126
>Зачем мне конструктор. При чем тут Си? Если у тебя движок ассоциируется с ООП, то мне тебя жаль. Культ-карго ООП.
Да, у меня игровые движки ассоциируются с ООП. Как и у тех, кто их пишет. По крайней мере даже самый плохой код движка, который пишут на Си, будет к этой концепции стремиться.
>Да, у меня игровые движки ассоциируются с ООП. Как и у тех, кто их пишет.
Это не так. Движки нужно писать компонентно-ориентированными. То, что с точки зрения ООП является лютым зашкваром.
Выше я описал концепцию кратко: игровые сущности не являются инстансами класса с наследованием, они являются одним универсальным классом, в который как кубики вставляются различного рода модификаторы.
А далее случается такая хуйня, что ООП-ньюфаги видят слово класс и говорят, мол "ну это же тоже ООП", но нет, ООП, несмотря на свое желеобразное определение, компонентый подход не является.
Unity сильно компонентен, Unreal стар и появился еще во времена доминирования ООП, но дрейфует в сторону компонентов, писать новый движок с ООП нет никакого смысла.
https://gamedevelopment.tutsplus.com/articles/unity-now-youre-thinking-with-components--gamedev-12492
https://docs.unrealengine.com/en-us/Programming/UnrealArchitecture/Actors/Components
https://www.oreilly.com/library/view/programming-net-components/0596102070/ch01s02.html
https://forum.unity.com/threads/oop-vs-component-based-architectural-design.216532/
Это просто новый баззворд, который почему-то противопоставляют ООП. А на самом деле: объекты есть? - есть, сообщениями обмениваются (методы вызывают)? - да. Все, ООП. А дальше ты уже можешь различать способы, как наиболее удобно этого добиться.
>Это просто новый баззворд
Я тебя inb4 разъебал: 'А далее случается такая хуйня, что ООП-ньюфаги видят слово класс и говорят, мол "ну это же тоже ООП", но нет, ООП, несмотря на свое желеобразное определение, компонентый подход не является.'
Этот новый баззворд старше тебя.
>А на самом деле: объекты есть? - есть, сообщениями обмениваются (методы вызывают)? - да
Оу, ну тогда хаскель - ооп язык. И машинные коды, хули.
Компоненты это скорее архитектурный паттерн.
Если ты не маньяк, то в любом случае даже в компонетном движке у тебя будет множество классов для самих компонентов, векторов, матриц, строк, коллекций, геймплейныйх объектов и т.п.
даже если ты напишешь все на С, то все равно придешь к ООП просто сделаному через жопу
> хаскель - ооп язык. И машинные коды, хули
Насчет хаскелей не скажу, но "ООП-язык" - это, видимо, что-то, содержащее сахарок для реализации какого-то сорта ООП. В Си сахарка нет, в машинных кодах тем более. Но писать объектно-ориентированный код на этих языках можно.
>у тебя будет множество классов
Аналогично: 'ООП-ньюфаги видят слово класс и говорят, мол "ну это же тоже ООП"'.
А если я
#define class struct
напишу у меня ООП перестанет быть ООП?
>В Си сахарка нет, в машинных кодах тем более. Но писать объектно-ориентированный код на этих языках можно.
Писать объектно-ориентированный код можно, и примером такого кода является оконная система WinAPI - при чем там сообщения это не просто какие-то функции, это действительно сообщения а-ля смоллток, которые ты можешь послать кому угодно, это наследование и прочая хуйня. И это ООП.
Но объектно ориентированный код - это не все, что содержит структуры с конструкторами и деструкторами, как думают ньюфаги. Основной признак ООП - это иерархия наследования реализации. Если у тебя нет наследования, у тебя нет ООП. Например, STL в С++ - не ООП, и автор STL ООП не любит. std::vector не наследник std::abstractcontainer. И в игровых движках ОО-подход не используется. Какие-то фичи ОО-языков могут использоваться для каких-то своих целей или эмуляции других парадигм, но с мыслью об ООП никто не программирует.
> Если у тебя нет наследования, у тебя нет ООП
Ты скозал? Это всего лишь еще одна деталь реализации.
Нет, это та вещь, которая отличает ООП от любой другой парадигмы. Определения они вообще про это - как отличить одну парадигму от другой.
То, что ты вокруг себя нихуя, кроме ООП не видишь, это проблемы твоей малообразованности, а не моих попыток тебя образовать.
А вот и Даннинг-Крюгер подоспел
Ответа я так и не понял. На нем легче? Не легче? Тогда почему все практически на нем?
C++ практически единственный язык, который предлагает тебе т. н. zero cost abstractions - то есть ты используешь высокоуровневые абстракции, а компилируется это в эффективный машинный код, как если бы ты писал на С.
Сишка таким языком не является, в ней высокоуровневых абстракций просто нет.
И, что важнее, он в такой роли уже практически 30 лет. То есть если сейчас появится язык, который лучше С++ в этой области, 30 лет доминирования хуй обойдешь.
Нет, но теперь я знаю, что ты идиот.
>Основной признак ООП - это иерархия наследования реализации.
Это всего лишь твоя охуительная теория.
Изначально геймдев на крестах из-за байтоёбства, потом сам язык стал стандартом отрасли, это как у физиков фортран, и ссать они на всех хотели, особенно зарубежные, там написано уже почти всё и заебёшься заново пердолить.
Геймдев вообще был на С где-то до конца 90х.
> А на самом деле: объекты есть? - есть, сообщениями обмениваются (методы вызывают)? - да. Все, ООП.
o.m(p) = m(o, p)
Все так.
Сервер напиши.
Если ты не умеешь писать без классов, то не надо утверждать, что никто не умеет.
>Да, у меня игровые движки ассоциируются с ООП.
Секта свидетелей ООП. Еще до плюсов писали сложные проекты. И тут ты такой выполз, и кричишь что без ООП код не читаемый. Не обобщай, просто ты не умеешь писать.
Слышь, хватит пургу нести. В Си функции значит не сообщения, а твои такие же функции в классе уже значит сообщения? Придумали ерундуу, те же самые функции пишут, а кричат типа это сообщения.
Если наследования нет, значит не ООП? Тяжелый случай. Очередной адепт секты свидетелей ООП.
Вот ты и попался. Говоришь значит, что если есть наследование, то уже ООП? И говоришь, что в Хаскелле нет ООП? Хорошо, а ты в курсе, что в Хаскелле тоже есть наследование?
>Сишка таким языком не является, в ней высокоуровневых абстракций просто нет.
ШТА? Это каких нет? Ты вообще знаешь что такое абстракция? Иди СИКП читай, неуч.
>И, что важнее, он в такой роли уже практически 30 лет. То есть если сейчас появится язык, который лучше С++ в этой области, 30 лет доминирования хуй обойдешь.
Ладно ты ООП сектант, но оказывается еще и упоротый по крестам. Типичный пример эффекта Даннинга-Крюгера. Не видел ни одного языка кроме крестов, и заикаешься о том, что лучше, где абстракции мощнее.
Все, тебя уже не исправить. Такое бывает когда начал с C++ и дальше не изучил ни одного языка. Мозг искривляется в сторону крестов, и больше не способен адекватно мыслить.
Испугался да, крыть то нечем. Сами своей терминологии даже не знаете. Дошколята.
Также обнаружил для себя существование таких алгоритмов как HyperLogLog и MinHash, но пока моих математических знаний не достаточно для того чтоб нормально понять как этим пользоватся
Пожалуйста.
>>32310
>В Си функции значит не сообщения, а твои такие же функции в классе уже значит сообщения?
Я такого не писал.
>>32311
>Говоришь значит, что если есть наследование, то уже ООП? И говоришь, что в Хаскелле нет ООП?
В секте свидетелей ООП немного другое - они считают, что если что-то написано с использованием ключевого слово class - это уже ООП. Например, STL - это ООП. Потому что вектор, епта, это класс, епта, и мы ему, епта, посылаем сообщение resize, епта. Что, конечно же, не так.
Даже с учетом того, что vector в современной реализации STL может наследоваться от _GLIBCXX_STD_C::vector, все равно ООП это не станет.
>>32313
>Говоришь значит, что если есть наследование, то уже ООП? И говоришь, что в Хаскелле нет ООП? Хорошо, а ты в курсе, что в Хаскелле тоже есть наследование?
Цитирую себя >>32262 основной признак ООП - это иерархия наследования реализации
Проблема в том, что ты не читаешь, что пишут, а ищешь, как бы так сделать, чтобы я попался. Во-первых, пососи хуй. Во-вторых, даже если я где-то опечатался, это не значит, что я не прав. Впрочем, см. во-первых, потому что для таких долбоебов я заранее написал уточнение.
>>32314
Что ты блядь с этим сицпом носишься. Я эту книгу прочитал 8 лет назад. Еще про Даннинга-Крюгера мне что-то втирает, лол, прочитал одну книжку и уверен, что стал богом программирования, лол.
В SICP термин object oriented встречается один раз, в сноске, в которой говорится, что наследование - это пиздец и источник сложности, поэтому мы сфокусировались на состоянии и сознательно эту тему обходим, пока не придумают что-то получше. Видишь ли какое совпадение, даже в SICP термины object oriented и inheritance стоят рядом.
>>32315
Бля, обожаю этих бордошизиков, которые выдумали себе картину мира и дальше их манямирок трескается: оказывается в мире есть С++ программисты, которые знают больше языков, чем шизики, прочитали больше книжек и каким-то чудом ПРОЧИТАННЫЙ СИЦП не превращает их в каких-то гениев аргументации по существу, а они так и остаются маньками с гонором и с тупыми, не относящимися ко мне вангованиями.
Пожалуйста.
>>32310
>В Си функции значит не сообщения, а твои такие же функции в классе уже значит сообщения?
Я такого не писал.
>>32311
>Говоришь значит, что если есть наследование, то уже ООП? И говоришь, что в Хаскелле нет ООП?
В секте свидетелей ООП немного другое - они считают, что если что-то написано с использованием ключевого слово class - это уже ООП. Например, STL - это ООП. Потому что вектор, епта, это класс, епта, и мы ему, епта, посылаем сообщение resize, епта. Что, конечно же, не так.
Даже с учетом того, что vector в современной реализации STL может наследоваться от _GLIBCXX_STD_C::vector, все равно ООП это не станет.
>>32313
>Говоришь значит, что если есть наследование, то уже ООП? И говоришь, что в Хаскелле нет ООП? Хорошо, а ты в курсе, что в Хаскелле тоже есть наследование?
Цитирую себя >>32262 основной признак ООП - это иерархия наследования реализации
Проблема в том, что ты не читаешь, что пишут, а ищешь, как бы так сделать, чтобы я попался. Во-первых, пососи хуй. Во-вторых, даже если я где-то опечатался, это не значит, что я не прав. Впрочем, см. во-первых, потому что для таких долбоебов я заранее написал уточнение.
>>32314
Что ты блядь с этим сицпом носишься. Я эту книгу прочитал 8 лет назад. Еще про Даннинга-Крюгера мне что-то втирает, лол, прочитал одну книжку и уверен, что стал богом программирования, лол.
В SICP термин object oriented встречается один раз, в сноске, в которой говорится, что наследование - это пиздец и источник сложности, поэтому мы сфокусировались на состоянии и сознательно эту тему обходим, пока не придумают что-то получше. Видишь ли какое совпадение, даже в SICP термины object oriented и inheritance стоят рядом.
>>32315
Бля, обожаю этих бордошизиков, которые выдумали себе картину мира и дальше их манямирок трескается: оказывается в мире есть С++ программисты, которые знают больше языков, чем шизики, прочитали больше книжек и каким-то чудом ПРОЧИТАННЫЙ СИЦП не превращает их в каких-то гениев аргументации по существу, а они так и остаются маньками с гонором и с тупыми, не относящимися ко мне вангованиями.
>почему в геймдеве доминирует анальное с++
потомучто школьников набирают кодить
Реальные разрабы, которые сами пишут игры и сами зарабатывают, на своих играх бабло, пишут их на чистом Си!
https://habr.com/ru/post/275135/
Для таких игр gamemaker самое то
Ты даун походу. ООП это объекты и сообщения. Все, только эти две концепции определяют ООП. Такое можно писать и на Лисп, и на Хаскелле. Об этом в СИКПе говорится тоже. Ты конечно же не читал.
"В секте свидетелей ООП немного другое - они считают, что если что-то написано с использованием ключевого слово class - это уже ООП. Например, STL - это ООП."
он видит фразу "STL - это ООП" и из-за клипового сознания уверен, что это я утверждаю, что STL - ООП. Лол. Насколько тупым нужно быть, чтобы не видеть, что написано.
>ООП это объекты и сообщения. Все, только эти две концепции определяют ООП
Приведи пример не ООП.
> Об этом в СИКПе говорится тоже
И тут ты такой с цитатой.
Тебя уже раскусили, дошколенок. Ты написал, что в Си нет высокоуровневых абстракций. Если бы ты читал СИКП, то знал бы, что можно кодировать данные на функциях, создавать свои абстрактные структуры данных. Про абстракцию данных ты ничего не знаешь. Это ты так СИКП читал, ну-ну. Это и есть абстракции высокого уровня.
Мать твою ебал.
Так и запишем: на вопрос о том, что такое НЕ ооп слился, потому что боится обосраться.
Ты тупой что ли. Я тебе написал - объекты и сообщения. На этом было основано ООП, это главная идея. Это легко в основу Smalltalk и Simula, а потом было стянуто Страуструпом.
Очевидно, что скрутка - это объект, а скручивая ты посылаешь ему сообщение
Нет, это ты тупой. Я не спрашиваю тебя, что такое ООП в твоем уебанском определении, я спрашиваю тебя, что ООП в твоем уебанском определении не является.
Возьми и отними от всей чепухи объекты и сообщения. Идеальным ООП языком можно назвать Erlang. Там настоящие сообщения, как в Smalltalk. Даже сам Кей об этом говорил.
Это называется доказательство от противного.
Шизофреник тот, кто определяет ООП через объекты и сообщения. Я показываю, что это определение не работает, потому что оно слишком обобщенно, это все равно, что сказать, что человек - животное без волос. Что для местных школьников является недостижимым уровнем дискуссии.
Идея ООП изначально была глупой. Алан Кей же был биологом, и еще очень любил громкие высказывания, якобы он все понимает лучше других. В математике насколько мне известно он ничего не открыл. Из этого следует, что у него была прочная профессиональная деформация в сторону биологии. Биология имеет мало общего с техническими науками, и инженерией. Но Кей все равно решил скрестить бульдога с носорогом. И насколько мне известно не реализовал свои громкие заявления. Его модель ООП так и осталась никому не известной, но из-за него появились другие модели, которые еще более провальны.
Поэтому книги по OОП, старые или новые, априори содержат в себе чепуху. Так как сама идея чепуха, а реализация еще хуже. И не стоит забывать, что ООП на классах не единственная модель. Есть еще прототипное ООП из языка Self, и якобы тру-модель из языка Smalltalk, которая потом (в Smalltalk-80 и далее, а может чуть раньше) тоже была сильно извращена.
Робот Бендер закукерекал
Это я и писал если что. Но это никак не мешает тому факту, что ООП определяют объекты и сообщения. Вся остальная шелуха была введена уже после.
>Шизофреник тот, кто определяет ООП через объекты и сообщения.
Потеряйся. Умник тут нашелся. Ты что ли ООП создавал? Создатель ООП Алан Кей. Он сказал, что главная идея ООП объекты и сообщения между ними, все. Ты понимаешь или у тебя мозгов нет.
Ты так с придыханием произносишь "сам Кей", как будто слова дедушки кого-то волнуют. Он даже не первый ООП-язык придумал. Все, что он сделал - это дал людям хайповый термин, который наполнили содержанием другие люди. Когда критикуют ООП, критикуют не какие-то рандомные утверждения об объектах (без определения) и сообщениях (без опеределения), а монструозные иерархии наследования, паттерны gof (которые делают эти иерархии еще более монструозными) и прочее.
>Идеальным ООП языком можно назвать Erlang
За такое тебе в лучшем случае перезвонят, если ты где-то назовешь Erlang ООП-языком.
>Создатель ООП Алан Кей.
Создатель ООП Оле-Йохан Даль. Алан Кей придумал этому название. И дал неверное определение.
>Он даже не первый ООП-язык придумал.
Чяво? Щас будем тебя носом тыкать.
Разработал язык программирования Smalltalk, где впервые был применён объектно-ориентированный подход. Лауреат премии Тьюринга 2003 года за работу над объектно-ориентированным программированием, Премии Киото (2004). Один из создателей проекта One Laptop Per Child.
>>32388
>Когда критикуют ООП, критикуют не какие-то рандомные утверждения об объектах (без определения) и сообщениях (без опеределения), а монструозные иерархии наследования, паттерны gof (которые делают эти иерархии еще более монструозными) и прочее.
Эта вся чепуха не относится к эталонной модели ООП. Тем более паттерны от банды четырех наркоманов. Снова шах и мат тебе. Иди матчасть учи.
>>32388
>За такое тебе в лучшем случае перезвонят, если ты где-то назовешь Erlang ООП-языком.
Эрлангистов разбирают как горячие пирожки в голодный год. Он наиболее близок к эталонной модели ООП.
>Создатель ООП Оле-Йохан Даль. Алан Кей придумал этому название. И дал неверное определение.
Чепуху несешь. То что он там наваял, не называлось ООП, это обычная наркомания как в C++.
«Я придумал термин «объектно-ориентированный», и могу сказать, что я не имел в виду С++». Алан Кэй, конференция OOPSLA, 1997.
>Чяво? Щас будем тебя носом тыкать.
Тово, школьник с даннингом-крюгером. Тово.
Впрочем, ключевые слова для судорожного гугления я уже назвал в прошлом посте, можешь пиздовать гуглить.
>Эта вся чепуха не относится к эталонной модели ООП.
Относится. И в смоллтоке были ебанутые иерархии. Это уже задним числом Кей начал от них открещиваться.
Да да, Кей еще и создатель первого планшета, и первого графического интерфейса.
>Впрочем, ключевые слова для судорожного гугления я уже назвал в прошлом посте, можешь пиздовать гуглить.
Основателем ООП считается Кей, а никакой не Даль. Далевская наркомания это процедурка на классах.
>>32394
>И в смоллтоке были ебанутые иерархии. Это уже задним числом Кей начал от них открещиваться.
Не ври. Их ввели в Smalltalk-80, когда он уже не участвовал в разработке.
Да заебал ты уже со своим декраративным подходом. Императивное программирование ближе человеку. Императивная программа выполняется так, как было задумано, без ебучих отложенных вычислений, которые всю память сжирают.
>Основателем ООП считается Кей, а никакой не Даль. Далевская наркомания это процедурка на классах.
Кем считается? Кей - калифорнийский хипстер, а Даль - норвежский ученый. В этом разница. Хипстеры тебя тебя слышат друг от друга о Кее, потому что из Калифорнии проще хайповать и уверены, что смолток первый ОО-язык. Хотя в среде профессионалов подобной хуйни нет.
>Далевская наркомания это процедурка на классах.
Ты 5 минут назад первый раз услышал о симуле и у тебя уже готов вердикт. Википедийный школьник как есть.
Сообщество с тобой не согласно, оно Далю за изобретение ООП премии дает.
>Не ври. Их ввели в Smalltalk-80, когда он уже не участвовал в разработке.
А почему ввели, лол? Потому что это ключевая концепция для ООП. То, что Кей в первой редакции забыл реализовать наследование из-за желания максимально упростить симулу, не делает смолток каким-то священным идеалом.
Термины со временем уточняются и усложняются, а твоя позиция типа "св. Кей сказал вот так вот" мало отличается от религиозных догматиков. Что имел в виду Кей - похуй, потому что с тех пор прошло 40 лет, ООП успело появиться, оказаться в зените в 90-е и после этого постепенно сгнило и сдохло.
Поэтому твой подход "ща я в википедии прочитаю определение" и не работает - приходится делать охуительные выводы о том, что Erlang - ООП-язык. В манямирке, может, оно и так, но в сообществе за такое посмотрят как на шизика.
Все наоборот, школьник. Декларативному подходу учат с детства, в школе. В вычислениях нет понятия времени, они декларативны по своей природе. Императивная природа только у процессора.
Какие еще отложенные вычисления? Все понятно, ты ноль в программировании.
У тебя свое мнение есть без ссылок на чужие авторитеты?
>ФП превосходит императивное программирование
орнул с этого куска мяса. на дне это всё императивее некуда. если мясным мешкам нужны абстракции над скрутками, баг им судья
мимо бендер
Короче, я уже понял что у тебя ноль знаний CS. Кей ученый. Кей создатель ООП, везде можно об этом прочитать. Кей получил премию Тьюринга за ООП.
В современном ООП, в любой книжке написано, что объекты передают сообщения. Это придумал Кей. У Даля такого не было, обычная процедурщина с классами. Если даже современные адепты Java, C++, признают что в ООП есть передача сообщений, которую придумал Кей, то какой Даль может быть создатель ООП.
Erlang ООП язык, да. На этом все. Иди матчасть учи. Не собираюсь тратить на тебя свое время.
>Императивная природа только у процессора.
Состояние придумали жиды, ирл ни у чего состояния нет, только платонические идеи, плавающие в океане монады.
>Кей создатель ООП, везде можно об этом прочитать.
Ну правильно, если быть википедийным школьником и везде видеть упоминание калифорнийского хипстера. Только "везде можно прочитать" - это не аргумент. А вот факт того, что симула - первый ООП язык, это факт.
>Кей получил премию Тьюринга за ООП.
На два года позже Даля. При чем Далю дали за что? За ООП, ЛАЛ. Ты определись, авторы премии Тьюринга, они как, хуесосы (как Тьюринг), или ты хуесос?
>Erlang ООП язык, да. На этом все. Иди матчасть учи. Не собираюсь тратить на тебя свое время.
Erlang не ООП язык. Это функциональный язык с динамическими типами.
В ФП ты не можешь изменять свое множество, только скопировать и при копировании что-то поменять, создав новое множество.
А чтобы это стало ООП, не знаю, подрочи. Все равно никто не знает, что такое ООП, потому что никто не знает, что такое объект.
>Тоесть, ооп это ёбаный симулякр?
Так же, как и процедурное, функциональное и всякое другое программирование.
Правильно парадигмы применять к дизайну программ, а не к языку. Просто некоторые языки заточены под определенный дизайн.
Процедурная программа - это программа, архитектура которой основывается на модели данных и изменяющих эти данные процедур. Объектный дизайн основывается на модели объектов и общений, таких изолированных компьютеров, которые что-то сами собой считают и взаимодействуют с другими объектами посредством передачи сообщений, такая абстракция компьютерной сети внутри твоей программы.
Датафлоу дизайн основывается на том, что у тебя есть данные, которые как по конвееру передаются и обрабатываются определенными блоками
и т.д.
Любой такой дизайн можно реализовать хоть на си, хоть на java.
>Некая совокупность инструкций и даты?
Ну окей, стек процессора в языке ассемблера - это объект в терминах ООП?
Нет.
>Тоесть, ооп это ёбаный симулякр?
ООП - это кот. Ты даешь определение кота, типа, животное такое-то, класс, род, вид, я не биолог, ты понел, короче, а тебе показывают картинку nyan-cat или тома из тома и джерри и ты говоришь, это нихуя не кот, это нарисованный персонаж и будешь прав. Но те, кто скажет, что том - это кот, будут правы, потому что а кто это, СИМУЛЯКР что ли.
Я вижу выход только в том, чтобы дать людям характерные признаки кота, а они уже пусть решают, кот перед ними, или нет. И характерный признак ООП это объекты (некая совокупность инструкций и даты), которые состоят между собой в иерархии наследования.
Вот теперь думай, как прилепить сюда множество бит в озу. Да никак. Но если твое множество состоит в иерархии множеств, то тут уже можно думать об ООП.
>модели данных и изменяющих эти данные процедур
>модели объектов и общений
А тут есть какая-то разница, кроме чисто философской?
желающие всегда могут выяснить все вопросы
Можно определить так: посылка сообщения это late binding, то есть если при выполнении кода можно подменить один объект другим из-за того, что диспетчеризация происходит в рантайме, а вызов процедуры это early binding, то есть сообщение жестко привязано к типу адресата.
Проблема в том, что в таком определении отвалится большинство ООП-языков.
ИДИ НАХУЙ ОТСЮДА
Конечно есть. Разница уровня шаблонов проектирования.
Архитектура твоей программы это ЧЕРТЕЖ, а то, на каком станке были выточены ДЕТАЛИ этого чертежа - это уже вторично.
Да это не важно. Это все особенности реализации конкретного станка. Например, в java есть перегрузка методов, а в js нет. Ну и что. Это конкретные особенности языка. В одном может быть много абстракций, упрощающих написание программы, а в другом может их не быть.
Это потому что ты не понял, что я имел ввиду.
Дизайн программы и реализация этого дизайна на языке программирования - это две раздельные сущности. А ты этого не видишь и мыслишь все как одну сущность, отсюда ошибки.
К сожалению из-за того, что люди этого не понимают, у нас программирование по прежнему является кустарной областью, где все решения по ходу дела принимает дядя Ваня на основе личного опыта.
Почаще конпелируй, чтобы таких пробем не было.
Поискал в сети, не нашел никакой толковой литературы. Хочется понять основы, особенности устройства системы, отличия. Я так понимаю у пользователей чистого Си нет проблем в переходе на С++, они там как рыба в воде, но для тех кто всю жизнь писал на питоне есть ряд непонятных вещей.
Скажем, интересуют особенности ввода-вывода, отличия пайтона и с++, необходимость ручного управления памятью, использовать ли одну парадигму или две, нужно ли писать код под конкретный компилятор, как обстоят дела с юникодом и т.д и т.п.
Хотелось бы найти ответы на эти вопросы, в идеале бы какую-нибудь литературу, а не просто набор статей из интернета. Спасибо
>Хотелось бы найти ответы на эти вопросы, в идеале бы какую-нибудь литературу, а не просто набор статей из интернета. Спасибо
Книжка называется Дизайн и эволюция С++
Затем несколько книжек Мейерса и Саттера на выбор
Чтобы понимать бусты-хуюсты и метапрограммирования на шаблонах - Александреску, хотя может есть что поновее.
Благодарю за ответ, буду в метро читать, а дома писать код.
Недостаточно условий - размер баллона, что за дезодорант, что такое по твоему сильно ебнет.
Думаю, сильно, улетит метров на 30 нахуй
Да обычный аэрозоль 150 мл от адидас. Запах не понравился, хочу выкинуть, сосед на заднем дворе покрышки жгет от камаза, хочу приколоться и подкинуть сюрприз.
У меня так дед на два года сел, прикололся, а у человека электроожог и больничка
Ты бы доверил строить свой дом команде строителей агильщиков, или тем кто построят твой дом по TDD?
>Мы поставили унитаз в зале. Сначала он проходил все тесты, но потом внезапно сломался тест на запахи. Придется все переделать, с вас еще $1000
>Ты бы доверил строить свой дом команде строителей агильщиков, или тем кто построят твой дом по TDD?
Строительство хорошего индивидуального жилья это всегда эджайл, потому что предусмотреть все заранее как тебе нужно невозможно, сколько бы бабок ты архитектору не отвалил.
То же касается и типовых коробок - тебе предоставлен отлаженный фреймворк, но ремонт один хер индивидуально надо делать.
Я горький.
Нет сборщика мусорщика оптимизированного под минимальные паузы.
Там пилят что-то вроде модульного сборщика мусорщика, но такими темпами они еще лет 10 будут пилить
>или тем кто построят твой дом по TDD?
Проиграл со строителей, которые в процессе строительства ломают тестами дом и каждый раз заново его пересобирают.
Очевидно, заебался пилить огромные проекты на си.
При этом сам он называет этот переход "эволюцией моего С-стиля", лол.
Не ломают, а проводят испытания компонентов.
Ты удивишься наверное, но вся область техники и строительства именно этим и руководствуется.
Так что ты пукнул в лужу, смешной дурачок.
>проводят испытания компонентов
Типа автомобильные краш-тесты?
И где ты видел, чтобы на стройке делали испытания ЖБИ под нагрузкой или проверяли канализацию под давлением? Все делают про проверенным веками технологиям, и тесты тут нахуй никому не нужны.
Пизда поперек. А так вообще нет разницы.
лолблядь
>Не ломают, а проводят испытания компонентов.
В TDD сначала придумывают тест на фундамент, потом строят фундамент, потом проверяют че построили, потом доделывают/ломают/переделывают. Тесты позеленели? Жить можно!
От кастомера пришел баг-репорт. Пишем, тест. Чтобы его позеленить, надо лифтовую шахту залить монтажной пеной, и временно повесить люльку снаружи вместо него.
Ржублядь.
Обожаю читать мудаков, с умным видом рассуждающих о вещах в которых не смыслит совершенно.
10 килокравецких из 10
Не, вот flex/bison парсер готов и работает. Теперь бы его в программу интегрировать, чтобы структуры заполнял.
#include <stdio.h>
#include <stdlib.h>
int main()
{
char pstr = NULL;
int razmer = 10;
pstr = (char)calloc(razmer + 1, sizeof(char));
for (int i = 0; i < razmer; i++)
{
scanf("&с", &pstr);
}
for (int i = 0; i < razmer; i++)
{
printf("%c", pstr);
}
return 0;
}
Этот код должен был запрашивать количество символов <=razmer и заполнить ими переменную pstr как массив, но что-то не особо получается. Что именно я делаю не так? Прошу нормально объяснить без подъёбов и желчи.
>&c
Две ошибки. c - не латинская (переключись на английский и введи еще раз). scanf использует %, а не &.
Спасибо за помощь. Можешь теперь объяснить почему если размер будущего массива объявить сразу при объявлении переменной, то всё в порядке, но если присвоить значение через scanf, то выводит на одну ячейку меньше?
https://ideone.com/comC3P
По сравнению с неэффективностью приложений на electron, заливка шахты пеной это сущие пустяки.
После ввода цифры у тебя во входном потоке остается символ перевода строки, вот и выводится так. Можно заметить, что строка лишний раз перевелась.
Можно пофиксить, добавив после ввода размера fflush(stdin), но это Undefined Behavior и нехорошо. Хотя лично у меня всегда работало как ожидалось, и для обучения в принципе сойдет.
Причем тут жабаскрипт вообще?
Но ведь если убрать scanf для razmer, а razmer сразу присвоить значение, то циклы будут отрабатывать правильно без всяких костылей. Почему так?
scanf жрет из входного потока все, что у него попросят. Ты просишь число, его он и дает. Но нажав Enter для завершения ввода ты посылаешь во входной поток символ конца строки ака '\n'. Вот его scanf из потока уже не берет. Далее ты с помощью scanf считываешь символы, но в потоке-то уже есть наш '\n'! Вот он его в нулевую ячейку массива и помещает, после чего уже все остальное разбирает. Альтернативный вариант решения проблемы - пикрелейтед. Тупо запроси у scanf ждать еще и символ конца строки.
Отзовись пожалуйста, у меня важный вопрос.
Я попробовал вместо \n поставить просто пробел без ' и результат такой же, как и у тебя.
Ну можно и так. В любом случае scanf взяла еще символ из потока, что и требовалось.
А можно заставить один и тот же scanf сместить курсор более, чем на один символ?
Какой курсор? Это поток, который к тому же не умеет в fseek, там нет никаких курсоров. Ты имеешь в виду "пропустить n символов"? Можно так: scanf("%*123c"), где 123 - количество пропускаемых символов.
Это зависит от ловкости твоих рук и возможностей клавиатуры/usb/ps/2. Если сможешь молниеносно отправить 2 символа за то время, пока не сработает команда новой строки, то молодец. В джаве так сборщик мусора работает. Никогда не знаешь, удалится ли ссылка на объект после удаления объекта или нет.
Можно и так, и так:
struct something {
size_t length;
char ∗dynamic_data;
};
struct something {
size_t length;
char dynamic_data[];
}
В первом случае у тебя два malloc(), но зато при realloc() dynamic_data не меняется адрес самой структуры. Во втором случае malloc() один, но изменение адреса структуры при realloc() может доставлять неудобства.
Ебанутся какая нудятина. Со слезами радости с удвоенным удовольствием читаю дальше Прату.
Неужели кто-то еще способен это пережевывать?
Да мне все было понятно. Да, делал задания.
Тупорылый форс сикпа для обучения погромированию.
Нет, просто начиная читать SICP человек ожидает прочитать что-нибудь о структуре и интерпретации компьютерных программ. А внутри ЛИШП.
Ты вероятно школьник еще. Меня в школе учили по советским учебникам. Да, они были нудные, но изложение было строгим, математически строгим. СИКП очень похож по манере изложения.
А теперь делайте выводы. Современное поколение не способно с серьезному глубокому обучению. Всему виной клиповое мышление, которое выработалось из-за гаджетов и интернета.
K&R уступает только по причине вменяемых примеров в главах. В остальном нахуй лисп не нужон вместе с сикпом шеме прочими питушиными диалекатми.
Еблан, конченный еблан. Пошёл на хуй.
K&R про то как хеллоу-ворлды писать, а СИКП про построение абстракций и архитектуры. Си отстой.
Убедительно. Надо будет посмотреть, что там лиспопитухи понаписали.
В SICP'е любому программисту нужна 2 и 3 глава.
1-я с основами ФП - ну такое, скучновато, но там есть прикольные вещи типа чисел Черча. Я помню я сидел в очереди в больнице и на бумажке и хуячил их, почти кончил на виду у бабок.
4 и 5 - про то, как пилить интерпретаторы, нахуй не нужная ебатория, особенно делать там упражнения. В жизни тебе это не пригодится, если ты не ебанат типа авторов язык julia, который всерьез решил часть реализации написать на scheme.
А вот 2 и 3 глава, где описаываются потоковый и объектный подход, делаются философские замечания по этому поводу, описывается как символьно дифференцировать (про tensorflow корочъ) и прочее, это одно из самых охуенных чтив для программиста. Но, если ты с удовольствием читаешь Прату, очевидно, что ты не дорос до подобного - Прата ведь хуевый клон Кернигана и Ричи.
Алсо если в переводе читаешь, то он так себе.
https://pastebin.com/raw/njBqNEzJ
Это неопределенное поведение?
gcc -o test test.c
./test
3
5
Мимо пхп макака
Конечно, v-то уничтожается по выходу из функции.
То, что на стеке физически число 5 остается - это везение, очень мерзкое при том, потому что такой баг может годами жить и проявляться изредка.
Интересный у вас язык. Вот у нас в пхп всегда все определенно, если знать некоторые нюансы.
А если серьезно, то что? Пхп сейчас хороший язык для серверов, не побоюсь этого слова - лучший язык для веба. Слоупоки сейчас конечно будут рассказывать истории своего опыта на версии эдак 5.6 и меньше, которые уже даже не поддерживаются, но те к в курсе дел знают, что пыха развивается семимильными шагами.
Результат развития — бойлерплейт жавы и всё наследство пхп. А ведь был хорошим и простым языком.
> если знать некоторые нюансы
Ага, например весь конфиг php.ini на котором будет крутится твой код и какие опции из него будут удалены в следующей версии интерпретатора
Бида! Бида!
>А если серьезно
Он и правда тупой.
Впрочем, термин пхпдебил родился из жизни и полностью заслужен.
Какой язык - такое и комьюнити.
Какое комьюнити - такой и язык.
Почти как govno, хаха.
Cмешно, да. Но я правда серьезно спрашиваю: за что ненавидеть пыху последней версии? И самое главное, почему ее ненавидят по большей части те, кто на ней пишет?
>ненавидеть
К чему такие громкие слова - почти никто не ненавидит говно. Презирать, брезговать, блевать - скорее так.
>почему
Из-за комьюнити по больше части - быдло и дебилы же, почти как одножопые.
Вот и ты, например.
Потому что только если ты пишешь на чем-то ты можешь полностью осознать какое это дерьмо.
я вот никогда на пхп не писал и в душе не ебу, что там не так
Уже несколько месяцев ищу ответ на этот вопрос, и никто не ответил без сарказма и насмешки.
Понял. Но это ведь можно отнести к совершенно любому языку. Вон даже в этом треде проскакивают посты с описанием, какое же говно си.
> >дан прямой и буквальный ответ
>Уже несколько месяцев ищу ответ на этот вопрос, и никто
А вот и иллюстрация: пыхыпыдебил as is.
Этот ответ полон эмоций и субъективности. Дело тут не в быдле и не в гопниках, которым полюбился пых. Я говорю про людей, которые не в начале 21 века в кодирование вкатились, а в конце 20-ого. За что его не любить? Альтернативы пыху просто нет.
>Дело тут не в быдле и не в гопниках, которым полюбился пых.
Нет, дело именно в этом.
Дело всегда в людях, омежка.
>Альтернативы пыху просто нет.
Очередная иллюстрация пыхыпыдебила, хаха.
ПХП чудовищно эстетически некрасив, для языка, которому нет 20 лет, он жутко неортогонален и полон какого-то легаси-говна.
Его пилили люди, которые понятия не имели об устройстве языков и ничего сложнее си в своей жизни не видели. И это в нулевые годы. Любить его точно не за что.
Что касается каких-то подводных камней внутри языка, то до такого как правило не доходит, потому что нахуя нормальному человеку погружаться в это говно? Есть красивые языки, руби или питон, например. Даже жс, сделанный за две недели, на бесконечно красивее, чем пхп.
Да не в этом. Можно даже аналогию привести с политикой и народностями. Все знают, что хохлов никто не любят, но украинский язык занял первое место по красивости и приятности звучания в каком-то году, не помню уже. Так же вот и с пыхой. На нем пишет много людей. Много перекатывальщиков из тех же самых низкоуровневых. Бывшие инженеры пишут на пхп. Но вот даже работнички корпорации гугл говорили, что стали бы писать на php только разве что сервис для доставки пиццы им в офис.
Я не пытаюсь тебе проиллюстрировать тут какой-то образ, но мне вот интересно, почему в мире кодирования пхп стоит особняком, на который каждый считает своим долгом поссать.
>На нем пишет много дебилов и быдла.
Поправил эту мечтательную туповатую омежку.
>Все знают, что хохлов никто не любят
А, так ты лахтинский.
Это ВСЕ объясняет.
Перл создан лингвистом и при неортогональности у него есть свой шарм - он лаконичен, например.
Я бы его не использовал, но ничего плохого в нем не вижу, раз привлекает, хули нет-то.
>ПХП чудовищно эстетически некрасив, для языка, которому нет 20 лет
Я думаю, что это все-таки дело привычки, да и в последних версиях ввели синтаксический сахарок некоторый.
>Его пилили люди, которые понятия не имели об устройстве языков и ничего сложнее си
Не знаю ничего насчет этого, но возможно ты прав. Хотя программирование все-таки наука вне времени, тут своя структура развития, так сказать. И все что угодно можно написать на любом языке, практически.
> руби или питон, например. Даже жс,
На руби не писал, не люблю узкоглазых, а вот питон мне не полюбился синтаксисом. И еще тем, что я не могу форматировать код, как мне вздумается. А жс сейчас уже не тот, что был раньше. Но насчет красивости не спорю. Хотя опять же повторюсь, что это дело привычки.
Ты вот не знаешь даже, о чем говоришь. Не все пользователи пхп быдло и дебилы.
>А, так ты лахтинский.
Это что?
>Я думаю, что это все-таки дело привычки, да и в последних версиях ввели синтаксический сахарок некоторый.
Нет. Дело привычки - это синтаксис хаскеля, например, J или, не знаю, лиспа. Я вот не умею глазами парсить лисп, но у меня нет вопросов, что это дело привычки.
А здесь именно что антиэстетичность. А то, что ты этого не видишь - за это собственно пхпшников и не любят.
>На руби не писал, не люблю узкоглазых
Еще и расист. При этом "не все пользователи пхп быдло и дебилы". Ну да, не все, но где они?
>питон мне не полюбился синтаксисом
А пхп полюбился.
>Все знают, что хохлов никто не любят, но украинский язык занял первое место по красивости и приятности звучания в каком-то году
Ну да, "не все пользователи пхп быдло и дебилы"
Так надо же помочь голодающему 15 рублей заработать, милосердие же.
Или ты не православный и Путина не любишь?
Зарепортил этого русофобствующего аметиста-нацпредателя.
>А здесь именно что антиэстетичность. А то, что ты этого не видишь - за это собственно пхпшников и не любят.
Так я спрашивал за то, почему не любят именно пхп, а не сам язык. Антиэстетичность это тоже субъективизм чистой воды. Кому-то норм, кому-то нет.
>Еще и расист. При этом "не все пользователи пхп быдло и дебилы".
Ну это мои личные убеждения, к языку, на котором я пишу это никак не относится.
>А пхп полюбился.
Ну да, как хочу, так и пишу.
>Ой, описался.
>этот шизофреник с энурезом
Очаровательно :3
>Почему не любят пользователей пхп
Потому что тупые и/или быдло и энурезники, хаха
>не любят именно пхп, а не сам язык
Чтоу
>Антиэстетичность это тоже субъективизм чистой воды.
Ну да, субъективизм, например, хирург может вообще не понять, что я имею в виду.
Но если я вижу программиста, который этого не понимает, то для меня он не совсем программист уже. Потому что его субъективный мир допускает такую каку.
Для тебя это может быть шоком, но я на дваче не живу
>>33343
>То есть ты даже не допускаешь хотя бы мысли о том, что твой субъективный мир может отличаться от субъективного мира другого программиста?
При чем тут субъективный мир. У любой профессии есть стандарты. Например, я допускаю, что людям может нравиться здание театра et cetera в Москве, но если такой человек скажет, что он архитектор, для мне он не будет архитектором, он будет долбоебом. Потому что с точки зрения архитектуры этот театр пиздец. И архитектор тебе даже формально распишет, почему это пиздец, но для этого достаточно взгляда.
То же касается и пхп. Этот язык один из самых страшных из существующих. И если кто-то этого не видет, это не программист. Как вот тут >>32753
смотришь на код, и видишь, что человек не программист, а учится. Субъективно? Возможно. Неверно? Нет.
Судить о вещах по их форме, а не содержанию это удел формалистов. Ты же не из этих, верно?
Я программист, чувак. Конечно я формалист. А если ты не формалист, то хули ты забыл в программировании. Иди стихи пиши
А если ты формалист, значит, у тебя нет фантазии, только промышленное мышление, решение проблемы в лоб. Это плохой программист.
>решение проблемы
Гуманитарный пхпдаун рассуждает о решении проблем (с) картина маслом, Иероним Босх
Можно и calloc. calloc() - это malloc() + memset() в наивной реализации.
Мне 35, я инженер, большей частью имею дело с ТРИЗ.
Давай, рассказывай мне про математически строгие абстракции.
> советским учебникам
Лютейшее дерьмо, есть буквально один-два учебника в каждой области, но и они говно по сравнению с западными.
Последний раз годные учебники были еще при Сталине, потом все говно.
https://ideone.com/flp1E0
Одномерный массив компилятор пропускает, но двумерный почему-то не хочет. Как заставить пропускать?
1) Инициализаторов в структурах (5 строка) в Си нет.
2) razmer + 5 это неправильный размер динамического массива, судя по циклам ниже. Возможно, ты хотел умножить?
3) Многомерных массивов в Си нет, но ты можешь делать массив массивов. Например, массив из razmer массивов по 5 char. Если на стадии компиляции известно хотя бы последнее измерение (5), ты можешь заставить компилятор индексировать динамический массив, например, так: https://ideone.com/WAGTWz Если нет, то Си тебе ничем помочь не может, и для массива n ∗ m (n строк по m элементов), ты получаешь из строки i элемент j вручную с помощью выражения типа array[i ∗ m + j].
>>33556
Нет там ошибки.
Многомерный массив - это такой тип, который хранит все размерности сразу. Т.е., условный многомерный massiv[x,y,z] - это массив с тремя размерностями x, y и z.
> А massiv[x][y][z] это какой, одномерный?
Да. Это (одномерный) массив из x элементов, каждым из которых является (одномерный) массив из y элементов, которые являются (одномерными) массивами из z элементов. Эту конструкцию можно использовать, как многомерный массив, но "настоящим" многомерным массивом она от этого не становится.
Учитывая, как надо изъебнуться, чтобы передать в функцию указатель так, чтобы пользоваться arr[j][k], а не arr[isi+jsj+k] - их нет.
Текст пожрал долгоносик, но суть ясна.
Просто передаешь не указатель, и не массив, а указатель на массив. Я бы не назвал это таким уж сильным изъебом.
https://www.chiark.greenend.org.uk/~sgtatham/mp/
Что может компилятор для C, то может и для C++, а твой код просто не работает.
То, что ты написал, доказывает, что не может.
Майнкампф называется.
В Си указатели на void сами отлично кастятся в указатели на другие типы, в крестах нужен явный каст. Добавь каст у calloc(), и все заработает.
Не знаю, в моём универе на всех компах стоит десятка. Лицензионная.
В то время, когда это дизайнили, никто не писал сложных крупных программ. Поэтому необходимость каста в крестах - это шаг в правильную сторону. Еще бы неявный каст между целочисленными типами убрали, и было бы совсем заебись.
>>33686
Зависит от того, какие именно там права. Если для тебя r нету, то ничего не сделать. Если такая проблема только у gcc/cc, можешь научиться самостоятельно, без драйвера дергать все эти cpp, сс1, as и ld. Или, может быть, у тебя есть возможность заранее притащить и спрятать по-тихому какой-нибудь tcc?
По лиспу?
>Мне 35, я инженер, большей частью имею дело с ТРИЗ.
ТРИЗ - шарлатанство, если ты в 35 это не понял, то ты не инженер, а так, символ деградации российской промышленности.
Чини детектор, я в СШУ живу и работаю уже 15 лет, в сфере высокоточной обработки сплавов. Российской промышленности блядь. У нас курсы и семинары по TRIZ хз имеет ли отношенин этот ТРИЗ к оригинальному.
>ТРИЗ
Че за ТРИЗ? В вике прочитал по диагонале так говно какое то, магия уровня нейродолбоебов, лол
Дебилы*
Ээээ. Именно потому что она псевдослучайна, ее можно воспроизвести, зная секрет (значение, которым инициализирован генератор, зерно). Вот если бы она случайна была, то ее пришлось бы хранить и заранее передавать, и у тебя бы получился классический OTP.
ТРИЗ всего лишь современный метод разработки систематизированый по опыту предыдущих изобретателей. Ещё в совке были всякие технологические прогнозирования без задач при РАН. Морфологический анализ комбинаторика выбора из существующих вариантов, а ТРИЗ на новые решения больше нацелен.
ТРИЗ - это шарлатанство для зарабатывания бабок на тренингах
>ТРИЗ всего лишь современный метод разработки систематизированый по опыту предыдущих изобретателей.
Ну и чего там за последние 50 лет наизобретали? Как жгли динозавров в цилиндрах так и жгут, как петарды хуярили в недокосмос так и хуярят.
двачую. Никаких изобретений с этим потреблядством. Только транзисторы уменьшаются, вот и вся революция.
Квантовые пекарни перевалили за 10 когерентных кубит. Неслыханная дерзать для последних 50 лет.
>Квантовые пекарни
Какое то маркетинговое оверхайповое говно, я бы этим квантовым маняматикам платил бы зарплату в квантовых состояних, типа одновременно деньги уже потрачены на все ништяки и в итоге 0, распишитесь.
Ну, говорят, что поиск по БД сокращает на треть без хешей даже. Для огромных БД это неслыханная экономия. Им это и выгодно.
Когда-нибудь на Сях будут писать даже для квантовых архитектур. Да и для меня тоже интересно, ведь заставляет мыслить иными категориями. Логические вентили там не классические NOR, AND, OR, XOR, NXOR, NAND, NOR а вентили смены поляризации по фазам в цикле 3600. Так если поляризацию поставить 50/50по фазе либо на 900 либо на 2700, то получится аппаратный генератор случайных чисел и кубит будет схлапываться в 1 или 0 с шансом 50 на 50. Полезно, если ржаветь начну, но само собой классическую бинарную логику они никогда не вытеснят. Зато в хуйлоаде пригодится.
>типа одновременно деньги уже потрачены на все ништяки
Нихуя, они только по бумагам будут в неопределённом состоянии в зависимости от фазы квантовых регистров, а на деле они всегда будут либо однозначно приваливать, либо однозначно утекать хуй пойми куда в квантовые подпространства, лол
>Ну, говорят, что поиск по БД сокращает на треть
Пусть зделоют, будем посмотреть,
>от фазы квантовых регистров, а на деле они всегда будут либо однозначно приваливать, либо однозначно утекать хуй пойми куда
Еще им столовку зделоть с квантовыми состоянимя, типа приходят, а им говорят вы уже пожрали, идите на хуй, вмиг начнут рационально думать, а не нести хуйню.
Не надо про еду. Я кушать хочу. Это больная тема.
...
Давай я лучше про квантовую механику расскажу...
>квантовую механику расскажу
нинадо, там настоль все нафантазировали, что сами уже в это не верят.
Стивенс
isspace(arr[j]) возвращает булево значение, как и этот твой ==, именно такое значение и запихивается в if
c=getchar() != '\n'
Выдает ошибку lvalue required as left operand of assignment?
Хотя если заклюючить c=getchar() в скобки то все нормально?
Школа
нормализуй, сохраняй мантиссу и экспоненту как целые числа
это легко, на самом то деле..
погугли, епт
FILE* f= fopen("AlphStep.txt", "wb");
float ff= 12.7;
fwrite(&ff, fsize, 1, f);
fclose (f);
f= fopen("AlphStep.txt", "rb");
float ff2;
fscanf(f, "%f", &ff2);
fclose (f);
Ты записал в бинарном виде, а считываешь обратно как текст. Там fscanf вообще должен был ошибку вернуть, а 33.0 случайно в стеке лежало на месте ff2. Или fprintf вместо fwrite, или fread вместо fscanf используй, тогда норм будет.
Бинарный вид - такое представление в нулях и единицах, с которым уже напрямую работает процессор, когда что-то вычисляет, а текстовый - это когда человеческими цифрами/буквами записано.
Спасибо заменил fprintf`ом. А как теперь лучше записать и считать массив? Тупо в цикле прокручивать каждую цифру? И ещё если мне после запятой достаточно двух знаков, во fprintf`е я могу указать
"%.2f", но во fscanf`е такое не работает?
ну, бля, используешь union чтобы удобно работать с представлением вещественного числа, извлекаешь мантиссу и экпоненту, дальше сохраняешь их как целые числа
изи
вернее, точность ты все равно потеряешь
но сериализацию ты делаешь уже с требуемой endianess
все легко!
Зачем scanf сообщать число знаков после запятой? Сколько по факту есть, столько и пропарсит.
И имеешь ввиду fopen("AlphStep.txt", "wb+k" ); ? Так вообще не работает.
...Во работает вроде:
FILE* fl= fopen("AlphStep.txt", "wb");
float x1[]= {12.3, 7.5, 9,0, 0, 6, 1.1};
fwrite(x1, fsize, _countof(x1), fl);
fclose (fl);
fl= fopen("AlphStep.txt", "rb");
float x2[64];
fread(&x2, fsize, _countof(x1), fl);
fclose (fl);
К -очепятка
Ой, там в fread амперсанд лишний, хотя и так и сяк работает, хм.
пизда!
> Как сохранить массив флоатов в файл
Можно записать просто так, вот банальным fwrite. Гарантируется, что в пределах одной машины все прочитается без проблем. На самом деле прочитается на любой машине, которую ты сможешь найти, если совпадает endianess, потому что IEEE754 умеют все. Если хочется максимум переносимости (C99 и выше), то fprintf(fp, "%a", number).
>>35844
Очень костыльный и сложный метод, не стоит так делать.
> и в
поверь мне как правильно сериализовать вещ числа, знают всего лишь несколько человек в мире и ты явно в их число не входишь ))
> поверь мне
Не поверю. Для тебя сделали %a, которая сериализует и восстанавливает без проблем. Это если про плавающую точку говорить. С фикседпоинтом все сложно.
Спасибо, анон, я вроде как и сам вкурил!
Раз ты в теме, дай совет. Я хочу написать сам что-нибудь связанное с безопасностью и/или сетями. Есть книги, ресурсы или идеи по теме? Может какой-то простенький протокол, который можно реализовать? Если честно даже простеший A5/1 по RFC нихуя не понятен. Пару лет назад читал том Олиферов по Сетям-нихуя не понятно было, на практике как-то лучше идёт.
Или еще лучше, давай я на PlayStation 2 запишу валидный float32 в файл, а ты из него прочитаешь +-Inf или NaN.
Всё верно, проглядел %c, спасибо <3
>Значит шарп далек от крестов? И шарп дабе не сиподобный, как заявлено в шапке?
Значит тред посвящен только чистому С.
И все крестолюбы шарполюбы и жаболюбы идут в соответствующие их тематике другие треды.
Список тредов в шапке раздела.
>>35902
>>35830
>>35756
Пацаны че вы как ламеры файловый ввод-вывод дрочите?
Хуяк-хуяк:
> fd = fopen("foo", O_RDONLY);
> pagesize = getpagesize();
> data = mmap((caddr_t)0, pagesize, PROT_READ, MAP_SHARED, fd, pagesize);
И файл уже в оперативе так-то. Берем указатель data и дальше кастуем как хотим, дрочим байты как хотим. Никаких циклов-хуиклов.
Действительно. Тут люди про переносимость на уровне архитектуры думают (endianness). Не понятно, с чего бы у кого-то #include <sys/mman.h> вызвало вопросы. Кому линуксовые фичи не завезли, тот не программист... А вообще:
- чувак, как интеграл вычислить?
- чего ты как ламер? Загугли "scientific calculator online" и будет тебе счастье..
Тут люди целенаправленно основы изучают, а ты им юзерские ништяки предлагаешь.
> И файл уже в оперативе так-то
Нет. Файл будет читаться понемногу, разве что делать это будет ядро, а не ты. Причем медленнее, чем если бы ты выделил память и прочитал туда файл за раз.
> дрочим байты как хотим
Тут-то я и достаю флешку, с которой ты этот файл открыл.
>>36617
В PowerPC кроме как с endianess проблем нет. Свопаешь байты и живешь спокойно.
>>36620
> а ты из него прочитаешь +-Inf или NaN.
Если ты пишешь NaN в файл, у тебя проблемы с головой, а не с представлением чисел.
fopen? Ты ничего не перепутал?
Стало быть, я недостаточно очевидно обозначился, как третье лицо. Чувак, это не у меня препод и лаба. И у того анона тоже не факт. Может для собственного развития пробует в ручную запись и чтение числовых данных с использованием буферов. И, кстати, чтоб просто несчастный массив вычитать, только быдлокодер станет дергать mmap(). Есть подозрения, что веду диалог с наполовину троллем, наполовину любителем похвастать, что читал Advanced Linux Programming. Это все мимо кассы.
Сисюеы, нужно заебенить по шариату кросплатформенное логирование мнгопроцессной йобы, как там по канонам делоть?
Нет. Очень странно, но нет.
>Если ты пишешь NaN в файл, у тебя проблемы с головой, а не с представлением чисел.
https://wiki.pcsx2.net/PCSX2_Documentation/Nightmare_on_Floating-Point_Street
Чтоб не путаться в пространстве нормальных имен. Позволяет избежать конфликта имен. Вряд ли ты назовешь переменную t_varname, но вполне может захотеться написать point, и будь тип назван так же без префикса - +1 лишний стресс. Есть вариант с суффиксом zalupa_t, но это в POSIX зарезервировано (pthread_t, ...), так что нежелательно.
И что это доказывает? NaN - это такая штука, которая говорит, что твоим вычислениям пришла пизда. Нет никакой необходимости писать заведомо бесполезные результаты в файл или читать их оттуда. Тем более на PS2.
С хэштегом бля.
Где переменная создается, где им можно пользоваться, структура, массив.
А то иногда передаю указатель из функции в функцию, а компилятор жалуется , что данные локальные
Под локальный массив место в стеке выделяется. Как только функция возвращается, никто этот отрезок RSP-RBP не защитит от перезаписи другими вызовами. Warning как раз намекает, что ты стреляешь на удачу. На высоком уровне абстракции не может быть внятной инфы, как это все работает. Чисто high-level категориями описываются другие языки, которые без указателей. Или покорно следуешь правилам, к чему можно обращаться, а к чему нельзя, мирясь со своим положением и не пытаясь вникать, что за магия больших дядь под этим лежит, или читаешь, как работает сегмент стека, heap, malloc и free (new и delete) и т.д. Любая нормальная книжка по Assembly начинается с этой теории. За вечерок(-другой, если туго) перевариваешь, и потом никаких вопросов, подводных камней, исключений, частных случаев и прочей поеботы, одно счастье и Сишечка one love.
Вот это поворот
Почему корректно возвращает целую часть? Почему не странный мусор от прочтения double как int?
Возврат функции автоматически кастует?
да, там ведь return z; явно по контексту анализируется: return type - int, z type - double. Вот возвращался бы указатель - уже бы хрен что внятное распечаталось.
Потому что функция возвращает int, и Си автоматически преобразовывает тип, как если бы было:
int return_value = z;
return(return_value);
Добавлю:
> Почему не странный мусор от прочтения double как int?
Это когда printf("%d\n", 1.0);? Дело в том, что printf(fmt, ...) - функция с переменным числом аргументов, и ни Си, ни сама функция не знают, что ей передали в ..., поэтому компилятор не может ни контролировать тип на самом деле может, сейчас в компиляторах есть костыль, который парсит форматную строку, если она доступна, ни преобразовать его в описанный форматной строкой. Поэтому все передается как есть, и printf, когда читает %d, читает int, несмотря на то, что был передан double. А вот в твоем примере вся информация о типах доступна, поэтому все само конвертируется.
> Вопрос - это в соответсвии со стандартом? Где это искать вообще?
C11 6.3 Type conversions, 6.8.6.4 Return statement (пикрил).
> возвращает int и конвертирует в int я понимаю что разные вещи.
Сначала конвертирует (если нужно), потом возвращает.
Добра счастья любви и денег тебе и всем в этом треде
> Биты считаются справа налево
Потому что тут тебя намеренно запутывают. Тут биты в байте считаются справа налево, но p указывает самый старший (самый левый) бит в битовом поле. Поэтому и такое выражение. Если бы считали справа как люди (getbits(x, 3, 4) = взять 4 бита, начиная с третьего, т.е., 3, 4, 5, 6), тогда бы ты сдвигал просто на p.
>>39424
> Поч сегментейшн фолл, не пойму
И мы по огрызку кода тоже не поймем. Может быть, у тебя один из файлов не открылся, а ты не проверил?
Упс
Это копия, сохраненная 11 марта 2019 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.