ПрограммированиеФорумОбщее

C++. Секреты быстрой компиляции (комментарии) (10 стр)

Страницы: 15 6 7 8 9 10
#135
(Правка: 11:42) 11:33, 24 ноя 2024

Aroch
Что то я не понял, какие семантические проверки для массива байтов?
А проверка файла - там только одна - то что он прочитался в буфер.


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

Но конкретная тема - она про оптимизацию больших билдов, если кто позабыл.
Поэтому, истории типа "я писал программу для дверного звонка, там нет динамической аллокации и вообще файлов" - они мимо.

#136
11:48, 24 ноя 2024

Der FlugSimulator
> Что то я не понял, какие семантические проверки для массива байтов?

std::array<char, 8> arr = {'1', '2', 3, 4, 5, '6', '7', '8', some_string};

Компилятор тебя с таким кодом завернет сразу. А тебе придется отдельно проверять что в файле всё корректно.

#137
13:01, 24 ноя 2024

Aroch
Какая то специально надуманная и несуществующая IRL ситуация.

Дело даже не в том, что из за строки в 8 символов никто и париться не будет, а в том что:
- или у тебя какая то осмысленная структура, которой надо специально манипулировать (а значит будyт и десериализации и валидации)
- или какой то неопределнный std::byte blob[] = {...}  типа видео с котом.

Я говорил строго про второе - пихать такое в  исходник было бы странно. А валидации - они вообще перпендикулярны данной теме.

#138
14:34, 25 ноя 2024

Der FlugSimulator
> А С++ 40

Да даже в компиляторе ассемблера под z80 есть импорт экспорт модулей без инклудов, а слоупоки из c++ только в 20м их изобрели

#139
14:39, 25 ноя 2024

entryway
> Поэтому все ждут std::embed

Есть incbin, он сейвит с выравниваниями simd, а ещё можно загрузить бинарь в экзешник как windows .rc. Можно ещё бинарь скомпилить как .o файл отдельной утилитой и линкером объединить. В коде писать extern const uint8_t* my_data.

Чтоб std::embed существовал, надо лимит на размер массива убрать

#140
16:12, 25 ноя 2024

Der FlugSimulator
> Нет, не надо. Это же твой файл.
То, что он мой, никак не уменьшает вероятность, скажем, при переносе проекта этот файл потерять, забыть обновить на новую версию, побить при копировании и т. п. Если не сделать сообщения об ошибках, очень легко, спустя пару месяцев, убить несколько часов на отладку абсолютно не связанного кода, только чтобы в конце обнаружить, что это просто ресурсы заглючило.

#141
(Правка: 26 ноя 2024, 0:11) 17:52, 25 ноя 2024

HPW-Dev
> Чтоб std::embed существовал, надо лимит на размер массива убрать
В Си embed уже есть.

https://godbolt.org/z/hec3Mz1G6

Только что проверил, #embed гигабайтного файла компилируется 25 секунд.

#142
18:07, 25 ноя 2024

}:+()___ [Smile]
> То, что он мой, никак не уменьшает вероятность, скажем, при переносе проекта этот файл потерять, забыть обновить на новую версию, побить при копировании и т. п.

У меня всё мое лежит в репе, и поэтому "убить несколько часов на отладку" было бы действительно глупо.
При том, что это вроде как что то важное, а в твоём варианте ещё и часть исходников.
Сейчас 2024, и все проекты переносят через git clone, а не на 5" дискетах.

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

#143
18:12, 25 ноя 2024

entryway
> #embed гигабайтного файла компилируется 25 секунд.

Есть опасение, что 100  десятимегабайтных будет медленнее.

#144
20:03, 25 ноя 2024

entryway
> #embed
Прикольно. Надеюсь, так можно любой файл включить. Только вопрос сразу появился, как получить длинну массива.

#145
20:08, 25 ноя 2024

Ещё для включения файла в exe можно добавить в проект специальный файл на ассемблере. Но это работает только на GCC (MinGW) и возможно на Clang.

#146
20:11, 25 ноя 2024

iw4nna.rock
> вопрос сразу появился, как получить длинну массива.
sizeof(quine)/sizeof(quine[0])

#147
20:35, 25 ноя 2024

entryway
> В Си embed уже есть

А поч в c++ нет x)

Страницы: 15 6 7 8 9 10
ПрограммированиеФорумОбщее