Есть одна игра, мне нужно сделать так чтобы я имел возможность отклонять неугодные мне данные, как входящие так и исходящие. Пытался сделать это при помощи 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. Он мне тут предлагает заниматься расследованием почему эта хуита не работает из коробки и не собирает пустой проект!
>>1860503 Вычисляй как игра палит, что пакет не отправился. А фильтр по идее и делается хуками на функции send/recv. Хз почему не работает, может там не только винсокеты.
>>1860339 → Чёт я психанул, полез в ассемблер смотреть.
Строки 5,6,7 берём h, добавляем единичку через lea, возвращаем на место. Это выполнение команды h++. В eax - 0 в edx - 1 в h - 1. Строка 8,9 Увеличиваем h на 1 и копируем её в edx. edx - 2 в h - 2. Строка 10 складываем EAX и EDX. eax равен 0 edx 2. результат 2 Строка 11 результат копируем в z
12 строка - обнуляем h
Строка 13, 14 увеличиваем h на 1 и копируем в eax. h = 1, eax = 1 Строка 15 в edx записываем сумму eax+1. edx = 2 Строка 16, 17 записываем результат из edx в h и затем загружаем h в edx. h = 2 Строка 18 складываем eax (равно 1) и edx (равно 2). eax = 3 Строка 19 пишем в z результат из eax.
Ну вроде правильно. Только какого хуя она на приоритет операций забила? В первом случаи мы вызываем h++ и получаем копию h, а сам h увеличиваем на 1. После увеличиваем h ещё на 1 и складываем. во втором случаи мы увеличиваем h на 1 и уже после сохраняем, то есть выполняем ++h. Затем увеличиваем h на 1, и пишем результат в переменную. Не сохраняя её в промежуточном регистре. Блядь в сон клонит. Но какого чёрта!
Кто-нибудь имел дело с FlatBuffers? Я что-то не очень понимаю. Вот я генерю класс Monster. Это тот самый класс который мне и нужно использовать в программе, или он чисто для сериализации? Просто немного смущает то, что по дефолту объект получается константным, а чтобы получить мутабельный нужно генерить хедер с особыми параметрами типа --gen-mutable или --gen-object-api. Может нужно создать нормальный класс Monster и сгенерить класс MonsterData. Соответственно, первый будет использоваться внутри программы, у него будут меняться поля нормальным образом при необходимости, а когда нужно будет его сериализовать/десериализовать будет использовать класс MonsterData в который будут копироваться поля сохраняемого объекта/из полей которого будет создаваться новый объект класса Monster?
>>1860694 Не, ну я пойму, если кто-то пердолится в Eclipse. Там есть всякие эксклюзивные йобы (от той же NVidia для удалённого профайлинга GPU кода). Ну ладно там VIM на каком-нибудь дохлом embed. Но студия то уже ничем не выделяется на фоне её преемника vscode.
>>1860694 Студия не является более высокоуровневой чем vscode с плагинами. Зато вот чем студия является так это монолитным куском говна, где при поломке одного компонента ломается все нахуй, и под все зачастую имеется в виду операционка.
>>1860695 Интересно, что чувствуют разрабы студии. Какие-то четкие пацанчики пришли и сделали все с нуля и получилось лучше, чем они десятилетиями пердолили.
>>1860571 Зачем ты это все пишешь? Это такой троллинг тупостью? Вбросы в С/C++ про ++i + i++ это то же самое что вбросы в /b про дроби и деление. Просвещайся: https://www.viva64.com/ru/t/0065/
>>1860814 У анона не работает индусоподелие, а криворучка я. Интересненько. >>1860817 Угу настолько нет проблем со студией, что у них была специальная утилита которая должна была по замыслу вычищать остатки из системы, после деинсталляции. Естественно даже она не могла вычистить, поэтому в тех поддержке просто разводили руками и говорили что пришло время переустанавливать шиндоус.
такая тема, я студент сис. админ первокур, до этого программирование не учил и не интересовался, и в универе начали учить кодингу на с++. этот язык вообще не сложен /приемлен как первый язык для учения кодингу? и еще меня заебало тупить на парах и не уметь решать простые задачи, хочу сам научиться, с чего мне щас лучше начать? пока книгу для новичков из шапку курить? ещё я 0 в математике, его надо учить для си плас пласа?
>>1860828 >начали учить кодингу на с++. этот язык вообще не сложен >/приемлен как первый язык для учения кодингу? и еще меня заебало тупить на парах и не уметь решать простые задачи, хочу сам научиться Курсы от яндекса на курсеры
>>1860825 Да. Нет, блджад причем тут многопоток? Если это семантика языка. Если у тебя UB, а это скорее всего ошибка программиста, то она и в многопотоке ошибка
>>1860828 Это один из сложнейших языков, но его можно брать начальным. Просто иногда будешь застревать в затыках, выглядящих как магия, придется спрашивать у знающих. Математика это прикладная область. Для языка она не нужна, но работа на с++ часто связана с математикой - это или для 3д синусы косинусы всякие, или видеокодеки со своими рассчетами, или управление моторчиками на заводе с рассчетами скоростей, частот.
>>1860817 >>1860824 Если такой умный, то скажи как чинить теперь это. Осталось только переустановить Шиндовс. Любая комбинация SDK не работает, выключение всех родных расширений от индусов не помогает, чистка профиля не помогает, переустановка студии не помогает, запуск от админа и копирование 14.0 в любые места не помогают, ребуты не помогают, кнопка repair не помогает, переустановка библиотек рантайма VC++ не помогает, гугл по этой ошибке на 25 страниц прочитан - ставил все нагугленные VCLibs вручную и не помогло. Напоминаю, что это началось после установки превью версии, всё что я сделал - нажал кнопку Install, запустил пустой проект в превью-студии и получил это говно. За 15 минут до установки превью всё работало.
Перед тем как начнётся РРРЯЯЯЯ UWP НИНУЖНО хочу напомнить, что это основной гуй в дриснятке.
> BTW, I know you mentioned C#, but for anyone wanting to use C++, be sure to enable that as well--this is also not installed by default. See Setup Changes in Visual Studio 2015 Affecting C++ Developers and Developing for Windows 10 with Visual C++ 2015.
>>1860830 это бесплатно? >>1860837 >>1860896 чето пацаны вас начитался и теперь лень стало учить с++, может нуй его нахуй, все равно нет интереса к программированию
>>1860910 >чето пацаны вас начитался и теперь лень стало учить с++, может нуй его нахуй, все равно нет интереса к программированию
C++ надо учить итеративно. Освоил базовый синтаксис, поковырялся, уже можешь что-то написать. Посидел, отдохнул.
Учишь какую-нибудь фичу из стандартной либы: разбираешься с контейнерами, с потоками ввода/вывода. Посидел, отдохнул.
Смотришь, как итераторы какие-нибудь работают, лямбды. Посидел, отдохнул.
Начинаешь разбираться с классами, шаблонами. Ну и т. д.
Весь ты его всё равно не осилишь. Никто не осилит. Самое главное, понимать, какие возможности предоставляет тебе язык и стандартная библиотека, чтобы огороды не городить, а при случае разобраться и написать по-человечески.
>>1860906 А погодь, я уже ёбнулся немного, не то записал. C# тоже не работает теперь. Впрочем на крестах аналогично. В пизду в общем, я уже заебался второй день пердолить это говно индусов.
>>1860919 Соболезную, что тебе приходится такой дриснёй пользоваться. Я обычно код пишу в текстовом редакторе. Ну почисть свою дриснятку, откатись там или… что в таком случае на дриснятке делают?
>>1860500 (OP) >Вектор делает мув только когда мув-конструктор элементов noexcept >Всё потому что в случае неудачи оригинальный вектор должен остаться валидным >Поэтому во всех нетривиальных мув-конструкторах нужно вручную писать noexcept Я не понимаю, почему комитет сам себе создаёт такие сложности?
>>1860952 Самое печальное что CLion ещё хуже. Там вообще раз в пару месяцев фиксят баги. Уже пол года не могут тиринг пофиксить на десятке, например. А как эта параша на джаве быстро и стабильно работает - вообще отдельная история. Жаль нельзя без ебли писать под зумерские фреймворки и платформы на VS Code, давно бы уже укатился.
Осваиваю указатели, не понимаю почему при соединении двух соседних шортинтов в один инт, единица оказывается на посередине а с краю? https://pastebin.com/vyVciVA5
>>1861185 Нет такого понятия "соседние шортинты", это Undefined Behaviour. Что же касается ответа "почему" - как сказал анон https://en.wikipedia.org/wiki/Endianness У тебя так, а на каком нибудь андроидфоне с ARMпроцессором может быть наоборот.
>>1861185 > Осваиваю указатели Если у тебя 64-битная система, то всегда используй uint64_t и сдвиги или char*. А ещё с релокациями ознакомься, чтоб не спрашивать почему адрес из 3 байт или поменялся.
>>1861213 Насколько я понимаю, да. Указатель может указывать только на объект такого же типа как и он сам (то есть никаких (int)&float, никаких "соседних адресов"), в случае массива - на элемент этого массива, либо, единственное исключение, на несуществующий элемент сразу за концом массива. Все остальное что не описано, является UB.
>>1861205 На счёт obj.mutate_hp(228) в туториале написано, что такое уродское название выбранно специально, чтобы показать, что эти объекты изменять не стоит, но если очень хочется, то можно.
Алсо, на стековерфлоу пишут, что FlatBuffers has very efficient in-place mutation of scalars, but mutating things like vectors in-place requires the use of reflection, which currently is slower and clumsier, thus not recommended for use as game state that is frequently modified. И рекомендуется использовать --gen-object-api.
Как я понял, если скомпилить с параметрами --gen-object-api --gen-mutable сгенерится класс MonsterT, в котором уже можно писать не obj.mutate_hp(123), obj.hp = 123. Если я правильно понимаю, MonsterT уже нормальный С++ класс, примерно такой, как если писать его руками. Но при этом написано следующее: For times when efficiency is less important a more convenient object based API can be used (through --gen-object-api) that is able to unpack & pack a FlatBuffer into objects and standard STL containers, allowing for convenient construction, access and mutation. Так же, в процессе экспериментов выяснилось, MonsterT генерируется вроде как только если класс объявлен как table. Если как struct, то ничего не меняется и всё равно надо писать obj.mutate_mana(359). Почему так — непонятно.
Кроме того, не понятно, как обстоит дело с полями по умолчанию при такой генерации. Если генерировать обычным способом и сериализовать объект, у которого поле mana, не будет явно задано (будет равно дефолтному значению), тогда obj.mutae_mana(322) ничего не мутирует и вернёт false, что, по всей видимости, надо будет каждый раз проверять. Интересно, как при генерации с API с этим обстоит дело.
Ну, я попробую, конечно, с этими генерируемыми классами написать что-то, но как-то сомнительно это выглядит. С другой стороны, переписывать дважды каждый POD не хочется, и по эффективности это будет не лучше наверняка.
>>1861253 Скорее это просто неумение читать. auto же не должен определять вермишели указателей, он всё верно делает - выводит тип. А то что вложенные типы могут быть вермишелями, так это надо спросить у говнокодеров стандартной библиотеки. Такая же хуйня про [] вместо std::array. Можешь сколько захочешь стрелять себе в ноги скобками. Хотя уже везде в свежих стандартах пишут не использовать их.
>>1861282 >Хотя уже везде в свежих стандартах пишут не использовать их. Если ты тупой, то лучше вообще ничего не используешь, всё равно прострелишь жопу.
>>1860919 А ведь на этой итт доске стабильно доказывают что мс смогли в идеальный кросплатформ всего и вся, сярп лучший язык, а до порабощения мира точканетом осталось пару лет
Помогите дебилоиду. Товарисч выполняет лабы в VS Community.
Прикол в чем, если он компилит с x86, то ему выдает ошибку с std::badalloc на создание и работу с матрицамив данном случае перемножение, заданными двумерными динамическими массивами аблов размерностью n=10000 или более, с распараллеливанием через omp, но при этом нормально работает с меньшим n. Если компилять x64, то ошибка по памяти не вылетает, но он то ли считает, то ли нет, так до конца и не проверили он спать ушел, но что самое интересно распараллеливание в данном случае не происходит.
Я же у себя на линупсе компиляю g++ с флагами -fopenmp -O3, и у меня всё прекрасно работает. у него поддержка omp тоже включена если что В чем, собственно, может быть прикол данного прикола?
>>1861511 > аблов даблов* Написал, кста, неверно. В первом случае компиляется, но программа не выполняется, а вываливается с ошибкой с std::badalloc().
>>1861512 У него был немного другой и гораздо более опрятный, но он и с моим говнецом пробовал.
>>1861515 Так-то 10000 х 10000 х 3 х sizeof(double) это больше 2 Гб. Нормальная причина проблем с выделением памяти, особенно на 2ядра-2гига ведре для очобы.
>>1861529 Не, с этим я понял, там с x86, проблемы были, больше 2х гигов оно не вывозит, так в доках у майков написано, но когда он компилит x64 у него не работает распараллеливание, что странно. У него 16 гигов оперативы и зивон на 12 ядер.
привет, аноны, решил вкатиться в с++ есть опыт работы на питоне, шарпе, чистом си вопрос не про материалы для изучения - спасибо шапке. Интересует, скорее, совет. Каким бы пет-проектом заняться, и на что в нем следует обратить внимание (типа обязательно многопоточен и тд), чтобы я был интересен работодателю? Просто опыт работы уже 4 года, и идти на дикого джуна за 40к совершенно не але, а в с++ ой как хочется спасибо)
>>1861577 Денег ты на c++ особо не заработаешь. Дальше читать не стоит. Большая часть вакансий во всякие говНИИ, на реально интересный проект попасть довольно сложно. Основные ниши для с++ связаны с матаном, железом, надёжностью и производительностью. Из этих тем состоит 75% вопросов на собесе, если ты идёшь не на ждуна (от ждуна хотят того же, но в виде профильного образования без практики). Часто бывает так: вот у нас есть код - как его улучшить (оптимизация, баги, портируемость)? Хотят услышать не только про ++i, i++, но и всякие математические изъёбы, распараллеливание, интринсики, балансировку нагрузки между железками (CPU-GPU, host-client). Сейчас актуальна обработка медиа данных, так что можешь чё-нить на эту тему написать: кодек из А в В, поиск чего-то на картинке или повышение качества картинки, получение медиапотока с устройства (в идеале с embed, но и вёбка сгодится).
>>1861592 >> денег ты на с++ особо не заработаешь да ладно тебе, ты типа так вкатыша отпугиваешь? понятно, что джава ебет по зпхе, но свои 120 можешь получать. Что, в целом то, похоже на зарплаты питоне https://habr.com/ru/article/511700/
>>1861750 Он конечно дохуя приукрасил, да и такой жести от ждуна (и даже от мидла если это не какая нибудь топовая компания) никто ждать не будет, но с точки зрения именно зарабатывания денег плюсы реально не лучший выбор.
В перспективе на 5-7 лет конечно з/п будет не сильно ниже аналогичных позиций на других технологиях (по крайней мере в рамках компании, и если это не оверхайп технология с супер нулевой конкуренцией среди соискателей, как сейчас с го/элексиром/скалой), но вот в краткосроке на любой хайповой технологии на этот же уровень можно выйти за 3 года или даже быстрее, просто потому что рынок шире, и можно хоть каждые пол года делать по x1,5.
>Что, в целом то, похоже на зарплаты питоне Очень хуёвое сравнение, полистай эти питоновские вакансии на хх, там за 30-40к работать предлагают да и уровень там требуется соответствующий. Даже при этом у него медиана выше плюсов, что как бы кек.
>>1861817 >> и даже от мидла если это не какая нибудь топовая компания а что от мидла требуют? реально сразу на мидла скакнуть с си шарпа? или на входе онли джун?
по поводу второго абзаца: ну тут да, я согласен, что с точки зрения денег лучше бы остаться с существующим стеком (шапр + питон), но иногда кажется, что тру программистом можно стать только изучив с++, такое конечно препдоложение, но почему-то к ним душа лежит прям да и в целом у меня позиция с обработкой данных с сенсоров и тд, и это охуеть вообще какая случайность, что получилось питон подтянуть, вот к крестам и стремлюсь. Пусть даже если работа с ними будет связана с классическим проганьем >> Даже при этом у него медиана выше плюсов, что как бы кек. смотрю на ссылку в закрепе - и не сильно там выше. В целом на +- 10к похуй
>>1860893 Ну да, ну да, говнософт как всегда. На работе весь день на етом говне пишу. Так заебался, что на домашней пекарне установил arch BTW, ламповий вим+лсп+силанг и пилю свой петпроджект, алсо билд система на мейке, больше не нужно.
>>1861748 В крупных конторах делается так: математики пишут код на питоне (такой себе прототип), потом его портируют на с++ другие специалисты (распараллеливание на CPU, перенос вычислений на GPU - CUDA/OpenCL, использование инструкций SSE через ассемблерные вставки). Я напомню, что сейчас наиболее актуальны системы реального времени - самодвижущиеся повозки, дроны, видеонаблюдение и трекинг с нейросеточками. Там очень жёсткие требования к производительности. Да те же игры систему жрут беспощадно.
>>1861831 >а что от мидла требуют? Зависит от компании. У всех свои требования, поэтому обычно все просто сходятся на том, что мидл это челик с 1-3 годами опыта.
>реально сразу на мидла скакнуть с си шарпа? Если в точно ту же прикладную область в которой у тебя уже есть опыт — можно наверно. У буржуев точно можно было бы, всё равно на собесах 80% дрочки алгоритмов, 15% дрочки на софт скиллы и ещё 5 на конкретный стек, у нас же всё наоборот. В любом другом случае — сначала надо где-то получить хоть какой-то опыт в плюсах — так что иди и напиши хотя бы парочку пет прожектов, чтобы было хоть о чём написать в резюме и открыть рот на собесе, потом уже и думай хочешь ли.
>или на входе онли джун? Как я уже сказал, зависит от требований конкретной компании, которые можно узнать только на собеседовании. Пройдёшь на мидла — будешь мидлом, чо.
>смотрю на ссылку в закрепе - и не сильно там выше. В целом на +- 10к похуй Пчел, это медиана. Учитывая, насколько нижняя планка зп в питоне ниже — настолько и верхняя выше, если вытягивает медиану выше плюсов.
>>1861831 >а что от мидла требуют? реально сразу на мидла скакнуть с си шарпа? или на входе онли джун? На 80-90к можешь пойти, если месяц потратишь на подготовку к собесу. Просто сейчас с++ не самодостаточный язык, а скорее вспомогательный. Я например варюсь в embed дрочильне с нейросетками и у нас на проекте: железо - C, матан - ASM, C++, CUDA, бек и микросервисы C++, C#, фронт - JS с реактом, тесты скрипты и прочая залупа - Python. Контора у нас маленькая и я пердолюсь на всём вот этом сразу.
>>1861944 > игры Шарп в юнити - это уже очень низкоуровнево. Сейчас в геймдеве никто не пишет на крестах. Двигло собирается из конструктора, а дальше любая макака пишет код любого качества лишь бы работало. Если ААА пилят чуть ли не на блюпринтах, то что уж говорить про рашку и мобильную разработку. Алсо, системщину и ембендед разве китайцы не перетянули давно уже? Судя по гитхабу русские ваньки уже не нужны.
>>1862049 Пока ты проигрываешь издатели считают бабло, а разрабы годами патчат свой говнокод после релиза. В том же уе4е абсолютная норма комбинировать кресты и блюпринты, все так делают. Если помотришь на индюшатину, то там в большинстве случаев либо готовое двигло, либо контруктор из 25 опенсорс-проектов. >>1862054 Ну недавний Легион уже сливали. Сам код хоть и вырезали, но pdb лежат и можешь сам посмотреть на этот конструктор из сотни сторонних компонентов. То что там пользовались визуальном скриптингом тоже не секрет, жирухи же не будут писать на крестах. Там же есть исходники шейдеров.
>>1862040 Манька, полистай на досуге вакансии Wargaming, Gaijin или аутсорс контор типа Saber, Sperasoft и прочих залуп. Про эмбед и китайцев - китайцы скупают наши конторы и разрабов. Тот же Huawei сделал несколько крупных покупок пару лет назад (системы распознавание лиц). Даже на РБК по этому поводу бугурт напечатали. И сейчас они ханттят разрабов поштучно.
>>1861970 Да, смена работы — самый быстрый способ увеличить количество нефти. Правда, нужно уметь красиво пиздеть про причины (закончили проект/срезали косты из-за короны/перевели на другой проект с древним стеком/итд), все прекрасно понимают что ты хочешь бабла, но если услышат то нанимать тебя точно не захотят, лол.
>>1861977 Бывает, но: а) Внутри компаний зп всегда растут медленнее чем на рынке в целом, просто потому что рынку мало и мало (а когда ты съебёшь за отказ взять и повысить зп, новых людей эта компания будет тоже нанимать по рыночным ценам, которых ты и хотел, такой вот кекус); б) Тебе за каждые +20к к зарплате будут стараться довесить кодревью/менторинг джунов/подработку девопсом/помощь пму с декомпозицией/и прочие задачи, за которые никто не хочет браться (и которые надо будет ещё и совмещать с основной деятельностью, лол). Так что самый просто способ это таки смена работы.
>>1862040 >Сейчас в геймдеве никто не пишет на крестах. Смотря что под этим понимать. В контексте твоего сообщения "геймдев" — это именно программирование геймплея, там уже давно никто на плюсах не пишет, ибо нахуя. Написать код "если персонаж находится в фрейме (0, 100, 250, 120) то ебать его" может и макака, только это даже не 1/5 от всей программистской деятельности связанной с геймдевом но наверно вся деятельнось какого нибудь /гд, лол.
>Двигло собирается из конструктора Самописные движки так же собираются из конструкторов, там точно так же тянутся сторонние либы для абстракций над ос (ввод/фс/окна/процессы/треды), физика, всякие парсеры моделек, звук, и так со всем — разве что обычно рендеринг +- свой был.
>а дальше любая макака пишет код любого качества лишь бы работало Пчел, почти все игры которые выходили в опенсорс/сливались состояли из нагромождений говен примерно _всегда_. Геймдев — это всегда про взять и нахуярить, а не сделать поддерживаемую систему, потратив кучу времени на архитектуру/рефакторинги/итд.
Вопросик по std::queue. Если я создаю очередь без параметров, то у нее уже есть какая-то по дефолту выделенная память? И еще, если удалю все элементы через .front() + .pop(), то выделенная память останется или вернется в кучу(?)
>>1862404 Самый простой пример это вычисление оператора Собеля с помощью SSE инструкций процессора (пишется на ASM). Используется для поиска границ на снимках с камеры, радара, рентгена и проч. (а по границам можно понять какие объекты есть на картинке). Короче edge detection. https://core.ac.uk/download/pdf/83041628.pdf В принципе, если ты залезешь в исходники OpenCV, то там ещё много подобного добра увидишь. Причём OCV можно даже собирать с поддержкой SIMD NEON для ARM процессоров.
>>1862439 С другой стороны у OpenCV есть бинды для питона. Поэтому цепляем к проекту OCV, numpy и пишем наш проект на питоне. Рубим бабло и насмехаемся над красноглазыми (никакого матана, железок и байтоебли).
>>1862446 У меня в плюсовом проекте был модуль на асме на 2к loc.
Я смотрел в сторону интринсиков, но, если честно, сделать две реализации модуля (портируемый с++ и специализированный асм) со статическим (на этапе компиляции) и динамическоим (проверка, поддерживаются ли нужные инструкции в рантайме) выбором нужной имплементации мне было намного проще, чем пытаться добиться того же эффекта с помощью интринсиков.
>>1860828 Язык не сложный (на самом деле это три языка в плаще), но тулинг просто говно дерьма, будешь репу чесать почему все не работает и куда нажать чтобы заработало. Будешь репу чесать когда захочешь библиотеку использовать и симейк будет мозга ебать. Комьюнити отбитое, будет рассказывать тебе про историю компьютерной техники вместо того чтобы ответить на простой вопрос почему не получается вывести "привет мир" в консоли не кракозябрами. Я бы рекомендовал начинать с чего-нибудь дружелюбного типа питона жаваскрипта или вижуалбейсика иначе никакого кайфа не получишь и бросишь это дело. А так - добро пожаловать в наш клуб любителей потеребить память руками.
>>1862591 Ещё бы альтернативы хоть какие-то. Интерпретируемые языки и JIT не нужны. Go без либ ненужен. Раст так и не поднялся с колен. Zig ещё пару лет ждать пока релизнется. ФП-параша по определению говно. Что там остаётся? Всякие анальные извращения вроде Nim?
>>1862598 > Интерпретируемые языки и JIT не нужны хотел написать пост про программы которые работают, решают проблемы реального мира и приносят прибыль но любителю экономить компьютерные ресурсы это никак не поможет, сорь, не выходи из хайлоада не делай ошибку
>>1862600 В первую очередь потреблением памяти, во вторую производительностью. Нормальный JIT только под Lua есть. Тот же Шарп и Жаба жрут памяти чуть ли в десятки раз больше чем сишка в некоторых случаях, а ещё это время запуска местных фреймворков. Как же кринжанул с дотнетовского гуя на XAML, с которым пустое окно запускается почти секунду, а в доках рекомендуют использовать сплэшскрин если совсем уже неприемлемо долго. Браузер быстрее запускается, чем это говно, лол. Кто-то жалуется на Электрон, но ведь дотнет ещё хуже. >>1862605 > любителю экономить компьютерные ресурсы Прям трясёт, когда можно сделать быстро, но мне мешают и заставляют жрать говно.
>>1862614 Ну а как победить жор памяти в шарпе, если это фича такая у них? Я бы с радостью использовал его, но вот у меня есть сотни машин с 1 гб ОЗУ из 2010 года и я не могу больше 100 мб использовать. В шарпе создаёшь пустое окно на винформс и уже минус 20 мб, против 1.7 на крестах с wxwidgets. И так в любом месте жрёт больше в 2-10 раз. >>1862635 Не работаю кодером и не собираюсь. Это она из причин почему. Тем более профитов в ЗП нет никаких, чтоб укатываться из админства.
>>1862645 >но вот у меня есть сотни машин с 1 гб ОЗУ из 2010 года У меня в 2010 было по 2-4 гб. Зачем тебе 100 машин?
Зачем тебе учить инструменты разработки для технологий 10-ти летней давности, причём для машин, которые уже тогда были отстойными? Сейчас другой стек инструментов.
Не, ну ты можешь найти где-нибудь 386 компьютер и писать что-нибудь под ДОС вообще. Писали же когда-то.
>>1862645 битмап 192010804 весит 8Мб, чтобы фликера не было надо два штуки, чтобы антиаляйсинг был нужно в четыре раза больше, сделай на своих крестах непустое окно и будет те же 20Мб
20Мб это 0.2% от 8Гб оперативы, можешь хоть в несколько рядов наспавнить себе
>>1862661 > Зачем тебе 100 машин? Ну это условно, их намного больше. Хотя да, сейчас это всё же меньшинство и везде есть по 2-4 гб. Но эти пару сотен тоже надо как-то поддерживать. > которые уже тогда были отстойными Тогда там стояли Windows Embedded POSReady 2009. Летали вполне хорошо. > Зачем тебе учить инструменты разработки Да мне-то и не особо есть зачем. Я же не кодер, только автоматизации делаю, в основном для даунов-инженеров, чтоб они могли пару кнопок нажать и не ебать мозг другим. > под ДОС вообще. Писали же когда-то. И сейчас пишут, внезапно. У нас и такое говно есть. Ладно ещё выбили переход на 10 IOT где есть хотя бы 1 гб ОЗУ, но железо никто не станет менять, работает же. Да и самое главное - нам это тоже не сильно надо, когда можно сидеть и попёрдывать, придумывая новые костыли. А как уж оно работает - это проблемы юзеров.
>>1862667 Необычного ничего. Мне просто интересно узнать есть ли разница между объявлением алаяса на темплейтный тип как в книге и дефолтным объявлением переменной. Как я это вижу - раз тут юзаются билтины то обычное объявление не сработает и будет ошибка.
>>1862645 >Тем более профитов в ЗП нет никаких, чтоб укатываться из админства. Лольнул с эникйщика. Хотя если перекатываться именно в плюсы, мб и не будет, кек.
>>1862726 Да судя по средним ЗП с хабра и вакансиям на 120к - только в модные GOвна есть смысл перекатываться. Что в админстве, что в кодинге требуют одного - знания. Но при этом в админстве не требуют писать код, платя столько же.
>>1862758 Люди в здравом уме советуют либо visual studio, либо компилировать ручками из консоли и писать код в vim/emacs/вставьте-свой-любимый-текстовый-редактор. Остальное всё хуй знает вообще зачем существует.
>>1862716 чего-то они совсем над ней поиздевались. со шифтами проблемы, окошко мерцает, прога вылетает... хоть самому переписывай на чем нибудь, кроме delphi xe
>>1862683 >>1862661 Чет орнул со школьников, если он обслуживает скажем парк платежных терминалов, он за свой счет будет что ли везде сотни плашек памяти или малинки покупать?
>>1862716 Помню, как эту хуйню рекомендовали на первом курсе на лабах вместе с Borland C++ Builder. Я в это говно лезть не стал, ибо знал про вижуалку, qt creator и vim. Но одногруппники, которое влезли, потом у меня 100500 раз спрашивали, почему ОШИБКА НЕ РАБОТАЕТ КАК ПОЧИНИТЬ.
>>1862781 Если у него будет коммерческая работа в этом направлении, или хотя бы реально осмысленная учебная - то будет изучать годные инструменты. Надо будет, и под 286 будет кодить, со всеми этими "char far".
Но только цель другая, обучаться программированию >>1860828
Если автор хочет сразу себя ставить в стек устаревших технологий, то пожалуйста.
>>1860500 (OP) помогите мне пожалуйста разобраться, почему падает программа. Мне надо перевернуть строку, но моя программа падает когда доходит до 91 строки и я не понимаю почему. Что я делаю не так?
Наверное тупой вопрос, но уже который день не могу придумать как решить. Нужно проверить есть ли 3 или больше одинаковых элемента в массиве. Делаю простым способом через count и вроде считает хорошо, но если массив будет например (1, 1, 2, 2, 3, 3) он зафакапит и выведет True, а другого способа я не знаю.
>>1862888 Скорее надо не забыть во втором цикле сбрасывать count перед началом, for (int j = i+1, count=1; j<n, j++){ } а после сделать проверку на count, то есть она внутри внешнего цикла будет
>>1862892 Потому что все "ebal" где то должны храниться на момент старта программы. А поскольку в Си все должно делаться явно, а копию статических данных в оперативку ты не делал, то все так и есть.
>>1862905 char str[] = "lalala" это массив, у которого компилятор выводит размер по инициализации, а выделение памяти и инициализация происходят в рантайме (современный аналог std::array).
char ptr = "lalala" это указатель на константу, которая хранится в статической памяти, выделяемой при старте проги (это const char).
Когда происходит вызов func(char ), то str неявно приводится к типу char, но сам str не является указателем изначально.
Это типичное легаси в с++ от которого можно избавиться только разогнав нахуй весь комитет по стандарту и твёрдо решительно сократить язык до смысла выкинув нахуй вот эти вот все [].
>>1862975 Для открытия новых горизонтов купи дилдак. А раст мертворождён. Пиши на человеческом языке, а для байтоебли в Zig уходи. Как раз к релизу освоишь.
>>1862892 Там вроде из-за оптимизации компилятора. Если у тебя в коде в одном месте char a = "HuiPizda" в другом месте char b = "Hui" а в третьем char c* = "Pizda", то компилятор в памяти создаст только строку "HuiPizda", а указатели a, b, c получат соответствующие адреса в этой общей строке.
Так скажите, плюсаны, будущего у языка нет? Мне предлагали проект на Java, но я все равно решил съебать на другой проект на крестах. И вроде всё неплохо, но грызет изнутри, что я проебался и в долгой перспективе пососу хуёв.
>>1863230 А если обычная РАБота на дядю + собственные проекты на энтузиастычах без пердолинга? Сегодня часа 2 ставил автокомплит на спейсмаксы ибо нет ни одного человеческого конфига.
>>1863232 > пердолинг в студии раз в пару месяцев > пердолинг каждый новый проект с конструктором и консолькой Я бы ни один из этих вариантов не стал бы выбирать.
>>1863236 ну тут в зпхе же прогирышь Да и хз придет ли джава и прочнее подобное говно в нишу с++ Да и сейчас IOT ебашит, роботы, дроны и тд. Джаве и шарпу там нехуй делать
>>1863294 >IOT ебашит, роботы, дроны Вот я эта хуйня хотеть. Но больше всего интересуют нейронки. >>1863296 Вообще арбитраж + трейдинг. Плюсы я только-только учу, лол. Чуть меньше 2 месяцев, только вчера шаблоны прошёл.
>>1863225 И то и другое. IDE (но не та, что зовётся visual studio) вроде кажется победителем. Но настройка кросскомпиляции, telnet/ssh, синхронизации сырков, удалённого дебага бывает крайне заёбистой.
>>1863119 В СНГ основную кассу делают аутсорс компании. А это энтерпрайз и всякое легаси говно. Будешь сидеть на Java - будешь при деньгах. Ну а кресты это либо гейдев либо легаси говно либо что-то при производстве (которое почти ничего не производит и не зарабатывает). В гейдеве неплохие зарплаты, но скотские условия труда. Легаси унылое, но ты последняя надежда и тебе заплптят (возможно и валютой).
>>1863495 Кстати, это очень смешно, но полнофункциональную IDE только преподы в универах и котируют по какой-то причине. После выпуска ни разу еще не видел это замечательное творение.
>>1863497 В ВУЗе был препод, у которого стояла вижуал студио в виртуалке на ноуте, потому что по программе её надо, а он говорит, что она всё засрет и потом вилкой чистить, неудобно.
>>1864007 >много исходников опенсорсных инструментов прочитал перед использованием? Все, мань. >Все, кто этого не делает - не профессионалы? Высокая вероятность такого.
>>1862892 Потому что это строковый литерал, пчел. Хотя есть компили, которые позволяют править строковые литералы. Clang и gcc точно не разрешают, msvc хз, ибо говном не пользуюсь.
>>1864102 быстрофиск возможно, я пизжу и это зависит от ОС/формата исполняемого файла, ибо вспомнил, как один уважаемый скомпилил на шинде код, где была попытка записать символ в строковый литерал, и у него прога не крашнулась и позволила это сделать (мб я ебанутый, хз). В лялексе, короче, это сегфолт с вертухи сразу.
>>1864104 В каком-нибудь эмбеде при загрузке бинаря эта область памяти может быть ДЕЙСТВИТЕЛЬНО READ-ONLY, но редактирование этого — ub в любом случае.
>>1863291 Потому что язык сложный, да и в индустрии с помощью плюсов решают, как правило, более сложные проблемы, нежели веб-макакерство и крудошлепство. Поэтому как таковых джунов на кресты нету, только если у тебя не блат ну или тебе просто ебически повезло яхз.
Мне нужен список, который может хранить сразу три параметра. Я могу реализовать это так: - сделать свой список, который сможет принимать не больше и не меньше трёх параметров; - использовать list из STL, и присваивать узлам списка как параметр ссылку на объект; - использовать list из STL, и присваивать узлам как параметр массив из трёх ячеек. Что из этого лучше с точки зрения байтоёбства?
>>1864252 >>1864254 Ну, ладно. Параметр в программировании — это принимаемое функцией значение. Вот здесь, например, http://www.cpp.sh/5bnzy функция принимает массив как параметр. Ну, или указатель на массив, я ваще не ебу. А как весь массив вывести я тем более хуй знает, подходящего для этого способа в std:list как будто и нету.
>>1864590 Он небось не регается в социалочках и мессенджерах, деньги хранит наличкой, а на двачи ходит через впн, зареганный на 10-минутнвю почту, и взломанный соседский wifi. И работает без трудового договора.
>>1864599 > на двачи ходит через впн, зареганный на 10-минутнвю почту, и взломанный соседский wifi Кто-то ещё до сих пор не делает так после пары посадок двачеров?
В visual studio 19 года возникла проблема. Код собирается и работает только после пересборки всего решения. Иначе срёт ошибкой линковщика 2019. Это у меня где-то ub затесалось?
>>1864779 > The first point is implicitly connected to the last point, and the polygon is filled with the current brush(). Я даже brush не устанавливал, он pen-ом что ли красит? Нахуя? Попробовал QBrush с Qt::transparent ему скормить, один хуй закрашивает.
>>1864782 Наоборот, если жёстко пропишешь в стандарте, что инт - 32 бита, то потом хуй запустишь такой код на процессоре с двухбайтной шиной данных и байтом, не равным 8 бит.
>>1864792 Да, конечно лучше, чтобы код запустился и в какой-то момент отстрелил тебе ногу, когда переменная переполнится.
Хотя, если учесть, что С как раз разрабатывался для того чтобы его можно было скомпилировать на чём угодно, это можно понять.
В любом случае, получается, что сейчас лучшей практикой является использовать int32_t, если тебе не нужно, чтобы код запускался на всяких извращённых платформах с не 8-битным байтом?
>>1864798 > Да, конечно лучше, чтобы код запустился и в какой-то момент отстрелил тебе ногу, когда переменная переполнится. Суть кроссплатформенности в том, чтобы использовать не больше, чем гарантируется стандартом, и не полагаться на имплементацию. Если так и делать, то ничего никогда не переполнится. Для этого и лучше юзать всякие int32_t, когда нет уверенности, на чём это попробуют запустить.
>>1864808 А зачем вообще такое говно нужно в низкоуровневом компилируемом языке? Это же банальная лень, когда вместо платформозависимого кода пишешь универсальное говно. Почему бы просто не скармливать отдельно особенности платформы компилятору, один хуй компилятор под каждую платформу свой пишется, а он уже в свою очередь не давал бы стрелять себе по ногам с UB? Это же глупо звучит, чтоб копипастный код можно было компилить под извращенные микроконтроллеры и под х86 без изменений. Нахуя такая анальная клоунада? Вроде не питонисты, разобрались бы с чтением платформозависимых стандартов.
>>1864813 > А зачем вообще такое говно нужно в низкоуровневом компилируемом языке? > Вроде не питонисты, разобрались бы с чтением платформозависимых стандартов. Если у тебя сишка и ассемблер, то будешь читать эти стандарты. Но у тебя C++, который пытается и совместимость с сишкой сохранить (нельзя же просто выкинуть все либы для неё), и высокоуровневым при этом считаться.
>>1864826 > пытается Почему тогда у новомодных низкоуровневых языков есть нативная совместимость с сишкой, но там додумались не плодить тонну UB? Тем более один хуй комитет уже давно сломал обратную совместимость с кодом старых стандартов. Есть, например, практика в других языках помечать всё ненужное говно мамонта как deprecated и настойчиво предупреждать если используешь это.
>>1864836 > Почему тогда у новомодных низкоуровневых языков есть нативная совместимость с сишкой Потому что в них она на уровне линковки, а не на уровне # include <код_на_сишке.h> > Тем более один хуй комитет уже давно сломал обратную совместимость с кодом старых стандартов Не так уж сильно она сломана, чтобы прям дохуя было переписывать. Обычно сишный код работает без дополнительного допиливания.
>>1864840 > на уровне # include <код_на_сишке.h> Так в чём проблема встраивать компилятор сишки для такого и линковать со своим? В GOвне ты тоже можешь написать #include<код_на_сишке.h>
Требуется написать функцию которая возвращает указатель на многомерный массив произвольного размера, при этом память для массива должна выделяться один раз.
То есть надо сначала посчитать размер памяти под массив и выделить буффер, а потом в этот буффер как-то разложить указатели и вернуть указатель на массив.
>>1864843 > В GOвне ты тоже можешь написать Ага, и обмазываться всякими unsafe.Pointer() и биндингами. Даже в C++ интероп с сишкой не безшовный, что там про Go говорить.
>>1864845 Просто берёшь и без задней мысли выделяешь память под 10 указателей, в каждый из них выделяшь память под 10 указателей, в каждый из них выделяшь память под 3 инта.
>>1864863 > Просто берёшь и без задней мысли выделяешь память под 10 указателей на указатели, в каждый из них выделяшь память под 10 указателей, в каждый из них выделяшь память под 3 инта.
>>1864858 Круто, передашь слишком большое значение size - и стек переполнится, когда с кучей такой проблемы ещё долго не будет. И много сишного кода использует это?
>>1864899 Хуже, потому что есть ощущение, что он не предназначен для этого и хуй знает что там с памятью происходит, и с типами, и как доступ к элементам осуществляется. Но я не шарю в С, так что могу ошибаться. Короче, нормально делай, нормально и будет. И лучше использовать смарт поинтеры, вместо обычных указателей. А ещё лучше стд вектор просто возьми и всё.
>>1864925 Тогда и с обычными указателями многомерные массивы не получатся, олько одномерный, у которого будешь вместо компилятора вычислять настоящий индекс по N размерам. А преобразование обычного указателя в указатель на указатель на указатель на указатель пахнет нарушением strict aliasing rules, хотя хуй знает.
>>1864992 даун, какой "каждый" массив? он один всего алоцируй себе в очке один раз буфер и запихни туда всю хуйню нахуй тебе сто раз алоцировать ты даун что ли какой-то?
>>1864945 Обычно на гпу используются, т.е. не нужно получать доступ к n элементу, весь тензор целиком уезжает. А при заполнении можно всякие юнионы использовать, если так хочется
>>1864782 Си было во времена, когда ещё делались 36-битные и 48-битные компьютеры. Сейчас да, нафиг никому не нужно, но комитет просто так не убедишь. Поэтому и получается, что в GCC long то-ли 4 байта (при компиляции на x86), то-ли 8 байт (x64).
Раз уж речь зашла о контейнерах, поинтересуюсь мнением анонов о deque. Как я понял, это набор линейных массивов связанных между собой как списки. Возможно я тупой, и не умею читать, но как определить длину одного линейного массива в ней?
>>1865159 Надо обсуждать UB, темплейты, интрисинки и отказ от юзания фич, которые якобы zero cost, а на самом деле медленнее на 0.00000000000001%, а также лабы студентов и работу в НИИ.
>>1865376 Может ты хоть немного программировать за 2 года научился? Ну и да, я не могу представить себе, как в 2 раза чистую производительность можно улучшить, учитывая, что я большую часть времени читаю код, а не пишу. А для чтения VS божественна.
>>1865377 Да >>1865378 Безусловно. И с ростом скилла вырос как объём работ так и сложность. Разумеется если ты ретроград и >я большую часть времени читаю код; то тебе и нативный нотпад подойдёт.
произошел форс мажор, поэтому нужен человек, разбирающийся в с++ (для курсовой работы). об оплате договоримся. почта: [email protected] потом тг извините, просто некуда обратиться даже
>>1860500 (OP) Вот к этому коду прилагается: The constructor uses an initializer list to set the class constant members. The variable before the curly braces is the class member, while the pieces inside are the values assigned to it. These are often constructor arguments. It is acceptable to use the same name for both the class member and the argument. Есть класс World, его объект World() со своими полями. Что ещё за члены класса и аргументы конструктора, где они в коде?
>>1865598 >>1865600 А ведь вы могли бы потратить это время с пользой. Скажем на саморазвитие и получение новых знаний и как следствие повышение своей ценности как специалистов и как результат улучшение уровня жизни.
>>1865616 > Это всё отмазки. С таким подходом никогда настроя не будет. Таки бывает. Когда не слишком сильно заебался на работе, и ещё есть силы на кодинг для души.
Начинал учить питон по книжке "Укус питона". Понравилась она тем, что все задания к каждой главе идут с использованием знаний предыдущих глав. Есть ли подобная книжка по плюсам? Сейчас прошел 60% курса на udemy https://www.udemy.com/course/beginning-c-plus-plus-programming, но хочется больше практики по ООП также последовательно-нарастающих.
>>1865665 Очень, очень глупое решение. Прата не описывает многие тонкие моменты которые имеются у Струпа. Потом на гугление потратишь больше времени чем на разбор сейчас.
>>1865684 Да какие тонкие моменты, ты о чём? Язык бы, для начала освоить, на базовом уровне. Ознакомиться со стандартной библиотекой и тд, а уж дальше в нюансы ёбаная тётя погружаться.
>>1865692 За базовым уровнем - на равесли до ООП. Дальше не выёбываешься и берёшь Страуса. Уже заебали капать на мою седую голову с визгами типа "Как это нельзя писать using namespace ...;? Как это переписывай 40 файлов?"
>>1865734 >Страуса Это тот типчик у которого чтобы примеры из книги заработали надо искать какую то васянскую либу include_me_hello_world причем нужной версии?
>>1865751 Я и без книжки понимаю, что такое неймспейс и почему хуево его инклюдить везде без весомой причины. Какие еще ньюансы в струссусусупе описаны?
>>1860500 (OP) Привет анончики. https://youtu.be/zrOIQEN3Wkk?t=299 Наткнулся на видео (есть таймкод), там оч странный код на с++, похожий на хаскел. Гуглил rv and hs namespaces c++ - ничего. Загуглил functional programming c++20, есть примеры кода, но не поясняется, что это и как с этим работать.
>>1860462 → А как на винде полноценно работать с gcc?(я спрашиваю именно про винду, потому что gcc предлагается как альтернатива при проблемах с визуалкой)
Я на днях трахался с бустом и gcc от mingw и mingw64, он простто не работает с библиотеками буста, хотя они вроде как успешно им были собраны. Файлы, в которых просто main и #include <boost/thread.hpp> <boost/asio.hpp> не собираются с ошибками, которым я нашёл массу решений, не подошедшие в моём случае.
Я знаю, что ещё есть tdm-gcc, но у меня уже не было моральных сил ещё и с ним пытаться.
>>1865906 Проект собрал, мне нужно понять почему у меня не срабатывает бряк при изменении переменной/массива/etc, ранее у меня была переменная которая изменяла значения хотя в неё ничего не писал. Ясно дело где-то переполнение буфера. Сейчас похожая ситуация и я пытаюсь найти место где в неё данные неправильные записываются.
>>1865923 >вирусная ссылка на говносайт с кучей текста на англюсике, вместо того, чтобы написать на человеческом языке, что инсерт вставляет новый узел * от итератора, что я уже сам и проверил Нахуй иди, чмоха.
>>1865883 Я, честно признаться, особо не разбираюсь в различиях компиляторов, просто по gcc и его использованию в консоли примеров много, и msvc почему-то визуалкой как-то по-странному запрятан и доступен только из специальной консоли разработчика, и то посредством devenv.exe и прочего. Поэтому решил, что для консоли удобнее всего будет гцц
>>1865895 Да, я думал об этом. Сегодня буду разбираться, как это провернуть. Визуалка жутко тугая, что-то меня от неё аж трясёт. Я уже молчу о том, что там даже подсветку синтаксиса нормально кастомайзить нельзя.
>>1865931 Нет. Исповедь С++-пацанчика о том, какая дохуя математика на шаблонах в STL, и как STL охуенно компилируется в ниибацца оптимальный бля буду код. Паттерны и SOLID в мире С++ у него не работают, кстати, нада прощи быть.
>>1865924 Ты наверное привык, что тебя мамка с ложечки кормит, рассказывает тебе что к чему и жопку вытирает. Пора взрослеть и делать всё самостоятельно. А документация - она вся на английском, привыкай.
>>1865926 Помотал немного, кекнул с его причин почему кресты лучше сишки и всего остального - деструкторы и шаблоны, лол. Первое уже обоссано растами всякими, второе так или иначе есть даже у гоферов. Боюсь представить что случится с его психикой, если он увидит compiletime-магию из Zig. Так же он там напиздел что либа номер один - буст. >>1865931 Скорее джависта, который после своего говна увидел кресты и начал ссать кипятком, но в итоге пригорел из-за своего слабоумия.
>>1865961 >я буду говорить с тобой на англюсеке, хотя мог бы и на человеческом, а понимаешь ты меня или нет твои проблемы, я русофоб и горжусь этим кококо кудах
>>1865970 > а какая же? Под конкретную задачу есть либы лучше буста. Этот комбайн из антапаттернов явно не может быть лучшим. Выбор правильного инструмента - это очень важный навык. А он там сказал про буст с посылом что ньюфагам надо его выдрачивать полностью и писать всё на нём, ещё приведя аргумент что буст написан очень сложно и оптимизированно богами крестов. > есть ли работа по ним? Нет. Я написал это к тому что деструкторы очень сомнительное преимущество и от обсеров мало спасают, а раст как раз показывает пример что можно на хуй сесть и рыбку съесть писать быстрый и безопасный код.
Аноны, пишу проект на CLR WinForms на С++, у меня весь код получился в хэдэре (.h) это нормально? Ну просто конструктор с ним хорошо работал. Ну в хэдэрэ прописано появление всех окон, обработка событий при нажатий на кнопки и т.д. и т.п.
Ботинки.завязать(левая_рука, правая_рука, шнурки); Сука, ору. Понятно, почему у пидорах ни паттерны, ни солид не работают.
>>1865987 Тогда соглашусь по поводу буста. Я думал, он просто привел ее в качестве самой популярной либы, про которую нужно знать (опять я недооценил степень маразма в пидорашкокодинге).
>>1865982 Ну это совсем не то. В крестах это очень ограниченно и в виде нестыкуемых друг с другом вещей. А в Zig функционал compiletime для всего один. Как для вычисления типов, так и для выражений. В итоге тебя не ограничивают шаблонами и ты, например, можешь типами в коде жонглировать без лапши в скобках -> >>1865800. Или то что недавно упоминали - работать нормально с массивами через скобки без константного размера или явно использовать переменный размер инта для разных платформ, а не жрать что дают.
Объясните на пальцах, где и когда может понадобиться динамическое выделение памяти? Правильно ли я понимаю, что это актуально в том случае, если мне нужно создать какое-то количество объектов (например, я сделал запрос и получил 10000 постов с двача) и после их обработки мне нужно их выкинуть из памяти, так как они больше мне не нужны?
Если бы они остались в памяти, то приложуха бы просто жрала ее каждый раз как делает запрос?
>>1866021 Мы тебе няньки, что ли, дурачок, на такие элементарные вопросы отвечать? Книжки читай, там все прекрасно объяснено. Желательно на английском.
>>1866021 В софте выше уровня хэллоу ворлда у тебя будет ебическое количество ситуаций, когда размер выделяемой памяти будет неизвестен во время компиляции. В таком случае нужно выделять память в куче в рантайме, разумеется.
Дополнительная причина - куча, в отличие от стэка, ограничена только ОЗУ самого камплюхтера, поэтому если тебе надо выделить ебическое количество памяти (гиг+, допустим), тебе надо использовать кучу вне зависимости от того известен ли тебе размер выделяемой памяти заблаговременно или нет, потому что стэк статичен и маленький, гиг ты там не выделишь, прога просто крашнется из-за переполнения стэка.
>>1866029 > это аналог Си Скорее Go/Rust, чем сишка. В Zig можно сделать пародию на ООП средствами языка, разве что наследование не запилить. Zig же и начали пилить потому что в расте пытались сделать заебись, а получилось говно с костылями.
>>1866060 фабрика = сервис_локатор.найти(интерфейс_абстрактной_фабрики_рук) ... фабрика.зарегистрировать(интерфейс_левой_руки, реализация_левой_руки) фабрика.зарегистрировать(интерфейс_правой_руки, реализация_правой_руки) ... если человек = сервис_локатор.найти(интерфейс_человека) тогда __если человек.руки == нет тогда ____если левая_рука = фабрика.создать(интерфейс_левой_руки) и правая_рука = фабрика.создать(интерфейс_правой_руки) тогда ______человек.руки = левая_рука, правая_рука ____или ______кинуть_ошибку(ошибка(1488, "человек не может завязать шнурки, неудалось создать и заинжектить руки")) ____ой_всё __ой_всё __если человек.имеет(ботинки) тогда ____если человек.может(завязать_шнурки) тогда ______человек.отправить_команду(завязать_шнурки) ____или ______кинуть_ошибку(ошибка(228, "человек не умеет завязывать шнурки")) ____ой_всё __или ____кинуть_ошибку(ошибка(1337, "это столлман, ему нинада)0")) __ой_всё ой_всё
Уже достаточно солидно, или какой-то принцип нарушен?
>>1866084 > Уже достаточно солидно В каком месте? У тебя в функции завязывания шнурков создаются руки! Алло, йоба! Это пока что только S. Дальше ещё хуже. Давай заново.
>>1866051 Сам ты наркоман. Ты не можешь поменять размер стэка в рантайме, об этом идет речь. Размер стэка известен до запуска программы и не меняется (и не может меняться) во время исполнения программы.
>>1866090 >У тебя в функции завязывания шнурков создаются руки! класс фабрика_человеков(сервис_локатор): __создать_человека: ____если сервис_локатор == нет тогда ______кинуть_ошибку(ошибка(123, "локатора нема")) ____ой_всё ____если билдер_человека = сервис_локатор.найти(интерфейс_билдера_человека) тогда ______билдер_человека.собрать(&человек) ____или ______кинуть_ошибку(ошибка(d3adb33f, "рук не найдено")) ____ой_всё
>У тебя в функции завязывания шнурков создаются руки! null safety не завезли же, аджайл порешал и человек собирается по пути, кек
>>1866064 >Стек автоматичен. Ебланичен. Единственное, что меняется в рантайме, связанное со стэком, это значение указателя на верхушку стэка (ESP/RSP регистр в x86/x86_64 соответственно). Но у стэка есть финальная величина. Именно поэтому ты не можешь выделить гиг памяти на стэке и именно поэтому у тебя крашится программа, если у тебя, допустим, бесконечная рекурсия (которая не может быть бесконечной как цикл, ибо каждый рекурсивный вызов - это стэковый фрейм на стэке, а стэк, повторюсь, имеет конечную величину, которая не меняется в рантайме).
>>1866120 >Но у стэка есть финальная величина. "Финальная величина" есть и у хипа. ШОК. >именно поэтому у тебя крашится программа Нет. Программа падает оттого, что нехватку памяти для стека нельзя отловить стандартно.
>>1866120 1. Стек не имеет конечную величину и меняется в рантайме. 2. Ты можешь выделить гиг памяти на стеке, все что произойдет - ты попадешь в guard page, выкинется pagefault, система его отловит и подложит в виртуальную память еще страничек.
>>1866149 Для rtp полно либ, я пробовал разные но чет так и не получилось быстро, не зря за софт видеоконференций все же деньги дерут. Можешь еще webrtc глянуть.
>>1866146 >Хоп, а вот и еще один неосилятор базовых вещей. У которого опыта явно больше чем у студентика, всё ещё верящего в волшебный солид.
>что именно в нем НИНУЖНО А где я писал что оно нинужна, поехавший? Я написал что солид и вся свистопляска вокруг него — когда вокруг обычных советов пытаются строить архитектуру и вообще все процессы разработки а не исходят из конкретных нужд — это ебаный карго культ, который надувают долбоёбы вроде тебя.
Какой нибудь SRP из хорошего совета руками религиозных идиотов догматично дробящих всё на объекты с 1 целью и желательно с функциями по 4 строки)0 превращает отладку в ад, просто потому что вся логика размазана по 5-7 строчек размазана на 6 модулей (3 из которых тупо проксируют вызовы туда-сюда и ещё 1 нужен просто чтобы это всё говно слинковать друг с дружкой, лол), если там есть асинхронщина — это вообще время на отладку x10 просто ради того, чтобы хотя бы 1 раз пройти весь этот граф в отладчике, потому что отладка чужого кода всегда начинается снизу логической цепочки. Добавляем туда L/ISP — у нас ещё все общаются по протоколам/интерфейсам/итд, сразу куча бойлерплейта (причём в большинстве случаев неиспользуемого, т.к. подмена имплементаций и тесты вообще есть у пары модулей из сотни, да и делается она элементарно даже если автор хотя бы слышал про DI но не делал интерфейсы вперед), проблемы с перформансом, временем компиляции (просто из-за кучи бойлерплейта), необходимостью несколько часов изучать что и как работает ради добавления, блять, кнопки итд. Добавляем OCP и получаем необходимость форкать нахуй каждую либу когда оказалось что нужно какое-то поле или ждать неделю до следующего спринта пока команда делающая либу дойдёт до этого таска, лол, спасибо.
Разве что про Dependency Inversion сказать ничего не могу, единственный однозначно полезный совет, лол.
>>1866160 >пук Так это другой ананас, шизоид ты ебаный.
>>1866226 Потестил с udp и покадровой передачей. Очень много глитчей и артефактов, но задержки практически нет. Интересно, будет ли лучше, если передавать закодированное видео?
>>1866287 Ты же отсылаешь фиксированное количество пакетов за 1 времени. А на приемной стороне ведешь лог, сколько получил за единицу времени. Вместо задержек можешь в каждый пакет добавить метку времени, а на приемной стороне смотреть разность меток, т.е. вариацию задержки.
>>1866131 >"Финальная величина" есть и у хипа Которая ограничена размером оперативной памяти. В случае со стэком, выделяется ограниченное количество памяти под него, которое в рантайме не расширяется. >Нет. Программа падает оттого, что нехватку памяти для стека нельзя отловить стандартно. Сынок, сразу видно, что ты в ассемблере не бум-бум. Ты знаешь вообще как рекурсия работает и что есть стэковый фрейм? Пиздуй учить матчасть, короче.
>>1866153 если мы говорим про лялекс, то там размер стэка ограничен ulimit'ом так или иначе. Позволить ему быть размером с ОЗУ ты не сможешь, в отличие от хипа (грубо говоря, так как есть еще данные в процессе, занимающие память, но на хипе можно выделять память, пока весь ОЗУ не кончится).
>>1866298 > Которая ограничена размером оперативной памяти. Про виртуальную память и пределы а ля юникс не слышал? > В случае со стэком, выделяется ограниченное количество памяти под него, которое в рантайме не расширяется. Это ограничение качественно ничем не отличается от ограничения на размер кучи. Количество только другое. > Сынок, сразу видно, что ты в ассемблере не бум-бум. Юноша бабахнул.
>>1866250 Я когда-то давно немного занимался стримингом видео. Не знаю, чем именно ты декодируешь, но я точно помню, что ffmpeg не любил, когда я ему подсовывал половину кадра h264. Приходилось нарезать поток самому исходя из старт кодов ровно по границе NAL юнитов.
>>1866310 >пук среньк баивые картиначки Ограничение отличается тем, что размер стэка ограничен ulimit'ом (в Линуксе), а размер кучи - количеством ОЗУ. Или для тебя программное ограничение == аппаратное ограничение, шиз?
Дизассемблируй программу с бесконечной рекурсией и ты поймешь почему такая программа крашится, если тебе, конечно, известны вообще такие слова.
>>1866325 >Ограничение отличается тем, что размер стэка ограничен ulimit'ом (в Линуксе), а размер кучи - количеством ОЗУ. Для тебя man setrlimit: RLIMIT_DATA This is the maximum size of the process's data seg‐ ment (initialized data, uninitialized data, and heap). The limit is specified in bytes, and is rounded down to the system page size. This limit affects calls to brk(2), sbrk(2), and (since Linux 4.7) mmap(2), which fail with the error ENOMEM upon encountering the soft limit of this resource.
RLIMIT_STACK This is the maximum size of the process stack, in bytes. Upon reaching this limit, a SIGSEGV signal is generated. To handle this signal, a process must employ an alternate signal stack (sigalt‐ stack(2)).
> программу с бесконечной рекурсией и ты поймешь почему такая программа крашится И даже с конечной, но большой )))))) О чем и писал: нет стандартного способа обнаружить исчерпание предела стека. А malloc можно проверить на NULL. Вот и фся разница.
>>1866320 Я написал клиент и сервер. Клиент посылает пакеты серверу, сервер их собирает. Пока что передаю MJPEG (это же как раз отдельные кадры в jpeg закодированные?).
>Приходилось нарезать поток самому исходя из старт кодов ровно по границе NAL юнитов. Если не впадлу, расскажи поподробнее про это и в целом про задачу, которую решал. ffmpeg умеет только принимать поток или передавать тоже умеет (например, на заданный ip и порт)?
На сколько сильно стоит обмазываться умными указателями, контейнерами и прочим stl вещами? Стараться делать всё - некоторые вещи проще и понятнее сделать в си стиле. Другие, безопаснее с использованием stl. Как искать баланс? И как на это смотрят в коллективах?
>>1866443 Если речь идёт о c++, то нужно пользоваться его благами, а не избегать их. Stl -- это пример отлично написанного нереально крутого кода. Без этого никуда. Более того, не стоит использовать на плюсах сишные библиотеки. Это считается дурным тоном. В крайнем случае пишется плюсовый биндинг к сишной библиотеки. Ну вообще думай головой, чел. Это путь сиплюсплюс.
>>1866193 Тебе об этом и говорят, дурачок. Что SOLID сам за тебя хуйню не спроектирует. Чтобы он работал, надо правильно выделять абстракции. Дебилы этого не умеют делать, создавая какие-нибудь классы открывалки файла, огребают и начинают верещать, что это все солид неработающий уиноуат, и процыдуркыми хуяк-хуяк прощи делыть.
>не исходят из конкретных нужд Ну так это тоже не c солид беда. Это в принципе такая постсовковая проблема, когда при решении простейшей проблемы (записи "ты хуй" в файл ц:\говно.тхт) мамкины умники начинают звенеть яйцами и городить MVVM-фреймворки, ибо стремится к тому, что "крута и сложна" (а при правильном использовании солид и паттернов должно быть проще и легче).
>тесты вообще есть у пары модулей из сотни Ну дак и причем тут солид? Давай тдд еще обосри.
>проблемы с перформансом, временем компиляции Ты как бы платишь этим за гибкость реализации. Нету гибкости? Значит, проектировал долбоеб. Он и процидурку мог с ошибками написать, какая разница?
>>1866448 Ну вот к примеру, симуляция игры жизнь. Поле - двумерный вектор. Задача - найти соседей клетки икс. Если мы работаем через стандартные итераторы, то у нас возникает ебля с их правильным расположением. Точнее необходимость изобретать костыли из-за замкнутости карты (сосед последней точки - начальная) по условию задачи. Как я понимаю наиболее правильный способ в идеях си дважды сплюснутого - это создать наследника от базового итератора, который корректно будет обрабатывать эту ситуацию
>>1866482 Вот этого двачую. Я при владении асмами, крестами и сями вообще ни разу почти не притрагивался к юниксу. Некоторые когда узнают это глаза круглые делают мол раз я такой задрот что асмы освоил почему это я в пердоли не вкатился. А ответ прост: я хочу создавать, а не разбираться по гайдам в чужих и отваливающихся программах.
Потому что линукс это: нужно что-то сделать -> ищешь гайд -> выполняешь гайд -> выскакивает ошибка хотя в гайде всё заебись -> гуглишь ошибку -> фиксишь ошибку -> не помогает\вылазит другая ошибка
и это жутко бесит и на нервы действует, на винде ничего такого не было ни разу в жизни. Если владеть реестром то переустанвливать шиндовс не придётся никогда.
>>1866477 Я понимаю, что он мой друг, и им достаточно быстро и просто решить задачу но, как на это будут выглядеть, не в моём мелком проекте, а в каком нибудь большом?
>>1866346 В старых версиях ffmpeg был стример, но сейчас его оттуда выпилили. Если не хочешь писать свой, то можешь перекатиться на gstreamer (или live555).
>>1866506 Блин , чел, ну включи мозг. Я, например , с виндой ебался гораздо больше. Мне легче в конфиг залезть, чем искать , где какую галочку поставить. Легче работать в консоле , а не в громоздких приложениях.
>>1866346 >ffmpeg умеет только принимать поток или передавать тоже умеет (например, на заданный ip и порт)? По идее и то, и то. Ещё и gstreamer может, он более на это нацелен. Но в моём я не мог так просто всё сделать. Я по протоколу, который мне достался "сверху", получал тупо битовый стрим h264, и нужно было его воспроизвести внутри окна другой программы. Была бы моя воля - использовал бы специально предназначенный для потоковой передачи MPEG-TS, но не судьба. Вручную программно кормил ffmpeg и получал оттуда кадры. >как ты границы nal юнитов определял Обычный start code: ищешь 00 00 01 или 00 00 00 01 в потоке - это и означает начало следующего юнита.
А, и вот ещё что: если ты используешь UDP, то у тебя пакеты в теории могут приходить в разном порядке. Возможно из-за этого тоже могут быть у тебя артефакты. Для этого, как тебе выше ответили, тебе нужно писать свою синхронизацию.
>>1866508 Ну и нахуй нужен компилятор этот. Главное - получить из плюсового кода экзешник любыми способами. Сразу и поддержка всех платформ, для которых есть компилятор сишки.
>>1866514 Вот не ебался с виндой никогда, она просто работает. А скрин тиринги в браузере в линуксе, когда 2 года под ним работал, забороть так и не смог. Спасибо, что нынче я пишу только под винду.
>>1866524 Потому что он хотел родить ребёнка, а получил урода корявого. А всё почему? Потому что он не задумывался о сложностях написания компиляторов. Вот тебе и одна из причин плохого дизайна языка.
если уж так нарвится ебаться с чужими программами и копаться в них 1с изучите полезнее будет и работы больше да и высокооплачиваемей она или фотошоп какой-нить или 3дмакс, но впизду эту линь
>>1866559 Линь был показателем компетентности в 2010 максимум. Сейчас его знают все, и большая часть понимает, что это кусок говна, а не десктопная операционная система.
>>1866563 Тем не менее люди пользуются им годами как десктопной системой. Потому что хотят получить полностью управляемую систему. Гибкую. Интересную. Не без недостатков, конечно.
>>1866565 проиграл с ИНТЕРЕСНОЙ операционной системы. да, латать нерабочее говно, кращущееся КДЕ и прочую хуйню васянскими патчами это охуеть как интересно. Но платят на работе за другое.
Поддвачну. Всегда проигрываю с сектантов, когда всем на работе выдают макбуки, но они топят за прыщи и ебутся потом с отпадающей сеткой, впнами, аудио и прочей ебалой.
Не забываем еще о том, что на работе есть свои секьюрити полиси, под которые не попадают все доступные линуксовые дистрибутивы, а какая-то ебучая Убунта.
>>1866567 Винда тебе такого не предложит тем не менее... Линукс богаче, круче, брутальнее. Алфач одним словом. Я по нему теку как по реке очень быстрой
>>1866572 Так мне это нахуй даром не надо. Тратить свое время на придуманные проблемы, которые в других местах уже решены. Я не давным давно не студентик, у которого дохуя свободного времени, чтобы тратить его на хуйню.
Мне платят только за написание кода. Все. И именно этим я буду заниматься с максимальным усердием, чтобы потом получить лычку ебаного принципал инженера, а не тратить свое время бессмысленно.
>>1866485 Как тебе там в 2000 году, дедуль? Лялекс из коробки уже давно менее пердольный, чем дриснятка. Офк каждому своё, универсальной ОС под все возможные задачи нет и вряд ли будет, но со своим высером ты конечно загнул пиздец.
Мой коллега огорчался, что не может сидеть в божественной Студии так долго, как хочет, потому что проклятая Венда самостоятельно перезагружает его Коплюктер для апдейта. Как хорошо, что на моей ОС это невозможно.
Указатели на функции используются в функциях высшего порядка? Я могу с помощью них написать условный map, filter, reduce? Как часто они используются в реально жизни? Этот ебаный синтаксис никак не могу запомнить.
Сап, есть вопрос по архитектуре. Есть класс (назовем его рендерер) который создает и разрушает текстуры, т.е. не должно быть такой ситуации, что текстура осталась, а рендерер уничтожился. Так вот как это лучше всего реализовать? Пока придумал 2 варианта. Первый - внутри рендерера завести массив shared_ptr с текстурами и при создании возвращать weak_ptr на текстуру. Второй - в конструктор текстуры передавать shared_ptr рендерера, но это как-то хуево помоему т.к. сам рендерер не может знать, что он внутри shared_ptr.
>>1866611 >>1866781 А как же всякие отладочные конструкции в дебаг версии? Типо #define LOG(...) printf(__VA_ARGS__ ) который в релизной версии превращается в пустую строку, тот же assert тоже является макросом.
>>1866784 Что непонятного? Ладно упрощу пример. Есть класс кучи которая выделяет и освобождает память. Т.е. если была уничтожена куча то и вся выделенная ею память должна стать невалидной, при этом если где-то остались экземпляры памяти выделенной этой кучей, они должны автоматически занулится. Т.е. вот как-то так должно работать https://godbolt.org/z/EYWf1E
>>1866860 А что не так? По сути виндоусовская куча так и работает, т.е. при RtlDestroyHeap у тебя освобождается вся память выделенная этой кучей, только при этом остаются висячие указатели. Вот мне бы хотелось как-то с использованием фишек C++ сделать это безопасным без висячих указателей.
>>1866774 Текстуры могут держать в себе shared_ptr >>1866774 >сам рендерер не может знать, что он внутри shared_ptr enable_shared_from_this специально для этого и сделан, правда там аккуратно нужно создавать объект. Ну а вообще, у тебя часто пересоздание твоего Рендерера? Потому что если он по сути один на всю программу, то это оверкилл.
тупой пост от студента Есть ли смысл учить Qt, если хочется работать на плюсах? Или надо иметь низкоуровневые фундаментальные знания, чтобы взяли на работу? Если да, то какие? Где вы работаете на плюсах? Есть вакансия (не претендую), там написано - знание C++ и WinAPI. А суть работы в чём? Что там с WinAPI делают, чего нельзя на более высоком уровне?
>>1866887 Спасибо, не знал, что такое есть. Это скорее не для рендерера, а для кучи которая выделяет выделяет ресурсы под текстуры и тд. В dx12 там пиздец с этим и нужно самому управлять таблицей дескрипторов.
>>1866891 Ответь себе на вопрос, стоит ли учить де-факто единственный gui-фреймворк? Если в вакансии указан WinAPI, то там вполне себе может попасться MFC
Привет, крестач Вопрос к эмбедщикам (вроде как в сипипи треде должны быть такие) - насколько часто юзают Keil uvision в качестве IDE? Правда ли, что в последнее время предпочитают использовать плюсы вместо сишки в разработке прошивок и в целом в эмбедщине? Можно ли самостоятельно учиться этому, не имея физически рядом железки типа STM? (в теории ведь можно обмазаться эмулятором, если есть, плюс даташитом, но как оно на практике?)
>>1866925 >Гуи на С++ это, все таки, больно А кто тебя заставляет? Qt гуи удобнее на qml клепать, кресты там на беке только будут, всякие модельки и безнес логика.
>>1866906 Я в графоне максимум лет 6 рендерил картинки на DX9, но как я понял из MSDN по сути ты пишешь аллокаторы для цпу/гпу. Разве такие вещи создаются посередине программы? Другими словами, как может возникнуть ситуация, когда ты внезапно удалишь таблицу дескрипторов пока есть активные текстуры?
>>1866783 > А как же всякие отладочные конструкции в дебаг версии? Можно изъебаться со сборкой и скармливать компилятору разные файлы в зависимости от версии программы.
>>1866891 GUI в проектах с крестами пишется вообще на всём подряд. Qt, WPF, MFC, всякий WEB. Приходится постоянно перекатываться и регенерировать. Qt хорош для понимания того, как на плюсах можно писать крупные SDK (в плане исходников и общего устройства).
В общем потыкай в него, напиши какой-нибудь paint или текстовый редактор.
В глубины глубин не лезь, потому что он может тебе никогда и не пригодится.
>>1866925 Не осилятор. Я вот вебсайты на плюсах разрабатываю, от сервера до генерации html или тонкого управления всем устройством на основе ГУИ технологии. Умею открывать порты, поднимать сокеты, увеличивать быстродействие (НЕ СКОРОСТЬ!).
>>1866980 Да directx с каждой версией становится все более низкоуровневым. Если раньше для создания текстуры ты просто вызывал CreateTexture2D то теперь тебе нужно создать таблицу GPU и CPU дескрипторов и самому управлять индексами в этих таблицах (назначать индексы ресурсам и освобождать их).
>>1867303 > directx с каждой версией становится все более низкоуровневым Вот поэтому он и отсасывает у Вулкана. Как по производительности, так и по удобству кодинга. В Вулкане, конечно, тоже такое надо делать, но там хоть для людей продуманный сишный интерфейс, а не ебля в сраку с СОМ-объектами у индусов.
>>1867328 > вкатиться в Rust > Все правильно делаю? Нет. У питона вторым языком для байтоёбства должен быть Си. Вместо пидораста лучше Го взять, если хочешь безопасный кодинг и производительность. Алсо, про Раст можешь почитать такие ахуительные истории питонистов, даже для не питониста выглядящие дико: https://compileandrun.com/struggles-with-rust/
>>1867338 > У питона вторым языком для байтоёбства должен быть Си. Ну сишку я базовый курс прошел на юдеми. Сразу за ним начал плюсы учить. Сишка помогла, конечно, разобраться с памятью и байтоебством и помогла также в понимании плюсов. Это как ступеньки, понимаешь?
>>1867341 Ну по поводу раста я погорячился, конечно. Сейчас на работе у нас бек на пистоне, а я хочу съебать с этой злоебучей змеи в что-то более человеческое и продуктивное.
Раст сейчас на хайпе, то это больше из интереса. А для бека выбор небольшой - ГО или Джава.
А Си и плюсы для того, чтобы понимать, как это все работает. Потому что все-таки считаю, что нужно было начинать именно с си и плюсов, а не въебать 5 лет в питон.
>>1867351 > Довольно ламповое. С тем же успехом можешь найти себе парня и лампово пороться в сраку. Кодинг-то тут причём? Или ты из этих, опенсорс-шизов, переписывающих либы с сишки на раст, только потому что нормальный биндинг без ансейфа не сделать.
>>1867354 Братиш, я ж тебе написал, что чисто из интереса, потому что на хайпе. Остальное мне похуй. Сишка и плюсы - вечное. То, на чем стоит делать акцент всегда.
>>1867347 >я хочу съебать с этой злоебучей змеи в что-то более человеческое и продуктивное Иди сразу в embed. Именно там самые низкие зарплаты, а продуктивность просто зашкаливает.
Аноны, подскажите, доступ к массиву сильно снижает производительность моего кода (примерно на 250%). Работа с массивом очень простая: в объект поступает индекс, объект что-нибудь записывает в массив по этому индексу; другой объект читает из массива по индексу. Эти объекты находятся с сотней других объектов в цепочке: код идет по порядку по каждому из них и выполняет его функционал. Если убрать строчки чтения/записи в массив в этих двух объектах - все работает гладко и быстро. Код в других объектах гораздо нагруженнее. Что не так с массивами? Уверен, что с массивом в единицу времени работает только один поток.
>>1860795 >Просвещайся: https://www.viva64.com/ru/t/0065/ Анончики, где ещё почитать про такие нюансы концептуальные? Всякие термины сложные и т.д. Не знаю даже, как такое гуглить.
>>1867425 >А про функциональщину в C++ могу лишь сказать, что ranges выглядит круто, но юзать их почти никто не будет, инфа сотан. Стл алгоритмы вполне себе фп и были уже в первом стандарте.
>>1867495 Ты сборку-то в релиз перевёл, ёба? В студии, например, в дебаге по умолчанию включен operator debugging и bounds checker, которые довольно сильно тормозят код
>>1867556 Из этого следует, что долбоёщер ты, потому что произвёл бесполезное действие. В чём тогда, по-твоему, смысл отвечать кому-либо с сагой, не неся никакого месседжа?
>>1867425 >Полезно про него почитать только уберзадротам, которые кресты знают как свои пять пальцев. Ровно наоборот. Его нужно изучать, пока у тебя мозг не закостенел, чтобы потом не выдавать фразу по типу: >Хаскель это только борщик хлебать.
>А про функциональщину в C++ могу лишь сказать, что ranges выглядит круто Всё, на этом функциональщина в плюсах для тебя закончилась?
>>1867758 Под линем всё чаще подразумевают дистрибутив, про ядро уже начали говорить "ядро линукса". А дистрибутивы состоят из софта, написанного на десятках языков.
>>1867758 > чистых сях Ты заглядывал в исходники хоть? Там такой говнокод, что пиздец. То форматирование в одном файле в разных стилях, то макросы повсюду и хуй поймешь что за магия там, то какая-то хуйня с нулевой читаемостью как после обфускации.
>>1867811 Большинство из следующих используемых в ядре конструкций отсутствуют в языке Си
Вывод типов - typeof(x) Ассемблерные вставки - asm volatile("pxor %xmm5,%xmm5"); Диапазоны в свитче - case 1 ... 7: Массивы нулевой длины - some_variable_len data[0]; Адрес вызывающего - ptr = __builtin_return_address(0) Определение константности выражения - if __builtin_constant_p(c) Различные атрибуты функций - __attribute__((always_inline)) Подставляемые функции - inline void fun() Имя текущей функции - my_func_name = __func__ Инструкции-выражения - ({ int a = b + 1; a; }) Переменное число параметров в макросах - __VA_ARGS__ Арифметика с указателями на void - ++void_ptr Неконстантные инициализаторы - int arr[2] = { x, y }
>>1867842 Я прав, потому что написал "Большинство из следующих", потому что мне реально лень проверять список на то что таки соизволили занести в стандарт, а еще так выглядит внушительнее.
>>1867842 Но ведь там действительно повсюду дефайны, под которыми инлайны и прочая магия. Иногда и по два дефайна перед функцией и гадай что это такое...
Допустим, у меня в проге есть ивенты. Я хочу их передавать туда-сюда, хранить их, чтобы можно было в нужном порядке их исполнять и т.п. Я представляю себе это в виде команд. Типа "send src_id dest_id 'data'". Ивенты могут приходить от пользователя или генерироваться внутри программы. Кроме самой команды и аргументов у неё ещё есть приоритет. Как это хранить? Думаю сделать структуру, где будет std:map<const char, const char> с аргументами и int для приоритета. Эти структуры будут запихиваться в std::priority_queue и доставиться оттуда для исполнения. Аргументы будут перегоняться из строк в енумы, инты и айди и т.п. уже во время исполнения команды. Всё правильно делаю? Алсо, есть ощущение, что std::priority_queue не самое быстродейственное решение, но пока это не принципиально.
>>1868035 xmacro решают проблемы, которые никак больше нельзя решить. В С++26 только если завезут рефлексию + компайл-тайм иньекцию кода. А до этого, только xmacro. Сам в проде накостылил охуенных xmacro, и новый параметр наших говноконфигов теперь одной строкой добавляется с автовыводом типа.
>>1868010 Судя по коду - это обычный IPC через пайпы, который используется и в 10ке, лол. Другое дело, что нахуя руками, но это ладно
>>1868074 Через любой механизм IPC. Хз че там в мастдае, в лялексе есть дохуя - message queue, pipe, named pipe, shared memory (там мьютекс нужен офк), unix socket, уверен, что часть из них реализована и в winapi
Пятый день ебусь с этим бустом. Аноны, подскажите, как мне собрать из сырцов boost 1.69 с iostreams, чтобы не получить ошибки компоновки zlib / undefined reference boost::iostreams::zlib::...? Собираю как есть - boost build не видит системный zlib, и потом компоновка взрывается. Собираю с указанием внешнего zlib - boost build видит, а потом cannot find -lz. Собираю и устанавливаю внешний zlib в префикс, симлинки от либы zlib пробрасываю куда-нибудь в /usr/local - опять undefined reference к boost::iostreams::zlib::.... Пиздец просто.
Аноны, подскажите. У меня есть класс матриц, который я написал. Я хочу использовать его в другом классе KF. Подключив его как Matrix.h и Matrix.cрр, я почему-то не могу в классе КF инициализировать матрицу Matrix Test(3,3), так как компилятор пишет expected identifier before numeric constant. Eсли же я пишу Matrix Test; Test(3,3); , то пишет то же самое. Как исправить?
>>1868276 Это да, но как делать это ин э си плас плас вей? Как в одном поле хранить список из енумов, интов, строк и моих классов? То, что выше анон кинул, я посмотрел, но там какая-то магия. Я, вроде, примерно понял что-то, но скорее всего нихуя не понял. В любом случае, мне бы какой-то более простой, может, менее общий, способ, но менее васянский чем у меня.
>>1868282 >То, что выше анон кинул, я посмотрел, но там какая-то магия Тогда велосипедь с ноля. Делай приорити кью указателей на базовый класс эвента с приоритетом, храни производные от него эвенты с нужными под каждый случай данными. Для быстроты возможно стоит хранить не айди объектов а просто указатели на них, они и так должны быть уникальны.
>>1868298 > производные от него эвенты с нужными под каждый случай данными У меня получается, что нужно слишком много классов под это создавать, т.к. есть, например, ивент определённого типа, он может в качестве параметра иметь один из 20 подтипов и в зависимости от подтипа варьируется набор оставшихся параметров. Получается, нужно создать 20 классов. Звучит как-то немного жижно, особенно учитывая, что есть случаи, где предполагается вариация не в 20, в 200 случаях. И у них ещё могут варьирываться оставшиеся параметры. Или лучше тут ничего не наговнокодить, если прям сильно не закапываться с этим? Как я понял, чтобы по-нормальному это сделать, нужно отдельно упорядоченно хранить типы аргументов, а сами аргументы можно в тупо в бинарном виде записать в один кусок памяти. А при необходимости обратиться к ним, их нужно десериализовывать и приводить к нужному типу. Но я чувствую, что чтобы сделать это нормально у меня уйдёт джва года, при том что я не очень разбираюсь в темплейтах и всём таком.
> Для быстроты возможно стоит хранить не айди объектов а просто указатели на них Это хорошая идея. Но вообще, айди я просто для примера написал, у оно в другом куске программы для других целей используется. Но если там всё состыкуется, то почему бы и не заменить.
>>1868321 >Как я понял, чтобы по-нормальному это сделать, нужно отдельно упорядоченно хранить типы аргументов, а сами аргументы можно в тупо в бинарном виде записать в один кусок памяти. Можно так, особенно если структуры данных эвентов не будут меняется после старта программы. При большом объеме структур имеет смысл их описывать на дсл, и в бинарном виде создавать уже в рантайме, виде дерева объектов умеющих распаковать данные из твоего куска памяти. Хотя возможно в твоём случае это оверкилл (я прост имею отношение к авиационным протоколам, там может быть нужно управлять/де/сериализовывать по 10к+ параметров, делать это руками в коде - натуральное безумие). Если структура данных каждого эвента индивидуальна, придется ее слать вместе с ним, или можно вообще все вместе в виде JSON как в вебе, но тут уже производительность сядет.
>>1868140 >просто, решает твою проблему и кроссплатформенно Не должно быть причиной использовать что-либо всерьёз. Если что-то потребляет больше ресурсов компьютера, но проще в реализации, то это что-то не имеет права на существование.
>>1860500 (OP) Привет. Вот я хочу, например, написать прогу на с/с++, которая считает crc для файлика. Каким образом я могу через cmd или баш-скрипт или пистон хендлить результат подсчётов этой функции? Мейн ведь возвращает лишь код, который сигнализирует об ошибке.
Почему не работает? Почему она выходит из if вообще? 1 раз всего проходит и всё какое бы небыло значение. Это программа для нахождение наибольшего делителя.
>>1868574 а бля я ж if написал вместо while ))) вот исправил всё, но оно доходит только до 100 и потом обрывается, как будто не хочет заного идти в while. Это почему? Типо оборвал goto и цикл сломался?
>>1868578 Во-вторых, дай нормальные название всем переменных. В-третьих, дай комментарии хотя бы к циклам. По-твоему другим людям больше делать нечего кроме того как вникать в твой гениальный алгоритм? В-четвёртых, бля лол, почему у тебя переменные объявлены между вводом и приглашением к вводу, и в несколько строчек? Можно в одну. В-пятых, зачем goto? Это условие задачи?
>>1868585 Прости анончик в следущий раз всё буду коментить? Не это не условие. А что все так goto хейтят? Классная же штука. Вот в моём примере нужен был бы дополнительный цикл и continue, что по сути и есть goto.
>>1868590 Я не знаю, почему другие его хейтят, но лично просто не понимаю суть его использования, когда есть нормальные циклы. goto это аналог джампа в ассемблере, но в ассемблере понятно, зачем нужны джампы - там, блядь, ничего другого нет. Зачем в высокоуровневом ЯП нужны джампы я хз.
>>1868593 Ну так я и сказал, что без применения goto нужен был бы огромный во весь код цикл с началом в метке, и continue в месте goto. Это же просто усложнение. Его не стоит использовать много, потому что из за табуляции легче циклы читать, но так вполне полезен.
>>1868590 Потому что goto позволяет тебе запутать программу до охуения, а так же отстрелить себе всё что можно. Даже в твоей микролабе goto сильно ухудшает читаемость. Вообще, считается, что если у тебя возникла необходимость воспользоваться goto, значит у тебя тотальный косяк в архитектуре программы. Короче, я запрещаю тебе использовать goto в современном С++.
goto приносит столько проблем, что даже в древние времена в С было два и только два случая, когда можно было использовать этот оператор и не быть обоссаным: джамп к одной точке выхода из функции, если в ней требуется освобождать ресурсы перед выходом, и выпрыгивание из сильно вложенных циклов, вместо написания пяти break'ов. И то, последний юзкейс довольно сомнителен.
>>1868584 Вот ты и попался. Если нужен универсальный пакетник, то это snap. А штатный пакетник всяк лучше, чем установленный с его помощью vcpkg или кто там ещё.
>>1868642 > Вот ты и попался. Если нужен универсальный пакетник, то это snap. А штатный пакетник всяк лучше, чем установленный с его помощью vcpkg или кто там ещё. Я пытался понять, что ты тут написал, но не получилось.
>>1868661 > Что это за snap? Это извращенная параша из мира красноглазых пердолей, где вместе с пакетом идут все его зависимости. Как если бы в Винде к каждому приложению прикладывали свой дистрибутив directx, либ vc++ и системных библиотек. У пердоликса настолько ущербная система зависимостей, что приходится жрать говно не с лопаты, а прям с земли.
class Date { public: class Invalid {}; Date(int y, Month m, int d); void add_day(int n); Month month() { return m; } int day() { return d; } int year() { return y; } private: int y; Month m; int d; bool is_valid(); };
ostream& operator<< (ostream& os, Month& m) { return os << month_tbl[int(m)]; }
Какого хуя выдаёт ошибку в функции d.month()? Ошибка C2679 бинарный "<<": не найден оператор, принимающий правый операнд типа "Month" (или приемлемое преобразование отсутствует). Если просто написать Month biba = Month::jul; cout << biba; То всё выводится.
>>1868734 У тебя метод << принимает неконстантную ссылку, а ты туда передаешь временный объект. Короче напиши ostream& operator<< (ostream& os, const Month& m) и тогда заработает наверное.
>>1868625 >only available with -std=c++11. Ничего страшного? У меня такое было наверное только когда заставляли в 12й студии писать. Потому что винда хр внезапно у всех до сих пор.
>>1868689 > Как если бы в Винде к каждому приложению прикладывали свой дистрибутив directx, либ vc++ и системных библиотек. Но ведь всё так и происходит... Даже М$ теперь всё своё складирует в одну кучу. И это в целом нормально. Но vcpkg и snap, имхо, ортогональные штуковины.
>>1868808 > Зачем пердолиться. когда можно воспользоваться уже готовым? Можно потрениться пердолиться чтобы в случае чего быть готовым и разгрести говно
>>1868806 А что vcpkg по-твоему делает? Выкачивает саму библиотеку и все её зависимости, а потом их собирает прямо у тебя на компьютере. При желании можно даже флаги компилятора подкрутить
>>1868590 >А что все так goto хейтят? Хейтят, потому что боятся, потому что не осилили. Во многих проектах на c/c++ goto используется. Правда его нужно научиться правильно использовать.
>>1869359 > Во многих проектах на c/c++ goto используется. Потому-что обоссаных профнепригодных даунов в НИИ набрали, вот и во многих проектах goto используется.
Поясните, пожалуйста, за перспективы С/С++ в научно-технических приложениях. Сам я - НИИшник-металлофизик, на работе пользуюсь Пайтоном, вольфрамовской Математикой и различными МКЭ-системами, но вот решил вкатиться в что-то более низкоуровневое. Больше тяготею к С, так как он проще, а у меня и так есть чем ебать мозги помимо программирования, но не хотелось бы заскочить в поезд, который уже никуда не идет (поэтому Фортран и не рассматриваю). В общем, какие я пока что вижу варианты варианты: 1) С 2) С++ 3) не ебать мозги совсем, ознакомиться с Cython и дальше изучать Матлаб.
>>1869394 Вариант 3 лучший. С++ реально сейчас нужен либо в около-легаси в гигантских конторах, либо в каком-нибудь супер хайлоад дистрибудет перформанс залупе, в которую без релевантного опыта не пробиться.
Не смотря на то, что я пишу на крестах больше 7 лет - вкатываться в них я бы не советовал В свободное время пишу на сишарпе и мне он нравится ощутимо больше, хотя я его практически не знаю
>вкатываться в них я бы не советовал Есть какие-то мысли о перспективных научно-технических языках, во что стоит вкатываться? Или все же вариант 3: продолжать дрочить Пайтон со всех сторон, параллельно посматривая на коммерческие инженерные и научные системы?
>>1869394 Ну тут всё просто. Если ты научный деятель, то для тебя инструменты высокого уровня: Python, Matlab.Ты реализуешь концепт своей идеи и отдаёшь его инженерам. Если ты инженер-работяга и не любишь/не можешь в матан, то для тебя c/c++ с погружением в железо. Фортран в некоторых задачах удобнее, но оно того не стоит. Математики на с/с++ обычно пишут лютый говнокод.
Для примера МКЭ системы пишутся на C++. Там по традиции массовый параллелизм и gpu (расчёты и визуализация). Почти все языки для gpu это диалекты или расширения C/C++ (cuda, opencl, hlsl, glsl и прочие).
>>1869566 >Если ты инженер-работяга и не любишь/не можешь в матан, то для тебя c/c++ с погружением в железо. >Математики на с/с++ обычно пишут лютый говнокод. Странно, я почему-то думал, что все наоборот. Пайтон-то - простой язык, который и запоминать особо не надо, а вот в С++ вроде бы надо включать голову, ебаться с логическим построением кода и т.д. Просто я думал, что в конце-то концов у более низкоуровневых языков должны быть какие-то преимущества в научно-технических задачах, помимо быстродействия. У языка С ведь наверняка есть целая отрасль технических приложений, в датчиках там, программировании научного и инженерного hardware и т.д.
>>1869576 >Я бы все таки думал, собстно, о питоне. Ладно, наверное так и поступлю. Лучше выучу четвертый иностранный и наконец-то сяду за алгебраическую топологию, все-таки у меня это и лучше выходит, и удовольствия в процессе получается больше. А там может когда-то.
>>1869609 Ну и хуй с ним. Кому нужны эти книги? Берёшь и пишешь свои численные методы, если не нашёл подходящей библиотеки. Да и численные методы не привязаны не то, что к какому-то конкретному языку, а вообще к программированию. Чтобы уметь в численные методы, нужна математика, а не программирование.
>>1869619 Это все верно, но зачем мне ебаться с этим, если есть обобщенный опыт одного человека, который с этим достаточно наебался и написал соответствующую книгу? Я лучше потрачу свое время на что-то другое, а по численным методам просто возьму эту книгу, почитаю, поделаю упражнения по ней и сверюсь в ответами, приобретя упорядоченный опыт.
>Да и численные методы не привязаны не то, что к какому-то конкретному языку, а вообще к программированию. Чтобы уметь в численные методы, нужна математика, а не программирование. Ну, если я не знаю как в данном языке вводится дифференциальный или интегральный оператор, например, то даже знание математики мне не сильно поможет.
>>1869623 На самом деле многие алгоритмы очень интересно реализовывать в функциональном стиле. Даже более, многие численные алгоритмы очень хорошо ложатся в функциональную парадигму. Аж глаз радуется! Если ты хорошо шаришь в mathematica, то, возможно, и сам это заметил, хотя mathematica немного в другую сторону заточена, но она гораздо ближе к хаскелю, чем плюсы.
Решать в любом случае тебе, брат. Знаю, брат, ты не ошибёшься.
>>1869623 >Ну, если я не знаю как в данном языке вводится дифференциальный или интегральный оператор, например, то даже знание математики мне не сильно поможет Даже если ты захочешь решать системы линейных уравнений, то тебе придётся начать с реализации матриц и векторов, а также всех операций над ними, ибо в c/c++ ничего этого нету из коробки (в фортране есть).
>>1869656 >тебе придётся начать с реализации матриц и векторов, а также всех операций над ними, ибо в c/c++ ничего этого нету из коробки Это и не нужно из коробки. Но и реализовывать не придется все уже давно есть https://github.com/fffaraz/awesome-cpp#math
>>1869648 > На самом деле многие алгоритмы очень интересно реализовывать в функциональном стиле. Пытался помнится как-то поучить хаскелл, а там в книжке realWorldHaskell была задача на алгоритм Грэхема, так я сидел, пыхтел, пытался, но в голову приходила не функциональщина, в результате я такого говна наляпал там, страшно вспоминать да я уже и не помню нихуя. Возможно не стоило это им в начальные главы пихать, а уж лучше после всех функторов и монад, наверное. к тому же хачкиль вроде не совсем оптимизрованный/быстрый выходит по сравнению с питоном наверняка лучше, но с многими другими языками не думаю
>>1869678 Ну там далеко не везде блочное умножение матриц, неэффективно реализовано умножение разреженных матриц, алгоритмы однопоточные. А всё это должно работать на абстрактной машине с массовым параллелизмом и распределённой файловой системой (фс lustre, а сама машина это пару сотен gpu или cpu или вообще несколько разных). Машина такая одна, а расчётных задач много (одна задача может считаться по несколько дней и если будут баги то всем будет атата). В общем c++ нужен прежде всего для решения тяжких инженерных задач.
Аноны, а вот какой тип мне указать перед функцией, если в результате у меня возможно 2 типа. Пример, функция перемножения матриц. После перемножения матриц 1х2 и 2х1 я получаю матрицу 1х1. Я бы хотел использовать такую матрицу, как число. Легальна ли такая операция? Если да, то какой мне задать тип?
>>1869698 >Даже double break решается лучше без goto, чем с Для этого, как я понимаю, нужно завести булев флаг и проверять его на истинность в обоих циклах. Ну и чем это лучше компактного и эффективного GOTO сразу на метку после цикла?
>>1869711 Матрица на матрицу = матрица и ниипёт. Если размер матрицы задаёшь шаблонными параметрами, то можешь для случая 1х1 добавить оператор приведения к числу
Даров чуваки. Подскажите, существует ли альтернатива GetFileAttributesA для девайсов \\.\PhysicalDisk в винапи? В архиваторе такая проверка стоит для последующего открытия файла, а мне ленту открыть надо.
>>1869701 >Ну там далеко не везде блочное умножение матриц, неэффективно реализовано умножение разреженных матриц, алгоритмы однопоточные Разве всякие бласы и лапаки не поддерживают автоматическую параллелизацию?
>>1869880 >В императивных языках все уже обернуто в монаду. Да ладно? Вот тебе выражение х % 5; Сайд эффектов нет, описания алгоритма расчета остатка от деления нет, ты просто сообщил что ты хочешь рассчитать, а не как. Все признаки декларативного программирования.
>>1869865 Параллелизм он тоже разный. Бытовой параллелизм это когда у тебя один процессор с несколькими ядрами. Научный это когда у тебя SMP система из десятка одинаковых процессоров, разделяющих общую память.
>>1870207 Ну если что-то типа такого, то работать будет: template<int M, int N, class T = float> struct matrix { template<int L> matrix<M, L> operator⚹(const matrix<N, L, T>& mx) { return matrix<M, L>{}; }; };
void main() { matrix<2, 3> mx1; matrix<3, 4> mx2; auto result = mx1 ⚹ mx2; }
>>1870305 Да и тогда ты можешь добавить шаблонную специализацию приведения типа для матрицы 1x1 и работать с матрицами как с числами. strcut matrix { operator float(); // без реализации }; template<> matrix<1, 1>::operator float() { return 0.0; } а потом писать типа такого: matrix<1, 1> mx; float val = 10.0 ⚹ mx;
>>1870369 Ну я написал пример как могло бы быть. А как оно в оригинале никто и не видел. Данный пример сгодится, если ожидается малое количество разных матриц. В общем случае лучше рантайм.
>>1870403 >Сапдвачсегодняменяотшилашлюха,сказалачтоядушныйтеперьятннгдемойшебмфаптред.png >>1870409 Тот тред пахнет хуем + я успешный C++ дев в будущем и не хочу копаться в говне вида унити и уе4.
>>1870429 > Пиши свой движок Это же золотое правило гейдева - тот кто пишет движки никогда не делает игр. Проверено на тысячах писателей двтжков своей мечты. Игр от них мы так и не увидели. Как впрочем и законченного движка. А тем временем игры на Юнити обходят по продажам ААА и работают на любом тостере, имея хороший графон.
>>1870462 Что конкретно тебе показалось смешным? То что Геншин за месяц заработал больше денег чем большинство ААА этого года или то что в нём графон лучше чем в клоне Геншина от Юбисофта с движком от Ассасина?
>>1870479 Чел, там же с первого взгляда видно родной рендер юнити. А присутствие оптимизаций никакого отношения к движку не имеет, говноделы где угодно слайдшоу сделают. Это пример того что написание своего движка - удел долбаёбов или профессионалов. Что ты успешно игнорируешь, сидя в манямирке, как и тысячи таких же вкатывальщиков в геймдев после учебника по крестам.
>>1870452 Пчел, ты сказал что не знаешь ААА игр на УЕ4, тебе привели список и ты слился сказав что у тебя нет мотивации читать потому что он большой. Ты понимаешь как ты выглядишь?
У меня есть пачка полиморфных объектов, которые я держу в одном векторе, потом в цикле для каждого из них вызываю один и тот же виртуальный метод. Можно ли как-то закэшировать указатели на методы, чтобы, пока вектор не изменился, не проходить снова и снова по виртуальной таблице?
>>1870595 >Можно ли как-то закэшировать указатели на методы, чтобы, пока вектор не изменился, не проходить снова и снова по виртуальной таблице? ИМЕННО ТАК, как описал это ты - вроде бы нет. >закэшировать Если нужна скорость и отсутствие вирт. вызовов и не важен порядок вызова вирт. метода для объектов в цикле, то делаешь vector для каждого derived class-а (вроде был какой-то видос на youtube или переведённый пост на хабре, что-то связанное с графикой в проекте использующем chromium - там описывалось что-то в этом духе), проходишь в цикле по каждому vector-у и вызываешь derived метод.
>>1870828 Можно на статические. На обычные можно сделать бинд с указанием объекта. Или обернуть вызов в лямбду. Но мне кажется это все будет медленнее чем обычный вызов виртуальной функции.
>>1870595 В теории можно делать то, что делают JIT-компиляторы и самому девиртуализировать вызовы (из прыжков по памяти перейти к сравнению указателей): https://godbolt.org/z/Ks558v . Вроде как, когда классов 1-2, может в теории дать выигрыш. Но точно ли такое тебе нужно? Виртуальные вызовы реально мешают, только когда у тебя они в критическом цикле, но тогда спрашивается на какой фиг у тебя в критическом цикле виртуальные функции и мешанина из вызовов? Может просто сделаешь энум и свитч? И то, если у тебя там какой-нибудь порядок в векторе есть, то branch target predictor верно предскажет, какой у тебя класс, и ты просто не заметишь задержек от беганья по указателям в виртуальной таблице.
>>1870914 Ну тут ты либо Branch Predictor (энум и безусловный вызов на известный указатель), либо Branch Target Predictor (загрузка динамического адреса функции и переход на него) будешь насиловать. Обычно первый всё же помощнее.
Куча очередей на входе данных Данные перекладываются в обработчики (из одних очередей в другие), потом обработчики, обработв данные, перекладывают их в выходные очереди
pop/push, соответственно, синхронизируемые. Софтина большая, где-то lock-free очередь используется, где-то mutex внутри, и т.д.
Что если обработчик не будет последовательно в цикле делать pop из очереди до тех пор пока она не пуста, а вместо этого будет создавать у себя локально новую пустую очередь и делать swap с той, которую надо обработать. Таким образом contention будет всегда только в момент swap (который просто pointer-swap) независимо от количества элементов в очереди. Есть профит?
>>1870945 >Тогда прям анлаки как-то. Можешь заменять указатели на очереди, а не сами очереди. Зато, если условия подходящие, можно вообще без мьютексов обходиться, на чистых compare_exchange_strong.
>>1870968 >Это выгоднее, если очередь в среднем содержит больше одного елемента. Вот я тоже об этом подумал. Но при этом если очередь будет всегда содержать только один элемент, то по идее никакого ухудшения не произойдет (как и профитов), просто будет то же самое, что и с while() { pop }