Это копия, сохраненная 2 мая 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
⚹ https://github.com/sosachbot/cppthreadhat/wiki
Ответы на вопросы:
⚹ https://en.cppreference.com/w/
⚹ https://www.cplusplus.com/reference/
Для указателей: ⚹
Прошлый: >>1888626 (OP)
Начинаю учить C++ в новом треде!
По стандарту размер массива должен быть constant expression
это Variable Length Array, опасная вещь с кучей подводных камней.
Специально в языке запрещено - погугли.
> Variable
А почему Variable Length? В предыдущей строчке четко определенное значение. Или это защита от нулевой или отрицательной длинны?
>В предыдущей строчке четко определенное значение
Определённое в рантайме.
Может поменяться пока дойдет до инициализации массива
твоя переменная не constant expression, как пчел выше написал.
если ты сделаешь constexpr int x = 5; то все заработает
юзаю в проде, полет нормальный. А почему ви спгашивается?
Летят через рутины персональности, раскручивают стек
Вопрос со звёздочкой, для экспертов
B{}
X:B
{}
Y:B
{
fy(B*)
}
Я компилирую (X, B) => x.dll, потом (Y, B) => y.dll, загружаю и то и другое
завожу себе X ix;
будет ли работать по понятиям
fy(&ix)?
Потому что ты в седьмой строке кода пытаешься объявить статический массив на стэке, размер которого должен быть известен во время компиляции. Почитай о том, как функции выглядят в ассемблерном листинге и вообще пойми что есть стэковый фрейм, размер которого тоже предопределен заранее, то бишь во время компиляции.
Господа крестовики, учите ассемблер, тогда подобные вопросы вообще не будут возникать.
Вопрос номер 2, для волшебников
Есть class X соурс которого доступен, он компилируется в dll и загружается в программу.
Как вычислить все адреса инстансов X?
Изучаю с++ уже больше полу года, планирую в конце этого года искать работу на 3-4 месяца(Я студент, хочу немного опыта набраться)
> быть известен во время компиляции
Ну так значение переменной уже известно во время компиляции.
Никак. Если все инстансы на куче, то можно как-то затрейсить через LD_PRELOAD и свою реализацию маллока (найти все аллокации величиной с этот класс), но это скорее верный способ отстрелить себе не то что ногу, а пах.
двощую интересный вопрс
Например все что на современном qt использует метал/вулкан/директ/опенгл автоматом.
WPF, как мне помнится, всё на директиксе рисует.
Класс можно модифицировать, можно ли в его начале поставить поле с каким нибудь уникальным значением, а потом искать по всей куче все такие значения если нашёл значит следующие sizeof байт сам класс?
>Класс можно модифицировать
Сделай тогда регистрацию/дерегистрацию инстансов на конструкторе/деструкторе в каком-нибудь глобальном списке.
mingw64 компилятор
А книги кто читать будет?
Проблема в том, что ты можешь изменить значение этой переменной в рантайме, а это нарушает все вышенаписанное. Объяви x константой и это заработает.
Блять, ты рофлишь? Еще бы попросил реализовать калькулятор, который умеет только в сложение и вычитание. Это умеет делать любой обоссаный даун, который неделю знаком с программированием.
Вообще, по-сути, ты можешь эти апи использовать для реализации, если очень хочется офк, но по сути, dx, vulnan opengl, всё это лишь функции передающие точки/шейдеры на граф ускоритель и в данном случае логичнее использовать апихи которые под это уже прям конкретно заточены
https://www.youtube.com/watch?v=bgckX62f4EA
вот тут достаточное описание пайплайна
Ты дурак??? Списки вообще-то в питоне а это плюсотред!!!
>структуры и алгоритмы
Что это значит? Знать, какие контейнеры в стл есть, на чем они реализованы и какая сложность у операций?
>с++17
Ничего не значит. Нормальный разраб может у тебя бесконечно глубоко что-то спрашивать, пока ты не обосрешься.
Всё зависит от предметной области, но знать как работают сокеты и как сделать простой беспонтовый чатик используя select/poll/epoll почти везде полезно.
Ну да, просто спрашиваешь чем auto_ptr отличается от unique_ptr и смотришь, как кандидат начинает нервничать.
Вы нам не подходите.
OpenGL red book
glVertex3d(0.0, 1.0, 1.0);
glVertex3d(1.0, 0.0, 1.0);
glVertex3d(1.0, 0.0, 0.0);
glEnd();
Это залёт, боец.
Прямо сегодня отвечал на это, бтв
Ты в своём 17 стандарте у шаблона забыл аргумент указать.
std::auto_ptr<int> p;
p.reset(new int(6));
Так чем отличается auto_ptr от unique_ptr? И почему его убрали из стандарта?
В языке не было мув-семантики, поэтому поведение при копировании (единственной тогда операции) было как при муве.
2. Хочу передать массив, список и т.д. в функцию или метод, как правильно передавать? Раньше принимал итераторы, но там геморроя как-то многовато, нужно использовать темплейты. Принимать std::vector<MyObject> не стоит, вдруг пользователь захочет передать вещи из другого контейнера.
> или можно вернуть условно std::vector<MyObject>?
Да
>Принимать std::vector<MyObject> не стоит, вдруг пользователь захочет передать вещи из другого контейнера.
Итераторы
Спасибо!
Алсо, коллизии не важны. Только рендеринг растровой хуйни около 20-40 объектов
Я недавно учу кресты но по аналогии с питоном должен быть специальный механизм для обращения к одному ресурсу с двух потоков. Типа мютекса.
Неа, такого ниет(
Я в итоге решил через вызов этой функции по таймеру через сигнал, но это так себе решение.
В том что он вызывается только когда просиходит какая то интеракция с гуем, например ты навел мышкой на окно. Если Убрать с гуя фокус и ничего не делать, то апдейт не происходит, видимо в целях экономии. Я по аналогии с игровыми движками пытался найти fixedUpdate, который вызывается каждый кадр например или еще как то привязан, но такого нет. С другой стороны таймер через сигнал позволяет вызывать функцию с жесткой привзякой к времени и из основного треда, что в общем то мне и надо.
Не пробовал, честно говоря, судя по описанию воможно он бы и сработал.
С другой стороны,
> Warning: If you call repaint() in a function which may itself be called from paintEvent(), you may get infinite recursion.
если какой нибудь addLine вызовет ее сам, то получим трудноуловимый дедлок, что тоже нахуй не надо.
Таймер с нужным разрешением и вызываешь update c timerevent другого способа я не знаю. Алсо на вин 7 вроде как при сворачивании таймер останавливается. На 10 и линуксах продолжает работать.
Подгрузить в рантайме заранее неизвестную dll-ку? Через LoadLibraryA и GetProcAddress какие-нибудь.
[code]std::filesystem::path fullpath;[/code]
[code]std::cout << fullpath.relative_path().remove_filename();[/code] // здесь по моим ожиданиям должен быть путь до директории
[code]std::cout << fullpath.filename();[/code] // тут я ожидаю увидеть только имя файла.
Но когда я делаю
[code]filepath = std::filesystem::current_path();[/code]
fullpath.relative_path().remove_filename() возвращает мне путь к родительской папке моего рабочего каталога вместо пути к рабочему каталогу, а
fullpath.filename() вместо пустой строки возвращает мне название моего рабочего каталога.
Я неправильно пользуюсь <filesystem>? Чего я не осознаю?
Что c++ не для тебя
Что filename это то, что написано после последнего /\
Т.е. папка d:\laba считается файлом и после remove_filename останется d:\
700к в месяц вышло.
Что ты имеешь ввиду под заставлял? Если тебя не прет то, чем ты занимаешься - то шансов вкатиться немного.
> Что ты имеешь ввиду под заставлял?
Медленно продвигаюсь в обучении, приходится себя буквально заставлять прочитать какой-то урок или главу. Приятнее писать что-то своё, что интересно, а не реализовывать класс для общественного туалета из книги с методами среньк и пук. В итоге в очередной раз пишу что-то уровня змейки на sdl, пропуская теорию, получается говнокод, незнание синтаксиса (до сих пор не понял многих квалификаторов), стандартной библиотеки и ещё много всего. Как бы есть понимание, что нужно сначала всю базу освоить, Майерса там навернуть и потом уже садиться своё писать что-то, но невтерпёж это всё.
>В итоге в очередной раз пишу что-то уровня змейки на sdl, пропуская теорию, получается говнокод, незнание синтаксиса (до сих пор не понял многих квалификаторов), стандартной библиотеки и ещё много всего.
Нормальная тема, я первую книгу прочитал после 5 лет опыта коммерческой разработки
Рассказал про свои поделия, скромненько так, описал, что умею пока мало, но стремлюсь.
На следующие работы конечно уже более красиво попадал.
Самое важное, как раз - писать код. Пиши его. А теорию можешь понемножку читать.
змейку написал - прочитал книжку - написал змейку с классами, в чём проблема?
Читая только книжку не научишся. Пять лет в разработке без книжек тоже не самый умный вариант, конечно.
Опенсорс пытайся, чужой код читать очень надо.
Просто рассказываешь про курсачи. У меня был сапёр -> приложуха для расчёта стоимости перевозок (смесь задачи о коммивояжёре и о назначениях) -> приложуха для расчёта портфеля ценных бумаг (линейное и квадратичное программирование). Писал не на плюсах. Когда на работу взяли, учил язык с нуля (мейерса, страуса и прочих читал уже потом, причём по диагонали).
Для него специальная сигнатура функций нужна.
Попытки в собственный высоконагруженный udp-сервер, наброски game-engine, всякие хуки для игр, чтоб рендерить дополнительную информацию поверх игрового окна (на основе прочитанной памяти процесса), ну плюс пытался в реверсинг по мелочи. Ну и змейки с крестиками-ноликами (с мультиплеером) и тетрисом тоже писал.
В принципе всё это тогда было говнокодом, но всё равно опыт, о котором можно было рассказывать. Любой опыт подойдет.
> минусы
Те, кто пробовал, пишут про скудность крестов на андроиде, мол, как только требуется хоть малейшая кастомизация, выходящая за рамки стандартного, сразу приходится возвращаться к джава-мирку.
Есть path/name.lib, какую опцию дать компилятору, чтобы вклюичл её в билд
Qt как по мне лучший фреймворк для кроссплатформенных мобильных приложений. Но лучше не потому что крутой, а потому что остальные хуже и нативка тащит
>>16714
>>16719
мне нужно подсунуть mingwу чужой код с модификацией.
уже нашёл что -l, просто я его не в том порядке подавал.
это странно, здесь в папке лежит name.lib который IDA воспринимает как AR [archldr_zip64.dll] и выдаёт мне какой то список COFF ов. По идее эта name.lib должна экспортировать методы, но компилятор их не находит. Зато находит в name.dll из другой папки. Что это за AR?
Я нихуя не понял, но видимо тебе нужно скомпилить dll как static link library и потом полученный lib файл передать с ключом -l. Сейчас у тебя lib файл это не сама либа, а её бинарный интерфейс.
Либо линковщик не может найти определения из-за того, что у тебя в либе экспорт делается без extern "C". Если так, то гугли как сделать demangle (вроде какими-то ключами компилятора можно убрать декорирование из определений).
Вакансий на рендер мало, желающих много, особенно среди школоты и студентоты.
Простые задачи рендера уже давно никому не интересны - написана куча движков. А для решения сложных задач тебе придётся копить опыт начиная с с++ тугосерьки или через макакинг на других языках.
Вообще никак практически.
В российских реалиях - это такой мем. У нас буквально есть пара компаний, кто разрабатывает собственные движки. И даже там - разрабатывают хуету полную и никаким ресерчем там не пахнет.
А из-за таких вот вкатывальщиков наивных, у тебя еще и зп будет ниже, чем по рынку и будешь половину времени тесты писать.
Максимально безблагодатное дело с пидорашкинским отношением, жалею, что потратил время на такую парашу.
Ребята, сделайте себе одолжение, не начинайте учить плюсы не ознакомившись на хорошем уровне с сишечкой.
Огромное количество проблем и недопониманий связаны с тем, что вы кидаетесь в сложные дебри, не разобравшись как все это работает на базовом уровне.
C Primer Plus (Prata):
Note VLAs Do Not Change Size
The term variable in variable-length array does not mean that you can modify the length of the array after you create it. Once created, a VLA keeps the same size. What the term variable does mean is that you can use a variable when specifying the array dimensions when first creating the array.
>не ознакомившись на хорошем уровне с сишечкой
А до сишечки нужно изучить ассемблер?
>кидаетесь в сложные дебри
Какие ещё дебри в статическом массиве? Ладно бы они с выводом типа ебались.
>А до сишечки нужно изучить ассемблер?
Нет. Си достаточно низкоуровневый чтобы разобраться с базовыми понятиями, и вместе с тем, достаточно высокоуровневый чтобы собирать программы из концептуальных блоков.
Идеален для обучения программированию.
>Какие ещё дебри
С++.
Это сложный язык, оперирующий сложными понятиями. По вопросу выше о массивах можно с достаточной точностью предположить, что вопрошающий слегка не шарит в базовых понятиях. С++ не лучший выбор для изучения базовых понятий, блоков и структур ЭВМ.
Так понятно?
Кнут с тобой не согласен. Алсо ИТТ изучают язык программирования, а не программирование как явление.
> не ознакомившись на хорошем уровне с сишечкой
Путь адекватного человека выглядит так: пишем пару лет на машинном коде, ещё пару лет на ассемблере, полгода сишечку и можно свой первый класс идти реализовывать. Конечно же перед этим всем не забываем подтянуть устройство ОС, архитектуру ЭВМ, элементарную компьютерную, цифровую и аналоговые схемотехники, ну и конечно же теорию электрических цепей и теорию передачи информации, ведь как можно что-то писать, если мы даже не знаем как этот бит формируется. По пути желательно повторить кодирование информации и при желании шифрование. Перед ассемблером ещё нужно алгоритмы и структуры данных тоже повторить, без них никак. Конечно, если ты не заканчивал вуз по специальности прикладная математика, то и все дисциплины оттуда тоже захвати. Без этого в такие дебри как плюсы лезть не советую.
>Кнут с тобой не согласен.
Ты скозал
Пиздец. Просто пиздец.
> Алсо ИТТ
Ты прав, я случайно сюда зашел. Я начал с программирования, а потом перешел к крестам.
Уровень аргументации итт
Вот этот прав.
Это мотивация уровня:
>А ЧТО БУДЕТ ЕСЛИ Я НАПИШУ ВОТ ТАКУЮ ВОТ ХУИТУ?
>Зачем ты хочешь написать хуету?
>НЕ НУ ПРОСТО А ЧО БУДЕТ-ТО ЕСЛИ НАПИСАТЬ ХУЕТУ? ЧО НЕ ЗНАЕШЬ? НУ ТАК ТЫ БЫДЛО ИДИ НА ГОДБОЛТ ДРОЧИ АССЕМБЛЕР
Ну я то, в отличии от тебя, книги Кнута по программированию читал и не заметил там ни С ни C++. Если брать вузовское академическое образование, где обучают программированию, то там преподы тоже стараются рассказывать на каком-нибудь псевдоязыке. И только на практических занятиях, которые нацелены на изучения языка, уже да, можно увидеть код. Причём язык зависит от предметной области, на которую ты учишься.
P.S похуй кто сделает,супер кодер или такой же студент,главное чтобы зачли
Описать структуру с именем TRAIN, содержащую следующие поля: название пункта назначения; номер поезда; время отправления. Написать программу, выполняющую следующие действия:
1 ввод с клавиатуры данных в массив, состоящий из шести элементов типа TRAIN;
2 записи должны быть упорядочены по времени отправления поезда;
3 вывод на экран информации о поездах, направляющихся в пункт, название которого введено с клавиатуры;
4 если таких поездов нет, выдать на дисплей соответствующее сообщение
Да ты заебал,я шлюхой буду,я не хочу делать программирование,а ты посмотри,во сколько оценивают эту работу
Да,я не могу
https://pastebin.com/giAWbvW5
Сортировать по формату времени осилишь? Остальное это красивости при выводе, там понятно должно быть даже по такому говнокоду.
Целую в щёчку няша
Иди нахуй, даун.
Почему только nvidia? Прочие подобные конторы тоже потогонка, особенно азиатские.
какой быстрый минимальный протокол над udp, чтобы гарантировать доставку? QUIC - это то?
string view это pointer и size
Notes
Unlike std::basic_string::data() and string literals, data() may return a pointer to a buffer that is not null-terminated. Therefore it is typically a mistake to pass data() to a routine that takes just a const CharT* and expects a null-terminated string.
Короче, у тебя ub
Хорошо, а если в f просто передать "hello123"? Или там уже компилятор видит строку и как-то там внутри изъёбывается подставляя длину?
int k = 2;
int& const ref = k;
Строковый литерал "tralala" тоже zero terminated строка.
То есть а) и b) возможно, а с) также не существует?
const int k = 2;
a) const int *const p = &k;
b) const int &ref = k;
c) const int &const ref2 = k;
В общем случае компилятор ничего не определяет, потому что ты создаёшь объект в рантайме. Если в конструктор передаётся указатель на строку без /0 в конце, то поведение не определено.
c) тоже валидно и эквивалентно b). Константная ссылка нужна для инстанцирования шаблонов, при этому самостоятельно руками её писать не нужно.
Спасибо.
Студия компилит без проблем. Кидает варнинг, что квалификатор отбрасывается, что вполне логично.
тривиальный неправильный пример:
array<uint> buble(array<uint> &foo){
return foo;
}
Ну хз. Они раньше ресерчем занимались и всё-равно народ валил стремительно, а сейчас вообще вакансии выкладывают с каким-то фулл-стак вебом и разработчиками тулзов и гуишек.
Ты знаешь кого-то, кто там работал/работает не очень давно?
> к серьёзным людям
Это как говорить, что если в студии инкремент INT_MAX даёт INT_MIN, то никакое это не UB.
я там работаю лул. Тулзы и гуишки в тегру набирают, а веб - во все на свете. Офис за 3 года вырос в 2 раза по headcount'у, хз кто там валит откуда
От тебя аргументов вообще не было. Пруфы давай, балабол.
Расскажи, там рейтрейсингом каким-нибудь занимаются? Так, что не байты дрочат на gpu, а прям алгоритмами занимаются? Ресерч вообще какой-то есть или нет?
Расхерачь на множители, хуй знает. Но это аутизм в любом случае. Как ты его хранить-то собираешься, если тебе не хватает размера у типов?
Так нет же. Сначала случится переполнение, а потом я буду брать модуль не понятно чего
Переполнение беззнакового это как бы и есть модуль по 2^Х.
Если нужен другой, надо сначала оба множителя взять по этому модулю.
Числа умножаешь как 64х64 в 128 бит. Это три умножения. Редукцию по модулю сможешь ускорить, если модуль красивый (степень двойки - маленькое число). Иначе хз.
решение частной проблемы требует общего решения
в данном случае нужно воспользоваться средствами (способами либо готовыми библиотеками) для длинной арифметики
>я там работаю лул
предположу что ты тот самый "вкатыш"
будь честен на анонимной доске - ведь у тебя нет ни профильного образования, ни опыта работы до этой позиции
>ведь у тебя нет ни профильного образования, ни опыта работы до этой позиции
Ты так говоришь, как будто это что-то значит
Если ты особенный, как я, то важно только желание и мозги
Изучаю С-плюсы, вообщем, все по кайфу. Может пойду в С# потом, может нет. Так вот, вопрос у меня следующий:
1)Нашел годный курс по С++ и по итогу там идет создание игры-приложения(same game) на ебаном MFC.
Начал гуглить эту, смотрю инфы мало и на форумах пишут - что MFC это неповоротливый устаревший зверь, не еби себе мозг написанием приложений с помощью этих библиотек.
Но я хочу реализовать на С++ какую-нибудь простенькую игру или приложение. Так что мне делать? идти сразу в C# так там проще и быстрее. Или есть какие еще варианты?
Либо готовый 2д движок, либо qt, где ты просто в изображение рендерить будешь всё.
Во всякие opengl даже не пытайся, если ты там на уровне днищекурсов каких-то.
Какой ты хочешь функционал? В qt ты можешь просто взять натянуть изображение на формочку и хуячить туда змейку или что-то еще, просто с руки меняя пиксели.
Если ты хочешь 3д, то opengl, но для этого нужно на с++ уже хорошо писать. Если ты какие-то там курсы смотришь, то ты скорее всего пока что слишком слаб для opengl. Ну и вообще это сомнительный карьерный путь - дрочить opengl.
>Ну и вообще это сомнительный карьерный путь - дрочить opengl
почему? ты про то, что если меня интересует работа с графикой, то opengl не самый лучший вариант? или ты другое имеешь ввиду
да я с++ в целом то нормально знаю, сложностей для меня тут нет.
>если меня интересует работа с графикой, то opengl не самый лучший вариант
Нет, для графики opengl/directx норм. Но вкатиться в такое суперсложно, особенно без образования.
Если ты не восторженный начинающий чел, а уже точно решил, что будешь заниматься графоном, то окей, хуячь opengl.
Иначе - подумай дважды.
Настолько все плохо с одногруппниками?)
Если ты будешь платить мне, я смогу делать тебе некоторые задания
>особенно без образования
какое тут еще образование то надо?
кодинга не достатчно чтоли?
что там еще емое знать надо.
понятно, что математику и тому подобное я знаю
400к оклад и пачка акцией ежегодно, которые в среднем капают по 300к в месяц на руки
>>17944
Да, есть команда которая занимается именно рейтрейсингом, но, вестимо, это небольшой кусок штатовской команды
>>18172
>будь честен на анонимной доске - ведь у тебя нет ни профильного образования, ни опыта работы до этой позиции
Опыт был (иначе как бы меня взяли сениором), а образование не нужно. Ну послушал бы я 5 лет, как старые пердуны меня паскалю учат, что бы изменилось, кроме проебанных 5 лет.
чел, я не знаю, что ты мне пытаешься доказать. Лычка Senior есть? Есть. Зарплата есть? Есть. Проекты, которые мне дают лидить есть? Есть.
Образование ни в чем из этого не роляет, всему можно научиться самому.
Анон, попробуй SFML лучше, можешь даже исходники почитать и разобраться, там сверхсложного ничего нет и в случае чего можешь свои хедеры типу вектора2д писать, конкретно под свои задачи. Для базового GUI можешь ImGUI взять, тоже легко достаточно встраивается в SFML и с ним работает отлично. Вот тебе и готовый набор для грейда своих скиллов, где ты будешь реализовывать исключительно логику, а свой GUI тебе в любом случае пилить придётся немного, если меню будешь делать. Параллельно ещё шейдеры зацепишь точно, а через них в OpenGL на базовом уровне разберёшься и успеешь даже распареллить это всё.
НО, если тебе нужно конкретно приложение, с выпадающими меню там, списками, текстовыми полями и прочим говном, то бери Qt. Но конкретно изучать его как-то смысла нет, там формошлёпка в основном через хорошо описанную документацию, где примеры покрывают 90% задач.
Ну вот при изучении STL и новых стандартов плюсов я сталкиваюсь с тем, что в Qt это уже все давно реализовано, в некоторых случаях даже удобнее. Приведу тривиальный пример: зачем мне знать, как работает std::vector, если у меня есть более удобный QVector (или QList, если похер на расположение элементов в памяти)?
Тут чел выше советует SFML. С ним реально закреплять знание чистых плюсов или лучше дальше задачки с выводом в консоль решать? Что-то с графикой должно интересней быть.
спасибо тебе няшка, держи печеньку.
можешь тогда дашь еще совет, после того как я грубо говоря изучу базовый курс С++ (а я его уже изучил, сейчас повторяю основыне моменты) так что мне следует начать изучать дальше?
у меня по курсу дальше идут:
1)OpenGL
2)CFML
3)Qt5
4)RegExp и т.д.
Если ты меня спросишь, а чего я сам хочу?. я не знаю, ну наверное отвечу банально - какие-нибудь игры. я не могу точно сказать, так как я ничего сложного и серьзного еще не кодил, а всякие сортировки массивов, рекурсии и т.д., вещи конечно полезные но...
> базовый курс С++
Для начала, что такое базовый курс?
> что мне следует начать изучать дальше?
C++, C++ и C++. Поверь, тем для изучения там много. А что делать параллельно уже сам решай, ниже подробно опишу.
> 1)OpenGL
Заходишь на learnopengl.com, проходишь пару туториалов - зашло, продолжаешь, нет - дропаешь.
> 2)CFML
Берёшь и сразу пишешь по примерам, там всё максимально просто описано в документации. Можешь ещё туториалы глянуть. Если не знаешь как лучше всю эту дрянь в ООП-стиле оформлять, заходи на гитхаб и читай чужой код.
> 3)Qt5
Будешь как анон выше -> "зачем мне знать, как работает std::vector, если у меня есть более удобный QVector".
> 4)RegExp и т.д.
Сразу нахуй и даже не вспоминай.
Анонче, если тебе нужно изучать чтобы да кабы, то душные темы тебя только к дропу подвинут поближе. Вот прямо сейчас скачай UE4 и сделай что-то на блюпринтах по туториалам, потом тоже самое перепиши на крестах. Сами кресты не забрасывай только, попиши всякого на SFML или SDL2 (лучше первое), задачки на алгоритмы порешай, Мейерса почитай, развлекайся с пользой в общем, вариантов много, зазубрить книгу на 1300 страниц с первого раза никому не удавалось, а оно в принципе и не надо.
Если хочешь писать именно простенькую игру, а не приложение, к qt лучше не прикасайся. SMFL, что тебе советовали, норм тема. Если хочешь еще больше фана, то попробуй raylib, правда либка сишная, но это не сильно страшно.
Это на полном серьёзе асм-инструкция выдаёт результат как си-код в 3/4 столбцах и умные дяди разрабатывающие процессоры решили именно такую логику в области нуля сделать?
Есть адекватный способ получить равномерные 0-1-2-0-.. в остатках без особых костылей вроде приведённого мной?
А это нормально что-то брать из туториалов и доделывать? Хочу запилить свои шахматы, нашёл на ютубе видео на эту тему с кодом, который можно ещё с десяток раз улучшить и на классы разбить. Или прям с нуля нужно пытаться делать?
a%b == r <=> a == (a/b)*b+r
Отсюда и отрицательный r при отрицательном a. То есть это просто побочный результат выполнения целочисленного деления, который решили сделать оператором языка.
>А это точно удобно?
Я и не помню, когда приходилась делать modulo от отрицательных чисел, так что это вообще не проблема.
Но для питоновских результатов указанные тобой правила соблюдаются тоже.
>когда приходилась делать modulo от отрицательных чисел
Да по идее постоянно, намного чаще вот эта фигня, где mod выдаёт 5 нулей, а выше и ниже по 1 единицы.
Я рисую сетку координатную, и нужно каждую десятую линию нарисовать жёлтым. Так там из-за этой фигни клетки на 1 съезжают с другой стороны координатной оси, нужно abs лишний ставить.
Иначе говоря, ты сможешь назвать хоть одну задачу, где требуется си-поведение, а питон-поведение не подойдёт? Мне что-то ничего в голову не приходит.
>так что это вообще не проблема
Да понятно что можно свою функцию поставить и хуй с ним со стандартом языка, но цикличные остатки от 0 до n-1 были бы в разы логичнее и не ясно почему хотя бы на уровне асм-инструкции так не сделали.
>Опыт был (иначе как бы меня взяли сениором), а образование не нужно. Ну послушал бы я 5 лет, как старые пердуны меня паскалю учат, что бы изменилось, кроме проебанных 5 лет.
Блять, вот ты разговариваешь ирл с людьми, кто там работал - и все говорят, что оттуда съебали в ужасе и работают сейчас в сильно менее престижных компаниях, что как-бы намекает на то, что они не пиздят. Люди с топовым образованием, которые годами жестко дрочат предметную область. Которые несмотря на это рассказывают, что там супер сложные собесы, где нужно знать всякие детали нвидевских архитектур и что почти нереально вообще туда прийти просто так с хедхантера. Рассказывают, что это жесткая галера, с постоянными жесткими переработками, где люди на управляющих позициях специально перекидывают тебя с проекта на проект, чтобы ты в их технологиях очень сильно не разбирался и так далее.
А потом приходишь на двач, в тред, где 95% постеров - это студенты, спрашивающие хуету и отвечающие хуету И ВДРУГ читаешь охуительные истории, диаметрально противоположные тому, что слышал.
>ряяя абразавании нинужна ряя нвидия нвидийа где работаешь так нвидия же 700к палучайу лучшее места ряя нвидиа
Блять, да будь ты в несколько раз хуевее того, что ты рассказываешь о себе, ты бы всё-равно даже не сидел бы тут. А если бы и сидел, то точно не писал бы хуету про мне лидить проекты дают ряя сасать. Я не представляю, каким нужно быть имбецилом, чтобы заниматься таким.
В конце концов, там проекты-то можно по пальцам посчитать. Даже анон с двача смог бы тебя сдеанонить и набить ебало возле офиса. Так что просто съебни нахуй, старина, делай там свои лабы с закрытым ебалом и не пиши хуету в тред.
да мы давно выяснили что ему повезло оказаться в нужный момент, а другие задроты в нвидиа втихаря угорают с него
какой из него cpp программист, он там тупо visualstudio настраивает чтобы проэкты лучше собирались!
> Да понятно что можно свою функцию поставить и хуй с ним со стандартом языка, но цикличные остатки от 0 до n-1 были бы в разы логичнее и не ясно почему хотя бы на уровне асм-инструкции так не сделали.
Инструкция тут не при чем (скорее всего, остаток на константу считается умножением). Это традиционное поведение из 70-х, когда делали как проще.
Только по большому везению. Ибо, как и сказали, у нас полторы конторы занимаются чем-то таким. И из них ещё большая часть - чистый гейдев, где работать можно только из большой идейности или если ты ультимативный сеньор-помидор с тайными знаниями. В остальных случаях - зп ниже средней, переработки как норма. Ну и отзывы берешь: сабер - уебки, варгейминг - уебки, и так далее.
Похоже, единственная норм контора - юниджайн, ибо не геймдев, а движло пилят. Меня оттуда, конечно, попросили, ибо слишком говнокодер оказался, но пока был в офисе успел атмосферу понять. Тут можно и всю жизнь спокойно вджобывать - задачи интереснейшие, уровень разрабов высокий, контора небольшая и отношение нормальное.
Подытоживая: геймдев - зашквар, хочешь чем-то околографическим заниматься - ищи неигровые продукты типа тренажеров, картографии, всякой хуерги для визуализации данных.
Паша Дуров получил образование и стал CEO. А тебе выше тимлида не светит.
>сабер - уебки
вот это плюсую
>юниджайн
Двигло используется аналоговнетами, так что да, работа там будет всегда. Зп там выше рынка не получишь, так что тоже проходная контора.
Наоборот вообще-то. В ДС есть только гайджины и мейлру. В обоих местах занимаются говном точно так же с переработками и инфантильными дебилами в лицах коллег.
Я не про гейдев, а про места, где делают графений.
рофлю с этого фантазера, который с кем-то поговорил.
Ну, задеанонь, только такие стены зависти не пиши.
Сабер, кстати, у мейлру иногда подряды берёт. Хотя не только он у московских бояр побирается.
>у, задеанонь, только такие стены зависти не пиши.
Окей, готовь ебало. Во вторник у Марьиной Рощи тебя ждут пиздюли, щегол.
вы состоянии за переворот строки только пояснить, петушки
Удалось зацепиться вот за это (его читатель намекнул на игрушку Mercenaries)
https://kunaifusu.livejournal.com/116882.html
Далее все было просто. И вот здесь было такое ощущение, как будто забрался
в синагогу и прочел тайное имя бога. Т.е. видно было, что чел прошареный,
но такого не ожидал.
Нашелся некто Basil Milanich, выпускник МГУ (про МГУ в журнале где-то упоминалось).
В 2012-2020 годах в Sony ICE team - это что-то вроде внутренней группы сони-экспертов
в составе Naughty Dog, привлекаемых для допила блокбастеров. Есть в кредитсах практически всего,
что выходило хитового на сони в указанные годы. Недавно ушел в HFT.
Подробности биографии достаточно точно совпадают с контентом журнала
https://www.apollo.io/people/Basil/Milanich/5d2ff29ef1c4cd0c665a617a
Вот, например, упоминания о релокации в Висконсин (Human Head Studios, 2010-2011)
// Wisconsin
https://kunaifusu.livejournal.com/375489.html
https://kunaifusu.livejournal.com/382244.html
https://kunaifusu.livejournal.com/388504.html
https://kunaifusu.livejournal.com/426699.html
Одно время имел более приличный бложик https://bmilanich.wordpress.com/
Он, оказывается, немножко лиспанутый. Некоторые постинги развивают на записи из основного журнала, например
https://kunaifusu.livejournal.com/243772.html
https://bmilanich.wordpress.com/2011/09/25/breaking-the-speed-of-c/
Удалось зацепиться вот за это (его читатель намекнул на игрушку Mercenaries)
https://kunaifusu.livejournal.com/116882.html
Далее все было просто. И вот здесь было такое ощущение, как будто забрался
в синагогу и прочел тайное имя бога. Т.е. видно было, что чел прошареный,
но такого не ожидал.
Нашелся некто Basil Milanich, выпускник МГУ (про МГУ в журнале где-то упоминалось).
В 2012-2020 годах в Sony ICE team - это что-то вроде внутренней группы сони-экспертов
в составе Naughty Dog, привлекаемых для допила блокбастеров. Есть в кредитсах практически всего,
что выходило хитового на сони в указанные годы. Недавно ушел в HFT.
Подробности биографии достаточно точно совпадают с контентом журнала
https://www.apollo.io/people/Basil/Milanich/5d2ff29ef1c4cd0c665a617a
Вот, например, упоминания о релокации в Висконсин (Human Head Studios, 2010-2011)
// Wisconsin
https://kunaifusu.livejournal.com/375489.html
https://kunaifusu.livejournal.com/382244.html
https://kunaifusu.livejournal.com/388504.html
https://kunaifusu.livejournal.com/426699.html
Одно время имел более приличный бложик https://bmilanich.wordpress.com/
Он, оказывается, немножко лиспанутый. Некоторые постинги развивают на записи из основного журнала, например
https://kunaifusu.livejournal.com/243772.html
https://bmilanich.wordpress.com/2011/09/25/breaking-the-speed-of-c/
Пока Кармаковские кракозябры (это кодом назвать сложно, разве что в смысле "код Да Винчи") продаются и вызывают ахи и вздохи хипстеров я на хлебушек смогу заработать...
... Кармак же, со своим программированием на уровне шестиклассника ...
... Там куча проблем с перформансом и с логикой ...
https://kunaifusu.livejournal.com/467799.html
... Кармака наняли потому что народ, далекий от индустрии, считает его ацки умным visionary в нашей области. Все что я знаю о Кармаке это: он не верил в shadowmaps и боролся с ними как с бесперктевным алгоритмом (в 99.99% игр сейчас используют shadowmaps), он в развное время писал код для люминографа, вокселей и прочей хуйни, он написал "мегатекстуру" и рекламировал ее лет 5, пока все не увидили игру на ней. Каких либо других достиженей я за ним не припомню. ...
https://kunaifusu.livejournal.com/531766.html
... У меня большая уважуха к этому поцану. Растянуть полдюжины шареварных платформеров в карьеру "Гуру 3Д" - никому больше не удавалось...
https://kunaifusu.livejournal.com/487221.html
Дело в том, что орхитектура х86 (да и остальные более или менее популярные архитектуры от Интела) никогда не поддерживала многопоточность. Даже убогая двухпоточность на некоторых процессорах спрятана от программиста и используется для симуляции двух процессоров в одном. Все тысячи тредов, что Виндуз показывает в таск менеджере - это никакие не потоки, а самые настоящие процессы. Многопроцессность там есть, многопоточности - нету.
Разница простая - процессы это сущности ОС и живут они по правилам ОС, а потоки - это сущности CPU и живут они по правилам CPU. Например, я хочу написать программку, распечатывающую файл с диска на принтере. CPU не знает нихрена ни про какие файлы, ни про диски и, тем более, про принтеры. Тут мне многопоточность не поможет. Тут как раз работа для многопроцессности - в одном процессе буду читать файл а в другом печатать, между ними - пайп построю и будут они ждать файл, принтер и пайп так замечательно, что пока один процесс ждет, другой может какую-то работу делать. А вот захочу я перемножить пару матриц - тут наоборот, ОС нихрена про матрицы не знает, за то процессор знает все и про память, и про кэш и про ALU. Тут надо бы запустить кучу потоков, чтобы каждый считал свой элемент произведения. Большая часть будет будет висеть ожидая кэша, а пока они ждут - другие работают. Принцип многопоточного программирования простой - все циклы заменяем потоками. На каждую итерацию цикла - поток.
Но на х86, конечно, так не получится. В лучшем случае там можно отрастить процессов по числу ядер и каждым считать часть матрицы произведения. Что, конечно, не rocket science, но принципиально сложнее тривиального многопоточного алгоритма. И, главное, из за накладных расходов на создание и синхронизацию процессов, медленнее тупого последовательного алгоритма для достаточно маленьких матриц. Вообще, для любой задачи, не связаной с доступом к объектам ОС, создавать больше процессов чем ядер нельзя, потому что производительность просрется на дележ одного процессора между несколькими процессами. Да и с оптимальным числом процессов можно обломиться - процесс вещь тяжелая и дорогая, чтобы его запускать по любому поводу.
Оказавшись на многопоточной архитектуре, программисты, деформированные х86, относятся к потокам как к процессам на х86, бережно и осторожно. Вместо того, чтобы раскручивать как можно больше простых потоков они мудрят схемы, где число потоков минмизируется за счет усложнения логики внутре потока. Мало того, что это работает медленно, это еще и писать муторно и долго. Но по-нормальному не получается, на то она и деформация.
https://kunaifusu.livejournal.com/530022.html
Дело в том, что орхитектура х86 (да и остальные более или менее популярные архитектуры от Интела) никогда не поддерживала многопоточность. Даже убогая двухпоточность на некоторых процессорах спрятана от программиста и используется для симуляции двух процессоров в одном. Все тысячи тредов, что Виндуз показывает в таск менеджере - это никакие не потоки, а самые настоящие процессы. Многопроцессность там есть, многопоточности - нету.
Разница простая - процессы это сущности ОС и живут они по правилам ОС, а потоки - это сущности CPU и живут они по правилам CPU. Например, я хочу написать программку, распечатывающую файл с диска на принтере. CPU не знает нихрена ни про какие файлы, ни про диски и, тем более, про принтеры. Тут мне многопоточность не поможет. Тут как раз работа для многопроцессности - в одном процессе буду читать файл а в другом печатать, между ними - пайп построю и будут они ждать файл, принтер и пайп так замечательно, что пока один процесс ждет, другой может какую-то работу делать. А вот захочу я перемножить пару матриц - тут наоборот, ОС нихрена про матрицы не знает, за то процессор знает все и про память, и про кэш и про ALU. Тут надо бы запустить кучу потоков, чтобы каждый считал свой элемент произведения. Большая часть будет будет висеть ожидая кэша, а пока они ждут - другие работают. Принцип многопоточного программирования простой - все циклы заменяем потоками. На каждую итерацию цикла - поток.
Но на х86, конечно, так не получится. В лучшем случае там можно отрастить процессов по числу ядер и каждым считать часть матрицы произведения. Что, конечно, не rocket science, но принципиально сложнее тривиального многопоточного алгоритма. И, главное, из за накладных расходов на создание и синхронизацию процессов, медленнее тупого последовательного алгоритма для достаточно маленьких матриц. Вообще, для любой задачи, не связаной с доступом к объектам ОС, создавать больше процессов чем ядер нельзя, потому что производительность просрется на дележ одного процессора между несколькими процессами. Да и с оптимальным числом процессов можно обломиться - процесс вещь тяжелая и дорогая, чтобы его запускать по любому поводу.
Оказавшись на многопоточной архитектуре, программисты, деформированные х86, относятся к потокам как к процессам на х86, бережно и осторожно. Вместо того, чтобы раскручивать как можно больше простых потоков они мудрят схемы, где число потоков минмизируется за счет усложнения логики внутре потока. Мало того, что это работает медленно, это еще и писать муторно и долго. Но по-нормальному не получается, на то она и деформация.
https://kunaifusu.livejournal.com/530022.html
Какие-то ужасные каменты написали люди, непонимающие разницу между процессом и потоком. Но в общем не их это вина - Майкрософт придумала свои "потоки" чтобы не травмировать тонкую индусскую душу fork()ом и выросшие на этом программисты даже не подозревают, что там внутре течет и куда.
Процесс это контекст с точки зрения ОС - там лежит все чтобы выполнять программу: PC, стек, намапленая память и прочия дескрипторы. Поскольку ОС сейчас все многозадачные, они, естественно, умеют переключаться между этими контекстами. Переключение между процессами на одном PU - процесс долгий и тяжелый, но и необходимый, так как в целях безопасности сама ОС является процессом и любой ее вызов вызывает такое переключение. Виндовые "потоки", как и посиксные pthreads это просто шорткат для создания процессов, в основном отличающихся только стэком и PC.
Поток это контекст с точки зрения процессора. Поскольку процессор куда проще ОС, ему много не нужно - там лежат регистры включая PC, стэк, намапленую память и всякие внутренние состояния. Переключение между потоками ничего не стоит. Можно хоть каждый такт переключаться, что обычно и происходит в многопоточных процессорах. Т.е. если мы запустим два потока, состоящих из NOPов, то каждый будет выполнятся как будто он единственный поток на процессоре с половиной частоты. Однако с нетривиальными потоками все гораздо интереснее. Встретив инструкцию, которая требует ожидания какого-то условия (например ждет данные из памяти) процессор просто перестает переключатся на этот поток, пока условие не выполнится. За счет этого несколько потоков одновременно выполняются быстрее чем они же последовательно за счет сокращения времени простоя процессора в ожидании памяти. Естественно, что такое поведение многопоточного процессора не повторить на однопоточном никакими ОС и никакими явами. Программными средствами невозможно переключится из зависшей в ожидании инструкции.
Долгое время ждущих инструкций в микропроцессорах не было. Инструкции всегда что-то делали и не ждали без толку. Только в 90х годах прошлого века появились процессоры с асинхронной памятью и инструкции стали ждать память. Но вместо того, чтобы просто сделать Пентиум многопоточным, Интел, наученный горьким опытом с 486ым (который был медленее 386 на коде, оптимизированом для 386), пошел по "суперскалярному" пути. А то какой-нибудь Дворак запустил бы свой любимый Word 5.0 на новом Пентиуме и не увидел никакого ускорения, было бы нехорошо. С точки зрения абсолютной производительности, суперскалярность/OOE даже рядом не стоит с многопоточностью/SMT, однако позволяет ускорить однопоточный код, единственный важный критерий для Интела в то время. Опять же, наверное тогда думали, что память скоро догонит процессоры и это только временная проблема, хе-хе.
https://kunaifusu.livejournal.com/531119.html
Какие-то ужасные каменты написали люди, непонимающие разницу между процессом и потоком. Но в общем не их это вина - Майкрософт придумала свои "потоки" чтобы не травмировать тонкую индусскую душу fork()ом и выросшие на этом программисты даже не подозревают, что там внутре течет и куда.
Процесс это контекст с точки зрения ОС - там лежит все чтобы выполнять программу: PC, стек, намапленая память и прочия дескрипторы. Поскольку ОС сейчас все многозадачные, они, естественно, умеют переключаться между этими контекстами. Переключение между процессами на одном PU - процесс долгий и тяжелый, но и необходимый, так как в целях безопасности сама ОС является процессом и любой ее вызов вызывает такое переключение. Виндовые "потоки", как и посиксные pthreads это просто шорткат для создания процессов, в основном отличающихся только стэком и PC.
Поток это контекст с точки зрения процессора. Поскольку процессор куда проще ОС, ему много не нужно - там лежат регистры включая PC, стэк, намапленую память и всякие внутренние состояния. Переключение между потоками ничего не стоит. Можно хоть каждый такт переключаться, что обычно и происходит в многопоточных процессорах. Т.е. если мы запустим два потока, состоящих из NOPов, то каждый будет выполнятся как будто он единственный поток на процессоре с половиной частоты. Однако с нетривиальными потоками все гораздо интереснее. Встретив инструкцию, которая требует ожидания какого-то условия (например ждет данные из памяти) процессор просто перестает переключатся на этот поток, пока условие не выполнится. За счет этого несколько потоков одновременно выполняются быстрее чем они же последовательно за счет сокращения времени простоя процессора в ожидании памяти. Естественно, что такое поведение многопоточного процессора не повторить на однопоточном никакими ОС и никакими явами. Программными средствами невозможно переключится из зависшей в ожидании инструкции.
Долгое время ждущих инструкций в микропроцессорах не было. Инструкции всегда что-то делали и не ждали без толку. Только в 90х годах прошлого века появились процессоры с асинхронной памятью и инструкции стали ждать память. Но вместо того, чтобы просто сделать Пентиум многопоточным, Интел, наученный горьким опытом с 486ым (который был медленее 386 на коде, оптимизированом для 386), пошел по "суперскалярному" пути. А то какой-нибудь Дворак запустил бы свой любимый Word 5.0 на новом Пентиуме и не увидел никакого ускорения, было бы нехорошо. С точки зрения абсолютной производительности, суперскалярность/OOE даже рядом не стоит с многопоточностью/SMT, однако позволяет ускорить однопоточный код, единственный важный критерий для Интела в то время. Опять же, наверное тогда думали, что память скоро догонит процессоры и это только временная проблема, хе-хе.
https://kunaifusu.livejournal.com/531119.html
Посмотрел Вулкан, сэмпл рисующий треугольник - больше 1000 строчек. Больше 1000 строчек, Карл! как теперь принято говорить. У ДХ12 получше чуть-чуть. Наконец-то можно строить коммандные буферы из разных тредов - всего-то лет 10 прошло с тех пор как одноядерные процессоры перестали делать даже для лэптопов. Однако до консолей все еще далеко.
Самая главная проблема песишных API это компиляция шейдеров в рантайме. Во-первых это занимает время, а во-вторых рантайм компилятор не может соревноваться с уровнем оптимизации офлайн компилятора. Для примера, НВидиевский компилятор для PS3 сосал настолько, что делая инвариантные изменения исходника (добавляя 0 и умножая на 1 разные значения) можно было получать сильно разный код. Но для PS3 это не проблема - запустил процесс на выходные, который перебирает тысячи пермутаций каждого шейдера и выбирает самый лучший код и готово. На песи тот же компилятор работал в рантайме даже не пытаясь ничего оптимизировать. Еще на той же PS3 - у пиксельных шейдеров не было константных регистров, константы реализовывались через модификацию кода. На PS3 просто патчился бинарник, а вот на песи, подозреваю, патчился IL и перекомпилировался. В результате PS3 могла делать десятки тысяч ДИПов, а песи дох на тысяче с тем же ГПУ. В новых API эта компиляция никуда не делась (хотя проблемы с ней на современном железе не такие же как на PS3, конечно, но принцип тот же).
Вторая большая проблема - биндинг параметров для шейдеров. Слоты, имитирующие регистры видеокарточек 90х годов прошлого века, наконец-то ушли, но замена не на много лучше. Я так понимаю все теперь связывается фетч шейдером (раньше только вертексбуферы). То есть теперь фетч шейдер вызывается на каждой стадии, а не только вертексной. Это, конечно, разгружает CPU но за счет дополнительной нагрузки на GPU. На консолях можно обойтись и без слотов, и без фетчшейдеров (даже в вертексной стадии).
Ну и, конечно, поддержка многозадачности никуда не делась. Каждый раз, когда переключаются контексты, нужно востанавливать все состояние ГПУ, а для этого его нужно постоянно копировать в память. Хотя бы сейчас в этом появился какой-то смысл, так как не только игры используют ГПУ. На консолях можно пользоваться хардверными контекстами, так как никто не будет запускать 1000500 клиентов.
https://kunaifusu.livejournal.com/530484.html
Посмотрел Вулкан, сэмпл рисующий треугольник - больше 1000 строчек. Больше 1000 строчек, Карл! как теперь принято говорить. У ДХ12 получше чуть-чуть. Наконец-то можно строить коммандные буферы из разных тредов - всего-то лет 10 прошло с тех пор как одноядерные процессоры перестали делать даже для лэптопов. Однако до консолей все еще далеко.
Самая главная проблема песишных API это компиляция шейдеров в рантайме. Во-первых это занимает время, а во-вторых рантайм компилятор не может соревноваться с уровнем оптимизации офлайн компилятора. Для примера, НВидиевский компилятор для PS3 сосал настолько, что делая инвариантные изменения исходника (добавляя 0 и умножая на 1 разные значения) можно было получать сильно разный код. Но для PS3 это не проблема - запустил процесс на выходные, который перебирает тысячи пермутаций каждого шейдера и выбирает самый лучший код и готово. На песи тот же компилятор работал в рантайме даже не пытаясь ничего оптимизировать. Еще на той же PS3 - у пиксельных шейдеров не было константных регистров, константы реализовывались через модификацию кода. На PS3 просто патчился бинарник, а вот на песи, подозреваю, патчился IL и перекомпилировался. В результате PS3 могла делать десятки тысяч ДИПов, а песи дох на тысяче с тем же ГПУ. В новых API эта компиляция никуда не делась (хотя проблемы с ней на современном железе не такие же как на PS3, конечно, но принцип тот же).
Вторая большая проблема - биндинг параметров для шейдеров. Слоты, имитирующие регистры видеокарточек 90х годов прошлого века, наконец-то ушли, но замена не на много лучше. Я так понимаю все теперь связывается фетч шейдером (раньше только вертексбуферы). То есть теперь фетч шейдер вызывается на каждой стадии, а не только вертексной. Это, конечно, разгружает CPU но за счет дополнительной нагрузки на GPU. На консолях можно обойтись и без слотов, и без фетчшейдеров (даже в вертексной стадии).
Ну и, конечно, поддержка многозадачности никуда не делась. Каждый раз, когда переключаются контексты, нужно востанавливать все состояние ГПУ, а для этого его нужно постоянно копировать в память. Хотя бы сейчас в этом появился какой-то смысл, так как не только игры используют ГПУ. На консолях можно пользоваться хардверными контекстами, так как никто не будет запускать 1000500 клиентов.
https://kunaifusu.livejournal.com/530484.html
Почему великий Бьёрн Страуструп не запилил себе до сих пор нормальный сайт? Его сайт по прежнему выглядит как кусок гавна из начала 90-ых?
Аха, узнал kunaifusu по его высерам. Он годами не меняется, пишет одну и ту же хуету. Это ж у него как раз профдеформация: он геймдев, пишет под платформы с дерьмовыми cpu уровня бюджетного ноута, и вытягивает недостающее ковырянием с железками.
Если по пунктам, то всё плохо.
С x86 всё збс - до выхода ps3 с его уёбищным cell другого способа писать код в мэйнстриме и не было, даже на консолях. Шейдеры времён dx9 не считаю - уж очень они были ограниченны. Учитывая, что gpgpu по-прежнему не стоит усилий в 99,9% софта, у него получился целый пост надменной хуеты.
fork в никсах - это как раз способ сделать вид, что никакой многопоточности не существует (достаточно посмотреть, как пишется код на node, python, php), в то время как даже кодеры на win95 уже познали всю боль примитивов синхронизации. Более того, этот пиздобол всё переврал - именно fork создаёт отдельный процесс, копируя память и дескрипторы, а виндовые потоки всегда работают внутри уже существующего процесса.
Для vulkan нужно не 1000 строчек, а гораздо, гораздо больше - к нему нужен ещё менеджер памяти. Но при этом он позволяет писать охуенно адаптивный код: тот же doom eternal может на минималках ползать на нищебродском apu атлона, а может дать жару на rtx 3090, в то время консольный код живет от силы 5 лет и потом выбрасывается, потому что между ps3 и ps4, например, изменилось вообще всё. Про переключение контекста gpu тоже смешно - начиная с 4-й плойки в консолях те же самые операционки (фряха и винда) и те же самые gpu.
В общем, не вникая в вопрос, можно обосрать всё что угодно, и конкретно этот поцыент себя показал недалёкого ума выебщиком. А ведь лет ему на момент поста, кажется. было уже за тридцать.
Это еще ладно, его личный сайт - может хоть ЦП постить
А вот что касается сайтов некоторых крупных проектов и организаций, к примеру slackware,minGW - то это реально пиздец. Неужто люди, способные разработать такого уровня вещи, не могут нашлепать что-нибудь более-менее приемлемое на всяких джс сиесес (хотя бы чтобы фейспалм не ловить при входе на главную страницу)? Возможно не хотят шквариться о петуховские языки, но есть же вордпресс к примеру: поставить, 5 минут понастраивать, и уже лучше было бы.
хуй знает, я конечно ни практик нихуя, но просто прочитал книжки рихтера и еще windows internals
либо он пишет о том что сильно выходит за рамки моих представлений, либо он пишет какую то несвязную чушь
Ясно Великий Маэстро обоссал веб-макак, впрочем ничего нового.
Потому что он может, но ему лень разбираться в css, html и прочое поеботе. Если он захочет то высрет годный дизайн, но это время тратить нужно, а ему похуй.
сука
Бьёрн Страуструп же сказал что это нахуй не надо к тому же мода на дезигн проходит быстро и хули постоянно говно сайт перепиливать? А его знания вечны.
900x840, 2:46
Терабайты. Ну а черно-белые тексты тоже можно делать неуныло.
Открыл шембку и сразу в голове regedit.exe
Бьёрн Страуструп сказал что если тебе уёбку нужен крейтив дезигн то милости прошу запили ему, а потом пишли свою говновёрстку, он вставит её себе на сайт
кушать хочешь? решил от мамки сьехать? может ты думаешь что когда появиться деньги то сможешь потрахаться наконец?
Я не он, но я так думаю, да. Обычно так и происходит.
Геймдев это пиздец, не лезь туда
А ты сам как думаешь, возьмут тебя в топовую компанию(на самом деле такую себе), когда ты нихуя не умеешь и сейчас 2021 год на дворе, когда вкатывальщик каждый первый? Я уже не говорю о том, что там начальных позиций вообще нет скорее всего.
Полистай на линкедине чуваков, что там работают. Там любой нормальный разраб будет иметь образование пми и нормальный такой опыт работы.
Что собственно придурку который кресты выучил, бомбанул и сейчас вкатывается в монтёры кабелей мешает написать игру на собственном игровом движке?
Что нам всем мешает то это делать?
А расскажи, что ты делаешь сейчас плиз. Интересно просто, что за 7 лет вообще произойти может.
РНН господин. Делаю игры на Годоте для души.
>Что нам всем мешает то это делать?
То, что ты нищеброд без скиллов. Какую ты блять игру собрался делать на собственном движке? Если ты такую хуйню пишешь, то скорее всего ты ни движки не писал, ни игры.
А даже если бы это писал сеньёр-помидор и самый охуенный разраб, что только может быть, один хуй без денег или многих лет работы в соло без каких-либо денег ты ничего не сделаешь. А если даже сделаешь, очень-очень малый шанс, что что-то там взлетит.
Нужны скиллы кабанчика, рамсить с недовольными клиентами, ты можешь потратить кучу времени, годы и выхлоп будет "пук", а если что-то начнёт выгорать финансово то нужно будет это оформлять срочно, регистрировать т.к. иначе тебя просто выебут органы пыньвласти. Подводных дохуя. Нужно быть ёбаным в сраку гением уровня торвальдса и то его гавно не взлетело, оно просто сделало его известным что работодатели увидели его.
А что не так? Для тебя написать движок для игры это так сложно?
Алсо, ну хуй с ним не шарю в вашем гейдеве, ну сайты то пилить это проще. Неужели здесь нет анонов которые для различных кабанчиков согласятся веб хуету пилить?
Что происходит с объектом класса "a" в данном случае? Путем эксперимента додумываю что при переназначении переменно test из класса b вызывается деструктор a и a сваливает нахуй со стека. Верно?
>Для тебя написать движок для игры это так сложно?
Чтобы написать движок на уровне движков, которые есть, ты потратишь годы.
>Алсо, ну хуй с ним не шарю в вашем гейдеве, ну сайты то пилить это проще.
Проще конечно. Фриланс называется. Каждый второй этим занимается. О чем ты вообще?
Частенько вижу у них появляются вакансии на интерна, вот интересно стало что они там спрашивают, не сказал бы что я нихуя не умею, читаю книжки про движки, графику, делаю игры, движок, пишу шейдеры.
> Чтобы написать движок на уровне движков, которые есть, ты потратишь годы.
Причём нужно быть не вкатышем-одиночкой, а сеньором с командой из 10+ разрабов.
Нет, думаю скажут какую нить логику меню писать или что-то типо этого, но хотел бы всё-таки графикой заниматься
и еще как заставить здесь запретить создание объекта, например в конструкторе я хочу его детально создать а тут просто обявить переменную типа. Догадываюсь
a() = delete; в определении класса a
Анон, ебу куда писать, нагуглить не удалось. Надеюсь вы знаете как эту хуйню пофиксить. В общем мне visual studio long double какого-то хуя округляет. Мне надо прощитать с точностью в 20 знаков после коммы а оно на 16 знаке какого то хуя заканчивается. Как фиксить?
Тут даже с лабами идут нахуй, и ты думаешь, что кто-то ответит на твои вопросы про AABB и VAO/VBO?
При создании обьекта класса b, вызывается конструктор для обьекта класса a, потом в .create ты вызываешь оператор перемещения (A&&, т.к. результатом a() является prvalue). Потом когда b выходит из скоупа - деструктор вызывается.
>>20469
Сделать конструктор приватным, и вызывать его либо из статического метода, либо из friend-функции
ну хз, судя по выхлопу при каждом create сначала вычисляеться новый объект и исполняеться его конструктор, а после присваивания вызывается деструктор предыдущего объекта.
Потому что long double - это нихуя не 20 знаков.
https://stackoverflow.com/questions/50148727/microsofts-edx-c-course-double-vs-long-double-why-a-lack-of-common-standar
думал за буст но это слишком долго разбираться с этим дерьмом, быстрее уже на питон переписать. ладно, спс
>мешает написать игру на собственном игровом движке?
конкуренция среди поделий инди-разработчиков страшная вообще то сегодня
по соотношению трудозатраты-окупаемость выгодней наверное на паперти стоять, а не делать инди проэкт
Да там ничего сложно, он преимущественно хеадер-онли, просто скачиваешь и распаковываешь его, затем компилятору указываешь папку инклудов буста и можешь уже юзать, читая доки на нужную тему.
Как будто в наше время глобализированной экономики есть что-то где нет конкуренции, лол.
Не надо подменивать понятия. Умеренная конкуренция != отсутствие конкуренции. А в гейдеве ты охуеешь с толп школьников/студентов с юнити.
Так в этом и суть, хорошее качество игры достигается за счёт самописаного движка на сях. Я не гооврю о том чтобы написать какой-нибудь ёба универсальный движок на современный лад. А тупо пилить это всё под конкретную игру на один раз. То есть одноразовый движок для одной игры как кстати и делали раньше.
Он даст преимущества и в оптимизация и в других штуках типа того что игрового процесса т.к. ты как угодно его настроить можешь. И здесь школота и студенты на юнити соснут хуйцы
я о том что сегодня уже есть относительно развитые средства прямого финансирования (кикстартер, патреон, ранний доступ в стиме, etc), и многие инди-проекты уже заполнили пустующие ниши
сегодня уже есть игры почти под любой вкус
взять, к примеру, песочницы
довольно трудно будет конкурировать с факторио, террарией, oxygen not inluded и другими
хотя вроде бы довольно нишевый жанр, но он уже заполнен
Качество игры вообще не коррелирует с движком и тем более языком.
(Точнее коррелирует обратно - пока ты рожаешь велосипед, ты не создаешь контент, графон, уровни и так далее)
Не так он прав на самом деле, что в идеале под каждый вид игры свой движок напильником заточенный пилить надо. Но суть в том что в современных реалиях на современных мощностях это реально нахуй не надо. Учишь готов движок и клепаешь своё гавно. Здесь проблем будет больше с созданием текстур, 3д моделей и прочей поеботины что для с++ господина равно выстрелу в голову.
Только вот ты закончишь писать свой движок примерно к 2077 году
вот на картинке мы описываем структуру и какие функции могут с этой структурой работать.
что значит typedefs?
что мы тут объявляем и зачем?
то что ниже про функции я понял
Объявляем типы указателей на функции, чтобы не писать в сигнатуре каждой функции непонятную хуиту в духе
void func(void (⚹⚹f)(int, int)) { ... }
так почему у нас есть typedefs - где мы объявляем сигнатуры
а ниже идет раздел functions
где куча функций без сигнатур
Нахуя разбираться в этом говне вообще? Там апи используется одинаково каждый раз и в пару строчек. Один раз написал и забыл.
реально все, просто знать надо на требования, а не на "прочел вступление к страуструпу"
Ну я тащем-то осилил страуструпа, прочитал от корки до корки книжку на 1400 страницу. Только на многие упражнения забивал.
Да не у меня с базой всё норм. мне просто в мы вам перезвоним треде сказали что меня заворачивают из-за отсуствия технической вышки. Я не хочу перекатываться в веб меня тошнит от него нахуй, хочу на плюсах писать
Тут дело не в том, что в универе тебя программировать научат.
Просто на плюсах чистых никто почти ничего не пишет, либо пишет какое-то говно. Обычно с плюсами вместе идёт какая-то большая предметная область, которую ты сам, конечно же, не изучишь, либо изучишь очень хуево.
Если пойдешь формочки клепать на кьютэ - универ не нужен, да, формально, хотя это всяко будет тебя хуево выделять на фоне других кандидатов.
Если пойдешь компьютерную графику дрочить или компьютерное зрение или любую другую область - то без универа тебя сходу нахуй пошлют вообще без сомнений.
Да, я их уж вбрасывал в соседний мы вам перезвоним, сказали что это хуета.
Проекты такие:
1. Консольная змейка на чистом си
2. Программа с гуи на cpp которая работает с данными из таблиц, строит графики по методу наименьших квадратов и выводит функцию графика. Ну плюс там возможно сохранение данных или загрузка их.
Да я думаю дело не в гит проектах, на гите чё-то 1 просмотр у меня да и тот мой его даже не смотрит никто
Я ещё знаю схемотехнику, могу в чтение схем электроники, знаю основы арихитектуры компьютера. Планирую ещё в ассемблеры освоить
А ты сам работаешь на сях? Или с дивана вещаешь?
блять напиши что вышка у тебя есть
сделай норм проекты, чтобы показать
диплом твой даже смотреть не будут (в 90% случаев)
когда спросят, прямо так и скажешь, что наебал, а хули еще делать то было?
ну а дальше как пойдет.
Да у меня была мысль но мне знакомый который работает в айти сказал что наёбывать не надо.
>>20677
>>20690
Советую тебе сделать что-нибудь на qt, написать резюме нормальное в стиле "охуенно знаю qt, cpp 14/17, stl, компьютер саенс, бд" и аплаиться на не сильно охуевшие вакансии. Мб во что-то отечетственное. Похуячишь там год - найдешь работу получше.
На всякую велосипедную хуйню советую тебе не размениваться и не слушать местных дурачков про рендеринг всякий, иначе работу не найдешь вообще.
Ну или другой стак бери, да. Не обязательно же там веб какой-то, да и веб вебу рознь. На каком-нибудь дотнете тоже норм работается.
Ну и наебывать не надо, что за бред вообще. Ладно там дописать еще, что пару месяцев неоффициально работал или фрилансил или лабы делал студентам или около того, но прям пиздеть - ну такое себе.
собеседование = контакт
Я на обе работы на которых норально платили устроился хотя вообще не подходил по требованиям. Помню поехал, чисто потому что случайно рядом оказался. Как итог несколько собеседований, плюс одно на английском лол. Ну и взяли, я потом спросил у своего непосредственного начальника как так то, ты же говоил, что были ребята гораздо сильнее меня. Он ответил, тут никогда не знаешь как оно будет и так анон везде. Вообщем создай топ резюме с вышкой! И твоя задача уже начать гонять на собесы. Вот поверь, за неделю найдешь. Я блять хз как это работает. Но у меня два раза так и было. Причем конторы серьезные и несколько собесов и везде я сильно проседал и даже задание завалил. Это лотерея, ебашь и все
После плюсов есть преимущество в том что на что угодно можно переучиться без задней мысли, т.к. сложнее ебалы чем эта не найти. Ну и если он по книжке страуструпа учился и то лучше, т.к. он очень много общих и тонких деталей реализации любого яп объясняет.
Вообще я бы советовал тупо на java или c# какой-нибудь переучиться.
Да не особо, на самом деле. Даже на какой-нибудь C# пересаживаться не особо удобно. Да, он будет легче в том плане, что там нету всякой ебли низкоуровневой, но это тебе не в плюс. Код писать проще, да. Но знать там нужно другие вещи. И фреймворки другие и всё остальное.
Но если бы мне нужно было куда-то соскачить, я бы на C# соскачил, да. Но я его и знал когда-то неплохо, поэтому может я biased.
Вот этого не слушай >>20698 . Я бы послал нахуй такого пиздабола. Абсолютное неуважение и собственно неслабый такой пиздеж по своей квалификации.
Лучше готовься просто к конкретным вакансиям. Прям сделай себе на hh несколько резюме и отправляй так, чтобы совпадение по скиллам было полностью или около.
Да я тоже думаю что он пиздит, хотел попросить пруфы, но решил не скатывать тред. Да и манера письма как у школьника самоуверенного который щас вот вузик закончит и всех наебёт и поимеет я был таким же
Ты предлагаешь мне с двух аккаунтов резюме отправлять типа чтобы шансы повысить?
>Ты предлагаешь мне с двух аккаунтов резюме отправлять типа чтобы шансы повысить?
Нет, в смысле сделай несколько просто, которые будут чутка отличаться.
Если апплаишься на позицию с qt, отправляй то, где написано, что ты заебись знаешь qt.
Если апплаишься на какой-нибудь winapi, отправляешь резюме, где написано, что знаешь winapi.
Если апплаишься на какие-нибудь сети, отправляешь резюме, где написано "делал клиент-серверное приложение лулзов ради".
Вот в этих небольших отличиях можешь и спизднуть немного. Уровня, требуется знать многопоточность - ну ты придешь скажешь "ну я там юзал std::thread и мьютексы немного, воот)))".
На хх можно несколько разных сделать вроде. Раньше точно можно было.
А понял, хитрый ход. Спасибо анон, очень годно. Точно. Буду короче вкатываться завтра с новой силой
Но нужно учивать что херочки тоже могут всё это видеть, ну типа заметит могут что один и тот же чел разные резюме имеет они ведь тоже не на одной вакансии там пасутся
Ну, это же не что-то нелегальное. Ты просто описываешь релевантные скиллы к позиции.
Да и спалить супер сложно, там вкатывальщиков дохера и больше, никто не будет там запоминать твоё фио или какой-то кросс-референс делать по всем резюме.
У меня фото просто стоит
Всмсл ? Они адекватный пребилд выкатили ?
>Если апплаишься на какой-нибудь winapi, отправляешь резюме, где написано, что знаешь winapi.
Заходишь на хх и видишь, что в твоей мухосрани из в принципе двух вакансий по плюсам ни в одной не нужно winapi.
В мухосране нужно преусадебное хозяйство обустраивать, а не работу цпп разрабом искать, сам же понимаешь.
Поведение по умолчанию в оверлоаде cout<< bool это вывод true false как 1 0
Можно использовать boolalpha, чтоб выводить в виде текста
>преусадебное хозяйство
не выгодно это нихуя, у родителей огород в деревне, по деньгам золотые овощи выходят, и это при том что они теплицу не меняли 15 лет
а поменять теплицу - 25 тыщ минимум, лол, никогда не окупится
это только овощи
мясо, молоко, яйца вообще нахуй не выгодно
Потому что тупой компилятор крестов воспринимает эту строку как
(std::cout << (a > b)) ? a : b;
Так что ставь скобки: std::cout << ((a > b) ? a : b);
Да понятно, что это двачер тупой, а не компилятор, но всё равно бесит же, нет ни одной крестобляди, которая бы не проёбывалась с этим. А всё из-за странного синтаксиса стримов.
А ну да, у него там в примере же return было. Спасибо.
Да стримы та еще залупа. А синтаксис такой придуман когда кресты еще были хипстерским аднеграундом. Как и std::vector<bool>.
Можно еще создать собственный стартап на c++ и в перспективе сделать объявление на hh именно в своей мухосране, со знанием winapi, хуяпи, чё хочешь ваще!
У джуна нет денег на это
Тернарный оператор это всегда мина-ловушка, поэтому просто оборачивай его в скобки целиком и всегда.
Во время короны есть.
576x720, 0:52
Хорошо что я ещё в универе вкатился.
веб ассембли никак не сделает дефолтный хуевый фронтенд быстрее, потому-что там весь ботлнек на манипуляциях DOM.
В этом и состоит допиливание, чтобы с DOM можно было быстро работать напрямую без медленной JS-дрисни.
У вас в треде живой пример сидит этот долбаёб весь мы вам перезвоним засрал своими вопросами "пащиму миня ни бирут я жы такой маладец учил 3 года каптуре сайнс и схематехнику" и до долбаёба искренне не доходит что сейчас не 1980-е. А мог бы за три года реакт, джс, вёрстку выучить и вкатился бы как белый человек на нормальную работу
А для кого?
но веб-ассембли и вправда допилят и возможно на клиент-сайде будут ебашить прилаги на плюсах и будет больше РАБоты для простых с++ работяг а не для гигамозгов с аспирантурой
Это другое. Это макрос.
если ты мотаешся туда сюда на авто то да, это мало выгодно чтобы себе там овощей каких вырастить. С другой стороны, небольшая теплица с автоматикой- обеспечит тебя отличными помидорами, огурцами, перцами, такого качества, которого ты вряд ли найдешь в магазине, все промышленное- опрыскивается множеством препаратов, консервантов, и в 80% заражено всякими болезнями. Вроде мелочь, но экологичное питание это по моему неплохо.
Зашёл в плюсач и оказался у бабушки в гостях.
Ну так в нулевых вузы как раз и готовили делфистов - где-то же они должны были осесть? Тут даже придраться не к чему - легаси-код мажет как копоть, а в 90-х ещё не было очевидно, что паскаль умрёт, а кресты - нет.
Чтобы просто загрузить картинку, приходится велосипедить отдельную библиотеку, разбираясь в документации библиотек соответствующих форматов. Просто все или почти все остальне не применимы в реальной жизни, они применимы только в шизосистеме свои авторов. Такие библиотеки как CImg не имеют права на существование вне шизотипичного ОСомирка автора.
Вот поэтому, когда я доделаю свой язык программирования, убийцу C/C++, раста и го, то сразу же начну писать инфраструктуру, позволяющее написать и ГУИ-приложение, и математические расчёты делать, и игры, и сервера. Потому что от одного человека инфраструктура будет целостной и абстрагированной.
А другим программистишкам напишу, что если хотите сделать свою библиотеку, то держите её подальше ото всех на своих гитхабчиках и лишь самые храбрые смогут отправить мне её на ревью, чтобы я решил, добавлять её на официальный сайт языка или нет, смогут ли немногочисленные пользователи моего ЯП устновить библиотеку одной командой как сделано в pip для питона или не смогут и им придётся идти на гитхаб и под стопками README и документаций, написанных на жсе найти сам код библиотеки.
vector<int> abc = {1, 2 , 5}
string a
a = "abc"
a.size
вывод: 3
Если твоя претензия к инфраструктуре, что тебе мешает написать её для C++, а не для своего ненужного ноунейм-языка?
орнул с этого Джонатана Блоу
>Чтобы просто загрузить картинку...
...нужно взять один хедер под названием stb_image.h и вызвать stbi_load
этот шарит
>Вот поэтому, когда я доделаю свой язык программирования, убийцу C/C++
>ни асилил вставку картинку из стандартной либры плюсов
А в книжке страуструпа про них ничего не было написано
Вообщем суть вопроса станет ясна если взглянуть на картинку, но все же я поясню, что мне тут непонятно. Там все очень просто на самом деле.
1)Идет цикл рендеринга (мы отрисовываем нашем окно). Ок!
2)В этом цикле есть функция glwfPollEvent().
Из учебника :
"Функция glfwPollEvents проверяет были ли вызваны какие либо события (вроде ввода с клавиатуры или перемещение мыши) и вызывает установленные функции (которые мы можем установить через функции обратного вызова (callback)).
3)Как я например понял все это...Наша функция PollEvent в случае если поступило событие - смотрит какие функции обработки событий определены в программе - видит glfwSetFramebufferSizeCallback(window, framebuffer_size_callback);
И уже эта callback функция вызывает нашу пользовательскую функцию. Так оно работает анон? То есть эта функция просто некая связка?
Вообщем мне не совсем понятно как функция "считывания" событий и их непосредственна обработка связаны в этой программе.
Про функции обратного вызова я читал не надо меня туда отправлять. тут вопрос совсем не про это.
бампс
никак.
У кого нибудь есть на примете хорошие Octree либы? важно чтобы они были темплейтными, и координаты внутри них очень желательно работали на целых числах (int допустим)
Невозможно, подробное только в скриптовых языках есть, вроде питона и js. А собственно, зачем? Какая у тебя задача?
>У кого нибудь есть на примете хорошие Octree либы?
Это говно никто не использует. У него нету преимуществ никаких.
>важно чтобы они были темплейтными, и координаты внутри них очень желательно работали на целых числах (int допустим)
Нахуя?
Для моей задачи поиска ближайших соседей, или любых пространственных операций это прекрасно подходит.
float мне не нужны потому что они медленнее чем целые числа. Я работаю с fixed point по сути. uint64_t со смещением, потому нужно было.
Проще всего посмотреть код GLFW:
https://github.com/glfw/glfw/blob/0b2660f39fc7111a3ef2723b03f5111afbe75bb9/src/window.c#L1067
Как видно, glfwSetFramebufferSizeCallback просто в структуре окна выставляет поле callbacks.fbsize на твой коллбек.
Смотрим реализацию glfwPollEvents под винду (https://github.com/glfw/glfw/blob/1adfbde4d7fb862bb36d4a20e05d16bf712170f3/src/win32_window.c#L1953): вызывается PeekMessageW (получить эвент для всех окон данного процесса) и событие об изменении размера (WM_SIZE) диспатчится на нужное окно с помощью TranslateMessage/DispatchMessageW, которая у нужного окна вызывает функцию окна (https://github.com/glfw/glfw/blob/1adfbde4d7fb862bb36d4a20e05d16bf712170f3/src/win32_window.c#L490). Она уже в свою очередь вызывает _glfwInputFramebufferSize (https://github.com/glfw/glfw/blob/0b2660f39fc7111a3ef2723b03f5111afbe75bb9/src/window.c#L108), которая и вызывает твой коллбек.
Ничего особо сложного нет, надо просто понимать чуток как устроены event loop'ы во всяких виндах/иксах.
>надо просто понимать чуток как устроены event loop'ы во всяких >виндах/иксах.
а как с этим разобраться? мне интересна эта тема. Вот вчера я гуглил и нашел только обработки событий с доходчивым объяснением для JS
>Потому что от одного человека инфраструктура будет целостной и абстрагированной.
Ахах, какой нибудь автор CImg считал так же, что ТОЛЬКО ЕГО стиль правильный.
>Про функции обратного вызова я читал не надо меня туда отправлять.
А куда еще отправлять то?
Ну там условно говоря код
FunPtr* callback = nullptr;
vector<Event> events = {};
...
PollEvents()
{
auto evt = events.pop_front();
if (evt==EVENT_SOMTHING && callback != nullptr) callback(evt);
}
...
SetCallback(your_ptr)
{
callback = your_ptr;
}
...
SomeKeyboardShitPressed()
{
events.push_back(new Event(KEYPRESS, key_code));
}
//push_back/pop_front обмазаны какими нибудь мутексами чтобы в многопоточности не затереть значение которое ты еще не считал
Честно, не помню. Я давно разбирался, когда надо было с директиксом внутри другой программы сношаться. Если хочешь хардкора, то в принципе есть мануалы в MSDN (https://docs.microsoft.com/ru-ru/windows/win32/winmsg/window-classes https://docs.microsoft.com/ru-ru/windows/win32/winmsg/window-procedures https://docs.microsoft.com/en-us/windows/win32/winmsg/messages-and-message-queues), но я уверен что всё-таки в интернете можно найти более вменяемые статьи. Может дрегие аноны подскажут.
У тебя даже на пике quad tree нарисован, а не octo tree. Русским по белому написали, что quad нинужен, а ты копротивляешься.
Кажется, ты хочешь eval в C++
Интересно зачем
>Если твоя претензия к инфраструктуре, что тебе мешает написать её для C++, а не для своего ненужного ноунейм-языка?
А улучшение крестов просто по накатанной идет: начинаешь, допустим, с чистенького модернового пакадж-менеджера, а потом от тебя требуют сборку пакетов autotools-ом под aix и ты уже не молодой и дерзкий, а старый и сломленный жизнью, и хочешь в полтос пойти тестировщиком electron-приложений.
Так что бы ещё лет двадцать будем каждый день видеть, как make (родом из 1976) вызывает gcc (родом из 1987), который переводит тебе код на C (родом из 1972) в листинг для ассемблера GAS (родом из 1986 и написанного для машин VAX родом из 1977), чтобы слепить твою мегасовременную machine learning нетленку.
>Так что бы ещё лет двадцать будем каждый день видеть, как make (родом из 1976) вызывает gcc (родом из 1987), который переводит тебе код на C (родом из 1972) в листинг для ассемблера GAS (родом из 1986 и написанного для машин VAX родом из 1977), чтобы слепить твою мегасовременную machine learning нетленку.
Не вижу проблемы.
Тем более, что это всё развивается.
Ты не видишь проблемы, потому что привык её не замечать.
Когда у тебя autotools на каждый запуск раз тратит пятую часть времени чтобы узнать, компилируется у тебя хеллоуворлд, и со знаком ли у тебя int - это пиздец. Когда у тебя cmake генерирует makefile, который вызывает этот самый cmake чтобы нарисовать прогрессбар - это пиздец. Когда у тебя из-за изменения одного хидера двадцать минут пересобирается 600 файлов - это пиздец. Когда у тебя vcpkg скачивает и устанавливает python, чтобы установить ассемблер - это пиздец.
Кмк, самый большой прорыв в развитии случился в 1992 году с появлением турбо паскаля 7.1: тогда появилась ide, в которой из коробки работала система сборки, отладчик и профайлер, а за счет отказа от obj-файлов в качестве промежуточных, частичная пересборка среднего проекта даже на 80386 занимала считанные секунды. По сути, единственная крестовая ide, которая всегда хотя бы поддерживала этот уровень - это msvc, и всё. clion появился только через двадцать лет после.
Вся же поебота типа cmake и conan, олицетворяющая современное развитие - это перекладывание с больной головы на здоровую. Затычки для дыры, из которой дует уже сорок лет.
За ffmpeg могу сразу сказать, что ассемблер там - дикое легаси и существует только потому что авторам плевать. Так-то новый код пишется на интринсиках. Я же видел ассемблер в последние годы только в диком байтоебстве - трамплинах для перехода к jit-компилированному коду и реализации защиты от срыва стека.
Проблема:
Пишу QT будет множественное наследование от главного окна->вложенный пользовательский виджет->такой же->и.т.д. Каждый из них должен работать с определенным классом который должен содержать одинаковые для всех них данные.
-сделать класс полностью статическим
-сделать обычным но массив данных самого класса статическим (профит можно реализовать operator[])
-сделать класс полностью не статическим и его объект передавать "из рук в руки" каждому потомку в конструктор (так в пиздоне делал)
я склоняюсь ко второму
> и его объект передавать "из рук в руки"
указатель на его объект я имел ввиду
алсо, главный виджет должен иногда делать апдейт данных всего класса
>Когда у тебя из-за изменения одного хидера двадцать минут пересобирается 600 файлов - это пиздец.
Это да.
Поэтому forward declaration везде где можно.
Ну и модули ждем, может получше станет.
Со статическими данными завязывай - код с ними сложно тестировать, т.к. непонятно, кто туда последний лез их менять. Передавай их в виде const T& в конструкторе, указатели в современных крестах - дурной тон.
thx
>указатели в современных крестах - дурной тон.
интересный момент, но половина кьюти принуждает к указателям, любой чих там создается через new и привязывается к топовому QObject который при своей смерти проходится по потомкам и делает им автоматически delete. так что прийдется.
так кути по дизайну это адовое легаси
К моей любви к турбо паскалю. Смотри примеры модулей в C++20: https://docs.microsoft.com/en-us/cpp/cpp/modules-cpp?view=msvc-160 - export module/import это ж практически паскалевские unit/uses тридцать лет спустя.
И скорости компиляции модули вряд ли помогут - стандартные хидеры уже у всех precompiled, а при изменении своих все равно придется шерстить весь использующий их код, т.к. в них могут появиться новые перегруженные функции или просто имена для трюков со sfinae. И даже если интерфейс тот же, инлайнить функции придется заново. В итоге получаем ту же почти полную перекомпиляцию на любой чих.
Это не имеет значения - если потомок не владеет объектом и не может реагировать на его исчезновение, то ему незачем работать с ним через указатель. Иначе ебись со shared_ptr и weak_ptr.
Еще такое дело: Qt - это просто интерфейс. Если у тебя данные существуют всё время работы приложения, а не создаются в каждом окне для себя и потомков, то построй для них отдельную, не зависящую от Qt иерархию классов и самый верхний передавай в qt, иначе ты будешь зависеть от того, какие окна у тебя сейчас открыты, а это пиздец уровня вижуал барсика.
thx
static const в классе - это просто глобальная переменная, доступная через этот класс. Если она не зависит от текущего состояния программы, отрефактори её в constexpr и всё будет збс. Иначе лучше выдели её в отдельный класс и передавай объект этого класса в конструкторе через ссылку, иначе возникнут непонятки от того, кто эту переменную меняет.
А разницы-то никакой и нет. Общие данные в глобальных переменных - зло, т.к. никогда не знаешь, кто их меняет. При передаче их в конструктор/аргумент функции у тебя хотя бы будет возможность отследить, кому они в каждый момент времени доступны.
Не стоит того чаще всего.
Когда нужен ассемблер — его обычно нужно много, поэтому собирают отдельные объектники-модули в составе проекта.
Связанные у тебя только носки от мамки, а списки - связные
просто шаблон принимай, если хочешь анально огородить - то внутри еще поставь статик ассерт, что это итератор
Так это пользователи принимают, не я. Нужно не позволить им косячить. У меня пока три идеи: или сделать лямбду, возвращающую следующий элемент/nullptr (но тогда никаких std алгоритмов, пичаль), или свою обертку с интерфейсом итератора и функции типа items_begin()/items_end(), или перейти на ranges из c++20. Почему-то в stl для такой очевидной штуки ничего нет :(
Концепты задают минимум, которому должен соответствовать класс. А юзеры, сволочи такие, привязываются к реализации. Пример - итератор std::unordered_map возвращает std::pair, а у robinhood::unordered_map есть свой robinhood::pair. Юзеры взяли и не от большого ума жестко прописали std::pair вместо его вывода через auto и теперь у меня 500+ мест, где придется что-то подковырнуть. Попадос!
Ну правильно, auto это мина замедленного действия, тебе надо было просто возвращать обертку my::fucking::pair
Так в том и дело, что будь там auto, этого бы не случилось - вывелся бы другой pair и всё. Разница, кстати, между двумя вариантами pair небольшая: std::pair, кажется, не умеет в move-семантику.
>А юзеры, сволочи такие, привязываются к реализации
Юзеры привязываются к интерфейсу, который ты не отделил от реализации.
Назовите typeof(~i)
У меня gcc выдаёт ~i < 0, как так?
Как инвертировать биты?
Ага, решaeтся простой вспомогательной переменной
>> У меня gcc выдаёт ~i < 0, как так?
Ты ведь просто printf("%i,", i) сделал, да? Вот и получил, что заказывал - твой i printf интерпретировал как число со знаком. Если бы ты в коде написал блок с условием (~i < 0), то он бы не выполнился.
Зачем вообще этот rtti нужен? Какие-нибудь реальные примеры, а не суперспецифичных задач (в этом случае возможно создать поле идентификатора и виртуальный метод типа "getID")
dynamic_cast (антипаттерн), typeid(костыли костылики для всякой параши)
int a(int x, int y); -- Почему тут компиль не ругается?
double a(int, int); -- А тут внезапно начал писать:
error: ambiguating new declaration of 'double a(int, int)'
note: old declaration 'int a(int, int)'?
>int a(int m, int l) { return m + l; }
>int a(int x, int y); -- Почему тут компиль не ругается?
Потому-что на имена переменных похуй. 2ая строка - просто декларейшен функции с другими именами, которые не юзаются.
> double a(int, int); -- А тут внезапно начал писать:
ты пытаешься перегрузить функцию по возвращаемому значению, что запрещено.
auto ret = a(1,2) - ret это double или int? Вот никто не знает.
Ок, со вторым случаем я разобрался, там в сигнатуру не входит тип возвращаемого значения, поэтому в твоем примере будет неоднозначный вызов функции.
А почему он не ругается на int a(int x, int y);? Это же объявление функции, которая определена выше. Сигнатура абсолютно такая же: имя 'a', параметры int, int.
Объявлений функций может быть сколько угодно, до или после определения.
Первая строка - ОПРЕДЕЛЕНИЕ функции.
Вторая - обьявление.
Обьявлений может быть миллиард, определение одно.
https://ru.wikipedia.org/wiki/Правило_одного_определения
челик, это делается крайне просто: через typedef (или using в новых крестах) в определении класса..
мимо безработная голодная хуйня
алсо, почитал ответы что тебе на твой вопрос поотвечали..
уровень /pr понятен, кхе кхе
хоть тут и заседают 700к куны
Пацаны помогите найти книгу Фоулера по паттернам копроративных прил на инглише. На русиче есть но хочу другу амеру скинуть как подарок.
хуйня какая-то лол
двачая
rtti придумали для сериализации и скриптинга, чтобы связать типы с их именами. Но он какой-то стрёмный и платформозависимый получился, так что его мало кто использует.
map приделал без спроса к первому аргументу константность и теперь я не могу сделать operator< с uint32_t. как эту хуйню пофиксить
А, все, в глаза ебусь, простите. Вопрос отпал
Не понял в чем разница между аргументы и параметры, одно из них.
выбрал параметры, т.к. за ними нету;
Просто проверяю знания, а на следующий этап не пройти. Вообще, я на сишке и шарпе писал, вот начал плюсы ковырять.
У нас на работе за прохождение каких-либо курсов (хотя бы условно имеющих отношение к тому, чем ты занимаешься или должен заниматься) повышают з/п. Типа развитие персонала и всё такое.
другой анон
медлленно возвращаюсь в программирование после арми по приколу на вялял пролграмму
#include <unistd.h>
#include <math.h>
#include <stdio.h>
#include<limits.h>
int main()
{
int a(INT_MAX),c(1),b;
int min[a];
for(b=0;b<=a;b++)
{
c++;
min=a/pow(c,2);
printf("%d\n",min);
sleep(10);
}
return 0;
}
в чем ошибка
#include <unistd.h>
#include <math.h>
#include <stdio.h>
#include<limits.h>
int main()
{
int a(INT_MAX),c(1),b;
int min[a];
for(b=0;b<=a;b++)
{
c++;
min=a/pow(c,2);
printf("%d\n",min);
sleep(10);
}
return 0;
}
Создаю классы UI в котором будет реализован интерфейс с пользователем и Program в котором непосредственно находится алгоритм.
UI должен будет обрабатывать команды пользователя.
Например, пользователь вводит "myconsoleapp.exe <arguments>". Запускается main(int argc, char argv[]). В нем я создаю объекты классов UI и Program. Затем вызываю метод UI.prepare(int argc, char argv[]). Он принимает аргументы, обрабатывает их, а затем возвращает необходимые данные для работы основного алгоритма. Эти данные, я отправляю через метод Program.alg().
То есть, работает это примерно так:
int main(int argc, char* argv[]) {
UI ui = new UI();
Program program = new Program();
vector<string> vector_str = ui.prepare(argc, argv);
program.alg(vector_str);
return 0;
}
Вопрос. Правильно ли вообще так делать?
Обычно юнит-тесты пишет сам разработчик на свой код.
принял за щеку
Нормас. На алгоритмы ( а может даже и UI ) будет не сложно тесты написать. В этом и смысл разделения на разные слои. Мухи отдельно, котлеты отдельно
чтобы решить частную проблему, нужно общее решение
в данном случае тебе нужно сделать (либо взять готовые) две библиотеки - одна для разбора и обработки агрументов запуска приложения, другая для разбора интерактивного пользовательского ввода
иначе ты будешь осужден на бесконечное запиливание костылей
мимо нищяя безработная макака понявшая дзен
>хочу другу амеру скинуть как подарок.
Купи на амазоне - ты же не хочешь его под статью подвести.
Вот поэтому макросы в с++ и не надо использовать - это же не Си где без них никак.
Раскрываются ли инлайн методы объекта если я вызываю их в коде через указатель на объект:
obj->foo();
Читал если на обычную функцию где-нибудь в коде есть указатель она не раскрывается компилятором не смотря на директиву инлайн. А в данном случае?
и еще в догонку:
pragma once vs header guards
думаю большинство тут посоветует первое но почему гугль например в своем гайдлайне рекомендует гварды формата
#define {project}_{dir}_{src}_H
?
Header guards соответствует стандарту и есть в любом компиляторе, pragma once - нестандартно, хоть и есть почти во всех компиляторах.
Ситуативно
Эх, вот бы препроцессор был тьюринг-полным, можно было бы через рекурсивный инклуд на этапе компиляции посчитать факториалчик.
Тебе же сказали, что зависит от фазы луны. Компилятор при оптимизации можеи как захотеть заинлайнить, так и не захотеть, ибо inline - это просто рекомендация компилятору, хотя современные компиляторы и без рекомендаций лучше разберётся.
Ну хотел уточнить стоит ли загрязнять хэдер определениями если я точно буду использовать объект класса через указатель. В случае если они 100% не раскрываются тогда всегда определять в срр и не париться
да, ядро юникс-подобной ОС just 4 lulz
Инлайны не нужны, а сами определения должны быть в заголовке, гнусь и кланг их подставят.
Стайлгайд гугла - говно
Если ты не занимаешься какой-то адовой анальной эзотерикой с хардлинками и прочим - pragma once работает
А, ещё добавлю, что основная цель этого говнопроекта - практика плюсов, возможно на собесе покажу даже.
быстрофикс
Зачем тогда вообще бест практисес какие-то нужны? Я блять не пишу код, который я не представляю, как работает.
А тут от меня ожидают, что я смогу разобраться в чужом нерабочем коде. Еще и без компилятора / гугла.
Ну вот тоже так думаю.
Хорошо хоть позиция/компания была не прям топовой. Но всё-равно огорчает немного.
>> Элитный ЯП для написания критичных частей критичных систем, хайлоада и оптимизации производительности буквально на уровне тактов ЦП
>> Крестики-нолики, GUI, анимации
Пошёл нахуй из этого треда, тебе место на JS-бутылке
Ты можешь представить пет-проект с
> >> Элитный ЯП для написания критичных частей критичных систем, хайлоада и оптимизации производительности буквально на уровне тактов ЦП
? Вот и иди нахуй.
Маневрируй. Говори умные слова и делай вид, что всё понимаешь
Спасибо, буду пробовать.
>>25298
Это то что в голову первое пришло, да и для них это неделя, а для меня больше, по очевидный причинам. Может ещё настолки какие-то добавлю, а к ним читалку внутрь с паззлами/туториалами для тренировки. В голове много всего есть, но как-то постепенно расширяться хочется и наполнять контентом и функционалом каким-то.
>>25348
Для начала нужно что-то написать, чтобы его можно было оптимизировать. Вот я наговнокодил игровой ии, в будущем кол-во таких ботов увеличится с увеличением кол-ва игроков, тогда можно будет распараллелить это всё на gpu и всю остальную часть переписать на потоках. Не знаю чего ты так порвался сразу, няш.
Я прошел основной синтаксис. Знаю что такое класс, деструктор, конструктор, дружественные функции и классы + шаблоны. Прошел всю STL, основы знаю, но многое так-же уже забыл.
Какую библиотеку вы посоветуете начать учить? Которая зачастую требуется на работе, мне не важно направление, возьмем тот же геймдев или системы.
Мне нужно знать куда двигаться дальше. Я пробовал изучать по роликам с ютуба, но это все так сложно дается, там столько всего непонятных слов)
Сейчас бы не знать функции, используемые везде.
>А тут от меня ожидают, что я смогу разобраться в чужом нерабочем коде.
Вот действительно, что за безобразие такое.
На русском есть только 1С. Брать будете?
Mingw заметно отстаёт от gcc, там вроде с++20 до сих пор нет.
>Что посоветуете дальше.
смотри какие работы востребованы в твоем городе - дворник, охранник, гей-шлюха
если работы вообще никакой нет, то выпиливайся
Мейерс.
Работаю почти 2 года, не знаю ничего сложнее деструктора. Задротская хуита для задротов.
что за перефорс)))
Спс, не знал, что ресурсы наподобие learn.jasvascrpit есть и для с++. Не зря сюда зашел.
Лично я учебник с 1000+ страниц не выдерживаю, а вот так зайти на время и пройти пару уроков для меня решение получше.
Теория это все конечно круто!
Но вот я созрел(уже давно) до практики скажем так.
Начал писать змейку(на чистом си), в целом легко для меня это, но на стандартных библиотеках она у меня херово работает - лагает и клавиши там не видит и т.д., не хочу сейчас тратить время на отладку или как это называется(понимаю, что это 80% кодинга, но успею еще...)
Нравиться задачки решать интересные, но я их толком найти не могу. Нашел две (нарисовать ромб в консоли(ну там с опр.условиями) и с файлами одна). Реально кайфанул когда их делал.
Остальные либо слишком муторные и там какой то адский матан, в том плане, что я тупо не понимаю, что от меня хотят...Но посмотрев на код решения, вижу, что там все просто в целом и поняв суть я их решу.
Или наоборот легкие. Но в целом все они скучные. Вообщем я не знаю, что в плане практики мне делать(решать задачи, начать что-то серьёзное писать и т.д.)
Какие я вижу варианты:
Вкатываться в Qt, SMFC, OpenGL и т.д. ( и на них уже делать серьезные работы, благо их больше в св.доступе) ну или может что еще? если да, то с чего начать из них?
Так я и не вещаю про свои охуительные хеллоуворлды, дебс
Представить, ща на гитхаб залью, проект где-то в папке рядом с хоумвидео с твоей мамашей был. Ну как хоумвидео, со свиньей на ферме
? Вот и иди нахуй.
Если ты змейку на сях в консольке написать не в состоянии, у меня для тебя плохие новости
>Нравиться задачки решать интересные, но я их толком найти не могу.
Тут как минимум есть тред с рулеткой проектов, можешь оттуда лёгкие посмотреть. Или пройдись по ката, например https://github.com/gamontal/awesome-katas
Или тебе прям по крестам надо?
если я хочу запретить неявное преобразование при вызове моей функции, и не хочу чтобы передавали всякую херобору
Ну так у принимаемых аргументов должен быть explicit конструктор, а не у функции. Функцию-то ты явно вызываешь и так.
что за тред с рулеткой проектов? я в pr кроме этого треда нигде не был
я так понял ты это имеешь ввиду:
https://leetcode.com - задачки
все я нашел, что за тред. понятно
Strong typing. Т.е. если функция принимает например скорость, то это должно быть не просто число, а объект класса Velocity с explicit конструктором и может ещё, для удобства, созданием пользовательскими литералами (типа 100kmph).
this
Понял, спс
Dangling references
Всем лень пилить шапку, потому что на самом деле пользы от неё мало. Кто-нибудь загорится инициативой, перекатит с обновлённой шапкой, и ему надоедает. Ещё и нужно морально готовиться к обоссыванию токсиками, которые вечно чем-то недовольны. Изредка кто-то пишет пожелания к шапке, но в целом всех всё устраивает, поэтому никто ничего не делает, и легаси-шапка так и висит по полгода. И так во всех тематических тредах.
Use after free
вопрос
короче перекатываюсь из дата сасистного комп зрения в гетеросексуальный: вместо питона - с++, вместо юпитера - clion (или студия) а вместо дрочки моделей - нормальные алгоритмы
но с++ у меня остался на уровне уника
вопрос
стоит ли идти сперва на джуна с++, а потом уже соваться в интересующую область (возраст позволяет, всего 25) или стоит сразу идти за вакасией? а то там пишут "знание stl" а я ебу что для них "знание", это ведь скорее всего "опыт применения" а не знание
короче подскажите плез. как показывает опыт, с++ тред самый адекватный
Хуй знает
Как повезёт
Может тыкаться сразу везде и смотреть, как идёт
В принципе, крупные конторы часто берут даже без знаний нужно языка, если чувак с опытом и бэкграундом в хоть каком-то филде
Да не, как показывает опыт, если после всех собеседов успешно взяли, но уже не завалишься. Ты ж не индус-импостер
спасибо, чел
а то я ж пиздюк еще, нервничаю немного слезать с нагретого места
но ты помог добрым словом)
Да я такой же 25-лвл-пиздюк, вот на этой неделе два собеседа было, на следующей ещё два. Хочу сменить место
Перекат в кресты имеет ровно 1 смысл - ты дико угараешь по ебле байтов и т.н. "ТРУЪ ПРОГРАММИРОВАНИЮ". Для денег\карьеры\переезда за бугор и прочее - дата сатанизм лучше.
Если уж вкатываться - то искать похуй какую джуновскую вакансию, и читать книги Скотта Майерса. Когда их все прочтешь и осознаешь - будет считаться, что ты знаешь STL.
>знание stl
Одного просмотра https://www.youtube.com/watch?v=2olsGf6JIkU чтобы понять структуру STL (Степанов всё-таки молодец чувак, всё хорошо сделал) и умения пользоваться cppreference вполне хватит.
да не, я с 21 работаю, так что не прям ВКАТ ВКАТ
но хочу отметить, что еби всех в рот, если кто-то тебе будет говорить, что ПОЗДНО вкатываться
особенно до 30 лет
вот прям ссы сверху
будет тяжлее, но не приговор
ок.
гои уже настолько привыкли, что не понимают они под сапогом!!! тебя не смущает, что ты сидишь на русскоязычной борде, говоришь на русском, фильмы русские смотришь, а ссылку кидаешь на англоязычное видео?
Вам в питонотред.
Тебя не смущает, что большая часть документации разных библиотек описана на английском? Если ты не заметил, то это C++ тред, а вот православный 1С там -> >>1795914 (OP)
лахтодырый ватник, съеби в 1С тред, не оскверняй лучший тред в /pr своим бесполезным присутствием.
Короче вопрос: как реализовать ассоциативный массив, чтобы он работал быстро и эффективно и не было коллизий (в случае с хеш-таблицей)
Предполагаемое решение: реализовать в виде разреженного массива, где нечётные элементы - ключи, чётные - значения. Находить адрес нужной пары ключ-значение по принципу хеш-таблицы, затем в том случае если произошла коллизия (сверяем ключи и они разные) методом перебора считываем следующие элементы и ищем пару с нужным ключом (для доступа к существующему элементу) или ищем первое элемент, содержащий null (для добавления новой пары ключ-значение)
Предполагаемое решение 2: каждое множество ключей с одинаковым хешем хранить в отдельном бинарном дереве, в хеш-таблице хранить ссылки на деревья
Чтобы тебя нормально брали на работу какую-то по плюсам, нужен опыт пиздец. У меня у самого опыт байтойобный большой, но академический и в небольших ресерч-проектах, а не такой, что прям коммерческий на огромной кодовой базе. На собесах обоссывают люто конкретно по цпп и практически игнорируя предметную область. Причём дрочил и майерсов и стандарты и цппконы время от времени на протяжении лет пяти или больше.
Сильно не советую в цпп залезать. Я наоборот думаю в машин-леринг залезать, раз с математикой всё норм и образованием, потому что бесят блять долбаебы эти байтовые, которые спрашивают то, что они сами знают, а не то, что нужно блять.
Им похуй, что люди бест-практисес учат, чтобы как-раз избегать непонятные ситуации и не использовать ебанутые конструкции языка, в которых непонятно, что происходит. А додики ожидают, что ты будешь разбираться, как любая маленькая хуйня работает.
А если у тебя реально знания на уровне универских лаб - очень жидко обосрешься. Не слушай хуесосов в треде про какие-то истории, где берут на работу чуваков без скиллов. Да блять, в люксофты всякие может и берут. Но в нормальной международной компании - тебе хуем по губам проведут. Я тебе это сам говорю, как чел, позаканчивавший всякие мгу и с норм резюме.
Пиши названия контор и их вопросы, как раз в люксофт хочу поступить
>ассоциативный
>@
>массив
хех, мда
Не знаю, чем тебе не подходят обычные хеш-таблицы. Которые и так разруливают коллизии примерно как во втором примере.
Я ей сразу сказал: "не смей жиреть". Не люблю сильно толстых баб.
Первое это обрезанный вариант разрешения коллизий методом открытой адресацией. Абсолютно непонятно, зачем тебе разрежать массив это усложнение, не дающее преимуществ. Насчёт пробирования - ты описал линейное, там ещё другие варианты есть.
Второе это разрешение коллизий методом цепочек, но твое дерево в таком случае (из-за равенства ключей у узлов дерева) выражается в список. Что собственно и используется в этом методе. Обычно, хеш-таблицы таким образом и делают, т.к. тебе не нужно перестраивать таблицу при её заполнении
__return str.find("ABC") != std::string_view::npos;
};
auto lambda = [](std::string_view str) {
__return str.find("ABC") != std::string_view::npos;
};
Как в случае auto происходит указание параметров, передаваемых в лямбду?
Авто просто выводит типа, т.к. знает что это. И кстати, оно выведет не указатель на функцию, а анонимную структуру с оператором ().
Если тебе нужен указатель на функцию - то это auto zalupa = +[](){};
блин не сразу увидел твое сообщение
а куда подавался? где сейчас работаешь? свалил с крестов таки?
слушай, ты, конечно, прав
но хуй знает
сейчас, как я вижу, вообще такое деление в АЙТИ:
1) заполняешь формочки и ебашишь их в БД (бэкэнд)
2) вротэнд клепание формочек и кнопочек
3) дрочишь модель, которую разработали аутисты за лет 5 до тебя и допиливаешь ее точность новой порцией данных (читай: перекладываешь джисоны а ля математик) (сюда входит и МЛ и зрение, только у зрения еще эвристики ебашишь, и весь весь Дата саенс)
4) Байтоебля
хуй знает куда идти, хуй знает
хочется чего-то нормального, но либо я где-то не так смотрю, либо ИТ это нихуя не романтика а сплошь рутина
ну или идти в стартапы (Где не платят нихуя и не норм условий (в 70-ти процентах))
>хочется чего-то нормального, но либо я где-то не так смотрю, либо ИТ это нихуя не романтика а сплошь рутина
Вообще все программирование - это рутина. Там где не рутина - там нужны подскакиватели кабанчиком и чесатели языком, которые тебе все нарежут на тасочки "положи жсончик в БД", "нарисуй формочку".
Рядовой технический специалист - винтик. Я бы шел вообще в девопсню сейчас, имхо там наиболее интересно.
>>27496
Все максимально индивидуально. Я вкатился за 8 месяцев, кто-то не вкатится никогда.
>Чтобы тебя нормально брали на работу какую-то по плюсам, нужен опыт пиздец
Есть два сценария. Хороший, когда ищут спеца на конкретную тематику (ты будешь писать псевдокод и обсуждать концепции). Плохой, когда ищут эникея++ (ты будешь дебажить на бумажке какую-то синтаксическую залупу, о которой читал лет 5 назад).
Второй, очевидно, случается чаше.
>Им похуй, что люди бест-практисес учат
Бест практикс сначала перестают быть бест, а потом за них начинают пиздить ногами. Например паттерны GoF или sfinae.
В каждой конторе своё представление о том, что для них бест.
Сделай цепочками, так в стандартной библиотеке сделано (хуево, но работает)
>Как в случае auto происходит указание параметров, передаваемых в лямбду?
Так, как ты написал. Про что вообще вопрос?
Не, ну в лиспах alist вполне себе используется.
Смотри, когда мы определяем указатель на функцию сами, мы должны указать, какие типы примет лямбда. bool (*lambda)(std::string_view) = ...
С авто - нет. Как это работает?
все больше осознаю, что есть смысл получить лет 7 опыта и хорошую инженерную базу
а затем съебать в менеджмент и прочую залупу
это вполне такой вариант. Но я смотрю, как мой манагер проставляется очеллом 24х7 и сидит на митингах в полночь с пятницы на субботу - ну его нахуй. А учитывая, что он спалился по пьяни, что получает столько же, сколько и я...
В инженерном деле везде так. Начальник нижнего уровня (тимлид, начальник группы и т.п.) это рабочая лошадь, которая тянет на себе и возню с работягами и технические пердоли. А вот дальше уже те самые должности (деливери директор, продукт овнер, начальник отдела и т.д.), на которых можно булки расслабить.
Что для тебя есть байтоебля?
Машинное зрение на плюсах это написание математических либ типа OpenCV (с оптимизацией через asm/cuda/simd/ipp и прочее).
Но у тебя после квадратных скобок список параметров, его и берет. Кстати в нем тоже может быть auto, тогда это будет как шаблон работать.
Лямбда - просто анонимная (для программиста) структура с оператором(). auto просто выводит эту структуру.
Не совсем правильное у тебя деление. Есть ещё эмбеддед, и он тоже бывает разный. Есть такой эмбеддед, где ты помимо того что C++ разработчик, так ещё и питонист, и гуи делаешь для пользователя на чём придётся (иногда на веб технологиях вообще, сам учишь какой-нибудь фреймворк), и с датчиками всякими железными общаешься, и в целом следишь, чтобы продукт годный был, и ещё всякие математические инженерные задачи решать приходится на бумажке. Вот это интересно, если только сроки даются адекватные и ресурсы.
у меня нас крестах нет опыта работы - только Си (где прям байтоебля пиздец) и питон - как раз для зрения
и вот я часто вижу на ХХ в вакансиях по зрению необходимость С++. Я всегда считал, что кресты им нужны для оптимизации узкий мест
а так ли это - хз
ровно как и хз на каком уровне это нужно знать
Тем, что ебут со всех сторон 24x7.
Я на таком проекте работал и сгорел нахуй за два года. Просто физически не вывезти матан+железо+веб+систем+девопс. Бесконечное обучение, бесконечная гонка за сроками. Но интересно, да.
Мимо другой анон.
Ещё есть кровавый enterprise.
Ой блять, это называется на дуде игрец, который нихуя толком не умеет, разрабатывает костыльную хуиту и работает по всяким Концернам "Залупки".
сам сейчас в похожей залупе РАБотаю (потому что ебанутый СЕО платит деньги когда сам посчитает нужным + сама по себе зп не очень большая)
хочу съебать во всеми ненавистные ОГРОМНЫЕ КоНтОрЫ, в которых, как все говорят, нет развития, но хоть есть плата за твои труды
а поразвиваться я и дома при желании могу
програнье проганьем, а еще жить успевать надо
огромные конторы огромным конторам рознь. Но если хочешь развиваться - то надо будет кабанчиком подскакивать и самые интересные таски воровать.
я мб мечтатель
но почему-то хочу попрбоваться в SberDevice (ну или любое другое модное направление сбера), ABBY, хуявей и прочие
есть смысль ? мб тут есть аноны из названых\похожих по масштабам?
Спасибо) а те, что я назвал - отстой?
я просто 4 года в стартапах проработал и состояние дел хз на рынке
да тут и стартап стартапу рознь
в стартапах тяжело - если у тебя хоть один из сооснователей\менеджеров ебанутый - страдают все и ты с этим нихуя не поделаешь
Хуявей хантит в очень малых объёмах и только топчиков в своей сфере. В дань азиатским традициям там потогонка и не пролезть выше тимлида.
>Align Tech
Странная хуйня. Собеседовался, спрашивали хуйню, менеджер словно заучил задачки и ожидал, что я буду ему прям как по решению рассказывать и подвисал, когда я ему говорил очевидные вещи. После второго собеса послали нахуй.
А по ночам полы драить заставляют?
>>матан+железо+веб+систем+девопс
Если контора не "Рога и Кпыта Лтд" то каждая из этих сфер съедает почти всё время и работы и обучения; ты 90-летний вассерманопердун видать, раз на должном уровне владеешь такого объема стеком
Когда тебя до пота гоняют.
Звучит заманчиво, что там по баблу?
Ну около 10 лет ковыряюсь, так что почти 2/3 стека я знал.
ABBYY хз, но знакомый чел оттуда сьебал спустя полгода, что-то это говорит.
Хуавей нахуй, я туда собесился в субботу, и собеседующий китайчонок сидел в офисе. Т.е. это судя по всему работать 24х7
Сбер - вот блять не знаю. Знаю, что платит, но не знаю, каково там
Яндекс это интересная контора. Вроде и престижно. и в резюме запись хорошая.
Но
1. безумное собеседование
2. денег платят меньше
3. сама работа говно
4. абсолютно юзлесс техстэк, где у тебя ya make вместо гита. какая-то левая хуйня вместо гита, яндекс тикеты вместо Jira и прочее.
Отзывы в интернетах не лестные, но думаю зааплаиться скоро и не хочется обосраться от неожиданной хуйни.
бамп вопросу
Было дело давно. Спрашивали глубоко по цпп, стл. Задачки были ебанутые, словно менеджер нагуглил их где-то вместе с решением и ожидал это конкретное решение. А на очевидных вещах подвисал.
Задачки по 3д в смысле.
Может сейчас и не так и мне менеджер странный попался. Ну и он какой-то бред задвигал. Я спрашиваю, это его тима занимается кадом и рендерингом? Он говорит, да и начинает рассказывать про какой-то анализ данных.
По аналитической геометрии. Нету смысла что-то более конкретное рассказывать.
Но я чёт сомневаюсь, что там решение взять тебя на работу как-то коррелирует с твоими знаниями по математике. Странная хуйня реально. Как-будто они и не собиралсь брать изначально.
я так-то работал в геймдеве и подходил по стеку полностью
ну может и такое быть
Меня на одном собесе попросили найти площадь треугольника со сторонами 1, 2 и 3.
и в чем проблема, формула герона жи?
типа ты должен был ответить что такого треугольника не существует что ли?
это проверка на старость
очевидно что 17ти летний кунчик вспомнит нужную формулу, тк они шкалку вчера закончил, а 25ти летний дед-пердун может уже и забыл!
лучше бы паспорт посмотрели)
и как же удивительно, но все эти 4 часа были охуено адекватными: тебе и задачки норм дают, и очень подробно спрашивают про прошлый опыт (причем реально слушают, а не для галочки) и про мотивацию пиздите
короче с теплотой вспоминаю
до сих пор жалею, что решил сменить направление и съебал
Да всё, понял-понял, не ворчи
Помню в моей жизни также было. Крупная контора два технических собеса по 3 часа и два собеса с менеджментом. На месте оказался люто проёбаный по срокам проект. Сьебал оттуда через 8 месяцев и ни разу не пожалел.
Половина векторного произведения. Но интеграл обобщает решение задачи и позволяет кодить шире и глубже.
Да, но векторное произведение определено только для векторного пространства R3.
На пальцах только лабы решаются. Правильный подход - восстанавливать по облаку точек brep модель, запилить nurbs движок и через api верхнего уровня работать однообразно с любой геометрией.
>облако точек
>3 случайных числа
У нас нету точек в пространстве, уебывай с собеса уже, заебал.
Мы их восстановим по неполным входным данным.
Есть такое понятие как геометрическое место точек. По тем числам, которые указаны, можно факторизовать векторное пространство и на отдельно взятой фактор группе решить твою задачу.
Ты рвёшься, как будто это собес по pyrhon.
бля ты откуда так матан знаешь алло
давай, скажи еще что тебе до 25, чтобы мы тут все точно охуели
(но вообще молоток канешн)
я вот помню что интеграл это типа площадь под кривой, а для чего дифференциал нужен уже забыл ((
36 lvl
я бы посоветовал воспользоваться одной из неевклидовых геометрий, ибо по другому производить рассчеты в 21 веке - моветон
Касательная к графику. При приращении по dx, расстояние dy до графика. Это дифференциал
Бинарные протоколы и эмбед
Какая нибудь обработка изображений с 16 бит на канал. Получил проект с файлом raw_ebala.cpp
Фактор-группам этого ёбаного умника научили, а неравенству треугольника нет. Нахуй надо так учиться.
Есть класс Part объект которого будет частью объекта класса Main.
Part должен инициализироваться какими-то данными по этому я вынужден реализовать два конструктора для него, первый будет использован в строке 32, второй (нужный мне, который передает данные внутрь Part) в строке 34 справа от оператора "=". При этом, если я не ошибаюсь и судя по выводу, справа создается временный объект Part, его внутрянка перемещается в объект созданный в строке 32 и он (временный) уничтожается. Если объект класса Part будет выделен в куче, я могу конечно изначально объявить лишь указатель на него и напрямую использовать его конструктор в конструкторе главного класса без лишних телодвижений, но если я не хочу его хранить в куче, получается много лишних телодвижений:
--новый объект с конструкторов по умолчанию
--новый объект2 с нужным конструктором
--перемещение
--деструкция объекта2
Это так принято что ле? Или есть более тру путь.
а если я хочу Part⚹ p_array = new Part[10] и каждого проинициализировать, например for (int x=0; x<10; x++) p[x] = Part(x*x);
это получается 20 конструкторов и 10 деструкторов. Непонимат.
Есть догадка что просто нужно делать кастомный конструктор void init(int some_data); и вызывать его для уже созданного объекта, но хотелось бы услышать мнение гуру итт.
Зато, по-моему, можно потом свою контору открыть, или же стать техдиректором (или как эта должность правильно называется). Ведь ты уже знаешь, что и как работает, что с чем сочитать, как должен выглядеть готовый продукт и на что можно ставить акценты. Но пока работаешь действительно вечно что-нибудь новенькое и ты ни в чём до конца не успеваешь разобраться. Но весело.
Убираешь для парт дефолтный, если не нужен. Инициализируешь в списке конструкторов членов (или как там это правильно называется)
Main (int some_data) : p(some_data) {}
В этом случае р сконструируется как надо до вызова самого тела конструктора Main.
Хотя бы можно делать constexpr std::string_view
Но похуй на это, у ВАС в вашем кодбейзе который ВЫ пишете будет своя строка. Или folly подрубите.
А знаете что у вас ещё в коде есть? Свои самописные примитивы для работы с многопоточностью. Какие-нибудь LOCK(cs_hui) или LOCK2(cs_hui, cs_pizda);
А знаете что ещё у вас есть? У вас http запросы асинхронные делаются через самописную либу, которая на базе asio работает.
Чё ещё сами пишите?
Шиз, какое тебе дело до крестов? Что тебе так не сидится в своих растах-шарпах-прочем говне?
всегда пользовались std::string'ом, все ок...?
Никаких самописных локов, только shared\unique_lock и стандартные мютексы
хттп запросы делаются через libcurl.
> Чё ещё сами пишите?
Мало того, что ничего, так еще и прошлые легаси самоделки активно выкидываем
>никто не использует
Почему никто не использует? Я использую. Но я пишу для удовольствия или когда поебаться хочется.
Может это мне говнокоды попадаются. Я видел что все очень любят эту хуйню. Даже в опенсос продуктах
Большая часть "программистов" не умеет программировать.
Иногда во время жизни проектов рядом с ними "пробегают" спецы, которые наводят порядок в каком-то умеренном смысле.
Те редкие обсуждения продвинутых концептов или дезайн аппроачей, которые можно встретить в треде, на реддите или в качественных блогах — это 0.01%.
По сути как и с богатством.
Если у тебя инкам больше 50к$ в год, то ты уже входишь в 1% самых богатых людей на земле.
Так что всё логично.
Если можешь накидать сервачок / кастомный аллокатор / логику с очередями / всё предыдущее во многопотоке / условную змейку и при этом соблюсти чистоту кода, основные best practices, const correctness, правильно применять мув семантику и темплейтить там, где надо ( а не везде / нигде) (плюс иметь опыт с несколькоими ЛЮБЫМИ либами), то ты УЖЕ в микропроценте лучших плюсовиков.
я тебе скажу немного больше. Даже там, где люди умеют программировать - обычно бэклог на год, который нужен был позавчера.
Редко где дают время сделать заебись.
Тоже верно
Ща бы в C++ треде с мув-семантикой и темплейтами выебываться, когда тут каждый второй школьник контрибьютит в какой-нибудь MPL.
Всё, что накидано в твоём простофильном посте - уровень максимум хай джуна, с учётом всех этих "чистот кода"
>каждый второй школьник контрибьютит в какой-нибудь MPL.
Каждый первый школьник тут только new int[5] делает, а потом спрашивает, как массив в функцию передать
Стандартная либа подходит только для laba2.cpp поскольку дает только некий общий метод.
В реальных проектах естественно свои строки, в текстовом редакторе одни, например ropestrings, в базах данных другие, в гуи третьи.
Это же язык для быстродействия, а не для макак.
Я не против нестандартных либ. Я про то что нет нормального человеческого набора пакетов для белых людей. Так же как и нормального менеджера зависимостей. У нас даже логер свой.
Зависимости настолько сложно ебать, что народ просто подумал что проще свой за 2 дня написать и не ебаться
Всё гениальное просто.
мы вцпкг допилили и счастливы. Теперь вырезаем всякое говно самодельное, и юзаем нормальные вещи, типа spdlog
Просто кидаю сорцы в папку, желательно header-only, вот тебе и вся зависимость.
Потом сборка десять years
> Library requires OpenOffice installation on computer and works thought its components.
ну не так же
просто кидаю сорцы в папку, конечно же хедер онли, урчу пока шаблонодобро три часа компилируется
Ты ещё вспомни когда стл-контейнеры литералами разрешили инициализировать и лямбды завезли
дебилд сервер
не думаю что тебе нужна работа программистом с такой внешкой
помню в начальной школе родители хотели меня запехнуть в "элитный" математический лицей, там на экзаменах (в 3м классе) была и такая задача - давали карандаш и на пустом столе из карандаша нужно было сделать треугольник - решение: приставить этот карандаш к углу стола
и прочие подобные охуенные задания (типа для чего нужны круглые люки и прочая параша)
естественно я был в полной прострации от подобных "математических" логических задач
а потом уже узнал что для поступления в этот лицей тупо нанимали репетиторов которые малолетних детишек тупо натаскивали на эти задачи - говорили им решение чтобы они запомнили
до сих пор охуеваю с этой системы и надеюсь что подобное образование провалит эту страну на дно где ей и место
чтобы черепашкам-ниндзя удобней было! ты первый день в /pr что ли ?!
Да можно все задачи по конвертации цветовых пространств смело записывать в байтоеблю: bayer-rgb-hsl-yuv-grayscale-cmyk. Причём даже не тех, что для CV, а тех, которые нужны в полиграфии и рендерёжке PDF подобных документов на разные экранчики.
А потом начинаем дико орать, от того, как долго компилится проект и сколько гигабайт зависимостей перед этим надо выкачать.
В /pr отсчёт начинается с 0.
так бинарное кэширование же. ВЦПКГ собирает один раз, пакует в нугет, заливает в гитлаб, и дальше оттуда скачивает. У нас все депы скачиваются 40 секунд, и то, потому-что ебучий AWS SDK жирный как мамка абу.
Курсы охуенные, главное задания по ним делать
прошел их несколько лет назад, теперь в гугле работаю
Ты только невежество своё выпячиваешь. Неравенство треугольника входит в аксиоматику понятия метрического пространства. Не знаешь аксиоматику == не знаешь науку, что бы ты там ни пиздел.
>высрал какую-то нерелейтед хуйню про какие-то фактор группы, через которую даже площадь треугольника не найдешь, если известны только длины сторон
>ряяя йа математек ахуиный ряяя
Ты же додик блять, который нихуя не умеет, ты о чём вообще?
Братан, очень интересно что ты пишешь (лол диднт рид), но если у треугольника сумма двух сторон равна третьей стороне то очевидно он вырождается в линию. У меня ушло на осознание этого десять секунд. У тебя на это ушло самообладание.
В мсвц с неконстант экспрешоном не скомпилится (если в функцию размер массива параметром передавать например), в жисиси всё нормас
Чтобы рабочий их мог перекатывать с одного района на другой. Они же тяжелые. Как ты будешь перекатывать квадратные люки?
А ты хорош
Чтобы попилить на сэкономленном металле, дурашка.
>Потому что ты в седьмой строке кода пытаешься объявить статический массив на стэке, размер которого должен быть известен во время компиляции.
Ну вот в рантайме есть переменная х. Далее я уменьшаю стэк--поинтер на х байт. нахуя конпелятору там чтото знать?
есть вопрос
вот у меня есть камера и я снимаю с нее фреймы с помощью opencv
вопрос: как мне лучше передавать данные с камеры в алгоритм? через отдельный поток или через обычный while True и вывзов методов в этом вайле?
Для масштабируемости что лучше?
Мне кстати тоже интересно.
Если я хочу, например, в OpenGL приложении рендерить куб с текстурой - фреймом с камеры, как это лучше всего сделать? Каждую отрисовку загружать через OpenCV картинку - это же медленно будет, не? Как это нормальный разраб сделал бы?
ну я вроде вижу что люди в отельный тред пихают
но не уверен, что так нормальные разрабы делают (я чел который задал вопрос выше)
формируется буфер, на входе которого новые данные, на выходе забираются данные на обработку
так справляются с тем что обработка может не успевать за новыми данными
специализированных структур данных для этого полно
bump
БАМП НАХУЙ
>помню в начальной школе родители хотели меня запехнуть в "элитный" математический лицей, там на экзаменах (в 3м классе) была и такая задача - давали карандаш и на пустом столе из карандаша нужно было сделать треугольник - решение: приставить этот карандаш к углу стола
У меня такая задача была при распределении по классам при поступлении в первый класс. В обычную, не математическую, школу.
Только вместо карандаша была одна спичка.
А хрен знает. Длина буфера проставляется? Попробуй выводить по одному все символы.
Может быть у тебя игра первым байтом принимает нули, так что и char строка и %02x также будет возвращать нули. Попробуй пройтись по всему буферу, а не только первому байту:
const int len = lpBuffers->len;
const char buf = lpBuffers->buf;
printf("WSARecv (%i bytes): ", len);
for (int i = 0; i < lpBuffers->len; i++) {
printf("%02x ", buf);
}
printf("\n");
Извини, парсер съел индекс i у buf в printf-е и звездочку у char :(
Сука, жизненно, что пиздец просто. Берём язык, ради скорости требующий от программиста чуть ли не за яйца себя укусить, и пишем на нём отборное пхпшного уровня говно. Потом ещё на конфу съездим, расскажем как у нас на go получилось то же, только быстрее.
Сейчас вот как раз пытаюсь исправить код, в котором на каждый кадр обходится таблица 12812832, в которой хранятся, сука, индексы в map, из которого нужно достать bool и сунуть в такую же таблицу - это типа кэш блять.
Да в общем-то обычный рефакторинг. Дрочильня на пике скорее от безысходности. Там ещё интересный момент есть - know the stats. Обычно из кода нихуя не понятно, под какие цели именно вот так вот легли операторы и откуда высрались вот такие вот коэффициенты в функциях. Такой себе magic number только размером в десятки или сотни строк.
Прикл крутящийся куб, сделанный по учебнику вулкана.
Ну так автор пика и призывает сразу думать, что пишешь. Тут еще такая проблема не озвучена: бывает, код или оптимизируется сразу, пока он не вырос, или уже никогда, т.к. у него все шансы быть равномерно размазанным по коду, где он будет отжирать 1-5% общего времени кусочками по 0,033%, но никогда не попадет напрямую в найденные профайлером хотспоты, и ты не поймешь, что копать надо его. Я вот сейчас с этим столкнулся - после первых легких +20% скорости уперся в глухую стену.
Не, так дела не делаются. Нужно думать над грамотным разбиением кода на логические блоки. Оптимизация блоков и их частичная замена это уже заключительный этап, когда у тебя есть the stats. И как раз это даёт возможность эффективно профилировать.
Я довольно часто сталкивался с тем, что предыдущий писатель думал не над формой, а над содержанием и его мелкие оптимизации превращали код в кусок бетона. Такой код уже не поддаётся рефакторингу и дальнейшей оптимизации.
Больше разных кубов, примитивная физика, камера - вот и убийца майнкрафта.
Мы как бы в c++-треде, да? Ну, знаешь, треде про язык, само использование которого - в 98% случаев само по себе преждевременная оптимизация? Очень, очень странно растаскивать код просто по логическим блокам и уповать на профайлер, когда у тебя ещё пока чернила на доске не высохли уже должно быть понимание, за счет чего c++ тебе должен обеспечить большую скорость.
Я вот сейчас копаю код, в котором такого понимания не было, и в профайле нет ни одной пригодной для оптимизации функции, занимающей больше 0,5% общего времени. Все тут заебательски инкапсулировано, разбито на милые сердцу функции по 3-15 строк, покрыто юнит-тестами и адово тормозит. А знаешь, чем код занят 20% времени? Обнулением, блядь, памяти для новых промежуточных объектов в куче. memset-ом.
Ну так напиши свой аллокатор памяти, если у тебя выделение в куче тормозит. Я тебе ещё раз напоминаю: самый большой прирост дают алгоритмы и структуры данных (ты же сам написал, что ты переделал хуёвые контейнеры и получил +20%), затем идёт работа с железом и только потом тонкости использования языка.
>люди говорят про оптимизации
>между тем сидишь с кодом, в котором на каждый чих делается boost::shared_ptr даже если, сука, можно было выделить просто на стеке переменную и есть конструкции вида map<string, map<string, string>>
Но ничего, понемногу прорывается свет наружу.
Видимо тебе дали задачу впихнуть невпихуемое. Требуют х4, но ты на пердячей тяге максимум можешь наковырять х1.6.
~1600 Но там треть наверно скобки и коменты.
О, здесь надо запостить кулстори, как я срезал 40% времени загрузки нашего компонента.
Оказалось, что каждый LOG(...) это открытие файла, запись в него, ФЛАШ НА ДИСК, и закрытие.
Когда я переделал все на буферизированный логгер (есть нюансы, что переписывание на нормальный логгер заняло бы дохуя времени, но это уже скоро случится) - вот логирование стало занимать микросекунды. вместо ~10 секунд лул.
>но это уже скоро случится
Даже интересно стало, какие сейчас народ логгеры делает. Самописный? Spdlog? Boost.Log?
Ну так и я про то же: раз уж взялся за c++, сначала определи, чем он тебе поможет, и потом ебашь. Подход "пиши как опердень на джаве, потом профилируй" не работает - под конец разработки уже поздно перекраивать хранение данных, т.к. они к тому времени могут быть раздроблены по 500+ классам, как у меня. Такая вот противоположность преждевременной оптимизации, когда оптимизировать уже поздно. Истина, как всегда, где-то посередине, просто раз плюсы заточены под производительность, то и думать о ней надо раньше. А то получается в руках профессиональный инструмент за большие деньги, а руки из жопы.
Сейчас анальный самодельный копрокал, будет spdlog
>под конец разработки уже поздно перекраивать хранение данных, т.к. они к тому времени могут быть раздроблены по 500+ классам
ИНКАПСУЛЯЦИЯ
У меня похожая хуйня: 20МБ json-ов парсятся десять секунд. Почему? Потому что "чтоб быстрее" json-ы парсятся на лету по мере чтения с диска, а для парсинга делается lookahead в один символ (напр. чтобы отличить пробел, строку, объект или массив)... этот самый символ берется тоже с диска вызовом read(). На каждый байт - 2-10 read-ов. Убрать это говно нельзя, т.к. писал тимлид и я не могу сказать ему, что он мудак.
Ну так а если на следующей строчки после лога у тебя программа вылетает нахуй и в итоге не пишет этот лог потому что флаша небыло.
будет коредумп, который уже разберем
>Обнулением, блядь, памяти для новых промежуточных объектов в куче. memset-ом.
не криптуха случайно? если криптуха, то хуй ты иначе сертификацию пройдешь
Хуйня, там нужно зачищение только ключевой информации, а не всего на земле
Какой-то ноунейм ревьюит код другого ноунейма и придирается к наличию дефолтного енум-значения, без которого не обойтись в некоторых случаях. 2008 год.
Причём придлирки настолько мелкие, что если там и будет прирост производительности, его надо будет атомными часами обнаруживать. Вот это ужас - вместо захардкоженого предела (который мб и не изменится), поставить задефайненое значение - как дальше жить. Про алгоритмы, предложения по смене структур данных на более эфективные ни одной писульки нет, хоть этот мамкин ревьюер судя по всему в предметной области разбирается
>кокрас
Вскрикнул от смеха на весь Бангладеш
>в конце девяностых шёл в первый класс
Давно это было, да?
>20МБ json-ов парсятся десять секунд. Почему? Потому что "чтоб быстрее" json-ы парсятся на лету по мере чтения с диска, а для парсинга делается lookahead в один символ (напр. чтобы отличить пробел, строку, объект или массив)... этот самый символ берется тоже с диска вызовом read(). На каждый байт - 2-10 read-ов. Убрать это говно нельзя, т.к. писал тимлид и я не могу сказать ему, что он мудак.
Может просто готовую библиотеку взять? Типа модно стильно молодежно.
На худой конец отобрази файлы в память, чтобы никакого диска.
Блин, не отобрази, а создай виртуальный раздел в памяти для этих жсонов, или что-то подобное.
>>кокрас
>Вскрикнул от смеха на весь Бангладеш
Учи мемы, чтобы не быть батхёртом.
>>в конце девяностых шёл в первый класс
>Давно это было, да?
Пикрил.
А ничего, что нарисовать такое и я могу? Вообще-то.
Это мем из будущего.
> Причём придлирки настолько мелкие, что если там и будет прирост производительности, его надо будет атомными часами обнаруживать.
Вот практически про тебя и сокрушаюсь. Если ты не понимаешь, как писать быстрый код и почему каждый бранч в горячем цикле - как серпом по яйцам, если для тебя непонятно, почему условие над float-ами должно оставаться float-ом, то зачем ты вообще пишешь на c++? Объективно, код на джаве пишется быстрее, работает везде и менее подвержен ошибкам. Денег там тоже наверняка больше.
Я готов с тобой поспорить, что Performance это баззворд, и готовить его умеют в 3.5 конторах, типа хуяндекса. В обычных проектах (не хуйлоад) - даже профилировать не умеют нормально.
Во первых я ничего про это сравение и не написал, хотя это из того же огорода. Вместо того чтобы подумать как улучшить вещи, гораздо сильнее влияющие скорость, чел предлагает копаться в отличиях сравнений. Если такие охуенные так идите всё ассемблируйте, хули к высокоуровню вообще притрагиваетесь?
Во вторых судя по твоей истерике от сравнения на несколько бит больше это тебе серпом по башке в детстве слегка ебанули, вот ты и стал полоумным
В третьих иди нахуй кончено же
>Если такие охуенные так идите всё ассемблируйте, хули к высокоуровню вообще притрагиваетесь?
Бывает, приходится, но, к счастью, редко.
Короче, ты порвался. Дурачок, плюсы - это и есть современный ассемблер. И непонятно, что ты делаешь в треде плюсов, если не умеешь в низкоуровневые оптимизации, которые практически единственное плюсов применение. Какие, нахуй, вещи у тебя на скорость влияют, дебил? Это 3д графика, в каком-нибудь офлайн рендере через такой код могут проходить десятки миллиардов точек на кадр, а просранное по вине кривого кода время может стоить твою месячную зарплату ежедневно. Даже просто в реалтайм графике просер таргета по числу треугольников на кадр чреват задержкой релиза на месяц и больше, пока художники будут переделывать ассеты.
>десятки миллиардов точек на кадр
Заменяются LOD с десятками миллионов точек (это такие структуры данных, мань)
Если ты про научный рендер под всякие CAE, то он масштабируемый на несколько железок (снова алгоритмы и структуры данных под балансировку).
>задержкой релиза на месяц и больше, пока художники будут переделывать ассеты
'это не твоя проблема, что техлид проебался с оценкой железа или язык в жопу засунул, когда ему ТЗ на проект выдали
Тот анон, конечно, преувеличивает, но ты вообще маня, ничего не слышавшая про компьютерную графику.
Алгоритм для подбора рекомендуемого контента по вебке. Замечал, что фап треды вовремя появляются?
Распознавание лиц
Ты рофлишь блять? Геймдев в рашке это хуита с инфантильными дегенератами и самой низкой по рынку зп. В то время как в твоих компьютер вижнах можно получать лютые деньги, работать в крутых международных компаниях и заниматься каким-нибудь ресерчем, а не код писать по 8 часов в день.
Я тебе уебу щас.
Ты меня убедил.
А разве нет международных компаний в GameDev? Вроде как по зп столько же предлагают что в других отраслях.
> получать лютые деньги, работать в крутых международных компаниях и заниматься каким-нибудь ресерчем, а не код писать по 8 часов в день.
Это больше про науку и исследования а не разработку ПО
Есть места, где платят в валюте, но и конкурс соответствующий.
Вообще есть смысл поработать в gd, но не засиживаться там (чисто на опыт, который может очень пригодиться в cv).
А так, cv более перспективное направление (и по деньгам и по условиям труда).
>А разве нет международных компаний в GameDev?
В рашке - нет, конечно. Есть только оутсорс всратый.
И даже нормальных российских компаний, где кто-то пишет свои движки/тулзы/что-то интересное - несколько штук всего. С лютой конкуренцией и хуевыми условиями.
> Вроде как по зп столько же предлагают что в других отраслях.
Нет. Ты экономику не наебешь. Когда к тебе идут додики-геймеры без личной жизни, готовые за дошик работать целыми днями и которые поувлеченнее тебя - нахуя платить больше?
>Это больше про науку и исследования а не разработку ПО
Ну а в геймдеве что ты делать будешь, не зная предметную область? Тесты писать или гуи делать? Это вообще вдвойне дно.
сходи лучше сначала в армию, там станешь хакером, быт программистский разведешь, разные либы будешь в роту водить, говнокод с пацанами обсуждать, а то пойдешь сейчас и в итоге твой план не тратить время на вуз заменится тратой времени на догонялки с военкомом, к тому же к выпускнику 11 класса предвзятое отношение будет
блядь, хуею с таких как ты. Ты будто грузчиком на работу хочешь устроиться и ебашить скривя рожу ради денег? Кодинг же должен хоть немного удовольствия приносить ну хоть в начале и интересовать тебя. А если интересует так разве сложно придумать себе задание? Какие-то технологии которые интересуют копнуть хоть что-то. Или тебе ничего не интересно, тогда зачем тебе программирование изучать? Да сядь хоть парсер для начала напиши тех же ini-конфигов.
> В рашке - нет, конечно. Есть только оутсорс всратый.
А что насчёт Wargaming?
> Ну а в геймдеве что ты делать будешь, не зная предметную область?
Геймплей писать
Да, но у них постоянно деньги заканчиваются потому что из Дыбовского плохой продюсер и они просирают половину времени занимаясь не зная чем прежде чем полностью изменить концепцию и начать сначала
Что варгейминг? Ну есть варгейминг, да. Если ты не ненавидишь танки и всякие самолеты всей душой, как любой нормальный человек - вперед работать за лоу прайс.
Аллаха ради, лучше учи пайтон и вкатывайся во что угодно, а не трать годы на бесперспективную хуиту из-за самоподдува даунов с харкача про тру программирование, разработчиков в свитерах и всё такое прочее.
Ты тут общаешься с бомжами-ноулайферами от мира айти, уже практически контуженных плюсами и ни на что большее не способных.
Разработчик С++ среди остального айти - это как шизойд в обществе нормисов. Он думает, что он самый умный и самый охуенный, делает там что-то важное и пиздатое, но на деле он просто пердолится какой-то никому не нужной хуйней и все считают его долбаебом, кем он и является.
аноны, а есть ли такой город в мире вообще где есть 500 реальных вакансий на джуна с++? где это Эльдорадо Для Вкатывальщиков..
нахуя такое давать в вузах? это же вуз, блядь
там фундаментальные знания должны давать
а не базовый синтаксис очередного скриптового языка
Были C/C++/C# и TASM. Теперь вот ЭТО в расписании. Лишь бы только не обязательная эта хуйня, ну пожалуйста!!!
>Разработчик С++ среди остального айти - это как шизойд в обществе нормисов.
в моем мухосранске рыночек этих долбоебов (и меня в частности) уже порешал - работы вообще нет
кто успел, тот вовремя соскочил на другой хуец (явку), или сбежал в столицы, а остальные сдохли или подыхают, естественный отбор, епт
в вузе вообще не должны ЯП давать
должны давать теоретическую базу, чтобы ты шарил за семантику, чтобы тупо очередной говноязык глянул и понял че там за семантическая модель и через неделю начал на нем ебашить
в продавцы есть, тк это самые отстойные работы
а вакух дворников и правдо мало, потому что это чиловая работенка! проскакивают вакухи мыть подьезды, но, как понимаешь, это уже не то
А как же какашки, блевотина всякая, трупы собак/кошаков? Дворник это не только собачье говно листьями осенью заметать.
это не то
вам должны были давать теорию о языках программирования, какие семантические модели существуют, какие модели исполнения и прочее
базу для того чтобы в будущем ты сел и за неделю понял как писать на новом яп
нихуя, дворник тупо метет тротуар или чистит его от снега
если ты от него потребуешь собачье говно с газона убрать, он пошлет тебя на х.й
Сами разберутся, не маленькие.
Смотря какой. Понятно, что кабанчики всякие и везучие разработчики в деньгах полураспильных и наебанных купаются.
Современный ИТ рынок это писать "сделай заебись" и получать на выходе какое-то уродливое нечто, умоляющее поскорее убить его, и жрущее ресурсы ЭВМ как не в себя, хотя оно толком ничего особого и не делает? Это, блять, рынок?! Говнотон не предназначен для продакшена, это язык для проверки теорий.
ага ага, иди таблетки выпей
питон вполне спокойно применяется и все ок
а ты давай дальше дрочи на свои кресты
Хуй покажу. С супом.
а мне интересна была история про чувака который в геймдев собирался перекатиться
а на крестах не пишу
нужно знать engrish и придти на собес в пиджаке
увеличишь свои шансы на 300%
но кресты, желательно поближе к железу тоже надо знать
Ну, я всегда рассказываю про собесы в треде, если кто-то что-то спрашивает про компанию, куда я апплаился. И в целом контрибьючу дохуя вам тут, например.
А что значит поближе к железу? Дрочиться с ассемблером и годболтом?
Кэш-френдли код вроде пишу, хуйню не делаю, что еще нужно?
>ясняет за пухон.
хуево поясняешь
а надо отталкиваться от того, для чего создавался язык, смотреть его дизайн
а создавался он для детишек, для обучения программированию
и сразу становятся понятны решения, принятые при выборе семантики и синтаксиса этого языка
любого прогера, знакомого с теорией яп (либо его выдрочили в норм вузике, либо он это получил самообразованием) тошнит от питона
Не сгущай краски как скриптовый язык для прототипов он годен. Не одними детишками обойдется. И нишу занял тоже обширную. Кто и кресты обсирает дай бог но меня это не остановило в плане их изучения.
мань, не нужно возвышать язык, только потому что он байтоебский
питон это и бэк, и мл, и скрипты для сборки
и много много чего
а еще он НЕ создавался для обучения. Он создавался для амоебы (Гугли). Простота позаимствована от АВС. И вот именно авс создавался для обучения, а не питон
>любого прогера, знакомого с теорией яп (либо его выдрочили в норм вузике, либо он это получил самообразованием) тошнит от питона
лол бля, а в твоей шарашке-парашке не знают, что питон написан, вообще говоря, далеко не последним человеком в компьютерных науках?
а ну да, работникам ООО РогаИКопыта всегда виднее (ну либо ты просто даун) как должен выглядеть просто многофункциональный скриптовый язык
>теорией яп
Компиляторы? Формальные языки? Теория типов? Модели вычислений? Операционные и денотационные семантики? Я не понял тебя.
>
>Компиляторы? Формальные языки? Теория типов? Модели вычислений? Операционные и денотационные семантики? Я не понял тебя.
da
В итоге будут тебя этой теорией про семантику дрочить и без практики интерес просто угаснет. Куда лучше вместо этого преподать несколько языков разной семантики с практическими задачками на них.
Самому для себя можно какую-нибудь совершенно бесполезную хуйню придумать, где потом будешь заниматься рисованием каким-нибудь и дизайном геймплея с решением задач по физике, потом забьёшь и джуном так и не станешь.
>>31561
Вообще, новые проекты на плюсах кто-нибудь сейчас начинает? Ну, кроме редких движков для игр и высокочастотного трейдинга. Десктопные приложения и графические интерфейсы к железкам переводят на веб - со всякими электронами проще, гибче, быстрее и красивее, кросс-платформенность обеспечивает веб-движок. Я писал несколько лет разное, в том числе не очень низкий эмбеддед, что-то на плюсах, что-то на сишке, но пришёл к выводу, что плюсы для этих проектов вообще не были нужны (да и сишке в них тоже мало места), так что считай пилил легаси проекты, которых по хорошему быть не должно. Вот думаю, или плюсы дальше дрочить и вкатываться в какую-то область, или вкатиться во что-то другое - в эмбеддед, системное программирование, мобильную разработку, благо в последней можно работать из дома (хоть и рынок более скучный в основном).
у меня мечта переехать в США и работать в топ продуктовых компашках типа спейс икс и прочих (на самом деле пиздец мечтаю в спейс икс или тесле)
но в ближайшие года 3 я вряд ли съебу (по личным причинам)
поэтому вопрос: какие компании, помимо яндекса будут иметь весь за бугром + набраться хороших знаний? я в дс если что
о себе: 24 года, есть опыт байтоебли (2 года на чистом си) есть полтора года опыта в гейдеве. Образование топ вуза по релевантной специальности 6 лет
Ну такое. Если в сосничестве хотел велосипед, то потом оказывается что уже не хочешь.
Если тебе надо портфолио, то вкатывайся не в российские компании, а в представительства зарубежных. Интел, хуавей, нокия, нвидиа и прочие.
Для того, кого ты описал - ты спрашиваешь полную хуиту.
это и есть VLA. Почитай почему VLA не рекомедуется использовать и не стандартизируют.
И, и еще есть _alloca, который может при инлайнинге нахуй взорваться
Ну и причем тут твои регистры и язык с++?
Язык с++ отвечает за свои конструкции, ему надо следить за всякими областями видимости, вызовом всяких конструкторов деструкторов вовремя и так далее.
Потому что operator[] в данном случае — обертка над сдвигом указателя и разыменованием
вот это надо будет запомнить
arr - это синтаксический сахар для *(arr + i), так ещё зо времён древней сишки. Кстати, это позволяет писать странные конструкции i[arr].
допустим есть abcd, и это можно разбить на 2^(len(abcd)-1) возможных вариантов:
a,b,c,d
a,b,c d
a,b c,d
a,b c d
a b,c,d
a b,c d
a b c,d
a b c d
для наглядности записал в столбик без кавычек, ну и видно что разделителей можно поставить так и на тех местах, как единицы появляются в бинарном счёте. но это не обязательно, было бы даже пизже, если б была сортировка по колличеству фрагментов. сёма, помоги как такое примерно на плюсах сделать для строк/контейнеров произвольной длинны.
никак не сможешь. едь в америку тогда.
лошок
написано же - знать инглишь
а ты сразу, о, поближе к железу, а что бы там поизучать понизкоуровней! лошара, буду писать код в промежутках между онанизмом
когда нормальные пацаны зубрят инглишь, накидывают пиджачок на плечи, закидываются веселящими таблетками на собес и устраиваются на 500+к и это в нищей россии где обосраный работяга за заводике 17 рублей получает
поссал на тебя на всякий случай
>А что теперь делать то?
вакансии дворников, грузанов в пятерочку в твоем мухосранске есть еще? или все занято уже? если последнее, то хз
тихо жить на мамкину пенсию, как она помрет, пропьешь хату, а сам вешайся
на собес точно идти, полезный опыт получишь. Устраиваться в контору после оффера или нет - это совсем уже другой вопрос.
Ты ещё ЖЖ темы найди.
Видимо это то что надо знать на 200.
Может. Бывают вакансии, где берут и мидлов (100) и сениоров (200). На собеседовании понимают кто ты есть.
Ты чо умничаешь, пёс. С Сёмой я может и загнул, но ショ куда ближе к сё, чем к шо. Скорее всего, общепринятый вариант транскрипции со мной согласен, но это ещё проверить надо.
Мне Лохсофт регулярно раз в 3-4 месяца пишет, хотя я им не подовал.
Это обычная рассылка на всех кто по результатам поиска подошёл.
Требования всегда пишут с избытком. Реально достаточно ~20-30% от написанного.
Предлагаемая зп - вычитаешь ндфл, берёшь по нижней границе + 10-15%.
Я тоже так раньше думал. Но спорить об этом бессмысленно, я полагаю.
Так я знаю ингриш и достал уже батин пиджак.
конкретнее можешь набросать? можно даже псевдокодом. я уже с этими играми индексами головой теку.
По идее можно задачу свести к генерации сочетаний.
a 1 b 2 c 3 d 4 e 5 f
На множестве пробелов m = {1, 2, 3, 4, 5} получить все сочетания из n = 1, n = 2, n = 3, n = 4, n = 5 элементов. Короче, генерация C из m по n.
Говнокод примерно такой:
using cm_t = std::set<int>;
void get_Сmn(cm_t& m, const int n, std::vector<cm_t>& result)
{
if (m.size() > n)
for (int i = 0; i < m.size(); ++i)
{
auto m1 = m; m1.erase(m);
get_Сmn(m1, n, result);
}
else if (m.size() == n)
result.add(m);
}
В цикле получишь все комбинации пробелов для нарезки строки:
for (int n = 1; n < string.size(); ++n)
get_Cmn(m, n, result);
Пишу на питоне, го, жс.
Какой сейчас самый актуальный учебник по плюсам?
Напиши СУБД типа sqlite.
Все что можно в консольке написать - от утилит типо туду листа, до физических симуляций и графических движков
Или интерн
> нихуя свежего
Ты про glTranslatef и glVertex3f с примерами на WinAPI? Да. это устарело, но для laba1.cpp пойдёт.
Гугли на английском, там современное будет.
Сам ОПЕНГЛ - да, подустарел немного.
Но ты без проблем на нем можешь написать йобу уровня Last of Control Eternal. Да и сами принципы и идеи компьютерной графики нихуя не изменились в последнее время, кроме рейтресинга.
Говорят что https://learnopengl.com/ нормально для современного OpenGL. Metal и Vulkan нужны только для уберзадротства с гпу.
Хотелось бы что-то полезное учить просто, может и сам какую-то йобу захочу сделать, хоть вуз пригодится мб
так то ты прав. И именно на такой хуйне писали КВЭЙК ДЖВА
Чел, от писания кода на устаревшем опенгл есть охуенная польза - ты практикуешься в написании кода.
Спасибо
Посмотри в сторону графических движков - Ogre, Irrlicht, Qt 3D. На голом опенжл охуеешь писать.
Аноны, пишу большое 3х мерное приложение на с++ с opengl. Собственно, уже был до этого опыт написания больших прил. и у меня было всё в одном исходнике, я очень путался в нём.
Не подскажите как лучше всего разделять большую программу и где об этом почитать, чтобы не путаться в ней. Я не работаю программистом, а пишу это для своей основной работы, прошу помогите мне.
Рейтрейсинг же тоже старая тема, помню рейтрейсинговые рендереры (рендеровщики?) для блендера ещё в середине нулевых были. Или сейчас он сильно продвинулся вперёд?
В первую очередь разговор про апи типа DXR или VulkanRT про которое никто ничего не знает
>>34280
>>34220
Рейтресинг не просто не новый, он самой первой компьютерной графикой и был. Уже потом придумали делать растрезацию (рейтрейсинг наоборот) и придумали для этого видеокарту, которая именно растрезацию и параллелит. А так были и для рейтрейсинга аппаратные юниты какие-то дико оверпрайсные, которые не взлетели.
Касательно АПИ, рейтрейсинг тоже делался до rtx понятное дело на gpu, просто с rtx ядра дополнительно для этого завезли.
>Не подскажите как лучше всего разделять большую программу и где об этом почитать,
Ну, clean architecture например.
Что интереснее.
Однохуйственно. Закончишь всё-равно на работе с легаси говном.
спасибо
Пилить свои проекты. Опенсорс в гигатонны раз сложнее.
короче вопрос к вам всем (если увидете это сообщение в Си треде - не обессудьте, похожий вопрос просто)
короче я вот школотрон 23 лет, в этом году заканчиваю шарагу
в ООО РогаИКопыта я занимался топовыми задачами, связанными с железом (ну всм не один тянул проект, а в команде в роли ждуна) типа датчиков в металургии, контроллеров приводов и прч штуках
занимался этим два года
но есть трабл - в этой конторе даже у руководителей зп 45-50, у меня ее вообще нет - чалюсь там только из-за кайфа работы с реальным железом и я вот хочу сменить профессию
но смотрю на хабр карьеру/ххру - пиздец
из ОЙТИ одни жанги\спинг\датасосист
а из с++ одни оптимизаторы вычислений
че, все вообще плохо? я зря учился роботов программировать 6 лет бля?
>че, все вообще плохо? я зря учился роботов программировать 6 лет бля?
Да, эмбед это самое дно по зп. На том же хабре можно посмотреть статистику.
Как в Qt реализовать карту, например, компьютеров. Основые функции - добавление, удаление и редактирование свойств сих объектов на карте. Если же это ад и геморрой писать такое на Qt, то что может подойти?
где-то при определении функции сравнения я обсираюсь с темплейтом. помогай.
https://pastebin.com/4b1MXZ9t
то есть для произвольных битсетов работать не будет?
У тебя битсеты разной разной длины, а аргумент шаблона только один, следовательно компаратор только битсеты одинаковой длины принимает. Допиши вторую длину просто вторым аргументом шаблона.
Так епта как ее найти, везде опыт просят, и то что я знаю на данный очевидно не хватает на джуна.
ни в чем? Первокура никто не возьмет никуда. А с третьего уже все подрабатывают.
Большая часть RnD приходится на окологосконторы, в которых ты работать не станешь. Коммерческие конторы предлагают либо легаси либо аутсорс какой-то части проекта их контрагента.
>>35043
>>35018
Блять, чел, может для тебя будет сейчас это откровением, но никому нахуй не всрались твои верчения деревьями. На цпп нету работы без предметной области. Оллимпиадное программирование - это чисто академическая хуита практически без приложений, особенно в россии.
Если ты придешь на работу и скажешь я последние несколько лет вместо того, чтобы учить предметную область или хотя бы цпп, переписывал задачки с одного сайта на другой и умею писать говно в метод мейн и нажимать кнопку Compile, тебя просто пошлют нахуй.
Любой программер нормальный знает базовые алгоритмы/структуры данных, при этом никогда не занимавшись никаким олимпиадным программированием. Всё это существует исключительно из-за блажи всяких Яндексов и Гуглов, которые пиарятся среди студентов и чтобы хоть как-то разделять дебилов и не дебилов рабов и не рабов, используют такое вот беспонтовое задротство.
причем на самом-то деле обидно
я вот хотел бы работать в яндексе в отделе беспилотных автомобилей, тк у меня и диплом на эту тему и в стартапе похожем два года оттарабанил
в целом то, даже готовлюсь туда пойти
но так ебет конечно, сперва нужно литкод ебучий задрочить, потом алгоритмы тоже именно ЗАДРОЧИТЬ
вообще збс, что на собесе тебе нужно деревья разворачивать, а на работе, внезапно, матрицы расклыдвать
>На цпп нету работы без предметной области
Двачую, приходишь такой на собес на джуна в итоге тебя закидывают вопросами из предметной области и не берут. Типо они серьезно блять думают, что кто-то вот сидел дома занимался такой нишевой хуйней как обработка изображения на плюсах естественно, а не на пистоне с нейронками не для работы, а чисто для себя?
Всем похуй на предметную область. Весь FAANG + Яндекс спрашивают только литкод, если ты идешь на джуна\мидла. Предметную область реально спрашивают (и то не всегда) - на сениора.
Соус - собесился в гугл и яндекс(дошел до оффера), еще несколько знакомых собесились в гугл, все одинаково.
Подтверждаю
Так я тебе это и написал. Большие корпорации пиарятся и нанимают людей по олимпиадным задачам, чтобы программировать хуиту. В нормальных компаниях, которые нанимают тебя выполнять конкретные задачи, такого не происходит, очевидно.
И сам же пишешь, что на сеньёр позиции спрашивают предметную область.
>всем похуй на предметную область
>всем не похуй на предметную область, когда нанимают на сениор позицию, где нужно дела делать, а не хуи пинать
ты только что гранату
Ты долбаеб? Ты думаешь в универ зачем люди идут? Чтобы на цпп учиться кодить? В универ идут как-раз, чтобы научкой заниматься и предметную область задротить.
Начитаются /b/ про универ нинужин и потом свои жопы взрывают, когда их на работу не берут лол.
челик, яндекс не берет людей со стороны
да, они пригласят тебя на собес, hr тебя поразвлекает охуенными историями как у них охуенно на фирме, а на тех собесе ты попереворачиваешь строку и пообходишь дерево, но оффера ты не получишь
вот и все
>На цпп нету работы без предметной области.
на цпп (в россии) (сегодня) нет работы вообще, большинство вакансий - фейковые, как, к примеру, все вакансии касперского
>пруфы?
ты правда думаешь что яндекс опубликует статистику сколько людей берут они с улицы, а сколько приходят к ним по знакомству или их забирают с прикормленных кафедр?
они никогда этого не сделают, ибо их репутации "открытой" компании придет пиздец
с улицы разрабов они вообще не берут
есть шанс устроиться тестировщиком или на другую околоайтишную специализацию, но не разрабом
Так в универе тоже нет таких дисциплин как обработка изображений сырых изображений с камер, разработка хайлоад веб-серверов, не рассказывают про разработку игр (тоже большая часть вакансий на плюсах) и т.д.
в первом дохуя всяких проектов, в том числе и купленных, в том числе и всяких умирающий помоек типа аськи или старых ммо и тебя еще могут взять разрабом разгребать это говнецо
Хз. Ниразу не ходил к ним на собес, но эти черти вечно в телеграм написывают с вакансиями, либо когда ты на хх резюме выкладываешь, либо даже просто так.
Я подозреваю, что вышка ебаная слила мой номер этим пидорам дополнительно к номеру с хедхантера, потому что я помню сразу после окончания универа это началось.
Еще эти эйчарки тупые такие пиздец, похуй какой стэк у тебя, похуй что ты там вообще ищешь, просто зовут на дженерик вакансию C++ разраб с машинлернингом и всё.
Как по мне, они берут студентов с мгу/вшэ/мфти. Выпускников, которые занимаются научкой, может тоже берут, но я не знаю таких, да и они сами в эту хуиту не идут.
Обычных разрабов вообще, наверное, не берут, так как у них додики из первой категории просто остаются работать.
Сеньёров-помидоров скорее всего берут, иначе сосали бы хуй на серьезных задачах, но они, я думаю, опять же к ним не идут.
ну я понимаю твою логику, особенно при наличии ШАДА
но у меня есть знакомые, которые пришли с улицы
а аргумент "ну ты правда думаешь?" - ни о чем
так вата доказывает, навальный иноагент "ну ты правда думаешь что он учился в ели и его не завербовали?"
так что, браток, твои слова не особо что-то значат
> Как по мне, они берут студентов с мгу/вшэ/мфти.
c типом их отбора только такие и попадут, имхо
конечно можно долго рассуждать на тему того, нормальный ли у них отбор, но как по мне - хуйня какая-то
причем тоже странно то, что у яндекса особо топовых продуктов то и нет
поиск у них говнище (кроме картинок), а на любой другой продукт есть топовый аналог
еда - диливери
такси - убер (еще и подешевле)
остальными даже не пользовался (и ок)
ну да, есть у них беспилотники - тема хорошая
алиса тоже нормис
но имхо, сбер через лет 10 должен догнать шарагу эту
Апплаишься на вакансию, тебе отвечают, дальше 3 этапа.
1. Часовой собес по скайпу с онлайн-блокнотом, дают пару алгоритмических задач, пишешь их, чел с другой стороны смотрит.
2. Если первый этап прошел - зовут в офис (хз как сейчас).
4-5 часовых секций с этими же ебанутыми задачками.
Одну завалить можно, две - сразу заканчивают собеседование. Критерии завала - хз, я всё прошел, хотя были моменты когда адово тупил.
3. Это уже интервью с нанимающим менеджером, где он на тебя смотрит. Иногда их может быть несколько, т.к. пайплайн собеседований один. И манагеры могут даже за тебя соревноваться.
4. Оффер.
Я не он, но что бы ты назвал обязательными вещами по структурам данных / алгоритмам?
Я, понятное дело, знаком со всеми простыми структурами данных, которые в реализации стл используются, например. Читал давно Кормена, слушал курсы всякие, встречал и в универе, и на практике всякие задачи с деревьями и прочим. Но когда встречаю задачки уровня литкода, которые нужно решить сходу не сильно думая - обсираюсь обычно.
Это, что досталось мне.
Есть вектор пар чисел, являющихся координатами точек на плоскости. Определить, есть ли некая ось симметрии параллельная оси Y, относительно которой наши точки образуют симметричную картинку.
Есть строка вида "a b c d ". In-place заменить все повторяющиеся пробелы, на 1 пробел.
Написать, внутренности shared_ptr, написать для него конструктор копирования и деструктор, сделать это так, чтобы все работало в многопоточной среде.
Есть API, которое выдирает из некоего стрима слово. Написать функцию, принимающую N (Считать N раз из стрима), и выводящую Top100 слов в порядке возрастания их частоты в стриме.
Написать функцию, выводящую все числа, в которых присутствуют все цифры по одной. Например, число "1234567890" удовлетворяет условию.
Есть строка вида "a b c". In-place заменить все пробелы на '%20', дополнительная нужная память для замены считается уже выделенной внутри строки.
Написать аналог функции to_lower.
Есть массив целых чисел и некое число K. Определить, есть ли в массиве чисел такая непрерывная последовательность, сумма всех элементов которой дает нам K и вернуть индексы начала и конца.
Есть вектор из пар координат X, Y, где каждая точка - то квадратик 1х1 размером. Если точки находятся рядом по вертикали или горизонтали - то формируют одну фигуру (Квадратики 1х1 соединяются в нечто большее). Найти периметр наибольшей фигуры из тех, что построены на плоскости по этому вектору.
Похуй на то, что ты читал кормена и слушал курсы. Надо уметь решать ебучий литкод, это отдельный навык. И этот навык и получается только дрочевом литкода. Когда я пошел в яндекс - у меня было под 170 задач решено.
a hard там реально ебещий? Есть ли смысль решать изи задачки или сразу в медиум нужно идти?
кек
обидно за рашку конечно
одно ОЙТИ
где наш спейс икс, тесла
я бы с огрмный удовольсвтием применил свои знания проганья для реально железа
Ну как сказать, вот допустим хард https://leetcode.com/problems/merge-k-sorted-lists/ который решается тупо в лоб закидыванием всех чисел в вектор, вызовом std::sort и обратной раскидкой вектора в лист.
Брат, ты бы таблетки начал пить, а то истории у тебя одна шизовее другой
>>35774 Ты пидор, перекатывай
Если мне не понравятся картинки, будешь переделывать пока не будет идеально, и самотык свой еще месяц не увидишь (я пока сам с ним поиграюсь)
Ты охуел? Перекат после 1000, иначе нелегитимно.
Чего за фантастика
>Есть API, которое выдирает из некоего стрима слово. Написать функцию, принимающую N (Считать N раз из стрима), и выводящую Top100 слов в порядке возрастания их частоты в стриме.
Хранить в хеш-таблице/дереве поиска гистограмму, потом перевести в вектор и сделать на нём условный quickselect на 100 элементов? Первое, что в голову пришло.
Для этого Visual Studio нужна. Redistributable вообще из другой оперы.
Это просто библиотеки для запуска программ скомпилированных в студии.
Мне релокацию в КАломну предлагали из ДС2 кек. Грят дадим тебе билет на поезд до Коломны и компенсируем стоимость аренды у бабы сраки. Будешь авиастроение наше поднимать.
>>35972
А нахуя? Если попердолиться хочется на отечественной хуйне, то и в дс найдется. Мне постоянно на хх приходят инвайты во всякие Концерн Залупки или ТОП-СИСТЕМЫ.
Есть смысл такого ебанутого дауншифтинга, мне кажется, только если что-то супер узкое научное делать и в какую-нибудь лабу уебывать, с каким-нибудь там ускорителем элементарных частиц попердолиться или типа того.
"g++" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.
> "g++" не является внутренней или внешней командой, исполняемой программой или пакетным файлом.
На винде нету г++...
мингв ставь
Джун в крестиках - это как сеньор в других языках.
понимаю тебя
ничего не имею против классического такого айти с вебом и прочим - куда бы мы без них
но вот когда пишешь код для железяк, которые взимодействуют с реальным миром - то ваще пиздец как круто
правда там Си в основом. но все равно
я думаю вкатиться куда-нибудь в эмбеддед, пусть там и зп не очень большие, но, думаю, косарей 100 можно найти ( а там мб и рост будет)
а потом съебать в норм страну, где такая хуита востребована (США)
Индекс это же идентификатор последовательного представления.
А выход хэша произвольный. Как одно преобразовывается в другое?
За счёт какой идеи значение хэша служит индексом?
Он не совсем произвольный, а зависит от текущего размера массива и обычно является числом, в отличие от значений всяких криптографических хеш-функций наподобие sha/md5. Вычисляется так, чтобы значение было в пределах от 0 до размера массива, в простейшем случае это можно сделать через остаток от деления на размер массива.
За счёт хэш функции.
>Сами на тебя вышли?
Да, видимо с хх телефон взяли. Я сам с мелкого города и хорошо знаю, что такая работа из себя представляет.
>это можно сделать через остаток от деления на размер массива
то есть к результату первой хэш-функции применить вторую хэш-функцию
Это может одна хеш-функции. Не обязательно даже, что там явно вычисляется % в конце, там может быть магия битовых операций. Или вся функция - это %, если вычисляется для какого-нибудь unsigned int, например.
QOAuthHttpServerReplyHandler::callback() имеет строгую привязка на урл. Полагаю, остается только переопределить его, если мне нужно другое значение, а не http://127.0.0.1:%1/%2
>Он не совсем произвольный
Ну я специализации когда добавляю для своих типов, чтоб использовать их в качестве ключа, то получается достаточно произвольно.
>Вычисляется так, чтобы значение было в пределах от 0 до размера массива, в простейшем случае это можно сделать через остаток от деления на размер массива.
А что потом делать, когда размер массива изменился? Все хшы пересчитывать?
>А что потом делать, когда размер массива изменился? Все хшы пересчитывать?
Да, таблицу придётся перестроить.
Вообще есть вот такой пример с хэшами. Допустим есть много отрезков на плоскости и тебе нужно быстро определить кто с кем пересекается. Для этого берётся сетка m x n и для каждого отрезка определяется на какие ячейки он попадает. Получается хэш-мапа с ключом - индексом ячейки (опять же двойное хэширование - первый хэш отрезка {x,y}, второй x+y) и бакетами - списками индексов отрезков.
Если ты поменяешь сетку, то тебе заново придётся перестроить всю таблицу.
Всё понял, спасибо
все сильно проще - Multimap
Заграница не для всех. Привыкать жить в хуй знает каком обществе по хуй знает каким правилам, то нельзя, это нельзя. Лучше работать в дочерней конторе какого-нибудь предприятия раз уж на то пошло, такого и в России хватает. Видел вакансию писателей прошивок под панели для каких-то западных тракторов. Прошивки продвинутые, с GPS, автоматизацией, кучей кнопок.
В 5.15 уже есть setModifyParametersFunction, где ты можешь изменить значение, например
auto niggers = new QOAuth2AuthorizationCodeFlow(this);
...
niggers->setModifyParametersFunction([](QAbstractOAuth::Stage stage, QVariantMap parameters) {
(parameters)["redirect_uri"] = QUrl("fuck_you_niggers");
});
Пиши что-то своё смело, попутно читай разные штуки и рефактори свое детище. Я так писал тетрис, используя сишные массивы и минимум классов, а потом узнал про стл и переводил на него код
надо в видне сделать системную переменную (туоп путь к g++) и будет рабоать.
Короче скачал codeblocks он с g++.
Ещё встречал такое что некоторые конторы используют cmake для сборки, но там вроде всё просто,правда я собирал проект максимум из трёх файлов.
Это копия, сохраненная 2 мая 2021 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.