Пачаны какую ide кто использует на линуксе? Желательно не сильно продорливую. По возможностям интересует: Адекватное автодополнение, как стандартной библиотеки, так файлов проекта. Ну понятно дебаггер, желательно, чтоб можно было выставлять условия для брейкпоинта. Да и очень хотелось бы иметь возможность пробежаться по стеку вызваных функций. Подсказка типа переменной, например когда используешь auto либо просто встретил по коду, чтоб не лезть в объявление. Возможность работы с cmake. Какие-нибудь более-менее удобные средства работы с гит. Ну в принципи и все основное наверное.
>>1831651 (OP) Короче, немного подосвоил теорию по simple code и ravesli, но понял что это всё быстро забывается и нужно чтобы каждая тема сопровождалась практической задачей, с повторением предыдущей темы. Учебники в шапке для этого я так понимаю не подходят. Как быть? денех на курсы нет
Чекнул гайд, решил попробовать вкатиться (один хуй в унике это преподают посредственно, решил изучать сам). Подойти хочу основательно, в гайде рекомендуют почитать про "алгоритмы, архитектура пк, операционные системы", посоветуйте книжек на темы выше.
>>1832191 если ты прямо серьезно хочешь вкатиться - то пиши код. Читателей тут полный двач, а код надо уметь писать.
И только попутно, совсем немного времени - стоит посвящать чтению. От себя скажу, что читал танненбаума и windows internals - имхо, хуйня. Гораздо лучше сделать самому какой-нибудь проект который тарабанит операционку, и разбираться с этим
>>1832191 > алгоритмы Вот дофига же в Вики, с картинками и псевдокодом. А гугуль прям заваливает слайдами про деревья и прочее. Берешь и пишешь свою библятеку
Посоветуйте проектов на гите которые стоит почитать вкатышу после 1 книги Страуса. Чисто почекать решения и реализации алгоритмов и неймспейсов других людей. + Ещё каких-нибудь старых игр с рандомной генерацией карт.
Итак, у меня тут случилась БОЛЬ. Пишу не первый год, но попал в тупик. Сначала вводные: 1. Компилятор MSVC, тулсет v141, стандарт С++17 2. Платформа - Windows, соответcвенно sizeof(wchar_t) == 2
Есть txt файл в кодировке UTF-16LE, BOM присутствует, концы строк - \r\n (\r и \n конечно тоже по два байта) . Могут присутствовать суррогатные пары utf-16 (когда один unicode codepoint кодируется не 16 битами а парой 16 битных значений из оговорённого диапазона)
Как его построчно прочитать? По большей части, можно даже построчно не читать - лишь бы читалось правильное количество байт чтобы потом конвертить в другую кодировку через WideCharToMultiByte
wifstream inFile(L"file.txt"); //опционально с ios::binary wstring line; std::readline(inFile, line);
- не подходит - поток без codecvt facet читает по одному байту и конвертит каждый байт в wchar_t и получается фигня, кроме того останавливается посередине L'\n' начиная следующую строку с \0. codecvt_utf16<wchar_t> помог бы, но во-первых он deprecated, во-вторых он не корректно конвертит суррогатные пары - потому что потоки могут только в преобразование N:1, и поэтому этот facet читает 4 байта, получает правильный codepoint и обрезает его по границе 16 бит (размер wchar_t) Помог бы codecvt_utf16<char32_t> (тоже естественно deprecated), но MS его поломали - не сделали где-то dllexport и хер забили чинить (да и специализации потока для char32_t тоже нет).
Велосипедить разбор файла самому через IS_HIGH_SURROGATE и прочее крайне не хочется - можно легко проебаться.
Куда ещё посмотреть? Бустовские io потоки? (никогда их не использовал, и хотелось бы тут обойтись по возможности без буста) Pure C stdio? Может в Winapi что-то есть а я неправильно ищу?
Еду тут в метроу и в мозг стукнула идея алгоритма для сверки строк. Короче, читаем нужное число строк, и в цикле читаем посимвольно переводя символ в инт и добавляя в соответствующую переменную. Потом тупо сверяем все интовые переменные и радуемся. Нормально чи не нормально? Как по скорости выйдет? Без рофлов, я учусь 2 недели.
>>1832931 Ты знаешь как вообще данные в компе хранятся? Ему похуй символ это или целое число. В конце концов он все равно циферки сверяет. Так зачем сначала эти циферки в число загонять, если можно просто символы сравнить сразу?
>>1832626 Считай весь файл в память и сконвертируй в массив 32 бит символов сам
>дин unicode codepoint кодируется не 16 битами а парой 16 битных значений из оговорённого диапазона Это определяется первыми битами, несложно обработать.
Сап, пытаюсь сгенерировать GLFW файлы цмейком. Но компилируются почему-то под 32 разрядную винду. Пишет что упустило какой-то pthread и doxygen. Не генерируется либа glfw3.lib. Гугл ничего толкового не выдаёт.
>>1833968 >если по 10 часов в день ебашить то сдохнешь через месяц. я не понимаю зачем люди пытаются впихнуть невпихуемое, типа вызубрить жабакор хортсмана за неделю, меня через час потянуло сжечь его, или записатся на курсы чтобы отдать дохуя денег и получить выгорание, ненависть к програмированию в целом и проблемы со здоровьем от переутомления, вместо того чтобы изучать язык в своем темпе, сорт мазохизма что ли такой.
>>1834037 написал же, спишь 10 часов при этом помимо еды и сранья, еще останеться 2 часа на чередование прогулки и силовой зарядки в таком режиме можно год прожить итого 3к+ часов в год за три года 10к часов, а обычно 10к часов растягивают на 10 лет 10к часов это минимум, необходимый в том чтобы детально разобраться в некой сложной сфере деятельности, стать мастером
>>1834085 Про 10к часов правда - а вот про месяц неправда, мозг не сможет, там тупо не выстроятся связи. Да еще ему надо делать это в фоне, когда ты не думаешь о теме активно. Да еще кривая забывания, чтобы повторять первые темы. Так что ты быстро упираешься в предел понимания, пока какая то предыдущая тема не усвоится, ты с какой то сложности будешь видеть тупо буквы, не понимая что происходит. Да еще тебя на второй неделе блевать потянет от однообразия, что ты потом месяцами программирование видеть не захочешь. Кроме того узкий специалист подобен флюсу, так что надо еще какие то предметные области осваивать и вообще саморазвиваться. Вот так и выходит 5 лет.
>>1834206 >простая физиология мозг в момент концентрации потребляет до 25% всей энергии организма и долго в таком напряжении работать не будет.
Потому что мозг надо с детства было развивать, книжки там читать, головоломки решать всё свободное время, а не к быдлодрузяшкам во двор бегать в сифу и прятки играть.
Взрослый мозг ясен хуй уже не разовьешь, тут судьба только охранником в пяторочку, только хардкор.
>>1834229 и он все равно будет потреблять столько же и не хотеть работать, неважно как ты его развивал, а будешь заставлять его реально пахать по 10 часов в день через пару недель получишь нервное истощение, тревожность, бессонницу и депрессию, я говорю по своему опыту прошедшему через кранчи. с такой аргументацией пройди в мвп тред, там такое любят.
МНОГАДЕНЕГ = ВОРОВАТЬ OR ВЬЕБЫВАТЬ, УМЕНЬШАЯ ПРОДОЛЖИТЕЛЬНОСТЬ ЖИЗНИ, ПРИЧЕМ БЕЗ ВАРИКА ИХ ПОТРАТИТЬ НА ТО ЧТО НРАВИТСЯ ПО ПРИЧИНЕ ОТСУСТВИЯ ВРЕМЕНИ НА СОБСТВЕННО ЖИЗНЬ
Есть набор фактов вроде "BAD_WEATHER", "TIRED" и набор правил вида "BAD_WEATHER & TIRED -> BAD_MOOD" , результат которых - новый факт. Факты и правила задаются из файла в рантайме. Результат работы программы - набор фактов
Вот над подобной задачей туплю, как это архитектурно реализовать красиво?
>>1831745 >>1833934 могли бы поделиться вашими конфигами для них? с emacs я правда дел не имел, а вот вим обычный одно время использовал, правда в рамках typescript, ну честно заставить корректно работать автодополнение у меня не получилось, подсвечивал кучу слов нет носящихся к интерфейсам слов. Но пердолить конфиг до нормального состояния, это хз сколько времени удить нужно. А так бы попробовал зайдет или нет.
>>1834524 Я не он, но отвечу. Как мне кажется, из-за отсутствия событий и делгатов, сборщика мусора и рефлексии, при написании сколько-нибудь сложных гуёв приходится сооружать совершенно монструозные велосипеды или использовать чужие - MFC с его message map, Qt с signal/slot, что-то там ещё в UWP (не сталкивался лично, может не прав и там всё норм - а может похоже на шарп). Зачем же вообще писать гуй на плюсах? Ну, бывает что по ряду причин шарп не подходит. Например, недопустим managed код (рантайм), или гуй связан с байтоеблёй, WinAPI, драйверами, COM и создание биндингов неуместно/неудобно.
>>1834577 Не, ну учить язык чтобы пилить красивые гуишки без вспомогательных средств это сильно. Такое реально достойно уважения + затраченного времени.
>>1834577 > Зачем же вообще писать гуй на плюсах? Да, лучше взять очередное говно на электроне которое будет для примитивнейших программ жрать память как целая ОС.
>>1834577 Пишу в свободное время свой ГУИ на плюсах, с использованием SFML правда, но потом заменю на опенГЛ или другую хуйню. Можете оценить зачатки моего говна
>>1834896 Мда, тебе бы основы дизайна пройти Кстати, возможно ли сделать гуи одного приложения на Линукс который максимально повторяет все кнопки приложения на винде? Такой же крестик, шрифты, и т.д. На винде обратное видел - гтк выглядит прям как линуксовый
Памагити, начал изучать синтаксис с++, вначале я был полон сил, сейчас дальнейшее изучение туманно, так как не вижу денежной выгоды, кто в этом вертится подскажите актуальность языка на ближайшие 10 лет
>>1834960 >кто в этом вертится подскажите актуальность языка на ближайшие 10 лет В ближайшие 10 лет он никуда не денется. Вообще актуальна версия, что чем дольше язык живёт, тем дольше он будет умирать. Сейчас плюсы очень активно развиваются (быстрее чем когда-либо) и уходить не собираются.
Другое дело, что вкатываться в них долго и сложно. Особенно сложно искать первую работу.
>>1834974 и последующие, провел 5 лет на с++ и Qt, везде оказалось нужно STL я иду на хуй, на двух собесах дропнули, на третьем взяли на 90 т.р. и то им нужны были тупо любые программеры которые не слишком тупо излагали
Нужно познать основы с++ для начеркания софтин типа списков, для домашнего использования. Образование не ИТ, скилы в коде заканчиваются ХТМЛ и немного цсс. Буду идти по гайдам на ютубе наверное. Какой посоветуете ide на окна, чтобы с компилятором, блекджеком и шлюхами? От мелкософта не хочу ставить, ботнет
>>1834982 С популярностью вопрос спорный. Индустрия развивается, появляются новые ниши, старые перераспределяются. Для некоторых задач появились более подходящие инструменты (а иногда эти инструменты специально развиваются в каком-то более профильном направлении).
За пределами отдельно взятой сферы про их технологии можно и не слышать вовсе. Если быть "в курсе", то в плюсовом мире постоянно что-то происходит, msvc бешеными темпами подпиливает фичи, чтоб соответствовать стандарту, иногда даже gcc с clang'ом не поспевают, комитет тоже трудится, на выступлениях много всего интересного обсуждается.
Ну то есть происходит всё то же самое, что и в любой сфере.
>>1834977 У меня на первой работе вообще плюсов не было, на второй искали кого-нибудь на Си, я им половину собеседования рассказывал про плюсы, так и взяли.
>>1834991 У них там в Qt свой мир со своей парадигмой, стандартной библиотекой и макросами
>>1834985 >Какой посоветуете Посоветую не плюсы, они под твои критерии не подходят. Возьми шарп.
>>1834998 В синтаксисе есть общие элементы, но в целом языки достаточно сильно отличаются друг от друга.
>Не проблема Если знаешь один, то разобраться в другом будет легче, но не более. Концепции и модели использования всё равно будут отличаться, так что придётся получать опыт. Я вообще два новых языка учу сейчас в добавку к имеющимся, но это занимает много времени. "Не проблема" - неоднозначное понятие.
>>1834982 Было стадо языков на которых можно писать быстро но некачественно. Плюсы сделали выводы и позаимствовали много концепций, позволяющих писать по современному, но чтобы все осталось прлизводительным.
>>1834998 >Я понимаю, но пытаюсь по возможности избегать софта проприетарного Не будь шизоидом. Либо ты сидишь под соснолькой в ОпенБЗД, либо не парься. Весь мир, весь энтерпрайз, все правительства, все военки сидят под виндой. Но ты боишься, что товарищ майор запалит, что ты прон с конями смотришь.
>>1831651 (OP) Можете показать нормальные примеры натягивания Си-каши на современные кресты? Пердолю Вулкан и это пиздец. Всё зависит от всего, для нормальной инкапсуляции в классах надо везде лепить костыли, уже вчера словил цикличную зависимость в этом пиздеце и дебажил час. Как вообще работать с этим не в Си-стиле? В туториалах к Вулкану вообще в один класс сваливают портянки из 2к строк, выглядит как пиздец.
>>1835132 Я вот так примерно делал. https://gcc.godbolt.org/z/oPMTqz Если хочется как-то обернуть, придётся смириться с избыточным хранением хэндлов где попало. Я оборачивал так, чтобы во-первых, не уйти сильно далеко от вулкана мои хэндлы напрямую кидаются в функции вулкановские из-за возможности неявно кастовать, во-вторых, чтоб деструкторы были, и чтобы всю многословность вулкана с кучей опциональных параметров скрыть куда-нибудь к хуям.
>>1835166 Почему не .hpp? Хуй знает, наверное, я о его существовании даже не знал. Или знал, но почему-то выбрал сишку. Не помню. Не с++20 потому, что писалось, когда ещё не с++20. Ну и рановато пока, я в следующем году буду всякое своё говно на двадцатые плюсы переносить. Производительность -- это ты про исключения? В Release конфиге у меня на все функции навешивается noexcept, и проброс исключения заменяется std::terminate. Но я задумываюсь о том, чтобы это убрать, потому что вроде и с исключениями не сосёт.
>>1835166 Я, оказывается, сделал то же самое, что и они. У меня в моей велосипедной либе это даже называется точно так же. Только чуть иначе работает.
UniqueHandle for automatic resource management
Vulkan-Hpp provides a vk::UniqueHandle<Type, Deleter> interface. For each Vulkan handle type vk::Type there is a unique handle vk::UniqueType which will delete the underlying Vulkan resource upon destruction, e.g. vk::UniqueBuffer is the unique handle for vk::Buffer.
For each function which constructs a Vulkan handle of type vk::Type Vulkan-Hpp provides a second version which returns a vk::UniqueType. E.g. for vk::Device::createBuffer there is vk::Device::createBufferUnique and for vk::allocateCommandBuffers there is vk::allocateCommandBuffersUnique.
Note that using vk::UniqueHandle comes at a cost since most deleters have to store the vk::AllocationCallbacks and parent handle used for construction because they are required for automatic destruction.
>>1835260 Если б это был бы настоящий объект с конструктором и деструктором - то да, он каждую бы итерацию создавался и уничтожался. Ты мог бы сам написать тестовую прогу и выяснить это. А так, наверное компилятор тупо зарезервирует память под переменную (может даже регистр) на весь цикл, и будет записывать туда единицу каждую итерацию. Никакого "удаления" не будет. У int нет деструктора. По окончании итерации, эта память попросту объявляется ненужным мусором, поверх которого можно записать всё что угодно.
>>1835319 "Объект" в C++ - это эфемерное понятие. Есть память, все объекты живут где-то в каких-то её местах. У них можно взять адрес (т.е. узнать, где именно в памяти они находятся). Как там распределяется память на стеке под автоматические переменные функции - это интимный вопрос компилятора. Язык C++ это никак не регламентирует. Создание и удаление объектов - это условность. Сегодня мы считаем, что на этом участке памяти объект существует, а завтра его уже нет. По правилам C++, создание объектов предваряется конструктором, а удаление завершается деструктором. Но вполне можно сделать трюк, начав считать некий участок памяти уже существующим объектом, без вызова конструктора. И попросту освободить память или переписать её, без вызова деструктора. Ты просто кастуешь нужный указатель на void к желаемому типу указателя на объект, и обращаешься по этому указателю как ни в чём ни бывало.
>>1835319 Лучше всего тебе ознакомиться с генерируемым ассемблерным кодом. Моя гипотеза в том, что возможно, в stack frame твоей функции, резервируется место под переменную i. Когда исполнение программы доходит до цикла, в эту переменную начинается записываться единица. После окончания цикла - про переменную все попросту напрочь забывают. Деструктора же нет, формальное уничтожение даже не требуется. Но оптимизатор, ежели не выкинет переменную, может её разместить прямо в регистре процессора. Тем более, никто её адрес не берёт.
>>1835326 >Создание и удаление объектов - это условность. Сегодня мы считаем, что на этом участке памяти объект существует, а завтра его уже нет. Поясню ещё. Вот есть создание объектов на куче, через new. Этот new выделяет участок памяти, размером ровно в твой объект, где он может быть размещён. Затем, если нужно, вызывает конструктор. После этого, считается (условно!), что на этом участке памяти объект существует. На самом же деле, тут никаких грома и молнии с небес не раздаётся, и ничего в компьютере внешне не меняется. Как была та память, так она и остаётся. В конечном итоге ничего может и не случиться - и даже значения байтов памяти на том участке могут остаться прежними. Единственно что, гарантируется что до удаления объекта через delete, память на этом участке уже не будет повторно выделена кому-либо ещё. Т.е. объекты не будут пересекаться в памяти.
>>1835337 Это очень туманные объяснения "на пальцах". Что скрывается за "новая переменная x"? С точки зрения C++, да действительно, в цикле объявлена новая переменная x. Только вот, как это будет выглядеть внутри компьютера, и в ассемблерном коде, генерируемом компилятором? Где в памяти она будет размещена? И в памяти ли вообще?
Кто использовал doctest? Я пол-дня уже читаю доки, не могу понять - вот я хочу добавить тесты в мою небольшую программу, это не библиотека, у меня есть main с моей логикой. Предлагаемый вариант писать тесты прямо рядом с прод кодом предполагает, что запуск тестов будет производиться вместе с моим main'ом и будет менеджиться при помощи cli? Как мне разделить всё это дело? Или может в сторону чего-то другого лучше посмотреть? Первый раз за тесты взялся.
>>1835337 Выносится, это же не скриптовая дрисня. Тут компилятор сначала сканирует всю функцию на создание переменных. И условно говоря выносит объявления переменных в начало. Кстати не исключено что в каком нибудь случае типа { int x = 1; ...} { int y = 2; ... } Он может использовать одну и ту же область памяти под обе, ведь их время жизни не пересекается.
>>1835443 Любые тесты подразумевают что при запуске программы запустится не ее main, а main теста. Поэтому в их примере запуск экзешника печатает не факториал, а отчет по тестам. Судя по докам, все что там требуется задать дефайн и сделать один инклюд. В принципе это уже твое дело, ты можешь этот дефайн хоть в коде указывать, хоть в cli, хоть в cmake. Главное что main должен остаться либо твой либо их. (Ну или твой тестовый) В принципе можешь и разделить по файлам, типа один файл с main настоящим, он подключает все остальные твои файлы, а второй файл с main тестовым, он тоже подключает все файлы, а собираешь ты либо тот, либо этот.
>>1835560 >>1835558 Хорошо. А как понять почему он не открывается? Сейчас все заработало кста. У меня файл для открытия лежал в папке, где права админа нужны, поэтому не работало
>>1835624 Прикольно. А вот что делать человеку, который совсем не программист, но хочет программой попользоваться для работы с файлами, а программа файл не открывает? Как он поймет что не так? Должно же быть решение адекватное. Ок, пусть не адекватное, но хотя бы работающее
>>1835685 Тот анон неправильно выразился. У переменной int x в конце каждой итерации деаллоцируется место хранения (automatic storage в данном случае): https://en.cppreference.com/w/cpp/language/storage_duration >automatic storage duration. The storage for the object is allocated at the beginning of the enclosing code block and deallocated at the end. All local objects have this storage duration, except those declared static, extern or thread_local. В результате этого у объекта закончится время жизни: https://en.cppreference.com/w/cpp/language/lifetime >The lifetime of an object ends when: <...> the storage which the object occupies is released В результате окончания времени жизни вызывается деструктор: https://en.cppreference.com/w/cpp/language/destructor >A destructor is a special member function that is called when the lifetime of an object ends Так как int тривиально разрушим, программа не обязана вызывать деструктор при его уничтожении: https://en.cppreference.com/w/cpp/language/lifetime >A program is not required to call the destructor of an object to end its lifetime if the object is trivially-destructible or if the program does not rely on the side effects of the destructor.
>>1835561 Как проверять тебе уже ответили - через is_open. А вот как понять почему не открывается я хз, можно ли вообще. С помощью winapi функций вроде можно. >>1835677 https://carbon.now.sh/
Подскажите, хочу обучиться с++ и такая проблема: 1 - создаю пустой C++ проект 2 - пкм - Properties 3 - почему у меня нету настроек C++? Во всех гайдах и постах он есть, а у меня нет. Что делать?
ХОЧЕШЬ КОРУТИНЫ C++20 С ASIO @ error: сосать, в asio ошибки с концептами, еще какая-то непоправимая хуйня @ НАХОДИШЬ ИСПРАВЛЯЮЩИЙ КОММИТ ВЫПУЩЕННЫЙ РОВНО ЧЕРЕЗ ДЕНЬ ПОСЛЕ РЕЛИЗА @ КАЧАЕШЬ МАСТЕР И СОБИРАЕШЬ @ error: ваша версия gcc говно @ КАЧАЕШЬ HEAD GCC И ЕБЕШЬСЯ С КОНФИГУРАЦИЕЙ AUTOTOOLS, ПОИСКОМ НУЖНЫХ ЗАВИСИМОСТЕЙ И ИХ ЗАВИСИМОСТЕЙ LIBBISON LIBFLEX LIBHYUSON, БУТСТРАПИШЬ КОМПИЛЯТОР ПО ГАЙДУ ИЗ ИНТЕРНЕТА @ НЕ ПОФИКСИЛИ
Типичный C++xx в 20xx году. А столько же мучился, чтобы рабочий <filesystem> на винде в 2017 получить.
Сап, дали в шараге нам изучать С++. Лекции не читают, кидают только методы и делайте лабы сами. Есть простенькая задачка по вычислению площади треугольника формулой герона. После того как вводишь значения сторон, нужно чтобы они были больше нуля и когда сумма любых двух его сторон больше третьей(существование треугольника). Короче в if я задал несколько условий, но они не выполняются, ни одно. Че я сделал не так, помогите пожалуйста.
Как фиксить? До этого dll просило, я все скопировал в папку с программой. Потом мне надо будет прогу другому человеку скинуть. Мне ему со всей этой швалью кидать или можно как то все в exe одно ужать? Ну это сейчас не важно.Важно что я программу запустить не могу
Аноны, а модели в Qt вообще сами обновляются, если я данные меняю, или нужно самому обновлять как то. Нихуя не могу понять. Вот у меня QTableModel с контейнером QImage внутри. Когда я меняю один из QImage в модели, он же должен автоматом на QTableView меняться, не?
>>1836360 >>1836413 В душе не ебу, из всего твоего я только понимаю, что где-то ошибка выскочила, а что там у тебя где в студии или еще где - не видно отсюда
>>1836433 >>1836481 Предлагаете комитету добавить в стандарт такое понятие, как консоль? Или объясните, как вы собираетесь выводить в консоль utf-8, если у вас cp886?
>>1836483 Ты так заблудился, молодой падаван... У тебя есть ПОТОКИ ввода и вывода. У потоков есть операторы. Должен быть оператор, задающий желаемую кодировку для ПОТОКА. Прочего быть не должно.
Сап крестаны, я нечеловек фул прости господи стек на жс. Лет где-то 20 назад когда был школотроном занимался коданьем на Visual C++6 всякой 2д игройобы по книжке Ламота (пикрелейтед). Доставляло неимоверно. Ну кароч я великовозрастный долбаёб решил что грести на галерах до пенсии опасно для психики. Хочу медленно обратно вкатится в плюсы и нет, не геймдев, а скорее в проекты уровня Годота. Ну то есть как бы в качестве хобби делать тухлы, контрибьютить в открытие проекты, может быть написать рогалик. Так получилось что мой работодатель оплатил мне годовую подписку на электронную библиотеку О’Рилли. Собственно я себе составил план прочитать за год несколько книг и написать кода разного уровня сложности. Шапку читал, часть списка взял оттуда, часть нашёл на Амазоне по рейтингу. Кароч анон, закотируй мой список:
1. C++ Crash Course 2. Effective Modern C++ 3. C++ Concurrency in Action 4. Game Programming Patterns (эта внешняя) 5. C++ Game Programming 6. SFML Game Development
Вот думаю всё это осилить, параллельно кодать классику на бесплатным арте: тетрис, понг, астероидс и так далее. Великолепный план? Точный как швейцарские часы?
Как же вы все заебали с мечтами о фрилансе. Фриланс - это нищая хуевая работа за копейки, тебе скидывают то дерьмо, которое лень засунуть кому либо еще.
Удаленная работа полноценная - это совсем другое, но там набор от сениоров начинается.
>>1836516 Потому-что в мирочке С++ от джуна больше вреда, чем пользы. Если в каком-нить жопаскрипте или питоне худшее, что может быть это эксепшен, который ты поймаешь.
То в С++ ты можешь наворотить такого дерьма, которое будет репродюситься раз в пару тысяч попыток, и отлаживать это можно только анализом краш дампов.
>>1836511 Майерс есть весь, понял, спасибо за совет. А по поводу конкаренси не раскроешь мысль? Чому не? Я даже в жс использую воркеры для того что можно параллелить. Думал в современных плюсах это классика, это знать надо, не? Ну там если захочу свой физический движок написать или какую-то хитрую систему ИИ.
>>1836533 Фронтэнд это правильное решение, вкатываться в С++ в 2021 году это надо иметь либо очень большое желание и мотивацию, либо охуенного ментора.
>>1836536 Да ну нахуй. Я с малых лет в компах и электронике в целом, а с недавних пор ещё и в науке. Для меня этим макакингом заниматься - зашквар. Так что буду ловить балдёж на байтоёбстве.
>>1836427 Либо потрахаться и собрать Qt в статике, и прогу тоже собирать в статике, да ещё и ровно с теми же параметрами, что Qt. Оно того не стоит, лучше dll рядом таскай
>>1836541 >>1836536 Вот это вот наверное нужно всем желающим вкатиться объяснять, мб даже в шапке написать. Устроиться на работу сложнее, чем в других областях. Там, где используют С++ (если мы не про гуи), обычно также нужно знать вузовскую математику, да и сам язык с устоявшейся инфраструктурой а-ля буст, симейк и т. п. Хочется денег - проще сразу реакт учить. Иначе велик шанс заработать синдром самозванца и ушатать нервы.
Если бы дрочил плюсы прследние гесть лет, то думаю, 100к имел бы(в мск побольше). Изучал бы сейчас предметную область с математикой и рос как инженер.
А пошло все изначально по пизде. Ебаный универ вместо задротства одного языка заставляет каждый пройти на пол шишечки.
По итогу четыре года в жопу. И еще два юнити разрабом, есть то что-то надо.
Все это время смотрел на другие технологии, языки, фреймворки. Так и хз, кого куда. Все какое-то уебанское. Даже норм кроссплатформенного ui нет в 2020 то году. Какое-то приложение запилить, где будет поток данных нон-стоп идти, так все эти виртуальные машины сыпятся из-за сборщиков мусора.
Какие опции есть в 2020? Плюсы довольно универсальны, но работы ноль. Изучать их пять лет, чтобы пойти работать за 50к, и то тебя выебут и высушат на собесах как проститутку конченную.
Дальше пердеть в гейдеве. Ну так опять, там если выйти из снг региона, то более-менее крупные студии со своими велосипедами на плюсах. Да и без этого там предметная область такая, что математика должна быть охуенно выдрочена (шейдера, рендер, геймплей, ии) плюс еще движок, который делают далеко не профессионалы мира программирования.
Либо раз c# косвенно немного познал, то идти в веб. Но там этот веб настолько непостояннен, что хз. Даже если .net брать тат уже за четыре последних лет все изменилось. Завтра наберется критическая масса индусов в майкрософт и они похерят абсолютно все, как и винду. Хотя в .net все вроде збс последнее время. Кроме пожалуй, мобильной разработки.
Также с реактами, хуяктами и иже с ними на js. Какая-то насмешка над миром программирования. Сюр
Что там остается? Java/kotlin. От первого в гугле отказываются на андроиде, второй только благодаря андроиду и живет. Дальше еще никуда не выходил, как я понял. Писать на Java сейчас, когда есть .net, говорят что это такое-себе. Плюс как с андроида уйдет, так никому кроме легаси в банках он не нужен будет.
Про функциональные языки и новые типо go. Ну работы порой больше чем на плюсах, но что там делать, если надо строить карьеру хз.
Резюмируя, не думал что когда буду программистом (хотя бы частично), что такая каша тут происходит. Я, наверное, скоро курить начну. А потом пойду на завод работать аппаратчиком, там до мастера недолго работать. Хоть 100к будет. На ипотеку хватит. А что с программированием делать, куда двигаться дальше?
мимо походу через недельку приму оффер в рога и копыта (но зато наконец на плюсах), потому что для других мест я до сих пор мало знаю, а от всего другого тошнит
Поясните за инстанс шаблона: почему в std-шные контейнеры можно передать любой тип и, самое главное, размер, а мой template<class T, size_t N> class CustomArray; выдаёт undefined reference, если явно не написать template CustomArray<int,1>;
>>1834896 Объясни, как ты собираешься маскировать переполняющийся текст за границами поля? Я охуел, SFML слишком игрушечный фреймворк. У меня были идеи с GL_STENCIL_BUFFER и GL_SCISSORS, но это дохуя вмешательств в OpenGL и в кишки sfml, так что предстоит веселье.
Хотел написать локальную легковесную прогу для капчевания на дваче. Все бы было легко. Если бы не ебучая капча. Она по определению работает только в браузерах. Меня бы даже устроило если бы она всегда показывала картиночки, а я на них кликал (она все равно мне всегда показывает после десятка сообщений). Но такой вариант видимо был бы слишком легким. Поэтому в гугле написали виртуальную машину на JS, которая там чет шифрует как денува, меняет свои опкоды, загружает говно с серверов. Поэтому вопрос - какой есть самый минимальный встраиваемый браузер? Очевидно нужен html + css + js. Блджад, ну не CEF же тащить только ради капчи. Webkit предлагает на винде через Edge. Так это тот же хром будет в памяти висеть. Ну не писец ли? Нет чего помельче? Хотя подозреваю, что если соберу просто из какой нибудь либы рендера и либы жса, гугл меня просто нахуй пошлет за нестандартность.
>>1837400 Это потому, что долбоёбов на планете много. На пустом месте геморрой с инклюдом якобы имплементации, геморрой с переключением между файлами, геморрой с навигацией по символам и т.д. Если уж совсем невмоготу, можно в конец файла реализацию выносить.
>>1836599 Не использую vcpkg, так как с ним геморно держать несколько версий либы. Например, есть 50 проектов, 20 солюшенов, состоящих из некоторого сочетания проектов, и у каждого солюшена - где то 5 вариантов checkout по версиям, не считая 100500 тегов. И собирается это не только у каждого разраба, но и на едином билд сервере. Vcpkg тут похоже бессилен, только ручные props, только хардкор.
>>1838180 Призови в тред нвидию-куна, у них там натянули версионность на vcpkg. Алсо, у MS вроде в дорожной карте по vcpkg есть пункт по поводу поддержки версионности.
>>1838184 Интересно, надо почитать. Было бы круто вместе с публичным либами и свои так опакечивать (с префиксом например). А то иногда случаются версионные казусы, когда две своих либы используют третью, разных версий
Как хрена у майкрософта в delete указано const? У меня из-за этого по виндой пару аллокация-деаллокация распидорасило, потому что мой delete не вызывался. Что за шутки такие? Причём нигде это не указано, он должен быть void⚹, а не void⚹ const.
>>1838257 Этот const ни на что не влияет, у тебя проблема в друго месте. А нужен он затем, чтобы внутри функции нельзя было случайно изменить тот указатель, что тебе пришёл
>>1838541 Я ебу? Ты хуйни кинул милипиздрической по которой нихуяшеньки не понятно ничего и что-то хочешь, ты либо всё высри уж, будь добр, либо сам дальше ебись с этим и не сри в тред.
Хочу вкатиться в с++ 5й раз уже наверное. Подскажите книги или статьи по которым можно. Да мог бы сам загуглить (и гуглил уже), но во всех гайдах замечаю резкие рывки между материалами из-за которых остается много вопросов (например прикрутим какую-то либу и в слепую используем её методы без разъяснений).
>>1838393 После твоего поста я присмотрелся — действительно не может влиять никак, лол. Но влияет, лол. msvc перестаёт воспринимать мой оверлоад как валидный.
сап двач, можете обяснить что за ошибка в VS code при запуске компилятора g++: launch: program ' does not exist уже несколько часов долблю себе голову как его запустить
>>1839026 Это потому что его нет. Но смотреть надо не в ту сторону: > if (i & (1 << j))) i здесь скорее всего индекс, значит потенциально size_t, потенциально uint64_t. А что происходит, когда мы делаем левый сдвиг 32 битной переменной с последующим расширением до 64 бит?
Так, ананасы. Сделал класс небольшой. Суть в том что он принимает две лямбды: одна вызывается в конструкторе, а другая в деструкторе. Суть такая же как и у std::lock_guard практически. https://pastebin.com/raw/ayciFuq6 (там это ещё внутри класса происходит) Но v почему-то остаётся нулевым после конструктора. Почему оно не срабатывает как задумывалось?
>>1837233 > Объясни, как ты собираешься маскировать переполняющийся текст за границами поля?
Что ты имеешь ввиду? Типа если в textbox какой-нибудь записали строку которая превышает визуально максимальную длину? Тогда тебе надо просто рендерить фрагмент строки который визуально влезет в поле. Если про поле со скроллингом, то надо писать расчёт переноса строки учитывая размер шрифта, внутренний отступ и размер виджета. Алсо, у sfml есть класс View, он может послужить заменой gl_scissors
Байтослесари, через какое время после начала изучения языка вы вкатились на работку? Что это была за работа и какая зп? С какими знаниями вы выходили и многому ли научились за время работы?
Кто нибудь работал в qt с qstyleditemdelegate? Нужно отобразить иерархический список с иконками,чекбоксами и текстом под ними (и точно такой же - горизонтально), в куте пишут что надо самостоятельно рисовать через делегаты. Долблюсь в документацию и 1.5 примера, но не могу догнать как там рисовать.
>>1831651 (OP) Какой же пиздец. Вместо написания кода утро началось с ебли со студией. Ебучая мокрописька от джетмозга после апдейта отказывается видеть stdint.h, вот просто не видит именно этот инклюд и серит ошибками на инты, уже как только его не прописывал. А ещё эта поддержка симэйка в Студии, просто топ - половина плагинов отказываются с ним работать и просят солюшен, хоть одна пердоля обновила бы свой плагин за 2 года. CLion в принципе говно с тирингом и автокомплитом для пердолей, не хочу даже шкварится. Ещё и clang не работает нормально, джетмозг же. Хоть на голую студию садись - фич мало, но зато работает нормально.
>>1839997 > Почисти кеш Естественно погугли сам. Чистил кеш в настройках, чистил руками в папках, жал suspend, прожимал все возможные переиндексации проекта - нихуя не помогло. Собирается естественно без проблем.
Собираю код под Windows и под Android, проблема с parallel for, десять строчек тут: https://codeshare.io/GAePqv Под винду concurrency::parallel_for_each() работает потрясающе, под android ppl.h не существует, и единственный способ организовать параллельный for, который я нашел - это openpm. И как бы я не изгалялся, openmp дает внушительную просадку по производительности. Сравнивая скорости, обычный последовательный for работает медленее, чем виндовый, но намного быстрее, чем openpm. Может, я что-то упускаю с openpm? Я допускаю случай, что на каждой итерации у меня настолько быстрые вычисления, что спавн новых потоков дает только перерасход по времени. Но виндовая параллельность как-то же с этим справляется. Есть ли еще какой-то способ организовать параллельный for на андроиде?
Прошёл полный курс по языку, пококодил разной херни там + смачно так подрочил stl. Что ещё докинуть к этому всему чтобы меня взяли на работку? Высрать какой-нибудь годный пет в попенсор с и ждать инвайтов или нужно знать что-нибудь ещё?
>>1840069 современный с++ - это эзотерический язык, изучается с целью получения удовольствия как хобби ни о какой работе за деньги речь не идет, тебя наебали если планируешь иначе даже нвидиа-кун с зп 300кк в секунду занимается на работе всем, кроме собственно написания кода на с++, хотя по должности типа погроммист с++ вот так вот
>>1840069 >Высрать какой-нибудь годный пет в попенсор
Вощем высри 64 бит avisynth vfw кодек который может avi stubs где внутри вшит avisynth скрипт чтобы такой avi файл можно было открыть в adobe after effects
>>1840152 >даже нвидиа-кун с зп 300кк в секунду занимается на работе всем, кроме собственно написания кода на с++, хотя по должности типа погроммист с++ Мне недавно дали немного пописать на сиплюсплюсе кстати! Но у меня должность такая ебанутая, т.к. у нас все могут писать на С++, а вещами которыми занимаюсь я - могу заниматься только я.
>>1840213 ну и продолжая - мы недавно обсуждали, что вообще все наши компоненты (кроме драйвера офк) можно переписать на Сишарпе. Было бы сильно проще с точки зрения мейнтейнабили и скорости разработки, но увы. Быть может, когда-нибудь перепишем.
>>1840025 Использовать С++17 template< class ExecutionPolicy, class ForwardIt, class UnaryFunction2 > void for_each( ExecutionPolicy&& policy, ForwardIt first, ForwardIt last, UnaryFunction2 f );
В надежде, что при std::parallel_policy в твоей STL оно работает через какой нибудь пул потоков / concurrency рантайм и т.д.
>>1840167 не работаю щас погроммистом но в качестве развлечения смотрю как меняется с++, те как те вещи которые делались в книжке александреску можно сейчас делать на крестах, стало удобней но скучней то же самое с stl: как изменили язык чтобы делать библиотеки типа stl симпатичней с точки зрения синтаксиса
>>1839397 Кстати да, иногда заглядывал в потроха kernel32 и ntdll? лбопытно как некоторые вещи работают именно в винде а не в Wine. Теперь можно попробовать утёкшие сорцы скачать
>>1840268 пожалуй я неверно выразился, само собой, юзермод компонент драйвера тоже на крестах, там перф нужен. А более он нигде не нужен у нас в стэке.
>>1840255 >то же самое с stl: как изменили язык чтобы делать библиотеки типа stl симпатичней с точки зрения синтаксиса
Очень интересно это всё (stl, qt, com) может поменяться когда сделают метаклассы, и вместо пространных описаний-соглашений (типа что такое итератор, аллокатор, com-интерфейс, coclass, сигнал-слот, Q_OBJECT) будет код. Тогда и часть MOC можно будет выкинуть - смотри https://wg21.link/p0707
Аноны, помогите аутисту сварить лапшу. Как запилить лямбду, считающую в compile-time некую константу и возвращающую указатель на него? Строго в одну строчку. Вот к такому constexpr прилепить или ещё что. Пытался куда-нибудь меж скобок присунуть, но не лезет. []() -> auto⚹ {auto a = 1; return &a; }()
>>1840439 А в чём проблема положить указатель сразу за интом в кучу, указывающий на -8 байт назад? Я могу заранее определить куда надо указывать, а компилятор не может?
>>1840395 >Я допускаю случай, что на каждой итерации у меня настолько быстрые вычисления, что спавн новых потоков дает только перерасход по времени. Но виндовая параллельность как-то же с этим справляется. >Забыл написать, что ExecutionPolicy не реализован под Android, да.
Тогда печаль. OpenMP как раз может быть сделан через создание новых потоков, и тогда всё грустно - это дорогая операция. Виндовая параллельность работает либо через свой пул потоков, либо через виндовский CreateThreadpool - начиная с висты. И вообще их много - Concurrency, AMP, PPL, OpenMP (в студии не свежий 2.0 и частично запилены SIMD extensions. Народ хочет 4.0+), STL Extensions for parallelism (тут надо смотреть как реализованы. причем в разных версиях винды может быть разный бекенд)
>>1840435 >Пытался куда-нибудь меж скобок присунуть, но не лезет. Смотри же спецификацию >[ captures ] <tparams>(optional) (C++20) ( params ) specifiers exception attr -> ret requires(optional) (C++20) { body } Куда specifiers, туда и constexpr: https://godbolt.org/z/z6e6on
Есть класс. Для него делаю move конструктор, но в теле этого класса есть POD структура. Нужно ли делать у этой POD структуры конструктор перемещения или компилятор сам делает?
>>1840445 Так может и мне у себя организовать пул потоков? Чтобы крутились весь рантайм и проверяли, не появились ли новые данные у них для обработки. Или только хуже сделаю?
Нихуя не понимаю как ебучая while работает, мб я тупой и ойти не мое, можете пояснить дауну почему блять в мейне вводится cin и блять в while вводится Син, какого хуя?
>>1840731 >Забей хуй. Прога это не твое Но я всегда мечтал вкатится в с++ и писать проги, есть желание, вроде мозги тоже есть, но многие вещи в голове не укладываются(
>>1840736 Что у тебя в голове не укладывается? Простые языковые конструкции? Это еще даже не ЯП, а что-то общее. Как ты речь человеческую понимаешь вообще, у меня вопрос?
>>1840726 >почему блять в мейне вводится cin и блять в while вводится Син, какого хуя Велкам ту Си++, инжой ёр implicit conversions. Там суть в том, что cin можно неявно привести к типу bool, и внутри while именно это и делается. Если оператор приведения вернул false - входной поток закончился (или что-то пошло не так), если true - ещё можно оттуда читать. Вот документация: https://en.cppreference.com/w/cpp/io/basic_ios/operator_boolЕсли честно, cin и cout в принципе хреново спроектированы, лучше используй сишные функции fopen/fread/fwrite или какой-нибудь fmtlib.
>>1840748 >Велкам ту Си++, инжой ёр implicit conversions. Там суть в том, что cin можно неявно привести к типу bool, и внутри while именно это и делается. Если оператор приведения вернул false - входной поток закончился (или что-то пошло не так), если true - ещё можно оттуда читать. Вот документация: https://en.cppreference.com/w/cpp/io/basic_ios/operator_bool Если честно, cin и cout в принципе хреново спроектированы, лучше используй сишные функции fopen/fread/fwrite или какой-нибудь fmtlib. Добра тебе! Теперь понял
>>1840744 >Что у тебя в голове не укладывается? Простые языковые конструкции? Это еще даже не ЯП, а что-то общее. Как ты речь человеческую понимаешь вообще, у меня вопрос? Сейчас бы сравнивать машинный язык и человеческий))) в жизни тоже через 101010101 отвечаешь ?
>>1840754 Челик не в курсе что ЯП это и есть человеческий язык, только строго ограниченный компилятором Что тебе конкретно не понятно допустим вот в этой конструкции: Пока (есть моча) { ссать }
>>1840753 Нет, в принципе стримы нормальная идея, но не конкретно iostream. Ну кто догадался иметь глобальный стэйт в стримах, кто догадался совместить флаш и новую строку, кто догадался сделать такое хреновое апи для получения ошибок?
>>1840758 >Челик не в курсе что ЯП это и есть человеческий язык, только строго ограниченный компилятором >Что тебе конкретно не понятно допустим вот в этой конструкции: >Пока (есть моча) >{ ссать }
Как ты думаешь? Я Кун 25лвл получивший вышку по геологии и работаю сраным менеджером за 50к, сейчас осознал что мне нравится заниматься коддингом и начал его самостоятельно изучать , собственно изучаю базовые понятия и как они работают, вопросов много и они для вас как сходить посрать, а для меня как целая вселенная
>>1840766 Что не так? Сейчас на крестах поймет как работает память, указатели, стек и всю хуйню, после чего вкат в любой другой новомодный язык будет занимать неделю.
>>1840766 >Тогда ты уже дважды обосрался. Первый что вообще начал изучать сраные, сцаные, обосранные уебищные блевотные вонючие кресты Я прос >>1840767 >Когда впервые смог написать код для обычного калькулятора Сейчас просто решаю задачи на stepik.org параллельно изучаю теорию, более менее знания накапливаются, желание и упорство заниматься этим у меня есть
>>1840769 Че Ты его вопросы видел? У него на вкат пару лет уйдет. Нет ну есть, конечно, разные подходы к изучению проги, но советовать челу 25+ лет начать вкатываться с изучения крестов, ну это я не знаю. Зачем так жестоко шутить кароче?
>>1840775 >Ты его вопросы видел? У него на вкат пару лет уйдет. Нет ну есть, конечно, разные подходы к изучению проги, но советовать челу 25+ лет начать вкатываться с изучения крестов, ну это я не знаю. Зачем так жестоко шутить кароче? Даже пусть пару лет, я вообще под это дело планирую 5 лет потратить
>>1840786 >Ха, нормально. Ну мне даже интересен стал твой бизнес план. Потратишь ты в общем лет 5, дальше че? А что должно быть дальше? Если мне нравится, то можно назвать это дело как хобби, возможно стану писать проги на заказ или вкачусь в айти компанию на работу.
>>1840875 Как я понял из википедии, в UTF-8 для разных символов разная длина в байтах. Так, например, для английских букв - 1 байт, а для русских - 2. Но тогда возникает вопрос, каким образом обрабатывать такую строку, ведь пробел так же занимает один байт?
>>1840878 Это... сложно. Если передать всю строку, то в линкусе будет работать как есть. Если же тебе нужно передать один символ, то придётся парсить входной поток и разделять его на code point'ы. Хорошее упражнение, кстати, там ведь довольно простая кодировка. В тяжёлых случаях используют какую-нибудь библиотеку для работы с юникодом, например ICU. В UTF-8 ещё есть одна полезная хакафича: если тебе важно только сравнение с определённым символов ASCII, например, пробелом, то тебе просто достаточно каждый char сравнивать с 0x20 (' ').
>>1840880 Нет. Если настроишь локаль на условный CP1251, где русские символы однобайтовые, то входная строка тоже должна быть в CP1251. А вроде как во всех компиляторах по умолчанию строка вида "Привет, мир" будет кодироваться в UTF-8.
>>1840949 >во всех компиляторах по умолчанию строка вида "Привет, мир" будет кодироваться в UTF-8 В той же кодировке что исходный файл не? Плюс всегда есть -finput-charset=...
>>1841086 >В той же кодировке что исходный файл не Честно, не помню. Возможно и так. >Плюс всегда есть -finput-charset=... Тяжёлая артиллерия пошла в бой.
По моему мнению лучше уж тогда явно префиксы прописывать (u8, u, U).
Есть класс А с нетривиальными конструктором и деструктором Следующий код: void Foo() { Shader shader(filename); } работает безошибочно в 100% случаев, тогда как void Foo() { auto shader = new Shader(filename); delete shader; } Вылетает с double free or corruption в 100% случаев Как это можно объяснить?
Что лучше? Это или это? Написанное dr я вообще не понимаю. Что происходит на второй картинке? Результат отличается от того, что с моим кодом, что слева.
>>1841207 В первом случае взяли из массив сначала первый байт, потом второй байт, положили эти два байта рядом друг с другом и прибавили к результату. Первый байт при этом старший. Второй — младший.
Во втором случае взяли указатель на первый байт, преборазовали его в указатель на unsigned short, исходя из предположения, что он представляет собой два байта, а затем разыменовали указатель, присвоив полученные два байта переменной word. Какой байт при этом окажется старшим, а какой младшим — зависиит от платформы. На распространённой little-endian первый байт окажется младшим, а второй — старшим. Тоак что да, результат может отличаться.
>>1841214 >Что правильнее? Без разницы. Вся криптография во всём мире строится на том, что один раз кто-то делает reference-implementation, а все остальные, кто хочет соответствовать какому-то стандарту, делают так, "как у них".
Грубо говоря, нужно делать так, чтоб результат сходился. Иногда для этого не приходится делать дополнительных действий, а иногда приходится разворачивать байты.
>>1841219 Контрольный пример? Ты про список ключей для хеширования? Есть. Но с тем и с другим способом перевода ключа в число результат сильно отличается.
>>1841270 >>1841271 С чего бы, блядь? От какого-то такого "твоего имени"? Ты где находишься?
Ты выложил кусок кода, кто-то спросил, а не похож ли второй скрин на UB. Спросил в треде. Не у тебя в личке. Я посмотрел внимательно и одобрительно кивнул — да, действительно: UB (исходя из предположения, что key — [unsigned] char array).
>>1841292 Это американцы неграмотные ou не пишут, от них это пошло. У них свой англюсек. И статьи на английском если без ou, где оно должно быть, это детектор безграмотного автора пиндоса.
>>1840949 Вот это да. Получается, что в C++ в 2020 году до сих пор нереализована поддержка UTF-8? А ещё высокоуровневый язык называется. В Java такой проблемы, кстати, вообще нет.
Здравствуйте! пытаюсь вкатиться в с++, первое что выдало гугл для написания кода в с++ это - vs code пользуюсь им два дня. И за эти два дня у меня запустилась только 1 программа(и то по какому-то пендосскому туториалу с 10 раза). Что удобнее использовать в этом плане или как можно настроить этот проклятый vs code для без геморрной работы?
>>1841463 Во-первых, либо gcc main.c, либо g++ main.cpp. Во-вторых, тот анон прав. Лучше всего Code::Blocks или Dev-C++ на Windows 7 с кодировкой Windows-1251. Потому что ни Си, ни C++ в любом случае UTF-8 нормально не поддерживают и на Линуксе ты будешь страдать.
>>1841467 Что кокблокс, что девС++ мертвая некропараша. Либо вижуал студия, ну либо шлион уж. Все, третьего не дано (ну окей, культикриэйтор еще, но он без кутей оно не нужно)
> А, ясно, это троллинг. В чем троллинг? Вижуал студия это топ1 IDE в данный момент, очень дружелюбна к новичкам, дохуя всего дает профессионалам. В ней пишут дохуя профи, в консоли и прочих CODE BLOCKS пердолятся только студентики и сектанты.
>>1841483 >пик1 Ну и что, оно же работает. >пик2 Последний апдейт в этом году. Или тебе нужно, чтобы новая версия выходила каждую неделю, чтобы там обязательно что-нибудь ломали и из-за этого у тебя всё не работало? >В чем троллинг? Ну она же весит 50+ гигов, запускается несколько минут и вообще максимально перегруженная, тяжеловесная, неповоротливая и неудобная.
>>1841489 > Ну она же весит 50+ гигов, запускается несколько минут и вообще максимально перегруженная, тяжеловесная, неповоротливая и неудобная. Вот и спалили студентика с ноутбуком для учебы 2 ядра 2 гига. На моей машине она стартует несколько секунд, а ССД на 2 терабайта абсолютно похуй, сколько там гигабайт (и да, оно весит 8, а не 50).
>>1841501 Ебанулся? У нас весь прод на С++17, с кучей всяких structured bindings, иф констэкспров и прочих клевых вещей. Статический анализатор в виде решарпера (и clang-tidy) используется всеми в команде. Мы же прод пишем, а не лабы.
>>1841498 Держи открытие Анреал Энжина 4 в вижуал студии на компьютере, а не на ноутбуке для учебы.
>>1841532 >Необязательно Да, но так правильней. C и C++ это не одно и то же. >Толсто Всмысле? На винде просто прописываешь setlocale(LC_ALL, "Russian"); и работаешь с русскими буквами как с элементами массива. А на Линуксе... Ну, ты просто взгляни на пердолинг выше.
>>1841566 Допустим что? Какого типа элементы массива на Винде, если вмещают кириллицу? А кану они в то же время вмещают? Если нет, там кодовые страницы а ля Дос?
8 лет опыта коммерческой разработки (4 разные конторы), ни разу не имел необходимости выводить в консоли символы, отличные от латиницы. Вообще нигде кроме сраных лаб местных школьников не видел такого.
>>1841584 >Какого типа элементы массива на Винде, если вмещают кириллицу? А кану они в то же время вмещают? Если нет, там кодовые страницы а ля Дос? Зачем нам эта информация? Мы на ассемблере будем программировать или на языке высокого уровня? Факт в том, что в Windows индексация по массиву из кириллицы просто работает, а на Линуксе - нет.
>>1841600 Очевидно. Но ты просто представь, на сколько это затрудняет и усложняет обработку строки. В той же Java этой проблемы с юникодом нет, и меня действительно удивляет, почему в C++ в 2020 настолько базовая вещь до сих пор не реализована.
>>1841618 Если я не ошибаюсь, это только входная/выходная кодировка при конвертации по умолчанию. При работе с чистыми String там внутри UTF-16, и размер char 2 байта.
>>1841627 И снова я тебе говорю, если тебе попадётся суррогатная пара, то одна из итераций у тебя будет на пол-символа. Да, все символы для которых они нужны находятся за пределами Basic Multilingual Plane, но они, блин, существуют, и все эмодзи и прочие там. То, что ты итерировался, лишь означает, что тебе просто повезло с входным текстом.
>>1841636 >однобайтные кодировки Даже не думай, я в своё время настрадался с кодовых страниц. Мир не ограничивается 256 символами, EBCDIC и остальные должны были остаться в семидесятых, где им и место.
>>1841652 Проблема в том, что UnicodeString это уже не просто String, и взаимодействовать с ней как с обычной String, использовать функции для String уже не получится. Ну и зачем тогда это?
вот есть классы систем, они как бы главные. Например система EventManager которая узнает что были события, и передает об этом факте подписчикам. Или система ConfigManager которая хранит текущие глобальные конфиги. Или LogSystem который маневрирует логами. Ну и в таком духе. Систем десятки.
Как организовать между ними связи по красивому?
Синглтон не хочу (вдруг мне понадобится разные ConfigManager в зависимости от условий?).. Завязывать прям все на синглтоны не красиво. Завязывать только пару систем - задают вопросы, почему вот тут синглтон, а вот тут указателем передал.
Передавать между ними указатели не хочу - не люблю когда в методы (или конструктор) передается дохрена всякого.
А еще хочу чтобы каждая система не знала ничего о других кроме тех, которые ей могут понадобится...
>>1841761 >не люблю когда в методы (или конструктор) передается дохрена всякого. Ну сделай класс контекст, в котором ссылки на текущие системы, и только его передавай. Класс будет реализовывать интерфейсы получения этих систем, и другие системы будут дергать только нужные доступные им интерфейсы а не целиком контекст.
Как сделать перевод в обратный код на си++?
Cybeer28/10/20 Срд 10:35:38№1841840517
нужно короче ввести в 10сс сложить в дополнительном коде, и перевести результат в обратный код, всё работает если числа с положительным знаком, если отрицательный знак как эту херь организовать? Код который работает: #include <iostream> #include <locale.h> #include <stdio.h> int main() { setlocale(LC_ALL, "Russian"); int A,B,C;
printf("Введiть перший операнд:\n");
scanf("%d", &A);
printf("Введiть другий операнд:\n");
scanf("%d", &B);
C=A+B; for(unsigned q=1U<<3; q; q>>=1) putchar('0'+!!(A&q));// вывод первого операнда putchar('\n'); putchar('0'+!!(B&q)); //вывод второго операнда putchar('\n'); putchar('0'+!!(C&q)); //вывод результата сложения
>>1841655 >UnicodeString это уже не просто String, и взаимодействовать с ней как с обычной String, использовать функции для String уже не получится Внезапно, в C++ почти все алгоритмы построены на итераторах. Тебе вообще не важно, как устроен контейнер, если он предоставляет интерфейс к ним. Степанов всё-таки не зря старался, когда STL писал.
>>1841761 >Передавать между ними указатели не хочу - не люблю когда в методы (или конструктор) передается дохрена всякого. Во всех компаниях, где я был (целых трёх, две из них большие), сначала использовали самописные сервис локаторы, но потом все всё равно переходили на обычную инъекцию зависимостей через передачу сервисов в конструкторы. Логгеры, настройки, всякие сервисы, даже время - всё явно.
>>1841956 Под линуксом работают только маргиналы. Посмотри на любую конференцию - у всех либо маки, либо синкпады. Пердоликов с линуксом - статистическая погрешность.
>>1841519 Представь, приходишь такой к тимлиду, он тебе протягивает руку пожать, а ты ему средний палец на ноге тянешь. Я бы на его месте тебе тоже сегментацию зафаултил.
Аноны, есть иерархическая модель собранная на QStandardItemModel. Отображаю её в QTreeView, нужно еще отобразить эту модель в QListView, но эта view не видит элементы вложенной иерархии. Можно как-то заставить её их увидеть, не дублирая все в новую? Думал что QProxyModel спасет, но не нашел пока способа.
Ананасы, есть такая либо для интерфейса imgui. Всё заебись с нею, конечно, но пока пара окошечек на экране. Кто-нибудь делал интерфейс где чуть больше чем два окошечка? Как всё это организовать вместе?
>>1842423 Ничего. Я сделал сабкласс от QStandrItem, данные храню в них (пары значений имя - индексы sql-евской БД), ну и по QIcon в каждом объекте. >А хотя может и один столбец... Один, посмотрел по дебагеру. Там скорее всего просто parent хранит ссылки на childов как в дереве. >ListView скорее всего читает только первый столбец. Известно, каким методом читает? Его можно переопределеить?
Годнота или говно?
Аноним28/10/20 Срд 21:58:11№1842465539
>>1842419 >>1842335 >>1842463 Нашел решение - достаточно переопределить в ProxyModel RowCount(), ColumnCount(), MapToSource(), MapFromSource() и слоты при изменении данных. Таким образом можно "распрямить" дерево.
Ньюфаг итт. Следуя рекомендациям повторяющийся участок кода оформил в виде функции-процедуры, но вот незадача, переменные стали локальными. Очень хотелось сделать их глобальными, но рекомендации запрещали это, тогда оформил доступ к переменным через указатели. Но интуиция подсказывает, что это дрисня и есть более изящный способ. Или нет?
>>1842668 Функции нужны для того, что принимает одно и выдаёт другое. Если у тебя участок кода работает с локальными переменными, то оформи его в макрос. Такое может быть полезно, например, при генерации меша куба или каких-нибудь проверок (рейтрейсинг) того же куба. У него 6 и код почти одинаков.
>>1843095 Какие шаблоны, сыне, достаточно инлайн функций. >>1842797 Особенно это полезно при нахождении ошибок, тк у редактора и компилятора разное количество строк.
Поясните за статическую сборку qt приложений. Сильно ли большим получается размер программ? Долго ли все это настраивать? На производительность влияет? Компиляция сильно дольше?
>>1843607 > проблемы с лицензией Не ебет. Я же для себя. Вот есть у меня программка небольшая. Просто график по физике строит. Нужно скинуть преподу. Я ему блять должен скидывать еще 5 dll, папку platforms на 100 мб?
>>1843554 В опенгл есть буферы: вершинный и индексный на самом деле их больше да и их структуру определяет юзер, но не суть. Вершинный - позиции вершин в пространстве, текстурные координаты и тд. Индексный - порядок их отрисовки. Так вот, работа с этими буферами осуществляется через один и тот же интерфейс, отличие там только в том что указывается (передача константы) что это за буфер - вершинный или индексный. Сейчас я этот тип указываю в конструкторе, а не хочется у каждой переменной это писать. Хочется сделать псевдоним и писать VertexBuffer, а не просто Buffer.
>>1843778 Очень не хочу переписывать. Точно нет способа проще? >>1843775 > Сделай ему инсталяшку. Хуита какая то
Вот че за бред? Почему так сложно собрать небольшую программу? Получается ваш qt хуйня по типу электрона. Ощущение, что чтобы написать эффективную программу с гуем нужно самому все на опенгл или вулкане делать.
>>1843610 > Вот есть у меня программка небольшая. Просто график по физике строит. Нужно скинуть преподу. На, держи. Думаю бинарник + дллки вместе меньше 10мб будут весить https://github.com/epezent/implot
>>1843892 >Получается ваш qt хуйня по типу электрона. Не, это хуйня по типу дот нет. На нем можно делать небольшие проги, но для этого основные либы должны стоять у каждого юзера по умолчанию.
>>1843857 Ну ты можешь делать наследование, если так хочется писать тип. Но мне кажется проще сделать функции конструкторы и потом типа auto b = makeBufferWrite( параметры );
>>1843975 Наверное, не знаю как это в хаскеле работает. Короче говоря. Хочется алиас конструктору с определёнными параметрами и всё. Чтобы я только объявил переменную и начал с нею работать без уточнений в конструкторе.
>>1844156 > А пачиму нельзя компилировать qt из исходников как какой нибудь boost? Разве так не проще? Сборка Qt с флагами по умолчанию занимает несколько часов, спасибо веб-быдлу, которое везде суёт свой говнохром. Без webengine сборка занимает около получаса.
>>1844347 Ты про весь фреймворк? Я про свою собственную прогу. Вот в бусте я заинклудил файлы, и компилятор потом просто функции которые я использую скомпилировал. С qt чому так нельзя?
>>1844464 В boost почти все библиотеки - header-only. Например, boost::threads ты вряд ли сможешь использовать, не собирая предварительно. Qt имеет кучу внутренних зависимостей, т.е. чтобы использовать виджет нужно компилировать очень много файликов из qtgui и qtcore. Охуеешь это делать каждый раз.
Доброго времени суток. Я ньюфаг, прошу не закидывать меня говном сразу, у меня всего несколько небольших вопросов.
Какой консенсус или общепринятый стандарт по структурированию заголовков и реализации? Когда гуглил, очень часто натыкался на мнение, что заголовки должны содержать только объявление классов, напрмер, а вся реализация должна быть в .cpp файлах. Но в то же время я вижу много header-only библиотек, если реализация в заголовках это антипаттерн, то почему его так активно используют в достаточно популярных инструментах?
Правильно ли я понял, что строку с #include "my_header.hpp" компилятор распарсит как обычную копипасту, а сами заголовки не компилируются? Т.е. в случае если у меня есть файл main.cpp, и в нем я сделал #include "my_header.hpp", то при компиляции содержимое заголовка будет вставлено в main.cpp как инклюд, и скомпилирован будет только main.cpp?
>>1845167 Header-only библиотеки удобнее, но компилируются медленнее (т.к. их каждый раз надо компилить и парсить в каждом .cppшнике). Хедеры + .cpp - менее удобно, зато быстрее компиляция.
Если библиотека состоит из ехали шаблоны через шаблоны - там ничего нельзя положить в .cpp файл, вот они все и в хедере.
>Правильно ли я понял, что строку с #include "my_header.hpp" компилятор распарсит как обычную копипасту, а сами заголовки не компилируются? Т.е. в случае если у меня есть файл main.cpp, и в нем я сделал #include "my_header.hpp", то при компиляции содержимое заголовка будет вставлено в main.cpp как инклюд, и скомпилирован будет только main.cpp? да
>>1845197 >Если библиотека состоит из ехали шаблоны через шаблоны - там ничего нельзя положить в .cpp файл, вот они все и в хедере. А если имплементация шаблона в срр файле?
Неделю назад начал вкатываться в эти ваши "сложные" плюсы. Сейчас на ООП которое мои знакомые называли самой сложной частью языка. Но мне нихуя не сложно, всё понимаю + конечно же пишу код. Я гений или дальше будет жёстче или мне всю жизнь врали что плюсы сложны?
>>1845479 >Сейчас на ООП которое мои знакомые называли самой сложной частью языка. Но мне нихуя не сложно, всё понимаю Смоделируй в ООП лифт для бизнезцентра, знаешь такой который подбирает людей по пути.
>>1845479 Знакомые это вася из девятого класса? ООП не только в плюсах есть кстати. А сложность крестов в том, что туда понапихали всякого разного, не фильтруя ничего, и продолжают пихать. Один и тот же код ты можешь написать столькими вариантами, что когда придет время прогать на плюсах ты будешь думать не о задаче, а какие технологии языка вообще юзать. Ну и еще есть такая штука как UB. Так что если ты школьник, а ты скорее всего он и есть, то выучи паскаль и не выебывайся - толку больше будет.
>>1845489 >Сложность в подводных камнях которые могут появится там где ты не ожидаешь Это-то понятно, оно всё с опытом придёт. >шаблоны Ну посмотрим що це таке, вдруг и их не прочувствую. >>1845494 Сам делай свои тз, тем более что задача на первый взгляд тривиальна. >>1845535 Один пчёл из яндеxса, другой по его рассказам на аутсорсе что-то для проджектов делает. >ООП не только в плюсах есть кстати. Это понятно. >А сложность крестов в том, что туда понапихали всякого разного, не фильтруя ничего, и продолжают пихать. Один и тот же код ты можешь написать столькими вариантами, что когда придет время прогать на плюсах ты будешь думать не о задаче, а какие технологии языка вообще юзать. Ну так круто же, не люблю загонять себя в рамки. >Ну и еще есть такая штука как UB. В курсе, читал + сталкивался, учусь не допускать. >а ты скорее всего он и есть Мимо >паскаль Нет, спасибо.
>>1845547 Шарю и уже неплохо так поработал с этой темой. Конечно не без нюансов но суть я понимаю и с многиими задачами справиться смогу. Но лифт для бизнезцентра который подбирает людей по пути если мы говорим о простой модели без ухода в лоулевел и электронику - дело пары-тройки методов и не более того.
Ананасы, как научиться проектировать программу\её структуру? Вот, например, есть некий виджет который отображается в определённом режиме редактора (скажем, как в графическом редакторе рисуешь кистью у которой куча настроек). Что-то он хранит во внутреннем своём состоянии, а что-то получает извне: текущий выбранный цвет, текстура и тд. Так вот, как хранить это внешнее состояние? Нужен какой-то класс, на вроде, контекста?
посоны не бейте, я в крестах и cmake вообще не разбираюсь, мне была нужна одна утилита, автор выдал только исходники, а это одна из необходимых либ для этих исходников boost_root и boost_librarydir добавил после того как find_package(boost ...) этот самый буст не нашел, а тут вот это говно вылезает. как править? пробовал закомментить find_package, вроде собирается, но студия потом ошибками плюется.
>>1846033 >>1846056 решил добавлением BOOST_ROOT, BOOST_LIBRARYDIR и BOOST_INCLUDEDIR в PATH винды. вроде как нашлось, но забилдить все равно не могу, тонны ошибок уже в студии. почему с крестами такая морока посоны?
>>1846688 не отрицаю, если бы в крестах разбирался, у меня бы и вопросов скорее всего не возникло бы но вот в шарпе я тоже совсем не главный индус, а сколько реп не качал, ну день максимум ебался, большая часть и сразу с полпинка на моей машине заводилась. а тут одна либа из пачки - уже два дня ебусь.
300к наносек senior C++ программист. Хочу вкатиться в какой-нибудь НИИ пилить софт для какой-нибудь военной йобы. ЗП не важна, готов работать за идею. Кто-нить знает где таким занимаются? И че-нить там реально разрабатывается, или все времен СССР?
>>1847627 Нечитаемое говно с кучей подводных камней, исключений из правил, хуй знает во что разворачивающееся в асме. for(int i = 0; i<...; i++) в разы понятнее.
>>1847435 Я занимаюсь) гугли компании входящие в Ростех, и находи ближайшую. Платят так се, зато будешь за копейки ездить в санаторий зелёная роща, сразу за Мацестой и у нас нет печенек.
>>1847685 >хуй знает во что разворачивающееся в асме Верь в компилятор. Полагайся на него. Надейся на него. Делай ему регулярные жертвоприношения. Компилятор даст тебе мудрость и ответы на все вопросы. Верь в компилятор.
Ребята, подскажите пожалуйста нубасу, почему этот цикл работает так медленно и как сделать правильно? limit равен 320х320 = 102400, а heightmap - это QVector<quint16>
>>1847675 он не стал выразительней, он стал скучнее к примеру, раньше для программирования в компайл-тайм приходилось использовать по сути функциональный подход - вместо циклов была рекурсия через инстанцирование, вместо условных конструкций была форма паттерн-матчинга, компайл-тайм переменные эмулировались через enum, и прочее это было забавно
>>1847671 Не знаю, я вот С++11-14-17 очень хорошо скушал. Концепты и модули тоже понемногу кушаю, обзорно по фичам С++20 проехался. Проседаю в некоторых сложных темплейтах, но это исправлю.
>>1847920 Я правильно понимаю что теперь хуй проссышь, выполняется данный конкретный код в компайл- или рантайме? Раньше хотя бы маркером служили трехэтажные конструкции из шаблонов.
>>1848359 Скучно ему, блядь. Я вот затрахался городить длиннющие простыни. Сегодня же, хвала constexpr-у, подобное проще писать, читать и поддерживать. Ну и если аккуратно использовать новые финтиплюшки, то время компиляции оказывается ощутимо ниже, чем у соответствующих по функционалу старых конструкций.
>>1847920 Эта ебля конечно угарная, с точки зрения академической ценности, но в прод ее никто бы никогда не пустил. А с современными иф констэкспрами и прочими вариадиками - это реально теперь в проде писать, как например делаю я.
>>1848379 Нечего по сути сказать? Значит, доебёмся до слов. Я же писал художественного стиля пост на двачике, а не технические спецификации, смысл докапываться?
Вам не кажется что ваш язык ПИЗДЕЦ НАХУЙ какой раздутый? Я конечно все понимаю, но такое ощущение, что комитет пытается впихнуть все что можно просто. Все что в других языках есть, все абсолютно. Пусть эта фишка будет использоваться раз в год, но зато будет чуууть удобнее писать, но похуй что выучить все это невозможно нахуй.
>>1848388 Просто не надо учить то, необходимости чего не осознаёшь. Пользуйся сначала малым подмножеством языка, по нужде со временем потихоньку освоишь всё, что есть, и будешь просить комитет выкатить уже наконец те самые давно обещанные плюшки.
>>1848399 Это точно. Жду, когда на работе коллеги перейдут на свежий msvc. Выкину наконец велосипедный span, вставлю в энное количество мест концепты вместо шаблонных уродцев и комментариев
>>1850479 Наверное, я все таки так и сделаю, потому что другого выбра у меня нет. Тем более у меня есть некоторые ограничения на эти числа. + в отличии от решета это можно распаралелить довольно просто.
>>1850525 В C++ есть куча плюшек, которые нравятся даже сторонникам девственно чистого Си. Плюс под виндой Си компилятор от мелкософтов до недавнего времени только C89 поддерживал, поэтому все компилили даже сишный код как плюсовый. Ну а раз так, то грех не воспользоваться каким-нибудь из овердохрена фишек.
>>1849538 Веду эффективную разработку, продвигаю использование новых фич в имеющихся проектах (при создании новых подсистем в них), выступаю с презентациями среди остальных коллег по конторе. Ну и саммоу приятно в хобби-проектах.
Почему наглый компилятор совершенно спокойной генерирует в данном случае copy-constructor, при использовании которого второй объекта инициализирует свой reference с помощью member variable первого объекта?
В итоге когда кончается lifetime первого объекта, во втором получается dangling reference.
Ни одного ворнинга! Я щитаю, в таком примере copy-constructor должен быть implicitly-deleted. Или хотя бы не делать то, о чём не просят.
>>1850516 НАДО. Ну вообще я думаю мой комп справится. На андроид есть приложения для поиска простых множителей. До 12 степени за секунду находит. А мне 11 нужна, правда много. Короче так и сделаю. Что, ни у кого такого желания не было?
>>1850724 Я прекрасно знаю, как работает этот код и что происходит внутри compiler-generated copy-constructor в данном случае, мне просто это не нравится.
Программач как в этом ебучем VS 2019 Community изменить цвет комментариев??? Пробовал два расширения одни из которых Color.comment на цвет всех комментариев сделался серыми, в настройках чуть больше чем нихуя.
Как в с++ .netframework форме получить значение в виде строки из editbox`а??? Число у меня без проблем получается вывести: int v = int::Parse(eFName->Text); а как получить тип string?
>>1850800 Во-первых, пошел нахуй. Во-вторых, какой тип по-твоему имеет eFName->Text? Если такое непредставимо богомерзкое творение хаоса как С++.NET имеет в бездне своей архитектуры безумия хоть частичку логики постижимой разумом смертных, то это как раз и будет тип string.
>>1850612 затем, что в этом мире есть очень много экзотического железа, под которое нужно писать компиляторы (да, С компиляторов есть на бОльшее кол-во железок). Написать нормальный компиль на Си еще реально, написать же рабочий и валидный, не срущий багами, компиль на С++, который, к тому же, поддерживает современные стандарты языка, это ЕБАНЫЙ АД, легче с нуля написать полноценную ОС, ей богу.
>>1850524 зрелый язык со всеми возможными реализованными парадигмами, позволяет обмазываться и ООП, и процедурщиной, позволяет перекидывать овердохуя вычислений на компайл-тайм (привет метапрограммирование и constexpr), в виду присутствия UB позволяет фривольно творить больные вещи, правда на страх и риск говнокодера, имеет Тьюринг полные темплейты (да, это отдельный язык программирования внутри плюсов), имеет 250 миллиардов слоев абстракций, при этом высранный компилятором бинарный код по скорости исполнения очень близок к скорости исполнения бинарного кода после компиляции чистого Си кода (на аналогичной машине, ессна). Плюсовые компиляторы уже умеют хорошо оптимизировать машинный код, что тоже немаловажно. Всеми известный и уже фактически родной С-подобный синтаксис. Очень хорошая интеграция с Си (лучшая так-то), а на С написано овердохуя софта за 50 лет существования языка (примерно 90% библиотек, все ядра всех известных ОСей и т.п.). Из-за ебанутых темплейтов позволяет внаглую читерить - например, в С++ возможен статический полиморфизм, который эксплуатирует поведение темплейтов при наследовании, минуя нужду в виртуальных таблицах, по которым работает динамический ad-hoc полиморфизм, который довольно медленный. Причин еще очень много, плюсы одновременно и манна небесная, и говно ебаное червипидорское, но это обязательные условия для того, чтобы язык был юзабельным в широких массах, как бы парадоксально это ни звучало.
>>1850525 >с++ популярнее просто c Это неправда. С популярнее плюсов, даже в 2к20. Такие дела, да. >rust В лучшем случае займет околоГОшную нишу, в худшем - сдохнет, так и не выстрелив как следует. С и С++ он никогда не сместит с царства байтослесарства по очень многим причинам, многие из которых даже больше связаны с экономикой и челоеческой ебанутостью, нежели непосредственно с программированием.
Еще интересно узнать как vs оптимизацию проводит. Есть прога, в которой неменого переменных. Меньше десяти. Самые большие из них это строка из 11 символов и 10 байтовый массив. Компилирую с максимальным быстродействием. Прога жрет по гигу памяти. Нахуя? я просто не понимаю куда столько.
В cpp20 с появлением модулей как нибудь сборка облегчиться? Или все так же надо будет страдать от cmake с миллионами строк? можно ли будет какой то аналог cargo получить, пусть даже без пакет менеджмента?
>>1850913 >В лучшем случае займет околоГОшную нишу, в худшем - сдохнет, так и не выстрелив как следует. С и С++ он никогда не сместит с царства байтослесарства по очень многим причинам, многие из которых даже больше связаны с экономикой и челоеческой ебанутостью, нежели непосредственно с программированием. Уже смещает, FAGMAN активно начал топить за Раст
>>1852090 маняфантазии свои оставь при себе Гугл за свой дарт тоже топил, якобы убийца джава скрипта. И что из этого вышло? нихуя :) Если мелкософты скромно пукнули по поводу раста, мол, пук-среньк, безопасность лучше, то это не значит, что для раста реально достигнуть уровня С и С++ в плане глобальной распространенности. Все равно ниша С и С++ - это ебать байтики, где раст должен обмазываться ансейфом, дабы тоже ебать байтики как следует, что возвращает проблемы безопасности памяти как в С и плюсах. Короче, не в этой жизни.
>>1852298 Кекай дальше, зуммер. vcpkg - это будущее. Ни одна уважающая себя контора не будет использовать собранные непонятно кем библиотеки. в microsoft васянство прекратилось примерно году в пятнадцатом, вместе с выпуском vs2015
Сап! Сделал бесконечный цикл a += 500000; просчитал он только до 1.147.000.000 вроде. Потом начал отнимать по 500000 вплоть до -1.147.000.000. Это и есть переполнение буфера? Если это оно, то почему не крашнулось, а бесконечно туда сюда бегало?
Крестогоспода, как работает мув семантика в современный компилях? Я знаю, что если я верну, допустим, вектор из функции, то он не скопируется в функцию, куда возвращается поток исполнения, а переместится само владение над ним (NRVO вроде как называется). Это работает только для возвращаемых значений, верно?
Аноны, нужно послать картинку, вырезанную из видеопотока в браузер на той же машине, что можете посоветовать?Пока остановился на websocketpp. В интернетах его советуют за удобный интерфейс. Есть ещё libwebsocket, но там как-то слишком много всего надо настраивать через структуры. Может я не в ту сторону воюю, и есть более простое решение или библиотека, которая является стандартом?
Есть задача которую надо решить. Нужен dfs. Но вызов функции насколько я помню довольно дорог, а тут таких вызовов много, а сами тела фунцкий довольно простые. То есть на мой взгляд очень много времени тратится на вызов функции относительно времени выполнения всей программы. Прошу вашего совета, как с этим бороться. Я больше по придумыванию алгоритмов, а не непосредственному программированию их.
>>1852971 >Но вызов функции насколько я помню довольно дорог Зависит от множества факторов. Если компилятор заинлайнил функцию, то вызова по сути нет. Если функция листовая (не вызывает других функций), то компилятор возможно положил болт на соглашение вызовов и соптимизировал их. Если вызовы непрямые (indirect) то возможно тратится не на вызов, а на хождение по указателям. И тд. А может у тебя вообще не там время теряется. Всё возможно.
>>1852982 > Зависит от множества факторов. Если компилятор заинлайнил функцию, то вызова по сути нет. Dfs предполагает рекурсию, а как я помню рекурсивные функции инлайниться не могут > Если вызовы непрямые (indirect) то возможно тратится не на вызов, а на хождение по указателям. Тут я даже хз что этт > И тд. А может у тебя вообще не там время теряется. Всё возможно.
>>1831651 (OP) Сап хлопцы, скажите пожалуйста где вы юзаете лямбды, и сильно ли это ЮЗФУЛ, я просто в connect В qt заюзал и понял что годнота для этой цели, но потом задумался а где они ещё полезны, и как то не придумал ничего.
>>1853373 помимо довода крестогосподина свыше, лямбды можно использовать для того, чтобы писать короткие функции (т.н. анонимные) внутри функций, если не хочешь писать отдельную функцию под какое-то относительно простое действие.
>>1853373 Только там где реально нецелесообразно плодить классы и функции, что-то короткое и понятное. Так-то обычно это нарушение абстракции и выкладывание наружу кишков.
>>1853538 Не хочешь - не используй, тебя сам язык не форсит юзать лямбды, даже в качестве прекдикатов (хотя там это норм выглядит, в отличии от функторов, что есть бойлерплейт еще тот)
>>1853590 Программы не придумывают, а составляют по шагам. Первый шаг - запрограммируй рассчет только первой дроби. Потом - двух. Потом - трех. Потом увидишь повторяющиеся части твоего кода, которые сможешь обобщить.
>>1853590 Анон, ну камон, здесь же телескопический ряд налицо. Возьми произвольное значение степени икс (или знаменателя, неважно, в этой последовательности они идут нога в ногу каждую итерацию) и разложи дробь. Тем самым тебе будет легче увидеть закономерность последовательности. Как только загуглишь телескопический ряд, разложишь последовательность как следует, тогда и алгоритм решения уже будет ясен. Как можно такое решать НЕДЕЛЮ? Пиздец, не обессудь.
>>1853590 Тебе тут ответили достаточно злые люди, хотя в чем-то я с ними согласен, но не буду размусоливать, как они. Сделай как говорит анон>>1853705 Если не осилишь, то я спасу твою домашку, на код, сиди и вникай. По типам если есть какие-то особые требования от препода - поправь сам. И да, вангую, что такие задания дают с ограничением - не юзать либы типа math.h, а чисто от руки ебануть цикл, который все посчитает, что я, в принципе, и сделал. https://pastebin.com/6Ygfb3by
>>1853725 Ты думаешь, что если он рили гуманитарий до мозга костей, то закончит инст по технической специальности? Даже если закончит, хуй его возьмут на что-либо ответственное.
>>1853745 салют за метапрограммирование (бедный анон-неосилятор походу вскроется, когда откроет твою простыню), но у тебя невалидная программа кажись. При х = 3 и степени 2 получается -1.5, а у тебя 4.3 (засим и по знаменателю 19 выйдет неверное число, так как ты не учел наличие телескопического ряда)
Сап плюсаны. Допустем есть такой код: while (true) { std::string command; std::getline(std::cin, command); if (command == RESTART) {...} ... foo(); } Как сделать так, чтобы программа не ждала ввода, а цикл крутился дальше, пока пользователь не напишет что-то и не нажмёт энтер? Я пробовал через std::cin.peek(), но что-то как-то не понял как нормально это сделать. По идее, под это можно отдельный тред выделить, но это как-то слишком расточительно, если я правильно понимаю как это работает.
>>1854002 Другой вариант, без тредов, это использовать системное API для работы с консолью. То есть PeekConsoleInput для винды и ебатня с termios для юниксов. Но это, естественно, будет работать только для конкретной операционной системы и разбивать на строки тебе придётся самому. Поэтому да, всё-таки проще вынести обработку ввода в отдельный тред. >А отдельный тред не отожмёт целое ядро Пока поток заблокирован в ожидании чего-то (в данном случае ввода с клавиатуры/чтения из stdin), ему система даже не будет выделять время.
Что может вырезать компилятор при оптимизации? Например если я заведу переменную, в цикле произведу арифметические действия, но никуда кроме как самой переменной сохранять значение не буду он ее вместе с циклом вырежет? А если я память через new выделю?
>>1854677 Переменная шрёдингера - если ты не используешь результат вычислений, то и узнать осталась ли переменная ты не сможешь. А если используешь, то не узнаешь, была ли там переменная или только результат.
>>1854724 Дефайнить темплейты в хедеры или пользоваться explicit instantiation. Либо инклудить имплементацию из хедера (в духе какого-нибудь .inl) Три варианта.
Дваач, пытаюсь подцепить oop GoogleBreakpad к проге на Qt на маке. Всё вроде работает, но вылезает ебучее стандартное маковское сообщение о том, что программа крашнулась. Какого хуя, как его убрать, может кто знает?
Запускается launcher, в нём создаётся CrashGenerationServer. Дальше он стартует, если успешно, то в fork'е открывается моя приложуха. В ней создаётся ExceptionHandler с таким же портом, как и CrashGenerationServer
В CrashGenerationServer передаю callback только на краш В ExceptionHandler callback'и не передаю
>>1854656 Знать ключевые слова с++98 и фишки из нескольких последующих стандартов. Знать STL на уровне "создать коллекцию с составным ключем и проитерировать, удаляя элементы". Знать вумные указатели. Уметь написать свой String. Уметь читать исходники Boost.
>>1855025 > Уметь написать свой String. > Уметь читать исходники Boost. Это нахуй не надо. String уже до тебя будет написан, с бустом если что google поможет
При каких случаях может падать reversed_mutex при попытке lock? Если при попытке лока падает помойка с ошибкой !pthread_mutex_lock(&m) assertion failed
https://ideone.com/p4xrWa Вообще не соображаю, уже пару часов долблюсь. Почему 21 строка выбрасывает free(): invalid pointer? Почему утечка? Почему строка не возвращается? Нихуя не пашет, помогите
18 строчка, как я понимаю ты передвигаешь указатель на начало строки в обратную сторону. Как следствие указатель у тебя улетает в неизвестном направлении. Попробуй пройтись по шагам. Но могу и ошибаться.
>>1855414 Не меняй никогда исходные указатели. Завели новый и его инкрементируй/декрементируй/складывай, да хоть корни извлекай, если сумеешь. Исходный и удалишь потом и увидишь заодно, что та копия, которую ты гонял, не равна исходной.
Аноны, подскажите гуманитарию. Хотела установить игру Алладин. Старенькая аркада, с запуском через dos. Установила dosbox и игру. Запускается, но без звука. Нашла и открыла файл с настройками. Требует какой-то irq звуковой карты. Где это все найти и как сделать? Если с этим вопросом не в этот раздел, то в какой? Спасибо.
>>1855414 >>1855448 > Do not use any standard library functions. Do not use subscripting; use the dereference operator * instead. И тому, кто таск дал, тоже по рукам дам. Долбоебы, блядь. И поэтом это в С++ тред приходит. Пиздец.
Допустим у меня есть такие классы: Tile — клетка на карте; Chunk — двумерный массив тайлов; Map — двумерный массив чанков; WorldMap — содержит несколько объектов Map, например, общую карту и карты данжей/энкаунтеров/личного дома игрока и т.п. Так вот. Собираюсь объявить их вложенными друг в друга, т.е. Tile в Chunk, Chunk в Map и т.д. Всё правильно делаю? Или лучше объявить их вообще без вложений, но в анонимном неймспейсе, чтобы наружу не торчали?
>>1856249 Я надеюсь, что они будут использоваться только внутри соответствующего внешнего класса. Разве что Tile можно вытащить наружу. Хотя, конечно, такое возможно.
Объясните кому не лень и парой слов - при каких условиях стоит оборачивать код в отдельные неймспейсы а когда можно обойтись десятком отдельных файлов с классами (и стоит ли вообще)?
>>1832029 А в чём проблема просто практиковать то, что изучил за прошедший урок, дроч и ебля нудная, но ты и не на питон решил залезть. А вообще, всякие хакерваны и иже с ними, если лень ставить самому себе адекватные задачи.
>>1857081 > при каких условиях стоит оборачивать код в отдельные неймспейсы При конструкциях всяких шаблонов. Можешь поглядеть какие-нибудь либы и ты увидишь, что там основная реализация находится в detail. Туда погромист ходить не должен и юзать функции оттуда тоже не надо. А так вообще для структуризации кода: вот функции математические, вот работа со строками какая-нибудь и тд
>>1857081 класс может предоставлять минимальный интерфейс, а часть функционала может быть вынесена в функции-помощьники, а объединены они могут быть в единую логическую единицу неймспейсом
>>1831651 (OP) Господа, а что можно писать на плюсах? Нет-нет, все мы знаем, что то угодно. Вот конкретно. Где работать, что делать. Желательно побольше конкретики. Слышал про игры. Хорошо, а где, а как, если не sfml. Что ещё можно? А о про питон также писали что можно всё, а в итоге один бэкэнд по вакансиям
>>1857317 >Господа так и представил как ты сидя в белоснежной рубашке и галстуке-бабочке (но в обтруханых трусах за проперженным стулом) отстукиваешь этот мессидж "господа, где бы мне поднять бабла" водишь жалом ну ничего скоро ты поймешь всю глубину кроличьей ямы
с++ эзотерический язык программирования и работы на нем в 20к нет и не будет больше
>>1857351 Всмсл ? Вообще-то так и есть, и в 2020 году уже всем известно, что теперь на рынке эзотерического программирования нечего делать, если это не программирование на картах таро. Читай Scratch
>>1857330 Всегда поражало, к каким выводам могут прийти люди, никоим образом не связанные с C++. Признайся, ты же его в последний раз использовал на первом курсе?
>>1856179 Все отдельно кроме чанк, т.к. чанк это не игровая сущность, а деталь реализации карты, и должна быть на другом уровне абстракции, т.е. вообще не видна при написании игровой логики.
>>1857797 Мне всегда представляется, что класс это что-то большое с капитальной работой и логикой. А структура это что-то небольшое, в ней 3-4 переменных которые могут являться какими-то указателями или индексами на что-то другое.
>>1857797 Структура это просто способ синтаксически показать что там независимые друг от друга данные, которые ты можешь задавать без каких либо ограничений.
>>1857797 неверное представление в с++ структура - это не более чем класс с чутка измененной семантикой, а именно с тем что по умолчанию данные в нем имеют модификатор доступа public забавно, что семантика была изменена в угоду синтаксическому удобству ну а применение, да - POD
>>1835909 Блять, да куда вы лезете, долбоебы? Нахуй тебе visual studio блять? Тебе чтоб вкатываться хватит компилятора в консоли + sublime text. Visual studio вкатывальщику только лишний геморрой добавит.
>>1858256 >>1858261 Идите нахуй, вместо со своими пердолингом и командной строкой. Никто в проде такой хуйней не занимается, только дауны, которые почему-то думают, что это по хакерски.
Как раз - вижуал студия + вцпкг + решарпер, и ничего тебя от кода не отвлекает. Просто пишешь и все.
>>1858282 Угу, Микрософт, Нвидия, Яндекс - все сидят на вижуал студии из известного мне. Яндекс деплоится на линукс, но разработка вся в вижуалстудии. Говно из жопы, а не профессионалы, что с них взять.
>>1858283 Я тоже спокоен в вопросах конкуренции, пока есть ебланы с консолькой и пердолькой.
>>1858289 Какая разница, где я работал? Я на своей работе так же использую студию, 1 кнопка - сборка и деплой. 1 команда в CI - сборка и деплой. Без каких-либо скриптиков и прочего васянства.
>>1858291 Я понял, значит толстота. Но несмотря на то, что ты очередной даун коих большинство на этой планетке дам совет - чем тролить на сабж параше почитай образовательных книг. Тогда быть может и воплотишь часть своих желаний в жизнь.
>>1858295 Конечно могу, сможешь ли ты правильный вопрос задать. Я же именно ради маргиналов вроде тебя магистра получал. Сейчас буду расписывать вниманиебляди на двачах основы выпуска проекта в релиз.
На 1 кнопочку нажал, все автоматом собралось и пролилось туда, куда тебе нужно. Если нужно что-то иначе - там менюшечки есть, где можно кастомизировать все, что нужно. Но в моих юзкейсах достаточно было стандартной конфигурации. То самое ИЗКАРОПКИ
Такая история: использую CLion. Компилирую, запускаю прогу, всё работает. Запускаю её же под отладчиком с теми же аргументами: сегфолт. При этом, если посмотреть по шагам, то происходит следующее: через std::ifstream открывается файл, из него считываются данные, всё нормально, вызывается inFile.close(), но не вызывается. Вместо inFIle.close() вызывается метод getF(0) из моего класса Key. При этом это не статический метод, и до этого в программе ни одного объекта класса Key не создается. Соответственно, внутри происходит обращение к элементу несуществующего вектора и сегфолт. Запускал этот же бинарник через gdb, всё отработало нормально.
>>1858492 Сколько лет вы работаете в костылистроении?
>>1858539 НЕЛЬЗЯ в другой файл. В итоге сделал так, что при чтении строки |pidori| каретка переходила на новую строчку. Составил два списка с полными строчками и с пропущенными.
Сижу читаю Бьярна. Отвлёкся и подумал почему бы не сделать либу-обертку для динамической памяти чтобы хотя бы минимизировать количество ошибок. Думаю, мечтаю и тут новая глава и... Смарт принтеры. Ну обидно чё. Суть вопроса вот в чём? Какова вероятность того что проект который я загадаю ну или хотя бы его значимая часть уже реализованы до меня но мб не в опенсорсе и о нём мало кто знает?
>>1858740 Ок, а что например в сфере каких-нибудь нейронок? Там же уникальность явно побольше? И что вообще учить/практиковать чтобы уметь и быть востребованным именно в оригинальный контент?
Стоит ли стучаться на вакансию разраба с++ с указанным опытом работы 3-6 лет, если есть опыт около 3-х лет но на других языках? Брат орёт (120к+) - напизди им, шо под нда половина. А я вот честным долбаёбом родился. И по этому уже пол года работу на джуна ищу. Ну не долбаёб ли в самом деле?
>>1859329 Ну там был недоязык и галера. А к си сплюснотуму какие-то тёплые чувства, из-за возможности байтоёбствовать и писать высокоуровневые вещи. Что-то мне в нём нравится.
>>1859373 vector<int> some_vector(5, 10); Создает вектор с пятью элементами, каждое из них инициализирует значением 10.
vector<int> some_vector { 5, 10 }; Создает вектор с двумя элементами: 5 и 10.
Плюс есть разные контексты (auto type deduction, template type deduction (especially forwarding references)), когда uniform initialization object deduced as initializer_list, а это может быть не то, что нужно.
1) Завести обычный bool. Менять его значение из основного потока и проверять его значение в дочернем потоке, чтобы съебнуть.
2) То же самое, но с atomic_bool. Есть ли смысл, если поток один?
3) Условная переменная (conditional_variable) с мьютексом, wait и notify_one. Читал, что иногда у wait происходят ложные пробуждения и с этим нужно что-то делать.
4) То же самое, но добавить bool или atomic_bool для перестраховки от ложных пробуждений. Самый сложный вариант.
Есть ли какие-то книги или статьи с хорошими примерами по типу описанной задачи и с грамотным разбором, как нужно и ненужно делать?
>>1859394 У них так всегда происходит, то же самое было с передачей параметров по ссылке и возврату, потом тоже назад отмотали, сказали лучше по значению как в 80-х.
>>1859418 >происходят ложные пробуждения и с этим нужно что-то делать. Проверять условие. В данном случае условием будет значение atomic bool. Только в таком простом кейсе достаточно этого самого atomic bool.
>>1859425 >>1859426 А расскажите, почему нельзя обычный bool использовать? Потому что дочерний поток может не сразу увидеть изменение обычной переменной (хотя мы же обращаемся к конкретному участку памяти), а atomic как-то синхронизируется между потоками?
А чем вообще {} отличаются от обычной инициализации, кроме возможности контейнеру явно задать элементы? Например, int i{228} или MyClass j{359} имеют какое-то преимущество по сравнению с int i = 228 и MyClass j(359)?
>>1859466 >кроме возможности контейнеру явно задать элементы Не путай. Фича uniform initialization (то есть конструирование через {}) в том, что ты не натыкаешься на Most Vexing Parse и в некоторых случаях не надо явно писать имя класса, чтобы его создать (более подробно см. https://softwareengineering.stackexchange.com/a/133690).
Явное задание элементов - это вызов конструктора через initializer_list. И он всё портит, потому что конструкторы с его участием самые приоритетные и конвертируют всё подряд. Почему Комитет снова выбрал самое ужасное решение? Почему нельзя было сделать uniform initialziation действительно uniform и, чтобы достать до initializer_list, сделать что-то вроде vector<int>{{1,2,3}}?
>>1859483 Так я нуб. Уже джва года пытаюсь понять, что такое гонки, блокировки и прочая. Мне бы именно статью/учебник, в которой/ом демонстрировались бы данные проблемы и откуда у них ноги растут.
>>1859428 Есть несколько причин. 1) Оптимизации компилятора. Согласно стандарту, обычные булы не участвуют в общении между тредами. То есть если в коде у тебя нет специальных операций (обращения к атомарным переменным, захватов мьютекса и прочего), то компилятор может посчитать, что в коде типа bool run = true; auto t = std::thread([&run]() { run = false; }); while (run) {} переменная run никогда не изменится. И просто дооптимизирует тебе до бесконечного цикла. Скорее всего он этого не сделает, но в теории это законно. Даже если конкретно этой оптимизации не произойдёт, компилятор (и процессор) могут переставлять операции чтения/записи относительно неатомарных переменных, что тоже может привести к печальным последствиям.
2) Собственно атомарность. Read-modify-write операции должны быть атомарными. Например, у тебя следующий код: // Инициализация int counter = 0; // Тред 1 a = counter++ // Тред 2 b = counter++ counter++ - RMW операция (mov rax [counter], inc rax, mov [counter] rax). Оба треда могут одновременно загрузить x, увидеть, что он равен нулю, и оба последовательно запишут единицу. А могут и двойку. А вот операции над атомарными переменными... атомарны. Ни один тред не сможет увидеть половину операции. То есть если же counter был бы типа std::atomic<int>, то ответ был бы всегда 2, как и ожидалось.
На самом деле всё сложнее и в современных процессорах relaxed memory ordering, но по умолчанию в атомарных переменных используется самая сильная модель упорядочивания (sequential consistency), при которой не бывает никаких странностей. Поэтому если не ударяться в wait-free головного мозга, то про всякие release-acquire можно почитывать лишь на досуге, они нужны только если у тебя специфические задачи и тебе нужно выжать 100% перформанса.
>>1859535 Хорошо. А подскажешь, откуда лезут ложные пробуждения при использовании условных переменных? Один пример вроде понятен. Родительский поток шлёт оповещение многим дочерним потокам, несколько потоков могут успеть пробудиться, но захватить управление успеет только один, значит, остальные потоки словили ложное пробуждение.
Но насколько я понимаю, ложное пробуждение может произойти, даже если дочерний поток один. Вот этого я не понимаю. Если никто не слал сигнал, то почему он пробуждается?
>>1859559 Это требование ещё с посиксовых pthread_cond_t пошло. Наверняка в каких-нибудь восьмидесятых был какой-то вендор, *nix система у которого имела такую багофичу. Вот и внесли в стандарт. Бывает ли на современном линуксе - хз, говорят что возможно.
>>1859634 А, вот, погуглил и нашёл. https://pubs.opengroup.org/onlinepubs/009604599/functions/pthread_cond_signal.html >The effect is that more than one thread can return from its call to pthread_cond_wait() or pthread_cond_timedwait() as a result of one call to pthread_cond_signal(). This effect is called "spurious wakeup". То есть, в плюсовых терминах, ты вызываешь notify_one, а пробуждаются сразу несколько тредов.
Пример основного потока: exit = true; cv.notify_one();
1) Насколько я понимаю, это неправильно, потому что компилятор может переупорядочить команды и получится, что сперва вызывается notify, а уже потом меняется atomic. Как сделать правильно?
2) Не совсем понимаю, как работает счётчик времени в wait. Он сбрасывается после пробуждения и начинает заново отсчитываться или нет? Не получится ли, что из-за ложного пробуждения поток будет стоять 20 секунд, а не 10?
3) Может ли поток проспать пробуждение? Например, посылается сигнал notify, и, пока происходит проверка предиката, время пробуждения проходит, а сам предикат оказывается ложным. Получается wait продолжит работать, но время будет отсчитываться заново?
Короче, очень странно это всё работает. Надеюсь на ваши ответы, потому что не хочу, чтобы люди умирали.
>>1859978 Пытаюсь сейчас вкатиться. На связь вышло несколько компаний (многие сами), хотя опыта в программировании не было в принципе. Жду результаты тестовых заданий.
>>1859792 >Насколько я понимаю, это неправильно, потому что компилятор может переупорядочить команды и получится Нет, как раз относительно атомиков компилятор не имеет право переставлять. С этой точки зрения всё нормально. Здесь неправильность в том, что conditional_variable заточен на работу с мьютексом, поэтому условие (собственно condition, переменная exit) должно изменяться только под мьютекстом, иначе ты сильно огребёшь. Как работает wait в кондваре >захватывается мьютекс >проверяется условие >если true, идём дальше >если false, атомарно разлочить мьютекс и заснуть до вызова notify/таймаута Атомарность на последнем шаге нужна, чтобы не было пропущенных notify вида "разлочили мьютекс, какой-то другой тред вызвал notify но мы его пропустили, заснули". В твоём случае похожий кейс: ты можешь потерять notify, если произойдёт следующая последовательность событий: >Тред 1: захватывается мьютекс >Тред 1: проверяется условие -> exit == false Тред 1 ВНЕЗАПНО прерывается >Тред 2: exit=true >Тред 2: cv.notify_one(); >Тред 1: разлочивается мьютекс и тред засыпает (уже навечно) Так что мьютекс обязателен в обоих потоках. tl;dr std::atomic здесь не нужен, просто используй схему из https://en.cppreference.com/w/cpp/thread/condition_variable, она железобетонна.
>Не совсем понимаю, как работает счётчик времени в wait Нет, запоминается время t="сейчас + 10 секунд" и поток блокируется либо до notify, либо до времени t. Никаких сбросов нет даже при ложных пробуждениях. Возьми и почитай исходники wait, wait_for и остальных, там они довольно простые. Если интересно, как это внутри ОС работает, почитай про системный вызов futex.
>Не получится ли, что из-за ложного пробуждения поток будет стоять 20 секунд, а не 10? Нет. Но нужно помнить, что поток будит планировщик ОС. А он разбудит не ровно через 10 секунд, а по крайней мере через 10 секунд. То есть поток может проснуться через 10 секунд 2 миллисекунды, 10 секунд 15 миллисекунд.
>Может ли поток проспать пробуждение См пункт 1 в моём посту. Если всё правильно делаешь - никогда не проспит.
>Опыта не было, ты имеешь ввиду коммерческой разработки? Ну да, выразился плохо. Опыта работы не было, а для себя программировал иногда: писал разные программы в стол, алгоритмы сложные реализовывал.
>Что ты там в резюме написал, что аж сами на тебя вышли? В резюме у меня только образование указано и навыки. В навыках указал всё, с чем умею работать (git, c++ и прочие вещи, которые все разработчики должны знать).
Кинул резюме на hh. Потыкал вакансии привлекательные. За первую неделю на связь вышла только одна компания. Ещё одна компания мне два раза отказала, но потом предложили немного другую вакансию, неплюсовую (собес пройден, оффер уже получен). Через неделю активно начали звонить, писать, но не все из них предлагают плюсовые вакансии (есть предложения на неплохие вакансии от очень крупных компаний типа сбербанка и промышленных, завязанных на оборонку, но в таких иногда указывается про допуск к ГТ).
Проблема в другом. Предложение получить — это одно, но нужно ещё пройти собес и выполнить какое-нибудь тестовое задание, особенно если у тебя никакого опыта неуказано. Короче, жду результаты, но в любом случае оффер у меня уже есть, хотя вакансия неплюсовая, но очень денежная.
Понятно и доступно, спасибо. Тред заснёт навечно, если использовать обычный wait, а если wait_for он же всё равно должен по таймеру проснуться? И ещё я так понял, после выхода из wait мьютекс остаётся заблокированным?
>std::atomic здесь не нужен, просто используй схему > { > std::lock_guard<std::mutex> lk(m); > ready = true; > std::cout << "main() signals data ready for processing\n"; > } > cv.notify_one();
Здесь барьером для компилятора служит notify или вложенный контекст {} с мьютексом?
Остальное вроде понял.
Нашёл годную книгу, как я понимаю, от одного из тех, кто как раз разрабатывал boost::thread, а потом std::thread. Очень классно и красиво.
Энтони Уильямс, «C++. Практика многопоточного программирования».
>>1860003 >а если wait_for он же всё равно должен по таймеру проснуться Да. Но полагаться на это чтобы писать иногда не работающую логику всё равно неправильно, сам понимаешь. >И ещё я так понял, после выхода из wait мьютекс остаётся заблокированным? Да. Каждое просыпание внутри wait тред снова захватывает мьютекс. Предикат проверяется под мьютексом, и после выхода мьютекс останется у треда. >Здесь барьером для компилятора служит notify или вложенный контекст {} с мьютексом? Не очень понял вопроса, но постараюсь объяснить. Захват/разблокировка мьютекса жёстко накладывают ограничения и для компилятора, и для процессора. Когда следующий тред захватит мьютекс, он должен будет увидеть результат всех операций, совершённых внутри критической секции. То есть если кондвар проснулся вследствие notify_one, он обязан будет увидеть то ready=true.
>Энтони Уильямс, «C++. Практика многопоточного программирования». Говорят ещё у Таненбаума норм про основы синхронизации тредов. По крайней мере нам давно в универе с него читали лекции. Хотя там было больше про сами алгоритмы и примитивы, без всяких моделей памяти и lock-free и прочего.
>>1859792 >потому что не хочу, чтобы люди умирали. Не пользуйся тредами. Сделай один луп, в начале которого проверяешь все нужное руками сам. И потом по свитчам часть работы. Сорт оф корутины.
>>1860014 >критической секции Что это? Много раз уже встречал это выражение, но так и не понял.
>Говорят ещё у Таненбаума норм про основы синхронизации тредов. Тоже гляну, спасибо.
>>1860017 Сомневаюсь, что в моём случае такой подход приемлем, но можно подумать, как это организовать. Проблема в том, что каждый тред должен засыпать на разный промежуток времени. С одним лупом пришлось бы выбирать, с какой периодичностью мы теребим условия: 1 мс, 10 мс или 100 мс? Мне кажется, это не очень удобно.
>>1860047 >Что это? Много раз уже встречал это выражение, но так и не понял. Это та область кода, которая требует эксклюзивного доступа только одного треда. По сути всё, что между mutex::lock() и mutex::unlock(). В винде мьютекс, работающий в пределах одного процесса, даже называется CRITICAL_SECTION.
>>1860129 Понял, спасибо. То есть критический контекст — это всегда мьютексы? Например, атомарные или условные переменные сами по себе не создают критической секции при использовании? Или всё-таки создают? Условная переменная, например, создаёт при проверке условия в wait, но не создаёт при использовании notify. Атомарные переменные, наверно, тоже создают, когда к ним обращаются или пишут в них. Правильно? Наверно, атомарные переменные через мьютексы и работают?
>>1860136 >это всегда мьютексы Мьютексы, спинлоки, семафоры, мониторы, алгоритм Лампорта - что угодно, что позволяет только одному треду находиться в определённой секции кода. https://en.wikipedia.org/wiki/Critical_section >атомарные или условные переменные сами по себе не создают критической секции при использовании Нет, не создают. В conditional_variable это происходит за счёт мьютекса, который ты ему передаёшь. >Атомарные переменные, наверно, тоже создают, когда к ним обращаются или пишут в них И да и нет. Несколько тредов одновременно могут выполнять одну и ту же операцию над атомарной переменной. Но по сути результат получается, как будто каждый тред по очереди выполнял операцию. >атомарные переменные через мьютексы и работают Нет, это примитивы процессора. Хотя в теории такого же эффекта можно достичь, обернув все операции над атомарной переменной в мьютекс.
Хуйня какая-то, ничего не гуглится. В оконном приложении на Винде переключил ввод-вывод на родительскую консоль, сру в консоль, но он вместо этого пишет текст после путь> и надо потом жать энтер, чтоб перейти дальше ко вводу в консоль. Как мне писать нормально в консоль и возвращать управление родительскому окну консольки, из которого я запускаю свою мокропиську? Переключать подсистему на консольную не хочу, сломается всё нахуй.
>>1860165 Спасибо тебе, анон. Теперь гораздо понятнее, с чем я имею дело. Пойду читать про многопоточное проектирование.
Хотя один вопрос ещё имеется. Рассчитана ли стандартная либа на использование в многопотоке? Например, методы у контейнеров, объекты (статические?) по типу std::cin/cout или алгоритмы из <algorithm>?
> C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(2390,5): error MSB3774: Could not find SDK "Microsoft.VCLibs, Version=14.0". Как это говно чинить? Пробовал уже переустанавливать студию - не помогает. Что он хочет? Установлено всё что можно, но он просит зачем-то 14.0. Это вообще что такое, блять? В параметрах проекта указан вообще другой SDK.
Есть одна игра, мне нужно сделать так чтобы я имел возможность отклонять неугодные мне данные, как входящие так и исходящие. Пытался сделать это при помощи return 0 в hook'нутой функции WSASend, но оно продолжало спамить этими данными до тех пор пока они не отправятся. Пробовал шаманить с lpCompletionRoutine но ничего не получилось. С WSARecv вообще дичь, при return 0 разрывает соединение с игрой. Как я понял, самым хорошим и разумным решением будет поднятие такого-же сервера (или как это называется я не знаю) в том же процессе и переадресация данных на него, а он уже будет фильтровать и отправлять только то что угодно мне. Только проблема в том что я не знаю как это делается. Пожалуйста, помогите.
>>1860488 Лучше бы помог, я всё ещё пердолюсь. Всё началось после установки превью-версии студии, естественно удалил нахуй сразу её. Даже пустой проект не собирается и требует 14.0. Сейчас второй раз начисто всё удалил, почистил все папки вилкой и поставил заново студию - нихуя не помогло. Если делаю ретаргет, то он пишет типа после этого нельзя будет собрать проект в 2015 студии, для сборки под ней выберите в параметрах таргет 14.0. Но у меня нет 2015 студии, а установка 14.0 ничего не даёт. Какого хуя, блять? Алло, индусы! >>1860496 Чистый тоже не работает. Вообще нихуя не работает.
А ещё теперь постоянно такое ещё пишет: > error : Designtime build failed for project 'C:\Users\Admin\source\repos\App10\App10\App10.vcxproj' configuration 'Debug|Win32'. IntelliSense might be unavailable. > Set environment variable TRACEDESIGNTIME = true and restart Visual Studio to investigate. Он мне тут предлагает заниматься расследованием почему эта хуита не работает из коробки и не собирает пустой проект!
Поцоны, а вы в принципе зачем плюсы учите, если сейчас платят где угодно больше при меньшем затрате усилий? Разве что в геймдев идти, который в России в парочке компаний и в десятке инди студий с копеечной зп?