Компиляция компилятора - сколько раз? - PullRequest
6 голосов
/ 11 марта 2010

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

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

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

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

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

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

Ответы [ 3 ]

6 голосов
/ 11 марта 2010

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

3 голосов
/ 11 марта 2010

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

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

1 голос
/ 11 марта 2010

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

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

...