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 эту концепцию поддерживает.
Проблема больших патчей не в интернете. И даже не в кривых руках.
Проблема в общем пох…зме вида «и так сойдет, интернет быстрый, диски большие».
Они там не в качестве основного продукта, а для совместимости со сторонним 32-битным ПО, как и все содержимое windows\syswow64. Видимо, подразумевалось «все двоичные файлы, с которыми типичный пользователь взаимодействует через меню Пуск». Но причина достаточно натянута, да.
Проблема: Ручное управление временем жизни и владением оказалось слишком сложным для того, чтобы даже очень опытные инженеры могли надежно выполнять правильные действия. Решение: Запретить прямое использование сырых указателей, new и delete.
На третий день В 2021 году индеец Зоркий Глаз Google заметил, что в тюрьме нет четвёртой стены умные указатели облегчают жизнь.
Потому что count — это не секунды, это тики, которые в каждом duration свои.
То, что в duration<double>они совпадают с секундами — частный случай, который из типа этого duration не слишком очевиден.
Это, однако, совсем не означает, что так делать нельзя. Кастите на здоровье. Мой изначальный комментарий был о сравнении c фиксированной величиной, для чего переводить все в даблы не было никакой необходимости.
для чего вообще придуман duration_cast?
— Для преобразований с потерей информации (1337ms -> 1s)
— Для шаблонов.
Секунды делить на секунды — это безразмерная величина, а вовсе не секунды
Не секунды на секунды, а длительность интервала в неких внутренних значениях на длительность одной секунды в них же. Получая в результате да, безразмерное количество секунд, но вы же этого и хотите — double по определению не имеет размерности.
как вторая запись должна быть безопаснее первой?
Вторая запись явно говорит читателю, что автор кода хочет получить количество секунд. В первой же берется .count() каких-то внутренних попугаев и надо помнить (или идти читать), как устроен duration, какие там параметры шаблона и какой период по умолчанию.
Суть не в литералах, они просто для удобства — с тем же успехом можно написать milliseconds(20). Суть в том, что chrono предлагает type safety и полный набор операций над временем. Rule of thumb: если хочется написать .count(), то, наверное, вы что-то делаете не так.
Рукалицо.
А где вся эта роскошь (имена функций, файлов, номера строк и т.п.) будет храниться, прямо в бинарнике?
Ожидаешь рассуждений о сакральности космоса для великого американского народа-богоносца, справедливом лидерстве в его покорении и необходимости сплотиться в кольце врагов.
А там просто рассказ о том, как корпорации и бюрократы спускают в унитаз деньги налогоплательщиков.
Какой-то у них там скучный и прагматичный патриотизм.
Всем бы такой.
Так можно бороться с фрагментацией, если у пользователя вагон свободного места.
Но у типичного пользователя свободного места примерно 0 и для установки патча он куда-то перенесет или удалит всякую мелочь. В результате файл, который изначально вполне мог быть одним куском, пересоздастся и равномерно размажется по всему устройству.
У них, говорят, и ресурс конечен, поэтому перезапись всей игры каждый раз как-то тоже не очень радует.
Каждый патч — это набор бинарных диффов, вычисленных xdelta3 и им же накладываемых на бинарные сжатые ресурсы игры.
Если вы еще не прониклись, то на пальцах:
Разработчик берет последний мастер, берет последнее зарелизенное и каким-то батником делает диффы бинарных многогигабайтных архивов. Из этих диффов сооружается инсталлер.
Так как архивы сжаты, то минимальные изменения в моделях, текстурах и т.п. выливаются в огромные бинарные диффы.
Пользователь запускает это чудо инженерной мысли, и оно каждый такой многогигабайтный архив копирует во временный файл, применяет дифф, заменяет оригинал.
Поменял дизайнер тут модельку на 1 МБ, там пропущенный звук добавил — получите перезапись 100 ГБ на полчаса.
Это при том, что концепция «зарелизенные ресурсы отлиты в граните навсегда, каждый патч просто добавляет новый архив, который имеет приоритет» была еще в Quake четверть века назад (pak0.pak, pak1.pak и т.д.), а то и в Doom, не помню уже. И при том, что CP эту концепцию поддерживает.
Проблема больших патчей не в интернете. И даже не в кривых руках.
Проблема в общем пох…зме вида «и так сойдет, интернет быстрый, диски большие».
Статья сегодня: «Айтишник убит в собственном доме»
Что случилось? EPAM мягко попросил не упоминать в негативном контексте?
«Вероятность», какая прелесть. Все по Фрейду.
На третий деньВ 2021 годуиндеец Зоркий ГлазGoogle заметил, чтов тюрьме нет четвёртой стеныумные указатели облегчают жизнь.До некоторых доходит с первого раза.
До некоторых не доходит никогда.
Правилам ведения бизнеса уже 11 лет, но каждый начинает понимать только тогда, когда приходят за ним лично.
То, что в
duration<double>
они совпадают с секундами — частный случай, который из типа этого duration не слишком очевиден.Это, однако, совсем не означает, что так делать нельзя. Кастите на здоровье. Мой изначальный комментарий был о сравнении c фиксированной величиной, для чего переводить все в даблы не было никакой необходимости.
— Для преобразований с потерей информации (1337ms -> 1s)
— Для шаблонов.
sizeof(array) / sizeof(array[0])
, наверное, встречали хоть раз и диссонанса от деления размера на размер не возникало?Концептуально это то же самое.
Вторая запись явно говорит читателю, что автор кода хочет получить количество секунд. В первой же берется .count() каких-то внутренних попугаев и надо помнить (или идти читать), как устроен duration, какие там параметры шаблона и какой период по умолчанию.
milliseconds(20)
. Суть в том, что chrono предлагает type safety и полный набор операций над временем. Rule of thumb: если хочется написать .count(), то, наверное, вы что-то делаете не так.Визитку нашли уже?
С остальными все понятно, но Китай же типа союзник и партнер.
За такое можно и партбилет на стол положить.
Зачем так глумиться над chrono? Это хорошая библиотека, она такого не заслуживает.