Расчет внешнего интерфейса дизайна компилятора в функции main для Clang и Zig
Я начал читать исходный код clang
а также zig-lang
. К сожалению, исходные коды сложны, и я не могу узнать, где интерфейс этих компиляторов вызывается в основной функции.
В clang
, более близкое место, которое я нашел, находится здесь, но оно не похоже на обработку внешнего интерфейса компиляции.
В zig-lang
, основная функция еще более запутанная и трудная для понимания. Я просто не мог найти де - факто основной функции (main0) здесь.
Хотя объяснение этапов этих компиляторов и указание на их код приветствуется, мне достаточно только той точки, где вызываются вычисления внешних интерфейсов.
1 ответ
Основной компилятор zig выполняется из Compilation.performAllTheWork . Эта функция перебирает все элементы компиляции и компилирует их. (main() → buildOutputType → updateModule → Compilation.update → Compilation.performAllTheWork)
Stage1 (компилятор по умолчанию в zig 0.8.0, написанный на C++) вызывается, когда в рабочей очереди из Compilation.updateStage1Module обнаруживаются элементы stage1_module . Основная часть компиляции происходит из codegen_build_object ( вызывается из zig_stage1_build_object)
Stage2 (незавершенный более быстрый компилятор, написанный на Zig) более тесно интегрирован в рабочую очередь, поскольку поддерживает инкрементную компиляцию и вызывается в этих ветвях переключателя рабочей очереди.
Clang где-то начинается, может быть, в clang.lib.frontend.CompilerInvocation?