포터블 C 컴파일러
| 원저자 | 스티븐 C. 존슨 |
|---|---|
| 개발자 | AT&T 벨 연구소 |
| 발표일 | 1979년 |
| 안정화 버전 | 1.1.0
/ 2014년 12월 10일 |
| 프로그래밍 언어 | C |
| 운영 체제 | 유닉스 및 유닉스 계열 |
| 종류 | C 컴파일러 |
| 라이선스 | BSD 라이선스 |
| 웹사이트 | http://github.com/portablecc |
포터블 C 컴파일러(Portable C Compiler, pcc 또는 때로는 pccm - portable C compiler machine으로도 알려져 있음)는 1970년대 중반 벨 연구소의 스티븐 C. 존슨이 작성한 C 프로그래밍 언어용 초기 컴파일러로,[1] 1973년 앨런 스나이더가 제안한 아이디어에 부분적으로 기반을 두었다.[2][3] 데니스 리치의 승인 하에 "벨 연구소의 C 컴파일러로 배포되었다."[4]
다양한 컴퓨터 아키텍처용 코드를 쉽게 출력하도록 조정할 수 있는 최초의 컴파일러 중 하나였던 pcc는 긴 수명을 가졌다. Seventh Edition Unix에서 처음 등장하여 1994년 4.4BSD가 출시될 때까지 BSD와 함께 제공되었으며, 이후 GNU 컴파일러 모음으로 대체되었다. 당시 매우 영향력이 커서 1980년대 초에는 대부분의 C 컴파일러가 이를 기반으로 했다.[5] 앤더스 마그누손(Anders Magnusson)과 피터 A 존슨(Peter A Jonsson)은 2007년에 pcc 개발을 다시 시작하여 C99 표준을 지원하기 위해 광범위하게 재작성했다.[6]
기능
[편집]pcc의 주요 특징은 이식성과 향상된 진단 기능이다. 이 컴파일러는 소스 파일 중 일부만이 기계 종속적이도록 설계되었다. 구문 오류에 비교적 강하고 동시대의 컴파일러보다 더 철저한 유효성 검사를 수행한다.
데니스 리치가 작성한 최초의 C 컴파일러는 재귀 하향 파서를 사용했고, PDP-11에 대한 특정 지식을 포함했으며, 생성된 어셈블리 언어 코드를 개선하기 위해 선택적인 기계별 최적화 도구에 의존했다. 대조적으로, 존슨의 pccm은 Yacc로 생성된 파서를 기반으로 했으며 더 일반적인 타겟 머신 모델을 사용했다. 두 컴파일러 모두 타겟별 어셈블리 언어 코드를 생성한 다음 이를 어셈블하여 링크 가능한 오브젝트 모듈을 생성했다.
벨 연구소에서 "QCC" 및 "RCC"로 알려진 후기 버전의 PCC는 다른 타겟 아키텍처 모델을 지원했다.
PCC가 구현하는 언어는 비야네 스트롭스트룹이 "클래식 C"라고 부른 K&R C의 확장 버전으로, `void` 반환 타입(값을 반환하지 않는 함수용), 열거형 및 구조체 할당을 포함한다.[4]
현재 버전
[편집]스티브 존슨의 원본을 기반으로 한 새로운 버전의 pcc는 앤더스 매그너슨이 관리하고 있다.[6] 이 컴파일러는 BSD 라이선스 하에 제공되며, 그 개발은 BSD 펀드라는 비영리 단체의 자금 지원을 받는다. 매그너슨에 따르면:
가장 큰 장점은 (라이선스 괴짜들에게 BSD 라이선스라는 점 외에도) 빠르다는 것이다. gcc보다 5-10배 빠르면서도 합리적인 코드를 생성한다. <...> 또한 포팅하기 매우 간단하다...
— 앤더스 매그너슨[7]
이 새로운 버전은 2007년 9월 NetBSD pkgsrc 및 OpenBSD 소스 트리에 추가되었고,[8] 나중에 주 NetBSD 소스 트리에 추가되었다.[9] 한때 BSD 기반 운영체제에서 GNU 컴파일러 모음을 대체할 수 있을 것이라는 추측이 있었지만,[10] FreeBSD[11][12] 및 NetBSD[13]는 모두 클랭을 잠재적 대체재로 보고 있으며, OpenBSD의 테오 더라트는 pcc가 아직 gcc를 대체할 준비가 되어 있지 않으며 gcc 제거가 최우선 순위는 아니라고 주장한다.[14] 2009년 12월 29일, pcc는 기능적인 X86 OpenBSD 커널 이미지를 빌드할 수 있게 되었다.[15]
pcc 버전 1.0은 2011년 4월 1일에 출시되었다.[16] 이 릴리스부터 컴파일러는 X86 및 X86-64 프로세서 아키텍처를 지원하며 NetBSD, OpenBSD, FreeBSD, 다양한 리눅스 배포판 및 마이크로소프트 윈도우에서 실행된다.[17] 더 많은 아키텍처 지원과 FORTRAN 77 및 C++ 프런트엔드를 포함한 추가 개발은 2022년 현재 진행 중이다.
PCC는 2012년에 OpenBSD 소스 트리에서 제거되었다.[18] 개발이 정체되었고 GNU 컴파일러 모음의 실질적인 대안이 될 수 있도록 개발할 관리자가 나타나지 않았기 때문이다.[19][20]
pcc의 최신 버전인 1.1.0은 2014년 12월 10일에 출시되었다.[21]
같이 보기
[편집]각주
[편집]- ↑ Johnson, S.C. (1978). 〈A portable compiler: Theory and practice〉. 《Proceedings of the 5th ACM SIGACT-SIGPLAN symposium on Principles of programming languages - POPL '78》. 97–104쪽. doi:10.1145/512760.512771. S2CID 14390804.
- ↑ Snyder, A. (1975). “A Portable Compiler for the Language C”. 《Master's Thesis. MIT, Cambridge, Mass.》. 2006년 9월 5일에 원본 문서에서 보존된 문서. 2006년 7월 19일에 확인함.
- ↑ Johnson, S.C. (1981). 《A Tour Through the Portable C Compiler》. Unix Programmer's Manual, 7th edition, Volume 2. Holt, Rinehart and Winston. ISBN 0-03-061743-X.
- 1 2 Stroustrup, Bjarne (2002). Sibling rivalry: C and C++ (PDF) (보고서). AT&T Labs.
- ↑ Ritchie, Dennis M. (1993). “The development of the C language”. 《The second ACM SIGPLAN conference on History of programming languages. Cambridge, Massachusetts.》. 201–208쪽. 2014년 10월 18일에 원본 문서에서 보존된 문서. 2008년 12월 30일에 확인함.
At the start of the decade, nearly every compiler was based on Johnson's pcc; by 1985 there were many independently-produced compiler products.
- 1 2 “pcc history”. 《pcc - portable c compiler》. 2010년 6월 21일. 2023년 5월 3일에 원본 문서에서 보존된 문서. 2012년 6월 26일에 확인함.
- ↑ Erdely, Mike (2007년 9월 15일). “BSD Licensed PCC Compiler Imported”. 《OpenBSD Journal》. 2011년 12월 17일에 확인함.
- ↑ Moerbeek, Otto (2007년 9월 15일). “CVS: cvs.openbsd.org: src” (메일링 리스트). 《openbsd-cvs》.
- ↑ Brownlee, David (2007년 9월 20일). “CVS commit: src/dist/pcc” (메일링 리스트). 《source-changes》.
- ↑ “GCC Compiler Finally Supplanted by PCC?”. 《/.》. 2007년 9월 17일.
- ↑ Larabel, Michael (2012년 5월 12일). “FreeBSD 10 To Use Clang Compiler, Deprecate GCC”. Phoronix. 2015년 4월 10일에 원본 문서에서 보존된 문서. 2015년 4월 23일에 확인함.
- ↑ Brooks, Davis (2012년 11월 5일). “HEADS UP: Clang now the default on x86” (메일링 리스트). 2015년 4월 23일에 확인함.
- ↑ Joerg, Sonnenberger (2013년 10월 17일). “Importing LLVM/Clang” (메일링 리스트). 2015년 4월 23일에 확인함.
- ↑ Matzan, Jem (2007년 10월 15일). “More on OpenBSD's new compiler”. 《The Jem Report》. 2012년 1월 4일에 원본 문서에서 보존된 문서. 2011년 12월 17일에 확인함.
But that’s never really been the agenda, see. Some people think we hate GNU code. But the thing is we hate large code, and buggy code that upstream does not maintain. That’s the real problem… gcc gets about 5-6% slower every release, has new bugs, generates crappy code, and drives us nuts. This is just an attempt to see if something better can show up.
- ↑ de Weerd, Paul (2009년 12월 29일). “Call for testing: pcc and the OpenBSD kernel”. 《OpenBSD Journal》. 2011년 12월 17일에 확인함.
- ↑ Magnusson, Anders (2011년 4월 1일). “1.0 Release”. 《Portable C Compiler》. 2022년 7월 4일에 원본 문서에서 보존된 문서. 2011년 12월 17일에 확인함.
- ↑ “BSD Fund: pcc fund”. 《bsdfund.org》. 2011년 4월 1일. 2009년 1월 5일에 원본 문서에서 보존된 문서. 2012년 6월 26일에 확인함.
- ↑ Paul Irofti (2012년 4월 12일). “CVS: cvs.openbsd.org: src”.
- ↑ Peter Hessler (2012년 6월 18일). “Re: Story behind PCC's removal?”.
- ↑ Miod Vallat (2013년 7월 31일). “Compilers in OpenBSD”.
- ↑ Magnusson, Anders (2014년 12월 10일). “1.1.0 Release”. 《Portable C Compiler》. 2022년 4월 22일에 원본 문서에서 보존된 문서. 2022년 4월 22일에 확인함.
외부 링크
[편집]- 포터블 C 컴파일러
- 공식 웹사이트 - TUHS 아카이브
- 깃허브 저장소 원본 소스 사본 포함
- 또 다른 깃허브 저장소 최신 소스 포함