C # 컴파일러는 어떤 언어로 작성됩니까?


148

http://referencesource.microsoft.com/ 에서 소스 코드를 살펴본 결과 모든 소스 코드가 C #에있는 것 같습니다.

또한 새로운 C # 컴파일러 플랫폼 ( Roslyn ) 의 소스 코드를 살펴 보았으며 C # 에도 있습니다. 어떻게 가능합니까? C # 언어 컴파일러는 C #으로 작성 되었습니까? 아니면 분명한 것이 빠져 있습니까? C # 컴파일러가 C #으로 작성된 경우 어떻게 작동합니까?


12
많은 컴파일러는 컴파일 언어로 작성됩니다 . 자세한 내용은 Google 부트 스트랩 입니다.
Paul Roub

19
원래 컴파일러는 C ++로 작성 되었다고 생각합니다 .
PoweredByOrange

44
글쎄, 다른 망치를 사용하여 망치를 만들 수 있습니다. 그것의 이전 버전 ...
Eugene Sh.

10
게시 한 링크는 컴파일러가 아닌 Framework 라이브러리의 소스 코드에 대한 링크입니다.
Steve

답변:


229

원래 C # 컴파일러는 C #으로 작성되지 않았으며 C 및 C ++로 작성되었습니다. 새로운 Roslyn 컴파일러는 C #으로 작성되었지만 처음에는 이전 컴파일러로 컴파일되었습니다. 새 컴파일러가 완료되면 자체 소스 코드를 컴파일 할 수있었습니다 . 이를 bootstrapping 이라고 합니다.


2
따라서 "원래 컴파일러"를 변경해야 할 경우 이전 컴파일러 (C, C ++로 작성) 로 컴파일해야 합니까?
CriketerOnSO

10
최신 버전이 수정 될 "원래 컴파일러"를 변경할 필요가 없습니다
Pseudonym

1
@CriketerOnSO에서 새 컴파일러는 이전 컴파일러를 대체하므로 이전 컴파일러를 수정할 필요가 없습니다. 그러나 MS가 그렇게하려면 이전과 마찬가지로 C ++ 컴파일러로 기존 컴파일러를 다시 컴파일해야합니다.
Thomas Levesque

3
@ThomasLevesque 자체 호스팅은 부트 스트랩의 최종 결과입니다.
arx

2
컴파일러의 코드 인 @SriramSakthivel은 새 키워드를 이해할 수있는 컴파일러가있을 때까지 새 키워드를 사용할 수 없습니다. 항상 이전 버전의 컴파일러를 사용하여 새 버전을 빌드하십시오.
Thomas Levesque

32

컴파일러는 유틸리티 프로그램이며 프로그래밍 언어 텍스트를 기계어 코드로 변환합니다. 만약 프로그래밍 언어가 단지 컴파일러 인 소프트웨어를 설명한다면 .....

컴파일러는 다른 아키텍처를위한 기계어 코드를 생성 할 수도 있습니다. 예를 들어, Apple은 인텔 기반 서버 랙을 사용하여 iOS를 컴파일합니다. 컴파일러는 생성 한 ARM 코드를 실행할 필요없이 디스크에 작성하면됩니다.

Compiler 2.0은 컴파일러 1.0에서 처리 할 수있는 언어로 작성해야하지만 최적화와 같은 새로운 기능을 사용하여 컴파일러 2.0을 만들 수 있습니다. 그런 다음 컴파일러 2.0을 사용하여 소스 코드를 다시 컴파일하고 더 나은 버전을 만들 수 있습니다. 다시 말하지만 컴파일러는 다른 버전의 자체를 만들고 있다는 것을 알지 못합니다.

우리가 시간의 안개로 충분히 되돌아 가면 컴파일러가없는 지점에 도달합니다-고급 언어의 첫 번째 반복. 그런 다음 연필과 opcode 책을 꺼내어 첫 번째 책을 집필해야합니다. 첫 어셈블러는 어떻게 작성 했습니까? 펀치 된 종이 테이프 또는 전면 패널의 플립 스위치에 기계 코드를 직접 입력하십시오.


9
그리고 종이 테이프는 종이의 구멍을 통해 스위치를 뒤집기 만합니다. :-)
Zan Lynx

2
저장 기술로서 종이 테이프는 절대 벗지 않습니다. 너무 복잡하고 오류가 발생하기 쉬우 며 판독기에 단락이 발생하면 프로그램이 완전히 파괴되어 쉽게 화상을 입을 수 있습니다.
CVn

16

컴파일러는 다른 프로그램과 같은 프로그램입니다. 그것에 대해 마술이나 특별한 것은 없습니다. 입력이 필요하고 출력이 생성됩니다. 이 특정한 경우에, 입력은 단지 C #이되고 출력은 CIL이됩니다. 그러나 입력은 일련의 세금 신고 및 출력이 보고서 인 것과 다르지 않습니다.


10
그것은 다릅니다-훨씬 쉽습니다.
피터-복원 모니카

3
@PeterSchneider : 사람들은 신화적인 마법 생물로 컴파일러를 캐스팅하는 것을 좋아하지만 결국 입력을 출력으로 변환하는 프로그램 일뿐입니다. 지구상의 거의 모든 프로그램이 일부 입력을 구문 분석하고 이해하려고 시도하며 출력으로 바꿉니다. 어떤 의미에서, 모든 입력은 어떤 언어로 작성된 프로그램이고, 모든 프로그램은 컴파일러입니다.
Jörg W Mittag

3
더 동의 할 수 없었습니다. 내가 말하고 싶은 것은 세금 법이 끔찍한 혼란이라는 것입니다. 대조적으로, 공식 언어는 일반적으로 자동화에 적합한 방식으로 잘 정의됩니다. 세금을 다루는 프로그램보다 간단한 컴파일러를 작성하는 것이 더 쉽습니다. Eric Lippert가 wrt C # 컴파일러에 동의하지 않더라도 cf. blogs.msdn.com/b/ericlippert/archive/2010/02/04/... . 원 패스 C 컴파일러에서 먼 길을 왔습니다.
피터-복원 모니카

1
@PeterSchneider : 아, 죄송합니다, 귀하의 의견을 180 °로 잘못 해석했습니다 :-D
Jörg W Mittag

OP의 생각을 가장 직접적으로 다루기 때문에이 답변이 가장 좋습니다. "모든 강력한"컴파일러를 둘러싼 안개를 제거합니다.
Assaf Levy
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.