C 컴파일러의 역사는 무엇입니까?


23

"Dennis Ritchie는 C 언어를 개발했습니다"라고 말할 때 C 언어로 작성된 소스 코드를 컴파일 할 수있는 컴파일러 ( '이미 개발 된 다른 언어를 사용하여')를 작성 했습니까? 그렇다면 첫 C 컴파일러를 작성하는 데 사용한 언어는 무엇입니까? 컴파일러는 프로그램이라는 것을 알고 있으며 현재 사용 가능한 C 컴파일러를 사용하여 C 언어에 대한 다른 컴파일러를 만들 수 있습니다. 그 맞습니까?

답변:


23

에서 위키 :

Ritchie는 C 프로그래밍 언어의 창시자이자 Unix 운영 체제의 주요 개발자이며 C에 대한 최종 서적의 공동 저자로 잘 알려져 있습니다.

또한 위키에서 :

Dennis Ritchie가 작성한 첫 번째 C 컴파일러는 재귀 강하 파서를 사용하고 PDP-11에 대한 특정 지식을 통합했으며 선택적인 기계 별 최적화 프로그램을 사용하여 생성 된 어셈블리 언어 코드를 개선했습니다.

첫 번째 C 컴파일러도 어셈블리에서 작성했습니다.

벨랩 의이 페이지 는 대부분의 질문에 대한 답변을 제공합니다.


첫 번째 링크가 끊어졌습니다.
Mahmoud Hossam

IIRC, C는 B라는 이전 언어를 기반으로, Unix는 Multics라는 이전 운영 체제를 기반으로합니다. 이것들이 개발을 부트 스트랩하는 데 사용되었다는 것은 분명한 추측 일 것입니다. 그러나 내가 읽은 것에서 그것은 잘못된 추측입니다. 예를 들어, 유닉스의 초기 개발은 C가 인수 할 때까지 어셈블러에있었습니다.
Steve314

2
IIRC, B는 초기 시스템 프로그래밍 언어 인 BCPL의 제거 버전입니다. 초기 유닉스 작업 중 많은 부분이 B를 사용하여 설명 되었다고 생각 하지만 실제 유닉스 컴파일러 (다른 무언가를 실행 한 크로스 컴파일러)가 있는지 확실하지 않습니다.
TMN

아야 . . 어셈블리 언어로 컴파일러 작성
compman

6
@compman 언젠가 누군가 어셈블리에서 컴파일러를 작성해야합니다. 어떻게 HLL의 컴파일러로 부트 스트랩합니까?
Richard Gadsden

9

이력 레슨을 확인하려면 http://www.livinginternet.com/i/iw_unix_c.htm

PDP-11 컴퓨터가 Bell Labs에 도착했을 때 Dennis Ritchie는 B를 기반으로하여 C라는 새로운 언어를 개발하여 간결한 구문에 대한 톰슨의 취향을 물려 받았으며, 높은 수준의 기능과 운영 기능을 프로그래밍하는 데 필요한 세부 기능을 강력하게 혼합했습니다. 체계. 유닉스의 대부분의 구성 요소는 결국 C로 다시 작성되어 1973 년 커널 자체로 끝났다

또한 이것은 흥미로울 수 있습니다 : http://cm.bell-labs.com/cm/cs/who/dmr/chist.html


1
AFAIK, " 컴파일하여 사용"이 아닌 "디자인 기반의 디자인 "에서 와 같이 "빌드" 됩니다 .
vartec

8

Dennis Ritchie는 부트 스트랩을 사용했습니다 . 부트 스트랩은 어셈블리에서 초기 간단한 컴파일러를 개발하는 간단한 아이디어입니다. 그런 다음이 간단한 컴파일러를 사용하여 대상 언어로 작성된 하위 컴파일러를 컴파일하십시오. 이것이 Ritchie가 매우 이른 last1120c 컴파일러를 만든 방법 입니다.



2

C는 새 플랫폼에 대한 모든 어셈블리 코드를 다시 작성할 필요없이 Unix를 다른 플랫폼으로 이식 할 수 있도록 설계되었습니다.

따라서 "C는 휴대용 어셈블러"라는 일반적인 말입니다. 이는 C가 추상화 수준에서 의도적으로 CPU (1970 년경)에 매우 가깝다는 것을 반영하며 대부분의 임베디드 소프트웨어가 일종의 C로 작성되는 이유이기도합니다.

따라서 C는 유닉스와 밀접하게 연결되어 있으며 유닉스 사람들은 필요한 작업을 수행하기 위해 초기 작업을 기반으로 첫 번째 C 컴파일러를 작성했습니다.

Kernigan과 Richie는 컴퓨터 언어에 대한 가장 영향력있는 참고 문헌 중 하나 인 C에 관한 훌륭한 책을 썼습니다. 왜냐하면 대부분의 독자들이 포인터와 재귀와 같은 고급 주제를 배울 수있을 정도로 명확하고 간결하기 때문입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.