Как стать автором
Обновить
17
0

Пользователь

Отправить сообщение
basic_string::resize_and_overwrite

Willing to solve this for string without solving it for vector
SF F   N   A   SA
6  9   2   1   0

Рукалицо.


0# get_data_from_config(std::string_view) at /home/axolm/basic.cpp:600
1# bar(std::string_view) at /home/axolm/basic.cpp:6
2# main at /home/axolm/basic.cpp:17

А где вся эта роскошь (имена функций, файлов, номера строк и т.п.) будет храниться, прямо в бинарнике?

Предупреждение: текст насыщен Американским Патриотизмом, лицам с патологической непереносимостью данной субстанции рекомендуется воздержаться от чтения

Ожидаешь рассуждений о сакральности космоса для великого американского народа-богоносца, справедливом лидерстве в его покорении и необходимости сплотиться в кольце врагов.
А там просто рассказ о том, как корпорации и бюрократы спускают в унитаз деньги налогоплательщиков.

Какой-то у них там скучный и прагматичный патриотизм.
Всем бы такой.
Раньше так боролись с фрагментацией

Так можно бороться с фрагментацией, если у пользователя вагон свободного места.
Но у типичного пользователя свободного места примерно 0 и для установки патча он куда-то перенесет или удалит всякую мелочь. В результате файл, который изначально вполне мог быть одним куском, пересоздастся и равномерно размажется по всему устройству.

И здесь уже она вредит современным системам с играми на SSD, у которых распространенный объем сильно меньше HDD.

У них, говорят, и ресурс конечен, поэтому перезапись всей игры каждый раз как-то тоже не очень радует.
Вы видели, как обновляется, например, CP 2077?
Каждый патч — это набор бинарных диффов, вычисленных xdelta3 и им же накладываемых на бинарные сжатые ресурсы игры.

Если вы еще не прониклись, то на пальцах:
Разработчик берет последний мастер, берет последнее зарелизенное и каким-то батником делает диффы бинарных многогигабайтных архивов. Из этих диффов сооружается инсталлер.
Так как архивы сжаты, то минимальные изменения в моделях, текстурах и т.п. выливаются в огромные бинарные диффы.
Пользователь запускает это чудо инженерной мысли, и оно каждый такой многогигабайтный архив копирует во временный файл, применяет дифф, заменяет оригинал.
Поменял дизайнер тут модельку на 1 МБ, там пропущенный звук добавил — получите перезапись 100 ГБ на полчаса.

Это при том, что концепция «зарелизенные ресурсы отлиты в граните навсегда, каждый патч просто добавляет новый архив, который имеет приоритет» была еще в Quake четверть века назад (pak0.pak, pak1.pak и т.д.), а то и в Doom, не помню уже. И при том, что CP эту концепцию поддерживает.

Проблема больших патчей не в интернете. И даже не в кривых руках.
Проблема в общем пох…зме вида «и так сойдет, интернет быстрый, диски большие».
Статья вчера: «Аналитик EPAM убит в своей квартире»
Статья сегодня: «Айтишник убит в собственном доме»

Что случилось? EPAM мягко попросил не упоминать в негативном контексте?
Они там не в качестве основного продукта, а для совместимости со сторонним 32-битным ПО, как и все содержимое windows\syswow64. Видимо, подразумевалось «все двоичные файлы, с которыми типичный пользователь взаимодействует через меню Пуск». Но причина достаточно натянута, да.
Открыть дверь.
есть вероятность… просто остаться живым

«Вероятность», какая прелесть. Все по Фрейду.
Проблема: Ручное управление временем жизни и владением оказалось слишком сложным для того, чтобы даже очень опытные инженеры могли надежно выполнять правильные действия.
Решение: Запретить прямое использование сырых указателей, new и delete.

На третий день В 2021 году индеец Зоркий Глаз Google заметил, что в тюрьме нет четвёртой стены умные указатели облегчают жизнь.
Корпорация провела редизайн продукта, после чего появилась масса негативных отзывов
Интерфейс приложения тщательно переработан

До некоторых доходит с первого раза.
До некоторых не доходит никогда.
А зачем вы «случайным» образом «окавычиваете» каждое «второе» слово? Читать же неудобно.
Ну хоть не 146%, уже прогресс.
создатели быстро поняли, что продвигать разработки за рубеж лучше самому находясь за рубежом
«Быстро», ага.
Правилам ведения бизнеса уже 11 лет, но каждый начинает понимать только тогда, когда приходят за ним лично.
".count() это нельзя-нельзя" — почему???
Потому что count — это не секунды, это тики, которые в каждом duration свои.
То, что в duration<double>они совпадают с секундами — частный случай, который из типа этого duration не слишком очевиден.

Это, однако, совсем не означает, что так делать нельзя. Кастите на здоровье. Мой изначальный комментарий был о сравнении c фиксированной величиной, для чего переводить все в даблы не было никакой необходимости.

для чего вообще придуман duration_cast?
— Для преобразований с потерей информации (1337ms -> 1s)
— Для шаблонов.
sizeof(array) / sizeof(array[0]), наверное, встречали хоть раз и диссонанса от деления размера на размер не возникало?
Концептуально это то же самое.
Секунды делить на секунды — это безразмерная величина, а вовсе не секунды
Не секунды на секунды, а длительность интервала в неких внутренних значениях на длительность одной секунды в них же. Получая в результате да, безразмерное количество секунд, но вы же этого и хотите — double по определению не имеет размерности.

как вторая запись должна быть безопаснее первой?
Вторая запись явно говорит читателю, что автор кода хочет получить количество секунд. В первой же берется .count() каких-то внутренних попугаев и надо помнить (или идти читать), как устроен duration, какие там параметры шаблона и какой период по умолчанию.
О, я узнал новую для себя штуку (chrono_literals)
Суть не в литералах, они просто для удобства — с тем же успехом можно написать milliseconds(20). Суть в том, что chrono предлагает type safety и полный набор операций над временем. Rule of thumb: если хочется написать .count(), то, наверное, вы что-то делаете не так.

Или что-то более читаемое?
(now() - timestamp) / 1.0s
злоумышленники из США, Германии
Мировой империализм строит козни, как обычно.

Украины
Визитку нашли уже?

и Китая
С остальными все понятно, но Китай же типа союзник и партнер.
За такое можно и партбилет на стол положить.
Не хотелось писать про код, особенно после того, как по нему потоптались другие комментаторы, но…
double dt = std::chrono::duration<double>(Clock::now() - timestamp).count();
if (dt<.02)

Зачем так глумиться над chrono? Это хорошая библиотека, она такого не заслуживает.

if (Clock::now() - timestamp < 20ms)

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность