Tiny C 컴파일러
Tiny C Compiler![]() 스크린샷 | |
개발자 | 파브리스 벨라드 |
---|---|
안정된 릴리스 | 9.27 / 12월 17일, 전(2017-12-17 |
저장소 | repo |
기입처 | C와 어셈블리[citation needed] |
운영 체제 | Linux, Unix, Windows |
전임자 | OTCC, 난독화된 Tiny C 컴파일러[1] |
유형 | C 컴파일러 |
면허증. | LGPLv2.1 |
웹 사이트 | bellard |
Tiny C 컴파일러(일명 'K.a')TCC, tCC 또는 TinyCC)는 Fabrice Bellard가 최초로 작성한 x86, X86-64 및 ARM 프로세서 C 컴파일러입니다.디스크 공간이 거의 없는 느린 컴퓨터(예: 복구 디스크)에서 작동하도록 설계되었습니다.Windows 운영체제 지원은 버전 0.9.23(2005년 6월 17일)에서 추가되었습니다.TCC는 GNU Lesser General Public License에 따라 배포됩니다.
TCC는 ANSI C(C89/C90),[2] C99 ISO 표준의 [3]대부분 및 인라인어셈블리를 포함한 많은 GNU C 확장을 실장하고 있다고 주장하고 있습니다.
특징들
TCC에는 현재의 다른 C 컴파일러와 구별되는 많은 기능이 있습니다.
- 파일 사이즈(x86 TCC 실행 파일의 경우 약 100KB)와 메모리 용량이 작기 때문에 복구 디스크와 같은 1.44 M 플로피 디스크에서 직접 사용할 수 있습니다.
- TCC는 네이티브 x86, x86-64 및 ARM 코드를 매우 빠르게 생성하는 것을 목적으로 합니다.Bellard에 따르면 GCC보다 컴파일, 조립 및 링크가 약 [4]9배 빠릅니다.
- TCC 에는, 코드의 안정성을 향상시키기 위해서, 옵션의 메모리나 바인드 체커등의 컴파일러 고유의 언어 기능이 다수 탑재되어 있습니다.
- TCC를 사용하면 컴파일 시 명령줄 스위치를 사용하여 프로그램을 자동으로 실행할 수 있습니다.이를 통해 shebang interpreter 디렉티브 구문을 지원하는 Unix 계열 시스템에서 프로그램을 셸 스크립트로 실행할 수 있습니다.
컴파일된 프로그램 퍼포먼스
일반적으로 TCC의 구현은 최적의 결과를 얻기보다는 소형화를 강조합니다.TCC는 단일 패스로 코드를 생성하며 다른 컴파일러에 의해 실행되는 최적화의 대부분은 수행하지 않습니다.TCC는 모든 스테이트먼트를 자체적으로 컴파일하여 각 스테이트먼트의 마지막에 레지스터 값이 스택에 다시 쓰여져 다음 행이 레지스터 값을 사용하더라도 다시 읽어야 합니다(스테이트먼트 간에 불필요한 저장/로드 쌍을 생성).TCC는 사용 가능한 레지스터의 일부만을 사용합니다(예를 들어 x86에서는 함수 [5]호출 전체에서 ebx, esi 또는 edi를 유지할 필요가 있기 때문에 사용하지 않습니다).
TCC는 모든 연산에 대해 일정한 전파, 곱셈 및 분할이 적절한 경우 시프트에 최적화되고 비교 연산자가 특별히 최적화되는 등 몇 가지 최적화를 수행합니다(프로세서 플래그를 위한 특수 캐시를 유지).또한 간단한 레지스터 할당도 수행하므로 단일 문 내에서 많은 저장/로드 쌍을 방지할 수 있습니다.
다음으로 두 가지 벤치마크 예를 제시하겠습니다.
- 512 MB RAM 탑재 1.8 GHz 인텔 Centrino 노트북 PC의 재귀 Fibonacci 알고리즘에 의해 Microsoft Visual C++ 컴파일러 13.10.3052와 TCC의 결과가 현저하게 다릅니다.49번째 피보나치 수치를 계산하기 위해 MS Visual C++ 프로그램은 TCC [citation needed]컴파일 프로그램보다 약 18% 더 오래 걸렸습니다.
- 테스트에서는 다른 C 컴파일러를 사용하여 GNU C 컴파일러(GCC) 자체를 컴파일하고 그 컴파일러를 사용하여 GCC를 다시 컴파일하는 방법으로 비교했습니다.GCC 3.4.2와 비교하여 GCC 컴파일을 위해 수정된 TCC는 컴파일러를 10배 빠르게 컴파일할 수 있었지만 결과적으로 생성된 .exe는 57% 더 크고 훨씬 더 느려서 GCC를 다시 [6]컴파일하는 데 2.2배 더 오래 걸렸습니다.
그 결과: GCC 3.4.2를 사용하여 컴파일한 경우 cc1(GCC C 컴파일러)을 단독으로 실행하려면 518초, Microsoft C 컴파일러를 사용하여 545초, TCC를 사용하여 1145초가 소요되었습니다.처음부터 이러한 컴파일러를 작성하기 위해 GCC(3.4.2)는 GCC 컴파일러를 컴파일하는 데 744초가 걸린 반면 TCC는 73초밖에 걸리지 않았습니다.각 컴파일러의 최적화 수준은 -O1 또는 유사했습니다.
사용하다
- TCCBOOT는 [7]약 10초 만에 소스에서 Linux 커널을 로드하고 부팅하는 해킹입니다.즉, 디스크에서 Linux 커널 소스 코드를 읽고 실행 가능한 명령을 메모리에 쓴 후 실행을 시작하는 "부트 로더"입니다.이를 위해서는 Linux 빌드 프로세스를 변경해야 했습니다.
- TCC는 트러스트 [8]공격에 대한 방어를 나타내기 위해 사용되었습니다.
- TCC는 GCC 컴파일에 사용되고 있습니다만,[9] 이 작업을 실시하기 위해서는 다양한 패치가 필요했습니다.
- Cinpy는[10] Python 모듈에서 C로 함수를 구현할 수 있는 Python 라이브러리입니다.함수는 런타임에 TCC를 사용하여 컴파일됩니다.결과는 ctypes 라이브러리를 통해 Python에서 호출할 수 있습니다.
- JavaScript[11] Linux(Bellard에서도 설치됨)에 제공됩니다.
- 슈퍼 마이크로맥스 체스 프로그램 [12]소스의 컴파일된 버전에 대한 참조로 사용되었습니다.
역사
TCC의 기원은 Bellard가 2001년 국제 난독화 C 코드 콘테스트(IOCC)에서 우승하기 위해 작성한 프로그램인 OTCC([1]Orfulated Tiny C Compiler)입니다.그 후 Bellard는 프로그램을 확장 및 해독하여 [1]tcc를 생산했습니다.
2012년 2월 4일 이전에 Fabrice Bellard는 프로젝트의 공식 웹 페이지를 업데이트하여 TCC에서 [13]더 이상 일하고 있지 않음을 보고했습니다.
Bellard가 프로젝트를 그만둔 이후 다양한 사람과 그룹이 TCC의 패치를 배포하거나 TCC의 문제를 수정하거나 구축하기 위해 TCC의 포크를 유지 보수하고 있습니다.여기에는 Dave Dodge의 비공식 tcc [14]패치 컬렉션, Debian 및 kfreebsd 다운스트림 패치,[15] Grischka의 gcc [6]패치 등이 포함됩니다.Grichka는 또한 공유 빌드, 크로스 컴파일러 및 SELinux 호환성을 포함한 수많은 기여가 추가된 Mob[17] 브랜치를 포함하는 프로젝트를[16] 위한 공개 Git 저장소를 설정했다.GRISHKA의 GIT 저장소는 나중에 공식 TCC 저장소가 되었다(Fabrice Bellard의 Savannah 프로젝트 페이지에 링크).
현황
2017년 12월 현재 공식 TCC 메일링[19] 리스트와 공식 Git 저장소(Fabrice Bellard의 Savannah 프로젝트[20] 페이지 링크)는 많은 개발자와 관심 있는 사용자들의 활발한 토론과 개발을 보여준다.2017년 12월, Grischka는 TCC 버전 [21]0.9.27이 출시되었다고 메일링 리스트에 발표했다.
「 」를 참조해 주세요.
- GNU 컴파일러 컬렉션
- LCC(컴파일러)
- 휴대용 C 컴파일러 (PCC)
- 스몰-C
레퍼런스
- ^ a b c 벨라드, 파브리스난독화된 Tiny C 컴파일러, IOCCC 2001 우승.https://bellard.org/otcc/ 및 인터넷 아카이브(https://web.archive.org/web/20130721162702/http://www.ioccc.org/2001/)에 있습니다.
- ^ Tiny C 컴파일러 레퍼런스 문서 2008-08-07에 액세스
- ^ 프로젝트의 TODO 목록에 따르면 C99 기능이 누락된 것은 복합 유형뿐입니다.가변 길이 어레이는 TCC 0.9.26에 추가되었습니다.
- ^ Tiny C 컴파일러 홈페이지
- ^ 글뢰크너, 다니엘Tinycc-devel (주제 없음), 2006년 9월 8일
- ^ a b grischka, GCC by TCC (일부 수정), 2005년 9월 29일
- ^ TCC부트
- ^ 휠러, 데이비드 A다양한 이중 컴파일을 통한 신뢰에 대한 대응.ACSAC
- ^ tinycc-devel(표준)
- ^ Cinpy 2008-11-20 Wayback Machine 아카이브 완료
- ^ 자바스크립트 리눅스
- ^ 슈퍼 마이크로맥스 체스 엔진
- ^ TCC 홈페이지의 가장 오래된 archive.org 스냅샷은 Fabrice Bellard의 TCC 작업 중단 발표를 보여줍니다.
- ^ Dave Dodge의 비공식 tcc 패치 컬렉션 2007-03-31 Wayback Machine 아카이브
- ^ Debian 및 kfreebsd 다운스트림 패치
- ^ grischka, tcc용 퍼블릭 Git 호스팅
- ^ 그리슈카, tcc용 몹브런치
- ^ 사바나 공식 프로젝트 페이지
- ^ 공식 TCC 메일링 리스트
- ^ 공식 Git 소스 코드 저장소
- ^ TCC 공식 메일링 리스트, 2017-12-27 엔트리
외부 링크
- 공식 웹사이트
- TCC의 액티브 메일링 리스트
- 소스 코드 저장소
- PTSource IDE-Integrated Development Environment에는 TCC가 포함되어 있습니다.