Компиляция компилятора - сколько раз?

Если Вы компилируете новую версию компилятора, сколько раз необходимо перекомпилировать ее многократно?

Во-первых: скомпилируйте новую версию компилятора [1] использование старой версии [0].

Во-вторых: скомпилируйте новую версию [2] с помощью недавно скомпилированного одного (1), чтобы применить новую оптимизацию и исправить ошибки к двоичному файлу, не существующему в старом [0] компилятор.

Теперь треть? Скомпилируйте снова, с помощью [2] для удаления каких-либо потенциальных ошибок, которые, возможно, следовали из ошибок в [1] как результат дефектной компиляции багги [0]...?

... но если Вы параноики, возможно, ошибки, представленные [0] в [1], заставили [2] быть несколько ошибочными также...?

Выход за пределы [2] имеют смысл вообще?

6
задан SF. 11 March 2010 в 09:17
поделиться

3 ответа

Я бы остановился, когда результат компиляции n идентичен результату компиляции n - 1 ; в этот момент вы достигли устойчивого состояния.

6
ответ дан 10 December 2019 в 00:36
поделиться

Инструкции по начальной загрузке OCaml предлагают вам продолжить , пока вы не достигнете фиксированной точки , , если хотите . Предполагая, что новый компилятор только исправляет ошибки и не вводит новые, вам может потребоваться выполнить начальную загрузку несколько раз, чтобы устранить самопроизвольные ошибки компилятора.

Вы также можете достичь исправления без исправления ошибки, которую вы пытались исправить, потому что наличие ошибки в компиляторе начальной загрузки увековечивает ее в загруженной версии (своего рода непроизвольное Кен Томпсон ) . Это случилось как минимум один раз в истории OCaml. Заметив это, разработчики вручную исправили код сборки, чтобы получить правильный компилятор, который переводил правильный исходный код в правильный компилятор.

3
ответ дан 10 December 2019 в 00:36
поделиться

Обычно вы должны один раз скомпилировать без стандартной библиотеки и получить частично работающую версию компилятора. Впоследствии вам нужно будет перекомпилировать с поддержкой стандартной библиотеки: это позволит вам получить дополнительную функциональность (например, проверку printf и прочее libgcc).

Я не знал о последующих перекомпиляциях, но спасибо за информацию :)

1
ответ дан 10 December 2019 в 00:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: