C 컴파일러를 C로 작성하려면 어떻게 해야 합니까?
이 질문은 제 컴파일러에 대한 오해에서 비롯된 것일 수도 있지만...
K&R 제1판(xi페이지)의 서문에서 다음과 같은 내용을 확인할 수 있습니다.
operating system, C 컴파일러, 및 기본적으로 모든 UNIX 애플리케이션 프로그램(본서의 작성에 사용되는 모든 소프트웨어 포함)은 C로 기술되어 있습니다.
(중요)
C 컴파일러가 C 코드를 컴파일하기 전에 컴파일러 자체를 컴파일해야 하지 않을까요?그리고 그 C 컴파일러가 C로 쓰여져 있다면 컴파일러는 이미 존재하는 C 컴파일러가 필요하지 않을까요?
이 무한회귀의 난제(또는 치킨앤에그 문제)에서 벗어날 수 있는 유일한 방법은 K&R이 말하는 C 컴파일러가 C 이외의 언어로 작성된 기존 C 컴파일러를 사용하여 컴파일된 것입니다.그 후 C로 작성된 C 컴파일러가 후자를 대체했습니다.
아니면 완전히 끊긴 건가요?
Wikipedia에서 인용한 Bootstraping이라고 합니다.
언어 X용 컴파일러를 입수하기 위해 언어 X용 컴파일러가 필요한 경우(언어 X로 작성됨) 첫 번째 컴파일러는 어떻게 작성되었습니까?이 닭고기 또는 계란 문제를 해결할 수 있는 가능한 방법은 다음과 같습니다.
- 언어 Y의 언어 X용 인터프리터 또는 컴파일러 구현니클라우스 워스는 그가 Fortran에서 최초의 파스칼 컴파일러를 썼다고 보고했다.
- X용 다른 인터프리터 또는 컴파일러는 이미 다른 언어 Y로 작성되어 있습니다.이것은 Scheme가 부트스트랩되는 방법입니다.
- 이전 버전의 컴파일러는 다른 컴파일러가 존재하는 X의 서브셋으로 작성되었습니다.이것이 Java, Haskell 및 초기 Free Pascal 컴파일러의 일부 슈퍼셋이 부트스트랩되는 방법입니다.
- X용 컴파일러는 X용 컴파일러가 존재하는 다른 아키텍처에서 크로스 컴파일됩니다.이는 보통 C용 컴파일러를 다른 플랫폼으로 이식하는 방법입니다.또한 이것은 초기 부트스트랩 후에 Free Pascal에 사용되는 방법입니다.
- 컴파일러를 X로 쓴 후 소스로부터 손으로 컴파일하여(대부분 최적화되지 않은 방법으로) 코드로 실행함으로써 최적화된 컴파일러를 얻을 수 있습니다.Donald Knuth는 그의 WEB 리터레이티 프로그래밍 시스템에 이것을 사용했습니다.
그리고 만약 관심이 있다면, 여기 Dennis Richi의 첫 번째 C 컴파일러 소스가 있습니다.
보통 첫 번째 컴파일러는 다른 언어로 작성됩니다(이 경우 PDP11 어셈블러로 직접 작성되거나 대부분의 "현대" 언어에서는 C로 작성됩니다).그런 다음 이 첫 번째 컴파일러를 사용하여 언어 자체에서 작성된 컴파일러를 프로그래밍합니다.
당신은 C 언어의 역사에 대해 이 페이지를 읽을 수 있습니다.UNIX 시스템에도 강하게 연결되어 있는 것을 알 수 있습니다.
Wikipedia 페이지의 "치킨 앤 에그" 섹션을 참조하십시오.
언어 X용 컴파일러를 입수하기 위해 언어 X용 컴파일러가 필요한 경우(언어 X로 작성됨) 첫 번째 컴파일러는 어떻게 작성되었습니까?이 닭고기 또는 계란 문제를 해결할 수 있는 가능한 방법은 다음과 같습니다.
- 언어 Y의 언어 X용 인터프리터 또는 컴파일러 구현니클라우스 워스는 그가 Fortran에서 최초의 파스칼 컴파일러를 썼다고 보고했다.
- X용 다른 인터프리터 또는 컴파일러는 이미 다른 언어 Y로 작성되어 있습니다.이것은 Scheme가 부트스트랩되는 방법입니다.
- 이전 버전의 컴파일러는 다른 컴파일러가 존재하는 X의 서브셋으로 작성되었습니다.이것이 Java, Haskell 및 초기 Free Pascal 컴파일러의 일부 슈퍼셋이 부트스트랩되는 방법입니다.
- X용 컴파일러는 X용 컴파일러가 존재하는 다른 아키텍처에서 크로스 컴파일됩니다.이는 보통 C용 컴파일러를 다른 플랫폼으로 이식하는 방법입니다.또한 이것은 초기 부트스트랩 후에 Free Pascal에 사용되는 방법입니다.
- 컴파일러를 X로 쓴 후 소스로부터 손으로 컴파일하여(대부분 최적화되지 않은 방법으로) 코드로 실행함으로써 최적화된 컴파일러를 얻을 수 있습니다.Donald Knuth는 그의 WEB 리터레이티 프로그래밍 시스템에 이것을 사용했습니다.
컴파일러가 컴파일한 언어로 작성되는 것은 지극히 평범한 일이다.이를 달성하기 위한 한 가지 방법은 완전한 L 컴파일러를 다른 언어로 작성하고 새로운 L 컴파일러를 L로 작성하는 것입니다. 더 흥미로운 접근법은 L의 서브셋에 대해 최소한의 컴파일러를 다른 언어로 작성하고 컴파일러를 개선하기 위해 이 최소 서브셋을 사용하는 것입니다.L의 사용 가능한 서브셋.이렇게 하면 완전한 컴파일러를 구축할 수 있습니다.
언급URL : https://stackoverflow.com/questions/18247888/how-can-a-c-compiler-be-written-in-c
'itsource' 카테고리의 다른 글
양식 입력 변경 감지 방법 보기 (0) | 2022.08.27 |
---|---|
버퍼 오버플로를 활성화하기 위해 gcc 컴파일러 최적화를 해제하는 방법 (0) | 2022.08.27 |
Vue JS 2에서 부모 요소 태그를 동적으로 변경합니다. (0) | 2022.08.27 |
복사-붙여넣기 링크가 제대로 작동하는 동안 링크가 작동하지 않음 (0) | 2022.08.27 |
Java에서 별도의 스레드를 사용하여 메서드를 호출하려면 어떻게 해야 합니까? (0) | 2022.08.27 |