Глупец! Фреймворков сотни не дадут Senior'а должность, если нет крещенья, Которым к вере истинной ведут!
Без тайн крестов познаешь лишь мученья: Макакинг гостевух из года в год Иль в крудошлепство с Python погруженье.
И всякий раз, листая тот байт-код, Которым обратились твои муки, Юнец-тимлид брезгливо скривит рот.
Так, запоздало вняв моей науке, Ты будешь гнить, как листья под дождем, И на себя в конце наложишь руки.
А перед смертью вспомнишь вновь о том, Что мог, кресты познав, прожить иначе, И, этого желая всем нутром,
Ты от бессилья горького заплачешь.
TL;DR Читаешь https://goo.gl/kVaela , делаешь примеры и суешь в http://ideone.com , ошибки копипастишь в гугл, непонятное ищешь в предыдущих тредах, спрашиваешь в этом треде, если не нашел. Если тебя послали на хуй или не ответили, то ты спросил платину, читай предыдущие треды внимательнее. И прочитай FAQ, расположенный ниже, в нем много полезного.
Унаследованная памятка:
Вопросу по синтаксису идут на хуй. Лабы идут на хуй. "Как мне сделать Х на чистых крестах без библиотек" идут на хуй. Все идут на хуй. Хейтер сосет члены на пару со своей мамашей.
Q:Почему стоит использовать именно C++? A: Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три: + C++ действительно быстрый - по скорости они вместе с C с большим отрывом уделывают любой другой язык. Замедление относительно C находится в районе 0-20% а в ряде случаев C++ оказывается даже быстрее, причем проявляется только при использовании высокоуровневых конструкций (в крестах ты никогда не платишь за то, чего не используешь). + C++ один из наиболее выразительных и мощных языков, позволяющий использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментов простреливания ноги решения задачи. + C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Q:Но он же давно устарел! A: Современный C++ весьма далек от языка, которым он был в 1998 году. В настоящее время кресты живее всех живых, их развитие движется семимильными шагами, а новые стандарты принимаются каждые три года, сохраняя при этом полную обратную совместимость с предыдущими. К сожалению, из-за обилия некачественной литературы по крестам, в которой игнорируются новые средства языка, бытует мнение о его "несовременности".
Q:Сейчас все пишут на %languagename, а кресты сосут у него! A: Нужно понимать, что используемый язык должен соответствовать поставленной задаче. Никому не придет в голову писать на C++ скрипты или веб-фронтенд, но лишь немногие языки могут соперничать с ним по разнообразию решаемых задач.
Q:Окей, я решил вкатиться. Какие же книги мне читать? A: Специально для тебя аноны /pr собрали уникальную коллекцию отборной литературы по крестам. Только лучшие книги, последние издания, без хуев! Выбирай категорию и обмазывайся:
Для нюфань: Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется. Стэнли Липпман, Жози Лажойе и Барбара Му - Язык программирования C++ (2014) - https://goo.gl/kVaela Стивен Прата - Язык программирования C++ (2012) - https://goo.gl/z7kA8u Бьерн Страуструп - Программирование. Принципы и практика использования C++ (2011) - https://goo.gl/nAFUXa
Учимся не писать говнокод: Книги про основные подводные камни для тех, кто осилил предыдущий пункт. Следует пролистать все. Скотт Мейерс - Эффективное использование C++ (2005) - https://goo.gl/wsDXGz Скотт Мейерс - Наиболее эффективное использование C++ (1996) - https://goo.gl/tHa0tO Скотт Мейерс - Эффективный и современный C++ (2015) - https://goo.gl/Im8VYQ Скотт Мейерс - Эффективное использование STL (2002) - https://goo.gl/QtS8Dc Герб Саттер и Андрей Александреску - Стандарты программирования на языке C++ (2005) - https://goo.gl/Cpk4YR
Проектирование: Следует пролистать все перед переходом от лаб к написанию настоящего софта. Последний пункт есть квинтэссенция ГИБКОСТИ, поэтому стоит прочитать его в любом случае, чтобы охуеть от того, как можно делать. Ален Голуб - Веревка достаточной длины, чтобы выстрелить себе в ногу (2001) - https://goo.gl/fBmuxp Джеймс Коплиен - Программирование на C++ (2005) - https://goo.gl/Y1WGdU Андрей Александреску - Современное проектирование на C++ (2002) - https://goo.gl/e1V5BC
Ахтунг! Предыдущие два раздела дополняют, а не заменяют классические книги о лучших практиках разработки без привязки к конкретному языку (Макконнелл, Uncle Bob, GoF).
Тонкости языка (для гурманов): Герб Саттер - Решение сложных задач на C++ (2002) - https://goo.gl/iWaa6S Герб Саттер - Новые сложные задачи на C++ (2004) - https://goo.gl/4nn512
Также для легкого чтения подойдет книжка c историей создания C++: Бьерн Страуструп - Дизайн и эволюция C++ (1994) - https://goo.gl/FqbPwo
Отдельные аспекты: Читать по необходимости. Энтони Уильямс - Параллельное программирование на C++ в действии (2012) - https://goo.gl/qJfBkD Николаи Джоссатис - C++. Стандартная библиотека (2012) - https://goo.gl/PEyiMH Дэвид Абрахамс, Алексей Гуртовой - Шаблонное метапрограммирование на C++ (2009) - https://goo.gl/isSt7j Дэвид Вандевурд, Николаи Джоссатис - Шаблоны C++. Справочник разработчика (2003) - https://goo.gl/0M4NpG Роберт Седжвик - Фундаментальные алгоритмы на C++ (2001) - https://goo.gl/4jwxSl (части 1-4), https://goo.gl/yDuQgG (часть 5)
Q:Хуле тут так сложно? Я открыл учебник, там какой-то ад! A: Попробуй учебники, изданные после 2011 года. Фичи последних стандартов не только добавили выразительности, но и серьезно упростили жизнь разработчиков. Теперь программировать на C++ стало проще, чем когда-либо! Это не отменяет необходимости прочитать несколько серьезных книжек, чтобы написать на нем что-то годное. Тем не менее, да, C++ это по-настоящему сложный язык. Его никак не получится выучить за 21 день, ну вот совсем никак. Именно высокий порог вхождения повышает твою ценность как специалиста, не позволяя нанять вместо тебя индуса за еду. Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам.
Q:Ты охуел? В этих книгах по тысяче страниц! Хочу коротких статей. A: Вот тебе блоги, факи, референсы и всякое такое:
Q:Я готов начать погроммировать! Куда мне писать код? A: Под шиндошс удобно использовать IDE Microsoft™ Visual Studio®. Базовую версию (2015 Community) можно бесплатно скачать отсюда: https://goo.gl/qgAAc6 (русская версия) или https://goo.gl/WIPW9L (ангельская версия). Чтобы начать писать код, нужно запустить Visual Studio, кликнуть "Файл - Создать - Проект - Пустой проект", после создания кликнуть слева правой кнопкой мыши по пункту "Файлы исходного кода", выбрать "Добавить - Создать элемент - Файл C++". Свои хэллоуворлды писать в этот файл, в дальнейшем можно добавить другие файлы и хедеры. Чтобы скомпилировать и запустить проект, нужно нажать "Сборка - Собрать решение", а затем "Отладка - Запуск без отладки".
Под *nix, как правило, уже предустановлен компилятор gcc (если нет, используй sudo aptitude install gcc), так что достаточно сохранить хэллоуворлд, набранный в текстовом редакторе, и выполнить g++ helloworld.cpp и ./a.out. Но удобнее установить какую-нибудь IDE, например, весьма удобную CodeLite (sudo aptitude install codelite codelite-plugins), и работать в ней. Ее также можно использовать и в шиндошс, но тогда сперва придется установить MinGW (http://mingw.org).
Еще у нас есть IDE, призванная похоронить Visual Studio пока не особо получается. Она стоит денег, но можно украсть почти не протухшую версию на торрентах или получить бесплатную лицензию по скану студбилета, если ты студент. Удобные свистелки и перделки присутствуют. Тормоза и баги присутствуют. Кросплатформенность присутствует - https://www.jetbrains.com/clion
Можно также не устанавливать ничего, а запускать свои хэллоуворлды на http://ideone.com, выбрав в левом нижнем углу язык C++14.
Q:Не буду я все делать сам! Подавайте сюда софт, который все сделает за меня и подотрет мне жопу! A: Без проблем:
Q:Мне надоело писать велосипеды, какие у вас тут популярные либы? Q:Нужно зделать %монструозная_хуйня_нейм, но я обосрался от одной мысли о написании ее с нуля, что же делать? A: Гляди сюда:
boost
Бесспорно, это самый популярный набор C++-библиотек. Не будет лукавством сказать, что C++ во многом обязан популярностью именно ему. Воистину всеобъемлющий, boost способен удовлетворить твои самые скотские фантазии. В нем есть практически все - от математических функций до сетевых компонент, от инструментов тестирования до динамических типов. Функции для работы с твоей мамашей там тоже есть. Разумеется, все это швабодное и работает на любых платформах. И да, boost является своеобразным инкубатором хороших библиотек, поэтому наиболее удачные из них с большой вероятностью можно будет увидеть после принятия очередного стандарта уже как часть стандартной библиотеки.
Недостатком boost можно считать его размер - более 300 мегабайт. Большинство компонент boost не являются независимыми, и попытка использовать один единственный контейнер обернется фактическим подключением 2/3 всего присутствующего в комплекте. Таким образом, если boost не будет использоваться на полную, лучше юзать другие, более специализированные библиотеки.
Литература: Ариндам Мукерджи - Learning Boost C++ Libraries (на ангельском) (2015) - https://goo.gl/b0gPN1
Qt
Существует швабодный кроссплатформенный фреймворк-надмножество C++ под названием Qt. Он содержит довольно большое количество компонент (для работы с сетью, базами данных, для юнит-тестирования и др.), но киллер-фичей и основным полем его применения являются возможности по разработке графических интерфейсов. Qt сам по себе, как расширение языка, предоставляет для этого более удобные средства, чем обычные библиотеки, а использование специализированных IDE наподобие Qt Creator позволяет в буквальном смысле собирать интерфейсы мышкой, а код писать только по существу.
Тем не менее, использование Qt нельзя однозначно назвать хорошей практикой. Во многом это уже не C++, а другой язык, со своими концепциями и паттернами. Qt-код требует дополнительного препроцессинга при помощи встроенных в Qt утилит (т.н. метаобъектная компиляция), поэтому не получится просто подключить Qt как обычную библиотеку и использовать свой любимый компилятор без дополнительного софта. Нельзя сказать, что это существенное препятствие, но есть мнение, что использование Qt нарушает дух C++, раздувает машинный код и порождает макак-любителей кодогенерации.
В настоящее время основные версии Qt - 4.8 и 5.х, полной обратной совместимости между ними нет как в пистоне, ага.
Несколько специализированных библиотек для часто встречающихся задач. Все маленькие, быстрые и простые в освоении: libcurl - сишная библиотека для работы с сетью (существует также curlpp - крестовая обертка для нее, но использовать ее не стоит, ибо разработка заброшена еще в 2009 году) - http://curl.haxx.se SFML - работа с графикой и аудио - http://www.sfml-dev.org FLTK - графические интерфейсы - http://fltk.org
Q:Я прочитал все вышеперечисленное, теперь я гуру! Что дальше? A: Дальше переходишь по ссылке http://cppquiz.org/ , пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.
Добавлена подборка проверочных вопросов для мамкиных language lawyer'ов. Добавлена инфа о том, что делать после прочтения материалов из шапки. Книги по проектированию отделены от best practices в самостоятельный пункт. Небольшие дополнения в тексте. Добавлены книги Коплиена и Голуба. Ссылки на архивач пронумерованы.
>Добавлена подборка проверочных вопросов для мамкиных language lawyer'ов. Это и есть ссылка из >инфа о том, что делать после прочтения материалов из шапки. ?
>>632289 Константную ссылку, если параметр не изменятся (только входные данные). Указатель, если в параметре возвращается инфа (например, такое бывает, когда нужно вернуть больше одного объекта, и неудобно все пихать в возвращаемое значение).
>>632289 Если твой параметр не может быть NULL/nullptr, то используй ссылку. И даже констатную ссылку, если возможно. Ссылка на численные типы бесполезна.
>>632313 А здесь, дорогие друзья, мы с вами видим типичного представителя Sishkoblyad Vulgaris. На время уборки клетки его выпустили наружу. Агрессивные повадки и неумелые попытки применить свой опыт в незнакомом окружении - отличительная черта этих неуклюжих зверьков.
https://wiki.qt.io/D-Pointer Разбирался с этим туториалом. Там где Q_D(Label) - схватил ошибку "d_func was not declared in this scope" Рили не гуглится, уже хуй знает что делать. У кого было?
>>632419 НУ БЛЯ ТАМ НеВаЖНО ЧТО ДАЛЬШЕ ТАМ СВИЧИ) Главное инвалид поинтер. Знаешь такую ошибку? Ну free(). Free вызвал. А потом заработало. Что это могло быть?
>>632446 А что ж мне еще, с микроволновкой то на северном полюсе делать? Яйца клал уже туда. И свои тоже. Теперь вот решил делом заняться, а тут такая хрень.
>>631744 (OP) ><устарело> Роберт Лафоре - Объектно-ориентированное программирование в C++ (2004) Котаны, насколько устарело? У меня издание 2006 года (4е издание). Легко читается. Есть ли смысл учить по этой книге а потом добрать знаний по новшествам либо лучше сразу брать новую кригу? эта в бумажном варианте, а читать с монитора ну совсем не круто При этом паралельно смотрю разные видео на тытрубе, кстати.
>>632813 ТЫ так написал что не совсем понятно- С++ лучше не учить или по этой книге лучше не учить? Знаю немного на уровне того что такое переменная, функции, массивы, циклы, немного о том как создавать классы, вообщем самые основы. Ну а по алгоритмам-рекурсия, динамика, сортировки, немного графы. Вообщем все то что можно взять из паскаля, лол.
Кстати, почему если с++ так охуенен, то в перепись-треде, большинство анонов с норм ЗП указали JS и PHP? С плюсами всего пара человек. Цель-хотя бы за пол года устроится на работу.
>>632890 C++ лучше вообще не учить. Работу с большой вероятностью на крестах ты не найдешь - нужны только спецы, джуны на крестах никому не нужны. При том, что "для себя" как язык - дерьмо и для любителей себе в ногу стрелять, плюс писать на них долго.
Существуют потому, что на них невъебенное количество уже написаного софта и библиотек, и все это не выкинуть.
Поскольку кресты невъебенно сложны и полностью их не знает наверное даже труп страуса - ты рискуешь угрохать хуеву тучу времени на их изучения и остаться нахуй никому не нужным.
>>632900 А что лучше вместо крестов из серьёзного программирования? Сишарп, ява? Меня кресты привлекают тем, что они могут работать без дотнета/жабы. Можно запрограммировать даже небо, даже Аллаха!
>>632911 Я не кодил ни на том, ни на этом. Лично я делю их так: сишарп фичастее и лучше как язык, а зато ява без анальной привязки к винде и может в ведроид.
Алсо, если че - яву можно и в бинарь компилить.
А вон на моей работе мы компилили скрипты на си в байткод, лол.
>>632799 Я бы на твоем месте выбрал из трех неустаревших книг, в которых есть последние стандарты. Книги для ньюфагов натурально взаимозаменяемы, а если в выбранной что-то непонятно, то можно моментально посмотреть конкретно это тему в джвух других. В таком режиме очень легко работать, в отличие от хайлевел книжек, которые обычно в единственном варианте, да еще и на ангельском.
>>632913 >сишарп фичастее и лучше как язык До сишарпа его задачу выполнял дэлфи. Сишарп убил дэлфи. Дотнет помог ему в этом. ЕМНИП дотнет и под дэлфи работал. Один детский язык занял место в песочнице другого детского языка. За это он не может быть фичастым и хорошим.
>>632917 Кстаи я нуфаг мечта лет через 30 работать в иностранном вузе и написать свою книгу. Накидайте мне за шёку книжки таких же энтузиастов чтобы я посмотрел какое это говно и отговорить.
>>632900 >нужны только спецы Ну толсто же. Разница только в том, что можно на недельку нырнуть в какой-нибудь пистон и сразу бежать на собеседование, а с крестами придется поработать. Это не запредельно сложно, если у тебя больше 90 пунктов айсикью. >Работу с большой вероятностью на крестах ты не найдешь TIOBE и агрегаторы вакансий а также мой личный опыт с тобой не согласны. В том же гейдеве полно вакансий, например. Другое дело, что требования там выше, чем для крудошлепов, отсюда кукареки про НИПОРАБОТАТЬ. >Существуют потому, что на них невъебенное количество уже написаного софта и библиотек Только одна из причин. Когда-то на фортране было дохуя софта и библиотек, но он успешно вытеснился. Верить, что язык без кучи объективных преимуществ находится в топе только из-за легаси, по меньшей мере наивно.
>>632932 Однажды путник увидел в стороне от дороги, по которой он шел, двух ожесточенно спорящих людей. Заинтересовавшись и подойдя поближе, он услышал, что они спорят о том, что лучше употреблять на завтрак: говно или мочу. Когда спорщики утомились и на минуту замолчали, путник горячо обратился к ним: - Добрые люди! Почему вы ограничиваете выбор пищи столь неприятными на вкус блюдами? Разве не лучше завтракать пшеничной лепешкой и бутылкой вина? - Говна поешь! - воскликнул один из спорщиков и метнул в путника куском засохшего навоза. Второй спорщик расстегнул штаны и помочился на путника.
>>633052 >ве логично и понятно До тех пор, пока до писания на нём не дошёл. Потом ещё полюбишь. И игрища с указателями/ссылками/константами полюбишь, и прочую уб-хуиту вроде негарантированного порядка выполнения аргументов.
>>633060 Поясни, если шаришь, какой уровень должен быть? Что я должен уметь написать? Именно пример задания. Смутно понимаю что на практике должен уметь джуниор ну или хоть стажер.
>>633071 Пиши справочник телефонный или эмулятор файловой системы. Обращай внимание на аккуратность кода, стиль, структуру, тесты. Помни золотое правило: "твой код будет поддерживать маньяк садист, который знает где ты живёшь". Поищи тестовые задания разных компаний. Порешай задачи с hackerrank и codility.
>>633104 Поясни за интернов? Скоро практика, летом если быть точнее. Вот и думаю, сейчас ли пытаться встрять джуном, или подождать произв. практики и разослать резюме по компаниям, где есть возможность прохождения практики. Сложный выбор .-.
>>633136 Встрявай сразу. Так и пиши - молодой толковый, возьмите интерном. но лучше через преподов вкатываться. Ещё всякие "школы/университеты" в конторах, где можно выделиться и попасть в компанию
>>633099 Я бы хотел пойти в графику, так что нет, гейммейкера не скачал. Если с гейдевом не получится, я бы хотел работать в прикладной отрасли, чтобы видеть результат своей работы, а если хватит мозгов, то можно бы и в написание прошивок, железяки мне тоже нравятся.
Ну у меня есть проблемы с TableView. Я написал rowdelegate для него, но не могу сделать так, чтобы между колонками была линия черная. Костылил через rectangle черного цвета после самой ячейки для headerdelegate, оно работает. А для row нет.
с Ардуиной реально хотя бы вьехать и начать писать работающий говнокод под конкретные задачи? Если да - реально ли перейти с Ардуиновских "крестов" на настоящие?
Алсо на моей работке прошлой (текущей нет, дома сычую) мы делали так - паяли контроллеры на базе stm32. Под него была прошивка на крестах, нативная ("Операционка"). И был самописный компилятор своего диалекта сишки в байткод. Сабжевый байткод загружался в контроллер по USB - и там исполнялся операционкой и управлял разными аггрегатами. Получалось мегагодно. Несмотря на то, что контроллеры те были говно в плане надежности (2/3 модулей выбрасывали/перепаивали, платы тоже отбраковывались) - схема такая охуенно удобная и пиздатая. Байткод тот может имполняться или виртуалкой на компе (когда не контроллеры, а промышленный комп какой-то йобой рулит), или как связка планшет на ведроиде/комп на винде/линупсе/ одноплатник для интерфейса оператора и контроллер для управления оборудованием.
Вот купил stm32f4 дискавери и хочу написать все свое, ибо у меня было много претензий.
Програмач, пару лет назад довольно плотно изучал кресты читал Шилдта ( Базовый курс какой-то - 400 стр книга, еще книга этого же чувака Справочник по С/С++ - на 2013г это было последним изданием) и Дейтелов (где с самого начала идут классы). Вроде бы все зыбысы. Изучал ссылки, указатели, массивы, наследование, работу с файлами и т.д. Вообщем, на уровне универских лаб по ПЯВУ знаю норм(которые сдал без особых проблем). Но, блджад, лабы это ведь не все фишки, которые используются в книгах. Где применять всякие виртуальные функции, шаблоны классов etc.?
Вообщем, посоветуйте годных книг (больше 700-800 стр. - нахуй такие книги) с короткими и строгими формулировками как у того же Шилдта и задачников, где можно все от и до опробовать, а то как-то прочитал и забыл к херам, что прочитал, ибо не применял.
>>633560 Нет, свой байткод. У кодера, с которым работал - была голубая мечта использовать таки джабный байткод, а не свой.
Я вот тоже хочу с ним разобраться и компилить таки в джабный. А так - простенькая виртуальная машина, все операции - на стеке. Суть байткода - свой диалект сишки был запилен для кооперативной многозадачности, чтобы не ебаться с синхронизацией и прочей еботой (еще когда контроллеров не было и сабж выполнялся на ПК). Там просто есть CreateTask, а в функциях которые выполняются надо делать Wait() - передать управление следующей задаче. Ну и обязательно эту еботу во всех циклах.
>>633569 НЕХ, которую никто не знает. Это была работа а не джаст фор лулз, главное - слепить по быстрому и чтобы работало, как оно будет работать - никого не ебет.
Мой коллега бывший и словей таких не знает. Он железячник и ненавидит паскаль и сишник, юзает кресты и Qt в режиме "си с классами" и ненавидит все эти жабоскрипты и лямбды с автоматическим выведением типов.
>>633553 Ардуиновские кресты это фактически ядро обычных крестов, без стандартной библиотеки и с несколькими ардуиновскими макросами. Из core возможностей крестов не работают емнип только исключения (их не поддерживает ARM по-моему). В остальном там все как обычно, конпелируется clang'ом.
>>633577 Эм - нет? А с чего ему вдруг тормозить? Цель этой херни - управление оборудованием. Пиздец реакции рам не нужно, и большую часть времени вообще занимает ожидание. Например, ожидание, пока привод механизма доедет до датчика и его показания изменятся.
А суть в том, что механизмов там было дохрена и управлять ими нужно было параллельно (но со своими заебами и у нажном порядке, чтобы один за другой не зацепился).
На контроллер цепляется туева хуча модулей - для CAN, входов/выходов (дискретных или алалоговых), термопары, ШИМ и прочая блевота. Когда одного контроллера не хватало - цепляли несколько штук и объединяли их через CAN, главный общается с компом по USB и говорит остальным, чего им делать.
>>633694 >Почему по крестам работы почти нет, хотя именно на крестах сделано 95% годного софта? А ты платишь за этот софт? На крестах по массе есть только один вид софта, за который платят - игры. Вот в геймдеве кресты пока и остались еще.
>Почему в корпоративном секторе все пишут на жаве и сишарпе с их убогими виртуалбоксами и калечной производительностью? А ты мерял их производительностью? Часто скорость написания важнее. Лучше в 2-3 раза быстрее написать, чем оно будет на 50% быстрее работать.
>В теории именно плюсы могли бы дать серверам максимальные возможности и лучшую производительность. У них сейчас нет проблем с возможностями и производительностью.
Я вообще поражаюсь тем, кто кричит что на плюсах работы нет. Да один блумберг столько вакансий даёт, что всем обитателям этой клоаки хватит. Но вот мозгов у обитателей не хватит для бб. Откройте сайт вакансий европейский или американский. Там сотни вакансий в разных сферах.
А в России кризис, людей увольняют. Много регуляр девелоперов в поисках работы. Они сожрут остаток рынка.
Так что, корзинусы, бегите учиться в европу. В России программисты скоро станут не нужны.
>>633914 Пил тут как-то год назад с программистом, пишущим никзкоуровневый Java-код для JVM, тарахтящей на симке. >>633845 На линкдине 80% ейчаров хотят дегри в КС + волонтёрский опыт. А у меня такого нету, например. Вообще вышки нету, вакансии замотивировали наконец получить . Ну и такое же говно желают типа bash, python, haskell, ГЛУБОКОЕ ПОНИМАЕНИЕ АРХИТЕКТУРЫ *NIX. В общем не сказал бы что я им там сильно нужен.
>>633704 Эта борда, например, на крестах. Видишь баннер сверху? Легким движением руки Абу за несколько дней собрал со школьников овер100к. Чем не стартап?
Здравствуйте, господа! Что скажете насчёт C++ Builder 10 от embarcadero? Пока учусь (в университете) писать в стареньком С++ Builder 6, нравится, но начинаю думать о будущем.
>>634024 На ангельском, как белые люди. По докам и исходникам, там все просто и понятно. Еще книжка Мукерджи в шапке годная. >>634056 Качество уровня опенсорсных сред, но за деньги и с велосипедным компилятором. В 2016 году, с кучей современных бесплатных IDE, такое просто стыдно устанавливать. Это как написать на лбу, что ты только что выполз из дремучего университетского машзала, застрявшего в 90-х.
>>634066 Ты кек чтоле? Там цланг. >>634056 Он тебе пригодится только если для тебя программирование на тыканье формочек заканчивается. В остальных ситуациях бери нативный для платформы конпелятор и visual studio для шинды и clion для остального (если не хочешь пиратить - можешь выслать им студенческий и пользоваться халявной лицензией).
>>634066 >Это как написать на лбу, что ты только что выполз из дремучего университетского машзала, застрявшего в 90-х
Но я ещё оттуда не выползал, только планирую начинать свой путь. Знаю, есть миллион советов по поводу выбора среды, но стал глядеть именно на этот вариант, так как попросту привык к 6-му билдеру. Интересно всё-таки узнать, чем он конкретно плох (деньги ни при чём, естественно, ставиться всё будет нахаляву), ну и услышать очередной конкретный совет новичку (если не посыл).
>>634075 >Интересно всё-таки узнать, чем он конкретно плох Конкретно 6-й (и все, до использования clang как компилятора) - поддержка только древних стандартов, дерьмо вместо линковщика и потимизатора. Ужастный медленный дэльфи-рантайм.
>>634073 Там не цланг, а цлангоподобный велосипед собственного производства, если верить их сайту. Сказано "в 10 версии улучшена поддержка clang", то есть он предоставляется чисто как дополнительная фича. А с эти так - либо ты можешь писать продакшен-код, либо это игрушка наподобие того, что сейчас в студии прикрутили. Без исключений и всей хуйни.
>>634077 А еще там даже если предположить прикрученный нормальный компилятор, хуевое автодополнение. Ты, блядь, посмотри на скрины и сравни со студией. Разница как между авиалайнером и трехколесным велосипедом же.
>>634082 Вообще никогда не пользовался автодополнением. Люблю сам все скобочки вводить, да и мелочи это уже. >>634077 А конкретно 10й? Тоже безнадёжно отстает в стандартах?
>>634098 Хорошо, я полностью верю тебе касаемо организации удобства среды, всяких автодополнений и прочих. Я хочу вот какую вещь понять, чтобы разубедиться (и поставить видимо Visual): в каких аспектах использования современных средств языка и современных методов разработки одна среда может превзойти ту, о которой я завел речь? Или билдер плох и отвратителен по своей сути, изначально и навсегда имеет "велосипедный" компилятор и плохой линкер?
>>634109 Тут тебе весь список его красот никто не скажет - им банально никто не пользуется сейчас.
Из точно известного: - С++14 не поддерживается (вообще); - исключения не поддерживаются как выше писали; - рантайм и всё остальное там так и осталось дельфевым - ошибки тупо из-за разной модели памяти и уродства реализации тебя приветствуют; - точно помню, что в 6-м билдере были свои нестандартизированные расширения плюсов; - собственное соглашение о вызове и прочие плюшки их велосипедов - пользоваться сторонними библиотеками будет оч приятно, я тебе это гарантирую.
>>634109 Ты слышал про первородный грех? Вот в применении к IDE Builder это, блядь, Каин. Он настолько омерзителен и порочен по своей сути, изначально, что в свое время многие именно из-за него потеряли доверие к IDE и ушли на vim/emacs.
>>633701 >А ты платишь за этот софт? За Windows и за Kaspersky плачу, да.
>А ты мерял их производительностью? Вообще-то да. Сейчас дизайн алгоритмов изучаю, пишу наибыстрейшие возможные алгоритмы для типовых задач. На С# низкоуровневые алгоритмы работают в среднем в 4-8 раз медленнее, чем на С++.
>У них сейчас нет проблем с возможностями и производительностью. Как сказать. Может быть, если бы Макака писал на С++, он бы сейчас собирал донатом не 100к рублей, а всего 50к.
>>634169 >На С# низкоуровневые алгоритмы работают в среднем в 4-8 раз медленнее, чем на С++. Вообще ни о чем не говорит. Можно намеренно или ненамеренно всрать код на одном языке, не учтя его особенности
>>634181 На бенчмарках - да. А ИРЛ - звучит как утверждение, что ассемблер быстрее чем с++. В теории да, а на практике компиляторы куда умнее погромистов.
>>634176 >ненамеренно всрать код на одном языке, не учтя его особенности Я не знаю С++ даже на базовом уровне, компилирую с трудом. C# знаю на продвинутом уровне. Также знаю множество особенностей, относящихся к его быстродействию, например: - Цикл foreach работает в несколько раз медленнее цикла for в большинстве ситуаций; - Целочисленные типы малой размерности (byte, short) при любых операциях автоматически приводятся к Int32 , а потом - обратно. Поэтому, эти типы всегда работают медленнее, чем Int32 и они полностью бесполезны.
Можно ли такие вещи называть особенностями? По-моему это никакие не особенности, и просто недоработки. Кстати, многие из них слабо или вообще никак не документированы, единственный способ их выявить - собственноручно писать бенчмарки. Соответственно, многие C# разработчики про эти "особенности" не знают.
>>634227 >А ИРЛ - звучит как утверждение, что ассемблер быстрее чем с++. В теории да, а на практике компиляторы куда умнее погромистов. Ну ладно, видимо ты плохо понимаешь, о чем говоришь, не буду спорить.
>>633694 >Почему по крестам работы почти нет, хотя именно на крестах сделано 95% годного софта? Потому что С++ аутистам 20 лет назад внушили, что швабода и опенсорс - это хорошо, а проприетарный софт и деньги - это плохо. И с тех пор они пишут код забесплатно.
>>634240 >Целочисленные типы В плюсах (и вообще всех нативных языках) здеся все повеселее - их размер вообще зависит от платформы. Собственно, отсюда проблема этих типов у тебя в шарпе и исходит. >Цикл foreach Они в С++ бесплатны. Как и вообще почти все.
Бывают разве что непонятки например в разных реализациях STL как правило, из-за незадокументированности чего либо, как недавно в GNU реализации стандартной библиотеки размер листа просчитывался при каждом вызове size() вместо простого счетчика при добавлении.
Раньше еще модно было умножать побитовыми сдвигами (сейчас компиляторы сами и не такое делают) и исключения считались медленным говном (ныне эпоха итаниумовского аби и исключения уже тоже стали "зеро кост").
>>634240 > при любых операциях автоматически приводятся к Int32 , а потом - обратно В плюсах тоже такое, это следствие из архитектуры процессора. Другие типы не то чтобы бесполезны - если тебе нужен массив с ебенячим количеством элементов, то инты могут просто не влезть. Но просто так использовать что-то меньше интов (для целочисельных типов) конечно не стоит.
>>634292 Тип которого нету приводится к типу, который есть? Я вкурсе только того, что типы без окончания дробной части на .xxxf автоматически приводятся к double.
>>634240 >В С++ есть подобные дыры в ядре языка Главная дыра - указатели и работа с памятью. Ну и еще немножко счастья с виртуальными методами и множественным наследованием. Это то, что все вменяемые полюсовики знают и рассказывают друг другу на собеседованиях.
Нужно написать сервер, способный принять на 1 порт ~100 пакетов/сек(грубо говоря есть 3000 клиентов, каждый клиент отправляет пакет на сервер каждые 30 сек). Пакеты где-то по 100-200 байт. С сетями особо не работал, сервер буду писать однозначно с использованием boost.asio.
Мои мысли: С TCP сервер может просто захлебнуться(это моё предположение). С UDP придётся ебаться дико(битые пакеты, дубли, очерёдность), ибо мне нужно знать дошёл ли пакет на сервер.
>>634980 >способный принять на 1 порт ~100 пакетов/сек На локалхосте это вообще не проблема. В реальной ситуации вся производительность сводится к минимизации нагрузки на сервер - расходы на транспортировку данных и ширина каналов нивелирует все.
В любом случае лучше бери TCP. Скорость UDP не окупит твоих велосипедных попыток скорректировать данные.
>С сетями особо не работал, сервер буду писать однозначно с использованием boost.asio. Самая перенагруженная и медленная сетевая библиотека. Если что-то упадет - энжой юр дебаггинг, оч приятно. Твоя задача решается в 100 строк кода на сокетах Беркли.
аноны помогите разобраться, нужно найти левый и правый крайние отрицательные элементы в массиве, вот минимальный элемент находит, а максимальный отрицательный нихуя, или выходит 0 или положительное число. Вот код http://pastebin.com/18yUkcp4 .
>>635193 >а максимальный отрицательный нихуя Ты уж определись, тебе максимальный отрицательный, или >левый и правый крайние отрицательные элементы в массиве
Аноны, нужно реализовать интерфейс Drag-and-Drop. Конкретно задача - создать редактор штрифтов TrueType (ну это такие буквы, которые для экономии частями хранятся). Естественно это надо возится с Form Application вижуала. В какую сторону для этого курить? Что навернуть? MDSN не предлагать.
>>635563 >Как бе там LGPL - халявно для опенсорс проектов. Лол, а может быть ты все таки прочитаешь, что такое LGPL?
Даю подсказку - lgpl разрешено линковать к проприетарным прогам динамической. В чем её запрет - нельзя использовать производные работы. Короче говоря ты не можешь внести изменения в сам Qt и не открыть, назвав своим продуктом.
>>635662 Никак. Поскольку сервер ты распространять не будешь - вообще не парься. А если будешь распространять - то по lgpl ты обязан линковаться динамически.
>>635667 Пиздец, типичная пидорашка, вместо знания знать ничего не знает, но зато уже трясется от проверок непонятного чего. (L)GPL требует открывать исходный код при дистрибуции. Нет дистрибуции - нет исходников.
>>635667 Блять ну не тупи же ты! Ты обязан открыть саму Qt, если внёс в неё изменения. А производные продукты, которые её используют - ты открывать не обязан.
>>635716 Нету там ни редакторов, ни средств создания гуя (кроме системного - винапи, но это совсем мазохизм). Мб есть какая нибудь обвязка крестов к дотнету.
>>635733 >>635805 В общем, понятно. Последний вопрос - а как вообще приложения на крестах пишут тогда? То есть для UI мне надо ещё какой-нибудь шарп знать. Так штоле?
Господа, порекомендуйте профайлер памяти для проекта. Желательно свободный для коммерческого использования, и чтоб под шиндошсом работало. Мне не нужны проверки на утечки памяти (Весь проект на автопоинтерах), достаточно просто посмотреть какой компонент софта при работе потребляет сколько памяти.
Вообще есть идея изменить автопоинтер чтоб он при создании/уничтожении логгировал что-то, а потом скрипт написать для анализа этих логов. Но как в таком случае я получу имя функции/метода/неймспейса из которого память выделяли? Да и велосипедненько это.
>>636113 Вообще любой из первых строк выдачи гугла, лол.>>636113 >Вообще есть идея изменить автопоинтер чтоб он при создании/уничтожении логгировал что-то Есть вообще очевидный valgrind для таких велосипедистов как ты.
>>636052 >>636023 > декларативным описанием Я не понял, опять штоле у функциональных петухов тред прохудился? Пиздуйте свои топосы дрочить, дайте взрослым дядям поговорить.
>>636113 В студии прекрасный встроенный профайлер с графиками и прочими вкусностями. И еще можно делать автоматические оптимизации по результатам профилирования.
Недостаток - для проекта из 10к строк на выходе профилировщика получается уже полугиговый файл. Поэтому неудобно после каждой сборки профилировать.
Посоветуйте, аноны. Хочу вкатиться в Qt, кресты буду учить практически с ноля. Какую IDE устанавливать? Стоит начинать с Qt Creator или есть что более годное?
>>636188 Вангую плптиновые вопросы по пунктам: установил этот ваш куте ничего не запускается как установить gcc под windows как установить mingw под windows установил этот ваш mingw ничего не запускается как задать переменную среды бля ну почему runtime error как включить dwarf исключения как переустановить mingw
>>636188 >>636184 >>636201 Ненене антон, ты меня не так понял. Я скорее интересуюсь тем, что православнее - ставить криэйтор, studio, clion или что ещё. Или может рановато и мне нужно вкатываться в блокнот и gcc.exe?
Ребята, есть Точка: class Point { private: int _x; int _y; public: Point():_x(0),_y(0){} Point(int a, int b):_x(a),_y(b){}
void set(int a, int b) { _x=a; _y=b; } int getX() { return _x; } int getY() { return _y; } }; Нужен ли тут деструктор? Поясните за деструктор, когда и зачем он применяется?
>>636396 Здесь деструктор будет создан компилятором, как конструктор копирования. Гугли POD. Деструктор нужен для кастомнрго разрушения объектов. Самое простое - освобождение ресурса: память, файл, коннект к базе. Но может быть и более сложная логика, хотя и не рекомендуется (читай про исключения).
>>636408 По умолчанию, деструктор может только вызвать деструктор для членов класса (не всегда, читай про виртуальный деструктор) и чистит память самого объекта (только там где сам объект лежал). Все остальное надо делать руками
Чому на С++ так мало опенсорца? Если и есть, то только в качестве второго/третьего языка для всякой хуйни по мелочи. Исключение - KDEProject и OpenCV и всякое фб/гуглоговно.
Помогите тупому ньюфагу, токо начинаю вкатываться в плюсы с нуля. Кароч такая вот задача: "Write a program that uses a loop to display the characters for each ASCII code 32 through 127. Display 16 characters on each line with one space between characters" Как сделать только 16 цифр на 1 строке, а не 32 33 34 35...127, и как это все показать в ascii как вставлять эту хуиту из acii table? Пока есть токо это int val = 32; while (val <= 127) { cout << val << " "; val = val + 1; }
>>636519 Таки нет, зарезервированы двойные подчёркивания __, так же не рекомендуется использовать подчёркивание и прописную букву _A, _Bxx, а со строчными проблем быть не должно. Но смотрится по-уебански.
>>636562 Джва счётчика, один для символа, другой для количества символов. условный оператор в начале блока цикла который напечатает "\n" при 17 символе и сбросит счётчик символов.
>>636562 Когда выводишь val касти его к типу char. Следи сколько ты уже вывел символов на текущей строке, и когда наберется 16 то вставляй std::endl. Сделай счетчик, или, например, можно смотреть на остаток деления val на 16 (val % 16) и в зависимости от остатка вставлять конец строки. Можно два вложеных цикла сделать.
>>636564 >>636566 Как следить, зачем следить, после чего вписывать <<endl Я когда запускаю int val = 32; while (val <= 127) { cout << val << " "; val = val + 1; } у меня просто хуярит с 32 до 127 сразу, что значит когда наберется?
>>636560 Ебать ты дебик. https://github.com/trending?l=cpp Проектов дохуя, только в основном все - ниебически большие, и ентрилевел там соответствующий хотя бы сделать работающий прототип на плюсах внезапно выше, чем на питонах/раби, вот мы и не видим еженедельно новых веб фреймворков.
Такой вопрос, ананы. Часто в вакансиях вижу что-то типа "умение программировать на С++ в среде UNIX/Linux" мб по-уебански как-то написал, ну ладно Так вот че почитать, поделать для этого самого умения. Мб есть какие вводные в кернел программинг. (Это уже и для себя интересно, не вдаваясь, каэш в продакшн) Или это вообще просто-напросто сводится к умению компилить из командной строки, установке пакетов, в общем к базовому/продвинутому пользованию терминала?
>>636839 Перед тобой свежеустановленая убунта. Напиши и скомпилируй хеловорлд и твою лаба2 на ней. Элементарные знания командной строки, GCC/clang, git и тп.
>>636908 На джуна - это. На миддла - еще make, autotools, cmake, понятие ldconfig, grep/sed/awk и до бесконечности. Но это точно не про программирование ведра или что ты там себе выдумал.
Анон, объясни, что за хуита происходит на рисунке? Почему последнее дерево не является кучей? Что там вообще демонстрируется, если в результате получается не куча?
>>636929 > последнее дерево не является кучей Не соответсвует критерию кучи - каждый ребенок должен быть больше (или меньше, смотря какая куча) своего родителя.
>>636839 Я однажды тем же вопросом задался. Поиом эту книгу нашёл. Файловый ввов-вывод, процессы, права пользователей, системные вызовы. Почитай, интересно
>>636946 Ну там дерево же вообще не изменяется. Наверное показана работа именно Bild-Heap (тоесть изменение индекса i), а Heapify нихуя не делает, тоесть дерево не изменяется, а только индекс скачет.
Поясните, я тут начинаю вливаться в программирование на ++, такой вопрос. В книге написано что если return в функции main будет -1, то программа должна выдать ошибку. Но я делал -1 или вообще удалял ретурн, мне ничего не писало.
>>637232 Ничего она не должна. Это код выхода, который, если не равен нулю, говорит об аварийном завершении программы. Т.е. это ты должен его считать и уже сам делать выводы. Бывает очень полезным в скриптах, для остального есть логирование. https://en.wikipedia.org/wiki/Exit_status
>>637818 >А я что юзаю? std::string >В QT тупо свой QString юникодовский. Ты не используешь библиотеку Qt, а просто используешь Qt Creator как я понял. Вместо std::string используй QString и подключи Qt в .pro
Анон, расскажи про состояние Qt в индустрии. Как оно там, не умирает? Можно погружаться? Вакансии не исчезнут с рынка труда, пока я более-менее разберусь?
>>637852 > Хочешь юникода - используй wstring. Хочешь юникода - используй utf8 в std::string. Вообще советую почитать http://utf8everywhere.org/ , там и про ситуацию с юникодом в крестах рассказано, и в STL и в Qt.
Анончики, я новенький в плюсах. У меня такой вопрос. В классе в одном из методов мне нужно использовать константу. Я так понял значение константы хранится в бинарнике после линковки. Так вот, если я этот метод буду вызывать несколько раз, то у меня будет просто всё время браться значение из того места где хранятся константы. Я правильно понимаю? И как называется то место, где хранятся константы? В хипе вместе с программой?
>>638040 Если просто const переменная, то в машинном коде она, как правило, станет обычной переменной если забыть про тонкости наподобие оптимизаций, связанных с read-only memory etc, разместится на стеке или в сегменте данных, как обычно, в общем. Т.е. константность это просто такое высокоуровневое средство для проверки при компиляции, что ты не накосячил.
constexpr же на этапе компиляции будет подставлена вместо всех упоминаний и зашита в код. Например, для constexpr int x = 1 что y+=x, что y+=1 превратятся во что-то с inc eax, ну ты понел. Никакой отдельной памяти для этих чисел не выделится, они будут прямо в машинных инструкциях.
Это как происходит на практике. В теории же стандарт вообще ничего не говорит о таких деталях, просто правила подобраны так, чтобы на обычных пекарнях удобно подставлять constexpr - для них запрещено взятие адреса и подобные палки в колеса подстановке. Но никто не мешает таки выделить для них память, если компилятор дохуя щедрый. Наоборот, до появления constexpr компиляторы видели, когда const допустимо подставлять с сохранением семантики - и делали это.
>>638209 >Времени минимум понадобиться 6 лет в вузе. 5 лет активной работы в опенсорсе. Наличие своих проектов, которые нужны еще кому-то, кроме тебя, обязательно. А еще ((SOLID&&OOP&&Patterns&&Algoritms)&&(Containers&&Pointers&&etc)&&(stl||boost||qt)&&(vim||emacs)&&unit_tests&&git&&unix_terminal&&etc) иначе junior1464_cpp->~useless_crap();
джуны в крестах не нужны, крестами заканчивают, а не начинают
>>638482 Задумка простая, но важна скорость 3D, движки обычно монструозные и тормозные для моей игры. Поэтому выбрал кресты, потому что раньше писал утилиты на них, хотя сейчас работаю в java, но там сам понимаешь, что с графикой.
>движки обычно монструозные и тормозные для моей игры я конечно не знаю всех подробностей, но я сомневаюсь что можно написать вменяемый 3Д движ за две недели и при этом задавать вопросы что лучше OGL или DX лучше две недели потратить на геймплей/графоуни/багофикс для твоей игры, а не для абстрактного движа
>>638491 Есть же minetest который, блядь, не тормозит как высер жирного джаваблядка, а мелкомягкие обещали зделать c++ версию настоящего под шиндовс10.
Ребят, такой вопрос, работаю в cbuilder, и нужно чтобы когда мы вводим что-то в edit, и нажимаем enter, происходило нажатие кнопки. Как отловить это нажатие enter когда активен edit?
>>639178 >спросил про cbuilder >съел говно про Qt и сказал спасибо Лол. >>639175 VCL билдера (как и он сам) - это обертка с плюсовым синтаксисом над дэльфи библиотеками, не больше.
>лол Я с кодом попозже решил разобраться просто. А че за qt? >vcl это обертка с плюсовым синтаксисом над дэлфи На уровне компилятора - да, но весь код пишется на чистом с++. В то что внутри билдера меня не сильно волнует
>>639236 >Я с кодом попозже решил разобраться просто. А че за qt? https://ru.wikipedia.org/wiki/Qt C++ гуевый (и не только) фреймворк. >В то что внутри билдера меня не сильно волнует Ты, блядь, вася. Тебе нужно именно то, что внутри билдера, т.к. именно он обрабатывает эту всю хуйню, неважно на каком языке. Найти ту же обмотку на плюсах потом проблемы не составит, а в дэльфитред я тебя послал потому, что тут никто с этим говном не работает хотя мб когда нибудь сюда зайдёт старый печальный крудошлёп, который работает с этим говном с начала 2000-х.
>>639253 Вась, ухади! >а как же с ХЕ8 Билдером А новые вещи в продакшен в рашке нитащут. В яндексе например, по комментариям его работников в 2014, запрещали писать на C++11. И это, блядь, топ ит компания, а шаражкины конторы использующие билдер в лучшем случае на 6-м сидят.
Тебе уже ясно пометили территорию: или нормальный C++, или пиздуй в дэльфитред с вопросами по VCL.
>>639266 Лол, у нас как-то арх все ждал появления вариадик теплейтс в мс Вижул Студии. А другой каллека бугуртил, что это все дрисня, и вместо шаблонов нужны интерфейсы и полиморфизм.
>>639318 А можно было просто взять D и не ебя мозга реализовывать все новое на нем. Но сори, у нас продакшен, главное - стабильность по 80 рублей за доллар.
>>639533 D requires garbage-collection This could be seen as controversial because it is possible to run D without the GC. However, just because it is possible doesn't mean it is practical. Without a GC, you lose a lot of D's features, and using the standard library would be like walking in a minefield (who knows which functions allocate memory?). Personally, I think it is totally impractical to use D without a GC, and if you aren't a fan of GCs (like I am) then this can be quite off-putting.
>>639574 Нет, потому что у С++ библиотека рассчитана на работу без GC.
Here are some things not to do with GC disabled, because they will cause memory leaks:
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.)
Сап, анон. Вот я, начинающий программистраспиздяй, научился писать всякую простенькую херню на с++, типа операций со строками, ввод/вывод из файла, массивы там, циклы. Куда двигаться дальше? Не хочется просто читать учебники, хотелось бы именно иметь какие-то задачи, чтоб по ходу разбираться в новых темах.
>>639603 Нет, D изначально ущербен. Это такой C# с темплейтами. То есть не нужен ни пользователям C#, которым и с генериками норм, ни пользователям C++, которым нужны value-types и отсутствие GC везде. Есть язык, который "если D развивали бы не пара его создателей и люди не любили бы сидеть своем говне - это все давно не было бы проблемой." - это Clay. Который на голову выше D и при этом действительно слаборазвит. Но тут уж не судьба.
>>639610 >Это такой C# с темплейтами. Ниет. Ты ни одного, ни второго не знаешь видимо. >это Clay Ок ок, я понял, уноси свою сишку со скриптовым сахаром без нихуя.
Помогите, пограммисты, не знаю куда обратиться! Начал изучать недавно С++ по книге с вашей шапки Липпмана. Там я дошёл до главы с классами, где какая-то ссылка на Sales_item.h была. Сначала я не понял т.к. я файл не создавал, и нигде до этого не было указано как его сделать или взять. Но дочитав главу до конца в книге указана гиперссылка, по которой, якобы, есть этот файл - пик №1. Но при заходе по этой ссылке этого файла нет, а идёт редирект на эту книгу. Что делать, подскажите?
>>639610 Насчет сисярпа с темплейтами ты загнул, конечно. Со скоростью у D вроде бы все на уровне крестов. Но насчет ущербности я поддвачну тебя.
Если что, дело даже не в том, что, мол, кресты популярны, а D - нет, и вот поэтому на них не перекатываются и кодобазы кот наплакал. Дело в том, что сама концепция "взять существующий язык и выбросить возможности, которые кажутся плохими" - она тупиковая. Хотя бы потому что каждая выброшенная фича, даже объективно плохая, вроде хэдеров вместо модулей, даст моментальный отказ тех, кто ее использует, от переката на новый язык. В крестах есть более удачные и менее удачные фичи, но практически за каждой стоит серьезная мотивация, серьезная проблема, для решения которой в свое время решили использовать эту фичу. Поэтому объединение недовольных крестогоспод, которые, увидев D, предали его анафеме, оказалось больше допустимого. И именно это стало причиной того, что D умер в младенчестве.
Кресты же с самого начала осуществляют стратегию впитывания - берут из других языков разные парадигмы и фичи, но никогда ни от чего не отказываются. От успешного Си был взят популярнейший синтаксис и машинная ориентированность. Когда заговорили об ООП, а университеты стали пилить академические языки, в которых было только ООП, страус взял и аккуратно встроил парадигму в Си, получив смешанный ООП-процедурный подход, а не синтаксически бедную дрисню, в которой есть объекты, сообщения и больше нихуя. Заговорили об обобщенном программировании - вместо переката на какие-нибудь стандартные интерфейсы - страус со Степановым покумекали и внедрили шаблоны и STL. Заговорили о функциональном программировании - комитет впилил лямбды и variadic templates. Можно еще много примеров привести: умные указатели, конкурентные фичи, вывод типов - тысячи их. И все делаются по одному сценарию: "старое не ломается, новое гармонично дополняет старое". Поэтому происходит процесс, обратный тому, что произошло с D - алтфаки остаются, и вдобавок к ним перекатываются люди из других языков, соблазнившись тем, что тут есть и привычные им фичи, и крестовые.
Можно сколько угодно кукарекать про выстрелы в ногу и преимущества сильной типизации/функциональной парадигмы/еще чего-нибудь. Но успех крестов наглядно показывает, почему любые намеренные ограничения, призванные облегчить вкатывание для макак, на самом деле являются злом, убивающим язык. Диванные аналитики пилят стены текста с длиннющими апологиями своих языков, пытаются доказать, что их ЕДИНСТВЕННО ВЕРНЫЙ подход лучше всех остальных особенно функциональные петухи этим грешат, вместо того, чтобы запилить объединение концепций, которое лучше каждого в отдельности.
>>639698 >Дело в том, что сама концепция "взять существующий язык и выбросить возможности, которые кажутся плохими" - она тупиковая. Ну как бы в D ничего и не выкидывали. Ну ладно, кроме этого еще дефайны и неймспейсы послали нахуй. >Заговорили о функциональном программировании - комитет впилил лямбды и variadic templates Самое смешное, что вообще все это было за почти за десяток лет до C++11 в D. Причем там это реализовано намного лучше, чем в крестах. Страуструп задумался о модулях и UFCS в C++17 - он тоже уже давно в D. >фича, даже объективно плохая, вроде хэдеров вместо модулей, даст моментальный отказ тех, кто ее использует Ну хэдэры-то конечно ахуенная вещь, особенно в плюсах, где дебажная сборка хэловорда с темплейтами может занимать пол часа с соответствующими бесконечными багами линкера. И убрав эти хэдэры из языка их функциональности внезапно никто не лишится. Все эти "обдуманные решения" в плюсах - такое же костыльное легаси говно, как и отсутствие этого решения. >Но успех крестов наглядно показывает Что людям просто похуй, они привыкли пихать костыль в зад и пихают.
Ты не понял сути D - никто ничего не выкидывал, просто все по-человечески рефакторнули. Тут тебе и быстрая компиляция, и куда более мощные средства метапрограммирования и вся compile-time хуита которая в плюсах костыльно реализованна на constexpr, и вообще все - но в отличие от плюсов ты можешь зайти в стандартную библиотеку и без проблем понять что автор пытался сделать. Это называется дизайном языка с учетом ошибок, а не накоплением говна как в плюсах.
>>639698 > Со скоростью у D вроде бы все на уровне крестов. Да нет, из-за GC это типичный C#. C# тоже довольно быстр, надо сказать. >>639733 Страуструп задумался о модулях в С++ еще в книжке Дизайн и эволюция, которая появилась намного раньше D. >Ты не понял сути D - никто ничего не выкидывал D выкинул гигабайты кодобазы. Это - главное. А С++xy ничего не выкидвает.
>>639733 Не путай "хотели" и "сделали". Фобос до сих пор рефакторят. Они так бешено быстро всего понапихали, что все эти десять лет только и переделывают туда-обратно. Быстрее будет с нуля язык сделать, нежели сделать всё стройно и гладко с тем, что уже есть.
>>639761 >Да нет, из-за GC это типичный C#. Да нет, он таки быстрее, хотя GC у него таки хуже чем в яве или го. >Страуструп задумался о модулях в С++ еще в книжке Дизайн и эволюция, которая появилась намного раньше D. И где они? По его заверениям он хотел ввести и вывод типов еще в 90-х, но отказался под давлением сишников. >D выкинул гигабайты кодобазы. Это - главное. А С++xy ничего не выкидвает. Использовать из D код из C++ никто не мешает, даже модель памяти аналогияная и аби плюсовый полностью поддерживается. >>639772 Это следствие разработки 2 человеками (ну еще рандомные челики через раз с форума набигают). Сколько лет коммитет C++ обсуждал C++11 и сколько изменено в C++14?
>>639761 Дело не только в этом же. Фортран тоже не выкидывал, но этого недостаточно. Суть в том, что комьюнити фактически с каждым стандартом существенно расширяется, и это мешает появиться какому-нибудь йоба-языку и убить кресты, как это было с фортраном. Новый язык вольно или невольно отвергает некоторые фичи крестов, а в новом стандарте все его годные фичи, напротив, будут, причем, грамотно интегрированные и пропиаренные. Поэтому кресты оказываются на шаг впереди, смекаешь?
>>639781 >И где они? У С++ фичи обсуждаются до тех пор, пока они не устроят всех. В отличие от тоталитарных корпоративных языков. Поэтому медленно. Но и хорошо при этом. >Использовать из D код из C++ никто не мешает, даже модель памяти аналогияная и аби плюсовый полностью поддерживается. Не поленился проверить - нихуя не так.
>>639881 >Не поленился проверить - нихуя не так. https://dlang.org/spec/cpp_interface.html Что именно? >Поэтому медленно. Но и хорошо при этом. Ясно. Что именно хорошего? Что в языке, каждую фичу которого обсуждают по 10 лет все такие же костыльные простыни вместо шаблонов? Что ещё за 3 года обсуждений тебе могут дать чуть расширенный костыль в виде constexpr? Аргументация уровня "мы в говне, но зато стабильность".
>>637870 А с чего ему умирать-то? Qt развивается, годных qt-программеров не хватает. Наши американские и канадские заказчики например проекты переводят на Qt, всё норм.
Я ничего не понял, поясните, я по вашей книге учу С++, только выучил операторы иф, вайл и т.д. И книга уже мне подкинула какое-то странное задание: 1.21 с пика. Я ничего не понимаю как её писать, в книге ничего не объясняется. Сам файл Sales_item.h - в нём написано чтобы я не пытался понять код на данном этапе. Что делает программа я не понимаю, а если я не понимаю как я могу дальше что-то делать по этой программе? Я тупой и лучше мне всё это бросить?
>>640379 Ну в 1.21 в программу вводятся 2 объекта Sales_item (operator<< в файле уже написан, так что самому ввод писать не надо), потом ты их сравниваешь на одинаковость isbn (функцие compareisbn) или по заданию предполагается, что вводятся две одинаковые, хуй пойми и тупо складываешь их (operator+ и operator+= для класса тоже определён)
Поясните еще пожалуйста, у вас же тут можно нубские вопросы задавать? Почему если я пишу std::cin >> item1 >> item2; Т.е. сам ввожу значения item1 and 2, то всё нормально. А если пишу так, чтобы значения были указаны: item1 = "0-201-78345-X 3 20.00"; item2 = "0-201-78345-X 2 25.00"; То выводит какие-то странные ошибки? Просто, я не хочу эти значения постоянно вводить, в книге на 2 пике написано вроде как этого избежать, но я не совсем понял т.к. там для Юникса, а у меня виндовс 10.
>>631744 (OP) Гайс, везде рассматриваются консольные приложения, хотя в жизни я с ними почти не сталкивался. Почему так? Где учиться писать программы без ебучего черного окна?
>>640616 >Чем студия не угодила? Винда зашкварилась, и студия на нее не устанавливается. Переустанавливать ее лень. Даже попросить тыжпрограммиста было бы лень, ведь потом надо столько программ устанавливать, и делать это мне лень.
>>640578 Хипстерская хуета сделаная какими-то азиатами, причем даже не со своей кодобазой, лал. Учитывая публику пишущую на этом прекрасном языке - будем давится говном, но не вот этим.
Ользо, несмотря на бессмысленность написания еще одного фреймворка, то, что у них может получиться, - это пакетный менеджер. По-хорошему, именно так им и нужно себя позиционировать.
>>640913 Просто конструктор some_type (std::string), который, наверное можно самому без труда запилить, скопировав код из some_type::operator (std::istream) или типа того
>>640601 > Так я уже выучил, я хочу формочки шлёпать, понимаешь? Чет я не верю что ты осилил все основы языка и до сих пор не знаешь как сделать оконное приложение вместо консольного. Или ты тупо книжку одну прочитал, не вдаваясь в подробности?
>>641161 Мб имеется в виду какой-то аргумент и после него троеточие? няшная сишечка например вообще не волновалась по этому поводу - SetStrColor() и void SetStrColor(int b, ...) для неё были синонимами.
Вообще, если я знал 1 язык программирования, учёба С++ пойдёт лучше, если бы я его не знал? Я давно работал на пхп - делал сайты. Но уже мало что помню из него. Вот, решил выучить С++ и найти работу...
>>641267 На то, чтобы выучить плюсы на уровне приемлемом хотя бы для прохождения собеседования у нюфага уйдет не меньше 2-х лет. А еще нужно знать весь стак их технологий. И опыт пыха иебе здесь не поможет.
Иди в раби или петон тред если нужна работа нет ребующая 5 лет задротства.
>>641272 Я слышал что С++, как и СИ - непотопляемые языки. И у меня знакомый сначала работал на обычной физической работе, а потом как-то перепрофилировался, и работает программистом на С++.
>>641275 Они непотопляемые в том смысле что их ближайшие 10 лет никто и ничто не заменит. Но это не отменяет того факта, что C++ один из сложнейших (из мейнстримовых - самый сложный) язык. А чтобы куда-то попасть на работу сегодня (10 лет назад каждого васю брали, это да) нужно на зубок пересказывать изъёства вроде наследования виртуальных функций на собеседованиях, знать Qt с Boost и ещё кучу хуйни вроде опыта работы с прыщами и гита - и это если компания современная и не байтоёбский продукт делают, иначе нужно знать ещё кучу хуйни вроде ассемблера и сетевых протоколов.
И да, игрушки - без математической вышки пошлют нахуй.
>>641279 >игрушки - без математической вышки пошлют нахуй Чем так важна мат. вышка в игрушках? Когда я учился в вузе, у меня по матанам была самая высокая оценка в группе среди мужского населения. Даже помогал другим решать, но я уже мало что помню из всего этого.
>>641389 1) Потому что он не просто расширяет, но и выкинул некоторые фишки C (как автоматическое приведение типов и прочие прелести слабой типизации C и тд); 2) Они развиваются отдельно и имеют разные идеологии;
>>641389 > язык, а не С с класса Много дополнительных возможностей (шаблоны, перегрузки операторов). Но "С с классами" тоже считался бы отдельным языком. Вон - objective C именно что С с классами, но никто его не назовет просто С.
>>640578 ОП на связи. ИМХО нельзя сразу пихать новое в шапку. Надо сначала присмотреться, убедиться, что это выстрелит, будет хорошей практикой, а не говном. Например, >>640689 - куна я удваиваю ссылки просмотрел пока что по диагонали. Так что в ближайший перекат это впиливать преждевременно, ящитаю.
>>641602 Словарь. Например std::set. Если тебе не нужно будет итерировать по словарю то лучше std::unordered_set (быстрее доступ по ключу). Так как у тебя ключом служит непрерывная последовательность чисел то идеальный вариант - какой-то из массивов.
из инклюда убрали math.h, теперь если в .c файлах поменять <math.h> на <cmath>, в котором, по спеке, должна быть и старая функциональность, то все, пиздец. ...\Microsoft Visual Studio 14.0\VC\INCLUDE\cmath(17): error C2143: синтаксическая ошибка: отсутствие "{" перед "<", и т.д. по файлу. Чет ошибка гуглится, но пути ее решения не гуглятся.
>>641656 У unordered_map константный доступ, но с большими константами. Для каждого обращения будет считаться хэш, который наверняка сложнее, чем схема Горнера в std::to_string. Более того, в unordered_map на каждый хранимый int будет приходиться дохуя служебной информации, емнип 16 или больше байтов. Поэтому ему следует использовать to_string и не выебываться. Или сделать вектор со строковыми представлениями индекса, если надо прямо совсем быстро, за одну машинную команду.
Бля идите нахуй, пусть хоть через шаблоны хуячит свою задачку из лабы первого курса. Обсуждаете тут, что лучше хэшмап или switch в контексте какого-то несущественного говна.
>>641703 > который наверняка сложнее Очень спорное утверждение, все зависит от реализации, но так как от std::hash (которое используется по умолчанию) никто не требует криптографической стойкости то скорее всего в качестве хеша целого числа будет просто возвращено это число.
Тфу, блядь, разобрался. Продолбился в глаза и при инициализации поставил [] вместо (). >>642009 Пошёл нахуй. >>642008 Мне сейчас байты ебать надо, а тут у плюсов нет альтернатив. Скоро перееду на жабу.
(Автор этого поста был предупрежден.)
Поясните нубу: если на объекте std::thread не вызвали .join() или .detach(), то он вызывает std::terminate() в деструкторе. Мол, эта ниправильна так делать. При этом, для написания exception-safe кода заебашили thread_guard, который в ситуации выше вызывает .join() перед уничтожением std::thread. Вопрос: почему это поведение просто не реализовали в самом std::thread?
>>642043 > просто не реализовали в Это противоречит идеологии языка. Попытка вызова джойна в деструкторе не бесплатна. А программист не должен платить за то чего не использует.
>>642104 > просто не реализовали в >Это противоречит идеологии языка. Попытка вызова джойна в деструкторе не бесплатна. А программист не должен платить за то чего не использует.
Ты не можешь не вызвать джойн(или детач) перед запуском десьруктора. Если ты этого не сделаешь, то получишь краш
>>642107 Хотя да, я понял, ситуация здесь как с [] и at() у вектора. Но вот только [] вызывается очень часто, а деструктор у std:thread не так часто. На лицо слишком фанатичное следование парадигме, из-за чего возникают неудобства.
>>642107 Ну. Ты создаешь thread_guard, вызываешь джойн или детатч. Потом при вызове деструктора произойдет совершенно ненужная (в твоем случае) проверка. Скажем для 99.99% программистов это будет оправдано - накладные расходы мизерны а запасная проверка не помешает. Но если эту проверку зашить std::thread то у 0.01% поехавших пригорит, они начнут городить свои велосипеды (без проверок) и везде срать что std::thread использовать не стоит так как он тормозит из-за ненужных проверок. Идеология языка такая что если каких-то расходов можно избежать, то такая возможность предоставляется - даже если выигрыш на самом деле мизерный.
>>642124 Ты можешь себе представить, что у людей пригорит из-за одного сраного if'а, который, блять, просто меркнет на фоне того, что делает операционная система при завершении потока?
>>642123 Это холиварная тема. Надо понимать как реализованы исключения, из этого вытекают их плюсы и минусы. Гугл стайл гайд запрещает исключения. У них есть проблемы с перформансом, но с другой стороны это бывает удобным механизмом обработки нештатных ситуаций.
>>642043 Потому что .join при ошибке кидает исключение, а не перехваченное исключение в деструкторе - это вызов std::terminate(). Так что даже если бы join и вызывался, то поведение не изменилось бы, такие дела. Не понимаю чего тебе не нравится
>>642130 Погуглил, там проблема с исключениями а не производительностью, так как проверка есть в любом случае, просто она вызывает не join() а ternimate() Судя по http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2802.html сначала хотели сделать чтобы в деструкторе вызывался detach(), но там вообще пиздец получается, оставался вызов join() или terminate(), и получилось что от джойна отказались потому что он "results in serious responsiveness issues" или вообще может вызвать дедлок (имеется ввиду ситуация с обработкой исключения, последующей раскруткой стека, а потом возвращением назад и продолжением работы).
>>639266 Они таскают свой stl за собой. Лежит в ${SOURCE_DIRECTORY}/contrib
Поэтому можно что-то. Но без auto в лямбдах и инициализации в захвате, decltype(auto) 11 плюсы нахуй. Потоки, промисы, таски, прочая многопоточность есть в бусте, всякие all_of или find_if там же.
Да и нахуй это в хуяндексе с их: std::int64_t yasize () const;
Надоело писать код и видить постоянно черную и угрюмую консольку, я конечно могу поменять цвет, но все же не то. Хочу попробовать написать с графоном, пока мой выбор пал на windows form или winapi, но все же прошу советов, что использовать чтобы было все красиво и с кнопочками.
Поясните, я сейчас читаю про всякие литералы етц главу, но я почти ничего в ней не понял. Я потом пойму всё это или учить на зубок? Пикрил - на большинство вопросов не могу ответить. Могу сказать что: 'а' - символьный литерал. 8 байт. "а" - строковый литерал. Не знаю сколько байт, вроде по 8 на каждую букву. L'a' и L"a" - широкосимвольный литерал. 16 байт. Дальше, там где 10u и 10L - я вообще не понял что это.
>>643642 Нужно учить. "Понимать потом" окажется достаточно сложно так как все проблемы с литералами будут проявлятся исключительно в каких-то ебанутых багах, но ты скорее всего этого никак не избежишь, так что возможно и не стоит особо заебыватся. Главное ясно понимать разницу между 'a' и "a" (особенно важно понять что "a" это два символа 'a' и '\0'). Также желательно знать про запись в шестнадцатеричном и двоичном виде. Все остальное редко встречается.
>>643569 Это архитектура компьютера. Темы простые можно на всяких хасклетах видеокурс базовые посмотреть. И про ассемблер тоже чутка пояснят. Талмуд таненбаума для этого читать не обязательно.
>>644218 Откуда я знаю кто. Был дан код и я пытаюсь понять. Я пришёл к мнению, что нужно выделять память по размеру введённому юзером в stdin, дабы избежать переполнение. Но как и что исправить не знаю.
Анон, need help! Пытаюсь компилировать прогу на распберри пи, прога работает с одной библиотечкой. Короче кидает следующую ошибку: >g++-4.7 -std=c++11 -g -O2 main.cpp -o main In file included from tlc5940-raspberry/tlc-controller.h:34:0,from main.cpp:40: tlc5940-raspberry/gpio.h:44:2: error: expected identifier before numeric constant tlc5940-raspberry/gpio.h:44:2: error: expected ‘}’ before numeric constant tlc5940-raspberry/gpio.h:44:2: error: expected unqualified-id before numeric constant tlc5940-raspberry/gpio.h:46:1: error: expected declaration before ‘}’ token
Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три: + C++ действительно быстрый - по скорости они вместе с C с большим отрывом уделывают любой другой язык. Замедление относительно C находится в районе 0-20% а в ряде случаев C++ оказывается даже быстрее, причем проявляется только при использовании высокоуровневых конструкций (в крестах ты никогда не платишь за то, чего не используешь). + C++ один из наиболее выразительных и мощных языков, позволяющий использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментов простреливания ноги решения задачи. + C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Современный C++ весьма далек от языка, которым он был в 1998 году. В настоящее время кресты живее всех живых, их развитие движется семимильными шагами, а новые стандарты принимаются каждые три года, сохраняя при этом полную обратную совместимость с предыдущими. К сожалению, из-за обилия некачественной литературы по крестам, в которой игнорируются новые средства языка, бытует мнение о его "несовременности".
Нужно понимать, что используемый язык должен соответствовать поставленной задаче. Никому не придет в голову писать на C++ скрипты или веб-фронтенд, но лишь немногие языки могут соперничать с ним по разнообразию решаемых задач.
>>644369 >644363 >Кстати у меня получилось скомпилировать только когда сократил до этого. Что значат удалёные слова я не знаю.
Ты поменял новый strongly typed enum на старое гуано. Видимо, компилятор на это и ругался, что вообще-то странно, потому что в gcc это есть с 4.6 версии. Что у тебя прячется под g++-4.7?
>>644391 Хоть я и считаю, что писать быстрый код можно на любом языке, оптимизируя критические участки, но на моей памяти большая программа, написанная на c/c++ работала отзывчивее и быстрее на ресурсоемких задачах, чем аналоги, написанные на java. Доходило до того, что java приложение юзает ту же либу на C, а работает медленнее. И это уж не говоря об отзывчивости нативного UI и не нативных. Ярчайший пример - обоссаный qt creator и йоба clion. Первый хоть и кривой, как моя жизнь, но все везде быстренько, если не упадет нахуй. А clion, вроде и оптимизируют дохуя, но жрет он по 5 гигов на большом проекте и регулярно задумывается то там, то сям.
Поставь clang, его ставить 2 минуты, если не собирать из сорцов. Тут явно какая-то синтаксическая проблема, о которой говно gcc сказать нормально не может. В таком режиме мы полночи искать проблему будем.
>>644435 Сделал все в одну строчку и поменял строки местами. Все равно точно такая же ошибка в той же строке! Для чистоты эксперимента закомментил одну из строк, ошибка, как и положено, в отсутствующем классе.
if (strncmp(line, "str=", 4) == 0) { line += 4; char str =line; while(str == ' ')str++; }
Ещё поясните за си-строки. Ели я указываю только на первый символ строки а её длина не исвесна, то значит она храниться в свободной памяти? Тогда почему какой нибудь маллок не заберёт себе часть памяти занятой этой строкой или почему следующая же перемена объявленая на стэке не затрёт это строку?
>>644473 >>644472 >>644471 Слушайте, я вот поудалял комменты из шапки и поменял строки местами, но получаю точно те же ошибки с теми же номерами строк. При этом, если бы я копилировал либу с левым файлом, то небыло бы такого результата >>644459 В чем, мать его, дело?
>>644480 source.cpp: In function 'int main(int, char)': source.cpp:34:16: error: ISO C++ forbids comparison between pointer and integer [-fpermissive] while(str == ' ')str++;
>>644488 Чем дальше ты будешь идти, тем больше будет таких вопросов. Того Ритчи читать дней 5 максимум, зато на выходе у тебя будет структурированный материал со всеми нюансами.
>>644540 В общем, у меня CTF. Большинство заданий я выполнил, а вот с исправлением С++ кода у меня проблемы. Даётся этот код. Нужно починить его чтобы он корректно работал и нужно убрать уязвимости в коде. Есть комментарий:
The program is still vurnerable! (RULE1) 3 vulnerability(ies) remained unpatched.
Some vulnerability is detected via unexpected empty output. In order to avoid any false crash detection, be sure that you output some error message when you detect that the input is malicious.
Я тот ньюфаг, что недавно начал учить С++. Такой вопрос, я иногда листаю вакансии, и там где указан С++, как правило, кроме знания ++ стоит еще понимание ООП. Я слышал что объектно-ориентированное программирование - это основная фишка ++ или я что-то не понял?
Senior'а должность, если нет крещенья,
Которым к вере истинной ведут!
Без тайн крестов познаешь лишь мученья:
Макакинг гостевух из года в год
Иль в крудошлепство с Python погруженье.
И всякий раз, листая тот байт-код,
Которым обратились твои муки,
Юнец-тимлид брезгливо скривит рот.
Так, запоздало вняв моей науке,
Ты будешь гнить, как листья под дождем,
И на себя в конце наложишь руки.
А перед смертью вспомнишь вновь о том,
Что мог, кресты познав, прожить иначе,
И, этого желая всем нутром,
Ты от бессилья горького заплачешь.
TL;DR Читаешь https://goo.gl/kVaela , делаешь примеры и суешь в http://ideone.com , ошибки копипастишь в гугл, непонятное ищешь в предыдущих тредах, спрашиваешь в этом треде, если не нашел. Если тебя послали на хуй или не ответили, то ты спросил платину, читай предыдущие треды внимательнее. И прочитай FAQ, расположенный ниже, в нем много полезного.
Унаследованная памятка:
Вопросу по синтаксису идут на хуй.
Лабы идут на хуй.
"Как мне сделать Х на чистых крестах без библиотек" идут на хуй.
Все идут на хуй.
Хейтер сосет члены на пару со своей мамашей.
Тег [code] работает через жабаскрипт-костыль: https://github.com/ololoepepe/MakabaCode
Старший брат:
Предыдущий:
FAQ:
Q: Почему стоит использовать именно C++?
A: Ни один язык не идеален, но по совокупности киллер-фич C++ оставляет все остальные языки позади. Вот основные три:
+ C++ действительно быстрый - по скорости они вместе с C с большим отрывом уделывают любой другой язык. Замедление относительно C находится в районе 0-20% а в ряде случаев C++ оказывается даже быстрее, причем проявляется только при использовании высокоуровневых конструкций (в крестах ты никогда не платишь за то, чего не используешь).
+ C++ один из наиболее выразительных и мощных языков, позволяющий использовать большинство существующих парадигм. Его философия построена на минимальном ограничении программиста в выборе методов и инструментов простреливания ноги решения задачи.
+ C++ по-настоящему популярен. На нем написаны десятки тысяч приложений и миллиарды строк кода, о нем написаны сотни книг, он до мельчайших подробностей документирован и стандартизован. Используя C++, ты никогда не останешься без работы или поддержки комьюнити.
Q: Но он же давно устарел!
A: Современный C++ весьма далек от языка, которым он был в 1998 году. В настоящее время кресты живее всех живых, их развитие движется семимильными шагами, а новые стандарты принимаются каждые три года, сохраняя при этом полную обратную совместимость с предыдущими. К сожалению, из-за обилия некачественной литературы по крестам, в которой игнорируются новые средства языка, бытует мнение о его "несовременности".
Q: Сейчас все пишут на %languagename, а кресты сосут у него!
A: Нужно понимать, что используемый язык должен соответствовать поставленной задаче. Никому не придет в голову писать на C++ скрипты или веб-фронтенд, но лишь немногие языки могут соперничать с ним по разнообразию решаемых задач.
Q: Окей, я решил вкатиться. Какие же книги мне читать?
A: Специально для тебя аноны /pr собрали уникальную коллекцию отборной литературы по крестам. Только лучшие книги, последние издания, без хуев! Выбирай категорию и обмазывайся:
Для нюфань:
Учебники для начинающих. Все примерно одинаковой годноты, читать имеет смысл только какой-нибудь один, который больше приглянется.
Стэнли Липпман, Жози Лажойе и Барбара Му - Язык программирования C++ (2014) - https://goo.gl/kVaela
Стивен Прата - Язык программирования C++ (2012) - https://goo.gl/z7kA8u
Бьерн Страуструп - Программирование. Принципы и практика использования C++ (2011) - https://goo.gl/nAFUXa
Герберт Шилдт - C++. Базовый курс (2010) - https://goo.gl/qMLAFl
Роберт Лафоре - Объектно-ориентированное программирование в C++ (2004) - https://goo.gl/QvjR6x
Учимся не писать говнокод:
Книги про основные подводные камни для тех, кто осилил предыдущий пункт. Следует пролистать все.
Скотт Мейерс - Эффективное использование C++ (2005) - https://goo.gl/wsDXGz
Скотт Мейерс - Наиболее эффективное использование C++ (1996) - https://goo.gl/tHa0tO
Скотт Мейерс - Эффективный и современный C++ (2015) - https://goo.gl/Im8VYQ
Скотт Мейерс - Эффективное использование STL (2002) - https://goo.gl/QtS8Dc
Герб Саттер и Андрей Александреску - Стандарты программирования на языке C++ (2005) - https://goo.gl/Cpk4YR
Проектирование:
Следует пролистать все перед переходом от лаб к написанию настоящего софта.
Последний пункт есть квинтэссенция ГИБКОСТИ, поэтому стоит прочитать его в любом случае, чтобы охуеть от того, как можно делать.
Ален Голуб - Веревка достаточной длины, чтобы выстрелить себе в ногу (2001) - https://goo.gl/fBmuxp
Джеймс Коплиен - Программирование на C++ (2005) - https://goo.gl/Y1WGdU
Андрей Александреску - Современное проектирование на C++ (2002) - https://goo.gl/e1V5BC
Ахтунг! Предыдущие два раздела дополняют, а не заменяют классические книги о лучших практиках разработки без привязки к конкретному языку (Макконнелл, Uncle Bob, GoF).
Наиболее детальные описания языка:
Бьерн Страуструп - Язык программирования C++ (на ангельском) (2013) - https://goo.gl/XkAiOX
Бьерн Страуструп - Язык программирования C++ (2010) - https://goo.gl/iZBDiV
Стандарт C++14 (на ангельском) - https://github.com/cplusplus/draft/raw/master/papers/n4140.pdf
Последняя на данный момент версия черновика стандарта C++17 (на ангельском) - http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2015/n4567.pdf
Тонкости языка (для гурманов):
Герб Саттер - Решение сложных задач на C++ (2002) - https://goo.gl/iWaa6S
Герб Саттер - Новые сложные задачи на C++ (2004) - https://goo.gl/4nn512
Также для легкого чтения подойдет книжка c историей создания C++:
Бьерн Страуструп - Дизайн и эволюция C++ (1994) - https://goo.gl/FqbPwo
Отдельные аспекты:
Читать по необходимости.
Энтони Уильямс - Параллельное программирование на C++ в действии (2012) - https://goo.gl/qJfBkD
Николаи Джоссатис - C++. Стандартная библиотека (2012) - https://goo.gl/PEyiMH
Дэвид Абрахамс, Алексей Гуртовой - Шаблонное метапрограммирование на C++ (2009) - https://goo.gl/isSt7j
Дэвид Вандевурд, Николаи Джоссатис - Шаблоны C++. Справочник разработчика (2003) - https://goo.gl/0M4NpG
Роберт Седжвик - Фундаментальные алгоритмы на C++ (2001) - https://goo.gl/4jwxSl (части 1-4), https://goo.gl/yDuQgG (часть 5)
Q: Хуле тут так сложно? Я открыл учебник, там какой-то ад!
A: Попробуй учебники, изданные после 2011 года. Фичи последних стандартов не только добавили выразительности, но и серьезно упростили жизнь разработчиков. Теперь программировать на C++ стало проще, чем когда-либо! Это не отменяет необходимости прочитать несколько серьезных книжек, чтобы написать на нем что-то годное. Тем не менее, да, C++ это по-настоящему сложный язык. Его никак не получится выучить за 21 день, ну вот совсем никак. Именно высокий порог вхождения повышает твою ценность как специалиста, не позволяя нанять вместо тебя индуса за еду. Более того, крайне нежелательно пытаться изучить его первым, если ты раньше вообще не программировал. С большой вероятностью это приведет к разочарованию и потере времени. Гораздо лучше будет начать с другого языка и базовых вещей алгоритмы, архитектура пека, операционные системы, а уже потом вернуться к крестам.
Q: Ты охуел? В этих книгах по тысяче страниц! Хочу коротких статей.
A: Вот тебе блоги, факи, референсы и всякое такое:
Годный блог, в котором все просто и понятно тян не нужны кококок борщ - http://alenacpp.blogspot.ru
Блог с хорошо расписанными фичами новых стандартов - http://scrutator.me
Краткие описания библиотечных функций и контейнеров - http://ru.cppreference.com/w/ или более подробно на ангельском http://en.cppreference.com/w
Блог Герба Саттера (на ангельском) - http://herbsutter.com
Блог Скотта Мейерса (на ангельском) - http://scottmeyers.blogspot.ru
Блог еще одной тянки, много о Qt и оптимизации (на ангельском) - https://katecpp.wordpress.com
Куча других блогов (на ангельском) - https://www.quora.com/What-are-the-best-blogs-on-C++
Большой FAQ по C++ (на ангельском) - https://isocpp.org/wiki/faq
Q: Я не умею читать.
A: Можешь посмотреть какой-нибудь онлайн-курс:
Видеокурс на тытрубе - https://www.youtube.com/watch?v=atVgLRzl3rI
Еще один - https://youtube.com/watch?v=MOpF5lk3cLY
Среди прочих есть несколько курсов по C++ - https://stepic.org
И еще есть вот такое, если проникся:
Видео с CppCon (на ангельском) - https://youtube.com/user/CppCon/videos
Q: Я готов начать погроммировать! Куда мне писать код?
A: Под шиндошс удобно использовать IDE Microsoft™ Visual Studio®. Базовую версию (2015 Community) можно бесплатно скачать отсюда: https://goo.gl/qgAAc6 (русская версия) или https://goo.gl/WIPW9L (ангельская версия). Чтобы начать писать код, нужно запустить Visual Studio, кликнуть "Файл - Создать - Проект - Пустой проект", после создания кликнуть слева правой кнопкой мыши по пункту "Файлы исходного кода", выбрать "Добавить - Создать элемент - Файл C++". Свои хэллоуворлды писать в этот файл, в дальнейшем можно добавить другие файлы и хедеры. Чтобы скомпилировать и запустить проект, нужно нажать "Сборка - Собрать решение", а затем "Отладка - Запуск без отладки".
Под *nix, как правило, уже предустановлен компилятор gcc (если нет, используй sudo aptitude install gcc), так что достаточно сохранить хэллоуворлд, набранный в текстовом редакторе, и выполнить g++ helloworld.cpp и ./a.out. Но удобнее установить какую-нибудь IDE, например, весьма удобную CodeLite (sudo aptitude install codelite codelite-plugins), и работать в ней. Ее также можно использовать и в шиндошс, но тогда сперва придется установить MinGW (http://mingw.org).
Еще у нас есть IDE, призванная похоронить Visual Studio пока не особо получается. Она стоит денег, но можно украсть почти не протухшую версию на торрентах или получить бесплатную лицензию по скану студбилета, если ты студент. Удобные свистелки и перделки присутствуют. Тормоза и баги присутствуют. Кросплатформенность присутствует - https://www.jetbrains.com/clion
Можно также не устанавливать ничего, а запускать свои хэллоуворлды на http://ideone.com, выбрав в левом нижнем углу язык C++14.
Q: Не буду я все делать сам! Подавайте сюда софт, который все сделает за меня и подотрет мне жопу!
A: Без проблем:
Статический анализатор, который умеет находить в коде ошибки и неоптимальные места. Швабодный. Есть плагин для Visual Studio - http://cppcheck.sourceforge.net
Детектор утечек для Visual Studio. Предельно прост в прикручивании - https://vld.codeplex.com
Гугловские утилиты для контроля корректности кода - https://github.com/google/sanitizers
Гугловский фреймворк для автоматизации тестирования - https://code.google.com/p/googlemock
Q: Мне надоело писать велосипеды, какие у вас тут популярные либы?
Q: Нужно зделать %монструозная_хуйня_нейм, но я обосрался от одной мысли о написании ее с нуля, что же делать?
A: Гляди сюда:
boost
Бесспорно, это самый популярный набор C++-библиотек. Не будет лукавством сказать, что C++ во многом обязан популярностью именно ему. Воистину всеобъемлющий, boost способен удовлетворить твои самые скотские фантазии. В нем есть практически все - от математических функций до сетевых компонент, от инструментов тестирования до динамических типов. Функции для работы с твоей мамашей там тоже есть. Разумеется, все это швабодное и работает на любых платформах. И да, boost является своеобразным инкубатором хороших библиотек, поэтому наиболее удачные из них с большой вероятностью можно будет увидеть после принятия очередного стандарта уже как часть стандартной библиотеки.
Недостатком boost можно считать его размер - более 300 мегабайт. Большинство компонент boost не являются независимыми, и попытка использовать один единственный контейнер обернется фактическим подключением 2/3 всего присутствующего в комплекте. Таким образом, если boost не будет использоваться на полную, лучше юзать другие, более специализированные библиотеки.
http://www.boost.org - скачать бесплатно без смс.
http://www.solarix.ru/for_developers/cpp/boost/boost-library-list.shtml - краткие аннотации к большинству компонентов.
http://sindicollo.blogspot.ru/2008/09/boost.html - документация к некоторым компонентам.
http://www.boost.org/doc - документация (на ангельском).
Литература:
Ариндам Мукерджи - Learning Boost C++ Libraries (на ангельском) (2015) - https://goo.gl/b0gPN1
Qt
Существует швабодный кроссплатформенный фреймворк-надмножество C++ под названием Qt. Он содержит довольно большое количество компонент (для работы с сетью, базами данных, для юнит-тестирования и др.), но киллер-фичей и основным полем его применения являются возможности по разработке графических интерфейсов. Qt сам по себе, как расширение языка, предоставляет для этого более удобные средства, чем обычные библиотеки, а использование специализированных IDE наподобие Qt Creator позволяет в буквальном смысле собирать интерфейсы мышкой, а код писать только по существу.
Тем не менее, использование Qt нельзя однозначно назвать хорошей практикой. Во многом это уже не C++, а другой язык, со своими концепциями и паттернами. Qt-код требует дополнительного препроцессинга при помощи встроенных в Qt утилит (т.н. метаобъектная компиляция), поэтому не получится просто подключить Qt как обычную библиотеку и использовать свой любимый компилятор без дополнительного софта. Нельзя сказать, что это существенное препятствие, но есть мнение, что использование Qt нарушает дух C++, раздувает машинный код и порождает макак-любителей кодогенерации.
В настоящее время основные версии Qt - 4.8 и 5.х, полной обратной совместимости между ними нет как в пистоне, ага.
http://www.qt.io/ru - скачать бесплатно без смс.
http://doc.crossplatform.ru - документация к 4.8.
http://doc.qt.io - более полная документация к обеим версиям (на ангельском).
Литература:
Макс Шлее - Qt 5.3. Профессиональное программирование на C++ (2015) - https://goo.gl/aZ66gK
Макс Шлее - Qt 4.8. Профессиональное программирование на C++ (2012) - https://goo.gl/Slb1In (книга) + https://goo.gl/toUDWc (исходники примеров)
Марк Саммерфилд - Qt. Профессиональное программирование (только Qt 4.х) (2011) - https://goo.gl/qpkZFm (книга) + https://goo.gl/LIIECh (исходники примеров)
Другие хорошие библиотеки:
Несколько специализированных библиотек для часто встречающихся задач. Все маленькие, быстрые и простые в освоении:
libcurl - сишная библиотека для работы с сетью (существует также curlpp - крестовая обертка для нее, но использовать ее не стоит, ибо разработка заброшена еще в 2009 году) - http://curl.haxx.se
SFML - работа с графикой и аудио - http://www.sfml-dev.org
FLTK - графические интерфейсы - http://fltk.org
И еще куча библиотек на любой вкус - http://en.cppreference.com/w/cpp/links/libs
Q: Я прочитал все вышеперечисленное, теперь я гуру! Что дальше?
A: Дальше переходишь по ссылке http://cppquiz.org/ , пробуешь отвечать на вопросы и понимаешь, что ты пока в самом начале пути. Кроличья нора крестов практически бездонна, поэтому продолжать постигать тонкости и детали можно очень и очень долго. В то же время, на этом этапе у тебя должно быть достаточно знаний, чтобы уверенно писать неплохой код. Поэтому читай исходники открытого софта и библиотек, отправляй пулл-реквесты в них, читай книжки по предметным областям и общим методикам разработки, а дальше уже сможешь запилить свой проект или вкатиться в существующий.