Я пишу компилятор, который генерирует код C++ в конце. В настоящее время я задаюсь вопросом, что быстрее компилируется.Что можно скомпилировать быстрее? Источник и заголовок для каждого метода или что-либо в одном файле?
Первые заметки о составителя:
- У меня нет каких-либо классов \ структур, они оптимизированы внутри функций.
- Я не имею ничего такого, как
#include <vector>
, когда мне нужно использовать такие функции, какprintf
, из библиотек, тогда я вручную разместил прототип. (Составитель сделать это вручную.)
У меня есть два варианта:
Вариант # 1:
//.h
#include "A.h"
#include "B.h"
int function(/* parameters */);
//.cpp
int function(/* parameters */) {
// code
}
Каждая функция имеет собственный источник и заголовок. Преимущества:
- Я могу сделать компилятор комментариями, включающими в себя файл, который включен перед ним. Например, если содержимое
#include "B.h"
включено в#include "A.h"
, тогда я могу прокомментировать строку#include "B.h"
. (Сохраняет чтение файлов.) - Я могу распознать неизменные методы/функции/файлы (когда я регенерирую свой код, и он может находить точные файлы из ранее.) И перерабатывать их объектные файлы. (Сохраняет объект компиляции.)
Вариант № 2:
int function(/* parameters */);
int function2(/* parameters */);
int function3(/* parameters */);
// ...
int function(/* parameters */) {
// code
}
// ...
Все функции сразу определены (эти прототипы в верхней части) и составил в этом одном файле.
Преимущества:
- Single последовательного чтения с диска. (Нет иерархии включения и множественного включения из разных объектов.)
- Отдельный объект для компиляции, исключая библиотеки.
На одном взгляде выглядит как вариант # 1 быстрее, но некоторые люди говорят, что они попробовали второй, и это дало их проекту импульс в компиляции времени. Они не сравнили оба варианта и не дали никаких доказательств.
Могу ли я получить объяснение, для которого быстрее, чем контрольных?
Бенчмарк и узнать. Все остальное - это в основном спекуляция. –
@ColonelThirtyTwo Я уверен, что кто-то может «дать слово», но почему опция быстрее, чем другая, а не только эталон. – LyingOnTheSky
вариант 3: реализовать [модули] (http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2014/n4214.pdf) – bolov