Это копия, сохраненная 19 апреля 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
⚹ https://github.com/sosachbot/cppthreadhat/wiki
Ответы на вопросы:
⚹ https://en.cppreference.com/w/
⚹ https://www.cplusplus.com/reference/
Для указателей: ⚹
Прошлый: >1831651
Лучше бы помог, я всё ещё пердолюсь. Всё началось после установки превью-версии студии, естественно удалил нахуй сразу её. Даже пустой проект не собирается и требует 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.
Он мне тут предлагает заниматься расследованием почему эта хуита не работает из коробки и не собирает пустой проект!
ПОЖАЛУЙСТА ПОМОГИТЕ(((
Вычисляй как игра палит, что пакет не отправился. А фильтр по идее и делается хуками на функции send/recv. Хз почему не работает, может там не только винсокеты.
Почему?
Не важно как палит игра, мне нужно лишь понять как поднять свой такой же сервер в том же процессе а дальше я уже сам
Чому обычная тцп прокся не подойдёт?
>LPWSAOVERLAPPED_COMPLETION_ROUTINE
>Хуюки
>C++
Винсок написан на чистом С, хуки - достаточно низкоуровневая вещь.
ХУК Я УЖЕ САМ СДЕЛАЛ МНЕ ЛИШЬ СЕРВЕР ПОДНЯТЬ НАДО ОСТАЛЬНОЕ Я УЖЕ САМ
Чёт я психанул, полез в ассемблер смотреть.
Строки 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, и пишем результат в переменную. Не сохраняя её в промежуточном регистре. Блядь в сон клонит. Но какого чёрта!
Просто даже отвечать на такие примеры это иди нахуй долбаёб.
Может нужно создать нормальный класс Monster и сгенерить класс MonsterData. Соответственно, первый будет использоваться внутри программы, у него будут меняться поля нормальным образом при необходимости, а когда нужно будет его сериализовать/десериализовать будет использовать класс MonsterData в который будут копироваться поля сохраняемого объекта/из полей которого будет создаваться новый объект класса Monster?
C-style
Толсто.
Не, ну я пойму, если кто-то пердолится в Eclipse. Там есть всякие эксклюзивные йобы (от той же NVidia для удалённого профайлинга GPU кода). Ну ладно там VIM на каком-нибудь дохлом embed. Но студия то уже ничем не выделяется на фоне её преемника vscode.
Студия не является более высокоуровневой чем vscode с плагинами. Зато вот чем студия является так это монолитным куском говна, где при поломке одного компонента ломается все нахуй, и под все зачастую имеется в виду операционка.
Интересно, что чувствуют разрабы студии. Какие-то четкие пацанчики пришли и сделали все с нуля и получилось лучше, чем они десятилетиями пердолили.
Чувствуют как заебись стригли кучу бабла не напрягаясь.
толсто
Чтобы писать на C++ в студии ты просто скачиваешь и там все есть изкаробки. В vscode надо пердолится с плагинами чтоб все заработало.
Зачем ты это все пишешь? Это такой троллинг тупостью?
Вбросы в С/C++ про ++i + i++ это то же самое что вбросы в /b про дроби и деление.
Просвещайся: https://www.viva64.com/ru/t/0065/
>Чтобы писать на C++ в студии ты просто скачиваешь и там все есть изкаробки.
Прокомментируй вот это >>1860427 →
Дурак и стеклянный хуй сломает. У меня не было проблем со студией в течении 7 лет ее использования. Причем стабильно последних версий.
Ну ладно, пару Internal Compiler Error'ов я им забил в в developercommunity, но этим все мажорные компиляторы грешат
У анона не работает индусоподелие, а криворучка я. Интересненько.
>>60817
Угу настолько нет проблем со студией, что у них была специальная утилита которая должна была по замыслу вычищать остатки из системы, после деинсталляции. Естественно даже она не могла вычистить, поэтому в тех поддержке просто разводили руками и говорили что пришло время переустанавливать шиндоус.
Пчел, у меня сейчас одновременно стоит 15.9.29, 16.8.2 и превью 16.9. Все идеально работает. Я не знаю, что тебе еще сказать.
Спасибо, прочитал. Нам такого в вузе не рассказывали. Как я понимаю, это всё усложняется на порядок, когда речь заходит о многопотоке?
/приемлен как первый язык для учения кодингу? и еще меня заебало тупить на парах и не уметь решать простые задачи, хочу сам научиться, с чего мне щас лучше начать? пока книгу для новичков из шапку курить? ещё я 0 в математике, его надо учить для си плас пласа?
>начали учить кодингу на с++. этот язык вообще не сложен
>/приемлен как первый язык для учения кодингу? и еще меня заебало тупить на парах и не уметь решать простые задачи, хочу сам научиться
Курсы от яндекса на курсеры
Да. Нет, блджад причем тут многопоток? Если это семантика языка. Если у тебя UB, а это скорее всего ошибка программиста, то она и в многопотоке ошибка
Это один из сложнейших языков, но его можно брать начальным. Просто иногда будешь застревать в затыках, выглядящих как магия, придется спрашивать у знающих.
Математика это прикладная область. Для языка она не нужна, но работа на с++ часто связана с математикой - это или для 3д синусы косинусы всякие, или видеокодеки со своими рассчетами, или управление моторчиками на заводе с рассчетами скоростей, частот.
Ок.
1920x1080, 1:03
>>60824
Если такой умный, то скажи как чинить теперь это. Осталось только переустановить Шиндовс.
Любая комбинация SDK не работает, выключение всех родных расширений от индусов не помогает, чистка профиля не помогает, переустановка студии не помогает, запуск от админа и копирование 14.0 в любые места не помогают, ребуты не помогают, кнопка repair не помогает, переустановка библиотек рантайма VC++ не помогает, гугл по этой ошибке на 25 страниц прочитан - ставил все нагугленные VCLibs вручную и не помогло.
Напоминаю, что это началось после установки превью версии, всё что я сделал - нажал кнопку Install, запустил пустой проект в превью-студии и получил это говно. За 15 минут до установки превью всё работало.
Перед тем как начнётся РРРЯЯЯЯ UWP НИНУЖНО хочу напомнить, что это основной гуй в дриснятке.
>этот язык вообще не сложен
>/приемлен как первый язык для учения кодингу?
Кодингу — нет, программированию — да.
>с чего мне щас лучше начать?
С учебника поновее.
>ещё я 0 в математике
Соболезную, особенно если это связано с отсутствием нужного для математики мышления, а не просто каких-то знаний.
C#-то установил для своей дрисни?
> 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.
Естественно, в шарпе всё собирается и работает. Но он же на VCLibs пиздит, C# и дотнет тут вообще никаким боком.
> бесплатно?
Нет, но там есть какая программа помощи. Знакомый хиккан бесплатно уже второй курс проходит.
>чето пацаны вас начитался и теперь лень стало учить с++, может нуй его нахуй, все равно нет интереса к программированию
C++ надо учить итеративно. Освоил базовый синтаксис, поковырялся, уже можешь что-то написать. Посидел, отдохнул.
Учишь какую-нибудь фичу из стандартной либы: разбираешься с контейнерами, с потоками ввода/вывода. Посидел, отдохнул.
Смотришь, как итераторы какие-нибудь работают, лямбды. Посидел, отдохнул.
Начинаешь разбираться с классами, шаблонами. Ну и т. д.
Весь ты его всё равно не осилишь. Никто не осилит. Самое главное, понимать, какие возможности предоставляет тебе язык и стандартная библиотека, чтобы огороды не городить, а при случае разобраться и написать по-человечески.
1920x1080, 0:44
А погодь, я уже ёбнулся немного, не то записал. C# тоже не работает теперь. Впрочем на крестах аналогично. В пизду в общем, я уже заебался второй день пердолить это говно индусов.
попробуй всякие net core SDK установить. Хуйня какая-то
Соболезную, что тебе приходится такой дриснёй пользоваться. Я обычно код пишу в текстовом редакторе. Ну почисть свою дриснятку, откатись там или… что в таком случае на дриснятке делают?
Дебила блядь, напиши им в саппорт, нахуй ты на дваче высираешься?
Пиздос. Сами пользуйтесь этой парашей. Просто лютая ссанина.
Делайте ставки сколько недель будут чинить эту хуйню.
На чистой установке 16.8.2 даже этот костыль уже не работает.
>Вектор делает мув только когда мув-конструктор элементов noexcept
>Всё потому что в случае неудачи оригинальный вектор должен остаться валидным
>Поэтому во всех нетривиальных мув-конструкторах нужно вручную писать noexcept
Я не понимаю, почему комитет сам себе создаёт такие сложности?
Самое печальное что CLion ещё хуже. Там вообще раз в пару месяцев фиксят баги. Уже пол года не могут тиринг пофиксить на десятке, например. А как эта параша на джаве быстро и стабильно работает - вообще отдельная история. Жаль нельзя без ебли писать под зумерские фреймворки и платформы на VS Code, давно бы уже укатился.
Strong exception safety guarantee, вполне возможно нахуй не нужный в данном случае.
Я зарепортил баг в 16.7, починили в 16.9. Считаю успехом.
https://pastebin.com/vyVciVA5
Нет такого понятия "соседние шортинты", это Undefined Behaviour.
Что же касается ответа "почему" - как сказал анон https://en.wikipedia.org/wiki/Endianness
У тебя так, а на каком нибудь андроидфоне с ARMпроцессором может быть наоборот.
Я честно не имел, но хотел бы, так что скрещу за тебя пальчики.
А что говорит туториал? Вроде бы можно свободно менять.
Mutating FlatBuffers
https://google.github.io/flatbuffers/flatbuffers_guide_tutorial.html
> Осваиваю указатели
Если у тебя 64-битная система, то всегда используй uint64_t и сдвиги или char*. А ещё с релокациями ознакомься, чтоб не спрашивать почему адрес из 3 байт или поменялся.
>uint64_t
uint_fast64_t или uint_least64_t. uint64_t - опциональный тип который может отсутствовать в компиляторе под платформу.
Они не обязаны идти друг за другом.
Насколько я понимаю, да. Указатель может указывать только на объект такого же типа как и он сам (то есть никаких (int)&float, никаких "соседних адресов"), в случае массива - на элемент этого массива, либо, единственное исключение, на несуществующий элемент сразу за концом массива. Все остальное что не описано, является UB.
Но при этом вычислять невалидное значение указателя с помощью типа, не являющегос я указателем, можно.
Например, через uintptr.
Его же можно использовать для определения вхождения указателя в диапазон, не вызывая при этом ub.
На счёт 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 не хочется, и по эффективности это будет не лучше наверняка.
https://stackoverflow.com/questions/51503114/structured-bindings-with-stdminmax-and-rvalues
https://stackoverflow.com/questions/52374048/reinterpret-cast-bug-or-ub
Какой прекрасный способ пострелять себе по ногам с auto.
Загадка от комитета по стандартизации языка С++. На размышление даётся 30 секунд.
Скорее это просто неумение читать. auto же не должен определять вермишели указателей, он всё верно делает - выводит тип. А то что вложенные типы могут быть вермишелями, так это надо спросить у говнокодеров стандартной библиотеки. Такая же хуйня про [] вместо std::array. Можешь сколько захочешь стрелять себе в ноги скобками. Хотя уже везде в свежих стандартах пишут не использовать их.
Проиграл.
>Хотя уже везде в свежих стандартах пишут не использовать их.
Если ты тупой, то лучше вообще ничего не используешь, всё равно прострелишь жопу.
Со скобками в 2020 году на С++20? Это явно не нормальный код. Тебе даже компилятор скажет об этом.
А я всегда говорил, что ссылки ++С примерно такое же опасное и ненужное говно, как var-параметры в паскале.
Ответ один: если не знаешь - голосуй SF
А ведь на этой итт доске стабильно доказывают что мс смогли в идеальный кросплатформ всего и вся, сярп лучший язык, а до порабощения мира точканетом осталось пару лет
Моргнул - проиграл
Прикол в чем, если он компилит с x86, то ему выдает ошибку с std::badalloc на создание и работу с матрицамив данном случае перемножение, заданными двумерными динамическими массивами аблов размерностью n=10000 или более, с распараллеливанием через omp, но при этом нормально работает с меньшим n. Если компилять x64, то ошибка по памяти не вылетает, но он то ли считает, то ли нет, так до конца и не проверили он спать ушел, но что самое интересно распараллеливание в данном случае не происходит.
Я же у себя на линупсе компиляю g++ с флагами -fopenmp -O3, и у меня всё прекрасно работает. у него поддержка omp тоже включена если что
В чем, собственно, может быть прикол данного прикола?
> аблов
даблов*
Написал, кста, неверно. В первом случае компиляется, но программа не выполняется, а вываливается с ошибкой с std::badalloc().
>>61512
У него был немного другой и гораздо более опрятный, но он и с моим говнецом пробовал.
https://pastebin.com/rh3ZCnjr
нечасто на этой доске бываю, тут для выделения кода в сообщении возможность есть?
Так-то 10000 х 10000 х 3 х sizeof(double) это больше 2 Гб. Нормальная причина проблем с выделением памяти, особенно на 2ядра-2гига ведре для очобы.
Не, с этим я понял, там с x86, проблемы были, больше 2х гигов оно не вывозит, так в доках у майков написано, но когда он компилит x64 у него не работает распараллеливание, что странно.
У него 16 гигов оперативы и зивон на 12 ядер.
есть опыт работы на питоне, шарпе, чистом си
вопрос не про материалы для изучения - спасибо шапке. Интересует, скорее, совет. Каким бы пет-проектом заняться, и на что в нем следует обратить внимание (типа обязательно многопоточен и тд), чтобы я был интересен работодателю? Просто опыт работы уже 4 года, и идти на дикого джуна за 40к совершенно не але, а в с++ ой как хочется
спасибо)
Денег ты на c++ особо не заработаешь. Дальше читать не стоит.
Большая часть вакансий во всякие говНИИ, на реально интересный проект попасть довольно сложно.
Основные ниши для с++ связаны с матаном, железом, надёжностью и производительностью. Из этих тем состоит 75% вопросов на собесе, если ты идёшь не на ждуна (от ждуна хотят того же, но в виде профильного образования без практики).
Часто бывает так: вот у нас есть код - как его улучшить (оптимизация, баги, портируемость)? Хотят услышать не только про ++i, i++, но и всякие математические изъёбы, распараллеливание, интринсики, балансировку нагрузки между железками (CPU-GPU, host-client).
Сейчас актуальна обработка медиа данных, так что можешь чё-нить на эту тему написать: кодек из А в В, поиск чего-то на картинке или повышение качества картинки, получение медиапотока с устройства (в идеале с embed, но и вёбка сгодится).
Пиздец. Есть инфа, на каких платформах и компиляторах нет этих тайпдефов?
>> денег ты на с++ особо не заработаешь
да ладно тебе, ты типа так вкатыша отпугиваешь? понятно, что джава ебет по зпхе, но свои 120 можешь получать. Что, в целом то, похоже на зарплаты питоне
https://habr.com/ru/article/511700/
Он конечно дохуя приукрасил, да и такой жести от ждуна (и даже от мидла если это не какая нибудь топовая компания) никто ждать не будет, но с точки зрения именно зарабатывания денег плюсы реально не лучший выбор.
В перспективе на 5-7 лет конечно з/п будет не сильно ниже аналогичных позиций на других технологиях (по крайней мере в рамках компании, и если это не оверхайп технология с супер нулевой конкуренцией среди соискателей, как сейчас с го/элексиром/скалой), но вот в краткосроке на любой хайповой технологии на этот же уровень можно выйти за 3 года или даже быстрее, просто потому что рынок шире, и можно хоть каждые пол года делать по x1,5.
>Что, в целом то, похоже на зарплаты питоне
Очень хуёвое сравнение, полистай эти питоновские вакансии на хх, там за 30-40к работать предлагают да и уровень там требуется соответствующий. Даже при этом у него медиана выше плюсов, что как бы кек.
>> и даже от мидла если это не какая нибудь топовая компания
а что от мидла требуют? реально сразу на мидла скакнуть с си шарпа? или на входе онли джун?
по поводу второго абзаца: ну тут да, я согласен, что с точки зрения денег лучше бы остаться с существующим стеком (шапр + питон), но иногда кажется, что тру программистом можно стать только изучив с++, такое конечно препдоложение, но почему-то к ним душа лежит прям
да и в целом у меня позиция с обработкой данных с сенсоров и тд, и это охуеть вообще какая случайность, что получилось питон подтянуть, вот к крестам и стремлюсь. Пусть даже если работа с ними будет связана с классическим проганьем
>> Даже при этом у него медиана выше плюсов, что как бы кек.
смотрю на ссылку в закрепе - и не сильно там выше. В целом на +- 10к похуй
Ну да, ну да, говнософт как всегда. На работе весь день на етом говне пишу. Так заебался, что на домашней пекарне установил arch BTW, ламповий вим+лсп+силанг и пилю свой петпроджект, алсо билд система на мейке, больше не нужно.
В крупных конторах делается так: математики пишут код на питоне (такой себе прототип), потом его портируют на с++ другие специалисты (распараллеливание на CPU, перенос вычислений на GPU - CUDA/OpenCL, использование инструкций SSE через ассемблерные вставки).
Я напомню, что сейчас наиболее актуальны системы реального времени - самодвижущиеся повозки, дроны, видеонаблюдение и трекинг с нейросеточками. Там очень жёсткие требования к производительности. Да те же игры систему жрут беспощадно.
>а что от мидла требуют?
Зависит от компании. У всех свои требования, поэтому обычно все просто сходятся на том, что мидл это челик с 1-3 годами опыта.
>реально сразу на мидла скакнуть с си шарпа?
Если в точно ту же прикладную область в которой у тебя уже есть опыт — можно наверно.
У буржуев точно можно было бы, всё равно на собесах 80% дрочки алгоритмов, 15% дрочки на софт скиллы и ещё 5 на конкретный стек, у нас же всё наоборот. В любом другом случае — сначала надо где-то получить хоть какой-то опыт в плюсах — так что иди и напиши хотя бы парочку пет прожектов, чтобы было хоть о чём написать в резюме и открыть рот на собесе, потом уже и думай хочешь ли.
>или на входе онли джун?
Как я уже сказал, зависит от требований конкретной компании, которые можно узнать только на собеседовании. Пройдёшь на мидла — будешь мидлом, чо.
>смотрю на ссылку в закрепе - и не сильно там выше. В целом на +- 10к похуй
Пчел, это медиана. Учитывая, насколько нижняя планка зп в питоне ниже — настолько и верхняя выше, если вытягивает медиану выше плюсов.
>а что от мидла требуют? реально сразу на мидла скакнуть с си шарпа? или на входе онли джун?
На 80-90к можешь пойти, если месяц потратишь на подготовку к собесу. Просто сейчас с++ не самодостаточный язык, а скорее вспомогательный. Я например варюсь в embed дрочильне с нейросетками и у нас на проекте: железо - C, матан - ASM, C++, CUDA, бек и микросервисы C++, C#, фронт - JS с реактом, тесты скрипты и прочая залупа - Python. Контора у нас маленькая и я пердолюсь на всём вот этом сразу.
>можно хоть каждые пол года делать по x1,5.
Пришёл, разобрался в как тут у них всё, запилил пару фич, сменил работу?
Я просто как раз полгода проработал на новом месте, запилил им за это время мажорную фичу, а дальше уже хочу утечь в другое место, лол.
> игры
Шарп в юнити - это уже очень низкоуровнево. Сейчас в геймдеве никто не пишет на крестах. Двигло собирается из конструктора, а дальше любая макака пишет код любого качества лишь бы работало. Если ААА пилят чуть ли не на блюпринтах, то что уж говорить про рашку и мобильную разработку.
Алсо, системщину и ембендед разве китайцы не перетянули давно уже? Судя по гитхабу русские ваньки уже не нужны.
> Если ААА пилят чуть ли не на блюпринтах, то что уж говорить про рашку и мобильную разработку.
Мы Вам перезвоним.
Прямиком из Юбисофта, да? Спасибо, не надо, сами пишите на питоне и визуальных скриптах.
Толстота.
Пока ты проигрываешь издатели считают бабло, а разрабы годами патчат свой говнокод после релиза. В том же уе4е абсолютная норма комбинировать кресты и блюпринты, все так делают. Если помотришь на индюшатину, то там в большинстве случаев либо готовое двигло, либо контруктор из 25 опенсорс-проектов.
>>62054
Ну недавний Легион уже сливали. Сам код хоть и вырезали, но pdb лежат и можешь сам посмотреть на этот конструктор из сотни сторонних компонентов. То что там пользовались визуальном скриптингом тоже не секрет, жирухи же не будут писать на крестах. Там же есть исходники шейдеров.
Манька, полистай на досуге вакансии Wargaming, Gaijin или аутсорс контор типа Saber, Sperasoft и прочих залуп.
Про эмбед и китайцев - китайцы скупают наши конторы и разрабов. Тот же Huawei сделал несколько крупных покупок пару лет назад (системы распознавание лиц). Даже на РБК по этому поводу бугурт напечатали. И сейчас они ханттят разрабов поштучно.
Да, смена работы — самый быстрый способ увеличить количество нефти. Правда, нужно уметь красиво пиздеть про причины (закончили проект/срезали косты из-за короны/перевели на другой проект с древним стеком/итд), все прекрасно понимают что ты хочешь бабла, но если услышат то нанимать тебя точно не захотят, лол.
>>61977
Бывает, но:
а) Внутри компаний зп всегда растут медленнее чем на рынке в целом, просто потому что рынку мало и мало (а когда ты съебёшь за отказ взять и повысить зп, новых людей эта компания будет тоже нанимать по рыночным ценам, которых ты и хотел, такой вот кекус);
б) Тебе за каждые +20к к зарплате будут стараться довесить кодревью/менторинг джунов/подработку девопсом/помощь пму с декомпозицией/и прочие задачи, за которые никто не хочет браться (и которые надо будет ещё и совмещать с основной деятельностью, лол).
Так что самый просто способ это таки смена работы.
>Сейчас в геймдеве никто не пишет на крестах.
Смотря что под этим понимать. В контексте твоего сообщения "геймдев" — это именно программирование геймплея, там уже давно никто на плюсах не пишет, ибо нахуя. Написать код "если персонаж находится в фрейме (0, 100, 250, 120) то ебать его" может и макака, только это даже не 1/5 от всей программистской деятельности связанной с геймдевом но наверно вся деятельнось какого нибудь /гд, лол.
>Двигло собирается из конструктора
Самописные движки так же собираются из конструкторов, там точно так же тянутся сторонние либы для абстракций над ос (ввод/фс/окна/процессы/треды), физика, всякие парсеры моделек, звук, и так со всем — разве что обычно рендеринг +- свой был.
>а дальше любая макака пишет код любого качества лишь бы работало
Пчел, почти все игры которые выходили в опенсорс/сливались состояли из нагромождений говен примерно _всегда_. Геймдев — это всегда про взять и нахуярить, а не сделать поддерживаемую систему, потратив кучу времени на архитектуру/рефакторинги/итд.
Если я создаю очередь без параметров, то у нее уже есть какая-то по дефолту выделенная память?
И еще, если удалю все элементы через .front() + .pop(), то выделенная память останется или вернется в кучу(?)
implementation-defined
Foo.h:
class Foo
{
Foo(){Bar bar();}
};
Bar.h:
class Bar
{
Bar(Foo const& foo){}
}
а где можно что-нибудь почитать о проектировании таких систем?
Использовать forward declaration, если нужно именно обойти circular include.
А дальше в .cpp можно вполне себе инклудить то, что нужно, чтоб иметь полные типы.
>Bar bar();
Дополнительно. Этот код объявляет функцию, а не создает объект класса Bar.
Самый простой пример это вычисление оператора Собеля с помощью SSE инструкций процессора (пишется на ASM). Используется для поиска границ на снимках с камеры, радара, рентгена и проч. (а по границам можно понять какие объекты есть на картинке). Короче edge detection.
https://core.ac.uk/download/pdf/83041628.pdf
В принципе, если ты залезешь в исходники OpenCV, то там ещё много подобного добра увидишь. Причём OCV можно даже собирать с поддержкой SIMD NEON для ARM процессоров.
С другой стороны у OpenCV есть бинды для питона. Поэтому цепляем к проекту OCV, numpy и пишем наш проект на питоне. Рубим бабло и насмехаемся над красноглазыми (никакого матана, железок и байтоебли).
У меня в плюсовом проекте был модуль на асме на 2к loc.
Я смотрел в сторону интринсиков, но, если честно, сделать две реализации модуля (портируемый с++ и специализированный асм) со статическим (на этапе компиляции) и динамическоим (проверка, поддерживаются ли нужные инструкции в рантайме) выбором нужной имплементации мне было намного проще, чем пытаться добиться того же эффекта с помощью интринсиков.
Язык не сложный (на самом деле это три языка в плаще), но тулинг просто говно дерьма, будешь репу чесать почему все не работает и куда нажать чтобы заработало. Будешь репу чесать когда захочешь библиотеку использовать и симейк будет мозга ебать. Комьюнити отбитое, будет рассказывать тебе про историю компьютерной техники вместо того чтобы ответить на простой вопрос почему не получается вывести "привет мир" в консоли не кракозябрами.
Я бы рекомендовал начинать с чего-нибудь дружелюбного типа питона жаваскрипта или вижуалбейсика иначе никакого кайфа не получишь и бросишь это дело.
А так - добро пожаловать в наш клуб любителей потеребить память руками.
Блидинг эдж петушиной технологии, конечно там двигают всё туды-сюды и ломают
Ещё бы альтернативы хоть какие-то. Интерпретируемые языки и JIT не нужны. Go без либ ненужен. Раст так и не поднялся с колен. Zig ещё пару лет ждать пока релизнется. ФП-параша по определению говно. Что там остаётся? Всякие анальные извращения вроде Nim?
> Интерпретируемые языки и JIT не нужны
хотел написать пост про программы которые работают, решают проблемы реального мира и приносят прибыль но любителю экономить компьютерные ресурсы это никак не поможет, сорь, не выходи из хайлоада не делай ошибку
inb4 щас бы писать программы которые работают, а не access violation память не может быть read или segmentation fault core dumped
В первую очередь потреблением памяти, во вторую производительностью. Нормальный JIT только под Lua есть. Тот же Шарп и Жаба жрут памяти чуть ли в десятки раз больше чем сишка в некоторых случаях, а ещё это время запуска местных фреймворков. Как же кринжанул с дотнетовского гуя на XAML, с которым пустое окно запускается почти секунду, а в доках рекомендуют использовать сплэшскрин если совсем уже неприемлемо долго. Браузер быстрее запускается, чем это говно, лол. Кто-то жалуется на Электрон, но ведь дотнет ещё хуже.
>>62605
> любителю экономить компьютерные ресурсы
Прям трясёт, когда можно сделать быстро, но мне мешают и заставляют жрать говно.
>Прям трясёт, когда можно сделать быстро, но мне мешают и заставляют жрать говно.
Как же ты работать на работе то будешь, горюшко...
Ну а как победить жор памяти в шарпе, если это фича такая у них? Я бы с радостью использовал его, но вот у меня есть сотни машин с 1 гб ОЗУ из 2010 года и я не могу больше 100 мб использовать. В шарпе создаёшь пустое окно на винформс и уже минус 20 мб, против 1.7 на крестах с wxwidgets. И так в любом месте жрёт больше в 2-10 раз.
>>62635
Не работаю кодером и не собираюсь. Это она из причин почему. Тем более профитов в ЗП нет никаких, чтоб укатываться из админства.
>но вот у меня есть сотни машин с 1 гб ОЗУ из 2010 года
У меня в 2010 было по 2-4 гб.
Зачем тебе 100 машин?
Зачем тебе учить инструменты разработки для технологий 10-ти летней давности, причём для машин, которые уже тогда были отстойными? Сейчас другой стек инструментов.
Не, ну ты можешь найти где-нибудь 386 компьютер и писать что-нибудь под ДОС вообще. Писали же когда-то.
битмап 192010804 весит 8Мб, чтобы фликера не было надо два штуки, чтобы антиаляйсинг был нужно в четыре раза больше, сделай на своих крестах непустое окно и будет те же 20Мб
20Мб это 0.2% от 8Гб оперативы, можешь хоть в несколько рядов наспавнить себе
> Зачем тебе 100 машин?
Ну это условно, их намного больше. Хотя да, сейчас это всё же меньшинство и везде есть по 2-4 гб. Но эти пару сотен тоже надо как-то поддерживать.
> которые уже тогда были отстойными
Тогда там стояли Windows Embedded POSReady 2009. Летали вполне хорошо.
> Зачем тебе учить инструменты разработки
Да мне-то и не особо есть зачем. Я же не кодер, только автоматизации делаю, в основном для даунов-инженеров, чтоб они могли пару кнопок нажать и не ебать мозг другим.
> под ДОС вообще. Писали же когда-то.
И сейчас пишут, внезапно. У нас и такое говно есть. Ладно ещё выбили переход на 10 IOT где есть хотя бы 1 гб ОЗУ, но железо никто не станет менять, работает же. Да и самое главное - нам это тоже не сильно надо, когда можно сидеть и попёрдывать, придумывая новые костыли. А как уж оно работает - это проблемы юзеров.
Необычного ничего. Мне просто интересно узнать есть ли разница между объявлением алаяса на темплейтный тип как в книге и дефолтным объявлением переменной. Как я это вижу - раз тут юзаются билтины то обычное объявление не сработает и будет ошибка.
Сам уже разобрался. В любом случае спасибо, неадекват.
>Тем более профитов в ЗП нет никаких, чтоб укатываться из админства.
Лольнул с эникйщика. Хотя если перекатываться именно в плюсы, мб и не будет, кек.
Буферы же в видеопамяти создаются, не? Ну разве что у тебя память разделяемая, если видео интегрировано в cpu.
>на своих крестах непустое окно
А ещё можно непустое окно на шарпе/жаве сделать, и оно будет жрать 200мб.
Да судя по средним ЗП с хабра и вакансиям на 120к - только в модные GOвна есть смысл перекатываться. Что в админстве, что в кодинге требуют одного - знания. Но при этом в админстве не требуют писать код, платя столько же.
А как же таскать компы, ходить по офису целый день, залезать под столы, ковыряться в грязи?
Люди в здравом уме советуют либо visual studio, либо компилировать ручками из консоли и писать код в vim/emacs/вставьте-свой-любимый-текстовый-редактор. Остальное всё хуй знает вообще зачем существует.
Лучше писать код на плюсах, чем на баше.
Это.
Но ты ведь с этого и начинал. Наверное до сих пор не можешь забыть чем пахло под столом у главного бухгалтера Анжелы Олеговны.
Оставленными дешёвыми поношенными туфлями.
чего-то они совсем над ней поиздевались.
со шифтами проблемы, окошко мерцает, прога вылетает...
хоть самому переписывай на чем нибудь, кроме delphi xe
Помню, как эту хуйню рекомендовали на первом курсе на лабах вместе с Borland C++ Builder. Я в это говно лезть не стал, ибо знал про вижуалку, qt creator и vim. Но одногруппники, которое влезли, потом у меня 100500 раз спрашивали, почему ОШИБКА НЕ РАБОТАЕТ КАК ПОЧИНИТЬ.
Если у него будет коммерческая работа в этом направлении, или хотя бы реально осмысленная учебная - то будет изучать годные инструменты. Надо будет, и под 286 будет кодить, со всеми этими "char far".
Но только цель другая, обучаться программированию
>>60828
Если автор хочет сразу себя ставить в стек устаревших технологий, то пожалуйста.
помогите мне пожалуйста разобраться, почему падает программа. Мне надо перевернуть строку, но моя программа падает когда доходит до 91 строки и я не понимаю почему. Что я делаю не так?
Чел, попробуй хоть в столбик на бумажке поделить. А потом посмотри что компилятор выдаёт.
Допустим есть такой цикл:
for( auto &&val : container )
values.push_back( val )
Нужно ли мувать переменную val в другой контейтер в вектор?
да, я сначала делал как на 121 строке, и у меня падала программа, но когда я сделал как на 122 строке, все заработало. Спасибо!
Вообще не понял что ты там делаешь
Васянорешение с O(n) заполнением ассоциативного массива чому не подходит?
Ну, очевидно, тебе надо запоминать не только count, но и собственно какое именно значение ты учел.
Во-первых N logN, а не N.
Тогда уж проще отсортировать и пройтись потом по отсортированному массиву, это можно и на обычном Си сделать.
Правда перерасход памяти.
Скорее надо не забыть во втором цикле сбрасывать count перед началом,
for (int j = i+1, count=1; j<n, j++){
}
а после сделать проверку на count, то есть она внутри внешнего цикла будет
Язык какой?
"ebal" это const char, его присвоение к char — это не совсем корректный код, нормальный компилятор выдаст warning.
Тут объявление массива (в стиле C), а там указателя?
Потому что все "ebal" где то должны храниться на момент старта программы.
А поскольку в Си все должно делаться явно, а копию статических данных в оперативку ты не делал, то все так и есть.
А тут не литерал, а сахар для { 'D','V' ... }
Спасибо, анонче
Объявляет функцию в теле конструктора?
char str[] = "lalala" это массив, у которого компилятор выводит размер по инициализации, а выделение памяти и инициализация происходят в рантайме (современный аналог std::array).
char ptr = "lalala" это указатель на константу, которая хранится в статической памяти, выделяемой при старте проги (это const char).
Когда происходит вызов func(char ), то str неявно приводится к типу char, но сам str не является указателем изначально.
Это типичное легаси в с++ от которого можно избавиться только разогнав нахуй весь комитет по стандарту и твёрдо решительно сократить язык до смысла выкинув нахуй вот эти вот все [].
Хорошо, что ты не комитет.
Нет, не стоит. У c++ нет будущего. Про Rsut в вакухах пишут, что он "приветствуется". Ну ты понел.
Для открытия новых горизонтов купи дилдак. А раст мертворождён. Пиши на человеческом языке, а для байтоебли в Zig уходи. Как раз к релизу освоишь.
Используй С++
Раст это локальный мем. Если "с++" исчезающий, то "раст" это исчезающий на исчезающем фоне.
Там вроде из-за оптимизации компилятора. Если у тебя в коде в одном месте char a = "HuiPizda" в другом месте char b = "Hui" а в третьем char c* = "Pizda", то компилятор в памяти создаст только строку "HuiPizda", а указатели a, b, c получат соответствующие адреса в этой общей строке.
Трипл хорош
что почитать про оптимизацию/распаралелливание/прочую нужную хуиту?
сам ты торч бля, я только чуть чуть дунул
вообще ты пиздец душный, я спросил что почитать по СИ ПЛЮС ПЛЮС а не твои охуеные советы про питон блять
Если у тебя опыт (и в общем-то нравится язык) то все должно быть в шеколаде в обозримом будущем. Это вкатунам биба.
А если обычная РАБота на дядю + собственные проекты на энтузиастычах без пердолинга? Сегодня часа 2 ставил автокомплит на спейсмаксы ибо нет ни одного человеческого конфига.
> пердолинг в студии раз в пару месяцев
> пердолинг каждый новый проект с конструктором и консолькой
Я бы ни один из этих вариантов не стал бы выбирать.
Не, ну становиться гей или веб шлюхой для меня тоже не вариант. Да и кресты прям реально секс, хуй я их на что променяю.
ну тут в зпхе же прогирышь
Да и хз придет ли джава и прочнее подобное говно в нишу с++
Да и сейчас IOT ебашит, роботы, дроны и тд. Джаве и шарпу там нехуй делать
1920x1080, 0:34
Какие тут вообще могут быть срачи в 2021 веке когда выбор очевиден?
На вкус и цвет. Все остальные кукаретики.
На крестах и пишу. Мой первый язык, до этого программированием только на паскале и vbs в школе + универе маялся.
А чё думать. Убираем строку "Hui" из моего примера и всё ок.
Если память не изменяет с 17 стандарта таким говном компилятор не удивить. Это то что я знаю. Докажи обратное.
И то и другое. IDE (но не та, что зовётся visual studio) вроде кажется победителем. Но настройка кросскомпиляции, telnet/ssh, синхронизации сырков, удалённого дебага бывает крайне заёбистой.
В СНГ основную кассу делают аутсорс компании. А это энтерпрайз и всякое легаси говно. Будешь сидеть на Java - будешь при деньгах. Ну а кресты это либо гейдев либо легаси говно либо что-то при производстве (которое почти ничего не производит и не зарабатывает). В гейдеве неплохие зарплаты, но скотские условия труда. Легаси унылое, но ты последняя надежда и тебе заплптят (возможно и валютой).
Для вывода ошибок прямо в редакторе - error lens + clangd или clang command adapter.
для кругов - https://github.com/kato-hiroto/KeyClickFarmer
Спасибо
Верно, тут и сравнивать нечего. Плагины > монолитный кал который потом хер вычистишь из системы.
Кстати, это очень смешно, но полнофункциональную IDE только преподы в универах и котируют по какой-то причине.
После выпуска ни разу еще не видел это замечательное творение.
ну ваще да, на удаленке разожрался, есть такая тема.
и как попробовалось? Хуи в НИИ за 30к грызешь?
Я прочитал часть документации, которая мне нужна. Но не могу допереть как правильно фичу свою реализовать, она багованная выходит
Так и запиши в релиз ноте: не баг, а фича
Я не телепат, но с большой вероятностью ошибка в твоём жс.
В ВУЗе был препод, у которого стояла вижуал студио в виртуалке на ноуте, потому что по программе её надо, а он говорит, что она всё засрет и потом вилкой чистить, неудобно.
Многие преподы совмещают с нормальной работой, особенно молодые, он тоже.
В 2020 году разве не похуй что у тебя лишние 5000 файлов на диске или в реестре мусор?
Мне похуй, у меня винда в виртуалке.
Не, на 10чке.
Не похуй. Студия подменяет некоторые системные файлы отладочными, и эта шляпа будет понижать быстродействие при обычном использовании компа.
лолшто? Какие файлы она подменяет?
Ты шиз? Это тебе не gcc, не умеющий в отладку без запарывания бинарников говняком.
> студия
Ящитаю, профессионал не будет пользоваться "инструментом" с закрытым исходным кодом. Тем более, когда он бесплатный или ворованный.
Что, много исходников опенсорсных инструментов прочитал перед использованием? Все, кто этого не делает - не профессионалы?
>много исходников опенсорсных инструментов прочитал перед использованием?
Все, мань.
>Все, кто этого не делает - не профессионалы?
Высокая вероятность такого.
Я щитаю, что адовое дрочево на опенсорс и штольмана - психическое расстройство. Мне за работу платят, а не за идеологию.
Весело наверное потом свои емейлы и пароли находить в слитых базах данных, да, работяга?
Я вот почитываю исходники, когда возникают непонятки. Да даже если бы и не читал, полно других глаз.
Работает.
Потому что это строковый литерал, пчел. Хотя есть компили, которые позволяют править строковые литералы. Clang и gcc точно не разрешают, msvc хз, ибо говном не пользуюсь.
быстрофиск
возможно, я пизжу и это зависит от ОС/формата исполняемого файла, ибо вспомнил, как один уважаемый скомпилил на шинде код, где была попытка записать символ в строковый литерал, и у него прога не крашнулась и позволила это сделать (мб я ебанутый, хз).
В лялексе, короче, это сегфолт с вертухи сразу.
В каком-нибудь эмбеде при загрузке бинаря эта область памяти может быть ДЕЙСТВИТЕЛЬНО READ-ONLY, но редактирование этого — ub в любом случае.
Ты на Борланд не гони
Потому что язык сложный, да и в индустрии с помощью плюсов решают, как правило, более сложные проблемы, нежели веб-макакерство и крудошлепство. Поэтому как таковых джунов на кресты нету, только если у тебя не блат ну или тебе просто ебически повезло яхз.
Как минимум по всяким PCI DSS аудитам
Ой да не гони. Всякие гос. конторы берут молодняк по 30к за штуку.
- сделать свой список, который сможет принимать не больше и не меньше трёх параметров;
- использовать list из STL, и присваивать узлам списка как параметр ссылку на объект;
- использовать list из STL, и присваивать узлам как параметр массив из трёх ячеек.
Что из этого лучше с точки зрения байтоёбства?
Пидора ответ.
>>64254
Ну, ладно. Параметр в программировании — это принимаемое функцией значение. Вот здесь, например,
http://www.cpp.sh/5bnzy
функция принимает массив как параметр. Ну, или указатель на массив, я ваще не ебу. А как весь массив вывести я тем более хуй знает, подходящего для этого способа в std:list как будто и нету.
Он небось не регается в социалочках и мессенджерах, деньги хранит наличкой, а на двачи ходит через впн, зареганный на 10-минутнвю почту, и взломанный соседский wifi. И работает без трудового договора.
> на двачи ходит через впн, зареганный на 10-минутнвю почту, и взломанный соседский wifi
Кто-то ещё до сих пор не делает так после пары посадок двачеров?
Так стоит делать разве что для постинга чего-нибудь сомнительного в б или пораше. Вряд ли посадят за помощь с laba1.cpp.
С чего бы это? Если про геолокацию и ISP, то у меня IP близко к рашке и не палится в базах ДЦ.
А что какие то дауны так еще не делают? Нечегоскрывать, ты?
Че?
> The first point is implicitly connected to the last point, and the polygon is filled with the current brush().
Я даже brush не устанавливал, он pen-ом что ли красит? Нахуя?
Попробовал QBrush с Qt::transparent ему скормить, один хуй закрашивает.
Я долбаёб не спорю, но почему он в первый раз находит необходимые переменные, а последующие - шлёт нахуй?
Попробуй пересоздать проект с нуля. Может у тебя настройки сбились или закешировалось что то. Это ж говностудия.
Наоборот, если жёстко пропишешь в стандарте, что инт - 32 бита, то потом хуй запустишь такой код на процессоре с двухбайтной шиной данных и байтом, не равным 8 бит.
Перефразирую вопрос, чем в Qt можно нарисовать произвольный замкнутый контур? Чтобы его пунктирной линией можно было отрисовать?
Да, конечно лучше, чтобы код запустился и в какой-то момент отстрелил тебе ногу, когда переменная переполнится.
Хотя, если учесть, что С как раз разрабатывался для того чтобы его можно было скомпилировать на чём угодно, это можно понять.
В любом случае, получается, что сейчас лучшей практикой является использовать int32_t, если тебе не нужно, чтобы код запускался на всяких извращённых платформах с не 8-битным байтом?
тебе дали алиасы типа uint32_t
Я сам не понял, поэтому сюда пришел за помощью.
> Да, конечно лучше, чтобы код запустился и в какой-то момент отстрелил тебе ногу, когда переменная переполнится.
Суть кроссплатформенности в том, чтобы использовать не больше, чем гарантируется стандартом, и не полагаться на имплементацию. Если так и делать, то ничего никогда не переполнится. Для этого и лучше юзать всякие int32_t, когда нет уверенности, на чём это попробуют запустить.
>получается, что сейчас лучшей практикой является использовать int32_t
Нет. Эти типы данных ты используешь для и только для:
> Бинарные форматы
> Бинарные протоколы
> Аппаратные регистры в памяти.
В остальных случаях ты используешь стандартные int short char и прочие.
А зачем вообще такое говно нужно в низкоуровневом компилируемом языке? Это же банальная лень, когда вместо платформозависимого кода пишешь универсальное говно. Почему бы просто не скармливать отдельно особенности платформы компилятору, один хуй компилятор под каждую платформу свой пишется, а он уже в свою очередь не давал бы стрелять себе по ногам с UB? Это же глупо звучит, чтоб копипастный код можно было компилить под извращенные микроконтроллеры и под х86 без изменений. Нахуя такая анальная клоунада? Вроде не питонисты, разобрались бы с чтением платформозависимых стандартов.
мимокрок
К слову, есть гайды, о том как расшифровывать выданные линковщиком ошибки? Не номер ошибки, а то чем он после себя срёт.
> А зачем вообще такое говно нужно в низкоуровневом компилируемом языке?
> Вроде не питонисты, разобрались бы с чтением платформозависимых стандартов.
Если у тебя сишка и ассемблер, то будешь читать эти стандарты. Но у тебя C++, который пытается и совместимость с сишкой сохранить (нельзя же просто выкинуть все либы для неё), и высокоуровневым при этом считаться.
Окей, не int32_t, а int_least32_t, например.
Я не пишу под платформы, где его нет.
> пытается
Почему тогда у новомодных низкоуровневых языков есть нативная совместимость с сишкой, но там додумались не плодить тонну UB? Тем более один хуй комитет уже давно сломал обратную совместимость с кодом старых стандартов. Есть, например, практика в других языках помечать всё ненужное говно мамонта как deprecated и настойчиво предупреждать если используешь это.
> Почему тогда у новомодных низкоуровневых языков есть нативная совместимость с сишкой
Потому что в них она на уровне линковки, а не на уровне # include <код_на_сишке.h>
> Тем более один хуй комитет уже давно сломал обратную совместимость с кодом старых стандартов
Не так уж сильно она сломана, чтобы прям дохуя было переписывать. Обычно сишный код работает без дополнительного допиливания.
> на уровне # include <код_на_сишке.h>
Так в чём проблема встраивать компилятор сишки для такого и линковать со своим? В GOвне ты тоже можешь написать
#include<код_на_сишке.h>
Короче такая задача:
Требуется написать функцию которая возвращает указатель на многомерный массив произвольного размера, при этом память для массива должна выделяться один раз.
То есть надо сначала посчитать размер памяти под массив и выделить буффер, а потом в этот буффер как-то разложить указатели и вернуть указатель на массив.
Чтобы можно было использовать типа как пикрил
Ищи по слову name mangling
Хорошо
Ты про какое то говно мамонта типа объявления параметров в стиле K&R?
int foo(a) int a; { ... }
бля никто не может решить короче
погромисты вы где
может встроеная хуйня какая-нибудь есть для такого?
> В GOвне ты тоже можешь написать
Ага, и обмазываться всякими unsafe.Pointer() и биндингами. Даже в C++ интероп с сишкой не безшовный, что там про Go говорить.
Просто берёшь и без задней мысли выделяешь память под 10 указателей, в каждый из них выделяшь память под 10 указателей, в каждый из них выделяшь память под 3 инта.
> Просто берёшь и без задней мысли выделяешь память под 10 указателей на указатели, в каждый из них выделяшь память под 10 указателей, в каждый из них выделяшь память под 3 инта.
Тогда никак, наверн. Можно выделить 10103 сразу, но тогда доступ будет не через скобочки, а через хитровыебаное умножение.
Круто, передашь слишком большое значение size - и стек переполнится, когда с кучей такой проблемы ещё долго не будет. И много сишного кода использует это?
а ты не передавай слишком большое значение
хуй знает много или нет, на плюсах такая хуйня не компилится теперь
да можно, там типа просто надо разложить указатели рекурсивно
VLA зло, его даже из кернеля емнип выпилили пару лет назад.
Можно через malloc это сделать, но выглядит это как грязный хак говна и, вероятно, это приведёт к UB и так писать нельзя.
В тред призываются эксперты по С, которые пояснят за этот момент.
схуяли нельзя
нешто один раз вызвать малок на всю хуйню хуже чем вызвать его миллион раз для каждого указателя
Выдели одномерный массив и потом по оффсетам ищи нужную себе хуйню
Хуже, потому что есть ощущение, что он не предназначен для этого и хуй знает что там с памятью происходит, и с типами, и как доступ к элементам осуществляется. Но я не шарю в С, так что могу ошибаться.
Короче, нормально делай, нормально и будет.
И лучше использовать смарт поинтеры, вместо обычных указателей.
А ещё лучше стд вектор просто возьми и всё.
А, вместо маллока, понятно.
Ебани через emplace new, подсунув ему память.
Это двумерный массив
Какой-нибудь variadic template, наподобие template<typename T, typename... Ts> class Type : public Type<Ts> { }, лол.
Только не typename, а int.
https://dropmefiles.com/dztjN (я быдло без гита, сори).
Делал по заданию 3 тут: https://ravesli.com/glava-11-itogovyj-test/
Сегодня ровно 2 месяца как вкатываюсь в кресты.
а как ты это динамически сделаешь?
Тогда и с обычными указателями многомерные массивы не получатся, олько одномерный, у которого будешь вместо компилятора вычислять настоящий индекс по N размерам.
А преобразование обычного указателя в указатель на указатель на указатель на указатель пахнет нарушением strict aliasing rules, хотя хуй знает.
std::vector
Хранишь в одном контейнере линейно и вычисляешь нужный индекс.
Даже двухмерные массивы пахнут говнокодов, выше — не имеею юзкейса.
До данного момента для него у меня было примерно 0 юзкейсов. Да и сам иди нахуй, быдло.
Быдло здесь ты, если на полном серьезе предлагаешь нам скачать твои лабы с файлообменника.
на стэке - да. При гомоебле в виде аллокаций указателей на указателей на указатели как пчел выше пытался делать - нет конечно.
Двумерный массив - это буквально одномерный массив указателей на (относительно) рандомные участки памяти
Читать научись, чучело. О каком укладывании указателях речь, если мы АЛЛОЦИРУЕМ каждый массив?
даун, какой "каждый" массив? он один всего
алоцируй себе в очке один раз буфер и запихни туда всю хуйню
нахуй тебе сто раз алоцировать ты даун что ли какой-то?
ну и как успехи?
Имею право как человек успевший застать эру фо.
зачем "массиву который указывает" быть где-то в другом месте
пусть лежат себе все рядышком, линейно
ты не можешь контролировать где лежит указатель?
Обычно на гпу используются, т.е. не нужно получать доступ к n элементу, весь тензор целиком уезжает. А при заполнении можно всякие юнионы использовать, если так хочется
Си было во времена, когда ещё делались 36-битные и 48-битные компьютеры. Сейчас да, нафиг никому не нужно, но комитет просто так не убедишь. Поэтому и получается, что в GCC long то-ли 4 байта (при компиляции на x86), то-ли 8 байт (x64).
Возможно я тупой, и не умею читать, но как определить длину одного линейного массива в ней?
GCC - это общее название и GCC (лол), и G++, и gfortran, и gccgo, и прочая, и прочая.
Студия не умеет в GCC, только через кросскомпиляцию на никсах. А умеет она в Шланг в кач-ве фронтенда (clang-cl)
Не стоит забывать про вечный IDE-срач (хотя даже долбоебу должно быть понятно что если таски уровнем выше laba2, VS не контрится ничем)
Надо обсуждать UB, темплейты, интрисинки и отказ от юзания фич, которые якобы zero cost, а на самом деле медленнее на 0.00000000000001%, а также лабы студентов и работу в НИИ.
Перешёл на линукс с имаксами спустя 2 года кодинга во всратом вс, сейчас за 5 часов делаю то что раньше делал за 9.
Может ты хоть немного программировать за 2 года научился? Ну и да, я не могу представить себе, как в 2 раза чистую производительность можно улучшить, учитывая, что я большую часть времени читаю код, а не пишу. А для чтения VS божественна.
Казуал — это ты. Я на бумажке пишу.
я понимаю, что чтение кода в нотепаде это такая хуйня, что это даже как-то аргументировать смысла нет.
Это не обсуждение.
Без Find all references, без кликанья на функции - да. И хорошо настроенная подсветка вполне помогает усвоению кода.
# define typename _
Окей, и что дальше?
>Теперь всё встало на свои места
Хуй знает, что у тебя там встало на свои места. Но сомневаюсь, что ты мне что-то новое расскажешь
Только думал тебя похвалить, мол ты не только чтец но и в анализе кода что-то сечёшь так ты в позу встаёшь. Не надо так.
typename, если значение может быть типом, class — если только классом.
почта:
извините, просто некуда обратиться даже
Вот к этому коду прилагается:
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() со своими полями. Что ещё за члены класса и аргументы конструктора, где они в коде?
4к час, пиши в ЛС.
Тебе в JS-тред.
Поля это же и есть члены класса.
Конструктор это сорт оф функция, что в нее передается то и есть аргументы.
Конкретно на твоем пике definition конструктора.
ni{ni} примерно эквивалентно если бы внутри тела было написано { this.ni = ni }
Для саморазвития нужен определенный настрой души, а пока его нет, остаётся только подъёбывать зелень на двачах.
> Это всё отмазки. С таким подходом никогда настроя не будет.
Таки бывает. Когда не слишком сильно заебался на работе, и ещё есть силы на кодинг для души.
Пукнул
Очень, очень глупое решение. Прата не описывает многие тонкие моменты которые имеются у Струпа. Потом на гугление потратишь больше времени чем на разбор сейчас.
Да какие тонкие моменты, ты о чём?
Язык бы, для начала освоить, на базовом уровне. Ознакомиться со стандартной библиотекой и тд, а уж дальше в нюансы ёбаная тётя погружаться.
Ты чё, ёпта. Сначала пишем код - потом думаем что он делает.
За базовым уровнем - на равесли до ООП. Дальше не выёбываешься и берёшь Страуса. Уже заебали капать на мою седую голову с визгами типа "Как это нельзя писать using namespace ...;? Как это переписывай 40 файлов?"
>Страуса
Это тот типчик у которого чтобы примеры из книги заработали надо искать какую то васянскую либу include_me_hello_world причем нужной версии?
Только если ты настолько аутист что даже не сумеешь понять как самостоятельно подключать либы.
Дедуль, а либы тебе на сиди-диске к книге приложили? Сейчас это немного не так работает.
Какие ещё либы, ебанько? У тебя всё со студией из коробки идёт, всё как вы любите.
Это смотря какую из двух книг читать, в нормальной книге такой хуйни нет.
>#include<iostream>
>#include<iomanip>
>#include<fstream>
>#include<sstream>
>#include<cmath>
>#include<cstdlib>
>#include<string>
>#include<list>
>#include <forward_list>
>#include<vector>
>#include<unordered_map>
>#include<algorithm>
>#include <array>
>#include <regex>
>#include<random>
>#include<stdexcept>
Ты тащищь всё это говно в каждое своё поделие и ещё смеешь залупаться на меня?
Мда, ироничный прокол.
Я и без книжки понимаю, что такое неймспейс и почему хуево его инклюдить везде без весомой причины. Какие еще ньюансы в струссусусупе описаны?
погромисты с двача не в силах решить простую задачу
Привет анончики.
https://youtu.be/zrOIQEN3Wkk?t=299
Наткнулся на видео (есть таймкод), там оч странный код на с++, похожий на хаскел. Гуглил rv and hs namespaces c++ - ничего. Загуглил functional programming c++20, есть примеры кода, но не поясняется, что это и как с этим работать.
Тыкните, пж, куда читать об этом.
VCLibs 14.0 версии, я так полагаю, нужно для MSVC 140, что соответствует Visual Studio Express 2015
Мб ты открываешь проект, сделанный в 15-ой студии, или у тебя вместо vc142 стоит vc140, я хз.
А как на винде полноценно работать с gcc?(я спрашиваю именно про винду, потому что gcc предлагается как альтернатива при проблемах с визуалкой)
Я на днях трахался с бустом и gcc от mingw и mingw64, он простто не работает с библиотеками буста, хотя они вроде как успешно им были собраны. Файлы, в которых просто main и #include <boost/thread.hpp> <boost/asio.hpp> не собираются с ошибками, которым я нашёл массу решений, не подошедшие в моём случае.
Я знаю, что ещё есть tdm-gcc, но у меня уже не было моральных сил ещё и с ним пытаться.
а чё странного именно там
Это ranges.
Можно поставить на поля этой структуры до восьми байт. В дебаггере пкм по переменной -> break when value changes
Не работает что-то, написал цикл поставил условие нажал F5 и всё равно деление на ноль
Ещё, как вариант, ты можешь из vscode использовать тулчейн от студии, если он у тебя нормально установился.
Блядь. Ты проект собрал? Брейкпойнт туда хоть поставил? Зачем тебе выполнять ещё какое-то действие?
мойЛист.insert (it, новыйУзел)? Так, что-ли? А с какой стороны окажется узел, который был в it? И как мне этот момент проконтролировать?
Проект собрал, мне нужно понять почему у меня не срабатывает бряк при изменении переменной/массива/etc, ранее у меня была переменная которая изменяла значения хотя в неё ничего не писал. Ясно дело где-то переполнение буфера. Сейчас похожая ситуация и я пытаюсь найти место где в неё данные неправильные записываются.
>вирусная ссылка на говносайт с кучей текста на англюсике, вместо того, чтобы написать на человеческом языке, что инсерт вставляет новый узел * от итератора, что я уже сам и проверил
Нахуй иди, чмоха.
https://youtube.com/watch?v=QQZmDWnV618
Нужно мнение двача! По-моему, он несет какую-то дичь. И это руководитель.
Читай блоги, чтобы не быть баттхертом
https://devblogs.microsoft.com/visualstudio/break-when-value-changes-data-breakpoints-for-net-core-in-visual-studio-2019/
Если бряк не работает, значит не удовлетворяется условие, по которому этот бряк должен происходит. Отлаживай программу пошагово.
Я, честно признаться, особо не разбираюсь в различиях компиляторов, просто по gcc и его использованию в консоли примеров много, и msvc почему-то визуалкой как-то по-странному запрятан и доступен только из специальной консоли разработчика, и то посредством devenv.exe и прочего. Поэтому решил, что для консоли удобнее всего будет гцц
>>65893
Нет, спасибо, достаточно жопоболи.
>>65895
Да, я думал об этом. Сегодня буду разбираться, как это провернуть. Визуалка жутко тугая, что-то меня от неё аж трясёт. Я уже молчу о том, что там даже подсветку синтаксиса нормально кастомайзить нельзя.
Нет. Исповедь С++-пацанчика о том, какая дохуя математика на шаблонах в STL, и как STL охуенно компилируется в ниибацца оптимальный бля буду код. Паттерны и SOLID в мире С++ у него не работают, кстати, нада прощи быть.
Ты наверное привык, что тебя мамка с ложечки кормит, рассказывает тебе что к чему и жопку вытирает. Пора взрослеть и делать всё самостоятельно.
А документация - она вся на английском, привыкай.
Помотал немного, кекнул с его причин почему кресты лучше сишки и всего остального - деструкторы и шаблоны, лол. Первое уже обоссано растами всякими, второе так или иначе есть даже у гоферов. Боюсь представить что случится с его психикой, если он увидит compiletime-магию из Zig. Так же он там напиздел что либа номер один - буст.
>>65931
Скорее джависта, который после своего говна увидел кресты и начал ссать кипятком, но в итоге пригорел из-за своего слабоумия.
>на англюсике
>вместо того, чтобы написать на человеческом языке
>человеческом
Псина, съебись на живодерню
>либа номер один - буст
Так падажжи, а какая же? стл не считаем
>Zig
>раст
Все бы хорошо, но есть ли работа по ним?
Просто поставь линупс и всё заведётся.
>я буду говорить с тобой на англюсеке, хотя мог бы и на человеческом, а понимаешь ты меня или нет твои проблемы, я русофоб и горжусь этим кококо кудах
Przepraszam, бат шпрехаем мы here на русском, донт гори
Сударь, вы тредом ошиблись. Вам не в С++, а в 1С. Там всё как вы изволите.
Да темплейты сразу были
> а какая же?
Под конкретную задачу есть либы лучше буста. Этот комбайн из антапаттернов явно не может быть лучшим. Выбор правильного инструмента - это очень важный навык. А он там сказал про буст с посылом что ньюфагам надо его выдрачивать полностью и писать всё на нём, ещё приведя аргумент что буст написан очень сложно и оптимизированно богами крестов.
> есть ли работа по ним?
Нет. Я написал это к тому что деструкторы очень сомнительное преимущество и от обсеров мало спасают, а раст как раз показывает пример что можно на хуй сесть и рыбку съесть писать быстрый и безопасный код.
А вот в 3 разных языках есть всё что в плюсах и даже лучше... Так и представил, как ты всё это вместе в проекте склеишь.
Да там просто чел однобокий, ковыряется только в своей нише. То с чем реально у него проблемы, это то, что он в английский не может.
Стоит ли это перетаскивать в .cpp?
Сука, ору. Понятно, почему у пидорах ни паттерны, ни солид не работают.
>>65987
Тогда соглашусь по поводу буста. Я думал, он просто привел ее в качестве самой популярной либы, про которую нужно знать (опять я недооценил степень маразма в пидорашкокодинге).
Он блять SOLID-диссидент, алло.
Ну это совсем не то. В крестах это очень ограниченно и в виде нестыкуемых друг с другом вещей. А в Zig функционал compiletime для всего один. Как для вычисления типов, так и для выражений. В итоге тебя не ограничивают шаблонами и ты, например, можешь типами в коде жонглировать без лапши в скобках -> >>65800. Или то что недавно упоминали - работать нормально с массивами через скобки без константного размера или явно использовать переменный размер инта для разных платформ, а не жрать что дают.
Нужен отдельныц тред для экспириенсд-господ
Если бы они остались в памяти, то приложуха бы просто жрала ее каждый раз как делает запрос?
Мы тебе няньки, что ли, дурачок, на такие элементарные вопросы отвечать? Книжки читай, там все прекрасно объяснено. Желательно на английском.
Интересный синоним к слову "косячный".
В софте выше уровня хэллоу ворлда у тебя будет ебическое количество ситуаций, когда размер выделяемой памяти будет неизвестен во время компиляции. В таком случае нужно выделять память в куче в рантайме, разумеется.
Дополнительная причина - куча, в отличие от стэка, ограничена только ОЗУ самого камплюхтера, поэтому если тебе надо выделить ебическое количество памяти (гиг+, допустим), тебе надо использовать кучу вне зависимости от того известен ли тебе размер выделяемой памяти заблаговременно или нет, потому что стэк статичен и маленький, гиг ты там не выделишь, прога просто крашнется из-за переполнения стэка.
Что ты несешь, наркоман, стек это та же ОЗУ. Точно так же выделяются новые виртуальные страницы при pagefault
МенеджерМира.послать_сообщение(СервисЛокатор.получить_свободные_руки(), БотинкиСоШнуркамиИлиНуль())
> это аналог Си
Скорее Go/Rust, чем сишка. В Zig можно сделать пародию на ООП средствами языка, разве что наследование не запилить. Zig же и начали пилить потому что в расте пытались сделать заебись, а получилось говно с костылями.
фабрика = сервис_локатор.найти(интерфейс_абстрактной_фабрики_рук)
...
фабрика.зарегистрировать(интерфейс_левой_руки, реализация_левой_руки)
фабрика.зарегистрировать(интерфейс_правой_руки, реализация_правой_руки)
...
если человек = сервис_локатор.найти(интерфейс_человека) тогда
__если человек.руки == нет тогда
____если левая_рука = фабрика.создать(интерфейс_левой_руки) и правая_рука = фабрика.создать(интерфейс_правой_руки) тогда
______человек.руки = левая_рука, правая_рука
____или
______кинуть_ошибку(ошибка(1488, "человек не может завязать шнурки, неудалось создать и заинжектить руки"))
____ой_всё
__ой_всё
__если человек.имеет(ботинки) тогда
____если человек.может(завязать_шнурки) тогда
______человек.отправить_команду(завязать_шнурки)
____или
______кинуть_ошибку(ошибка(228, "человек не умеет завязывать шнурки"))
____ой_всё
__или
____кинуть_ошибку(ошибка(1337, "это столлман, ему нинада)0"))
__ой_всё
ой_всё
Уже достаточно солидно, или какой-то принцип нарушен?
> Уже достаточно солидно
В каком месте? У тебя в функции завязывания шнурков создаются руки! Алло, йоба!
Это пока что только S. Дальше ещё хуже. Давай заново.
Истинный ООП только в JS, на прототипах и любых сообщениях любому объекту.
Тащить все подряд в язык в виде недоделок - это еще не мультипарадигма.
Имелись в виду преобладающие парадигмы.
Сам ты наркоман. Ты не можешь поменять размер стэка в рантайме, об этом идет речь. Размер стэка известен до запуска программы и не меняется (и не может меняться) во время исполнения программы.
>У тебя в функции завязывания шнурков создаются руки!
класс фабрика_человеков(сервис_локатор):
__создать_человека:
____если сервис_локатор == нет тогда
______кинуть_ошибку(ошибка(123, "локатора нема"))
____ой_всё
____если билдер_человека = сервис_локатор.найти(интерфейс_билдера_человека) тогда
______билдер_человека.собрать(&человек)
____или
______кинуть_ошибку(ошибка(d3adb33f, "рук не найдено"))
____ой_всё
>У тебя в функции завязывания шнурков создаются руки!
null safety не завезли же, аджайл порешал и человек собирается по пути, кек
>Стек автоматичен.
Ебланичен. Единственное, что меняется в рантайме, связанное со стэком, это значение указателя на верхушку стэка (ESP/RSP регистр в x86/x86_64 соответственно). Но у стэка есть финальная величина. Именно поэтому ты не можешь выделить гиг памяти на стэке и именно поэтому у тебя крашится программа, если у тебя, допустим, бесконечная рекурсия (которая не может быть бесконечной как цикл, ибо каждый рекурсивный вызов - это стэковый фрейм на стэке, а стэк, повторюсь, имеет конечную величину, которая не меняется в рантайме).
>Но у стэка есть финальная величина.
"Финальная величина" есть и у хипа. ШОК.
>именно поэтому у тебя крашится программа
Нет. Программа падает оттого, что нехватку памяти для стека нельзя отловить стандартно.
Хоп, а вот и еще один неосилятор базовых вещей.
Расскажи мне, какие у тебя проблемы с солидом возникают, что именно в нем НИНУЖНО.
Аноны, подскажите, как стримить видео с вебки на другой компьютер с минимальной задержкой.
Самое банальное и тупое решение: дёргать отдельные кадры (opencv) и передавать их через TCP сокет, но работает это с очень большой задержкой.
Ещё читал про всякие rtp, sip и прочее, но с трудом понимаю, как это реализовать или какие библиотеки нужно использовать.
Короче, если у кого-то есть опыт в таких вещах, очень хочется услышать ваше решение.
Читай про sip.
Можешь менять в рантайме, разрешаю.
#include <sys/resource.h>
...
struct rlimit rl;
rl.rlim_cur = 16 1024 1024;
setrlimit(RLIMIT_STACK, &rl);
1. Стек не имеет конечную величину и меняется в рантайме.
2. Ты можешь выделить гиг памяти на стеке, все что произойдет - ты попадешь в guard page, выкинется pagefault, система его отловит и подложит в виртуальную память еще страничек.
Для rtp полно либ, я пробовал разные но чет так и не получилось быстро, не зря за софт видеоконференций все же деньги дерут. Можешь еще webrtc глянуть.
>не получилось быстро
То есть всё равно была задержка? Какой величины примерно?
>Можешь еще webrtc глянуть.
Про него тоже читаю.
Может, тупо резать видео на пакеты и слать их по UDP? Или это совсем зашквар будет?
>Хоп, а вот и еще один неосилятор базовых вещей.
У которого опыта явно больше чем у студентика, всё ещё верящего в волшебный солид.
>что именно в нем НИНУЖНО
А где я писал что оно нинужна, поехавший? Я написал что солид и вся свистопляска вокруг него — когда вокруг обычных советов пытаются строить архитектуру и вообще все процессы разработки а не исходят из конкретных нужд — это ебаный карго культ, который надувают долбоёбы вроде тебя.
Какой нибудь SRP из хорошего совета руками религиозных идиотов догматично дробящих всё на объекты с 1 целью и желательно с функциями по 4 строки)0 превращает отладку в ад, просто потому что вся логика размазана по 5-7 строчек размазана на 6 модулей (3 из которых тупо проксируют вызовы туда-сюда и ещё 1 нужен просто чтобы это всё говно слинковать друг с дружкой, лол), если там есть асинхронщина — это вообще время на отладку x10 просто ради того, чтобы хотя бы 1 раз пройти весь этот граф в отладчике, потому что отладка чужого кода всегда начинается снизу логической цепочки. Добавляем туда L/ISP — у нас ещё все общаются по протоколам/интерфейсам/итд, сразу куча бойлерплейта (причём в большинстве случаев неиспользуемого, т.к. подмена имплементаций и тесты вообще есть у пары модулей из сотни, да и делается она элементарно даже если автор хотя бы слышал про DI но не делал интерфейсы вперед), проблемы с перформансом, временем компиляции (просто из-за кучи бойлерплейта), необходимостью несколько часов изучать что и как работает ради добавления, блять, кнопки итд. Добавляем OCP и получаем необходимость форкать нахуй каждую либу когда оказалось что нужно какое-то поле или ждать неделю до следующего спринта пока команда делающая либу дойдёт до этого таска, лол, спасибо.
Разве что про Dependency Inversion сказать ничего не могу, единственный однозначно полезный совет, лол.
>>66160
>пук
Так это другой ананас, шизоид ты ебаный.
Посмотри RFC.
RTP is primarily designed to satisfy the needs of multi-
participant multimedia conferences
Отписал
Потестил с udp и покадровой передачей. Очень много глитчей и артефактов, но задержки практически нет. Интересно, будет ли лучше, если передавать закодированное видео?
Спасибо за совет, я попробую. А как вообще можно оценить потери и задержки пакетов с udp? Это же не tcp.
Ещё надо попробовать поиграть с размерами пакетов. Наверно, это должно оказывать влияние.
Ты же отсылаешь фиксированное количество пакетов за 1 времени. А на приемной стороне ведешь лог, сколько получил за единицу времени.
Вместо задержек можешь в каждый пакет добавить метку времени, а на приемной стороне смотреть разность меток, т.е. вариацию задержки.
>"Финальная величина" есть и у хипа
Которая ограничена размером оперативной памяти. В случае со стэком, выделяется ограниченное количество памяти под него, которое в рантайме не расширяется.
>Нет. Программа падает оттого, что нехватку памяти для стека нельзя отловить стандартно.
Сынок, сразу видно, что ты в ассемблере не бум-бум. Ты знаешь вообще как рекурсия работает и что есть стэковый фрейм? Пиздуй учить матчасть, короче.
если мы говорим про лялекс, то там размер стэка ограничен ulimit'ом так или иначе. Позволить ему быть размером с ОЗУ ты не сможешь, в отличие от хипа (грубо говоря, так как есть еще данные в процессе, занимающие память, но на хипе можно выделять память, пока весь ОЗУ не кончится).
> Которая ограничена размером оперативной памяти.
Про виртуальную память и пределы а ля юникс не слышал?
> В случае со стэком, выделяется ограниченное количество памяти под него, которое в рантайме не расширяется.
Это ограничение качественно ничем не отличается от ограничения на размер кучи. Количество только другое.
> Сынок, сразу видно, что ты в ассемблере не бум-бум.
Юноша бабахнул.
Я когда-то давно немного занимался стримингом видео. Не знаю, чем именно ты декодируешь, но я точно помню, что ffmpeg не любил, когда я ему подсовывал половину кадра h264. Приходилось нарезать поток самому исходя из старт кодов ровно по границе NAL юнитов.
>пук среньк баивые картиначки
Ограничение отличается тем, что размер стэка ограничен ulimit'ом (в Линуксе), а размер кучи - количеством ОЗУ. Или для тебя программное ограничение == аппаратное ограничение, шиз?
Дизассемблируй программу с бесконечной рекурсией и ты поймешь почему такая программа крашится, если тебе, конечно, известны вообще такие слова.
>Ограничение отличается тем, что размер стэка ограничен 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. Вот и фся разница.
Лялех - опенсорс, просто берешь и убираешь лимит.
Понял, спасибо.
>>66320
Я написал клиент и сервер. Клиент посылает пакеты серверу, сервер их собирает. Пока что передаю MJPEG (это же как раз отдельные кадры в jpeg закодированные?).
>Приходилось нарезать поток самому исходя из старт кодов ровно по границе NAL юнитов.
Если не впадлу, расскажи поподробнее про это и в целом про задачу, которую решал. ffmpeg умеет только принимать поток или передавать тоже умеет (например, на заданный ip и порт)?
в антивирусных компаниях очень даже реально на какого-нибудь kernel developer
Если речь идёт о c++, то нужно пользоваться его благами, а не избегать их. Stl -- это пример отлично написанного нереально крутого кода. Без этого никуда. Более того, не стоит использовать на плюсах сишные библиотеки. Это считается дурным тоном. В крайнем случае пишется плюсовый биндинг к сишной библиотеки. Ну вообще думай головой, чел. Это путь сиплюсплюс.
Тебе об этом и говорят, дурачок.
Что SOLID сам за тебя хуйню не спроектирует.
Чтобы он работал, надо правильно выделять абстракции. Дебилы этого не умеют делать, создавая какие-нибудь классы открывалки файла, огребают и начинают верещать, что это все солид неработающий уиноуат, и процыдуркыми хуяк-хуяк прощи делыть.
>не исходят из конкретных нужд
Ну так это тоже не c солид беда. Это в принципе такая постсовковая проблема, когда при решении простейшей проблемы (записи "ты хуй" в файл ц:\говно.тхт) мамкины умники начинают звенеть яйцами и городить MVVM-фреймворки, ибо стремится к тому, что "крута и сложна" (а при правильном использовании солид и паттернов должно быть проще и легче).
>тесты вообще есть у пары модулей из сотни
Ну дак и причем тут солид? Давай тдд еще обосри.
>проблемы с перформансом, временем компиляции
Ты как бы платишь этим за гибкость реализации.
Нету гибкости? Значит, проектировал долбоеб. Он и процидурку мог с ошибками написать, какая разница?
>форкать нахуй каждую либу
А нада как?
Ну вот к примеру, симуляция игры жизнь. Поле - двумерный вектор. Задача - найти соседей клетки икс. Если мы работаем через стандартные итераторы, то у нас возникает ебля с их правильным расположением. Точнее необходимость изобретать костыли из-за замкнутости карты (сосед последней точки - начальная) по условию задачи.
Как я понимаю наиболее правильный способ в идеях си дважды сплюснутого - это создать наследника от базового итератора, который корректно будет обрабатывать эту ситуацию
Так тонко...
Нам неважна скорость -- нам важно быстродействие.
Именно поэтому он не смог написать компилятор для своего языка: знаний малёхо не хватило.
а чё не существует компилятора который бы написал Бьёрн Страуструп? Серьёзно?
Правильно: пишешь код
Неправильно: ебешься в вимом, сборкой, соснолькой пердолькой. А писать код даже не начинал.
Вот этого двачую. Я при владении асмами, крестами и сями вообще ни разу почти не притрагивался к юниксу. Некоторые когда узнают это глаза круглые делают мол раз я такой задрот что асмы освоил почему это я в пердоли не вкатился. А ответ прост: я хочу создавать, а не разбираться по гайдам в чужих и отваливающихся программах.
Потому что линукс это: нужно что-то сделать -> ищешь гайд -> выполняешь гайд -> выскакивает ошибка хотя в гайде всё заебись -> гуглишь ошибку -> фиксишь ошибку -> не помогает\вылазит другая ошибка
и это жутко бесит и на нервы действует, на винде ничего такого не было ни разу в жизни. Если владеть реестром то переустанвливать шиндовс не придётся никогда.
он сказал что линукс хуйня
поддвачну ещё раз.
Я понимаю, что он мой друг, и им достаточно быстро и просто решить задачу но, как на это будут выглядеть, не в моём мелком проекте, а в каком нибудь большом?
Дурачок по гайдам с лялехом работает, вместо того чтобы включить мозг -- спешите видеть !!!
В старых версиях ffmpeg был стример, но сейчас его оттуда выпилили. Если не хочешь писать свой, то можешь перекатиться на gstreamer (или live555).
Я не он.
>руки не те!!!!!
>драйверов нет так это железо не то!!!!!!
>дистрибутив не тот!!!!!!
классикал пердоля.
Блин , чел, ну включи мозг. Я, например , с виндой ебался гораздо больше. Мне легче в конфиг залезть, чем искать , где какую галочку поставить. Легче работать в консоле , а не в громоздких приложениях.
>ffmpeg умеет только принимать поток или передавать тоже умеет (например, на заданный ip и порт)?
По идее и то, и то. Ещё и gstreamer может, он более на это нацелен. Но в моём я не мог так просто всё сделать. Я по протоколу, который мне достался "сверху", получал тупо битовый стрим h264, и нужно было его воспроизвести внутри окна другой программы. Была бы моя воля - использовал бы специально предназначенный для потоковой передачи MPEG-TS, но не судьба. Вручную программно кормил ffmpeg и получал оттуда кадры.
>как ты границы nal юнитов определял
Обычный start code: ищешь 00 00 01 или 00 00 00 01 в потоке - это и означает начало следующего юнита.
А, и вот ещё что: если ты используешь UDP, то у тебя пакеты в теории могут приходить в разном порядке. Возможно из-за этого тоже могут быть у тебя артефакты. Для этого, как тебе выше ответили, тебе нужно писать свою синхронизацию.
Ну и нахуй нужен компилятор этот. Главное - получить из плюсового кода экзешник любыми способами. Сразу и поддержка всех платформ, для которых есть компилятор сишки.
Вообще-то формально счётчик ссылок - тоже вид сборки мусора. Смотри Objective C, COM и прочее.
Вот не ебался с виндой никогда, она просто работает. А скрин тиринги в браузере в линуксе, когда 2 года под ним работал, забороть так и не смог. Спасибо, что нынче я пишу только под винду.
Просто у нас с тобой разные дороги в этом мире, брат. Мир, брат. Любовь, брат.
Потому что он хотел родить ребёнка, а получил урода корявого. А всё почему? Потому что он не задумывался о сложностях написания компиляторов. Вот тебе и одна из причин плохого дизайна языка.
Я бы даже сказал не норм, а Мазахистически Удовлетворительно.
Ты ошибаешься, чел...
Не надо ебаться, надо использовать с умом.
Мой путь с винды лежал через прыщи к МакОси. Боги миловали и уже 10 лет не приходится возвращаться на поделие мелкомягких.
Не смотри COM - ослепнешь.
Чем линь тебе не угодил? Поставь хотя бы дулбутом, чтобы коллеги видели твою компетентность, что бы это ни значило.
Зачем мне на макбук ставить прыщи, если все, что мне нужно от прыщей есть в макоси?
Я же тебе написал зачем. Тебя мак совсем разучил читать? Экранным диктором и голосовым управлением пользуешься?
Линь был показателем компетентности в 2010 максимум. Сейчас его знают все, и большая часть понимает, что это кусок говна, а не десктопная операционная система.
На серверах то понятное дело ок.
все так
Тем не менее люди пользуются им годами как десктопной системой. Потому что хотят получить полностью управляемую систему. Гибкую. Интересную. Не без недостатков, конечно.
проиграл с ИНТЕРЕСНОЙ операционной системы. да, латать нерабочее говно, кращущееся КДЕ и прочую хуйню васянскими патчами это охуеть как интересно. Но платят на работе за другое.
> Но платят на работе за другое
Поддвачну. Всегда проигрываю с сектантов, когда всем на работе выдают макбуки, но они топят за прыщи и ебутся потом с отпадающей сеткой, впнами, аудио и прочей ебалой.
Не забываем еще о том, что на работе есть свои секьюрити полиси, под которые не попадают все доступные линуксовые дистрибутивы, а какая-то ебучая Убунта.
Винда тебе такого не предложит тем не менее... Линукс богаче, круче, брутальнее. Алфач одним словом. Я по нему теку как по реке очень быстрой
Так мне это нахуй даром не надо. Тратить свое время на придуманные проблемы, которые в других местах уже решены. Я не давным давно не студентик, у которого дохуя свободного времени, чтобы тратить его на хуйню.
Мне платят только за написание кода. Все. И именно этим я буду заниматься с максимальным усердием, чтобы потом получить лычку ебаного принципал инженера, а не тратить свое время бессмысленно.
Ты слабый человек, хоть и скрываешь это за внешней брутальностью и похуизмом.
А я думал, что сильный, потому что не бегу от проблем. Жаль, что ты такого мнения обо мне.
#define используется только для кроссплатформенной или кросскомпиляторной сборки. Всё.
LFS?
Как тебе там в 2000 году, дедуль? Лялекс из коробки уже давно менее пердольный, чем дриснятка. Офк каждому своё, универсальной ОС под все возможные задачи нет и вряд ли будет, но со своим высером ты конечно загнул пиздец.
О, врети подъехало.
А условной компиляция у вас нет? Для любой отличающейся версии под ту же платформу и компилятор свою ветку делаете?
> проклятая Венда самостоятельно перезагружает его Коплюктер для апдейта
Привет. Как там в 2017? Ядро 5.0 ещё не запилили?
> который в релизной версии превращается в пустую строку
Не в пустую строку, а в empty statement
Если ассерты еще туда-сюда, и то спорно. То вот подобные дебаг-онли логи - хуйня без задач, как показывает практика.
Лучше сделать конфигурируемые логлевелы, и при необходимости включать их на проде (мы так несколько багов поймали).
AUTO
Что непонятного? Ладно упрощу пример. Есть класс кучи которая выделяет и освобождает память. Т.е. если была уничтожена куча то и вся выделенная ею память должна стать невалидной, при этом если где-то остались экземпляры памяти выделенной этой кучей, они должны автоматически занулится. Т.е. вот как-то так должно работать https://godbolt.org/z/EYWf1E
А что не так? По сути виндоусовская куча так и работает, т.е. при RtlDestroyHeap у тебя освобождается вся память выделенная этой кучей, только при этом остаются висячие указатели. Вот мне бы хотелось как-то с использованием фишек C++ сделать это безопасным без висячих указателей.
Текстуры могут держать в себе shared_ptr >>66774
>сам рендерер не может знать, что он внутри shared_ptr
enable_shared_from_this специально для этого и сделан, правда там аккуратно нужно создавать объект.
Ну а вообще, у тебя часто пересоздание твоего Рендерера? Потому что если он по сути один на всю программу, то это оверкилл.
Чёрт, пост поехал. Ну понятно, что я имел ввиду.
Есть ли смысл учить Qt, если хочется работать на плюсах? Или надо иметь низкоуровневые фундаментальные знания, чтобы взяли на работу? Если да, то какие? Где вы работаете на плюсах? Есть вакансия (не претендую), там написано - знание C++ и WinAPI. А суть работы в чём? Что там с WinAPI делают, чего нельзя на более высоком уровне?
Спасибо, не знал, что такое есть. Это скорее не для рендерера, а для кучи которая выделяет выделяет ресурсы под текстуры и тд. В dx12 там пиздец с этим и нужно самому управлять таблицей дескрипторов.
Text comprehension выше всяких похвал.
Ответь себе на вопрос, стоит ли учить де-факто единственный gui-фреймворк?
Если в вакансии указан WinAPI, то там вполне себе может попасться MFC
Гуи на С++ это, все таки, больно. На что я крестомакака, но гуй я бы пилил на AvaloniaUI, например.
>enable_shared_from_this
Это костыль ебаный, который позволяет делать то, что делать не нужно.
Пчел, буквально вчера дриснятка обновилась до новой сборочки. Там был только вариант отложить на день, и этот день прошел.
>Там был только вариант отложить на день
У меня кнопка "отложить на неделю" работает неограниченное количество раз. Даже стакается.
Вопрос к эмбедщикам (вроде как в сипипи треде должны быть такие) - насколько часто юзают Keil uvision в качестве IDE? Правда ли, что в последнее время предпочитают использовать плюсы вместо сишки в разработке прошивок и в целом в эмбедщине? Можно ли самостоятельно учиться этому, не имея физически рядом железки типа STM? (в теории ведь можно обмазаться эмулятором, если есть, плюс даташитом, но как оно на практике?)
>Гуи на С++ это, все таки, больно
А кто тебя заставляет? Qt гуи удобнее на qml клепать, кресты там на беке только будут, всякие модельки и безнес логика.
Я в графоне максимум лет 6 рендерил картинки на DX9, но как я понял из MSDN по сути ты пишешь аллокаторы для цпу/гпу. Разве такие вещи создаются посередине программы? Другими словами, как может возникнуть ситуация, когда ты внезапно удалишь таблицу дескрипторов пока есть активные текстуры?
> А как же всякие отладочные конструкции в дебаг версии?
Можно изъебаться со сборкой и скармливать компилятору разные файлы в зависимости от версии программы.
Кому ты пиздишь. Переключаешь в режим отложенных обновлений и обновляешься когда захочешь.
Ну и чё?
GUI в проектах с крестами пишется вообще на всём подряд. Qt, WPF, MFC, всякий WEB. Приходится постоянно перекатываться и регенерировать.
Qt хорош для понимания того, как на плюсах можно писать крупные SDK (в плане исходников и общего устройства).
В общем потыкай в него, напиши какой-нибудь paint или текстовый редактор.
В глубины глубин не лезь, потому что он может тебе никогда и не пригодится.
в данный момент, спасибо, никто. Но на прошлой работе было, и было больно.
Тенденции перехода на плюсы есть. Зачем писать в стиле "C с классами", если можно получить всё это из коробки?
>Что там с WinAPI делают
Хуйнёй страдают)
>WinAPI
Беги оттуда, дурачок! Там линукс не знают, а значит, и плюсов не знают…
Не осилятор. Я вот вебсайты на плюсах разрабатываю, от сервера до генерации html или тонкого управления всем устройством на основе ГУИ технологии. Умею открывать порты, поднимать сокеты, увеличивать быстродействие (НЕ СКОРОСТЬ!).
Согласен. Так гораздо симпатичнее.
Ты сообразительный)
Потому что не нужен, очевидно.
Конечно, на всей единственной существующей платформе win_x64.
Да directx с каждой версией становится все более низкоуровневым. Если раньше для создания текстуры ты просто вызывал CreateTexture2D то теперь тебе нужно создать таблицу GPU и CPU дескрипторов и самому управлять индексами в этих таблицах (назначать индексы ресурсам и освобождать их).
> directx с каждой версией становится все более низкоуровневым
Вот поэтому он и отсасывает у Вулкана. Как по производительности, так и по удобству кодинга.
В Вулкане, конечно, тоже такое надо делать, но там хоть для людей продуманный сишный интерфейс, а не ебля в сраку с СОМ-объектами у индусов.
Охуеваю от указатель на указатель на указатель функции, но пока очень нравится. Надеюсь, понимание приходит со временем.
Сейчас читаю про ООП и максимально кайфую. Примерно также я кайфовал, когда учил английский язык. С того, насколько все логично.
> вкатиться в Rust
> Все правильно делаю?
Нет. У питона вторым языком для байтоёбства должен быть Си. Вместо пидораста лучше Го взять, если хочешь безопасный кодинг и производительность.
Алсо, про Раст можешь почитать такие ахуительные истории питонистов, даже для не питониста выглядящие дико:
https://compileandrun.com/struggles-with-rust/
> У питона вторым языком для байтоёбства должен быть Си.
Ну сишку я базовый курс прошел на юдеми. Сразу за ним начал плюсы учить. Сишка помогла, конечно, разобраться с памятью и байтоебством и помогла также в понимании плюсов. Это как ступеньки, понимаешь?
Если кайфуешь - это хорошо. Сам кайфовал в самом начале когда другие ныли какие кресты сложные а я всё на лету схватывал.
> Это как ступеньки, понимаешь?
Только ты в обратную сторону идёшь, от сложного к простому. Хуйня какая-то.
Я про то что раст нинужно.
Ну по поводу раста я погорячился, конечно. Сейчас на работе у нас бек на пистоне, а я хочу съебать с этой злоебучей змеи в что-то более человеческое и продуктивное.
Раст сейчас на хайпе, то это больше из интереса. А для бека выбор небольшой - ГО или Джава.
А Си и плюсы для того, чтобы понимать, как это все работает. Потому что все-таки считаю, что нужно было начинать именно с си и плюсов, а не въебать 5 лет в питон.
> Раст сейчас на хайпе
Только в голове у сойбоев разве что. Хайп такой, что работу в рашке невозможно найти.
> Довольно ламповое.
С тем же успехом можешь найти себе парня и лампово пороться в сраку. Кодинг-то тут причём? Или ты из этих, опенсорс-шизов, переписывающих либы с сишки на раст, только потому что нормальный биндинг без ансейфа не сделать.
Братиш, я ж тебе написал, что чисто из интереса, потому что на хайпе. Остальное мне похуй. Сишка и плюсы - вечное. То, на чем стоит делать акцент всегда.
На главной тред не видно.
Я уже пишу код. Но что-то мне подсказывает что одной книги недостаточно чтобы меня взяли на работу.
Тебя на работе не пересказ книжек спрашивать будут, а попросят показать, что ты написал за последние полгода.
Ну блять, знания то откуда-то надо брать. Страус то явно не все аспекты языка охватывает.
Я пишу в смешанно стиле. Мешаю хаскель и ассемблер. Так что уёбывай ты, клоун
Как скажешь. Удачи тебе, брат.
Хаскель это только борщик хлебать. Полезно про него почитать только уберзадротам, которые кресты знают как свои пять пальцев.
А про функциональщину в C++ могу лишь сказать, что ranges выглядит круто, но юзать их почти никто не будет, инфа сотан.
Читал, невнятный невыразительный язык.
>я хочу съебать с этой злоебучей змеи в что-то более человеческое и продуктивное
Иди сразу в embed. Именно там самые низкие зарплаты, а продуктивность просто зашкаливает.
Если убрать строчки чтения/записи в массив в этих двух объектах - все работает гладко и быстро. Код в других объектах гораздо нагруженнее. Что не так с массивами?
Уверен, что с массивом в единицу времени работает только один поток.
Либо кэш проца либо блокировки потока
>Просвещайся: https://www.viva64.com/ru/t/0065/
Анончики, где ещё почитать про такие нюансы концептуальные? Всякие термины сложные и т.д. Не знаю даже, как такое гуглить.
Сага опускает тред в списке тредов доски, кретин. Это не его личный тред, чтобы его сагать.
>А про функциональщину в C++ могу лишь сказать, что ranges выглядит круто, но юзать их почти никто не будет, инфа сотан.
Стл алгоритмы вполне себе фп и были уже в первом стандарте.
Ты сборку-то в релиз перевёл, ёба? В студии, например, в дебаге по умолчанию включен operator debugging и bounds checker, которые довольно сильно тормозят код
cachegrind
Из этого следует, что долбоёщер ты, потому что произвёл бесполезное действие. В чём тогда, по-твоему, смысл отвечать кому-либо с сагой, не неся никакого месседжа?
>Полезно про него почитать только уберзадротам, которые кресты знают как свои пять пальцев.
Ровно наоборот. Его нужно изучать, пока у тебя мозг не закостенел, чтобы потом не выдавать фразу по типу:
>Хаскель это только борщик хлебать.
>А про функциональщину в C++ могу лишь сказать, что ranges выглядит круто
Всё, на этом функциональщина в плюсах для тебя закончилась?
Сейчас бы переживать о треде, утонувшем 250 постов назад
Так что лучше то?
Но линь же чистых сях написан, какое отношение он имеет к этому треду? Пусть пиздуют в си тред.
> Но линь же чистых сях написан
на грязных, с использованием десятков нестандартных расширений компилятора.
Под линем всё чаще подразумевают дистрибутив, про ядро уже начали говорить "ядро линукса". А дистрибутивы состоят из софта, написанного на десятках языков.
А какое отношение этот тред имеет к этому треду? Пиздуй в свой тред.
> чистых сях
Ты заглядывал в исходники хоть? Там такой говнокод, что пиздец. То форматирование в одном файле в разных стилях, то макросы повсюду и хуй поймешь что за магия там, то какая-то хуйня с нулевой читаемостью как после обфускации.
Большинство из следующих используемых в ядре конструкций отсутствуют в языке Си
Вывод типов - 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 }
Это был сарказм
Я прав, потому что написал "Большинство из следующих", потому что мне реально лень проверять список на то что таки соизволили занести в стандарт, а еще так выглядит внушительнее.
Но ведь там действительно повсюду дефайны, под которыми инлайны и прочая магия. Иногда и по два дефайна перед функцией и гадай что это такое...
Только в филиале моей фирмы 2. Ну при условии что ты не еблан.
Алсо, есть ощущение, что std::priority_queue не самое быстродейственное решение, но пока это не принципиально.
Я и говорю, сплошной говнокодинг костылей.
Может посмотреть как это велосипедили до тебя?
https://github.com/fffaraz/awesome-cpp#asynchronous-event-loop
Он-то прост и понятен, к тому же альтернатив нет либо они ещё хуже. Но бывпет и хуже.
Почему не вызывается деструктор в таком коде для vec1 и vec2 при создании vec3? Или он и не должен вызываться при возврате нового объекта?
Vector vec1 {10, 20};
Vector vec2 {20, 30};
Vector vec3 = vec1 + vec2;
std::cout << "test" << std::endl;
аутпут:
test
Destructor is called for (30, 50)
Destructor is called for (20, 30)
Destructor is called for (10, 20)
Согласен, перечитал свой вопрос и ответ пришел. Запутался немного.
Cat echo man bash <-- сперва освой это, а потом приходи! Пшёл!
У тебя разве что может вызываться дополнительный деструктор для временного объекта (результата сложения) в некоторых случаях.
Это залупа времён Win98. За такое только обоссать могут. Никому такое не интересно в 2020, все на десятке сидят.
Подтверждаю. Никому.
xmacro решают проблемы, которые никак больше нельзя решить. В С++26 только если завезут рефлексию + компайл-тайм иньекцию кода. А до этого, только xmacro. Сам в проде накостылил охуенных xmacro, и новый параметр наших говноконфигов теперь одной строкой добавляется с автовыводом типа.
>>68010
Судя по коду - это обычный IPC через пайпы, который используется и в 10ке, лол. Другое дело, что нахуя руками, но это ладно
Нахуй мне сеть, если речь о двух разных процессах внутри одной операционной системы на одной ЭВМ?
я бы смотрел в сторону а-ля чего-нить такого https://github.com/cwzx/nngpp
Мы правда в не в 98, чтобы весь это какичь руками писать
Через любой механизм IPC. Хз че там в мастдае, в лялексе есть дохуя - message queue, pipe, named pipe, shared memory (там мьютекс нужен офк), unix socket, уверен, что часть из них реализована и в winapi
Ты принципиально не хочешь юзать сеть, даже если это просто, решает твою проблему и кроссплатформенно? Или у тебя есть нормальные причины?
Поставь пакетным менеджером zlib (нужен zlib-dev, не перепутай). Потом ldconfig. Потом проверь что lz работает. После этого собирай буст.
Это да, но как делать это ин э си плас плас вей? Как в одном поле хранить список из енумов, интов, строк и моих классов?
То, что выше анон кинул, я посмотрел, но там какая-то магия. Я, вроде, примерно понял что-то, но скорее всего нихуя не понял. В любом случае, мне бы какой-то более простой, может, менее общий, способ, но менее васянский чем у меня.
>То, что выше анон кинул, я посмотрел, но там какая-то магия
Тогда велосипедь с ноля. Делай приорити кью указателей на базовый класс эвента с приоритетом, храни производные от него эвенты с нужными под каждый случай данными. Для быстроты возможно стоит хранить не айди объектов а просто указатели на них, они и так должны быть уникальны.
> производные от него эвенты с нужными под каждый случай данными
У меня получается, что нужно слишком много классов под это создавать, т.к. есть, например, ивент определённого типа, он может в качестве параметра иметь один из 20 подтипов и в зависимости от подтипа варьируется набор оставшихся параметров. Получается, нужно создать 20 классов. Звучит как-то немного жижно, особенно учитывая, что есть случаи, где предполагается вариация не в 20, в 200 случаях. И у них ещё могут варьирываться оставшиеся параметры. Или лучше тут ничего не наговнокодить, если прям сильно не закапываться с этим?
Как я понял, чтобы по-нормальному это сделать, нужно отдельно упорядоченно хранить типы аргументов, а сами аргументы можно в тупо в бинарном виде записать в один кусок памяти. А при необходимости обратиться к ним, их нужно десериализовывать и приводить к нужному типу. Но я чувствую, что чтобы сделать это нормально у меня уйдёт джва года, при том что я не очень разбираюсь в темплейтах и всём таком.
> Для быстроты возможно стоит хранить не айди объектов а просто указатели на них
Это хорошая идея. Но вообще, айди я просто для примера написал, у оно в другом куске программы для других целей используется. Но если там всё состыкуется, то почему бы и не заменить.
>Как я понял, чтобы по-нормальному это сделать, нужно отдельно упорядоченно хранить типы аргументов, а сами аргументы можно в тупо в бинарном виде записать в один кусок памяти.
Можно так, особенно если структуры данных эвентов не будут меняется после старта программы.
При большом объеме структур имеет смысл их описывать на дсл, и в бинарном виде создавать уже в рантайме, виде дерева объектов умеющих распаковать данные из твоего куска памяти. Хотя возможно в твоём случае это оверкилл (я прост имею отношение к авиационным протоколам, там может быть нужно управлять/де/сериализовывать по 10к+ параметров, делать это руками в коде - натуральное безумие).
Если структура данных каждого эвента индивидуальна, придется ее слать вместе с ним, или можно вообще все вместе в виде JSON как в вебе, но тут уже производительность сядет.
Ладно, спасибо за советы, попробую поковыряться с этим.
Ты дебил?
>просто, решает твою проблему и кроссплатформенно
Не должно быть причиной использовать что-либо всерьёз. Если что-то потребляет больше ресурсов компьютера, но проще в реализации, то это что-то не имеет права на существование.
Привет. Вот я хочу, например, написать прогу на с/с++, которая считает crc для файлика. Каким образом я могу через cmd или баш-скрипт или пистон хендлить результат подсчётов этой функции? Мейн ведь возвращает лишь код, который сигнализирует об ошибке.
а бля я ж if написал вместо while ))) вот исправил всё, но оно доходит только до 100 и потом обрывается, как будто не хочет заного идти в while. Это почему? Типо оборвал goto и цикл сломался?
Во-первых, что тебе не позволяет кинуть код текстом через паст ебин или какой-нибудь онлайн-компилятор?
Ничего, но я уже всё сам сделал да... надо было просто не прибавлять арифметическую прогрессию по 1 к ddd и вывести не его а delitel))))
Во-вторых, дай нормальные название всем переменных. В-третьих, дай комментарии хотя бы к циклам. По-твоему другим людям больше делать нечего кроме того как вникать в твой гениальный алгоритм?
В-четвёртых, бля лол, почему у тебя переменные объявлены между вводом и приглашением к вводу, и в несколько строчек? Можно в одну.
В-пятых, зачем goto? Это условие задачи?
Прости анончик в следущий раз всё буду коментить? Не это не условие. А что все так goto хейтят? Классная же штука. Вот в моём примере нужен был бы дополнительный цикл и continue, что по сути и есть goto.
Я не знаю, почему другие его хейтят, но лично просто не понимаю суть его использования, когда есть нормальные циклы. goto это аналог джампа в ассемблере, но в ассемблере понятно, зачем нужны джампы - там, блядь, ничего другого нет. Зачем в высокоуровневом ЯП нужны джампы я хз.
Ну так я и сказал, что без применения goto нужен был бы огромный во весь код цикл с началом в метке, и continue в месте goto. Это же просто усложнение. Его не стоит использовать много, потому что из за табуляции легче циклы читать, но так вполне полезен.
Потому что goto позволяет тебе запутать программу до охуения, а так же отстрелить себе всё что можно. Даже в твоей микролабе goto сильно ухудшает читаемость. Вообще, считается, что если у тебя возникла необходимость воспользоваться goto, значит у тебя тотальный косяк в архитектуре программы. Короче, я запрещаю тебе использовать goto в современном С++.
goto приносит столько проблем, что даже в древние времена в С было два и только два случая, когда можно было использовать этот оператор и не быть обоссаным: джамп к одной точке выхода из функции, если в ней требуется освобождать ресурсы перед выходом, и выпрыгивание из сильно вложенных циклов, вместо написания пяти break'ов. И то, последний юзкейс довольно сомнителен.
Компилятор пишет non static data member initializers only available with -std=c++11. Ничего страшного?
Вот ты и попался. Если нужен универсальный пакетник, то это snap. А штатный пакетник всяк лучше, чем установленный с его помощью vcpkg или кто там ещё.
шиз спок
> Вот ты и попался. Если нужен универсальный пакетник, то это snap. А штатный пакетник всяк лучше, чем установленный с его помощью vcpkg или кто там ещё.
Я пытался понять, что ты тут написал, но не получилось.
Что это за snap? В поиске только какая-то херня
Ага, все идут нахуй, давайте оставим в треде только срач по поводу visual studio и пакетников
> Что это за snap?
Это извращенная параша из мира красноглазых пердолей, где вместе с пакетом идут все его зависимости. Как если бы в Винде к каждому приложению прикладывали свой дистрибутив directx, либ vc++ и системных библиотек. У пердоликса настолько ущербная система зависимостей, что приходится жрать говно не с лопаты, а прям с земли.
Well explained.
Ждём менеджер пакетов на основе докера, чтобы тащить не только зависимости, но и нужный дистрибутив линукса.
jan = 1, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec
};
Month operator++(Month& m) {
m = (m == Month::dec) ? Month::jan : Month(int(m) + 1);
return m;
}
const vector<string> month_tbl{ "", "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь" };
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)];
}
ostream& operator<< (ostream& os, Date& d)
{
return os << '(' << d.year()
<< ',' << d.month()
<< ',' << d.day() << ')';
}
Date::Date(int yy, Month mm, int dd)
: y{ yy }, m{ mm }, d{ dd }
{
if (!is_valid()) throw Invalid{};
}
bool Date::is_valid() {
//if (m < 1 || 12 < m) return false;
if (d < 1 || 31 < d) return false;
return true;
}
Какого хуя выдаёт ошибку в функции d.month()? ОшибкаC2679 бинарный "<<": не найден оператор, принимающий правый операнд типа "Month" (или приемлемое преобразование отсутствует). Если просто написать
Month biba = Month::jul;
cout << biba;
То всё выводится.
jan = 1, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec
};
Month operator++(Month& m) {
m = (m == Month::dec) ? Month::jan : Month(int(m) + 1);
return m;
}
const vector<string> month_tbl{ "", "Январь", "Февраль", "Март", "Апрель", "Май", "Июнь", "Июль", "Август", "Сентябрь", "Октябрь", "Ноябрь", "Декабрь" };
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)];
}
ostream& operator<< (ostream& os, Date& d)
{
return os << '(' << d.year()
<< ',' << d.month()
<< ',' << d.day() << ')';
}
Date::Date(int yy, Month mm, int dd)
: y{ yy }, m{ mm }, d{ dd }
{
if (!is_valid()) throw Invalid{};
}
bool Date::is_valid() {
//if (m < 1 || 12 < m) return false;
if (d < 1 || 31 < d) return false;
return true;
}
Какого хуя выдаёт ошибку в функции d.month()? ОшибкаC2679 бинарный "<<": не найден оператор, принимающий правый операнд типа "Month" (или приемлемое преобразование отсутствует). Если просто написать
Month biba = Month::jul;
cout << biba;
То всё выводится.
У тебя метод << принимает неконстантную ссылку, а ты туда передаешь временный объект. Короче напиши ostream& operator<< (ostream& os, const Month& m) и тогда заработает наверное.
спасибо огромное
>only available with -std=c++11. Ничего страшного?
У меня такое было наверное только когда заставляли в 12й студии писать.
Потому что винда хр внезапно у всех до сих пор.
> Как если бы в Винде к каждому приложению прикладывали свой дистрибутив directx, либ vc++ и системных библиотек.
Но ведь всё так и происходит... Даже М$ теперь всё своё складирует в одну кучу. И это в целом нормально.
Но vcpkg и snap, имхо, ортогональные штуковины.
Но ведь его спросили как собрать буст из исходников, а он высрал как его поставить пакетами?
> Зачем пердолиться. когда можно воспользоваться уже готовым?
Можно потрениться пердолиться чтобы в случае чего быть готовым и разгрести говно
А что vcpkg по-твоему делает? Выкачивает саму библиотеку и все её зависимости, а потом их собирает прямо у тебя на компьютере. При желании можно даже флаги компилятора подкрутить
ну вот только если потрениться, не более
спасибо, понял
Вскодер, ты?
Советую поставить вижуал студию 2019 и делать все по человечески
Мимо-перекатывал-3-последних-треда
Насколько сложнее сделать c++ компилятор? Где его вообще нет, хотя бы старой версии, такие вещи разве существуют?
есть всякие некроконтроллеры адовые, под которых С++ нет вообще. И всякие RTOS специализированные.
Сильно сложнее, чем С компилятор.
Намного сложнее, чем компиляторы всех остальных мейнстримных языков вместе взятых.
в Qt есть кросплатформенная абстракция IPC с интерфейсом сокета, есть в примерах fortuneclient fortuneserver
А если возвращается хуйня типо unique_ptr которую можно проверить на nullptr, тоже лучше в optional оборачивать?
Имхо это уже масло масляное, при условии, что нуллпоинтер это ошибка.
Либо unique_ptr, либо std::optional. Предпочтительнее второе, если логика программы позволяет.
>А что все так goto хейтят?
Хейтят, потому что боятся, потому что не осилили. Во многих проектах на c/c++ goto используется. Правда его нужно научиться правильно использовать.
щас штаны подтянут
> Во многих проектах на c/c++ goto используется.
Потому-что обоссаных профнепригодных даунов в НИИ набрали, вот и во многих проектах goto используется.
1) С
2) С++
3) не ебать мозги совсем, ознакомиться с Cython и дальше изучать Матлаб.
>>69383
Кек.
Вариант 3 лучший. С++ реально сейчас нужен либо в около-легаси в гигантских конторах, либо в каком-нибудь супер хайлоад дистрибудет перформанс залупе, в которую без релевантного опыта не пробиться.
Не смотря на то, что я пишу на крестах больше 7 лет - вкатываться в них я бы не советовал В свободное время пишу на сишарпе и мне он нравится ощутимо больше, хотя я его практически не знаю
Если ты хочешь написать какую то быструю числодробилку, то да, выучи с++ и ассемблер, потом пиши распараллеленные алгоритмы на видяху.
> С++ реально сейчас нужен
Вот, например, на рисерчгейт сонм ответов о С/С++
https://www.researchgate.net/post/How_can_I_choose_the_right_programming_language_for_a_computational_physics_project
https://www.researchgate.net/post/What-is-the-most-useful-programming-language-for-a-materials-scientist-and-a-physicst
>вкатываться в них я бы не советовал
Есть какие-то мысли о перспективных научно-технических языках, во что стоит вкатываться? Или все же вариант 3: продолжать дрочить Пайтон со всех сторон, параллельно посматривая на коммерческие инженерные и научные системы?
Это ж постинкремент. Т.е. типа улучшили, но возвращается предыдущее значение - С. Поэтому многие до сих пор пишут на си с классами.
Главное, что UB на месте.
Ну тут всё просто. Если ты научный деятель, то для тебя инструменты высокого уровня: Python, Matlab.Ты реализуешь концепт своей идеи и отдаёшь его инженерам.
Если ты инженер-работяга и не любишь/не можешь в матан, то для тебя c/c++ с погружением в железо. Фортран в некоторых задачах удобнее, но оно того не стоит.
Математики на с/с++ обычно пишут лютый говнокод.
Для примера МКЭ системы пишутся на C++. Там по традиции массовый параллелизм и gpu (расчёты и визуализация). Почти все языки для gpu это диалекты или расширения C/C++ (cuda, opencl, hlsl, glsl и прочие).
вся математика написана за тебя в питоне на С, руками ты очень врятли ее писать будешь когда-либо. Я бы все таки думал, собстно, о питоне.
>Если ты инженер-работяга и не любишь/не можешь в матан, то для тебя c/c++ с погружением в железо.
>Математики на с/с++ обычно пишут лютый говнокод.
Странно, я почему-то думал, что все наоборот. Пайтон-то - простой язык, который и запоминать особо не надо, а вот в С++ вроде бы надо включать голову, ебаться с логическим построением кода и т.д.
Просто я думал, что в конце-то концов у более низкоуровневых языков должны быть какие-то преимущества в научно-технических задачах, помимо быстродействия. У языка С ведь наверняка есть целая отрасль технических приложений, в датчиках там, программировании научного и инженерного hardware и т.д.
>>69576
>Я бы все таки думал, собстно, о питоне.
Ладно, наверное так и поступлю. Лучше выучу четвертый иностранный и наконец-то сяду за алгебраическую топологию, все-таки у меня это и лучше выходит, и удовольствия в процессе получается больше. А там может когда-то.
>haskell
Посмотрел на либгене книги по нему за последние 5 лет - вообще ничего прикладного.
Вот забавная книга
http://gen.lib.rus.ec/book/index.php?md5=424DE7A837A83F1804B56D07B9E0DC80
Какие-то экосистемы, монад (Лейбница?), чё несет.
Прикладное -- это слишком общее понятие. Чего ты ожидал? Книг про то, как на хаскеле программируют самолёты? Или о чём речь?
https://wiki.haskell.org/Books
Численные методы, например. По твоей ссылке я увидел только 2 книги по анализу данных, каждая менее чем на 200 стр.
Ну и хуй с ним. Кому нужны эти книги? Берёшь и пишешь свои численные методы, если не нашёл подходящей библиотеки. Да и численные методы не привязаны не то, что к какому-то конкретному языку, а вообще к программированию. Чтобы уметь в численные методы, нужна математика, а не программирование.
Это все верно, но зачем мне ебаться с этим, если есть обобщенный опыт одного человека, который с этим достаточно наебался и написал соответствующую книгу? Я лучше потрачу свое время на что-то другое, а по численным методам просто возьму эту книгу, почитаю, поделаю упражнения по ней и сверюсь в ответами, приобретя упорядоченный опыт.
>Да и численные методы не привязаны не то, что к какому-то конкретному языку, а вообще к программированию. Чтобы уметь в численные методы, нужна математика, а не программирование.
Ну, если я не знаю как в данном языке вводится дифференциальный или интегральный оператор, например, то даже знание математики мне не сильно поможет.
Руками вводится
На самом деле многие алгоритмы очень интересно реализовывать в функциональном стиле. Даже более, многие численные алгоритмы очень хорошо ложатся в функциональную парадигму. Аж глаз радуется! Если ты хорошо шаришь в mathematica, то, возможно, и сам это заметил, хотя mathematica немного в другую сторону заточена, но она гораздо ближе к хаскелю, чем плюсы.
Решать в любом случае тебе, брат. Знаю, брат, ты не ошибёшься.
>Ну, если я не знаю как в данном языке вводится дифференциальный или интегральный оператор, например, то даже знание математики мне не сильно поможет
Даже если ты захочешь решать системы линейных уравнений, то тебе придётся начать с реализации матриц и векторов, а также всех операций над ними, ибо в c/c++ ничего этого нету из коробки (в фортране есть).
>тебе придётся начать с реализации матриц и векторов, а также всех операций над ними, ибо в c/c++ ничего этого нету из коробки
Это и не нужно из коробки.
Но и реализовывать не придется все уже давно есть
https://github.com/fffaraz/awesome-cpp#math
Приведи 3 примера на С++ (именно С++, не С), где GOTO лучше, чем остальные средства языка
Ну продемонстрируй где goto по твоему мнению улучшает читаемость, хоть поржем.
> На самом деле многие алгоритмы очень интересно реализовывать в функциональном стиле.
Пытался помнится как-то поучить хаскелл, а там в книжке realWorldHaskell была задача на алгоритм Грэхема, так я сидел, пыхтел, пытался, но в голову приходила не функциональщина, в результате я такого говна наляпал там, страшно вспоминать да я уже и не помню нихуя. Возможно не стоило это им в начальные главы пихать, а уж лучше после всех функторов и монад, наверное. к тому же хачкиль вроде не совсем оптимизрованный/быстрый выходит по сравнению с питоном наверняка лучше, но с многими другими языками не думаю
Ну там далеко не везде блочное умножение матриц, неэффективно реализовано умножение разреженных матриц, алгоритмы однопоточные. А всё это должно работать на абстрактной машине с массовым параллелизмом и распределённой файловой системой (фс lustre, а сама машина это пару сотен gpu или cpu или вообще несколько разных). Машина такая одна, а расчётных задач много (одна задача может считаться по несколько дней и если будут баги то всем будет атата).
В общем c++ нужен прежде всего для решения тяжких инженерных задач.
>Даже double break решается лучше без goto, чем с
Для этого, как я понимаю, нужно завести булев флаг и проверять его на истинность в обоих циклах. Ну и чем это лучше компактного и эффективного GOTO сразу на метку после цикла?
Тем, что ты дед старый, а double break решается лямбдами давно
Матрица на матрицу = матрица и ниипёт. Если размер матрицы задаёшь шаблонными параметрами, то можешь для случая 1х1 добавить оператор приведения к числу
А я плюсовик, а не сишник.
Cпасибо
>Матрица на матрицу = матрица и ниипёт.
Какая матрица получится после умножения матриц 2x3 и 4x5?
Matrix<NaN>
>Ну там далеко не везде блочное умножение матриц, неэффективно реализовано умножение разреженных матриц, алгоритмы однопоточные
Разве всякие бласы и лапаки не поддерживают автоматическую параллелизацию?
А если супергерои все... То никто не супергерой.
Глу-пые боги вы-думали костыли ёбаные сукааааааа
>В императивных языках все уже обернуто в монаду.
Да ладно? Вот тебе выражение х % 5; Сайд эффектов нет, описания алгоритма расчета остатка от деления нет, ты просто сообщил что ты хочешь рассчитать, а не как. Все признаки декларативного программирования.
... operator%(...) { system("rm -rf"); }
Я не сильно в теме, но там вроде целый зоопарк из либ, которые по-своему уникальны (под масштабируемые системы, под gpu, под разные cpu).
Параллелизм он тоже разный. Бытовой параллелизм это когда у тебя один процессор с несколькими ядрами. Научный это когда у тебя SMP система из десятка одинаковых процессоров, разделяющих общую память.
Ну если что-то типа такого, то работать будет:
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;
}
Да и тогда ты можешь добавить шаблонную специализацию приведения типа для матрицы 1x1 и работать с матрицами как с числами.
strcut matrix {
operator float(); // без реализации
};
template<> matrix<1, 1>::operator float() {
return 0.0;
}
а потом писать типа такого:
matrix<1, 1> mx;
float val = 10.0 ⚹ mx;
Ну я написал пример как могло бы быть. А как оно в оригинале никто и не видел. Данный пример сгодится, если ожидается малое количество разных матриц. В общем случае лучше рантайм.
Долларовым миллиардером как Тим Суини. Или Unigine холопом за 100 рублей.
> Пиши свой движок
Это же золотое правило гейдева - тот кто пишет движки никогда не делает игр. Проверено на тысячах писателей двтжков своей мечты. Игр от них мы так и не увидели. Как впрочем и законченного движка.
А тем временем игры на Юнити обходят по продажам ААА и работают на любом тостере, имея хороший графон.
1280x544, 0:09
>А тем временем игры на Юнити обходят по продажам ААА и работают на любом тостере, имея хороший графон.
Что конкретно тебе показалось смешным?
То что Геншин за месяц заработал больше денег чем большинство ААА этого года или то что в нём графон лучше чем в клоне Геншина от Юбисофта с движком от Ассасина?
Чел, там же с первого взгляда видно родной рендер юнити. А присутствие оптимизаций никакого отношения к движку не имеет, говноделы где угодно слайдшоу сделают. Это пример того что написание своего движка - удел долбаёбов или профессионалов. Что ты успешно игнорируешь, сидя в манямирке, как и тысячи таких же вкатывальщиков в геймдев после учебника по крестам.
>Чел, там же с первого взгляда видно родной рендер юнити.
Чего?? Там все кастомное, от травы до деревьев до камней.
Пчел, ты сказал что не знаешь ААА игр на УЕ4, тебе привели список и ты слился сказав что у тебя нет мотивации читать потому что он большой. Ты понимаешь как ты выглядишь?
Так я и не предлагал ему игры делать. Я предлагал именно движок.
Можно ли как-то закэшировать указатели на методы, чтобы, пока вектор не изменился, не проходить снова и снова по виртуальной таблице?
https://pastebin.com/raw/tNArBSWZ
>Можно ли как-то закэшировать указатели на методы, чтобы, пока вектор не изменился, не проходить снова и снова по виртуальной таблице?
ИМЕННО ТАК, как описал это ты - вроде бы нет.
>закэшировать
Если нужна скорость и отсутствие вирт. вызовов и не важен порядок вызова вирт. метода для объектов в цикле, то делаешь vector для каждого derived class-а (вроде был какой-то видос на youtube или переведённый пост на хабре, что-то связанное с графикой в проекте использующем chromium - там описывалось что-то в этом духе), проходишь в цикле по каждому vector-у и вызываешь derived метод.
Спасибо, идея простая и понятная и без видоса. К сожалению, мне важен порядок.
А, хотя это бессмысленно - ведь внутри метода ты наверняка хочешь дергать поля объекта, а this у тебя нет.
Можно на статические. На обычные можно сделать бинд с указанием объекта. Или обернуть вызов в лямбду. Но мне кажется это все будет медленнее чем обычный вызов виртуальной функции.
Перекат ♣ ↓↓↓↓↓ O_O↓↓↓↓↓↓ . . . . . .
___________________________________ . . . . .
I https://2ch.hk/b/res/234499302.html I ♦ (М)<<<<000
I https://2ch.hk/b/res/234499302.html I (М)<<<<<<0000 ♣
I__________________________________I <<<0000
♦ . . . . ♦ <<<<000
Перекат
В теории можно делать то, что делают JIT-компиляторы и самому девиртуализировать вызовы (из прыжков по памяти перейти к сравнению указателей): https://godbolt.org/z/Ks558v . Вроде как, когда классов 1-2, может в теории дать выигрыш.
Но точно ли такое тебе нужно? Виртуальные вызовы реально мешают, только когда у тебя они в критическом цикле, но тогда спрашивается на какой фиг у тебя в критическом цикле виртуальные функции и мешанина из вызовов? Может просто сделаешь энум и свитч? И то, если у тебя там какой-нибудь порядок в векторе есть, то branch target predictor верно предскажет, какой у тебя класс, и ты просто не заметишь задержек от беганья по указателям в виртуальной таблице.
Ну тут ты либо Branch Predictor (энум и безусловный вызов на известный указатель), либо Branch Target Predictor (загрузка динамического адреса функции и переход на него) будешь насиловать. Обычно первый всё же помощнее.
Да, я ебанутый.
Куча очередей на входе данных
Данные перекладываются в обработчики (из одних очередей в другие), потом обработчики, обработв данные, перекладывают их в выходные очереди
pop/push, соответственно, синхронизируемые.
Софтина большая, где-то lock-free очередь используется, где-то mutex внутри, и т.д.
Что если обработчик не будет последовательно в цикле делать pop из очереди до тех пор пока она не пуста, а вместо этого будет создавать у себя локально новую пустую очередь и делать swap с той, которую надо обработать.
Таким образом contention будет всегда только в момент swap (который просто pointer-swap) независимо от количества элементов в очереди.
Есть профит?
На so вообще нашёл это:
'It looks like std::queue when swapped does the equivalent of while()/pop().'
Тогда прям анлаки как-то.
>который не через .front()
Ну .back() ещё есть, только саму ноду так не удалить, .pop_back()-то нет.
>Тогда прям анлаки как-то.
Можешь заменять указатели на очереди, а не сами очереди. Зато, если условия подходящие, можно вообще без мьютексов обходиться, на чистых compare_exchange_strong.
Это выгоднее, если очередь в среднем содержит больше одного елемента.
Есть гарантия синхронизации между push & swap?
>Это выгоднее, если очередь в среднем содержит больше одного елемента.
Вот я тоже об этом подумал.
Но при этом если очередь будет всегда содержать только один элемент, то по идее никакого ухудшения не произойдет (как и профитов), просто будет то же самое, что и с while() { pop }
Это копия, сохраненная 19 апреля 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.