Это копия, сохраненная 5 апреля 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
• https://github.com/sosachbot/cppthreadhat/wiki
Ответы на вопросы:
• https://en.cppreference.com/w/
• https://www.cplusplus.com/reference/
Прошлый тред:
• >>1552778 (OP)
И сразу бампану митапчиком в Align Technology в ДС
Входные данные
Из этих строк нужно найти самую большую длину
Почему при сравнении -2147483647< a1.length() (4 на первой итерации) результат false, если -2147483647 < 4?
Есть пара знакомых оттуда, говорят что вполне неплохо. Я бы сам даже на митапчик сьездил на офис посмотреть, только дико лень пердолить в эти чертановские перди.
Сениор 300+ имеет изи. Мидлов не хайрили вообще.
Лол, не знал, что size_t не может в сравнение с int без явного преобразования, спасибо
Что посоветуете?
Искал книги, большинство - дроч алгоритмов или основы
Сделай простую игру, платформер или лабиринт. Потрогаешь сразу много областей, что-то про ui и графику, что-то про многопоточность, про общую архитектуру более-менее громоздкой программы. Если ещё и сетку прикрутишь с компенсацией пинга и чтобы без десинхронов было - это уже вообще круто. Можно простейший интеллект для мобов или компьютерных противников поделать, там все эти алгоритмы на графах на деле могут пригодиться.
Хорошо, а как начать?
Может, есть какой-нибудь материал, который расскажет, в какой последовательности все делать и хотя бы примерная реализация?
Платформер или лабиринт в окно кстати - плохие жанры. Лучше top-down шутер, наверное.
Ну, смотря что тебе интереснее. Можно вывести квадрат через opengl и прикрутить чтобы по нажатию клавиш он двигался - тут просто рандомный hello world для opengl нужно загуглить, прикрутить туда таймер отсчитывающий время и на него завязать игровую логику, добавить квадрат который будет двигаться вокруг тебя, потом добавить чтобы по нажатию клавиши ты стрелял, и при попадании снаряда по вражескому квадрату у него уменьшалось хп. По крайне мере я так делал и более чем доволен.
При этом каким образом ты организуешь все игровые объекты и игровую логику только от тебя зависит - можно прибить гвоздями кучу костылей, можно сделать громадную полиморфную ооп мусорку где все объекты наследуются друг от друга. А если подразумеваются разные уровни и карты, где можно из одного состояние в другое перескакивать то тут ещё больше вариантов как это переключается, пространство для творчества безграничное.
Сам посмотри только, может быть совет говно полное и тебе не зайдёт, и вообще тебя другие области интересуют, какая-нибудь обработка и анализ тестовой и другой информации.
Уныло, нет никакой сложной иерархии объектов и упирается просто в проверку пересечения линий. Лабиринт это вовсе лишь форма уровня. В top-down шутере можно сделать отряды мобов, состоящие из отдельных юнитов, которые пытаются тебя окружить что уже в бесконечность раз интереснее любого платформера. И top-down шутер можно переделать в стратегию со строительством и сложными иерархиями объектов или в гонки с видом сверху не сильно модифицируя логику пространства. А из платформера ничего особо большего чем платформер не сделаешь.
>А из платформера ничего особо большего чем платформер не сделаешь.
Нелинейный платформер с процедурной генерацией уровней и динамической сложностью врагов, например, мне кажется очень хорошим вариантом, особенно для начала.
Ему не нужны паттерны. И паттерны не требуют отдельного изучения - часть из них интуитивно очевидная и он напишет их сам собой, другая часть - костыли, которые нужно чтобы притянуть ооп или ещё что-то туда, где оно не нужно и лишь усложняет код. Вдвойне бесполезная штука, если он пишет код один, а не с кем-то, где нужно понимать друг-друга и говорить на общем языке.
Прочитать книжку про паттерны и взять-опробовать нужные можно за несколько часов.
Ему и не нужно написать игру - ему нужно её пописать, чтобы попробовать что-то новое и научиться чему-то.
>>77109
Я просто хейтер платформеров.
Оператор new не обязан на каждый твой чих вызывать VirtualAlloc. Он может делать вообще все, что считает нужным, пока это конфермит стандарту. Соответственно - UB
понял принял, спасибо
Они всем нужны. Кури матчасть.
Удваиваю насчет паттернов. Написать какую-нибудь фабрику можно и без знания, что такое фабрика. Ты её в любом случае напишешь, когда тебе надо будет создавать нужный тип монстра в зависимости от того, какая строка написана в конфиге уровня. Ты просто не будешь знать, что она так называется.
Мне эта хуйня нужна для генерации метаданных, все это будет завернуто в макрос
Не помогает
>Сап, кто может пояснить почему эта хуйня отказывается компилится?
[temp.res]/8, 100 раз обсасывали на SO
The program is ill-formed, no diagnostic required, if: no valid specialization can be generated for a template or a substatement of a constexpr if statement within a template and the template is not instantiated
Конкретно то, что я написал, это вообще-то про фабрику.
Я двач, это погромист, меня не обманеш
Упоминание эффекта Даннинга-Крюгера выявляет находящихся под ним ещё надёжнее.
А всё потому, что впоследствии оказалось, что сами учёные подошли к исследованиям спустя рукава и впоследствии их исследование было пересмотрено и подвергнуто критике.
https://scholarcommons.usf.edu/numeracy/vol9/iss1/art4/
И это я пихаю каждому, кто в окружающих видит тупых дилетантов, но сам-то, конечно, никакой не тупой и не дилетант. Настолько не тупой, что даже не удосуживается почитать про баззворд, который использует.
std::vector<double> > content;
и перегрузка оператора []
std::vector<double> & operator (const unsigned long &i) const {
return &(content);
}
В чём ошибка?
Такое мне пишет IDE, но я её непонел
Non-const lvalue reference to type 'std::vector<double>' cannot bind to a temporary of type 'const __gnu_cxx::__alloc_traits<std::allocator<std::vector<double, std::allocator<double> > >, std::vector<double, std::allocator<double> > >::value_type ' (aka 'const std::vector<double, std::allocator<double> > ')
std::vector< std::vector<double> >
Насколько я понял ему нужен второй аргумент - кол-во вводимых символов. Но что если я хочу большой текст вставить? Типа 5000 символов. Много ли памяти это будет занимать?
Ну, точнее не 5000, там не всё так просто. Но не мегабайт уж точно.
cin.getline() для char*
Ты либо метод делай не const, либо возвращай const &, либо вектор свой делай mutable
Не очень. Фактически, с помощью visitor'а ты расширяешь функциональность уже существующей иерархии классов, у которой один из методов принимает аргумент типа visitor. Эта иерархия может быть в какой-нибудь библиотеке, которую ты не можешь изменять, постоянно создавая новые visitor'ы и делая их там френдами
Делай лучше double dispatch, на cppcon осенью был доклад
Этот прокрутка по чату на последнее сообщение.
Бля, не в тот тред написал. Надо было в С#
Бл, спасибо.
Социальный дарвинизм рулит!
таки кто то выстрелил себе в ногу ирл
>заблокировано за размещение материалов, оправдывающих совершение суицида
Кто-то туда закинул стандарт плюсов?
блядь, не то спастил, но суть та же
помогите, пожалуйста, с задачкой по плюсам. буду очень благодарен. Завтра сдавать надо, не понимаю как сделать + не успеваю
Задан массив структур «Покупатель» (фамилия покупателя;
имя; номер карты; наименование товара; стоимость покупки).
Вывести на экран сведения о покупателях и суммарной
стоимости покупок в порядке возрастания суммы.
буду очень признателен, аноны
Насколько сильно нужно углубляться в кресты, чтобы смочь в UE4? с детства мечтал делать игори, но сделал только танчики на pygame :(
Я не полный нюфаг, сейчас работают бэкэнд макакой на пистоне. В вебе чувствую себя комфортно, но дико боюсь крестов, потому что есть явные пробелы в CS.
Нужны ли какие входные данные, или тупым не дано? Может SICP какой прочитать еще раз попробовать? Или уже неактуально? Может какие то конкретные области математики подтянуть? Есть тут увлекающиеся этим дерьмом?
В /gd/ не отправляйте плз, там шиз на шизе.
Открою тебе тайну - тебе С++ нахуй не нужен. Почти все можно нашлепать на блюпринтах. Современные игры как бы вообще к программированию мало отношения имеют, если делать на готовом движке.
Сам пилил по работе небольшую демку на UE4, обошелся только блюпринтами, все мои сениорские крестоскиллы не пригодились вообще.
Угу, спрашивай сколько угодно такие вопросы, тред же именно для них и предназначен. Удачи тебе разобраться в этом :3
https://ideone.com/g2t3Nd
>Вывести на экран сведения о покупателях и суммарной
стоимости покупок в порядке возрастания суммы.
Может быть в порядке возрастания стоимостей покупки? Не очень понятное условие. Ну, там два варианта, надеюсь тебе нужен второй.
И еще вот это
Влом проверять, но скорее всего boost::asio::io_context не копируемый. А std::thread копирует аргументы.
enum class Type {type1, type2};
template<Type TP>
struct Foo{
using A = TP == type1 ? int : double;
using B = TP == type1 ? Some1 : Some2;
}
Мне кажется, что задачка типовая, но мое решение какое-то сложное и не красивое, предполагает (я еще не сделал) std::conditional.
Как сделать правильно и красиво?
ты все правильно делаешь, и std::conditional это верно
Записываю в bb соответствие имени-карточки и стоимости покупок - добавляю новое имя или (если такое имя-карточка уже есть) то добавляю к суммарной стоимости покупок стоимость этой.
Он может проверять исходник и добавлять заголовки классов и прочего, если нужно, или удаляет их, если они лишние.
Добавлять автоматом умеет решарпер под студией, про убирать не уверен, наверное только выделяет что не используется.
publuc:
friend Matrix loadFromFile (std::fstream &file);
};
Matrix loadFromFile (std::fstream &file){
//...
}
int main{
std::fstream inpBin("inpBin", std::ios::binary);
std::fstream inpTxt("inpTxt");
Matrix bin = loadFromFile(inpBin);
Matrix txt = loadFromFile(inpTxt);
//...
}
error: ‘loadFromFile’ was not declared in this scope
Matrix bin = loadFromFile(inpBin);
Я вообще не подрубаю, в чём проблема, причём он тригеррится только на первом вызове loadFromFile. g++
Hyperwebster
Людей посмотревших сойдут с ума.
Закоментил эту строку - теперь он ругается на следующую.
Почему именно size_t и почему именно по значению? Ссылку я использую, чтобы не выделять память под unsigned long при вызове функции, unsigned long чтобы наверняка не выйти за пределы инта, не вижу проблем в этих решениях.
Ты дурак, только честно? 1 курс прогуливал? Ссылка бесплатная у тебя? Она тоже память кушает, если что. Зато строку по значению передал, молодец. Садись, два.
>чтобы не выделять память под unsigned long при вызове функции
А какой размер у указателя, которым будет представляться ссылка? Какова потеря скорости из-за обращения к памяти (пусть даже к L1) вместо регистра? Ты смотрел как микроопы на порты скедьюлятся?
https://ru.wikipedia.org/wiki/Соглашение_о_вызове#cdecl
Ссылка - довольно дорогая операция разыменовывания (а ещё она занимает по меньшей мере 8 байт, когда unsigned long всего 4). Передача по значению - у тебя просто через регистр без каких-либо выделений и даже обращений к памяти пробрасывается значение.
Все гораздо проще, если объект превышает размер регистра, то он должен передаваться по ссылке.
Алсо, в С++ 17 завезли string_view.
И нормально, что я пишу const у всех аргументов, которые не будут меняться в теле функции?
Хз, мне например глаза режет, когда метод не помещается на экран 120 символов из-за const для примитивных типов.
Много времени на расстановку констов, много времени на поддержку, чтобы теперь везде так было, даже на небе и даже у аллаха.
тредом ошибся, они тут рядом
Matrix sample1 (3, 3);
//...
std::cout << sample1;
Работает, а
std::cout << sample1.transpose();
выдаёт ошибку error: no match for ‘operator<<’ (operand types are ‘std::ostream’ {aka ‘std::basic_ostream<char>’} and ‘Matrix’)
Если сделать так
Matrix transposed = sample1.transpose();
std::cout << transposed;
то всё ок
Matrix Matrix::transpose ();
gcc ёбнулся или я?
Могу быть не прав год не кодил на плюсах, но у тебя оператор ссылку на матрицу принимает, а ты пытаешься ему саму матрицу скормить, может по этому ругается.
У меня появилось предположение, что это потому что объект, возвразённый transpose(), не пожет быть преобразован в ссылку, потому что никуда не сохранён или что-то типа того.
Походу, придётся реал сделать второй аргумент без ссылки
Если объект существует и доступен для кода - то у него есть ссылка. Попробуй так &(sample1.transpose()).
Думаю проблема в количестве параметров, а не конст.
Это стандарт ассемблера и он полностью применим к плюсам.
1. Использовать openmp, но он не из стандарта нихуя
2. Использовать c++17, но это будет единственная фича 17, сейчас все на 11 и потенциальна миграция библиотеки на хуевый компилятор на Эльбрус.
Как быть, анон? Совершенно не хочется городить чехарду из #ifndef и условной компиляцией
А в реалиях крестов начинается параша - структуры приходится выравнивать через #pragma pack(push, 1), чтобы в памяти были выровнены по байту, причем что-то стандартное типа alignas(1) работать не будет, так как он только на повышение порядка. Почему так нахуй? Как удобно парсить сериализованное говно? Переписывать оператор << заебисто просто пиздец
struct P {
uint8_t a;
int32_t b;
};
#pragma pack(push, 1)
struct PA {
uint8_t a;
int32_t b;
};
#pragma pack(pop)
void main(){
sizeof(A); //8 бай
sizeof(PA); // 5 байт
// Всё ради протокола, первый байт имеет значение 3, второй инт - 5
// блин ендиан, забьем на Литл
char buf[5] = {3, 0, 0, 0, 5};
A a = reinterpret_cast<A>(buf); // хуй
PA pa = reinterpret_cast<PA>(buf); // нормас
}
>Прекрасно и быстро, все довольны.
Не понял, первая структура в си вроде бы тоже имеет размер в 8 байт.
Расскажи поподробнее, как это выглядит в си? Я попробовал различным образом "прикастовать через void*", но не нашёл никакого способа, которым си может прикастовать 5 байт структуре размером в 8 байт.
Зачем ты на крестах пытаешься повторить си? Очередной борец с ООП?
Мы в таких случаях делаем стандартные структуры (не struct, а в плане организации данных) объектов-значений, которые сами рассчитывают свое положение в массиве, знают кто они, флоат там или битовое поле, пишут/возвращают значения.
Их можно создавать динамически, грузить из конфигурационных файлов, автоматом делать из них модели и интерфейсы.
А твои структуры - не пришей к пизде рукав, автоматизировать работу с ними можно только внешними парсерами, я такое делаю только если надо с сишечкой контактировать.
Честно говоря, я не помню, нужно ли писать директиву #pragma pack в Си. В си есть плюс каста только в том, что не нужно писать приведение типов типа reinterp_cast или static_cast<void>
https://ideone.com/o7prBL сишный пример
И вообще, https://habr.com/ru/post/142662/
>Как удобно парсить сериализованное говно?
Вылокой и каждый байт чисти чисти чисти вот так, если не хочешь внезапно соснуть эндиану когда привезут сервачок от IBM.
>структуры приходится выравнивать через #pragma pack(push, 1), чтобы в памяти были выровнены по байту
Стоп, но в сях же то же самое
>нужно ли писать директиву #pragma pack в Си
Ну, она работает - с ней размер 5 байт, без неё размер 8 байт. Никаким других очевидных способов без директив сделать структуру на 5 байт с переменной с 4-байтовым выравниванием я не нашёл.
>reinterp_cast
Можно и в с++ же не писать оставив сишное преобразование.
Я думаю можно самому написать плагин к clang-tidy, если не найдётся.
> Есть ли вариант хранить все зависисимости в одной директории и грузить их вручную
Так даже на винде делают.
контейнеризируй енвайромент, будь мужиком.
какие нахуй директории?
госполдь дал вам fedora silverblue, но нет, хотим ебаться
Немножко костыльно, но можно.
https://github.com/Microsoft/vcpkg/issues/1681#issuecomment-324160402
А вообще, нехуй использовать древние версии либ.
как, но они заебистые
А то, что uic на выходе даёт .h со всем UI тебя не смущает?
У меня получилось что realloc в искусственных тестах равен или быстрее копирования через стандартные new-delete, но ничего лучше, чем вручную использовать realloc и вручную вызывать placement new и подходящие операторы для перемещения я не придумал.
>или он просто не нужен?
С другой стороны программы, где производительность слишком сильно упиралось в копирование через new-delete я пока тоже не встречал.
Почему просто в таком случае не использовать std::vector?
Вопрос, собственно, откуда взялся. Я затестил realloc из glibc против mremap в хаотическом перерезервировании 10000 указателей на 4 процессах и размерах данных от 4K до 64K, то есть такие размеры, когда realloc не пользуется пулами или самим mmap. Почему-то mmap оказался в 10 раз быстрее.
>>83093
То есть, понятно, что копи-он-райт и все такое, все ссылается на одну единственную страницу, но mremap просто перестраивает таблицы страниц силами ядра без копирования всех данных руками. Надо будет тест с реально выделенной памятью сделать.
>Почему просто в таком случае не использовать std::vector?
Вроде, std::vector не использует realloc в каком-либо виде. Если использует, то да, это все решает.
>glibc
Не знаю таких подробностей внутреннего устройства realloc и всяких страниц памяти - я просто тесты со своей стороны стены проводил для дефолтных mingw-шных реаллоков, ничего не могу посоветовать.
>Если использует
Не использует совершенно точно. Когда ты его вызываешь очередной push_back - он перевыделяет память не для n+1 элемента, а для 1.6n (число 1.6 настраивается, если необходимо), старые n удаляет. Ты это и так понимаешь скорее всего лучше моего, но это считай ещё один дополнительный уровень менеджера памяти, чтобы лишний раз память не теребить; realloc всё ещё лучше, потому что он в отличие от вектора может знать что можно без временного буфера и перемещений расширить 1.6n до 10*n просто поставив метку в менеджере памяти - если менеджер позволяет изменять размеры уже выделенных кусков и за куском есть свободное место.
Как это мать его возможно. Спойлер должен был быть до конца сообщения. А вместо звёздочек я поставил <i>*</i>, то есть по идее звёздочки должны быть курсивом, а остальной текст нормальным, если тег <i> экранирует звёздочку.
realloc'а не существует. Ты можешь попробовать написать свой аллокатор через placement new там, но в среднем это нахер не сдалось.
http://quick-bench.com/G7B2w0xPUWgOVvuzI7unES6cU4w
потому-что у тебя одно создание строки и одно удаление в варианте const char*
А в варианте строк - 2 создания и 2 удаления.
Схуяле одно, если там цикл. Пишут, оно меряет только код внутри цикла, а там в обоих случаях одно создание.
Можно для чистоты и в первую фукцию запилить:
http://quick-bench.com/05VIGmMjuYgK52bNcYaWfvTDO0g
Такая большая разница из-за short string optimization. Если ты посмотришь на ассемблер то с короткой строкой в первом варианте нет вызовов new (тогда как во втором есть). Если использовать более длинную строку то new появляется и в первом вариате. Правда он все равно остается более быстрым (хоть и не настолько). Скорее всего там еще есть какие-то оптимизации связаные с тем что const char* читается со статической памяти а string& с динамической.
На хх только яндекс и хуавей отсвечиваются, но там заранее все забито задротами из вшэ и мфти.
Есть какие-нибудь варианты менее известных контор, в которых можно постажироваться?
struct test {
int a, b, c, d, e;
}
есть массив этих структур. Нужно получить допустим, суммы всех a, сумму всех b, сумму всех c. Как не пилить велосипеды для каждой из таких значений, а написать одну функцию для всего (при этом не меняя структуры и ее полей, желательно, на деле она другая).
Пишешь функцию в которой считаешь сумму всего. С чем у тебя проблема?
Тебе нужно считать суммы всех b не считая суммы других a/c, или тебе нужно считать суммы для всего?
Если считать нужно часто - возможно есть смысл сделать внешний счётчик вокруг массива (или внутри синглтона), который будет содержать суммы, а при добавлении/удалении структур изменять суммы?
А можно ссылку на какой-нибудь example?
В общем есть функция простого градиента, рисующая градиент в круге радиусом R. Цвет N присваивается точке в зависимости от удаленности от центра. Соответственно получается такая формула: N = C - C x d/R, где С - цвет центра, d - расстояние точки до центра.
Теперь я хочу ввести в расчет градиента еще одну переменную, назовем ее интенсивностью цвета I, например.
Должно быть как: при I = 1 весь круг должен закрашиваться равномерно, без градиента, то есть коэффициент d/R = 0 при I = 1.
А при I = 0 круг вообще не должен краситься.
И вот здесь я встрял. Не могу никак модифицировать первоначальную формулу, чтобы условия интенсивности выполнялись. Вроде бы просто, а никак додуматься не могу.
По идее d/R должно умножаться на (1 - I), тогда при I = 1 d/R будет равно 0. Но при I = 0 круг все равно будет краситься. Как правильно?
Причем если юзать только интенсивность I или только d/R по отдельности, то все работает супер четко.
То есть N = C x I будет красить полностью при I = 1, и не будет красить при I = 0.
А N = C - C x d/R красит в градиент.
А вот как вместе это соединить, я хз.
Как будто что то плохое.
Внутри только простые одинаковые типы?
Если да - то передавай в функцию "индекс аргумента", смещай указатель на структуру и доставай оттуда нужное поле.
То есть для
struct test
{
int x;
int y;
};
test t;
(int)(&t); // поле x
(int)(&t + sizeof(int); // поле y
Мог чутка напутать, но смысл таков.
Если поля разных типов, то придется немного ифов нагородить, но смысл будет тот же.
Надо сейчас попробовать со сложными типами вроде string.
>>84407
У вас бугурт UB.
Заюзай указатели на поле. Хоть для чего-то они пригодились.
http://cpp.sh/6wxyd
я несколько проебался, можно и без шаблонов:
int sum_member(vector<test> const& v, int test::* p)
поискал... и не нашел, хотя уже видел полноценный софт с JS скриптами (нет, не с помощью node.js)
Может кто-то видели бинд JS для C++?
Надо полноценный, строго соблюдающий стандарт, а не типа JS (как ChaiScript)
есть возможность встроить v8
но это будет то еще развлечение, скорей всего
тот же луа или питон легче встроить
не говоря уж о забытых технологиях наших более продвинутых предков из майкрософт, а именно active scripting на com
Есть в кюте, причем в qml он вообще язык скриптов по умолчанию
Я имел в виду что то типа
function<int(s)> getter[] = {
[](s str){ return str.a; },
[](s str){ return str.b; },
[](s str){ return str.c; },
[](s str){ return str.d; },
[](s str){ return str.e; }
};
auto sum = [&getter](gsl::span<s> sss, int index){
return accumulate( begin(sss), end(sss), 0,
[&getter, index](int sum , s str){ return sum + getter[index](str); });
};
Якой иде пользуетесь под линуксом? Эклипс уродливый + ломающийся, CLion проприетарная
rg?
N = iC - (|i - 1| * i)C x d/R
>C++20.png
Лол. Чего они добиваются, чтоб в C++ было вообще ВСЁ, что есть в других языках и даже больше? Нахуй это нужно? Может кто-то знает?
Потому что могут. Ну и всего там точно не будет по концептуальным причинам.
string_view используй
Игра 2д на direct2d, перемещение на winapi, реализация на пикче.
Весь код выложен на гитхабе, могу скинуть, если нужно, там говнокод, я ещё учусь.
Студент-кун
>перемещаться сейчас можно только если быстро нажимать на кнопку
По WM_KEYDOWN ставишь speed+=5, по WM_KEYUP ставишь speed-=5, при этом каждый кадр у тебя x+=speed*dt?
Можешь скидывать, я могу попробовать помочь чем смогу.
>По WM_KEYDOWN ставишь speed+=5, по WM_KEYUP ставишь speed-=5, при этом каждый кадр у тебя x+=speed*dt?
У прыжка подобная механика, у перемещения просто + константа.
Решил проблему вот таким способом, до этого эти нажатия обрабатывались в WndProc. Почему-то из-за этого и анимации передвижения стали плавнее, я думал WndProc вызывается каждую итерацию.
Подскажите как подружить VS 2019 с русским языком?
#include <locale.h>
и после main()
{
setlocale(LC_ALL,"RUS");
пробовал, как и замена кодировки самого файла.
QtCreator
Я не шибко разбираюсь, но думаю, что все из-за того, что влево-вправо ты ходишь на константу.
Если сделаешь вектор ускорения, а при нажатии на клавишу движения изменять его координаты, то тогда в прыжке сможешь двигаться.
Только пока не представляю, как закодить. Пока нажата клавиша движения - направляем вектор в эту сторону постепенно, чтобы движение было с ускорением(вспомни, например, того же Соника), как-то так, наверное.
>>85306
Не надо, пожалуйста, учи сразу английский и учись писать вывод и имена переменных/функций на нем же.
бтв проблема не только в проге, а ещё и в кодировке консоли.
Попробуй system("chcp 1251"). Или system("chcp 65001"), если все же не прокатит.
Вот допустим нужны программе некие конфиги (не те, которые через argc/argv задаются) которые считываются из файла.
Если пользователь программы удалил файл или изменил его (и прочитать файл стало невозможно), то по идее, нужно загрузить дефолтные конфиги.
Стоит ли в коде дублировать их или оставить только конфиг файл?
Нахуй пусть идёт такой пользователь, который удаляет или портит конфиг. Ошибку выдавай и закрывай приложение.
В шарпах, например, за неправильно написанный app.config тебя либо компилятор пошлёт, либо в рантайме исключение словишь.
Поставляй софт без конфига, сохраняй при изменении. Один хрен у тебя в конструкторе где-то задаются параметры по умолчанию (задаются ведь? или ты любитель уб?)
> Один хрен у тебя в конструкторе где-то задаются параметры по умолчанию (задаются ведь? или ты любитель уб?)
Есть параметры которые в конфиге можно опустить и тогда будут подставлены дефолтные значения.
Есть параметры без которых конфиг прочитать и распарсить будет невозможно.
> Поставляй софт без конфига, сохраняй при изменении
Он нужен только для чтения при старте программы.
Короче, сейчас посмотрел, подумал, что похер. Даже при отсутствии конфига или его порче, всё будет работать.
Будут использоваться стандартные зашитые значения (как, например, отсутствие текстур на пикрелейтеде).
Я бы попробовал сопоставить к каждрй цифре страну, а потом попарное перебирать соседние вершинв нужной страны и применять and к множествам стран подходящих к этим точкам
Из точек получаешь ребра (ребро - две точки). Если страны соседние - у них есть общее ребро. Создаешь список (массив или лучше словарь) всех ребер (проходишь один раз по всем странам). В списке для каждого ребра помечаешь у какой страны оно нашлось (для каждого ребра будет одно или два значения). Потом еще раз проходишь по всем странам, переберешь ребра и выписываешь номера стран-соседей.
Ага, и K&R тоже протухшее говно, ведь ANSI не нужон, есть C99... Аноний, ты реально шизик, или троллишь? Я хочу сраться только с настоящими шизиками. Книги для вката не должны вдаваться во все актуальные фичи, а должны ускорить дальнейшее освоение обнов в десятки раз. Только такая многоходовОЧКА позволит угнаться за поездом изменчивого мира IT. И книги такого плана в 21-м веке пишут крайне хуево. Это факт. Алсо, годнота по сабжу как правило выходит при жизни и ясном уме создателей, и спустя полвека неизбежно наступает драма поколений, когда ньюфаг никогда не станет рядом с дедами, изучавшими в золотое время. Покормил.
Есть Eigen::Map со всякими Eigen::Stride, но там, как я понял, можно задать фиксированный шаг.
Мне нужно, например, из матрицы M{6, 6} получить элементы по индексам, типа M( [0 1 4]; [1 2 3] ). В матлабах и питонах такое есть.
А также в функции Resize (Она нужна для увеличения размера стека)
Простой парсер без переменных понимаю как сделать, а с переменными нет
И можно ли получить результат в виде функции?
Важно: если у тебя например будет ошибка выделения памяти в конструкторе, то на Пуш программа упадет с сегфолтом, т.к. нет проверки что память выделилась.
А после такого ресайза твоя прога будет падать вообще в любом случае, аррай же удален.
Я не велосипедил, использовал жс движок в куте для такого.
все уже написано
Ничего не падает, проверил для 100000 значений. Вызов же:
char Array = resize(const char Array, size_t old_size, size_t new_size);
То есть в него сразу же записывается новый расширенный массив со всеми старыми значениями. Но тогда не понятно нужно ли в resize обнулять Array.
*Resize
Это действительно древнее говно, сейчас С++ выглядит вообще не так как 20 лет назад, эта книга может быть даже вредной
ну ок...
Не важно, осознаешь ли ты осознанное, а важно, осознаешь ли неосознанное.
уже не лучше.
Насосался хуев короче, создал set "ребро" из двух точек, написав хеш-функцию для точки, пытаюсь insert его в set всех ребер, компилятор выдает всякие простыни, что он не умеет сравнивать такое. Проще уже свой set написать, который не выебывается.
Да, я не заметил где ты её используешь. Тогда непонятно зачем ты не присваеваешь прямо в ресайзе.
>написав хеш-функцию для точки,
Зачем? Кидаешь в std::pair, операции сравнения автоматом генерятся.
А все
да, так и сделал, чем ебаться с перегрузками.
K&R это книга по Си, а не С++. Первый в отличии от второго не изменился за эти годы.
Ващет изменился, хотя кресты однозначно стали одновременно более простыми местами, местами бля пиздец нахуй как это вообще работает. За это мы их и любим=)
Если я вызываю не в цикле, а просто подставив значение, то все нормально, проблема в этих циклах, но я не понимаю, в чем может быть проблема
>просто подставив значение, то все нормально
А то ли значение ты подставляешь? Подставь вот это -2.03e-15 (или что у тебя там получается) и проверь падает ли с ним.
Если к -10 прибавлять по 0.2, то ты получаешь не ровно 0 из-за особенностей плавающей запятой. Стандартная же ошибка, у меня даже собаки во дворе про неё знают.
а седьмое положение логико-философского трактата витгенштейна:
О чём невозможно говорить, о том следует молчать.
Можно ли как-нибудь отключить мантиссу, чтобы в функцию попадали числа без нее?
Пофиксить? В этом нет ошибки. 2e-15 - это ноль. Если у тебя такая функция, которая при 0 выдаёт один результат, а при 2e-15 другой, то проблема скорее в функции.
Если ты напишешь -10+0.2*i, где i целочисленное, то будет лучше, потому что ты складываешь большое число с большим. Наибольшая ошибка, когда ты складываешь числа разные по порядку, что-то вроде 10000+0.01.
Ещё лучше будет, если цикл будет целочисленный (i=-50 .. +50), а x=i/5.0 на каждой итерации, тогда вообще не будет проблем от сложения плавающих запятых.
У меня в функции что-то типо парсера, я не учел, что может число может быть передано в таком виде
Может, можно как-нибудь избежать передачу числа с мантиссотой?
Переделывать парсер желания нет
Вообщем, разобрался с проблемой, спасибо большое, анонче
плакала половина маршрутки.
Блядь XD
Можно, накидай по-быстрому расширение для gcc.
Код примерно такой:
vector<Object> MyVector;
for (...<20000)
MyVector.pushback(...)
далее из-за этой строчки segfault:
int MyArray[MyVector.size()];
>MyVector.size()
Ничего, что элементы считаются от нуля и последний элемент - MyVector.size()-1 ? Конечно сегфолт.
>Ничего, что элементы считаются от нуля и последний элемент - MyVector.size()-1 ? Конечно сегфолт.
почему тогда для 19 тысяч обьектов не сегфолтится?
Не вылазит за пределы сегмента стека, который выделен твоей программе. Для объектов разного другого размера крашилось бы при другом количестве.
спасибо, все исправил.
if (сложное условие A) && (сложное условие B)
if (сложное условие B) && (сложное условие C)
...
if (сложное условие X) && (сложное условие Z)
или так оставить?
Обернуть в функции с понятными именами, что ты собственно проверяешь.
Хотя непонятно что у тебя эти ифы делают, возможно можно гораздо элегантнее сделать.
Yanderedev, ты?
Хардкодить квесты стоит только если их очень мало. Я бы вынес логику во внешние скрипты на каком-нибудь луа, или делал их в виде машин состояний грузящихся из простенького дсл.
Если квесты линейные и хочется в коде, то енум со всеми именами квестов, и вектор объектов квестов, в них стадия квеста и вектор пар лямбд условия и действия по нему для каждой стадии. Внешний вектор это список квестов, берется по енуму.
>ебать байты
Думаю проблема как раз в том, что в наших вузах постоянно выпускается толпа людей, думающих что программирует на крестах, а в реальности ебущая байты на си с классами. Естественно при таком предложении работодатель давать много не будет. Решение - пропагандировать питон.
Какие области, где можно писать на крестах, сейчас прибыльные и без огромного порога вхождения типа машоба? Типа как бэк на джаве пописывать за 200к, только для крестов.
Ты так описываешь студентов, будто они все:
1. Идут в вуз с уверенностью, что их там всему научат
2. Уверены, что программирование = плюсы
3. Вообще не мониторят рынок
4. Выпускаются, уверенные, что их всему научили.
А на самом деле:
1. Большинство охуевает от сложности плюсов и забивает на программирование вообще
2. Те, кто не забил, открывают-таки хедхантер и учат жабы, жсы и пхпы.
3. Единицы осиливают плюсы и находят работу.
Согласен с тобой частично. Модерновый хороший С++ выучить реально только на собственной шкуре, и то, после пары-тройки лет работы.
>>87397
Прибыльность зависит от конторы, а не от области. Оверолл - финтех всегда платит. Нвидия платит, чем бы ты не занимался. Яндекс вроде как платит в последнее, а требует вообще только алгоритмы.
Но я бы не рекомендовал вкатываться в С++ на данный момент. Веб обезьянничать сильно проще, да и денег выше, рынок поживее.
Я уже вкатился, просто недоволен своей зарплатой в сравнении со знакомыми, которые пишут на питоне и жс.
Если ты вкатился - тогда смотри на вакансии нвидии, сбербанка (он платит, но специфика), Дойчебанка, ну и хз даже, что еще посоветовать. Жидбрейнс какой-нить хайрить крестовиков на шлион.
И вот задрачивай их требования
>1. Большинство охуевает от сложности плюсов и забивает на программирование вообще
на самом деле можно не учить все плюсы, видел код энтерпрайзного матмоделирования, так там будто на чистом си писалось
Я вообще читал несколько историй, где на конкретных проектах заранее договариваются, какие фичи плюсов вообще использовать не будут из-за сложности. Вот только в разных проектах такие соглашения разные, и волей-неволей приходится учить всё.
единственные ограничения на разных работах, которые я видел - это ограничение по стандарту, и запрет на буст. Все
Нвидияблядь
Как это поможет?
Приходишь ты такой и говоришь "я знаю алгоритм Кнута-Морриса-Пратта", и все такие "ебааать, пойдешь к нам на 300к?"
Знание этой хуйни поможет стать лучше в плане кодинга, лучшие кодеры получают больше. Вроде очевидная хуйня, не? Кроме ещё более очевидной, что зарплата растет при переходе в другую контору (или на более высокую должность) относительно текущей зарплаты. То есть надо просто устраиваться на более высокооплачиваемую работу и делать это каждый год. Потом можно а америку съебнуть и там повторить. Ну и понятно, что с чего то нужно начать, но я так понял ты уже в пути.
Ну а вообще нехуй меня слушать, я два часа назад решил в кресты вкатиться и пришел за этим сюда. Только откомпилил свой первый хелоу ворлд.
Чем буст не угодил? Алсо, че в нвидии происходит, какая работа? Мне пиздец интересна математика, и я хорошо шарю в железе, был бы смысл мне туда идти?
Ну ты же знаешь, что шаблоны это тьюринг-полный язык, а значит позволяют добиться сколь угодно долгой компиляции. А теперь вспомним, из чего состоит весь буст.
На крестах работу хер поменяешь. Язык один, но предметные области и задачи сильно отличаются между конторами. Это не джава, где можно бегать из одного места в другое каждые полгода, потому что везде нужен спринг и делать надо одно и то же.
Вроде как прекомпилед хедеры позволяют сильно ускорить компиляцию. Да и АSIO хорош, я хз как без него с сетью работать
Типа, если попал на работу то до смерти никуда не денешься? Чет сомнительно звучит.
Область фиг сменишь. Если телеком, например, то придется либо искать следующую работу в телекоме, либо переучиваться и искать младшие позиции. Мобильность ограничена, не получится побегать между работами, набивая себе цену.
> Чем буст не угодил?
Есть нюансы в связи с внутренними процессами и сборкой.
> был бы смысл мне туда идти?
Идти точно есть смысл - это лучшее место работы в ДС. А скиллы в железе\математике - зависит от команды. Мне, например, знание ИГРУЛЕК сильно помогает в работе, рофл.
> Алсо, че в нвидии происходит, какая работа?
Зависит от команды очень сильно.
Пробовал менять имя файла на тоже самое, всегда false выдаёт и это не позволяет детектить
Может, есть ещё какие-нибудь способы?
Tensorflow же. Обычно те либы, что есть на питоне, имеют реализацию или очень хорошую основу на крестах. Из-за скорости.
Проверить что он есть и попытаться открыть для записи?
>а в реальности ебущая байты на си с классами
Это, кстати, не такой плохой вариант. Хуже работать с проектом, в котором, например, три разных вида умных указателей (стд, самописный, навелосипженный до С++11, и из сторонней либы) или какая-нибудь ебанистическая шаблонная магия, весь код в хидерах, и на каждый чих требуется полная пересборка минут на пять.
Понял, спасибо. Я слышал про питон кстати.
Да хуевый это вариант, надо всегда развиваться программистам. Си с классами явно отдает хреновым общим опытом разработки
>Си с классами явно отдает хреновым общим опытом разработки
Иногда - наоборот. Люди с опытом пишут простой и понятный код без большого количества абстракций.
Тут нужен баланс. Си с классами - это не очень хорошо, но и ехал AbstractFactoryProxyBeanFactory - это тоже оверкилл.
Мне в последнее время нравится идея небольших классов без наследований, и дальше - ну, почти процедурный код.
Ну почему, чистый код на сишечке очень хорошо читается и аккуратно выглядит. Другое дело, что разбухает он действительно быстро.
В целом мне интересно, как лучше разделять gui и "ядро", чтобы при каких-то пиздецовых операциях гуи не лагало. И как организовывать гуи, чтобы с минимальными трудозатратами адаптировать его к разным устройствам (телефоны, пк)
> как организовывать гуи, чтобы с минимальными трудозатратами адаптировать его к разным устройствам (телефоны, пк)
А никак блядь.
> с минимальными трудозатратами адаптировать его к разным устройствам (телефоны, пк)
Веб. Единственный реалистичный вариант.
О.о я не предъявлял никаких претензий сишечке.
>И как организовывать гуи, чтобы с минимальными трудозатратами адаптировать его к разным устройствам (телефоны, пк)
Самому написать на OpenGL (ES). Это самый портируемый вариант.
Да никому веб не нравится. Но в отличие от мобильного Qt, реакта нативе, флаттера и прочих киви, веб хорошо изучен, проверен и все его плюсы и минусы давно известны. Он реально требует минимальных трудозатрат, реально кроссплатформенный и реально везде работает одинаково (не совсем, но уж точно одинаковее, чем тот же "кроссплатформенный" GTK). А всё остальное тупо не исследовано и может таить кучу подводных камней.
> Что-то не нравятся мне ваши предложения...
Нехуй экономить на разработчиках. Вот раньше пиздато было, на каждую платформу был свой клиент, не зависящий от других. А теперь пернул под Винду, завоняло под ведром
Функция полностью состоит из цикла, поэтому я просто пытаюсь воткнуть #pragma omp parallel for schedule(auto) в начало:
https://pastebin.com/gmyf1Y4E
В результате никакого ускорения не получаю, скорость выполнения с каждой новой нитью только падает.
Что делать?
Вряд ли взлетит, ты же даже гуглом пользоваться не умеешь.
dlib
Тупо учил, учил и учил. Каждый день открывал литературу, читал до полного понимания, выполнял упражнения и шёл дальше. Почему-то я тогда не заебался. А вот hh.ru мотивацию убил мгновенно.
Начинал с того, что было понимание, что надо что-то в жизни менять, потому-что я работал около-админом, и это было днище бесперспективное абсолютно.
Взял какую-то книгу (честно - уже не помню какую), стал читать. Нихуя не понимал, взял другую книгу, читал ту же тему другими словами. Писал простенькие примеры, смотрел в дебаггере вижуалстудии, что там вообще происходит. Потихоньку пердолил QT (так и не пригодилось бтв), смотрел выступления на конфах, дохуя всего читал, постоянно писал код - каждый вечер, и даже иногда на работе в свободное время.
Эпично проебывался на собеседованиях на джуна (мне тогда в районе 25 годиков уже было, хотел устроиться даже на 25к, лишь бы на С++ писать, хуй то там), запоминал вопросы, выдрачивал их.
Устроился на первую работу не сиплюсплюсером, но уже программистом - продолжал ежевечерне задрачивать кресты, разбираться, читать всё подряд.
Мотивация была очень простая - либо работать в мухосранске говном из жопы, когда тебя ненавидит начальство, либо все таки ебашить в надежде на светлое будущее и перекат в какую-нить классную компанию.
Сейчас работаю в Нвидии все в треде знают кем и за сколько
> понимание, что надо что-то в жизни менять.
>либо работать в мухосранске говном из жопы, когда тебя ненавидит начальство, либо все таки ебашить в надежде на светлое будущее и перекат в какую-нить классную компанию.
Вот я пока на этом этапе,лол)
Ты вполне можешь повторить мой путь, он реален, как видишь.
Правда, буду честен, второй раз я этот ебучий подвиг под названием "Ебучее задротство 24х7" уже не повторил бы.
схуяле у Y нет дефолтного Y(&&Y)? он же генерится автоматически и явно не удален
Заебал уже.
Потому что дефолт хуйня всё ещё user defined, а значит конпелятор не будет генерировать никаких лишних конструкторов
То есть правильный ответ - undefined behavior?
Да не может быть такого чтобы не было четкого ответа какой конструктор будет вызываться - явно дефолтный или просто дефолтный
Там же по ссылке есть ответ. Я думал тебя смутило то, что вызвался не мув конструктор Y
Declaring any special member function except a default constructor, even as =default or =delete, will suppress the implicit declaration of a move constructor and move assignment operator. Declaring a move constructor or move assignment operator, even as =default or =delete, will cause an implicitly generated copy constructor or implicitly generated copy assignment operator to be defined as deleted. So as soon as any of the special functions is declared, the others should all be declared to avoid unwanted effects like turning all potential moves into more expensive copies, or making a class move-only.
А ты можешь вот конкретно сказать, что ты делаешь на работе? Мне кажется, ньюфагам было бы полезно узнать это. Я вот даже отчасти ссу идти на собеседование хотя уже год дрочу плюсы, потому что не знаю что меня ждет. Как проверить свои знания вообще?
Галера, кстати, галере рознь. Работал в галере, где было вполне нормальное отношение к сотрудникам, хотя 90% - это были студенты, и платили им 17-20к в серую пиздец конечно, там серая часть тыщь пять была. Но никто никого не чмырил, офис был вполне комфортный, на кухне всегда были халявные печенюхи, фрукты и кофе. Даже короткий "больничный" оплачивали не требуя больничный лист.
Но текучка была пиздецовая, каждый год сменялось около половины, а может даже и больше, сотрудников.
Но качество кода в такой компании было на уровне 0. Поэтому нахуй в такой работать, если хочется опыта. Там его нет. Даже на 11 стандарт они перелазили в 17 году
Нахуй я это рассказал? Не знаю
Напиши класс где целая часть и дробная части хранятся отдельно в size_t
Почему присутствует ограничение по стандарту на работах? В чем сложность сразу взять и перейти на новый стандарт? По сути дописывать ничего не нужно, там убрал, тут урезал и все.
Тестирование. Обновление библиотек. Рефакторинг того пердолинга, которого за nn лет набралось порядком.
хуй знает, но если есть выстреливший продукт с набранной клиентской базы, то я бы кодовую базу вообще ни на новые компиляторы и стандарты не переводил, ни, боже упаси, не занимался бы написанием типа новой охуенной платформы с нуля которая заменит старую
сосредоточился бы на исправлении ошибок и добавлении функционала
но это такие маняфантазии о том если бы у тебя был собственный продукт
В джаве наоборот: ты либо вынужден постоянно переписывать легаси, либо платить за право использовать старые версии.
Что ты несешь, идиотина?
Да это школьник решил потроллить тупостью
Да хуй его знает, я так до конца и не понял. Есть какие-то запланированные сроки окончания поддержки версий жабы, после которых либо обновляешься до новой, либо платишь за старую. Но это только оракле ждк, в других сборках может быть бесплатно, но нет поддержки от оракла.
Qt Creator.
На всех моих работах было одно и то же.
Есть некий продукт, в котором есть баги и таски. Тебя обычно садят что-нибудь почитать, и потыркать, чтобы ваще понять, что за продукт, как его собирать, где лежат сорцы и тд.
Потом, обычно, дают простенькие баги, это те, которые с наименьшим приоритетом, чтобы ты стабильно научился проходить некие конторские процессы, типа Мердж реквест - Ревью - Прогон CI\CD - Коммит.
Ну а дальше потихоньку вктаываешься в рутину разработки и все.
Не надо переживать, что тебя с нуля посадят писать что-то сложное, или что на тебя все будут класть хуй там. Тебе в среднем все будут помогать и слушать.
Если сильно хочешь проверить свои знания - пиши на
Ты только того анона будешь фейкособесать?
Я сам хочу как-то уровень знаний плюсов узнать, но они у меня только самоприобретенные, работаю не плюсовиком.
Там ниасилили бы его, слишком дохера студентов, для которых шаблоны сродни магии, а основной костяк - уже застаревшие типы лет 45-50, которым это нафиг не надо и проще написать 100500 функций, которые будут принимать "бесконечное" количество аргументов, чем заморачиваться с variadic templates. Ну одним словом пиздец, прогресс там остановился в 90х
>>89466
Что-то где-то может неожиданно отвалиться, после этого надо с нуля тестировать всё приложение.
А во вторых, команда должна понимать, что происходит в проекте. У нас там половина не знала, что такое move semantic и с трудом читала код на шаблонах, который ничем особо сложным не выделялся ну студенты далеко не самого тового вуза, работающие за двадцадку, что с них требовать то? Что-то поправить могут, не сломав при этом ничего, и заебись
>>89485
Продукты обычно развиваются. Как развиваются и программисты, которые их пишут. Вечно на С99 никто писать не будет, молодые прогеры, которым нравятся плюсы, туда не пойдут, а старые рано или поздно уйдут например я ушёл как раз из-за отсутствия развития
>сосредоточился бы на исправлении ошибок и добавлении функционала
Так вот с новыми стандартами часть работы можно делать быстрее, чише и безопасней. Стагнация в нашей сфере = смерть
ИМХО
> ну студенты далеко не самого тового вуза, работающие за двадцадку, что с них требовать то? Что-то поправить могут, не сломав при этом ничего, и заебись
Те, кто писали приложение изначально по идее более опытные программисты, верно? Но у них все равно остаются ошибки?
Есть разница между челиком, который задрачивает и пытается вкатиться и праздным любопытством.
Да, там основной костяк состоял да и состоит из двух прогеров, которые там сидят с самого начала основания компании. Ребята норм, но без какого либо желания развиваться дальше. Си с классами их более чем устраивает.
А ошибки есть у всех. А ещё куча ошибок появляется после того, как приложение попадает в реальный мир. Там всегда возникает чувство, что тестеры нихерна не тестировали ну если это не под какое-то определённое устройство делалось, которое у всех одинаковое
Ясно. Просто интересно про процесс разработки узнать, просто странно когда исправлять ошибки назначают менее опытных сотрудников. Мне кажется в других сферах обычно наоборот происходит.
> Там всегда возникает чувство, что тестеры нихерна не тестировали
Ну а хули, повезло что тестировщики вообще есть, ибо если программисты - это студенты за 20к, то тестировщики скорее всего просто бомжи с улицы.
Нет, это студенты, которые тоже учились и учатся на программистов, но не осилили программирование
> исправлять ошибки назначают менее опытных сотрудников.
Дописывать проект будут мене опытные сотрудники когда синьер уже съебал в галеру пожирнее и чтоб не изговняться продакшеном
Принял. Логично, я тоже хочу в плюсы, но пока просто изучаю, а не ищу работу.
Только не принимай пруф из дашчана, там любой пост можно своим пометить.
У нас синьеры работают по двадцать лет над одной хуйней, как раз с момента конца студенчества.
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
DispatchMessage(&msg);
else
{
//Update
GameController::Update();
}
}
Аноны, есть подобный код, хочу добавить сюда отдельный поток для GameController::Update(), как мне это сделать?
Метод в лоб std::thread DrawThread{GameController::Update} будет же создавать тред каждую итерацию цикла? Я могу как-то создать поток, а потом указать какие функции будут должны в нём выполняться?
>как-то создать поток, а потом указать какие функции будут должны в нём выполняться?
Более-менее да.
Ты уверен что тебе нужно сначала создать поток, а потом указывать функции в нём выполняющиеся и на момент создания этого сделать нельзя?
>создавать тред каждую итерацию цикла?
Просто создай его в WM_NCCREATE или в месте, где окно создаётся и передай потоку указатель на класс твоей игры. Другой поток сам будет смотреть на флаги твоего класса и исходя из этого действовать, вызывать методы или ещё что.
Основная проблема в том, каким образом синхронизировать рендер, ввод с клавиатуры-мышки и физический цикл (цикл игровой механики). Можно хранить копию состояния игры, рисовать эту копию, пока новое физическое состояние обсчитывается в другом потоке. Мьютексы с большим шансом в говно тормозное превратятся, но не обязательно.
Ещё виндоус почти не умеет в таймеры, либо ты физический цикл делаешь с очень большой частотой, либо привязываешь к рендеру и тогда смысл второго потока теряется, либо сам через условные asm("nop;nop;nop;nop;") ждёшь интервал времени, чтобы добиться ровно 100 обновлений (или сколько тебе захочется) игрового мира в секунду. Если попытаешь заслипать поток, то он будет засыпать на сколько ему захочется милисекунд и обновления будут очень неравномерные во времени.
Вообще не знаю как нормальные люди делают - просто описал какая у меня с этим была проблема.
>потом указать какие функции будут должны в нём выполняться
Какую проблемы ты хочешь решить? При создании ты можешь указать только одну функцию. Но в той функции ты можешь вызывать сколько угодно других. Если тебе именно динамически нужно выполнять функции то обычный подход - сделать очередь в которую будут скидывать потоку задания, а он время от времени просыпаться и выполнять их. Если ничего нет - то засыпать. Ты в такую очередь скидываешь std::bind (или что-то подобное) с нужными для выполнения функциями. Если у тебя постоянный (но динамический) набор функций для выполнения то создаешь просто вектор с такими биндами (или ссылками на функции например) и в треде пробегаешся по нему и засыпаешь на время. Потом повторяешь
>Вообще не знаю как нормальные люди делают
Используют готовый движок, хотя бы в виде обертки вокруг директ икса и винапи.
Как будто в готов движке оно каким-то магическим образом само-собой работает.
Один хрен в 98% играх ввод с клаво-мышки привязан к рендеру, и в 90% игровая механика прибита гвоздями к рендеру.
Но слипать поток с циклом обновления игры в любом случае не стоит, даже на 60 фпс скорее всего он уснёт больше чем на 16 мс. По крайне мере я никаким образом не смог добиться стабильного интервала между обновлениями, если поток с ними слипается.
>98% играх ввод с клаво-мышки привязан к рендеру, и в 90% игровая механика прибита гвоздями к рендеру.
Нет.
Зачем там else, типа если кто-то спамит очередь сообщениями, пошел нахуй юзер, не до тебя сейчас?
>Аноны, есть подобный код, хочу добавить сюда отдельный поток для GameController::Update(), как мне это сделать?
Зачем? Пока видюха рендерит, основному потоку все равно нехуй делать. Если же ты хочешь заняться чем-то тяжелым, физикой какой-нибудь, которую на видюху нельзя либо влом, то именно это и нужно пихать в отдельный тред. Не надо наворачивать сложность там, где она не нужна.
Ты первый.
Что здесь происходит?
strBuilder.Append(word.Substring(0, width - 1) + "-");
word = word.Substring(width - 1);
С++ не знаю. Нужно для конвертации в другой язык.
Ночные сборки ставь.
Ты щас смеешься?
Ни дебаггера, ни компилятора, ни системы сборки, ни статического анализа, ни раннера юниттестов.
Это так, блокнотик с подсветкой. А вижуал студия - полноценный профессиональный инструмент, лол.
> Ни дебаггера, ни компилятора, ни системы сборки, ни статического анализа, ни раннера юниттестов.
Ты щас смеешься? Ты щас смеешься? Ты щас смеешься? Ты щас смеешься? Ты щас смеешься?
> Это так, блокнотик с подсветкой.
Лол. Лол. Лол. Лол.
пиздец миленниалы пошли
> дебаггер
gdb
> компилятор
Такие же как и везде - gcc и clang
> система сборки
qmake, ninja, make, waf, scons, meson...
> статический анализ
clang analyzer и semmle
> раннер юниттестов
gunit
> вижуал студия - полноценный профессиональный инструмент
Уж лучше бы профессиональные инструменты из неё упомянул. Их там есть немного.
И как, весь зоопарк тобой перечисленный относится к Code::blocks, и конкретно, самому определению IDE?
Зачем пользоваться (и, о боги) осиливать заведомо инфериорный продукт? Если ты идейный хейтер всего майкрософтовского, то всегда есть CLion. Если у тебя аргумент "ТАРМАЗИТ" - то ты не зарабатываешь деньги программированием, и твое мнение априори не интересно. ЛАБА3 можно писать и в nano
>code blocks
Не умеет выводить подсказки (список полей и методов структуры) при использовании auto, decltype и сколько угодно простых шаблонов. Код компилируется, но в редакторе всё красным зачёркнуто-перечёркнуто, никаких полезных предупреждений от среды нельзя получить. В автоматическую установку отступов соответственно не умеет, если там вообще такое есть.
Может быть и пофиксили что-то или это можно настроить, но у меня самые отвратительные впечатления остались (хуже только от визуал студии) - зачем это нужно, если в другой среде это всё без особых проблем работает?
Студия, CLion, qtCreator и даже CodeLite. Может быть ещё какие-то умеют, я не проверял.
> Ну а зачем тогда высираться тут, если ниасилил?
Сидит челик, обмазывается говном, и на все вопросы отвечает "АХАХА ТЫ НЕАСИЛИЛ ПРОСТО, НЕАСИЛЯТОР АХАХАХА", и продолжает обмазываться. Это выглядит примерно так.
> Тогда и VS не IDE.
Как раз - фактически это единственная IDE, ставишь только ее, у тебя сразу и редактор, и весь тулчейн, и редактор.
> и на все вопросы
Какие вопросы? Там были лишь заведомо ложные утверждения.
> Как раз - фактически это единственная IDE, ставишь только ее, у тебя сразу и редактор, и весь тулчейн, и редактор.
В студии есть рабочие нагрузки, так что можно вполне себе поставить студию без компилятора.
Тащемта CB, насколько я помню, тоже поставляется со всей этой хуетой.
По моим наблюдениям, есть несколько человек, которые десятилетиями сидят и есть остальные, которые каждый год сменяются
У меня в свежей студии после шаблонной мангии intelliSense глючит, порой вообще отказывается синтаксис светить. Хз что делать, наверное, буст его перегружает
Может быть это неочевидно, но при смене стандарта, есть ломающие изменения, когда программа просто не соберется из-за изменившейся сигнатуры функции в стандартной библиотеке.
Но, кроме этого, меняются некоторые правила, например, вывода типов в шаблонах. Из за чего может поменяться семантика некоторых выражений. То есть, ты или кто то еще пишет строчку, подразумевая одно поведение, а оно с разными флагами отличается. Сам я примеров не приведу, но вот тут - вызовется другая перегрузка функции https://stackoverflow.com/questions/6399615/what-breaking-changes-are-introduced-in-c11
А вот тут содержимое объектов поменялось с уникального на одинаковое для всех https://stackoverflow.com/questions/5759232/stdvector-default-construction-c11-and-breaking-changes/5759296
Вот еще разное поведение constexpr https://stackoverflow.com/questions/23980929/what-changes-introduced-in-c14-can-potentially-break-a-program-written-in-c1
Так что кому то придется каким то образом просмотреть все строчки кода и используемых библиотек (или надеяться что все покрыто тестами)
От жидбрейнс плагин установи для студии и попердоль оптимизацию, у меня вроде как перестало лагать, но время загрузки проекта увеличилось.
Какого размера солюшн?
у меня на 200 проектов загружается где-то минуту, если почистить кеш, то минуты три
У меня есть класс Socket. Я хочу, чтобы когда он принимал соединение, он возвращал шейрд указатель на объект класса Connection, который бы сразу и конструировал из хэндла, полученного функцией WinSock. В свою очередь объект класса Connection содержит в себе Socket. Я пытался сделать через форвард декл., но не выходит. В Socket.cpp заинклюжен Socket.h, а в него Connection.h, что не дает мне заинклюдить Socket.h в Connection.h. Как такое делается?
Нвидиа-кун, если это ты, я помню твой гайдлайн <3
В планах, сейчас пока пилю этот чат как тестовое на джуна, и руки не доходят.
test[1] = function[1,2,3,a,b,c];
...
test[10] = function[4,3,6,e,f,g];
была идея завести отдельную структуру для параметров функции и итерировать по ней.
Упс, спасибо
Деструктор нужен, если хранишь unique_ptr и хочешь forward declare.
Деструктор в cpp разумеется.
Бред какой-то.
Есть опыт работы с Ардуинами также чуток Мплаб (ПИКи) и чуток Андроид. Большой опыт в промышленной автоматике и чуть меньше в электронике.
Посоветуйте как вкатываться, что читать/ учить.
Ошибка QProcess: Destroyed while process ("python3") is still running.
Мой
QProcess
p.start("python3",{"draw3d"});
p.waitForFinished();
Функция уже задана, ее не поменять
>Надо например каждый раз тот же вектор обрезать с краев.
Вектор так не умеет, вроде бы. Ты либо делаешь новый вектор (меняешь уже имеющийся) на каждой итерации, либо создаёшь свой тип / передаёшь итераторы.
передавай итераторы
>Вектор так не умеет, вроде бы.
erase
Но передавать изменяемый вектор по ссылке при рекурсии - сомнительное решение, это будет или куча багов или легко меняется на цикл.
pop_back, pop_front.
while(std::getline(input,str))
if(str == "\n") std::cout << "\n"
А что он у тебя должен делать, выводить столько символов переводов строки, сколько в введенном тексте? Очень полезно.
std::cin.ignore();
const в методах нужен (можно поставить), когда ты не изменяешь не-mutable поля класса, не вызываешь других не-const методов и всё в таком роде.
Константный указатель не есть указатель на константу - если у тебя класс содержит указатели - можешь сколько угодно изменять значения на которые они указывают. FILE - простая структура, указатель на неё ничем не отличается от указателя на число. Ты не сможешь использовать fprintf, только потому что у него в объявлении нет const, но фактически сам указатель ты передаёшь по значению и у функции просто нет возможностей его (указатель) изменить (const в объявлении аргумента функции влияет только на возможности записи в этот аргумент внутри функции и существенный смысл имеет только вместе с ссылками). Ещё ты можешь поставить const_cast<FILE✲>(f1) вместо f1 если понимаешь что ты делаешь и зачем тебе это нужно, и тогда ты сможешь использовать fprintf вместе с const FILE✲.
Ещё по большей части const нужен для людей, просто чтобы не ошибиться лишний раз, компилятору более-менее без разницы и если ты не записываешь значения в переменную он и так может провести оптимизацию во многих случаях.
Ну вот тут например я по могу использовать fprintf в константном методе, передавая туда неконстантный указатель. Но в то же время я не могу использовать константный указатель т.к. fprintf принимает неконстантный.
Если логически это не const, то и не делай const.
Ну так прикрути const_cast, если тебе нужен константный - в действительности указатель всё-равно не изменяется.
Или не прикручивай, если не нужен. Я бы не стал.
AAAAAA
BBBBBBBB
Как попроще получить (без промежуточных хранилищ) из этого
ABABABABABBBBB
Есть есть заготовочка, где настроена обёртка вокруг winapi для создания окна, инициализации опенгля и вывода текста, то побью его (за 20 часов кодинга)!
Но вообще совсем не впечатляет. У него десять текстур, статичные блоки и простой генератор мира. Интерфейса или ещё чего-то нет, показан только режим полёта (прыгать по кубам нельзя). Сделаю за три-пять часов плюс-минус такое. Могу с записью, если ты хочешь поспорить со мной.
>>93903
Не знаю что это.
Тоже задумывался над этим вопросом, когда писал свой враппер над FILE. Решил сделать read и write константными, просто потому, что сырой константный FILE тоже можно писать и читать. Получилось прикольно в том плане, что можно передать куда-то const File&, и это будет означать "можешь писать и читать, но не можешь закрыть и переоткрыть".
Хотя потом оказалось, что такой подход плохо расширяется — захочешь вместо File передать другую читалку-писалку, а у неё read и write уже могут быть не константными.
бля, парные звездочки после FILE превратились в курсив
Константными можно делать методы вроде .size(), .readPos()
Когда ты читаешь из файла, ты меняешь позицию указаетля чтения. Так что хотя технически метод чтения можно сделать константным, логически он меняет объект.
Задача простая, но объемная. Ничего сложного, но придется потратить время, день-два. Хорошее задание, интересное.
В принципе отрисовку можно сделать на GDI в виндоусе, и вообще все сделать тупо на Windows API
Сделай, даже если тебя туда не возьмут, это хорошая практика.
Постарайся в коде не сделать хуйню вроде текущих ресурсов (будь внимателен к исключениям) или битых ссылок.
Я хотел сделать на DirectX(это же нельзя отнести к категории движков?), в любом случае собираюсь делать конечно, даже если не возьмут, получу хоть какой-то опыт.
DirectX тоже пойдет, это не движок. Хотя это оверкил, тебе надо нарисовать 2 прямоугольника, линию и кружок. Почитай у Петцольда про GDI, у тебя реально всю отрисовку можно в 10-20 строчек уместить.
Вообще расскажи подробнее, если не сложно. Я просто десять лет кодю, но никогда не работал, потому что хикка социофоб, но нужно как-то устраиваться. Твоё задание кажется очень простым, но когда я попробовал приходить на собеседование, меня спрашивали что я знаю, и я не мог ни про что сказать, что я что-то знаю, потому что в чём угодно есть много вещей и дополнительных функций, которые я не знаю - я честно так и отвечал, что имею какой-то опыт работы с тем-то, с этим, после чего меня благополучно посылали.
Я тоже никогда ещё не работал, сейчас на 2 курсе учусь и просто разместил свое резюме и потом уже со мной связались, собеседования ещё не было, оно после выполнения тз.
Без движков? Без б, ебани в консоли ascii графикой.
Я так "жизнь" сделал.
Три совета для скорости печати: собирай в релизе, ставь в консоли курсор на левый верхний угол и печатай каждый раз один раз одно и то же количество символов(они будут перекрывать друг друга, быстрее, чем очищать вывод) и печатай сразу все, что есть для отрисовки, а не построчно.
Могут и не посчитать, но сам факт сторонней либы может понизить "рейтинг", если у них несколько кандидатов.
В первой строке test-a ты (обосрал себе штаны) объявил новую функцию, а не вызвал существующую из zalupa
А хотя нет, это я кал уронил, там же нет ret type
бампую вопрос, т.к. до сих пор использую вектор в котором храню значения из первого цикла в нечетных местах, а значения из второго цикла в четных, а потом вывожу это в файл.
Чем тебя не устраивает это решение?
Нахуя это вообще так сделали? А если у меня в глобальном неймспейсе функция с таким же названием, то какая из них вызовется?
Делаешь один цикл, где на каждой итерации записываешь два значения, а когда одно из условий нарушается - выходишь из цикла и добиваешь всё оставшимися A или B в зависимости от нарушенного условия? Удобнее через while.
BOOST_PP_REPEAT
О том и речь.
Иначе всякие пользовательские операторы + - * и и.д. работать не будут нормально
Загуглил, давно читал, да, есть те кто может и кто не может. Не считаю это чем то плохим, я например рисовать не умею, а другие умеют.
Хотя думаю с 2006 прошло много времени и умеет больший процент, тупо потому что больше пользуются электронной техникой.
Чтобы не писать всю эту дрисню
std::operator<<(std::cout, "Hello, world").operator<<(std::endl);
>Но вообще совсем не впечатляет.
Он первым сделал демонстративный пример на крестах, все норм
>У него десять текстур, статичные блоки и простой генератор мира.
Больше всего он ебался с созданием окна и правильным отображением мира, только в конце уже можно было бы что-нибудь добавить
>Сделаю за три-пять часов плюс-минус такое. Могу с записью, если ты хочешь поспорить со мной.
На что споришь?
Шизик воришка, ты? Копирование не воровство, сколько раз тебе говорить.
Не слушай сектантов плиз, с++ как раз и полезна тем, что много абстракций добавлено и либ спрограммировано.
У С в 2020 году есть 2 юзкейса.
1. Отсуствие компилятора С++ под твою платформу
2. Экспозинг extern C интерфейсов для FFI других языков\компиляторов.
Все, больше нахуй нигде не сдалось, не слушай луддитов.
Иронично, что C++ предназначен быть полезным в куче юзкейсов, когда очевидно, что в еще большей куче он не подходит, то этот ИТТ петуховен так уверен в себе.
Жаль что все либы с++ написаны в разном стиле и с разным интерфейсом, считай на 10-ке разных диалектов. Ну и на сях либ то наверное побольше.
Назови хоть 1 юзкейс, где С лучше чем С++, за исключением двух, перечисленных мной
> Жесткое ограничение на размер шеллкода, например.
Ты вполне можешь получить такой же размер, как в си. Минус РТТИ, минус эксепшены - пожалуйста.
Но мы тут, все таки про разработку полноценную, а не упражнения
> Вообще нет ни одного кейса, где бы Java не подошла.
Напишешь мне кернел драйвер виндовый на джаве? Я на С++ пишу вот щас сижу.
>Ты вполне можешь получить такой же размер, как в си. Минус РТТИ, минус эксепшены - пожалуйста.
Скажи мне, ты в своем уме? В Си у меня на выбор кучи заменяющих libc библиотек, из которых можно взять только самое нужное, в C++ мне нужно будет тащить весь libc++ без альтернатив, не говоря уже о том, что там все завязано на работу с памятью, а это означает еще библиотеки, заменяющие работу с памятью ОС.
>Но мы тут, все таки про разработку полноценную, а не упражнения
Ясно @ понятно. Настоящая разработка ведется исключительно в винде. Спасибо, что пояснил.
> Напишешь мне кернел драйвер виндовый на джаве?
Не вижу никакой причины не захуярить JVM прямо в драйвер.
у тебя и в С и в С++ можно линковаться только на платформенное АПИ вообще без какого-либо рантайма, если ты не в курсе.
> Ясно @ понятно. Настоящая разработка ведется исключительно в винде. Спасибо, что пояснил.
Не передергивай, любой большой проект на любой ОС.
> Не вижу никакой причины не захуярить JVM прямо в драйвер.
Ну, как захуяришь - свисни.
Да не на что.
На репутацию моей критики в том посте. Не получится - тот тип с ютуба молодец, а я хуесос; получится - я молодец, и тот тип тоже молодец, потому что сделал видео и привнёс что-то интересное в этот мир. В конце концов я то уже знаю что нужно сделать, а он может быть тыкался ещё не видя конечного результата.
>у тебя и в С и в С++ можно линковаться только на платформенное АПИ вообще без какого-либо рантайма, если ты не в курсе.
И? Нахуя мне C++ без библиотек и исключений?
>Ну, как захуяришь - свисни.
Лол, ты себя илиткой считаешь, чтоле?
Такой-то гонор, и нихуя по существу вопроса, а все заявления основаны на кодинге под одну платформу.
>у тебя и в С и в С++ можно линковаться только на платформенное АПИ вообще без какого-либо рантайма, если ты не в курсе.
Попробуй, кстати, написать что-то нетривиальное на том же C без рантайма под ту же винду. Тебя ждет мир удивительных открытий типа необходимости реализовывать свой memset, например.
> И? Нахуя мне C++ без библиотек и исключений?
Хотя-бы ради классов. RAII и инкапсуляция - это такая киллерфича, что на этом можно закончить. В чистом СИ ты в лучшем случае будешь как майкрософт GOTO cleanup делать.
Считай - тот же си, только с классами, шаблонами и прочим сахарком типа лямбд, и о боги, даже распаковкой аггрегатов в structured bindings - это все удобно, и не требует рантайма.
> Лол, ты себя илиткой считаешь, чтоле?
Хорошо сманеврировал. Но я еще посмотрел бы на потуги писать на джаве драйвера, особенно с использованием многопоточки. Как бы ты там сочно половил бсодов с IRQL violation'ами.
> Такой-то гонор, и нихуя по существу вопроса, а все заявления основаны на кодинге под одну платформу.
Кто тебе сказал такое? Я писал под линукс на крестах охуевший high performance. 98% кода красиво и абстрагировано, 2% (исполняющиеся 99% времени) выдрочены до замеров промахов кэша процессора. Но да, винду я знаю сильно лучше, этого отрицать смысла нет.
> Попробуй, кстати, написать что-то нетривиальное на том же C без рантайма под ту же винду. Тебя ждет мир удивительных открытий типа необходимости реализовывать свой memset, например.
Да без проблем вообще. В кернеле есть крошечные куски сишного рантайма, анивей, использую кернел апи, а сверху уже нашлепал нормальных абстракций, тот же operator new, например. Обернуть сишное апи - получаем хороший С++.
> Обернуть сишное апи - получаем хороший С++.
Перефразирую - обернуть платформенное сишное апи - получаем хороший С++, даже сишные либы не нужны нахер.
>Шаблоны, классы.
Макросы, структуры.
Реальный профит от C++ начинается с возможности использовать RAII и исключений для обработки ошибок.
>>>1594585
>В настройках компилятора просто ставишь статичную линковку(MT) и и у тебя весь рантайм сам встроится в твое приложение используя исключительно winapi.
Без рантайма, не статисчная линковка, а без рантайма.
>>94604
RAII без исключений не дает профита.
И да, в C я именно, что делаю goto, а хуле ты хотел-то? Выбора нет.
Ну а инкапсуляция это приятный бонус, решения о выборе языка не принимаются на таком основании.
>Да без проблем вообще. В кернеле есть крошечные куски сишного рантайма
Вся суть, а совсем без рантайма твой любимый VS начнет смачно обсираться и звать маму.
>Макросы
Хуйня, не сравнится с шаблонами
>структуры
Нет RAII
>RAII без исключений не дает профита.
Действительно, вот у меня есть функция которая возвращает какой-нибудь важный ресурс, в си мне придется КАЖДЫЙ раз вручную его освобождать, а в с++ я могу обернуть его в RAII и все.
> RAII без исключений не дает профита.
RAII дает профит всегда, потому-что тебе не надо думать об освобождении ресурсов - привет GOTO cleanup. ты можешь думать на более высоком уровне абстракции, там где нужно. И опускаться во врапперах на более низкие. Те же хэндлы и прочие opaque поинтеры.
> Вся суть, а совсем без рантайма твой любимый VS начнет смачно обсираться и звать маму.
Еще раз, для необучаемых - ВС умеет в компиляцию native приложений, когда еще даже Winapi нету, не говоря уж о рантайме, только Native api. В драйверах есть майкрософтовские бастарды, сишного ни рантайма, ни библиотеки нету. Студия отлично справляется.
В который раз смачно обсираешься, абсолютно не зная винду, но продолжаешь это делать. Зачем?
>>94622
Очень сильно зависит от конторы. Кому-то 50к в НИИ, мне 400к+. В касперском можно вроде 200-250 выбить.
>В который раз смачно обсираешься, абсолютно не зная винду, но продолжаешь это делать. Зачем?
Обсираешься здесь лишь ты, т.к. из-за своего ЧСВ даже не можешь понять, о чем пишешь. При компиляции драйвера VS добавляет свой псевдо-рантайм, без рантайма он не будет находить тривиальные функции во время линковки, которые ему нужны просто так, блеать, из-за того, как компилятор генерирует код.
Вообще, я угараю с твоего ЧСВ, маня, ты думаешь, что один тут драйверы писал? Так-то понятно, что в Рашке среди говна легко чувствовать себя таким царьком, но включи мозг-то.
>RAII дает профит всегда, потому-что тебе не надо думать об освобождении ресурсов - привет GOTO cleanup.
А, и еще раз.
goto нужен только в случае обработки ошибок, другими словами — реальный профит от RAII, а не отсутствие необходимости вызвать лишнюю функцию для освобождения ресурсов, начинается с возможности использовать исключения для обработки ошибок.
Про абстракции и врапперы он мне тут рассказывает, лол. Жену поучи щи варить, петуховен.
>без рантайма он не будет находить тривиальные функции
Какие блять тривиальные функции? Ты хоть перечисли несколько. Почему я спокойно пишу драйвер и могу юзать хэш карты, вектора и т.д.?
> goto нужен только в случае обработки ошибок, другими словами — реальный профит от RAII, а не отсутствие необходимости вызвать лишнюю функцию для освобождения ресурсов, начинается с возможности использовать исключения для обработки ошибок.
Ладно, здесь уже можно закончить. Удачи с дипломом.
Хоть бы погуглил, блин, петуховен.
https://hero.handmade.network/forums/code-discussion/t/94-guide_-_how_to_avoid_c_c++_runtime_on_windows
Просто типичнейший рашкопрограммист в вакууме.
ЧСВ, неспособность к коммуникации, неадекватность в общении — все на месте.
да, да, считай как хочешь. Я понял, что ты невменяемый, и сраться с тобой смысла 0.
Ты понял, что обосрался по всем пунктам, и сейчас у тебя бомбит от осознания собственной профессиональной несостоятельности. Пишешь драйверы и не понимаешь, как генерируется код, лол. В своем узкоспециализированном домене не знать, что VS вставляет вызовы в CRT где попало — это нужно быть типичнейшим кодомакакой, хоть и от C++, лол. Не знать, зачем на самом деле нужен goto в C — аналогично. Ты просто привык понтоваться умными словами перед джунами, но чем-то их подкрепить не в состоянии.
продолжай, продолжай. Ну, как минимум курс операционных систем в вузике ты не проспал, но судя по всему, продакшен код еще не писал.
Ты слишком любишь слово ПЕТУХОВЕН. Под шконарем слушал радио классику? Такой смешной.
Туда ли ты зашел, петушок?
Зачем сидишь на двачике, ньюфажик? С коллегами общаться не в состоянии, они неспособны понять твой ОБВМ?
С коллегами я на работе общаюсь, а на двачиках\ментачиках\сосачиках\педаликах я уже лет 12 сижу.
Но ты смешно проецируешь.
С коллегами я на работе общаюсь, а на двачиках\ментачиках\сосачиках\педаликах я уже лет 12 сижу — раздался пронзительный голос со стороны параши.
Но пацаны, как всегда, не обратили внимания на это визгливое кукареканье. Пусть кукарекает, что с него взять?
Петух — не человек, и сегодня ему предстоит очень трудная ночь. У него уже в течение полутора лет каждая ночь была очень трудной, и теперь его анус был разработан настолько, что он без труда мог спрятать в нём банку сгущёнки.
Тюремная тема? Ну, отлично. Я смотрю ты много о петухах и их жизни знаешь. Батя сидел, или сам по малолетке?
>>94574
А вообще хочется разработать такую же игру, примерно. Тут огромный простор для творчества, на самом деле. Вот в мажонг не попадешь, да и они сами на жава пишут. Вот интересно, есть идеи у тебя какие либо?
я думаю в майнкрафте мало экшена и реального выживания, думаю может что-то похожее запилить.
>Не забывайте ребятки, что тюремную культуру принесли русские евреи незадолго перед революцией.
Именно поэтому пидарашки в любом закрытом коллективе устраивают анальную иерархию, а в израильской армии дедовщина отсутствует, как класс, лол.
Б-г миловал.
Зачем вообще с нуля разрабатывать свой движок и потом на нем еще и игру? Есть UE, Unity, не хочу, хочу жрать говно и пилить свой велосипед.
Это достаточно неплохой образовательный проект.
А чтобы оно мне само ещё и распараллелило? А вдруг видеокарта будет, и можно будет на ней посчитать?
И ещё вопросик такой, что обычно означает в вакансиях: «знание Qt (QtWidgets/QtCore)»? Умение применять в реальных проектах?
Так весь кайф с нуля.
Я дебил, уже понял.
> Через что лучше пердолить Qt, а конкретно QtWidgets, книги или документация с примерами?
Через написание кода. А с чем ты будешь консультироваться при написании кода - похуй, но, наверное, с документацией.
> И ещё вопросик такой, что обычно означает в вакансиях: «знание Qt (QtWidgets/QtCore)»? Умение применять в реальных проектах?
Ты понимаешь, как работает мемори менеджмент в qt, сигналы\слоты, moc, uic, как рисовать гуй, как наследуются\переопределяются методы в qt и так далее.
Зачем тебе МАСТЕР КЛАССОВ? Пиши все это руками лол, 3.5 строчки
Винда-с.
А где почитать вот про эту модульность, где классы в хедерах и отдельных cpp файлах реализуются, как они с главным файлом стыкуются и т.д.? А то я только маленькие делал пока только программы.
блять, а мне 80-летний препод на первом курсе говорил все что можно, даже небо, даже аллаха, по ссылкам передавать, чтобы память экономить, ну охуеть блядь, пойду читать.
Мимодругойанон
void foo(std::string name)
{
...
}
void bar()
{
string str;
foo(std::move(str));
}
80-летний дед то про это поди не рассказывал?
Ну гугли #include, #pragma once, вот это все.
Последнее, если надо, если есть задача обоснованная, например, если у тебя железка какая-нить голая без ведра линуксовского, то делаешь и не выебываешься.
Бля, поставят задачу - написать линкер свой на работе - не думаю, что у нас кто-то скажет "ОХУЕТЬ КАК СЛОЖНА, ЭТО МЫ НЕ СМОЖЕМ".
Модульность это когда ты можешь просто, без задней мысли, импортнуть нужный модуль, очевидно же. Без сайд-эффектов на остальные включаемые модули, с инкапсуляцией объектов в каждом модуле. Как в жабе и Питоне.
Дополнили немного тз: разрешено использовать только сдл2.
Я сделал небольшую заготовку и у меня возник вопроса, я сделал управление таким образом(на пикче), но у меня нельзя одновременно двигать обе платформы, только 1, как решить эту проблему?
У меня на собедовании как-то кандидат инт по ссылке передавал с таким же объяснением.
Написал "не знает С++" в фидбеке.
Всё, решил проблему вот таким методом
Это чтобы платформа двигалась быстро, но плавно
Майнкрафт требует специфичного движка, у тебя куча кубов, которые даже в массиве нельзя хранить по нормальному и нужно в чуть ли не прямо в сжатом виде обрабатывать. Хранить кубы как объекты с разными виртуальными методами для камня и сундука не получится. Помимо этого графон там простой без эффектов, и ещё там нереальное количество специфичной геометрии без lod-ов. Движок почти ничего не даст, а если он делает какую-то дополнительную обработку, пытается геометрию разбить по дереву для оптимизации, то он утонет - по сути ты будешь писать всю механику без движка, а движок использовать лишь на 5% для создания окна, обработки мышки, и вывода меню и других элементов интерфейса. Оверкилл, в общем.
>Unity
>не хочу хочу жрать говно
На ноль поделил, кстати. Посмотри игры на юнити, даже очень простые игры вроде робокрафта лагают как не в себя, хотя выглядят на уровне 2005 года. Ksp и cities:skylines имеют утечки памяти и имеют проблемы с производительностью в очень странных местах (в cities:skylines например фпс увеличивается в два раза при скрытии интерфейса - то есть вывод двух панелек с текстом и цветными кнопками занимает ресурсов больше, чем рендер крупного района города).
>>94734
>есть идеи у тебя какие либо
Нету.
Когда я когда-то очень давно играл в бету 1.5_01, я заблудился в пещерах и 8 часов искал выход переставляя факелы. Потом ещё метки на стенах рисовал (выкладывал из цветной шерсти), чтобы можно было ориентировать в пещерах. Это был самый интересный опыт игры. На что мне ребята сказали, что я глупый и нужно было просто проход наверх прокопать.
Вот мне кажется тут самое интересное что можно сделать - убрать возможность так просто копать унылые блоки, и добавить больше глубины в мир и более сложную организацию пещер. Когда ты заблудился - это перестаёт быть игровой условностью, потому заблудился ты сам, а не персонаж - и никакие "нарисованные" уровни или хорошая экипировка тут не помогут. Вот сделать что-то как на картинке по сложности, только объёмное, чтобы можно было месяц реального времени искать выход, если заблудился и всё развитие и геймплей сделать внутри этих пещер с конечной целью найти выход.
Майнкрафт требует специфичного движка, у тебя куча кубов, которые даже в массиве нельзя хранить по нормальному и нужно в чуть ли не прямо в сжатом виде обрабатывать. Хранить кубы как объекты с разными виртуальными методами для камня и сундука не получится. Помимо этого графон там простой без эффектов, и ещё там нереальное количество специфичной геометрии без lod-ов. Движок почти ничего не даст, а если он делает какую-то дополнительную обработку, пытается геометрию разбить по дереву для оптимизации, то он утонет - по сути ты будешь писать всю механику без движка, а движок использовать лишь на 5% для создания окна, обработки мышки, и вывода меню и других элементов интерфейса. Оверкилл, в общем.
>Unity
>не хочу хочу жрать говно
На ноль поделил, кстати. Посмотри игры на юнити, даже очень простые игры вроде робокрафта лагают как не в себя, хотя выглядят на уровне 2005 года. Ksp и cities:skylines имеют утечки памяти и имеют проблемы с производительностью в очень странных местах (в cities:skylines например фпс увеличивается в два раза при скрытии интерфейса - то есть вывод двух панелек с текстом и цветными кнопками занимает ресурсов больше, чем рендер крупного района города).
>>94734
>есть идеи у тебя какие либо
Нету.
Когда я когда-то очень давно играл в бету 1.5_01, я заблудился в пещерах и 8 часов искал выход переставляя факелы. Потом ещё метки на стенах рисовал (выкладывал из цветной шерсти), чтобы можно было ориентировать в пещерах. Это был самый интересный опыт игры. На что мне ребята сказали, что я глупый и нужно было просто проход наверх прокопать.
Вот мне кажется тут самое интересное что можно сделать - убрать возможность так просто копать унылые блоки, и добавить больше глубины в мир и более сложную организацию пещер. Когда ты заблудился - это перестаёт быть игровой условностью, потому заблудился ты сам, а не персонаж - и никакие "нарисованные" уровни или хорошая экипировка тут не помогут. Вот сделать что-то как на картинке по сложности, только объёмное, чтобы можно было месяц реального времени искать выход, если заблудился и всё развитие и геймплей сделать внутри этих пещер с конечной целью найти выход.
неа, не рассказывал
Почему?
Охуенно про майнкрафт расписал, действительно не хватает какого-то приключения, в котором ты не чувствуешь себя всемогущим.
> Не вижу никакой причины не захуярить JVM прямо в драйвер.
Бля, какие же сука Васяны в треде сидят, каждый раз ахуеваю.
Движки идут во-первых с оверхедом ненужного тебе, во-вторых нехватающие технологии тебе все равно самому дописывать, в-третьих, они своими интерфейсами навязывают свой стиль кодинга, который может тебе не подходить.
В чем проблема использовать RAII без исключений? Условно говоря, в конструкторе проверяешь открылся ли файл, в деструкторе закрываешь.
Раньше драйвера писал, сейчас я одновременно на трех проектах, еще четвертый подсунуть хотят, и сбоку тыкают, чтобы ресерчил какую-то неведомую хуйню. Весело, короче.
У тебя есть два варианта, первый посмотреть как делается вывод SDL_ttf. Второй - просто рендерить картинки цифр. Вообще говоря, даже не обязательно картинки, их можно рисовать толстыми линиями-прямоугольниками, которыми ты рисуешь платформы.
Сейчас компеляторы умные стали, сами оптимизируют многое, поэтому на всяких конференциях советуют почти все передавать и возвращать просто по значению.
Васян здесь только ты, типичный пидорахен-вайтишник, не способный создать ничего принципиально нового. А люди, которые не ставят себе искусственные ограничения — делают.
https://dl.acm.org/doi/10.1145/1408654.1408657
Использовать можно, где профит?
Без исключений RAII удобен, не более того.
С исключениями он меняет весь стиль программирования.
Сейчас бы полагаться на оптимизации компилятора в продакшене.
я прямо сейчас (в субботу, ага) сижу и тестирую говно, написанное в пятницу, т.к. задачек сильно больше, чем времени.
Ну, из хороших новостей лишь то, что в этом году скорее всего запромоутят до Senior II, ради этого и потею.
>в этом году скорее всего запромоутят до Senior II, ради этого и потею
Никогда не понимал такой хуйни.
Ну хуй знает, добиваться лычек в какой-то компании это не самый эффективный метод для зарабатывания бабла, тем более потеть ради этого.
С моей зарплатой чисто теоретически уже не возможно "сменить контору", прыгнув на более высокий рейт. Единственный вариант - сьебывать в США, чего я пока не хочу.
По-этому расту вертикально и медленно. Но, анивей, чем выше твой грейд - тем интереснее задачи. Чем интереснее задачи - тем больше бизнес-импакт компании, обычно. И так далее.
Короче, меня текущее развитие событий устраивает. Если все пойдет как надо - перешагну 550к в месяц.
> В этой статье мы предложили модель безопасного драйвера устройства для ОС Linux
> ОС Linux
Дальше не читал. Можешь не продолжать, у тебя нулевой уровень экспертности.
Не проецируй, маня.
>>95532
Ну так ты ограничен таким вертикальным ростом из-за решений, которые принял до того, очевидно же. Я предпочитаю, когда у меня много опций. Если меня прямо сейчас заебет хайтек, то легко съебу на постдок в любую страну, например. Заебет писать под Линукс — буду писать под винду в своей компании или в другой. Заебет программирование — уйду в академию. Мне психологически важно иметь возможность послать все нахуй в любой момент.
Можешь не продолжать, у тебя нулевой уровень экспертности — раздался пронзительный голос со стороны параши.
Но пацаны, как всегда, не обратили внимания на это визгливое кукареканье. Пусть кукарекает, что с него взять?
Петух — не человек, и сегодня ему предстоит очень трудная ночь. У него уже в течение полутора лет каждая ночь была очень трудной, и теперь его анус был разработан настолько, что он без труда мог спрятать в нём банку сгущёнки.
Я искренне рад за тебя, что у тебя есть такая свобода. Меня NV полностью устраивает вообще всем, по-этому смысла менять нету.
Смысл увольнять достаточно хорошего инженера, по меркам конторы?
Ну, даже если так - у меня есть однушка в мухосранске, и достаточно денег на счете чтобы не работать примерно 12 лет (я считал, кек).
За 12 лет я уж задрочу литкод достаточно, для оффера из гугла\фейсбука и прочего топа.
>Смысл увольнять достаточно хорошего инженера, по меркам конторы?
Ты серьезно? Тупо упадет акция, закроют направление / офис в Рашке / еще овер9к вариантов. Компании такого масштаба увольняют людей десятками тысяч, и тогда не до разборок, кто хороший инженер, а кто нет.
Понятно, что не пропадешь, я больше в психологическом плане на такие вещи смотрю, т.к. меня самого увольняли не раз и не два.
1 раз было общее снижение зарплаты по всей конторе на год, потом это опционами выдали. Прям сокращений - не было вообще, в Московском офисе.
Ну и да, судя по тому, как яндекс мне письма любви написывает на почту и линкедин нонстопом - точно не пропаду, даже если не захочу 12 лет сычевать дома.
Кстати, ты, наверное, разбираешься.
Компания "Код Безопасности", сколько могут платить в такой?
Когда-то очень давно звали туда, а я подумываю о том, чтобы поработать в Рашке, если уж подался назад в хайтек.
Вот на такую позицию, скажем:
https://www.securitycode.ru/company/hr/vedushchiy-programmist-c-c/
Вангую ~250 потолок.
Иди лучше к нам - https://hh.ru/vacancy/35113629
Тут реально ~300к на руки, плюс акций пакован.
dval &= ((1 << PWRES)-1);
dval >>= PWRES - timer_cfg.duty_resolution;
Допустим, как я понимаю, PWRES = 1024. Могу ли я получить dval = 1024? Суть в том, что при этой конструкции максимальный dval = 1023, а мне надо чтобы был 1024, как это сделать?
Выглядит неплохо, спасибо проиграл со start of the art, лол.
Я в этом году точно не уйду со своей РАБотки, разве что мне все руководство разом на голову сядет, потому что жутко интересно пока, и не сгорел еще.
Если хочешь в будущем быть на связи, ну и не терять возможность получить профит с референса кандидата, если у вас такое практикуется, то черкани на
Блин, если бы норм ваканси были и в ДС2, а не только в ДС, то я бы даже жену легко уговорил на переезд, наверное.
PWRES это число бит.
Скажем PWRES=5.
Первая строчка обнуляет все биты в dval, кроме нижних пяти.
Вторая делит на 2, (PWRES - timer_cfg.duty_resolution) раз.
Насколько я понимаю, PWRES это резолюция чего-то одного, там низкая частота, а у таймера более высокая частота.
Так что, как минимум, PWRES это не 1024, ну а дальше сам выведешь, что надо, думаю.
Я и говорю, сразу нахуй.
Я вот много раз видел эту сеньорскую вакансию на ххру, но ты вроде как-то писал, что и джуна можете взять, я ж верно помню?
>Джуна паковать игры для Geforce now (какая-то такая хйуня есть вроде) - да, это Junior Gaming Engineer. Но с нее дальше в кодинг перекатиться реально.
А что для этого требуется, из знаний?
https://hh.ru/vacancy/35332731
Оверолл - еще надо уметь в игры, понимать как работает прости господи СТИМ, ИГРЫ В СТИМЕ, ДЕНУВО, АНТИЧИТЫ. Мам, я не в игы играю, я к собесу в нвидию готовлюсь, лул
блин вабще кайф, хочу туда
Александреску может? Или все-таки Страуструп?
*не жутко
Очевидный Modern Effective C++ же.
Я кроме дяди Жени не знаю никого, кто хоть как-то платит и занимается интересными вещами в области ИБ.
Не могу понять, книга вышла уже? Если да, то где можно купить?
На русском норм.
Что написать, ну кроме дефолтного содержания резюме, что ты ИГРУЛЬКИ любишь, наверное.
Замкадышей рассматривают, и даже если нужно face2face интеврью - оплачивают билеты и гостиницу на денек.
А как в Нвидии относятся к Линуксу/Линусу после его знаменитого фак-ю? Поменялось ли что-то в корпоративной культуре в плане открытой документации?
Я видел, что парни выкладывают потихоньку документацию к GPU на гитхаб, да и драйвера проприетарные работают. Но какой-то интернал инфы у меня нет абсолютно.
Professional C++ programming 4th edition и сверху какого-нибудь джосуттиса
ты изобрел идиому copy-and-swap
https://stackoverflow.com/questions/3279543/what-is-the-copy-and-swap-idiom
С захватом 20 хз. Вот из последнего:
C++17 - The Complete Guide
C++ 17 STL Cookbook
C++ Templates The Complete Guide
Лучше делать так, как надо в контексте твоего кода, о котором ничего не известно.
При помощи copy-and-swap, или unique_ptr&& ты передаешь ВЛАДЕНИЕ обьектом куда-то. Если тебе не надо передавать владение, тогда просто референс передавай (возможно константный).
Если мы говорим о разнице между unique_ptr и unique_ptr&& - то ее тут, фактически нет, потому-что оно не копируемо. Если бы оно было копируемо - там были бы нюансы. В твоем кейсе - разницы фактической нету между unique_ptr&& и unique_ptr как аргументом функции
> разницы фактической нету между unique_ptr&& и unique_ptr как аргументом функции
Ну вообще, когда стоит && хуй его знает, что там будет с объектом. Может его переместят, а может и не переместят. Лучше в таких случаях по значению принимать.
когда стоит && будет ошибка компиляции, если аргументом выступает не rvalue ссылка (или prvalue, если ты эстет)
А ну да, перепутал с universal references
Спасибо
Если речь о работе в текстовом режиме, как олды, то да, а так вопрос лишен смысла.
Да, в консольном. Мне надо заметь несколько символов либо на символы из юникода(всю программу переписывать под юникод лень), либо поменять где-то файлы, можно даже через код.
заменить*
Кто тебе позволит где-то файлы менять? Ни препод, ни админ на работе не позволит. Нормально делай.
Простого нет, придётся городить свой ввод через какой-нибудь getch(), и перерисовывать/затирать текущую строку символами \b и пробелами.
Ну и хуй с ним значит.
Может быть это не то, что ты имеешь в виду, но \r\n означает carriage Return и New line, соответственно, если вывести только \r, то перевода строки не произойдет, а курсор окажется в начале строки, и ты можешь выводить текст поверх старого.
Нет, тут ситуация такая: пока пишешь сообщение/команду, может прийти пакет от сервера и записаться посередине ввода.
ncurses/pdcurses
Гуглится только абстрактный щиттолк, а лезть в исходники буста мне лень, да и вникать там муторно. А мне нужен лишь список правильных винапи и спецификация.
Если используется в а.h то туда, если только в срр то туда.
Где вопрос бля?
У меня есть 3 директории: в одной лежат общие файлы из которых я делал .lib в VS, а в двух других Source.cpp с мейнами, пытался изменить мейкфайл с хабра и не вышло, говорит, что нет файлов
Бля, там OBJECTS поменял еще на SERVER/CLIENT соответственно
Мейк гонял давно, но по идее у тебя префикс только к первому имени приклеивается. И какой смысл зависимости цели servermake от, например, utilities.cpp?
По сути все хедеры из папки SockNet в итоге есть в SockNet/SockNet.h, а он уже инклудится в Server/Source.cpp и в Client/Source.cpp
Не собираеца..
Аноны с линуксом, может кто помочь скомпилить код? У меня по заданию должно собираться на линуксе, я конечно дефайнил всякие вещи для совместимости, но проверить нужно, а виртуалку сейчас накатывать заебусь - очень слабый ноут
Ну так накати продсистему linux в windows
>Даже читал блог, крутого разраба из гугла, где он не советовал писать новый код на плюсах.
Без описания цели разработки, это вообще ни о чем.
Ну а дрочить на лычки в 21-м веке тем более моветон.
>Без описания цели разработки, это вообще ни о чем.
Как я понял, речь шла вообще о любом новом проекте за парой исключений. Не хочу спорить на эту тему, просто насторожил его пост.
https://cliffle.com/blog/prefer-rust/
сама статья, если интересно
>Prefer Rust to C/C++ for new code
>inside the firmware community
Ясно.
Он может нахуй пройти.
Я у себя в компании Rust отсеял уже на уровне хакатона.
То есть мы хотели во время хакатона проверить соответствие Раста на уровне какого-нибудь близкого к железу POC, и уже на этом этапе быстро стало ясно, насколько он неадекватен для таких задач.
Ни библиотек нет, нихуя.
Наху пусть идет этот фанбой.
Дано:
struct A
{
using MyTypes = std::tuple<int, char>;
}
struct C : A {}
Нужно внутри C определить MyTypes, который был бы конкатенацией двух std::tuple. Если бы у меня был буст и вместо tuple был mpl::list<>, то я бы это через mpl::joint_view написал. А с tuple хз как.
struct C : A
{
using MyTypes = /std::tuple<int, char, long, Person>/;
}
Можно попробовать через tuple_cat, но что-то мне не очень нравится количество decltype и declval.
Всё ещё актуально, пожалуйста, кто-нибудь
3 гб оперативки, прямо сейчас убунта повисла на установке в виртуалбоксе сегодня последний день
Дебилушка, ты ведь даже код не выложил. Алсо, убунту бы поставил как вторую систему, вышло бы быстрее и производительнее
Ну а хули ты всё в последний день делаешь?
Я тебе сразу говорил, сгенерируй. Загугли утилиту вроде vcxproj to makefile или напиши cmakelists.txt и перегони в makefile (хотя тебе походу cmake и нужен, лол)
Я делаю это почти неделю уже, сокеты не знал абсолютно. По заданию мейкфайл надо именно написать, а не сгенерировать, и я гуглил, такие есть, но но на старые версии VS
Не пиши сложный мейкфайл. Напиши простой, без общих правил и переменных.
all: server client
server: server1.o server2.o
[tab]gcc -o server server1.o server2.o
server1.o: server1.cpp server1.h
[tab]gcc -c -o server1.o server1.cpp
Нутыпонел.
cout << static_cast<Matrix>(m. transpose())....
Анчоус, есть книга С++ для чайников, Стефан Р. Девис 2007 года, нормально, просто в свое время поккупал печатное издание, с тех пор и лежит
std::async - это обертка на тредом, возвращающая фучуру.
Корутины - это вообще абсолютно другое
Я сам нихуя не понимаю из всех обьяснений.
Т.е. на уровне "ЭТО ФУНКЦИЯ, КОТОРАЯ ИМЕЕТ СТЕЙТ И МОЖЕТ ВОЗВРАЩАТЬ НЕСКОЛЬКО РАЗ" - я понимаю. Уебищные примеры с питоном и его генераторами - я понимаю.
Он когда начинается co_await - все, выносите меня ногами вперед. Но да, я еще сильно не раскуривал эту тему, а надо...
Я вот тут делал и ничего умнее не придумал как выделить строку и просто перекопировать элементы. Может есть способы как весь участок памяти скопировать?
У Таненбаума в "архитектуре компьютера" очень компактное и доступное объяснение с картинками для даунов, только там корутины называются сопрограммами.
Спасибо, почитаю
Я перефразирую свой высер. Я понимаю, что такое "просто корутина, yield, и тд". Я не понимаю, как к этому относится co_await, и где там какая-то волшебная кооперативная многозадачность.
Надо на C++ Russia сходить, там Гор Нишанов заяснит.
как такое вообще реализуют? Такое копирование прям на уровне ядра сделано и нельзя реализовать самому?
Насколько я понял корутины асинхроны, но выполняются на одном треде. И если ты вызываешь внутри корутины другую корутину, то тебе нужно использовать co_await, чтобы подождать пока она вернет что-нибудь.
Я вызываю функцию внутри другой функции, и жду пока функция вернет чето. Чем это отличается от co_await? И причем, блядь, тут корутины, учитывая что это лишь функция со стейтом.
>>98306
Копирование элементов - это стандартный процессорный mov(и его деривативы, типа movq) - фактически. Положил кусочек строки в регистр из памяти. Потом из этого регистра положил в другой кусочек памяти.
В случае строк - ты можешь копировать от 1 байта за такт до 64 (при каком-нибудь адовом AVX512.
Регистр? Я думаю что контролер умеет копировать данные без этого.
Операция явно распространенная и засирать кэш и занимать регистры нет практической надобности
Тут нет никакого срача. Я это как пример необязательности PIO для манипуляций в ОЗУ.
Кто-нибудь курил Android NDK?
Нужно по работе пилить приложение для ведра, а, значит, осваивать котлин.
Но уже есть знания плюсов, получится ли полностью на этом NDK бахнуть приложение или там урезанный функционал плюсов и/или старый стандарт?
Где-то я нашел инфу, что на c++ можно только требующие скорости места писать, хотя Android Studio предлагает сделать проект только на них.
Элегантно. Я продумывал способ со сверткой, т.е. поэлементно цеплять к новому tuple типы, что больше времени потребовало бы.
У меня коллега запилил как-то на кюте блютус пульт управления под андроид, может там это проще:
https://doc.qt.io/qt-5/android.html
Смотри что нашел
>Как вы правильно указали, DMA_MEMCPY следует использовать для выполнения копирования RAM-to-RAM. Это описано в Documentation/dmaengine/provider.txt . Вот только соответствующий отрывок, пожалуйста, смотрите весь файл для получения более подробной информации:
https://codengineering.ru/q/kak-perenesti-dannye-cherez-dma-iz-operativnoy-pamyati-v-operativnuyu-pamyat-58776/
эх, скинул вам свою потешную резюмешку, думаю не возьмут, лол. На хедхантере написано что менеджер чекает только 36% резюме. Чому так?
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
>>1598613 (OP)
Корутина - это функция, которую можно ставить на паузу. Ко- в том плане, что две таких корутины могут работать одновременно. Одна поработала, недоделала, вторая поработала, недоделала, вернулась в первую, первая доделала, вернулась во вторую, доделала.
Заипешься отлаживать.
То есть когда одни русские люди пишут комментарии для других русских людей в проекте, который уж точно никогда не покинет рашку, на ломаном и одним им понятном английском - это нормально?
Это копия, сохраненная 5 апреля 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.