|
Прекомпилированные заголовочники
|
|||
---|---|---|---|
#18+
Неожиданный вопрос. :) Я знаю, что это. У меня такой вопрос: всё же их стоит использовать или нет? Как-то сложилось в моей компании, считается что не стоит их использовать. Я даже забыл об их существовании. И всё же: это бест практикс или это плохо? Пока разработка идёт в Студии, но возможно когда-то будет переход на gcc. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2020, 11:28 |
|
Прекомпилированные заголовочники
|
|||
---|---|---|---|
#18+
авторIMHO the popularity of header-only libs is caused by the popularity of template meta programming. For most compilers, templated libs must be header-only because the compiler can only start. the main compile process when the type parameters are provided, and for full compilation and optimization the compiler must see "both at once" - the library code plus the template parameter. values. That makes it impossible (or at least hard) to produce any "precompiled" compilation units for such a library. https://softwareengineering.stackexchange.com/questions/305618/are-header-only-libraries-more-efficient автор Libraries Separating the class definition and class implementation is very common for libraries that you can use to extend your program. Throughout your programs, you’ve "#included" headers that belong. to the standard library, such as iostream, string, vector, array, and other. Notice that you haven’t needed to add iostream.cpp, string.cpp, vector.cpp, or array.cpp into your projects. Your program needs the declarations from the header files in order for the compiler to validate you’re writing programs that are syntactically correct. However, the implementations for the classes that belong to the C++ standard library is contained in a precompiled file that is linked in at the link stage. You never see the code. Outside of some open source software (where both .h and .cpp files are provided), most 3rd party libraries provide only header files, along with a precompiled library file. There are several reasons for this: 1) It’s faster to link a precompiled library than to recompile it every time you need it, 2) a single copy of a precompiled library can be shared by many applications, whereas compiled code gets compiled into every executable that uses it (inflating file sizes), 3) intellectual property reasons (you don’t want people stealing your code). ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2020, 13:00 |
|
Прекомпилированные заголовочники
|
|||
---|---|---|---|
#18+
Алексей Роза, Это тут при чём? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2020, 20:19 |
|
Прекомпилированные заголовочники
|
|||
---|---|---|---|
#18+
petrav всё же их стоит использовать или нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2020, 21:28 |
|
Прекомпилированные заголовочники
|
|||
---|---|---|---|
#18+
petrav Это тут при чём? :) там 2 ответа (из разных источников) на ваш вопрос: petrav У меня такой вопрос: всё же их стоит использовать или нет? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2020, 23:01 |
|
Прекомпилированные заголовочники
|
|||
---|---|---|---|
#18+
Алексей Роза petrav Это тут при чём? :) там 2 ответа (из разных источников) на ваш вопрос: petrav У меня такой вопрос: всё же их стоит использовать или нет? У меня, конечно, не очень с английским, но мне кажется, что в приведённой вами цитате речь идёт о заранее откомпилированных файлах реализации в подключаемых библиотеках. Разве нет? Не могли бы подробнее пояснить? ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2020, 23:33 |
|
Прекомпилированные заголовочники
|
|||
---|---|---|---|
#18+
Хотя в первой цитате, да, написано, что прекомпилировать шаблоны бесполезно. Но вот авторы PVS Studio с этим не согласны. ... |
|||
:
Нравится:
Не нравится:
|
|||
12.07.2020, 23:37 |
|
Прекомпилированные заголовочники
|
|||
---|---|---|---|
#18+
ну отнесите текст сюда и будет счастье. в первой цитате речь про шаблоны, для которых прекомпилированные заголовки становятся проблемой. во второй: авторБиблиотеки Разделение определения класса и реализации класса очень распространено для библиотек, которые вы можете использовать для расширения вашей программы. Во всех ваших программах у вас есть "#included" заголовки, которые принадлежат стандартной библиотеке, такие как iostream, string, vector, array и другие. Обратите внимание, что вам не нужно добавлять iostream.cpp, string.cpp, vector.cpp или array.cpp в ваши проекты. Ваша программа нуждается в объявлениях из заголовочных файлов, чтобы компилятор мог проверить, что вы пишете программы, которые синтаксически верны. Однако реализации для классов, которые принадлежат стандартной библиотеке C++, содержатся в предварительно скомпилированном файле, который связан на этапе компоновки. Вы никогда не увидите код. За исключением некоторых программ с открытым исходным кодом (где предоставляются файлы .h и .cpp), большинство сторонних библиотек предоставляют только заголовочные файлы вместе с предварительно скомпилированным библиотечным файлом. На это есть несколько причин: 1) Быстрее связать предварительно скомпилированную библиотеку, чем перекомпилировать ее каждый раз, когда вам это нужно, 2) одна копия предварительно скомпилированной библиотеки может использоваться многими приложениями, в то время как скомпилированный код компилируется в каждый исполняемый файл, который его использует (раздувая размеры файлов), 3) причины интеллектуальной собственности (вы не хотите, чтобы люди крали ваш код). здесь написано, чем удобно разделение на .h и .c Можете ещё тут почитать. зы: STL и Boost держат все свои сырцы в .h ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2020, 12:30 |
|
Прекомпилированные заголовочники
|
|||
---|---|---|---|
#18+
egorych petrav всё же их стоит использовать или нет? ТС, у вас более 5 минут? ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2020, 12:50 |
|
Прекомпилированные заголовочники
|
|||
---|---|---|---|
#18+
petrav это бест практикс или это плохо? Если не ошибаюсь, то когда не используются - при компиляции будут пересобраны все зависимые хедеры, иначе будут использоваться прекомпиленные хедеры, и это сократит время сборки. Но если зависимостей мало, то в большом количестве случаев - всё равно, время на компиляцию зависимых заголовков будет небольшим. Меньше #incude в заголовках - это бест практикс. А вот в случае использования, опять могу ошибаться, могут возникать проблемы, которые лечатся только полной перекомпиляцией проекта (таблетки "Ребилдол"). ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2020, 12:56 |
|
Прекомпилированные заголовочники
|
|||
---|---|---|---|
#18+
А потом можно почитать требования к такой прекомпиляции. Например "такой заголовок может быть только один" или "там не могут использоваться макросы". И понять, что дело тухлое. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2020, 12:59 |
|
Прекомпилированные заголовочники
|
|||
---|---|---|---|
#18+
PetroNotC Sharp egorych пропущено... пока полная пересборка проекта не переваливает за пяток минут, можно не париться и прекомпилированные заголовки не использовать ) ТС, у вас более 5 минут? Ну как-то около 5-ти. Вот, кстати, статью интересную про прекомпилированные заголовочники нашёл. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2020, 13:17 |
|
Прекомпилированные заголовочники
|
|||
---|---|---|---|
#18+
petrav, Хммм. Разбейте по модулям работающим в разных процессах. А билд всего и вся делайте ночью. Так делают не только в плюсах. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2020, 15:16 |
|
Прекомпилированные заголовочники
|
|||
---|---|---|---|
#18+
CEMb Меньше #incude в заголовках - это бест практикс. а сколько людей тут не знает о том, что template компилируется, только если используется? на самом деле, я не вижу ничего плохого в том, чтобы отдельно компилить /core/, /app/, /какой_то_микросервис/ но вот каждый файл - это сущий гемор. Шаблоны практичней. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2020, 15:27 |
|
Прекомпилированные заголовочники
|
|||
---|---|---|---|
#18+
Алексей Роза CEMb Меньше #incude в заголовках - это бест практикс. а сколько людей тут не знает о том, что template компилируется, только если используется? Статью почитайте что я выше выложил. Там есть несколько этапов для шаблонов результаты которых можно закешировать в прекомпилированных заголовочниках: - Препроцессинг. - Разбор на лексемы. - Проверка синтаксиса. Да наверняка много ещё чего. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2020, 15:35 |
|
Прекомпилированные заголовочники
|
|||
---|---|---|---|
#18+
там во всей статье слово "шаблон" встречается 0 раз Статья то вообще про stdafx.h и весь тот гемор, который прилетает счастливым его пользователям. Я несчастный пользователь линуха, поэтому от VS далёк полностью. Ничего нового в статье не узнал. Кроме того, что от stdafx.h лучше быть дальше, чем ближе. В том пдф выше всё компактней, понятней и по теме. ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2020, 16:14 |
|
Прекомпилированные заголовочники
|
|||
---|---|---|---|
#18+
Алексей Роза там во всей статье слово "шаблон" встречается 0 раз Статья то вообще про stdafx.h и весь тот гемор, который прилетает счастливым его пользователям. Значит плохо читали. :) ... |
|||
:
Нравится:
Не нравится:
|
|||
13.07.2020, 23:08 |
|
Прекомпилированные заголовочники
|
|||
---|---|---|---|
#18+
Алексей Роза зы: STL и Boost держат все свои сырцы в .h Это неверно. ... |
|||
:
Нравится:
Не нравится:
|
|||
14.07.2020, 23:52 |
|
Прекомпилированные заголовочники
|
|||
---|---|---|---|
#18+
на линухе верно Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20.
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18.
... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2020, 00:14 |
|
Прекомпилированные заголовочники
|
|||
---|---|---|---|
#18+
Алексей Роза на линухе верно На Линуксе вы можете использовать boost::filesystem или boost::mutex без линковки библиотек? Модератор: Редактировано ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2020, 00:30 |
|
Прекомпилированные заголовочники
|
|||
---|---|---|---|
#18+
вы что там под градусом чтоли Алексей Роза зы: STL и Boost держат все свои сырцы в .h эта "таблица" и есть сырцы. а линковка вообще причём? речь была про то, что STL не юзает прекомпиляцию, а повсеместно юзает шаблоны в голых хедерах. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2020, 01:48 |
|
Прекомпилированные заголовочники
|
|||
---|---|---|---|
#18+
Алексей Роза вы что там под градусом чтоли Алексей Роза зы: STL и Boost держат все свои сырцы в .h эта "таблица" и есть сырцы. Эта таблица не исходники, а список файлов. Алексей Роза а линковка вообще причём? речь была про то, что STL не юзает прекомпиляцию, а повсеместно юзает шаблоны в голых хедерах. Не съезжайте. Речь была про это: Алексей Роза зы: STL и Boost держат все свои сырцы в .h Это неверно. Иначе на сайте boost не лежала бы инструкция по сборке Boost в том числе и для Unix-like систем. С библиотекой STL тоже самое. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2020, 02:15 |
|
Прекомпилированные заголовочники
|
|||
---|---|---|---|
#18+
мда давайте вы это утром прочитаете ещё раз, чтобы вам стыдно стало. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2020, 02:18 |
|
Прекомпилированные заголовочники
|
|||
---|---|---|---|
#18+
Алексей Роза, Предлагаю начать обсуждение с такого файла: Код: plaintext
И ответить заодно на вопрос. Если всё обстоит вот так: Алексей Роза зы: STL и Boost держат все свои сырцы в .h То почему целый ряд под-библиотек Boost-а требует сборки? И на выходе lib и dll ? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2020, 02:56 |
|
Прекомпилированные заголовочники
|
|||
---|---|---|---|
#18+
чё-то не отпустило вас до сих пор petrav Эта таблица не исходники, а список файлов. .h-файлов! чистых хедеров с шаблонами, которые просто втыкаются в main.cpp и вы получаете 1 .o-файл. А вот так выглядят файлы с сабжем: Код: plaintext 1. 2.
где .cpp - компилируется в .o а .h вставляется в ваш код и содержит только: описание функций, макросы, константы, виртуалки и т.п. Да, вы можете взять те .h-файлы из STL, создать под каждый .cpp и ПРЕкомпилировать себе кучу .o, которые потом будете юзать повторно БЕЗ доп.компиляция. Только нахуа?! Я же написал русским по белому специально для вас: Алексей Роза а сколько людей тут не знает о том, что template компилируется, только если используется? Когда вы компилируете .h, где сплошные шаблоны, вы НЕ компилируете весь этот код к себе. Это код НЕ существует, пока вы ему параметр не дадите. Компилятор НЕ создаёт эти функции, пока вы их не вызовите с параметром. Без параметра их НЕТ. И вот это решает проблему с грудой лишнего кода, теперь можно делать, как я сказал: Алексей Роза на самом деле, я не вижу ничего плохого в том, чтобы отдельно компилить /core/, /app/, /какой_то_микросервис/ но вот каждый файл - это сущий гемор. Шаблоны практичней. Тогда к этому никогда и не придём: egorych пока полная пересборка проекта не переваливает за пяток минут , можно не париться и прекомпилированные заголовки не использовать ) Мне вот лично совершенно не понравилось отдельно описывать все эти ф-и. Т.е. по факту в разных файлах держать одно и то же. В одном изменил параметры, а в другом забыл = ошибка. petrav Вы можете что-то разумное сказать? А вы что-то разумное понять можете? Что за хамство началось. Вы тут точно за помощью? petrav То почему целый ряд под-библиотек Boost-а требует сборки? И на выходе lib и dll ? какое отношение это вообще имеет к сабжу?? ... |
|||
:
Нравится:
Не нравится:
|
|||
15.07.2020, 11:48 |
|
|
start [/forum/topic.php?fid=57&msg=39979047&tid=2017341]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
184ms |
get topic data: |
13ms |
get forum data: |
2ms |
get page messages: |
75ms |
get tp. blocked users: |
1ms |
others: | 17ms |
total: | 323ms |
0 / 0 |