Только что загруженный ограниченный компилятор не победит компилятор C, это точно.Но никто не говорит, что так должно быть (ну, вам будет очень трудно победить даже современные компиляторы Си, но давайте предположим, что мы конкурируем с чем-то другим, кроме компиляторов для переносимого языка ассемблера, усовершенствованного за тридцать лет).В зависимости от вашего языка, очень возможно, что расширение загрузочного компилятора будет намного проще, чем расширение написанного на C. Это может позволить много этапов оптимизации, которые было бы сложнее реализовать в C, постепенно увеличивая производительность вашего компилятора (так какself-hosts, т.е. сам компилируется) и производительность всех других программ, которые вы компилируете.
Это различие подводит нас к еще одному важному моменту: производительность компилятора редко имеет значение, если только онане совсем необоснованно.Производительность сгенерированного кода обычно гораздо важнее, и это зависит от генератора кода вашего компилятора, а не от генератора кода компилятора, используемого для компиляции вашего генератора.
В-третьих, в таких проектах, как LLVM, генерациядостойный ассемблерный код уже не так сложен, как раньше.Если вы сгенерируете нормальный код LLVM, даже если он содержит избыточность, LLVM имеет много проходов оптимизации, которые могут позаботиться о том, чтобы и производили лучший фактический код сборки и выделяли регистры лучше, чем вы могли быделай сам в разумные сроки.