LINUX.ORG.RU

История изменений

Исправление quiet_readonly, (текущая версия) :

А почему умножение? Препроцессор выполняется до всего остального, и по большому счёту ему глубоко фиолетово, что внутри: шаблоны, классы, функции, спагетти.

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

Препроцессор заставляет заново распарсить и проанализировать значительную часть деклараций (в предкомпилированный заголовок не всё удастся запихнуть), так что и скорость парсера падает в 2 раза. Да и таблицы импорта по размеру выйдут куда меньше, чем полный контекст препроцессора и парсера + AST, как в предкомпилированном заголовке.

Иначе говоря, увеличение размера всего кода в n раз вызовет замедление в ~n раз для языков с импортом и в ~n^2 раз для языков с препроцессором.

Исходная версия quiet_readonly, :

А почему умножение? Препроцессор выполняется до всего остального, и по большому счёту ему глубоко фиолетово, что внутри: шаблоны, классы, функции, спагетти.

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

Препроцессор заставляет заново распарсить и проанализировать значительную часть деклараций (в предкомпилированный заголовок не всё удастся запихнуть). Да и таблицы импорта по размеру выйдут куда меньше, чем полный контекст препроцессора и парсера + AST, как в предкомпилированном заголовке.