http://referencesource.microsoft.com/ 에서 소스 코드를 살펴본 결과 모든 소스 코드가 C #에있는 것 같습니다.
또한 새로운 C # 컴파일러 플랫폼 ( Roslyn ) 의 소스 코드를 살펴 보았으며 C # 에도 있습니다. 어떻게 가능합니까? C # 언어 컴파일러는 C #으로 작성 되었습니까? 아니면 분명한 것이 빠져 있습니까? C # 컴파일러가 C #으로 작성된 경우 어떻게 작동합니까?
http://referencesource.microsoft.com/ 에서 소스 코드를 살펴본 결과 모든 소스 코드가 C #에있는 것 같습니다.
또한 새로운 C # 컴파일러 플랫폼 ( Roslyn ) 의 소스 코드를 살펴 보았으며 C # 에도 있습니다. 어떻게 가능합니까? C # 언어 컴파일러는 C #으로 작성 되었습니까? 아니면 분명한 것이 빠져 있습니까? C # 컴파일러가 C #으로 작성된 경우 어떻게 작동합니까?
답변:
원래 C # 컴파일러는 C #으로 작성되지 않았으며 C 및 C ++로 작성되었습니다. 새로운 Roslyn 컴파일러는 C #으로 작성되었지만 처음에는 이전 컴파일러로 컴파일되었습니다. 새 컴파일러가 완료되면 자체 소스 코드를 컴파일 할 수있었습니다 . 이를 bootstrapping 이라고 합니다.
컴파일러는 유틸리티 프로그램이며 프로그래밍 언어 텍스트를 기계어 코드로 변환합니다. 만약 프로그래밍 언어가 단지 컴파일러 인 소프트웨어를 설명한다면 .....
컴파일러는 다른 아키텍처를위한 기계어 코드를 생성 할 수도 있습니다. 예를 들어, Apple은 인텔 기반 서버 랙을 사용하여 iOS를 컴파일합니다. 컴파일러는 생성 한 ARM 코드를 실행할 필요없이 디스크에 작성하면됩니다.
Compiler 2.0은 컴파일러 1.0에서 처리 할 수있는 언어로 작성해야하지만 최적화와 같은 새로운 기능을 사용하여 컴파일러 2.0을 만들 수 있습니다. 그런 다음 컴파일러 2.0을 사용하여 소스 코드를 다시 컴파일하고 더 나은 버전을 만들 수 있습니다. 다시 말하지만 컴파일러는 다른 버전의 자체를 만들고 있다는 것을 알지 못합니다.
우리가 시간의 안개로 충분히 되돌아 가면 컴파일러가없는 지점에 도달합니다-고급 언어의 첫 번째 반복. 그런 다음 연필과 opcode 책을 꺼내어 첫 번째 책을 집필해야합니다. 첫 어셈블러는 어떻게 작성 했습니까? 펀치 된 종이 테이프 또는 전면 패널의 플립 스위치에 기계 코드를 직접 입력하십시오.
컴파일러는 다른 프로그램과 같은 프로그램입니다. 그것에 대해 마술이나 특별한 것은 없습니다. 입력이 필요하고 출력이 생성됩니다. 이 특정한 경우에, 입력은 단지 C #이되고 출력은 CIL이됩니다. 그러나 입력은 일련의 세금 신고 및 출력이 보고서 인 것과 다르지 않습니다.