powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / C++ [игнор отключен] [закрыт для гостей] / Прекомпилированные заголовочники
58 сообщений из 58, показаны все 3 страниц
Прекомпилированные заголовочники
    #39978583
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Неожиданный вопрос. :)

Я знаю, что это. У меня такой вопрос: всё же их стоит использовать или нет? Как-то сложилось в моей компании, считается что не стоит их использовать. Я даже забыл об их существовании. И всё же: это бест практикс или это плохо?

Пока разработка идёт в Студии, но возможно когда-то будет переход на gcc.
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39978606
автор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).
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39978713
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза,

Это тут при чём? :)
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39978717
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
всё же их стоит использовать или нет?
пока полная пересборка проекта не переваливает за пяток минут, можно не париться и прекомпилированные заголовки не использовать )
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39978735
petrav
Это тут при чём? :)

там 2 ответа (из разных источников) на ваш вопрос:
petrav
У меня такой вопрос: всё же их стоит использовать или нет?
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39978739
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза
petrav
Это тут при чём? :)

там 2 ответа (из разных источников) на ваш вопрос:
petrav
У меня такой вопрос: всё же их стоит использовать или нет?

У меня, конечно, не очень с английским, но мне кажется, что в приведённой вами цитате речь идёт о заранее откомпилированных файлах реализации в подключаемых библиотеках. Разве нет? Не могли бы подробнее пояснить?
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39978742
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хотя в первой цитате, да, написано, что прекомпилировать шаблоны бесполезно. Но вот авторы PVS Studio с этим не согласны.
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39978889
ну отнесите текст сюда и будет счастье.
в первой цитате речь про шаблоны, для которых прекомпилированные заголовки становятся проблемой.
во второй:
авторБиблиотеки
Разделение определения класса и реализации класса очень распространено для библиотек, которые вы можете использовать для расширения вашей программы. Во всех ваших программах у вас есть "#included" заголовки, которые принадлежат стандартной библиотеке, такие как iostream, string, vector, array и другие. Обратите внимание, что вам не нужно добавлять iostream.cpp, string.cpp, vector.cpp или array.cpp в ваши проекты.
Ваша программа нуждается в объявлениях из заголовочных файлов, чтобы компилятор мог проверить, что вы пишете программы, которые синтаксически верны.
Однако реализации для классов, которые принадлежат стандартной библиотеке C++, содержатся в предварительно скомпилированном файле, который связан на этапе компоновки. Вы никогда не увидите код.

За исключением некоторых программ с открытым исходным кодом (где предоставляются файлы .h и .cpp), большинство сторонних библиотек предоставляют только заголовочные файлы вместе с предварительно скомпилированным библиотечным файлом.
На это есть несколько причин:
1) Быстрее связать предварительно скомпилированную библиотеку, чем перекомпилировать ее каждый раз, когда вам это нужно,
2) одна копия предварительно скомпилированной библиотеки может использоваться многими приложениями, в то время как скомпилированный код компилируется в каждый исполняемый файл, который его использует (раздувая размеры файлов),
3) причины интеллектуальной собственности (вы не хотите, чтобы люди крали ваш код).
здесь написано, чем удобно разделение на .h и .c

Можете ещё тут почитать.

зы: STL и Boost держат все свои сырцы в .h
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39978907
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych
petrav
всё же их стоит использовать или нет?
пока полная пересборка проекта не переваливает за пяток минут, можно не париться и прекомпилированные заголовки не использовать )
+1
ТС, у вас более 5 минут?
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39978910
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav
это бест практикс или это плохо?
я так понимаю, это зависит сильно от того, как развесисто используются зависимости.
Если не ошибаюсь, то когда не используются - при компиляции будут пересобраны все зависимые хедеры, иначе будут использоваться прекомпиленные хедеры, и это сократит время сборки. Но если зависимостей мало, то в большом количестве случаев - всё равно, время на компиляцию зависимых заголовков будет небольшим.
Меньше #incude в заголовках - это бест практикс.
А вот в случае использования, опять могу ошибаться, могут возникать проблемы, которые лечатся только полной перекомпиляцией проекта (таблетки "Ребилдол").
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39978916
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А потом можно почитать требования к такой прекомпиляции. Например "такой заголовок может
быть только один" или "там не могут использоваться макросы".
И понять, что дело тухлое.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39978931
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PetroNotC Sharp
egorych
пропущено...
пока полная пересборка проекта не переваливает за пяток минут, можно не париться и прекомпилированные заголовки не использовать )
+1
ТС, у вас более 5 минут?

Ну как-то около 5-ти.

Вот, кстати, статью интересную про прекомпилированные заголовочники нашёл.
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39979032
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
petrav,
Хммм. Разбейте по модулям работающим в разных процессах.
А билд всего и вся делайте ночью.
Так делают не только в плюсах.
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39979047
CEMb
Меньше #incude в заголовках - это бест практикс.

а сколько людей тут не знает о том, что template компилируется, только если используется?

на самом деле, я не вижу ничего плохого в том, чтобы отдельно компилить /core/, /app/, /какой_то_микросервис/
но вот каждый файл - это сущий гемор. Шаблоны практичней.
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39979055
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза
CEMb
Меньше #incude в заголовках - это бест практикс.

а сколько людей тут не знает о том, что template компилируется, только если используется?

Статью почитайте что я выше выложил. Там есть несколько этапов для шаблонов результаты которых можно закешировать в прекомпилированных заголовочниках:

- Препроцессинг.
- Разбор на лексемы.
- Проверка синтаксиса.

Да наверняка много ещё чего.
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39979084
там во всей статье слово "шаблон" встречается 0 раз
Статья то вообще про stdafx.h и весь тот гемор, который прилетает счастливым его пользователям.
Я несчастный пользователь линуха, поэтому от VS далёк полностью.
Ничего нового в статье не узнал. Кроме того, что от stdafx.h лучше быть дальше, чем ближе.
В том пдф выше всё компактней, понятней и по теме.
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39979255
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза
там во всей статье слово "шаблон" встречается 0 раз
Статья то вообще про stdafx.h и весь тот гемор, который прилетает счастливым его пользователям.

Значит плохо читали. :)
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39979672
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза

зы: STL и Boost держат все свои сырцы в .h

Это неверно.
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39979675
на линухе верно
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
:/usr/include/c++/8/bits$ ls
algorithmfwd.h             deque.tcc                 indirect_array.h         ostream.tcc          regex_scanner.h      stl_iterator_base_funcs.h  streambuf.tcc
allocated_ptr.h            enable_special_members.h  invoke.h                 parse_numbers.h      regex_scanner.tcc    stl_iterator_base_types.h  stream_iterator.h
allocator.h                exception_defines.h       ios_base.h               postypes.h           regex.tcc            stl_iterator.h             stringfwd.h
alloc_traits.h             exception.h               istream.tcc              predefined_ops.h     shared_ptr_atomic.h  stl_list.h                 string_view.tcc
atomic_base.h              exception_ptr.h           list.tcc                 ptr_traits.h         shared_ptr_base.h    stl_map.h                  uniform_int_dist.h
atomic_futex.h             forward_list.h            locale_classes.h         quoted_string.h      shared_ptr.h         stl_multimap.h             unique_ptr.h
atomic_lockfree_defines.h  forward_list.tcc          locale_classes.tcc       random.h             slice_array.h        stl_multiset.h             unordered_map.h
basic_ios.h                fs_dir.h                  locale_conv.h            random.tcc           specfun.h            stl_numeric.h              unordered_set.h
basic_ios.tcc              fs_fwd.h                  locale_facets.h          range_access.h       sstream.tcc          stl_pair.h                 uses_allocator.h
basic_string.h             fs_ops.h                  locale_facets_nonio.h    refwrap.h            std_abs.h            stl_queue.h                valarray_after.h
basic_string.tcc           fs_path.h                 locale_facets_nonio.tcc  regex_automaton.h    std_function.h       stl_raw_storage_iter.h     valarray_array.h
boost_concept_check.h      fstream.tcc               locale_facets.tcc        regex_automaton.tcc  std_mutex.h          stl_relops.h               valarray_array.tcc
c++0x_warning.h            functexcept.h             localefwd.h              regex_compiler.h     stl_algobase.h       stl_set.h                  valarray_before.h
char_traits.h              functional_hash.h         mask_array.h             regex_compiler.tcc   stl_algo.h           stl_stack.h                vector.tcc
codecvt.h                  gslice_array.h            memoryfwd.h              regex_constants.h    stl_bvector.h        stl_tempbuf.h
concept_check.h            gslice.h                  move.h                   regex_error.h        stl_construct.h      stl_tree.h
cpp_type_traits.h          hash_bytes.h              nested_exception.h       regex_executor.h     stl_deque.h          stl_uninitialized.h
cxxabi_forced.h            hashtable.h               node_handle.h            regex_executor.tcc   stl_function.h       stl_vector.h
cxxabi_init_exception.h    hashtable_policy.h        ostream_insert.h         regex.h              stl_heap.h           streambuf_iterator.h



Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
:/usr/include/boost/asio$ ls
associated_allocator.hpp     basic_waitable_timer.hpp       detail                         io_service.hpp                 serial_port.hpp              time_traits.hpp
associated_executor.hpp      bind_executor.hpp              dispatch.hpp                   io_service_strand.hpp          serial_port_service.hpp      ts
async_result.hpp             buffered_read_stream_fwd.hpp   error.hpp                      ip                             signal_set.hpp               unyield.hpp
basic_datagram_socket.hpp    buffered_read_stream.hpp       execution_context.hpp          is_executor.hpp                signal_set_service.hpp       use_future.hpp
basic_deadline_timer.hpp     buffered_stream_fwd.hpp        executor.hpp                   is_read_buffered.hpp           socket_acceptor_service.hpp  uses_executor.hpp
basic_io_object.hpp          buffered_stream.hpp            executor_work_guard.hpp        is_write_buffered.hpp          socket_base.hpp              version.hpp
basic_raw_socket.hpp         buffered_write_stream_fwd.hpp  experimental                   local                          spawn.hpp                    waitable_timer_service.hpp
basic_seq_packet_socket.hpp  buffered_write_stream.hpp      experimental.hpp               packaged_task.hpp              ssl                          wait_traits.hpp
basic_serial_port.hpp        buffer.hpp                     generic                        placeholders.hpp               ssl.hpp                      windows
basic_signal_set.hpp         buffers_iterator.hpp           handler_alloc_hook.hpp         posix                          steady_timer.hpp             write_at.hpp
basic_socket_acceptor.hpp    completion_condition.hpp       handler_continuation_hook.hpp  post.hpp                       strand.hpp                   write.hpp
basic_socket.hpp             connect.hpp                    handler_invoke_hook.hpp        raw_socket_service.hpp         streambuf.hpp                yield.hpp
basic_socket_iostream.hpp    coroutine.hpp                  handler_type.hpp               read_at.hpp                    stream_socket_service.hpp
basic_socket_streambuf.hpp   datagram_socket_service.hpp    high_resolution_timer.hpp      read.hpp                       system_context.hpp
basic_streambuf_fwd.hpp      deadline_timer.hpp             impl                           read_until.hpp                 system_executor.hpp
basic_streambuf.hpp          deadline_timer_service.hpp     io_context.hpp                 seq_packet_socket_service.hpp  system_timer.hpp
basic_stream_socket.hpp      defer.hpp
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39979679
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза
на линухе верно

На Линуксе вы можете использовать boost::filesystem или boost::mutex без линковки библиотек?
Модератор: Редактировано
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39979691
вы что там под градусом чтоли
Алексей Роза
зы: STL и Boost держат все свои сырцы в .h

эта "таблица" и есть сырцы.
а линковка вообще причём?
речь была про то, что STL не юзает прекомпиляцию, а повсеместно юзает шаблоны в голых хедерах.
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39979693
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза
вы что там под градусом чтоли
Алексей Роза
зы: STL и Boost держат все свои сырцы в .h

эта "таблица" и есть сырцы.

Эта таблица не исходники, а список файлов.

Алексей Роза
а линковка вообще причём?
речь была про то, что STL не юзает прекомпиляцию, а повсеместно юзает шаблоны в голых хедерах.

Не съезжайте. Речь была про это:
Алексей Роза
зы: STL и Boost держат все свои сырцы в .h

Это неверно. Иначе на сайте boost не лежала бы инструкция по сборке Boost в том числе и для Unix-like систем. С библиотекой STL тоже самое.
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39979694
мда
давайте вы это утром прочитаете ещё раз, чтобы вам стыдно стало.
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39979697
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза,

Предлагаю начать обсуждение с такого файла:

Код: plaintext
boost\asio\impl\src.cpp

И ответить заодно на вопрос. Если всё обстоит вот так:
Алексей Роза
зы: STL и Boost держат все свои сырцы в .h

То почему целый ряд под-библиотек Boost-а требует сборки? И на выходе lib и dll ?
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39979826
чё-то не отпустило вас до сих пор
petrav
Эта таблица не исходники, а список файлов.

.h-файлов! чистых хедеров с шаблонами, которые просто втыкаются в main.cpp и вы получаете 1 .o-файл.
А вот так выглядят файлы с сабжем:
Код: plaintext
1.
2.
config.h     date.h            fcgi_handler.h   fcgi_server.h     gearman.h         json.cpp  main.cpp  Makefile     regex.h        sitemap_handler.cpp  url.h       wp_handler.cpp  xml.h
config.h.in  fcgi_handler.cpp  fcgi_server.cpp  gearman_client.h  gearman_worker.h  json.h    main.h    Makefile.in  scoped_lock.h  sitemap_handler.h    worker.cpp  wp_handler.h


где .cpp - компилируется в .o
а .h вставляется в ваш код и содержит только: описание функций, макросы, константы, виртуалки и т.п.

Да, вы можете взять те .h-файлы из STL, создать под каждый .cpp и ПРЕкомпилировать себе кучу .o, которые потом будете юзать повторно БЕЗ доп.компиляция.
Только нахуа?!
Я же написал русским по белому специально для вас:
Алексей Роза
а сколько людей тут не знает о том, что template компилируется, только если используется?

Когда вы компилируете .h, где сплошные шаблоны, вы НЕ компилируете весь этот код к себе.
Это код НЕ существует, пока вы ему параметр не дадите.
Компилятор НЕ создаёт эти функции, пока вы их не вызовите с параметром.
Без параметра их НЕТ.

И вот это решает проблему с грудой лишнего кода, теперь можно делать, как я сказал:
Алексей Роза
на самом деле, я не вижу ничего плохого в том, чтобы отдельно компилить /core/, /app/, /какой_то_микросервис/
но вот каждый файл - это сущий гемор. Шаблоны практичней.

Тогда к этому никогда и не придём:
egorych
пока полная пересборка проекта не переваливает за пяток минут , можно не париться и прекомпилированные заголовки не использовать )

Мне вот лично совершенно не понравилось отдельно описывать все эти ф-и. Т.е. по факту в разных файлах держать одно и то же. В одном изменил параметры, а в другом забыл = ошибка.
petrav
Вы можете что-то разумное сказать?

А вы что-то разумное понять можете? Что за хамство началось. Вы тут точно за помощью?
petrav
То почему целый ряд под-библиотек Boost-а требует сборки? И на выходе lib и dll ?

какое отношение это вообще имеет к сабжу??
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39979829
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза STL не юзает прекомпиляциюудивительная фраза) Вы понимаете вообще, зачем нужна прекомпиляция и что именно прекомпилируется?
Алексей Розазы: STL и Boost держат все свои сырцы в .hэта фраза ещё удивительней) попробуйте развернуть аббревиатуру STL, возможно станет понятно, почему весь её код находится в хидерах))
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39979831
egorych
Вы понимаете вообще, зачем нужна прекомпиляция и что именно прекомпилируется?

ага. а вы?
egorych
попробуйте развернуть аббревиатуру STL, возможно станет понятно, почему весь её код находится в хидерах))

"Standard Template Library"
и где у вас диссонанс с тем, что я писал выше про шаблоны?
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39979833
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза
Мне вот лично совершенно не понравилось отдельно описывать все эти ф-и. Т.е. по факту в разных файлах держать одно и то же. В одном изменил параметры, а в другом забыл = ошибка
это пройдёт) когда одно небольшое изменение в коде приватной функции класса начнёт провоцировать ( почти ) полную пересборку проекта вместо перекомпиляции одного .cpp, тогда и приходит понимание, что держать весь код в хидере не очень хорошая идея
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39979859
да какую нафиг "полную"
я не программирую одновременно И core, И app, И микросервис
а по отдельности там крохи по времени
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39979862
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза
да какую нафиг "полную"
я не программирую одновременно И core, И app, И микросервис
а по отдельности там крохи по времени
ну, значит, вы ещё не доросли до прекомпиляции, рад за вас
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39979868
Фотография CEMb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych
ну, значит, вы ещё не доросли до прекомпиляции, рад за вас
Не не не, у Алексея, похоже, проект порезан на слои. У меня вот слои в статических либах, компиляция основного проекта действительно занимает мало времени, потому что большие куски просто прилинковываются в конце. И есть проекты, не порезанные, полная сборка которых занимает дофига времени. И прекомпиленные заголовки в таком случае очень спасают, несомненно.
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39979871
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей РозаА вот *так* выглядят файлы с сабжем:

Нет, как раз это-то к сабжу не имеет никакого отношения.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39979876
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CEMb,

>Не не не, у Алексея, похоже, проект порезан на слои
= да. Поэтому такая экономия на спичках ему непонятна.
А на слои делят практически все).
С другой стороны, деление класса на интерфейс описания и реализацию (дублируем) мне близок еще с дельфи. Удобно смотреть что за класс и что он делает.
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39979906
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза
Что за хамство началось. Вы тут точно за помощью?

Первым хамить начали вы.

В данном случае я тут не за помощью, а просто обсудить и услышать мнения людей.

Что по поводу вас, я пришёл к выводу, что вы не понимаете что такое прекомпилированные заголовочники и не понимаете как работает компилятор.
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39979940
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych
Алексей Роза STL не юзает прекомпиляцию
удивительная фраза) Вы понимаете вообще, зачем нужна прекомпиляция и что именно прекомпилируется?
А я догадался, что Алексея Розу сбивает с панталыку. В термине "прекомпиляция" его путает слово "компиляция". Поэтому он постоянно напирает на то, что прекомпилировать шаблоны бесполезно — ведь их нельзя откомпилировать пока не подставлены шаблонные аргументы. Поэтому он и выдаёт такие сентенции про STL; он думает, что прекомпиляция — это компиляция, но "пре".

Вот если бы вместо термина "прекомпиляция" использовался бы термин "препарсинг" (с тем же смыслом), то возможно Алексей твёрдо стоял бы на правильном пути. Но не факт... сомневаюсь я.
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39979960
CEMb
egorych
ну, значит, вы ещё не доросли до прекомпиляции, рад за вас
Не не не, у Алексея, похоже, проект порезан на слои. У меня вот слои в статических либах, компиляция основного проекта действительно занимает мало времени, потому что большие куски просто прилинковываются в конце. И есть проекты, не порезанные, полная сборка которых занимает дофига времени. И прекомпиленные заголовки в таком случае очень спасают, несомненно.

Слушайте, я не очень заморачиваюсь с названиями ок? И мне совсем не интересен "уникальный мир VS".
Я решаю задачу "сократить время компиляции своего проекта". И решается она во всех случаях одинаково: создаются откомпилированные бинарники, которые и линкуются везде. Т.е. некий кусок кода не надо снова компилировать, он уже готов. Компилируем только изменённый код.
Решение этой задачи я и описал выше.
Код можно предкомпилировать через .cpp (те самые классы с описанием), можно без .cpp, можно так :
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
// pch.h - его предкомпилировать (задаётся в makefile или проекте).

// C++
# include <cstdio>
# include <cmath>

// STL
# include <string>
# include <vector>
# include <map>
# include <algorithm>

// Специфичные для ОС
# include <windows.h>
// unit1.cpp
  // предкомпилируемый - первым!
# include "pch.h"
  // остальные заголовки
# include "unit1.h"

void doUnit1()
{
}


Можно сложить там самые часто-используемые либы и линковать их предкомпилированными, НО этого даже НЕ надо делать, потому что они на шаблонах!
Я вот об этом вообще не морочусь, просто юзаю .h-файл, где самые частые либы прописаны, подключаю его в каждый (из НЕмногочисленных) .cpp.
И юзаю эти "слои", как вы их назвали. И нету никаких задержек ВООБЩЕ.

ТС пришёл сюда с проблемой, которой, по сути, не существует. Он просто действует по учебнику, а я ему даю работающую модель, которая решает эту саму проблему (долгая компиляция).
Тут много народу сидит ещё с C. И они делали ещё в старом стиле, когда не было НИ шаблонов, НИ эти "слои" не юзали. Им это может не привычно, а мне норм. Сегодня это работает и сокращает геморрой.
PetroNotC Sharp
= да. Поэтому такая экономия на спичках ему непонятна.

не понятна. Вообще не понятна Понятно, что это пережиток прошлого. ЛИБО плохая архитектура.
С другой стороны, деление класса на интерфейс описания и реализацию (дублируем) мне близок еще с дельфи. Удобно смотреть что за класс и что он делает.
Ну это уже другой вопрос - удобство сопровождения классов. Но у меня и этой проблемы почему-то нет.
Я пробовал и так, и сяк. Научился как-то классы держать в порядке, без бардака. И гемора с двойным сопровождением нет.
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39979967
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей РозаКод можно предкомпилировать через .cpp

То есть ты совершенно не врубился о чём говорится в этой теме. Ню-ню...

Расскажи, гений, как "предкомпилировать через .срр" заголовочный файл размером в мегабайт?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39980074
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза
И нету никаких задержек ВООБЩЕ.
размер проекта в LOCах какой?
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39980091
Dimitry Sibiryakov
То есть ты совершенно не врубился о чём говорится в этой теме. Ню-ню...

я там ссылку вообще-то дал на то, о чём говорится в этой теме
глаза раскрой.
Dimitry Sibiryakov
Расскажи, гений, как "предкомпилировать через .срр" заголовочный файл размером в мегабайт?

а чё 1, чё не 100?
есть проблемы - порежь на куски.
egorych
Алексей Роза
И нету никаких задержек ВООБЩЕ.
размер проекта в LOCах какой?

3 инклуда, 2 константы и main().
строчек 10 я думаю.
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39980096
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Розаесть проблемы - порежь на куски.

Ага, всего-то порезать на куски монстра, скомпилированного из IDL. Задача на пять копеек...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39980103
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза,
>И юзаю эти "слои", как вы их назвали.
)))
Подброшу на костер.
А что тут называют слои?
Вот, смотрю от заказчика большая ИС. Там в папке /bin около 30 бинарников.
Это тут делением на слои называют?
Или все таки модульной архитектурой?
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39980108
Dimitry Sibiryakov
Алексей Розаесть проблемы - порежь на куски.

Ага, всего-то порезать на куски монстра, скомпилированного из IDL. Задача на пять копеек...
ну застрелись тогда чё.
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39980110
вот слои:
Алексей Роза
на самом деле, я не вижу ничего плохого в том, чтобы отдельно компилить /core/, /app/, /какой_то_микросервис/

чё там у кого в бинарниках - это отдельный вопрос.
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39980112
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза
вот слои:
Алексей Роза
на самом деле, я не вижу ничего плохого в том, чтобы отдельно компилить /core/, /app/, /какой_то_микросервис/

чё там у кого в бинарниках - это отдельный вопрос.
ну это и ежу должно быть понятно)
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39980194
если там unix-way, то это полноценная прога
вообще запускаются эти бинарники или что там? данных мало
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39980201
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Роза
если там unix-way, то это полноценная прога
вообще запускаются эти бинарники или что там? данных мало

Есть уникальная возможность исследовать.
Говори что делать.
"Когда программист потерял интерес к исследованиям - он умер" (с)
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39980386
исследование ИС обычно начинается с чтения доков.
если сырцов нет, то вообще хз чего мы обсуждаем
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39980387
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Розавообще хз чего мы обсуждаем

Да мы просто тебя кормим чтобы посмотреть лопнешь или нет.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39980487
я быстрей лопну от твоего правописания
перед "чтобы" запятая.
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39980496
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Розаперед "чтобы" запятая.

Увы, в данном случае не ставится, обломись.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39980520
Дима, ты ведь высококлассный спец по C/C++, Дельфям и БД
зачем тебе это всё? Почему свой стартап не запустишь?
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39980553
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей РозаПочему свой стартап не запустишь?

Ну, 10 лет руководства собственной фирмой убедили меня, что это слишком много геморроя.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39980607
в 90е чтоли руководил? )
а где его нет...
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39980611
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей Розав 90е чтоли руководил? )

Нет, в 90-е я только был на подхвате. А юридическое лицо у меня было с 2008-го по 2019-й.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39980670
petrav
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

Алексей Розав 90е чтоли руководил? )

Нет, в 90-е я только был на подхвате. А юридическое лицо у меня было с 2008-го по 2019-й.

Чем занималась фирма, если не секрет?
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39996641
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, всё. Стандарт "на модули" утвержден: https://habr.com/ru/news/t/518226/
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39996685
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фух. Не прошло и 30 лет.
...
Рейтинг: 0 / 0
Прекомпилированные заголовочники
    #39996710
PetroNotC Sharp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
пройдет ещё 20.
Данная фича вроде волнует только тех у кого компилится долго.
...
Рейтинг: 0 / 0
58 сообщений из 58, показаны все 3 страниц
Форумы / C++ [игнор отключен] [закрыт для гостей] / Прекомпилированные заголовочники
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]