2010-03-11 2 views
6

새 버전의 컴파일러를 컴파일하면 반복해서 컴파일해야하는 횟수는 몇 번입니까?컴파일러 컴파일 - 몇 번이나?

첫째 : [1]은 이전 버전을 사용하는 컴파일러의 새 버전을 컴파일 [0].

둘째 : 이전 [0] 컴파일러 존재하지 바이너리로 [2]를 새로 컴파일 한 [1], 새로운 최적화를 적용하는 버그를 수정하여 새로운 버전을 컴파일한다.

이제 세 번째? 버그 [0]에 의한 잘못된 컴파일로 인해 [1]에서 버그로 인한 잠재적 버그를 제거하기 위해 [2]를 사용하여 다시 컴파일하십시오 ...?

...하지만 당신은 편집증, 어쩌면 버그를 도입하는 경우 [0] [1] [2]도 다소 버그로 인해 발생에 ...?

[2]에서 모든 의미를 넘어합니까?

답변

6

컴파일 결과 n이 컴파일 결과 인 n - 1과 같을 때 나는 멈출 것입니다. 그 시점에서 당신은 정상 상태에 도달했습니다.

+0

고정 지점! :) – Dacav

+1

이것이 세 번째 버전에서 발생하지 않는다면 아마도 버그가있을 것입니다. 새 컴파일러는 컴파일 된 버전과 관계없이 자체 소스에서 동일한 출력을 생성해야합니다. –

+0

@Rafal : 동의 함. @ SF : 네, 비교는 그런 종류의 일을 처리 할 필요가 있습니다. 드문 요구 사항이 아닙니다. –

3

OCaml을 부트 스트랩하는 방법은 , 을 계속 입력 하시길 바랍니다.. 새 컴파일러 만 버그를 수정하고 새로운 버그를 도입하지 않는다고 가정하면 컴파일러 버그가 사라지게하기 위해 여러 번 부트 스트랩을해야 할 수도 있습니다.

부트 스트랩 컴파일러에있는 버그가 부트 스트랩 된 버전 (비자발적 인 일종의 일종의 일종의 일종의 일종의 일종 인 Ken Thompson)에 있기 때문에 수정중인 버그가없는 고정 지점에 도달 할 수도 있습니다. 이것은 OCaml의 역사에서 적어도 한번은 일어났습니다. 개발자는 올바른 소스를 올바른 컴파일러로 변환 한 올바른 컴파일러를 얻기 위해 직접 어셈블리 코드를 수정했습니다.

1

일반적으로 한 번 표준 라이브러리 withouth 컴파일하고 컴파일러의 일부 작업 버전을 얻어야한다. 이후 표준 라이브러리 지원을 사용하여 다시 컴파일해야합니다. 이렇게하면 추가 기능 (예 : printf 확인 및 libgcc 항목)을 얻을 수 있습니다.

나는 후속 재 컴파일에 대해 알지 못했지만 정보를 주셔서 감사합니다. :

관련 문제