2011-04-14 2 views
71

gcc C 컴파일러는 C 자체로 작성 되었습니까? 아니면 총회에 서면? 컴파일러가 C로 작성된 경우 컴파일러 코드를 컴파일하는 데 사용되는 컴파일러는 무엇입니까?gcc C 컴파일러는 C 자체로 작성 되었습니까?

+11

예는 (대부분)입니다. 물론 대부분의 컴파일러와 마찬가지로 C를 컴파일하려면 C 컴파일러가 필요합니다. 일련의 "부트 스트랩"단계가 있습니다. 일반적인 생각은 [GCC 설치하기] (http://gcc.gnu.org/install/build.html)와 [GCC - LFS 설치하기] (http://www.linuxfromscratch.org/lfs/)에서 다루고 있습니다. view/development/chapter05/gcc-pass2.html). –

+0

@mu : 다음 단계입니다. – euphoria83

+2

1980 년대와 90 년대 초반에 각기 다른 브랜드의 워크 스테이션은 c 컴파일러, 툴 등을 사용하는 유닉스 환경을 가지고있었습니다.GCC 소스를 사용하면 이러한 플랫폼 중 하나에서 gcc의 초기 컴파일을 수행 한 다음 gcc를 컴파일하여 몇 번이나 고정 지점에 대한 확인을 몇 번 할 수 있습니다. – Paul

답변

82

gcc의 특정 내역은 GCC Wiki입니다. 보다 일반적인 점은 컴파일러가 일반적으로 컴파일 할만큼 강력 할 때까지 컴파일러는 원래 다른 컴파일러로 컴파일된다는 것입니다. 또는 어셈블러에서 피쳐의 하위 세트를 처리 할 수있는 기본 컴파일러를 작성하여 빌드 할 수 있습니다. 그러나 다시 이것은 거의 필요가 없습니다. 다양한 언어로 다양한 컴파일러를 사용할 수 있습니다. Stephen Johnson이 pcc (첫 번째 C 컴파일러 중 하나)를 작성한 경우에도 B 언어 용 컴파일러가 여러 언어와 함께 제공되었습니다. gcc는 원래 컴파일러를 고를 수있는 컴파일러를 여러 개 가지고있었습니다. RMS는 적어도 초기 개발 단계에서 파스텔 컴파일러를 사용하고 있었다고 말합니다.

C 컴파일러가 C로 작성되어야한다는 요구 사항은 없습니다. 원하는 경우 Perl로 작성할 수 있습니다. 특정 플랫폼 용 컴파일러가 원래 해당 플랫폼에 작성되어야한다는 요구 사항은 없습니다 (임베디드 시스템은 거의 항상 다른 시스템에서 컴파일됩니다). 따라서 부트 스트랩을하는 데는 여러 가지 방법이 있습니다.

이 질문에는 컴파일러 부트 스트랩의 첫 번째 인스턴스와 관련된 몇 가지 흥미로운 점이 있습니다. 당신이 매우 똑똑하다면, 그 부트 스트랩을 이용하여 something incredible, brilliant and terrifying을 할 수 있습니다.

+10

+1 리치 링크는 항상 좋은 읽을 거리입니다. :) – unwind

+0

Woah, 그 두 번째 기사는 현명하게 영리합니다. – Ponkadoodle

+4

그들은 이제 몇 가지 [C++ in gcc] (http://lwn.net/Articles/542457/)를 사용합니다. –

49

원래 어셈블리 언어로 작성되었지만 그 자체로 개가 음식을 만들기 시작했습니다.

+15

+1 문구를 좋아하십시오. –

+1

원본 부트 스트랩에 어셈블러를 사용하여 RMS에 대한 참조를 보지 못했습니다. 그 근원은 무엇입니까? 그는 부트 스트랩 (bootstrap)을 할 수있는 몇 가지 다른 컴파일러를 가지고 있었기 때문에 많은 작업이 필요했습니다. –

+14

비록 용어는 부트 스트랩 이었지만. –

3

이것은 분명히 매우 거친 표시기이지만,이 의 목록은 gcc-5.1.0-src/gcc/ 디렉토리의이 흥미 롭습니다. 이 디렉토리 에는 GCC 자체의 주요 소스가 들어 있습니다 (런타임 라이브러리 제외). 여기

정상 파일 카운트 (100)는 C와 C++ 파일 지배 확장에 의해 을 그룹화합니다.
112 .opt 
    118 .def 
    140 .cc 
    185 .x 
    250 .exp 
    353 .md 
    366 .mm 
    414 .f 
    430 .f03 
    521 .m 
    625 .a 
    1082 .go 
    1371 .h 
    1602 .ads 
    1655 .adb 
    1828 .ada 
    3860 .f90 
    11231 .C  // C++ 
    23811 .c  // C 

요즘 GCC는 GNU 컴파일러 컬렉션뿐 아니라 GNU C 컴파일러를 의미 있습니다.

6.3 GCC 하위 디렉토리

GCC 디렉토리는 문서를 포함 많은 GCC의 이 다른 파일이 구성의 일부로 사용 빌드 프로세스 C 소스의 일부 파일 및 하위 디렉토리를 포함 및 testsuite.

참조 :https://gcc.gnu.org/onlinedocs/gccint/gcc-Directory.html

관련 문제