# Python 500줄로 C 컴파일러 작성하기

> Clean Markdown view of GeekNews topic #10727. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=10727](https://news.hada.io/topic?id=10727)
- GeekNews Markdown: [https://news.hada.io/topic/10727.md](https://news.hada.io/topic/10727.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2023-09-05T11:36:53+09:00
- Updated: 2023-09-05T11:36:53+09:00
- Original source: [vgel.me](https://vgel.me/posts/c500/)
- Points: 10
- Comments: 1

## Topic Body

- 저자는 파이썬 코드 500줄로 C 컴파일러를 작성하는 어려운 도전을 수행했음  
- 컴파일러는 단일 패스로, 구문 트리를 먼저 구축하고 기계 코드로 변환하는 일반적인 두 패스 컴파일러와는 다르게 파싱 중에 코드를 생성함  
- 컴파일러는 WebAssembly를 대상으로 하며, 이는 실용성보다는 호기심에서 비롯된 결정임. WebAssembly의 독특한 도전 과제들, 예를 들어 레지스터의 부재와 스택 머신의 사용이 강조됨  
- 500줄 제약으로 인해, 컴파일러는 구조체, 열거형, 유니온, 전처리기 지시문, 부동 소수점, 8바이트 유형과 같은 특정 C 기능을 지원하지 않음  
- 컴파일러는 c-testsuite의 220개 테스트 케이스 중 34개를 통과하며, 피보나치 수열을 계산하는 프로그램을 성공적으로 컴파일하고 실행할 수 있음  
- 컴파일러의 코드에 대한 자세한 분석을 제공하며, C 구문의 다양한 측면을 어떻게 처리하는지, WebAssembly와 작업하는 데 있어 어려움은 무엇인지 설명함  
- 컴파일러의 복잡성에도 불구하고, 코드 품질을 희생하고 모든 것을 단일 패스에서 수행하면 놀랍게도 간결할 수 있다는 것을 보여줌  
- 이러한 종류의 단일 패스 컴파일러가 그 간결함으로 인해 자체 호스팅 언어의 stage0로서 훌륭할 수 있다고 제안  
- sloccount 도구를 사용하여 코드의 줄 수를 측정하였으며, 이때 주석, docstrings, 공백은 제외하였음

## Comments



### Comment 18956

- Author: neo
- Created: 2023-09-05T11:36:53+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=37383913) 
- 파이썬 500줄을 사용한 C 컴파일러 생성에 대한 기사, 1978년에 발표된 Tiny Pascal 컴파일러와 비교
- 컴파일러는 싱글 패스로, 코드 생성이 파싱 중에 이루어지며, 이는 초기 컴퓨터의 제한된 메모리를 수용하기 위해 C에 특별히 설계된 기능
- 자체 컴파일러 작성의 이점은 컴파일러, 인터프리터, 링커/로더 및 관련 시스템 소프트웨어를 이해하게 하며, 디버깅 노력을 돕고 개발자의 기술 수준을 향상시킴
- 이 프로젝트는 x86 어셈블리를 생성하고, 이를 바이너리로 컴파일하며, 실행하는 TypeScript 프로젝트와 같은 다른 프로젝트와 유사
- 기사는 명확한 설명을 위해 칭찬받으며, 이는 이상한 프로그래밍 언어(esolangs) 영역에서 재미있는 도전으로 간주됨
- 이해하기 쉬운 코드 500줄로 C 컴파일러를 작성하는 작업은 경험 많은 개발자들에게도 수개월의 작업이 필요한 중요한 도전으로 간주됨
- 기사는 Scheme to WASM 컴파일러와 같은 다른 작은 컴파일러에 대한 호기심을 자극함
- 비교를 위해, 기사는 Ritchie의 가장 초기의 struct 컴파일러와 v7 Unix C 컴파일러를 포함한 다른 작은 C 또는 C와 유사한 컴파일러의 코드 라인 수(LOCs)를 언급함
