Q: Я хочу тотчас вкатиться, а разбираться буду в процессе. Что я должен делать? Q: Не уверен, что хочу изучать C++. Как мне пощупать его без лишней ебли? A:
Читаешь эту книжку, смотришь упражнения из нее и суешь в онлайн-компилятор. Сообщения компилятора об ошибках копипастишь в гугл, ответы на возникающие у тебя вопросы ищешь в предыдущих тредах, спрашиваешь в этом треде, если не нашел. Если тебя послали на хуй или не ответили, то ты спросил платину, читай предыдущие треды внимательнее.
Памятка ньюфагу
Вопросы по синтаксису идут на хуй
Лабы идут на хуй
"Как мне сделать Х на чистых крестах без библиотек" идут на хуй
Все идут на хуй
Хейтер сосет члены на пару со своей мамашей
Небольшие фрагменты кода размещай в треде при помощи тега [code] и жабаскрипт-костыля. Для больших фрагментов используй внешниесервисы.
FAQ
Мотивация
Q: Почему стоит использовать именно C++? A:
Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три:
Скорость
C++ действительно быстрый язык — вместе с C, его прародителем, они с большим отрывом уделывают по скорости все остальные языки высокого уровня. Код на C++, как правило, медленнее аналогичного кода на C приблизительно на 0-20% а в ряде случаев C++ оказывается даже быстрее, причем замедление появляется только при использовании высокоуровневых конструкций (в C++ ты никогда не платишь за то, чего не используешь). Таким образом, если тебе требуется высокопроизводительный код, C++ станет отличным выбором.
Мощь
C++, являясь одним из наиболее выразительных и мощных языков, позволяет использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментов простреливания ноги решения задачи. Как следствие, используя C++, ты можешь не думать о том, как обойти искуственные ограничения языка, а беспрепятственно выбрать наиболее подходящие к ситуации средства.
Популярность
C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Q: Но он же давно устарел! A:
Современный C++ весьма далек от языка, которым он был в 1998 году. В настоящее время кресты живее всех живых, их развитие движется семимильными шагами, а новые стандарты принимаются каждые три года, сохраняя при этом полную обратную совместимость с предыдущими. К сожалению, из-за обилия некачественной литературы по С++, в которой игнорируются новые средства языка, бытует мнение о его "несовременности".
Q: Сейчас все пишут на %languagename, а кресты сосут у него! A:
Нужно понимать, что используемый язык должен соответствовать поставленной задаче. Никому не придет в голову писать на C++ скрипты или веб-фронтенд хотя это вполневозможно, но лишь немногие языки могут соперничать с ним по разнообразию решаемых задач.
Q: Хуле тут так сложно? Я открыл учебник, там какой-то ад! A:
Попробуй учебники, изданные после 2011 года, в которых рассматриваются возможности новых стандартов (C++11 и C++14). Этифичи не только добавили выразительности, но и серьезно упростили жизнь разработчиков. Теперь программировать на C++ стало проще, чем когда-либо! Это не отменяет необходимости прочитать несколько серьезных книжек, чтобы написать на нем что-то годное. Тем не менее, да, C++ это по-настоящему сложный язык. Его никак не получится выучить за 21 день, ну вот совсем никак. Именно высокий порог вхождения повышает твою ценность как специалиста, не позволяя нанять вместо тебя индуса за еду. Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам.
Литература
Q: Окей, я решил вкатиться. Какие же книги мне читать? A:
Специально для тебя аноны /pr собрали уникальную коллекцию отборной литературы по крестам. Только лучшие книги, последние издания, без хуев! Выбирай категорию и обмазывайся:
Для нюфань
Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется:
Кроме того, есть еще пара старых добрых учебников для ньюфагов. Часть информации в них устарела, но многие считают, что это компенсируется их большей, по сравнению с современными учебниками, понятностью:
Следует пролистать все перед переходом от лаб к написанию настоящего софта.
Последний пункт есть квинтэссенция ГИБКОСТИ, поэтому стоит прочитать его в любом случае, чтобы охуеть от того, как можно делать:
Автор(ы)
Название
Год
Ссылка
Ален Голуб
Веревка достаточной длины, чтобы выстрелить себе в ногу
Ахтунг!
Предыдущие два раздела дополняют, а не заменяют классические книги о лучших практиках разработки без привязки к конкретному языку (Макконнелл, Uncle Bob, GoF).
Справочники
Наиболее детальные описания языка. Удобно использовать как референс, читать от корки до корки не обязательно:
Q: Я готов начать погроммировать! Куда мне писать код? A:
На этапе написания хэллоуворлдов можно не ебаться с установкой софта, а использовать онлайн-компиляторы: раз, два, три, четыре. Для работы над более серьезными вещами удобнее всего установить какую-нибудь IDE. Ниже приведены несколько хороших вариантов:
Платформа
Название
Описание
Ссылка
Windows
Microsoft™ Visual Studio®
Общепризнанно самая продвинутая и удобная IDE, не имеющая равных по части автодополнения и возможностей отладчика. По ссылкам справа можно скачать бесплатную редакцию последнего выпуска (2015 Community Edition). Кроме того, существуют редакции с расширенными возможностями (Professional и Enterprise). Они стоят сотни денег, но если ты студент вуза, подписанного на Dreamspark Premium, то ты можешь получить их безвоздмездно (то есть даром). Многим новичкам интерфейс студии кажется чересчур сложным, так что обязательно прочти этот гайд, если у тебя возникают проблемы с компиляцией хэллоуворда
Простая, легковесная, кроссплатформенная, швабодная IDE. Менее навороченная, чем студия, но среди бесплатных вне конкуренции. Вероятно, это наилучший вариант для новичка с *nix. Под Windows же требует чуть больше ебли с установкой компилятора MinGW/LLVM
http://codelite.org/, "sudo aptitude install codelite codelite-plugins"
для установки под *nix
Все
CLion
IDE, призванная похоронить Visual Studio пока не особо получается. Она стоит денег, но можно украсть почти не протухшую версию на торрентах или получить бесплатную лицензию на год по скану студбилета, если ты студент. Удобные свистелки и перделки присутствуют. Тормоза и баги присутствуют. Кросплатформенность присутствует
Здесь ты можешь найти все остальные существующие IDE, если ни одна из вышеперечисленных тебе не приглянулась.
Разумеется, установка IDE вовсе не обязательна. Ты можешь использоватьтекстовыйредактор в связке с каким-нибудькомпилятором, выбросить мышку, отрастить бороду и примкнуть к Церкви Святого Столлмана. Но лучше тогда сразу отправляйся в тред сишников, если не хочешь быть обоссанным другими сектантами за использование б-гомерзкого C++.
Q: Не буду я все делать сам! Подавайте сюда софт, который все сделает за меня и подотрет мне жопу! A:
Без проблем:
Статический анализатор, который умеет находить в коде ошибки и неоптимальные места. Швабодный. Есть плагин для Visual Studio
Гугловский фреймворк для автоматизации тестирования
Также не стоит забывать о том, что правильные посоны экономят свое время и нервы, используя мегагодные git и cmake во всех проектах.
Q: Мне надоело писать велосипеды, какие у вас тут популярные либы? Q: Нужно зделать %монструозная_хуйня_нейм, но я обосрался от одной мысли о написании ее с нуля, что же делать? A:
Гляди сюда:
boost
Бесспорно, это самый популярный набор C++-библиотек. Не будет лукавством сказать, что C++ во многом обязан популярностью именно ему. Воистину всеобъемлющий, boost способен удовлетворить твои самые скотские фантазии. В нем есть практически все - от математических функций до сетевых компонент, от инструментов тестирования до динамических типов. Функции для работы с твоей мамашей там тоже есть. Разумеется, все это швабодное и работает на любых платформах. И да, boost является своеобразным инкубатором хороших библиотек, поэтому наиболее удачные из них с большой вероятностью можно будет увидеть после принятия очередного стандарта уже как часть стандартной библиотеки.
Недостатком boost можно считать его размер - более 300 мегабайт. Большинство компонент boost не являются независимыми, и попытка использовать один единственный контейнер обернется фактическим подключением 2/3 всего присутствующего в комплекте. Таким образом, если boost не будет использоваться на полную, лучше юзать другие, более специализированные библиотеки.
Существует швабодный кроссплатформенный фреймворк-надмножество C++ под названием Qt. Он содержит довольно большое количество компонент (для работы с сетью, базами данных, для юнит-тестирования и др.), но киллер-фичей и основным полем его применения являются возможности по разработке графических интерфейсов. Qt сам по себе, как расширение языка, предоставляет для этого более удобные средства, чем обычные библиотеки, а использование специализированных IDE наподобие Qt Creator позволяет в буквальном смысле собирать интерфейсы мышкой, а код писать только по существу.
Тем не менее, использование Qt нельзя однозначно назвать хорошей практикой. Во многом это уже не C++, а другой язык, со своими концепциями и паттернами. Qt-код требует дополнительного препроцессинга при помощи встроенных в Qt утилит (т.н. метаобъектная компиляция), поэтому не получится просто подключить Qt как обычную библиотеку и использовать свой любимый компилятор без дополнительного софта. Нельзя сказать, что это существенное препятствие, но есть мнение, что использование Qt нарушает дух C++, раздувает машинный код и порождает макак-любителей кодогенерации.
В настоящее время основные версии Qt - 4.8 и 5.х, полной обратной совместимости между ними нет как в пистоне, ага.
Несколько специализированных библиотек для часто встречающихся задач. Все — маленькие, быстрые и простые в освоении:
libcurl - сишная библиотека для работы с сетью (существует также curlpp - крестовая обертка для нее, но использовать ее не стоит, ибо разработка заброшена еще в 2009 году)
Q: Я прочитал все вышеперечисленное, теперь я гуру! Что дальше? A:
Дальше переходишь по ссылке, пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.
Ребят, в vs2015 куда делать окошко в котором я мог бы посмотреть сколько у меня ошибок и предупреждений? Раньше там ещё можно было не показывать предупреждения или ошибки чтобы навигация по ним была проще.
Ага. Это опять я (ну тот, который из PHP хочет в C++ перекат сделать). Посоны, а поясните за указатели/ссылки? Что это за хуита, как ими пользоваться и зачем они вообще нужны?
>>696546 Говорят, что можно выделить переменную, а потом сделать еще одну переменную, которая будет ссылкой на ячейку памяти той первой переменной. Типа синоним переменной или типа того. Только я все равно нихуя не понял. Если у меня уже есть переменная, с помощью которой можно попасть в ячейку памяти, зачем мне еще одна переменная, которая в ту же ячейку будет указывать?
Я сделал класс, в нем ссылка на объект этого же класса, как в прошлом треде сказали мне, вот, потом пишу туда через & объект этого класса, потом хочу забрать через *, вроде забираю, пытаюсь из этого объекта взять значение x, а мне выдает не то, что было, а -858993460 . Что такое?
>>696611 Емнип, в пыхе надо писать &tvoyamamka, чтобы оперировать самой переменной, а не ее значением. Вот здесь в точности то же самое, указатель это как бы "сама переменная", ее адрес, а не значение.
>>696611 Вот ты читаешь книгу, тебе там пишут: "Существует хуйнянейм. С ней ты можешь делать то-то, то-то, то-то." Дают простенький пример. И ты задаёшся вопросом: "А зачем мне хуйнянейм в этом примере если и без неё обойтись можно?" Вот в место того что-бы считать себя умнее автора учебника, ты должен запомнить, что хуйнянейм существует, запомнить её особенности, и продолжить читать учебник. В последующих главах, материал и примеры усложняются, автор начинает использовать то, о чём было рассказано в предыдущих. И возможно, тогда, ты поймёшь зачем оно нужно.
>>696401 (OP) Вопрос по MFC. Я правильно понял, что формошлёпствовать можно только добавляя элементы в диалоговые окна и меню, а для того, чтобы добавить кнопку в основное окно надо всегда вписывать её руками?
>>696741 И снова платиновые вредные советы. Уже сколько раз говорилось: указатели могут использоваться для передачи in-out параметров, чтобы не перепутать их со ссылочными обычными. Это, блядь, стандартная практика.
Вот. И что писать на месте "yobject????????" ? Нужно же инициализировать yoba &yobject;, без него не компилится, но как, если объекта класса yoba еще нет и не может быть потому что мы еще даже не сделали класс и конструктор. Поясните ньюфагу.
>>696797 Я придумал, другие объекты класса йоба. То есть в объекте класса йоба содержится ссылка на другой объект класса йоба, понимаешь? Но они-то инициализируются после того как я сделаю класс.
Ананасы, помогайте. Чет мне с этого богомерзкого Qt стало еще пуще припекать, и тперь не из-за всратых тредов его, а из-за GUI, который у него основная пушка. Так вот в чем дело:
public: DLG1(QWidget parent = 0) : QDialog(parent) { ... инициализирую кнопащки и все такое }
}
Так вот, стоит мне вызвать слот CLS1::kickMe так у меня сразу всирается Q_ASSERT_X о том, что я не могу вызывать виджеты из левых тредов. Но я блять ничего не трогал, терды не перемещал. Когда запускаю в релизе, периодически окошко-таки повяляется, но отрисовывается по-инвалидски, в других случаях просто зависает (спасибо Q_ASSERT_X, который делает эту хуйню). Что делать, посоны, ума не приложу
>Вот эта хуйня прокатила, но мне не нравится наличие такого костыля. В чем тут проблема, может быть объяснишь? > invokemethod Не вышло, то же говно выдает А мне кажется, что ты пиздишь. Потому что сигналы-слоты работают через invokemethod.
Как вызывал то?
>Да у меня в наследство от прошлого досталась программа, изобилующая std::vector/list ... - это тоже плохо? Лично я в Qt-коде никогда их не использовал. Вектор/Лист еще похуй, (хотя QList уж точно std::list'у за щеку по удобству накидает), а вот сравнивать std::set и QSet без припадков истерического смеха уже невозможно.
>>696884 Таки вот и не вышел этот invokemethod, даже когда я в своем CLS1 его определил слотом.
Пришлось у класса (пусть будет A), из которого вызывается CLS1::kickMe делать сигнал A::someSig, связывать его с CLS1::kickMe, и только потом его вызывать (emit'ом, естественно)
>Таки вот и не вышел этот invokemethod, даже когда я в своем CLS1 его определил слотом. У меня фейспалм. Ты должен его поставить там, где сейчас делаешь emit. И вызывать kickMe. И делать это в queue-режиме.
>>696803 http://ideone.com/hbwCxA А ссылки указывающие на свой собственный класс оказываются слишком ограничены по функционалу. Ссылка может быть только константной по смыслу, так как наивная реализация оператора присваивания приводит к бесконечному циклу. http://ideone.com/7BOXIa Можно наверное реализовать оператор присваивания через new с размещением, но хуй знает сколько при этом ног может быть отстрелено и нахуй таким заниматься когда есть указатели.
Ананасы, такой вот вопрос. Пишу менеджер текстур и встал вопрос как лучше сделать: Сейчас так Есть мапа в которой ключ это хеш строки имя текстуры, а значение это индекс в векторе. Ну и сам вектор в котором хранятся текстуры.
Но есть ли смысл в этом? Может заменить значение на сами текстуры и обойтись без вектора?
>>696884 >std::set и QSet без припадков истерического смеха уже невозможно
Ты лалка потому что. В STL используется функциональный подход, поэтому для всех операций -, +, |, & есть свои аналоги в алгоритмах. Не то, чтобы это было сильно удобнее чем ООП подход, но неправильно говорить, что в STL контейнеры УРЕЗАННИЕ АХАХА ЛОЛ
>>696941 "функциональный подход" это когда функция передается в качестве параметра другой функции, не неси хуйни. К примеру map или reduce, применительно к крестам - transform.
Операторы позволяют записать все в читаемом виде, вроде (lal1 + lal2 + lal3) & lal4 | lal5. Как будет выглядеть эта хуйня с "std::set_difference" и прочим? Как набор отболного нечитаемого говна.
В Qt то "функциональные функции" никуда не делись, просто там есть выбор. А в STL выбор один - жрать говно.
>>696949 >"функциональный подход" это когда функция передается в качестве параметра другой функции, не неси хуйни Манька, залезь в википедию и почитай, что значит функциональный подход. То, что ты называешь функциональным подходом, на самом деле является функциями высших порядков. В STL данные отделяются от алгоритмов и алгоритмы выполнены в виде функций, работающих с итераторами. Т.е. функции, которые принимают возвращают и данные.
Как я уже сказал, что это не всегда лучше или читаемее, чем ООП версия, но функциональность полностью равнозначная. К тому же, кто мешает написать глобальный оператор? Никто.
>>696977 >То, что ты называешь функциональным подходом, на самом деле является функциями высших порядков. Нет, манька, это ты залезь уж туда и почитай про функциональную парадигму. Если в двух словах - использование map/reduce, отказ от циклов в пользу рекурсии, отказ от переменных, чистые функции, которые зависят только от своих параметров. Короче, типо свести к минимуму побочные эффекты, все зло от них лол.
И в этих "алгоритмах" ничего функционального и близко нет, обычная процедурщина из 80х.
>К тому же, кто мешает написать глобальный оператор? Из-за такой хуйни кресты и превращаются в говно. Вместо того, чтобы заниматься программой, все пишут велосипеды, и у каждого он свой. Нет строк? Что мешает написать свои строки? И вот и имеет char*, std::string, QString - и без сомнения, список этим не исчерпывается.
>>696938 Смотря как ты работаешь с текстурами. Может тебе вообще по именам к ним надо обращаться только при загрузке, когда данные инициализируются. В векторе их имеет смысл хранить только если ты итерацию по ним часто делаешь, и тебе нужна производительность за счет локальности данных. Если нет - то проще выделять память для каждой текстуры отдельно, а в хэшмепе хранить указатели.
>>696987 >использование map/reduce std::transform и std::accumulate в чистом виде. >отказ от циклов в пользу рекурсии Хвостовая рекурсия есть. Обычная рекурсия наносит ущерб производительности и не должна быть основным инструментом в крестах. >отказ от переменных Функции из одного return'а никто не отменял. >чистые функции Хочешь чистые функции - пишешь чистые. Никто насильно тебе побочных эффектов не напихает за щеку.
Серьезно, функциональщики-евангелисты, мечтающие сделать из крестов лиспохаскель, запретить и не пущать - это было ново лет пять назад. Сейчас уже даже самые упоротые даунята остыли от хайпа и смекнули, что крайности вредны. Задача крестов - не собезъянничать %языкнейм, а предоставить как можно больше средств и сделать их максимально удобными и непротиворечивыми. Все остальное на совести погроммиста.
>>697033 > А если кто пишет велосипеды - это его проблемы, а не языка. Нет, это проблема языка (точнее, его стандартной библиотеки). Она не предоставляет строки, удовлетворяющие всех.
Почему-то этот тред очень медленно грузится в двачбраузере от vortexwolf'a
Котаны, в чем приемущество использования функций atol, atof, atoi и т.п. перед sscanf при парсинге текстовых протоколов? Смотрю - в программах под микропроцессоры везде только так и делается.
>>697137 >пошел нахуй, фанбой >мама, мама, кругом фанбои плюсов!11 памахи!11 Да, плюсы говно. Но не потому, что там нельзя написать unsigned T в шаблоне.
>>697097 > у дурачка сломался мозг из-за типа состоящего из двух слов Ты не можешь написать "unsigned short/int govno" ты можешь написать или "unsigned short govno" или "unsigned int govno" это два разных типа, имена которых состоят из двух слов.
так же ты можешь написать unsigned unsigned unsigned int govno; и конпелятор схавает. т.е unsigned в говне плюс ведет себя как qualifier, но qualifier-ом не является.
каким образом там окажется флоат если я планирую передавать только целочисленные типы? и кто мешает конпелятору выдать ошибку во время инстанцирования щаблона.
Есть один класс. Это компонента связности графа. Но не обычная, а такая, что каждая вершина этой компоненты соединена рёбрами со всеми остальными вершинами в этой компоненте. А значит новое ребро добавить нельзя. В классе есть int количество вершин и метод которые возвращает количество ребер. Нужно переопределить операцию +=. Так чтобы можно было объединить оба компонента и он ещё вернул количество ребер которое нужно добавить в компоненту чтобы та получилась завершённой или как такие называются. То есть было бы красиво делать вот так int ans=(a+=b).
>>697203 >Ты забыл про wstring и QByteArray Можно много ещё чего вспомнить, всякие NSSring, CString. Он написал " без сомнения, список этим не исчерпывается."
>>697203 >У D толковые шаблоны. Можно там глянуть. Ни в D ни в Rust нету модификатора unsigned, там беззнаковые типы начинаются с u (uint, ushort в D и u32, u16 и u8 в расте).
Такое говно пройдёт разве что с текстовыми макросами. Я вот серьёзно не могу понять, нахуй так пердолится если можно просто передать значение нужного типа.
Хотя в вышеперечисленные языки-то хоть завезли контракты и трейты, а семнадцатый стандарт говорит пирдольтись))))
Аноны из индустрии, что это за пидорская хуита D и Rust(никакого стильного названия)? Собсссно вопрос в том, как продакшн смотрит на этих друзей? Какие преимущества/недостатки перед крестом ИРЛ?
>>697203 > Ты забыл про wstring и QByteArray :3 А еще я забыл cv::String
Также можно посчитать количество "умных указателей", лол. std::shared_ptr, QSharedPointer, cv::Ptr, у буста вроде были... Еще кто вспомнит/назовет?
Та же хуйня с потоками, сигналслотами.... да чем угодно.
Вот и выходит, что чтобы писать на крестах нужно ебаться с велосипедами, а не решать задачу. И велосипедов овер9000 - то, что ты написал на крестах, другой уже хуй прочтет.
Есть структура с различными полями. Теперь вопрос, возможно ли, чтобы на каждом новом цикле менялись поля у структуры? Поясняю, есть struct User { string a, string b, string c}, есть некий цикл через for { что-то делается + User.a = smth }. То есть, чтобы уже на следующей итерации было поле не a, а уже b.
>>697547 В свое оправдание сразу хочу сказать, что с крестами знаком буквально час. В текстовом файле в строчку записана информация: ФИО, дата рождения и еще пара пунктов. Я строку кусочно парсю и хочу сразу же на итерации закидывать в соответствующее поле в структуре.
>>697597 Геттер с нормальным понятным именем. А вообще ты хуйню какую-то делаешь. Если ты уже сделал класс который соотвествует компоненте связности которая сама по себе является полным графом, то это следует понимать как инвариант (иначе это обычный класс для хранения подграфов). Твои объекты класса всегда должны быть полными графами, следовательно когда ты выполняешь какое-то действие которое нарушает инвариант ты должен его тут же востановить. Если ты реализуешь operator+= который соеденияет две компоненты связности, то прямо в том же операторе ты должен добавить все недостающие ребра, чтобы сразу после выполнения оператора результатирующий компонент уже был полным графом.
>>697195 В чём смысл? Полный (это так называется) граф задаётся только количеством вершин. Количество рёбер -- просто n(n-1)/2, где n - кол-во вершин. Объединить компоненты -- получится n1+n2, а рёбер надо добавить n1n2. Нахуя тут такой оверинжинирнг, классы-хуяссы, методы.
У меня 2 встречных вопроса: 1) Почему тебя ебёт наличие gc, когда говорится о синтаксисе? Это кресты без костылей, в которых есть всё из 17-го которого все ждали, а не который вышел. 2) Где gc будет реальным ботлнеком в области плюсов? В тех же риалтайм рендерах память не аллоцируется и от крестов там только перегрузка операторов и наследование. Всякую системную хуйню вроде сервера на epoll/kqueue проще и быстрее писать на сях чем на бусте. Остаётся ещё пользовательский софт на Qt.
>>697609 Без класса делал. Где-то сделал ошибку и программа иногда работает неправильно. Теперь хочу с классами. С ними понятнее. Перед сложение нужно ещё их в вектор добавить и отсортировать.
>>697609 >надо добавить n1n2 Точно. Не сразу понял. Их же можно одной функцией считать. А я 3 раза количество рёбер перечитываю когда без классов делал. Щас так попробую. Спасибо.
>>697639 >У оператора new больший функционал чем у malloc Естественно, он же обертка, расширяющая базовый функционал. Но в D, наверняка, можно сделать еще лучше, ведь туда завезли метапрограммирование.
>>697643 Но ведь уже показали овердохуя вещей, которые там можно. Можно юзать малок как в си. Можно юзать аллокаторы как в крестах. Можно юзать подсчет ссылок. Можно блять наконец юзать стандартный ГЦ-шный new.
>>697650 Тоже не понимаю его фанатизма. Кресты сейчас используют только из-за переносимости, количества библиотек и лучшего инструментария, а не каких-то особых качеств языка.
>>697618 >Хотя нахуй я это пишу, ты же фанатик ебаный у которого плюсы единственный инструмент. Лал, зашел в крестотред со своим самоваром и называет всех фанатиками. Фанатик тут только ты.
>>697654 Нет, это ты какой-то недоумок. Дишники по большей части - бывшие/текущие крестовики. Схуяле они не должны сюда заходить? Про пересекающиеся множества учительница по математике в школе не рассказывала еще?
>>697668 При чем здесь стадное мышление? Я потрачу 200+ часов, чтобы хорошо разбираться в этом языке. И что дальше? Нигде в коммерческом софте я это не применю. В некоммерческом - тоже (я обычно не страдаю хуйней по написанию велосипедов и вкладываюсь в существующие проекты)
Так вот, нахуя мне тратить столько времени на это? Мне и так есть что изучать вместо не особо востребованного языка.
>Кресты, по секрету - тоже редко где используют нынче Охуительные истории. Весь фундаментальный софт по типу компиляторов или вебсерверов пишется на C++. Ну или на С.
>>697660 Пусть сидят в своем D треде и обсуждают D там. Хотя, по-моему, человеку который предлагает как замену плюсов язык с GC вообще не стоило бы заходить в /pr/
>>697682 > можно не использовать Исходя только из предоставленых ссылок это довольно смелый вывод. То что ты можешь создать один класс не управляемый GC еще не значит что GC не будет использован рантаймом. Если язык разрабатывался с учетом использования GC то при его отключении часть языка неизбежно отвалится. Откуда мы приходим к тому что язык должен изначально быть спроектирован с учетом опциональности GC. И стандартная библиотека должны быть реализована таким образом чтобы не требовать для своей работы GC. И сторонние библиотеки не должны (опционально) его использовать. Ведь какой смысл создавать неуправляемый GC объект, если при передаче его в какой-то метод сторонней библиотеки она инстанциирует несколько десятков классов управляемых GC. Такое поведение нихуя не похоже на "GC можно не использовать".
>>697703 Дианон чего? У тебя там реальное имя/фамилия в профиле? И если ты не школьник дениска попов, у йоба-разработчик-компиляторов - чего ты боишься дианона? "Йо посоны, он в шланг патчи шлет - го затравим!" - так чтоле?
>>697694 Вот здесь: "По сравнению с D, это кресты - пидорская хуета для любителей сверхжесткой анальной ебли. D - это кресты, сделаные нормально.", ты ничего не написал, ты сделал эмоциональный dаунский наброс, как и положено dауну и бабе.
>>697654 Лал, если бы ты, животное, умело бы читать - увидел бы что изначально вопрос стоял о крестах, потом просто было сравнение и кто-то протёк говном увидев заветные буковки "gc".
>>697677 Просто ответь мне на вопросы из >>697618, gcgovnoistekatel blyat'.
>>697673 >Я потрачу 200+ часов, чтобы хорошо разбираться в этом языке. Если ты знаком с плюсами - тебе нужно посидеть неделюку по часику поковырятся в справочке, чтобы спокойно писать на нём. И да - 200 часов для программирования это вообще нихуя, достаточно каждый день не посмотреть одну лишнюю серию сериальчика/аниме/не скатать в дотку и всё.
.>>697673 >Весь фундаментальный софт по типу компиляторов или вебсерверов пишется на C++. Ну или на С. Вот именно что на C. На C++ написан только шланг с llvm, и кусочки gcc перетаскивают. И написаны они на C++ ибо есть такая мода, писать компиляторы для языков на самих этих языках. Вебсерверы - кругом си, как и остальная системщина. Хайлоад хуйлодыч - си с классами можешь поискать доклад о плюсах с highload++ где челики std::string на char[512] меняли ради 8% ускорения функции. Про рендеры и прочее писал выше.
>>697683 Смешно. В 2020 посмотрим как концепты пошлют нахуй ибо сообщество нипамагло(, макросы будут экспортируемы, а контракты, сеть и прочее пошлют нахуй добавив пару математических фишек с ниебически крутым названием.
>>697693 Попросал для таких же дебилов как ты создан пол года назад, работа идёт, а твой мозг не развивается. Нельзя же сделать gc.disable и чистить когда будет возможность.
Итого: животные, плиз. Все люди как люди, а вы как животные истекаете говном на gc не в силах показать где он вам в конкретно вашей области так МИШАЕТ И СВЕРЛИТ.
>>697709 Я коммичу в буст и ллвм, а ещё я член комитета СтарыхПердуновПлюс (СПП). Пруфов не будет, а то дианон( >>697707 >как и положено dауну Братишка, ну зачем так самокретично( >и бабе Как что-то плохое сказал, шовинист ((((
>>697712 Знаешь, почему туда никто не заходит? Потому что на нем люди просто пишут и не ебутся. А не ссаные студенты/школьники с вопросами "как на крестах сделать элементарнаяхуйнянейм". И не возникают вопросы как не выстрелить себе в ногу, или какой из костыльных велосипедов предпочесть.
>>697708 >Смешно. В 2020 посмотрим как концепты пошлют нахуй ибо сообщество нипамагло(, макросы будут экспортируемы Это же TS, а не следующий стандарт. Оно потому и TS, что рано для 17 и поздно для 20. А вообще твои кукареки уровня гадающей циганки на вокзале.
>>697716 > люди просто пишут и не ебутся И только лопаются когда кто-то посмел замахнутся на священную корову GC, и предположить что возможно у программиста должен быть выбор как писать свою программу, а не делать только так как ему сказал его властелин, ведь властелину лучше знать как правильно делать и что смысла не использовать GC нет.
>>697726 >А вообще твои кукареки уровня гадающей циганки на вокзале. Ну да. Только нам обещали мажорный релиз а после покормили сладким хлебушком.
Зато можно быть уверенным на 9000% что они будут действовать с позиции Абсолютной Обратной Великой Совместимости (с) и как обычно всё будет сделано как велосипед медведя, едущего задом вверх по лестнице.
>>697727 Ну если господа плюсовики хоть раз за тред написали бы что-то объективное а не издавали вскудахи вроде "ГЦ ЕТА ЗЛО ЗАСТРЕЛИТЬ УБИТЬ ФУУУУ", то может всё стало бы куда лучше.
>>697733 > ГЦ ЕТА ЗЛО Кто пишет что GC это зло? Зло - остутсвие выбора. В плюсах можно использовать полностью ручное управление, можно простой refcounting на смартпоинтерах, можно накатить GC (boehm garbage collector, например). У C++ специфическая сфера применения, и для этой сферы само собой разумеется что у программиста должен быть выбор. И предлагать как замену крестам язык с нулевым выбором, потому что властелин решил не использовать GC смысла нет, ну это глупо.
>>697742 > В плюсах можно использовать полностью ручное управление, можно простой refcounting на смартпоинтерах, можно накатить GC (boehm garbage collector, например). Блять! В D тоже все это можно. Просто GC - вариант по умолчанию.
>>697744 В крестах, если ты не используешь GC то он не используется нигде. Из представленых ссылок по D следует только то что ты можешь вручную управлять только своими классами, а рантайм и библиотеки делают что хотят. Это не похоже на дохуя выбор.
>>697742 Да не бывает выбора, язык или изначально дизайнится для работы без GC (C, C++, Rust), или изначально дизайнится для работы с GC (C#, D, Go), и эти два типа языков друг с другом не пересекаются.
D is a systems programming language with support for garbage collection. Usually it is not necessary to free memory explicitly. Just allocate as needed, and the garbage collector will periodically return all unused memory to the pool of available memory.
D also provides the mechanisms to write code where the garbage collector is not involved. More information is provided below.
>>697748 >дизайнится для работы без GC Раст изначально был языком со сборщиком, просто сейчас его выпилили нахуй "до лучших времён и редизайна" они просто поняли, что сишная аудитория gc не воспринимает ни в каком виде, даже если он только поможет им в их задачах. >>697747 >Из представленых ссылок по D следует только то что ты можешь вручную управлять только своими классами Если у тебя есть серьёзное ограничения к требованиям по требуемой мощности выполнения/скорости и gc не подходит - тебе и на плюсах придётся переписывать/писать самому любую нетривиальную задачу, либо использовать си библиотеки вылизанные до байтика а не крестовые велосипеды от любителей вымазать всю память *stream-ами.
>>697756 >вызвал gc.collect и насладился. А в сишечке/++ при твоих условиях пришлось пердолится 2 недели, в ожидании когда же ошибка снова произойдёт и сервер вайпнется нахуй.
>>697750 Тогда ты получишь просто хуевый язык с GC. Самая большая проблема с GC в том, что он "отравляет" код, если твой код течет, то он течет, и далее переиспользовать его уже в проекте "без GC" ты не можешь. Т.е. у тебя возникает код "YobaLanguage который не течет" и "YobaLanguage который течет". И все, язык распался на два диалекта. И 90% библиотечного кода будет течь, потому что программисты народ по умолчанию ленивый. >>697757 >они просто поняли, что сишная аудитория gc не воспринимает ни в каком виде, даже если он только поможет им в их задачах. Ты один-в-один purebasic-кун, который то, что его хуесосят, обясняет тем, что вокруг его одни дебилы. Ну да, вся сишная аудитория - дебилы, один ты такой умный, умеешь сборщиком мусора пользоваться. А раз мы все тут такие дебилы, можешь съебешь в свой тред?
>>697762 >Ты один-в-один purebasic-кун Ты на него со своим искажённым восприятием куда больше похож. Я никому не говорил что кто-то долбоёб, я сказал что кое-кто немножко говноед и мазохист, но к умственным способностям это не относится как и условия на которых мозила начала спонсировать раст :3.
>>697765 Так сказать, что кто-то долбоеб - это недолго, проблема в том, что ты реально считаешь себя умнее сообщества. Таких дебилов полно в общем-то, и ты один из них.
Блядь, у вас тут какой-то параллельный мир с ошибками в C++. За 4 года я могу по пальцам одной руки посчитать, когда появлялись проблемы с циклическими или битыми ссылками. Про память, которая течет, вообще молчу - ни разу не видел этого, потому что пользовался умными указателями. Санитайзеры используются на тестах всегда, так что нефиг загонять про "ты просто не замечаешь".
>>697753 Пример раста как раз показателен. Сначала хотели сделать йоба-язык который и то умеет, и то умеет, и здесь, и этак (что в общем-то всегда бывает среди авторов языков), а к версии 1.0 выяснилось, что gc controlled указатели нахуй не нужны, стд-либа-то задизайнена на работу без GC.
>>697767 Проблема только у тебя и только в твоём манямирке, в котором ты видишь что я считаю себя умнее всех, при том мне за весь тред ни разу никто адекватно не ответил чем именно им мешает гц, лол.
Сходи предложи помощь бомжу-алкашу - он отреагирует как крестовик на сборщик мусора. Кому-то нравится ПРЕВОЗМОГАТЬ - и он считает это единственным верным мировозрением ислам.
>>697769 Историю изменения до 1.0 сходи глянь. Она так задизайнена потому что 3 года назад они отказались от сборки и с тех пор пидорасили всё что попадалось под горячую руку два года подряд.
>>697772 Начиная с DMD 2.067 мусорщик можно вообще выключить нахер. Посмотрел я, что зависит от него - и в принципе все ясно, по сути - new, встроенные массивы и ассоциативные массивы и делегаты.
И непонятно с последним - как юзать делегаты без GC-то?
>>697772 Все эти разговоры хуйня, когда нет наглядных сравнений производительности больших проектов с и без gc. А поскольку никто не будет специально одинаково писать большой проект с gc и без него, то появляется такая благодатная почва для специальных олимпиад.
Но несмотря на это, могу тебе привести косвенный пример-доказательство. Возьмем CLion и QtCreator. Открываем через них какой-нибудь охуительно большой проект, например llvm, GCC или UE4. Начинаем анализ проекта и смотрим на потребление памяти и плавность работы.
Лично для меня вопрос эффективности GC уже снят давно. Я неоднократно видел такие сравнения, которые всегда заканчиваются в пользу native-кода
>>697772 >при том мне за весь тред ни разу никто адекватно не ответил чем именно им мешает гц, лол. С хуя ли перед крестохейтером должен кто-то распинаться в С++-треде? Ты ебаный рак, убивающий его, меня за эти годы на бордах крестохейтеры заебали страшно. Задай вопрос в ньюфаг-треде, я тебе отвечу. В конце концов, я тебе ответил и здесь, но у тебя уже бомбит достаточно, чтобы не воспринимать мои слова: GC мешает тем, что создает 2 диалекта языка, код которых работает в одну сторону: GC-код может использовать не GC-код, а наоборот нельзя - будет память течь. Поэтому есть два варианта, или язык становится неюзабельным говном: >>697772 >Историю изменения до 1.0 сходи глянь.
>>697779 >native-кода Хочу заметить, что тут я сравниваю нативный код с ненативным, т.е. это не совсем корректно и в случае с D результаты могут быть другие.
Но сравнения с нативным кодом с GC нет, так что иди нахуй заранее.
>>697781 Все его возможности основаны на изменении уже построенной языковой модели. А я предлагал сравнивать этапы анализа кода. Вещи они там делают одинаковые.
>>697772 >при том мне за весь тред ни разу никто адекватно не ответил чем именно им мешает гц, лол. С хуя ли перед крестохейтером должен кто-то распинаться в С++-треде? Ты ебаный рак, убивающий его, меня за эти годы на бордах крестохейтеры заебали страшно. Задай вопрос в ньюфаг-треде, я тебе отвечу. В конце концов, я тебе ответил и здесь, но у тебя уже бомбит достаточно, чтобы не воспринимать мои слова: GC мешает тем, что создает 2 диалекта языка, код которых работает в одну сторону: GC-код может использовать не GC-код, а наоборот нельзя - будет память течь. Поэтому есть два варианта, или язык становится неюзабельным говном:
Do not use the array append ( ~= ) operator, or use the .length property to enlarge an array that has already been allocated. These rely on GC to free the old array if it has to be reallocated, since there may be aliasing to it somewhere else in the program. Do not use builtin associative arrays. The only way to free these is by GC. Most of Phobos and, I believe, Tango, were designed with the assumption that garbage collection is present. Functions in these libraries may leak memory horribly if used w/o GC. Do not use D2 closures with GC disabled. (Not that you would anyway, for a game.)
Или же в языке GC становится переусложением, которое выпиливают:
This has not, however, been the case in practice. In reality, since the libraries all use owning pointers (~), Rust programmers have to learn them quickly anyhow. And once Rust programmers learn how to use ~ effectively, they quickly find @ relegated to a marginal role, if it’s used at all. ~ has so many advantages: deterministic allocation and destruction, interaction with the standard library, freedom from GC marking pauses, simpler semantics, appendability where vectors and strings are concerned, and sendability across tasks.
Вот и все. И по этой причине ни Boehm, ни C++/CLI не взлетели - ну кому нахуй нужен C++/CLI код, не совместимый в будущем с С++, когда есть C#. И D не взлетел ровно по этой же причине.
>>697775 >И непонятно с последним - как юзать делегаты без GC-то? Заменять тип на alias и писать всё побочками, либо залезть в анус и выделять память маллоком, перемещать её memmove и вызывать как (*hui)(). >>697779 >Возьмем CLion и QtCreator. 1. Второй делает сасай по работе с кодом и не только, причём раз 10; 2. Сравнивать жяву с нативным языком конечно гениально. Особенно в задачах вроде парсинга, когда она не может обойти массив без проверок и тд., так что там ботлнек далеко не в gc (он может произойти только если настроить clion на несколько гб оперативки, которая будет сканироваться вчено). >Я неоднократно видел такие сравнения, которые всегда заканчиваются в пользу native-кода А я неоднократно видел баги и няшности вроде фрагментации кучи, особенно с распространением смартпоинтеров. Бывает, чо. >>697783 >С хуя ли перед крестохейтером должен кто-то распинаться в С++-треде? Наверно потому что я не хейтер внезапно действующий плюсовик, а пытаюсь получить ответ. >Ты ебаный рак Лан даун) >Поэтому есть два варианта, или язык становится неюзабельным говном: Про то, что это можно разделить в отдельные бинарники и тд мы не слышали, ну ладно, ты, даун всё равно читать не умеешь.
>>697792 >Наверно потому что я не хейтер внезапно действующий плюсовик, а пытаюсь получить ответ. А ты думаешь мало хейтеров, получающих деньги за кресты? Это самая днищенская порода людей: кресты они ненавидят, но профессиональный скилл слишком низкий, чтобы зарабатывать деньги тем, что они любят. В итоге вместо роста скилла происходит отравление окружающей действительности миазмами своего лузерства. >Про то, что это можно разделить в отдельные бинарники и тд мы не слышали, ну ладно, ты, даун всё равно читать не умеешь. Так так, ну-ка поподробнее. И как ты между этими бинарниками будешь общаться, через RPC что ли?
>>697796 >Так так, ну-ка поподробнее. И как ты между этими бинарниками будешь общаться, через RPC что ли? Загружу как динамическую библиотеку или запущу с нужными параметрами или воспользуюсь одним из 9000 способов межпроцессного взаимодействия вроде пайпов или общей памяти. Всё лучше и быстрее пишется, чем пихать 2 разных диалекта языка в один анус и сидеть с отладчиком на простате. >кресты они ненавидят Умозаключение о ненависти после того, как я сказал что есть что-то лучше? Ещё один господин-манямирок. >но профессиональный скилл слишком низкий, чтобы зарабатывать деньги тем, что они любят Эх. Прозвучало ахуенно, но тупо.
>>697799 >Загружу как динамическую библиотеку Ну да, ты это имел в виду. Динамические библиотеки - это просто динамически прилинкованный код, который с точки зрения языка мало отличается от статически прилинкованного. И оно здесь тебе ничем не поможет. RPC - поможет, только здесь возникает вопрос, нахуя мне D, когда у меня есть C++, в котором любая (любая) фича языка и элемент стандартной библиотеки работает без GC без всяких компромиссов (включая std::function, например), и, допустим, один из милларда управляемых языков с толстым рантаймом и батарейками - от пайтона до Java? >Умозаключение о ненависти после того, как я сказал что есть что-то лучше? "Сходи предложи помощь бомжу-алкашу - он отреагирует как крестовик на сборщик мусора.". Себя ты крестовиком не считаешь, ты оппонируешь крестовикам. Потому что ты сам - dаун, который вынужден пользоваться крестами, ведь деньги-то за D платить не будут.
>>697792 >няшности вроде фрагментации кучи Как там в 2007? Если ты встречаешься с такой проблемой сейчас, то ты должен использовать кастомные аллокаторы by design. Проблема высосана из пальца.
>1. Второй делает сасай по работе с кодом и не только, причём раз 10; >2. Сравнивать жяву с нативным языком конечно гениально. Как я уже писал выше: - возможности работы с кодом на этапе парса ничего не решают. - принеси сравнение нативного gc-языка с просто нативным и тогда поговорим. Ах да, никто же не написал крупного проекта на нативном gc-языке. Забыл, прости.
>>697817 >работает без GC без всяких компромиссов (включая std::function, например) Охуенный пример - std::function срет в кучу если замыкание больше 24 байт. Если ты будешь массово их использовать, производительность у тебя будет хуже, чем со сборщиком, который все убивает за один прием. То же самое с Qt, где ехал пимпл через пимпл. В плане производительности можно топить за метапрограммирование, но тут кресты у ди сосут с причмоками.
>>697817 > включая std::function, например Говно твоя std::function В ди можно ПРОСТО писать вложенные функции, а не создавать over9000 нечитаемого синтаксического шума.
>>697853 std::function - это обертка вокруг лямбда-выражений. Можно легко написать свою реализацию, которая будет работать с памятью, как тебе хочется.
>>697858 Лалка, а поддержку обычных функций ты тоже хочешь писать? Ну удачи, чо. Я написать обертку на std::function, чтобы удобно передавать аллокаторы и не буду ебать себе мозг.
>нахуя мне D, когда у меня есть C++, в котором любая (любая) фича языка и элемент стандартной библиотеки работает без GC без всяких компромиссов (включая std::function, например), и, допустим, один из милларда управляемых языков с толстым рантаймом и батарейками - от пайтона до Java? >А В D У НАС НЕ НУЖЕН STD::FUNCTION У НАС ВСЕ КРАСИВЕНЬКО >Но ведь течь же будет без GC >ИДИОТ ЭТО КРЕСТЫ ТЕКУТ А В D ЕСТЬ GC
Как видно, уровень dауна не позволяет ему следить за дискуссией вообще.
>>697861 Ввиду того, что вас таких двое, я считаю это не случайным совпадением, а статистикой.
>>697817 >И оно здесь тебе ничем не поможет. И почему же? >фича языка и элемент стандартной библиотеки работает без GC без всяких компромиссов А ещё это морально устаревший язык, в котором вместо изменений только добавляют костыли. Хочешь плюсы без легасиговна 40 летней выдержки - бери и пиши на D. >от пайтона до Java Если не хочешь тащить с собой 300мб вм, получасового прогрева и убивать нахуй производительность/оперативку. Алсо, я бы посмотрел как ты интерфейсить между друг другом их будешь, особенно когда нужно сделать вызов из плюсов в жяву, а не наоборот. >>697817 >Себя ты крестовиком не считаешь, ты оппонируешь крестовикам. Нет, я просто не фанатик как ты. Ты кстати идеально подошёл бы под эту картину, как и 4/5 всех плюсовиков - ничего УБИРПИРФОРМАНСНОГО не пишут, но срут кровью от двух букв одной аббревиатуры. Сказали что синтаксис лучше - говорят сами себе ГЦ и срут кровью. Слышат попытки дискутировать как человеки а не животные - срут кровью на предложившего, он не из их стаи, хотя говорит на их языке. >Потому что ты сам - dаун Самое топовое оскорбление, чем больше повторяешь - тем смишнее. Четыре десятка айкью видимо, простора для размышления не дают. >>697818 >возможности работы с кодом на этапе парса ничего не решают. Зато решает что на яве банально объекты толще и всё работает через вм, лол. Когда в qtcreator завезут хотя бы анализ кода на лету (который в лионе не хуже чем в студии, которая кстати почти не лагает) напиши это ещё разок что лион кококо лагаит, а не сравнивай хуй с пальцем. >Проблема высосана из пальца. Ну ты иди, создай массив с умными указателями. Позавидуешь скорости питона. И тебя никакой jemalloc в такой ситуации не спасёт.
>>697879 >Зато решает что на яве банально объекты толще и всё работает через вм, лол. >... Ты тупая мразь, я сказал, что сравнение некорректно, еще до того, как ты начал свое кукареку. Повторю для тебя-жопочтетца еще раз: неси сравнение GC-native с native и тогда побеседуем.
>Ну ты иди, создай массив с умными указателями. И? Что произойдет-то? Если объектов мало - похуй. Если объектов много и они помещаются в оперативку - похуй. Если объектов так много, что вылетает bad_alloc, то а хуле ты хотел-то? Юзай пулл с кастомным распределением памяти.
>>697889 >И? Что произойдет-то? Почитай что такое фрагментация памяти. И подумай что будет когда хотя бы треть из них удалится. >Если объектов так много То что будет когда у каждого СВОЙ счётчик? >Ты тупая мразь, я сказал, что сравнение некорректно, еще до того, как ты начал свое кукареку. Сам сравнил и сам обосрался, ок, вопросов нету. >Повторю для тебя-жопочтетца еще раз: неси сравнение GC-native с native и тогда побеседуем. Вопрос: как их сравнивать, если одинаковые стратегии работы с памятью использовать некорректно?
>>697889 >Если объектов мало - похуй Как минимум GC убьет их сразу, а со смартпойнтерами - по одиночке. А в каждом объекте может тоже быть смартпойнтер на что-то еще.
>>697879 >И почему же? Я написал в предыдущем предложении того же поста. >А ещё это морально устаревший язык, в котором вместо изменений только добавляют костыли. Ты главное повторяй это почаще. Гляжишь, и работа появится, и D-тред дойдет до бамплимита 26 раз. >Хочешь плюсы без легасиговна 40 летней выдержки - бери и пиши на D. Я лучше Scala возьму, на ней хоть работа есть, а общего с С++ примерно столько же. Ну или C# с await/async и linq. >Нет, я просто не фанатик как ты. Это я что ли пришел в D-тред и стал нахваливать С++? В чем заключается мой фанатизм? Я отлично знаю достоинства и недостатки С++, и так же знаю, что отсутствие GC - это его killer feature, а никак не наоборот. >Ты кстати идеально подошёл бы под эту картину, как и 4/5 всех плюсовиков - ничего УБИРПИРФОРМАНСНОГО не пишут, но срут кровью от двух букв одной аббревиатуры. На С++ я пишу только уберперформанс (мой софт один из самых быстрых в мире на рынке), но с чего ты взял, что я пишу только на С++? Я много на чем пишу, выбирая язык под задачу, у D задач нет, для языка с GC он очень отстал от жизни, без GC он превращается даже не в С++, а в plain C.
>>697899 >Почитай что такое фрагментация памяти. И подумай что будет когда хотя бы треть из них удалится. Повторяю для аутистов: - Если объектов мало - похуй.(мало памяти теряется) - Если объектов много и они помещаются в оперативку - похуй. (либо потери памяти малые, либо paging устранит последствия фрагментации, либо не устранит и потери большие, тогда см. пункт 3) - Если объектов так много, что либо тебе не похуй на потери памяти, либо ее уже тупо нет, то юзай пулл с кастомным распределением памяти. Дефрагментирующие процедуры GC тебя в этом случае все равно будут неприемлемы.
>Вопрос: как их сравнивать, если одинаковые стратегии работы с памятью использовать некорректно? Щито? Тебе говорят, что GC гарантированно увеличивает расход памяти и делает паузы в работе программы из-за очистки или дефрагментации by design. А ты отвечаешь, что все хуйня, GC очень редко делает программу медленнее и все такое. На что у меня вопрос: где найти такую программу на native с GC, которая будет работать хотя бы сопоставимо с обычным native языком?
>>697907 >О фрагментации надо заботиться, когда у тебя объекты больше страницы. Точнее, когда будет много страниц, которые только немного заполнены. А если пустые промежутки в фрагментированной виртуальной памяти будут давать пустые страницы, то реальный расход памяти будет сопоставим с логическим. Новый блок памяти будет просто выделен в другой части адресного пространства. Слава б-гу, что адресное пространство 64-битное
>>697939 Я не пойму, при чем страницы. Пул это просто большой кусок памяти. Если объект не влезает, можно увеличить пул. Но страницы-то здесь причем? Они как и раньше служат для поддержки многоуровневой памяти. И как свойство - некоторые проблемы фрагментации виртуальной памяти могут быть устранены.
>>697911 >Я написал в предыдущем предложении того же поста. Хуйню написал. >Гляжишь, и работа появится, и D-тред дойдет до бамплимита 26 раз. А ещё на TIOBE в топе висят языки вроде дэльфи, перла и бэйсика, очень показательно показательно. >на ней хоть работа есть 1 контора на всё СНГ? Особенно много работы на ней будет после того, как её спонсор отмежевался от неё и направился н жяву. >а общего с С++ примерно столько же Сколько? Нихуя? Ехал воид имплицит через имплицит? Ты на самый главный вопрос не ответил: >Если не хочешь тащить с собой 300мб вм, получасового прогрева и убивать нахуй производительность/оперативку. >Алсо, я бы посмотрел как ты интерфейсить между друг другом их будешь, особенно когда нужно сделать вызов из плюсов в жяву, а не наоборот. >На С++ я пишу только уберперформанс Пропруфай чтоле. Хоть направление скажи. >отсутствие GC - это его killer feature >без GC он превращается даже не в С++, а в plain C. Самое весёлое в том, что весь самый быстрый код на плюсах это няшная обёрнутая классами, а самый производительный и фундаментальный софт пишется на ней. Плюсы были неплохи лет 20 назад, когда альтернативы не было, сейчас они слишком высокоуровенны и слишком низкоуровенны одновременно благодаря неспешности старых пердунов. >>697916 >А ты отвечаешь, что все хуйня, GC очень редко делает программу медленнее и все такое. Учебник по русскому языку там -> google.com >где найти такую программу на native с GC, которая будет работать хотя бы сопоставимо с обычным native языком? Любой микросервис на Gовне, хз что ещё тебе сказать из реального софта. Иди скорость компиляции dmd посравнивай там с любым плюсовым компилятором, лол.
>>697945 Пулы растут постранично. Страницы, отведенные под пулы тоже могут фрагментироваться, но очень медленно. Поэтому пока объекты влезают в пул, фрагментация минимальна. Если объект не влезает в пул, аллокатор выделяет ему нужное количество страниц вне пула. При его освобождении (если заняты следующие за ним адреса), образуется дыра в адресном пространстве, которая может быть занята только объектом меньшего размера. При большом количестве таких дыр память фрагментируется - свободная память есть, но кусочки ее слишком маленькие, что там разместить объект.
>>697879 >Хочешь плюсы без легасиговна 40 летней выдержки - бери и пиши на D. Ну да, жаль только что оптимизатора не завезли. И либ. И из-за GC нельзя писать системы реального времени (надеюсь понятно почему?). А так все хорошо, язык будущего, который уже 10 лет на месте стоит. Нахуй этот D нужен когда есть Rust? Он в отличае от D действительно движение в перед. И кстати, не 40 лет, а 30.
>>697947 >А ещё на TIOBE в топе висят языки вроде дэльфи, перла и бэйсика, очень показательно показательно. Да, ты прав, перл и делфи люди используют, некорректное сравнение
>>697947 >Самое весёлое в том, что весь самый быстрый код на плюсах это няшная обёрнутая классами, а самый производительный и фундаментальный софт пишется на ней. Ну это же наглый пиздеж, не стыдно тебе?
>>697965 >Ну да, жаль только что оптимизатора не завезли. Сторонние компиляторы с этим прекрасно справляются будто он тебе чем-то поможет где-то кроме какого нибудь рендера. >И либ. У вас буст компилятор уронил. Ой, то есть, в кэш процессора нагенерированное им говно не пролезло. >И из-за GC нельзя писать системы реального времени У местных GC головного мозга, и каждая задача должна работать в риалтайме, оно понятно. Только все такие системы пишутся на си, ой. >>697965 > Нахуй этот D нужен когда есть Rust? Он в отличае от D действительно движение в перед. Движение вперёд в плане "не дать макаке выебать байтики неаккуратно". Это замена сишечке, слишком низкоуровенно чтобы ставить в одну шеренгу с D. >Да, ты прав, перл и делфи люди используют, некорректное сравнение Легаси, как и плюсы. Как в коде, так и в голове. >Ну это же наглый пиздеж, не стыдно тебе? Ну ты пропруфай обратное, обоссы мудака.
>>697965 >Ну да, жаль только что оптимизатора не завезли. >>697979 >У вас буст компилятор уронил. Ой, то есть, в кэш процессора нагенерированное им говно не пролезло. Сюда надо ещё доклад швитого отца Александерску о том, как с ничестивым инлайнингом боролся покуда кодило-то не намокло.
Посоны, писал тут код для себя - и нате вам, не запускайте свою программу. Похоже, что я с копирующим конструктором что-то напортачил, но он-то вроде есть: #include <unordered_set> #include <iostream> #include <string> #include <vector> #include <algorithm> #include <iterator>
class Comparable { public: int _weight; std::string _name; std::string _surname;
>>697947 >Любой микросервис на Gовне, хз что ещё тебе сказать из реального софта. >микросервис >микро >реальный софт Ох лол. Может еще сортировочку посоветуешь сравнивать?
В целом, ты уже расписался в том, что не можешь доказать свои кукареки о невероятной эффективности GC в реальной жизни: >хз что ещё тебе сказать из реального софта.
Вывод: не создано ни одного крупного проекта на нативном языке в GC. А GC-бляди все наяривают на свои gc-языки без ниши. Найс.
>>697991 >Вывод: не создано ни одного крупного проекта на нативном языке в GC. А GC-бляди все наяривают на свои gc-языки без ниши. Найс. Докер на говне ещё. Чё-то никто не жалуется, только ты вскудахтываешь будто пнули под жёпу.
>>698017 >Мой список А где список-то? Ты назови хоть один большой, высокопроизводительный проект на go или d. Их же просто нет. Все серьезное дерьмо пишут на C или C++.
>>697947 >Хуйню написал. Просто с каждый постом мне все меньше охота тебе что-то разжевывать. Ну если ты не понимаешь, что такое динамическая библиотека, что мне, лекцию тебе читать? >А ещё на TIOBE в топе висят языки вроде дэльфи, перла и бэйсика, очень показательно показательно. Делфи-треда в /pr/ нет, а С++ - есть, потому что это актуальный и очень полезный язык, изучение которого окупится сторицей. У D же есть пара фанбоев, которым настолько скучно, что они тралят С++-тред. >1 контора на всё СНГ? Она хотя бы есть, в отличие от работодателей на D. Хотя не знаю, зачем тебе так рынок СНГ принципиален. >Сколько? Нихуя? Exactly. Как и у D. >Пропруфай чтоле. Хоть направление скажи. Я на анонимной борде, избавь меня от этого мерянья хуйцами своего авторитета. Я предположений от твоей личности не делаю, твоя дурь видна из твоих постов, но ты почему-то о моей - делаешь, и любые твои промахи показывают больше о тебе, чем обо мне. Последнее, что я написал (вчера) - это GPU-контейнер, который умеет swap'иться в CPU память при переполнении GPU, по определенной стратегии. Это уберперформанс, и D здесь не пришей к пизде рукав. >Самое весёлое в том, что весь самый быстрый код на плюсах это няшная обёрнутая классами, а самый производительный и фундаментальный софт пишется на ней. Типичный баттхерт неосилятора, который я слышу уже много лет. К реальности не имеет никакого отношения, просто передается неосиляторами из уст в уста. >Плюсы были неплохи лет 20 назад, когда альтернативы не было, сейчас они слишком высокоуровенны и слишком низкоуровенны одновременно благодаря неспешности старых пердунов. Ну вот опять же, вместо того, чтобы слушать мужиков с опытом программирования больше, чем тебе лет, ты уверен, что ты самый умный и понимаешь в программировании хоть что-то. И ты еще смеешь кого-то фанатиками называть.
>Ты на самый главный вопрос не ответил: >>Если не хочешь тащить с собой 300мб вм, получасового прогрева и убивать нахуй производительность/оперативку. Да я давно понял, что D метит в нишу Go - легкие микросервисы без ВМ для дешевых инстансов виртуальных машин (в докере, например). Только, вот какая беда, у Go он сосет тоже, причем по-своему. Да и юзкейс это редкий. Ну и в любом случае это оффтоп. Мне на данный момент важно, что нишу С++ dlang не покрывает вообще никак.
>>698028 Ты не понял. Старый софт на С++ (которому больше 2-х лет) - это говнолегаси. Новый софт на С++ - это исключения, написанные дебилами. Старый софт на С - это няшный софт, которым все пользуются. Новый софт на С - это СМОТРИТЕ ВСЕ ВОТ ЭТО С А НЕ С++. Самое забавное, что у любого крестохейтера всегда к этому сводится, даже если он программирует на лиспе, c#, теперь вот D.
>>698040 Перегрузка cast оператора. Будет вызываться в этих случаях: uint32 mamka = foo; int mamka = foo; bool mamka = foo; double mamka = foo;(sic!) Т.е. везде где нужен либо uint32, либо где возможно неявное преобразование из этого типа.
>>697618 Нет, я просто не могу осилить D, пытаюсь временами и нравится. Но потом натыкаюсь на какую-то мелкую проблему и бросаю. Опять же, от библиотек сторонних глаза разбегаются. Хочу следующий проект на D начать. Аллокаторы вроде то ли дописывают еще, то ли только дописали. Спасибо, гляну более пристально. Молодые вы... Вам всё легко.
>>697694 Спасибо, пояснили. Вы, анончики, выяснили, что главным отличием является GC, но противоречиво вышло. Алсо, что с внутренними механизмами ООП между C++/D?
>>697768 Двачую этого. Не используя явную аллокацию(new, placement-new), все проблемы внезапно проходят. Если же очень нужно перфоманса ради радотать с памятью руками, то создаёшь отдельный объект/оборачиваешь стандартными поинтерами. Никаких вроблем и GC не нужен.
>>698139 Более того, это единственный правильный путь. Тягать new/delete не в конструкторе означает то, что код будет течь при исключениях. Просто у каждого неосилятора в программе сплошные циклические графы всего со всем, да еще и в многопоточной среде с shared state.
>>698195 Боже, серьёзно, если тебе нужна библиотека http клиента даже не смотри в сторону asio. Это оверархитектурнутое говно - для клиентской части слишком низкоуровенно, для серверной - медленно и перегруженно.
>>698236 А что можно использовать? Я там нагуглил пару вроде простеньких библиотек, но они сходу не скомпилились так как сраная винда, еще и под mingw, так что я их дропнул. У меня маленькая утилитка для личного пользования, она дергает гугл транслейт. Я изначально сделал на винсокетах чтобы по-быстрому. Все было нормально, пока я не решил с этим ебучим юникодом связаться. Но, в принципе, я уже разобрался, там юникод в utf8 перегоняется и через percent encoding отдается.
>>698184 лоло, буст в наше время _уже_ стандарт стандарт по факту во многих конторах за неуважение к бусту расстреливают, а потом разделывают на мясо неугодных
>>698537 Такой ты кек. >стандарт по факту Разве что в конторках с C++98, где без его костылей никуда. >а потом разделывают на мясо неугодных Есть пытка повеселее - посадить этих неверных читать код на бусте, особенно со всеми старыми высерами вроде boost::lambda. >>698300 Casablanca очень приятная, и имеет более высокоуровенный API, посмотри в её сторону.
Помогите с заданиями, пожалуйста. Учу кресты дома сам для себя по книгам, но там задачи слишком примитивные и направлены на закрепление прочитанного и синтаксиса, а хочется каких-нибудь подходящих для новичка задач, не сильно оторванных от реальности.
>>698819 Открываешь любой сайт с задачами и решаешь. Только решай их не как олимпиадные, нормально. По максимуму используй stl. Пиши классы. Реши так задач 25-30. Потом придумаешь проект для себя и пили его.
>>698823 Калькулятор я уже простенький на винформах накидал, надо будет ему функциональности добавить еще. А вот змейку попробую, только как консоль очищать? system() использовать не рекомендуют, а clrscr() из conio.h у меня ошибку при компиляции выдает.
>>699045 Я шарю в крестах на уровне расчёта факториала на этапе компиляции и понимания зачем нужен виртуальный диструктор. Этих знаний точно должно хватить чтобы писать такое. Но я не умею. Что я упустил? Какую книгу прочитать чтобы научиться?
>>699139 А упустил я что? Я ведь понятия не имею с чего начать и как закончить. Может есть где-нибудь блог где чел по шагам подробно расписывал как он какой-нибудь мелкий но полезный проект пилил?
>>699185 Во вот это хочу читать. Давай на примере. И так чтобы код ещё мог прочитать который получился. Чтобы автор пояснял за каждый свой выбор. Почему он сделал так, а не иначе.
>>699235 Да. После страуструпа очень легко читался. Пример с лошадями не понятный т.к. не смазано где он указатели на объекты взял. Хотя в коде написал this так и не пояснив что это. единственный косяк что заметил.
>>699070 В книжках про оси обычно неплохо это описывается (в применении к переключению процессов/механизму страниц/etc). Начни с Таненбаума, а потом глянь там в конце библиографию, если не хватит. Инфа сотка, что там найдутся книги или статьи, где конкретно про диспетчеризацию более подробно.
>>699164 Специально для твоего случая Г-сподь послал годноту в виде книжки Brown, Wilson - The Architecture of Open Source Applications, в двух частях. Там подробно описано, как строятся настоящие приложения, и, главное, почему они строятся именно так.
>>699206 У всех поначалу выходит говно, это не просто нормально, а даже необходимо, чтобы ты потом мог сравнивать и видеть свой прогресс. Если от своего кода годичной давности тебе хочется блевать, то ты на верном пути. А если ты будешь ждать, пока по волшебству возникнет Страуструп, и своим хуем вобьет тебе в жопу сакральный опыт разработки, то ты так и останешься на уровне лаб. Царской дороги нет, знаешь ли.
>>699272 >>698933 >>699271 Блять я придумал как оценить качество треда! Ищем в нём количество благодарностей и вежливостей. Потом ищем в ней количество обзывательств и оскорблений. Ещё надо найти гринтекст. Если текст из него есть в посте на который ответили, то это цитата и игнорим. Иначе это может быть цитата из другого места или оскорбление. Если там есть упоминание мамы или других слов-маяков, то это обзывательство. И ещё можно считать количество удалёных ностов, но сохранённых на архиваче. Тогда можно устроить соревнование между другими тредами или в другой тематике. Это будет здорово. Ну, кто сделает?
>>699275 Я бы вписался в такое. Надо только продумать метрики получше, а то мы же на двачах, тут даже в полезном/сочувственном/мотивирующем посте нет-нет, а маму выебут.
>>699511 1. Можно разбивать нити/доски на тематики LDA или HDP. 2. Посмотреть, что за тематики получились. 3. Проранжировать их по шкале/хорошо плохо. 4. ??????????? 5. Подсунуть новую доску/нить. 6. PROFFFIIFFTFTIFITI!!111!!IiIFIFITIfkzdfsd!!!!!!1!
>>699127 Мало того, что с ней идёт куча лишнего для меня говна, так она просто содержит в себе библиотеку как раз нужную мне которую и так можно найти отдельно. Нахуй так.
>>699516 1) Найти инструмент для анализа данных больше подходящий чем плюсы; 2) Сказать об этом в треде; 3) Проскролить 200 постов о том что ты ДОЛЖИН ЛЮБИТЬ плюсы; 4) Отправится в след за дишниками. Профит.
>>699275 По-твоему самый лучший тред - это такой филиал Stack Overflow, где отвечают на тупые вопросы за спасибо? Но SO уже есть и в нем система настроена лучше (дубликаты банят, студентов с домашками банят, хейтеров минусуют). Борды совсем не об этом, на них отдыхают.
>>699849 Иногда бинды короче и выразительнее. Но вообще рекомендуют использовать лямбды, даже если получается длиннее. К тому же, в C++14 у них няшный capture list запилили.
>>699849 В новых проектах - да. Легаси которое написано с ними легче продолжать компилировать старым комапилятором и писать с биндами, чем пытаться присунуть туда лямбды.
Сап, аноны. Я тут новичок, тащемта не могу в транспонирование матрицы: Есть глобальная static int матрица, ее нужно транспонировать и тут я застрял. Нужно именно транспонировать оригинальную матрицу, не создавая копий всяких, как это сделать?
>>699946 [code lang="cpp"]for (auto i = 0; i < size; ++i) for (auto j = i+1; j<size; ++j) swap (matrix [isize + j], matrix [jsize + i]);[/code]
Это если квадратная. Для произвольной прямоугольной в любом случае будут копии из-за сдвигов, причем в предельном случае с копией единственного элемента будет охуенно избыточная сложность.
Теперь возникла другая проблема, он не правильно сортирует массив. [code]for(int i=1;i<n;i++) for(int j=i;j>0 && a[j-1]>a[j];j--) swap(a[j-1],a[j]); [code]
>>700404 Файловую систему, пара директив компилятора для отключения ворнингов, пара мат. функций, паральльные алгоритмы в STL. Ещё вроде попросал с человеческими кортежами а не ублюдства из stl не отклонили.
>>700458 Сначала capacity 0. запрос на добавление объекта память выделяется (capacity 1) добавляем новый объект в конец запрос на добавление объекта память выделяется (capacity 2) копируем старый объект (вызывается конструктор копирования) старые данные чистим (вызывается деструктор) добавляем новый объект в конец Так?
Как же я зебался двач. Суть проблемы, есть такой класс в Qt, называется QSqlDataBase. При стандартном коннекте с базой данной вылетает ошибка, что драйвера нет нужного.
Что пишу: [code] QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL"); db.setHostName("acidalia"); db.setDatabaseName("customdb"); db.setUserName("mojito"); db.setPassword("J0a1m8"); bool ok = db.open(); [/code]
Ошибка: [code] QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL3 QPSQL QPSQL7 QSqlDatabase: an instance of QCoreApplication is required for loading driver plugins [/code]
Покапавшись с дебагером и в Интернете осознал, что необходимо вручную добавить в соответсвующую папку библиотеку libmysqlclient_r.so.16. После добавления появилась новая ошибка: wrong ELF class: ELFCLASS32
Суть ошибки в том, что библиотеку нужно компилировать 32 битным компилятором, а не 64, который стоит у меня. Так вот, как мне скомпилировать эту библиотеку на Ubuntu с учетом того, что у меня система 64 и Qt стоит тоже 64 битный? Поиск в Интернете дал много информации, но мало практического решения, хелп анон. Блять, я пак с няшной-няшей тебе отдам, если ты поможешь
Почитал про изменение политик лицензирования Qt и понял, что эти ребята теперь не дадут нормально делать софт бесплатно и без смс. Только если ты не будешь распространять свою программу или откроешь пользователям сорсы. Возвращаться на MFC? Покупать за 49 баксов в месяц нет пути.
Открывать тебе придется патчи, которые ты внес в САМ Qt. Если вносил. ЕМНИП, суть этой лицензии - пользователь должен иметь возможность заменить опенсорцные либы по своему усмотрению и не зависеть от того, чего ты внутри них намудрил, так что ты должен обеспечить это. Самый простой способ - динамическая линковка, юзер просто подменит либы на свои.
Открывать саму прогу ты не обязан и никогда не был.
>>700986 > Если коммерческий софт пишу, значит надо коммерческую лицензию, не? Прикинь? Не.
Коммерческую лицензию тебе надо если ты собрался сам Qt менять и не соблюдать LGPL. И если тебе нужны коммерческие плюшки. Например, boot2qt или как он там.
В твоем случае, коммерческая лицензия тебе нахуй не уперлась. Я раньше сетовал на то, что в коммерческой был рендер qml софтварный - из-за его отсутствия в опенсорце приходилось жрать qt quick1. Но сейчас они кучу коммерческой хуйни в опенсорц перевели.
>>700996 >Коммерческую лицензию тебе надо если ты собрался сам Qt менять и не соблюдать LGPL. И если тебе нужны коммерческие плюшки. Например, boot2qt или как он там. Тогда норм.
Сразу к делу. Как в дебаге вижуал студио посмотреть значение переменной, которая инициализируется в последней строчке области видимости? Брейкпоинт на ней - она ещё не инициализирована, шаг вперёд - уже вышла из скоупа. Есть путь адекватнее добавления холостой строки для того, чтобы на ней стояла каретка дебага?
В какой книге лучше всего описана работа с файловыми потоками? Например, мне нужно разобраться, как работает seekg(0, std::ios::end), а на cppreference я вижу только это:
>>701695 Ты не понимаешь, у них все быстро из-за популярности технологий и кучи неофитов, мы же тащим за счет неплохого контента, который привлекает не только студентов которые идут на хуй со своими лабами.
Сап аноны. есть пара вопросов.. 1) я смотрю на С++ как на мощный инструмент круче которого нет. И наверное связываю свое будующее с ним мимо прыщевод/20лвл/гуманитаростудент/технарь в душе/кун но помимо написания программ по курсу С++ за 21*10^3 дней я понимаю что нужно сеч в алгоритмах от стабилизации потоков до алгоритмизации чистых иксов в 4ре строки из которых 2 это >int main() >return -1; // мать его eror
вопрос по первому -- больше годной литературы по этой штуке и по работе с сетями на низком уровне, больно тема интересная 2) коль я хочу обмазаться работой за ничего и елду на какую ide смотреть? мимо смотрел на qt около 5ти месяцев без библиотек qt ща разговор, просто ide ну куйня без задач! смотрел на эклипс -- годно но настраивает проект очнь тонко я так понимаю такая ide не для работы больше а для сольного проекта
вопрос -- какой ide обмазываться чтобы взяли на работу?
3) популярные либы вопрос к бустоебам в С++11 стоит ли? просят ли работодатели больше STL?
зы: с голоду ппц умираю.. умею по сути только писать код по разжеванному в пиздец тз. за плечами 15к строк только. + я не плохой прыщееб на уровне rm -rf / не вводи, а dd if=/dev/zero of=/dev/ada0 попробуй. Может это спасет меня?
>>701739 я погляжу как ты на асме будншь многопоточный рендер писать... кресты это достаточно низкоуровнневый язык чтобы ебнуть массив данных на шинку и порулить ими на внешнем устройстве а не внутри православного сипию/озу. чистый асм нужен почти нигде. разве что при написании ос драйвера к фс и бла бла. но есть граб => чистый асм только для великов
>>701787 Вот именно, что нинужна, по крайней мере в любом kernel mode драйвере они нахуй не упали, когда нужен переносимый ассемблер, с прямым как профиль твоей мамаши поведением.
>>701727 Берешь такой, значит, пишешь на C++ сначала, а потом ДИЗАССЕМБЛИРУЕШЬ и КОПИПАСТИШЬ всю эту срань типа ты такой ВСТАВКУ НАПИСАЛ САМЫЙ УМНЫЙ В КЛАССЕ ПРЕПОД ПОСТАВИЛ 5 И ПОХЛОПАЛ ПО ПЛЕЧУ
>>701321 Джотаттис, пару дней назад просматривал потоки, там заебись написано, с примерам. А вообще этот интерфейс со смещениями еще из C идет, поэтому в C++ обычно такие моменты не объясняют.
>>701844 >Джотаттис Сколько вариантов написания его фамилии я видел. И джосатис, и джосьютис, и теперь джотаттис. Давайте выясним правильное написание и будем использовать его в этом треде.
>>701936 Таблетки принял? Оверхед это лишнее потребление памяти/скорости, а ты кукарекаешь что классы не нужны и лучше жрать байтопортянки. Однако если бы можно было писать йоба-функциональный-высокоуровневый код не теряя в ресурсах, то все бы делали именно так, а за байтоебство ссали на еблет.
>>701942 >Однако если бы можно было писать йоба-функциональный-высокоуровневый код не теряя в ресурсах, то все бы делали именно так, а за байтоебство ссали на еблет. Если ты бы не был таким ебланом, то ты не писал такой хуйни.
>>701924 бля ты пиздец как драйвер пишешь? >#include<boost/dotnet> >begin кудахтахтах; boost::кукареку; end; тебя не говорили что си и кресты и что прога на си/крестах будет 1 -- оптимизированнее 2 -- быстрее 3 -- девелоперы gnu ебашат компилятор чтобы он был охуенней твоих "чистых" masm 4 -- байтоебит на си/крестах онли линковщик и то слабее чем ты наговнишь в MASM своём, сажа тебе
Пахнут ньюфаги ленью и злобой,
В перезвоним-треде пахнет злорадством,
В гитхаботреде - вниманиеблядством.
Слабым рассудком, водою и хлебом
Пахнет макака, живущая вебом,
Сишник смердит красноглазьем ночным,
Пахнет обгвидок стандартом двойным.
R-щик разит дата-майнингом скучным,
От джавабляди прет офисом душным,
Пахнут bash-ниндзя парой витой,
А шарпоебы - пиратской вендой.
Смузи и маффином пахнут рубисты,
Пахнут вчерашним борщом хаскеллисты,
Гоферы пахнут Илюши багетом,
Лисперы... впрочем, не будем об этом.
Свифтеры пахнут спекой сырою,
А 1С-ники - красной икрою,
Густо намазанной на доширак...
Лишь крестобоги не пахнут никак.
Старший брат:
Предыдущий:
TL;DR
Q: Я хочу тотчас вкатиться, а разбираться буду в процессе. Что я должен делать?
Q: Не уверен, что хочу изучать C++. Как мне пощупать его без лишней ебли?
A: Читаешь эту книжку, смотришь упражнения из нее и суешь в онлайн-компилятор. Сообщения компилятора об ошибках копипастишь в гугл, ответы на возникающие у тебя вопросы ищешь в предыдущих тредах, спрашиваешь в этом треде, если не нашел. Если тебя послали на хуй или не ответили, то ты спросил платину, читай предыдущие треды внимательнее.
Памятка ньюфагу
Небольшие фрагменты кода размещай в треде при помощи тега [code] и жабаскрипт-костыля. Для больших фрагментов используй внешние сервисы.
FAQ
Мотивация
Q: Почему стоит использовать именно C++?
A: Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три:
C++ действительно быстрый язык — вместе с C, его прародителем, они с большим отрывом уделывают по скорости все остальные языки высокого уровня. Код на C++, как правило, медленнее аналогичного кода на C приблизительно на 0-20% а в ряде случаев C++ оказывается даже быстрее, причем замедление появляется только при использовании высокоуровневых конструкций (в C++ ты никогда не платишь за то, чего не используешь). Таким образом, если тебе требуется высокопроизводительный код, C++ станет отличным выбором.
C++, являясь одним из наиболее выразительных и мощных языков, позволяет использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментов
простреливания ногирешения задачи. Как следствие, используя C++, ты можешь не думать о том, как обойти искуственные ограничения языка, а беспрепятственно выбрать наиболее подходящие к ситуации средства.C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Q: Но он же давно устарел!
A: Современный C++ весьма далек от языка, которым он был в 1998 году. В настоящее время кресты живее всех живых, их развитие движется семимильными шагами, а новые стандарты принимаются каждые три года, сохраняя при этом полную обратную совместимость с предыдущими. К сожалению, из-за обилия некачественной литературы по С++, в которой игнорируются новые средства языка, бытует мнение о его "несовременности".
Q: Сейчас все пишут на %languagename, а кресты сосут у него!
A: Нужно понимать, что используемый язык должен соответствовать поставленной задаче. Никому не придет в голову писать на C++ скрипты или веб-фронтенд хотя это вполне возможно, но лишь немногие языки могут соперничать с ним по разнообразию решаемых задач.
Q: Хуле тут так сложно? Я открыл учебник, там какой-то ад!
A: Попробуй учебники, изданные после 2011 года, в которых рассматриваются возможности новых стандартов (C++11 и C++14). Эти фичи не только добавили выразительности, но и серьезно упростили жизнь разработчиков. Теперь программировать на C++ стало проще, чем когда-либо! Это не отменяет необходимости прочитать несколько серьезных книжек, чтобы написать на нем что-то годное. Тем не менее, да, C++ это по-настоящему сложный язык. Его никак не получится выучить за 21 день, ну вот совсем никак. Именно высокий порог вхождения повышает твою ценность как специалиста, не позволяя нанять вместо тебя индуса за еду. Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам.
Литература
Q: Окей, я решил вкатиться. Какие же книги мне читать?
A: Специально для тебя аноны /pr собрали уникальную коллекцию отборной литературы по крестам. Только лучшие книги, последние издания, без хуев! Выбирай категорию и обмазывайся:
Для нюфань
Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется:
Кроме того, есть еще пара старых добрых учебников для ньюфагов. Часть информации в них устарела, но многие считают, что это компенсируется их большей, по сравнению с современными учебниками, понятностью:
Best practices
Книги про основные подводные камни для тех, кто осилил предыдущий пункт. Следует пролистать все:
Проектирование
Следует пролистать все перед переходом от лаб к написанию настоящего софта.
Последний пункт есть квинтэссенция ГИБКОСТИ, поэтому стоит прочитать его в любом случае, чтобы охуеть от того, как можно делать:
Ахтунг!
Предыдущие два раздела дополняют, а не заменяют классические книги о лучших практиках разработки без привязки к конкретному языку (Макконнелл, Uncle Bob, GoF).
Справочники
Наиболее детальные описания языка. Удобно использовать как референс, читать от корки до корки не обязательно:
Кроме того, на ангельском доступны стандарты C++11, C++14, а также последняя версия черновика стандарта C++17.
Тонкости языка
Книги для тех, кто возлюбил кресты всей душой и желает углубиться в детали:
Отдельные аспекты
Читать по необходимости:
и других фич последних стандартов
для разработки многопоточных приложений
остальным частям стандартной библиотеки
язык программирования, чтобы ты мог
программировать, пока программируешь"
в ужас даже исходники boost::MPL
на C++. Для его чтения не нужно знать
мертвые языки, в отличие от этого вашего Кнута
https://goo.gl/yDuQgG (часть 5)
Другие обучающие материалы
Q: Я не умею читать.
A: Можешь посмотреть какой-нибудь онлайн-курс: раз, два, три
Q: Не люблю, когда льют воду. Хочу коротких материалов по существу.
A: Вот тебе блоги, факи, референсы и всякое такое:
Софт и библиотеки
Q: Я готов начать погроммировать! Куда мне писать код?
A: На этапе написания хэллоуворлдов можно не ебаться с установкой софта, а использовать онлайн-компиляторы: раз, два, три, четыре. Для работы над более серьезными вещами удобнее всего установить какую-нибудь IDE. Ниже приведены несколько хороших вариантов:
https://goo.gl/WIPW9L (ангельская версия)
"sudo aptitude install codelite codelite-plugins"
для установки под *nix
Здесь ты можешь найти все остальные существующие IDE, если ни одна из вышеперечисленных тебе не приглянулась.
Разумеется, установка IDE вовсе не обязательна. Ты можешь использовать текстовый редактор в связке с каким-нибудь компилятором, выбросить мышку, отрастить бороду и примкнуть к Церкви Святого Столлмана. Но лучше тогда сразу отправляйся в тред сишников, если не хочешь быть обоссанным другими сектантами за использование б-гомерзкого C++.
Q: Не буду я все делать сам! Подавайте сюда софт, который все сделает за меня и подотрет мне жопу!
A: Без проблем:
Также не стоит забывать о том, что правильные посоны экономят свое время и нервы, используя мегагодные git и cmake во всех проектах.
Q: Мне надоело писать велосипеды, какие у вас тут популярные либы?
Q: Нужно зделать %монструозная_хуйня_нейм, но я обосрался от одной мысли о написании ее с нуля, что же делать?
A: Гляди сюда:
boost
Бесспорно, это самый популярный набор C++-библиотек. Не будет лукавством сказать, что C++ во многом обязан популярностью именно ему. Воистину всеобъемлющий, boost способен удовлетворить твои самые скотские фантазии. В нем есть практически все - от математических функций до сетевых компонент, от инструментов тестирования до динамических типов. Функции для работы с твоей мамашей там тоже есть. Разумеется, все это швабодное и работает на любых платформах. И да, boost является своеобразным инкубатором хороших библиотек, поэтому наиболее удачные из них с большой вероятностью можно будет увидеть после принятия очередного стандарта уже как часть стандартной библиотеки.
Недостатком boost можно считать его размер - более 300 мегабайт. Большинство компонент boost не являются независимыми, и попытка использовать один единственный контейнер обернется фактическим подключением 2/3 всего присутствующего в комплекте. Таким образом, если boost не будет использоваться на полную, лучше юзать другие, более специализированные библиотеки.
Литература:
Qt
Существует швабодный кроссплатформенный фреймворк-надмножество C++ под названием Qt. Он содержит довольно большое количество компонент (для работы с сетью, базами данных, для юнит-тестирования и др.), но киллер-фичей и основным полем его применения являются возможности по разработке графических интерфейсов. Qt сам по себе, как расширение языка, предоставляет для этого более удобные средства, чем обычные библиотеки, а использование специализированных IDE наподобие Qt Creator позволяет в буквальном смысле собирать интерфейсы мышкой, а код писать только по существу.
Тем не менее, использование Qt нельзя однозначно назвать хорошей практикой. Во многом это уже не C++, а другой язык, со своими концепциями и паттернами. Qt-код требует дополнительного препроцессинга при помощи встроенных в Qt утилит (т.н. метаобъектная компиляция), поэтому не получится просто подключить Qt как обычную библиотеку и использовать свой любимый компилятор без дополнительного софта. Нельзя сказать, что это существенное препятствие, но есть мнение, что использование Qt нарушает дух C++, раздувает машинный код и порождает макак-любителей кодогенерации.
В настоящее время основные версии Qt - 4.8 и 5.х, полной обратной совместимости между ними нет как в пистоне, ага.
Литература:
https://goo.gl/toUDWc (исходники примеров)
https://goo.gl/qpkZFm (книга) +
https://goo.gl/LIIECh (исходники примеров)
Другие хорошие библиотеки
Несколько специализированных библиотек для часто встречающихся задач. Все — маленькие, быстрые и простые в освоении:
И еще куча библиотек на любой вкус.
Q: Я прочитал все вышеперечисленное, теперь я гуру! Что дальше?
A: Дальше переходишь по ссылке, пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.
Предыдущие треды на архиваче
Старые ненумерованные треды
Отдельные Qt-треды