Size: a a a

Compiler Development

2020 December 18

BD

Berkus Decker in Compiler Development
Pavel Samolysov
Да даже со смаком и ниньзей. Ещё вопрос как этот смак написан
Зависимости эти обычно упорядочены как попало, а в худшем варианте засунуты в общий stdafx.h который и триггерит пересборку всего 🙂

А Лакоса конечно же никто никогда не читает - не С++ это дело в дизайн погружаться.

Выключили в телеге precompiled headers - ускорили сборку в разы.
источник

h

hazer_hazer in Compiler Development
Alexander Tchitchigin
И откуда у Вас там указатели берутся, если Вы его на этапе компиляции формируете?
Ну. Пример -- craftinginterpreters.
Там в компайл-тайме объекты в константы записываются
источник

AT

Alexander Tchitchigi... in Compiler Development
hazer_hazer
Ну. Пример -- craftinginterpreters.
Там в компайл-тайме объекты в константы записываются
Объекты, или указатели на них?
источник

PS

Pavel Samolysov in Compiler Development
Berkus Decker
Зависимости эти обычно упорядочены как попало, а в худшем варианте засунуты в общий stdafx.h который и триггерит пересборку всего 🙂

А Лакоса конечно же никто никогда не читает - не С++ это дело в дизайн погружаться.

Выключили в телеге precompiled headers - ускорили сборку в разы.
Лакос чето стал писуч или уже выпустил или готовит четырехтомник по физическому дизайну. Его видеолекции, кстати, круты.
источник

h

hazer_hazer in Compiler Development
Alexander Tchitchigin
Объекты, или указатели на них?
Указатели
источник

AT

Alexander Tchitchigi... in Compiler Development
hazer_hazer
Указатели
Тогда я не знаю, как это вообще должно работать между запусками, при наличии heap randomization и прочей виртуальной памяти. Либо там на самом деле не указатели.
источник

AT

Alexander Tchitchigi... in Compiler Development
Поскольку указатель в пуле констант может указывать только на другую константу из пула. 🤷‍♀️
источник

h

hazer_hazer in Compiler Development
Alexander Tchitchigin
Тогда я не знаю, как это вообще должно работать между запусками, при наличии heap randomization и прочей виртуальной памяти. Либо там на самом деле не указатели.
это будет работать только с сильной связкой компайл-тайма и ран-тайма.
источник

AT

Alexander Tchitchigi... in Compiler Development
hazer_hazer
это будет работать только с сильной связкой компайл-тайма и ран-тайма.
И без ОС, ага.
источник

h

hazer_hazer in Compiler Development
Alexander Tchitchigin
И без ОС, ага.
может я не прав и там все ок. но пока кажется что все именно так
источник

PS

Pavel Samolysov in Compiler Development
Berkus Decker
Зависимости эти обычно упорядочены как попало, а в худшем варианте засунуты в общий stdafx.h который и триггерит пересборку всего 🙂

А Лакоса конечно же никто никогда не читает - не С++ это дело в дизайн погружаться.

Выключили в телеге precompiled headers - ускорили сборку в разы.
Не очень понимаю почему все надеятся на прекомпайлед заголовки. Ну будет там огромный шаблон, так во что он скомпилируется, если инстанциируется только в cpp-файле? Или идея в том, что там какое-то AST разобранное сохраняется в кэш и потом компилятор будет работать с ним, а не с текстом? Примерно как в модулях хотят сделать.
источник

BD

Berkus Decker in Compiler Development
Pavel Samolysov
Не очень понимаю почему все надеятся на прекомпайлед заголовки. Ну будет там огромный шаблон, так во что он скомпилируется, если инстанциируется только в cpp-файле? Или идея в том, что там какое-то AST разобранное сохраняется в кэш и потом компилятор будет работать с ним, а не с текстом? Примерно как в модулях хотят сделать.
да, precompiled  header лежит уже распарсенным и его  не надо парсить заново

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

BD

Berkus Decker in Compiler Development
ну а чтобы было проще кэшировать precompile header влючает в себя ВСЕ хедеры проекта, поэтому любое однобуквенное изменение в любом хедере - полный рекомпайл
источник

PS

Pavel Samolysov in Compiler Development
Berkus Decker
да, precompiled  header лежит уже распарсенным и его  не надо парсить заново

проблема там в том, что ВСЕ сорс файлы  включают этот хедер, и если уж он раз изменился - полный рекомпайл проекту обеспечен.
Да, получается надо соблюдать баланс, т.к. экономим на заголовках, но тратим на компиляции cpp, возможно, если вырезать из них заголовки, они будут не такими большими. В расте, кстати, есть похожее, там для уровней оптимизации 0 и 1 (емнип) можно использовать прекомпилированные дженерики из библиотек, а если хочешь выше - перекомпилировать.
источник

KR

K R in Compiler Development
Berkus Decker
без модулей, без цмака, без нинзи - одними автотулсами и ужасным precompiled header-ом
Cmake - это отдельное добро, не умеющее параллелить фазу генерации.
источник

KR

K R in Compiler Development
Berkus Decker
Зависимости эти обычно упорядочены как попало, а в худшем варианте засунуты в общий stdafx.h который и триггерит пересборку всего 🙂

А Лакоса конечно же никто никогда не читает - не С++ это дело в дизайн погружаться.

Выключили в телеге precompiled headers - ускорили сборку в разы.
Лакоса тоже надо аккуратно читать - он любитель понапихать undefined behavior
источник

BD

Berkus Decker in Compiler Development
K R
Лакоса тоже надо аккуратно читать - он любитель понапихать undefined behavior
Ну я лакоса больше про структуру и архитектуру читаю, где там в структуре слоев ub?
источник

BD

Berkus Decker in Compiler Development
K R
Cmake - это отдельное добро, не умеющее параллелить фазу генерации.
Фазу генерации чего?
источник

KR

K R in Compiler Development
Berkus Decker
Фазу генерации чего?
Makefile'ов
источник

KR

K R in Compiler Development
Berkus Decker
Ну я лакоса больше про структуру и архитектуру читаю, где там в структуре слоев ub?
Там нет, но вот в его masterpiece нельзя ничего использовать, не поискав предварительно undefined. 😉
источник