История изменений
Исправление quiet_readonly, (текущая версия) :
во-первых - PCH дает прирост ~2%. так что смысла вообще нет. во-вторых - приведи пример ситуации ,когда хоть что-то не может попасть в PCH.
PCH обычно один на папку, другие файлы из папки не попадут в PCH. Кроме того, PCH хранит весь контекст, необходимый для восстановления состояния парсера/препроцессора, и AST (часть семантических проверок этого AST придётся делать заново). Это несколько отвращает от включения всего подряд.
что в данном контексте означает «таблицы импорта»? и как их наличие исключает AST?
IDE видит, что есть объект os с пачкой методов и типом «модуль». Она не парсит заново код методов и не собирает объект из AST, а использует всё заранее вычисленное. Т.е. если вначале файла написано import os, то результат разбора модуля os от содержимого текущего файла не зависит.
В случае C++ это не так
// formats.inl
FORMAT(PNG, "png", "--enable-png"),
FORMAT(JPEG, "jpg", "--enable-jpeg"),
FORMAT(TGA, "tga", "--enable-tga"),
// formats.h
#define FORMAT(a, b, c) a
enum Format {
#include "formats.inl"
};
#undef FORMAT
#define FORMAT(a, b, c) b
const char *spelling[] = {
#include "formats.inl"
};
#undef FORMAT
Исправление quiet_readonly, :
во-первых - PCH дает прирост ~2%. так что смысла вообще нет. во-вторых - приведи пример ситуации ,когда хоть что-то не может попасть в PCH.
PCH обычно один на папку, другие файлы из папки не попадут в PCH. Кроме того, PCH хранит весь контекст, необходимый для восстановления состояния парсера/препроцессора, и AST, часть семантических проверок этого AST придётся делать заново. Это несколько отвращает от включения всего подряд.
что в данном контексте означает «таблицы импорта»? и как их наличие исключает AST?
IDE видит, что есть объект os с пачкой методов и типом «модуль». Она не парсит заново код методов и не собирает объект из AST, а использует всё заранее вычисленное. Т.е. если вначале файла написано import os, то результат разбора модуля os от содержимого текущего файла не зависит.
В случае C++ это не так
// formats.inl
FORMAT(PNG, "png", "--enable-png"),
FORMAT(JPEG, "jpg", "--enable-jpeg"),
FORMAT(TGA, "tga", "--enable-tga"),
// formats.h
#define FORMAT(a, b, c) a
enum Format {
#include "formats.inl"
};
#undef FORMAT
#define FORMAT(a, b, c) b
const char *spelling[] = {
#include "formats.inl"
};
#undef FORMAT
Исходная версия quiet_readonly, :
во-первых - PCH дает прирост ~2%. так что смысла вообще нет. во-вторых - приведи пример ситуации ,когда хоть что-то не может попасть в PCH.
PCH обычно один на папку, другие файлы из папки не попадут в PCH. Кроме того, PCH хранит весь контекст, необходимый для восстановления состояния парсера/препроцессора, и AST, часть семантических проверок этого AST придётся делать заново.
что в данном контексте означает «таблицы импорта»? и как их наличие исключает AST?
IDE видит, что есть объект os с пачкой методов и типом «модуль». Она не парсит заново код методов и не собирает объект из AST, а использует всё заранее вычисленное. Т.е. если вначале файла написано import os, то результат разбора модуля os от содержимого текущего файла не зависит.
В случае C++ это не так
// formats.inl
FORMAT(PNG, "png", "--enable-png"),
FORMAT(JPEG, "jpg", "--enable-jpeg"),
FORMAT(TGA, "tga", "--enable-tga"),
// formats.h
#define FORMAT(a, b, c) a
enum Format {
#include "formats.inl"
};
#undef FORMAT
#define FORMAT(a, b, c) b
const char *spelling[] = {
#include "formats.inl"
};
#undef FORMAT