핵심 요약
- 개발자가 1998년 플로피 디스크에 보관되어 있던 구형 트랜스퓨터용 32비트 C 컴파일러 소스코드를 발굴했습니다.
- 포인터와 정수형을 구분 없이 마구 섞어 쓰던 레거시 코드 특성상 64비트 최신 M1 맥북에서는 컴파일이 불가능한 문제가 발생했습니다.
- 작성자는 컴파일러의 셀프 호스팅 능력을 유지한 채 구조체 재작성 및 프로토타입 추가를 거쳐 현대 64비트 플랫폼에 맞게 코드를 개조하고 있습니다.
요약 개발자 오스카 톨레도(Oscar Toledo G.)가 최근 수십 년 전 플로피 디스크에서 1998년경 DJGPP로 컴파일되던 트랜스퓨터(Transputer)용 C 컴파일러 소스코드를 발견하고, 이를 최신 M1 맥북 에어(64비트 환경)에서 빌드할 수 있도록 포팅한 과정을 정리했습니다.
당시 32비트 인텔 80486 환경에서는 포인터와 정수형(int)이 모두 32비트였기 때문에 두 타입을 서로 구분 없이 마구 섞어 쓰고, 심지어 `FILE *` 대신 `int`를 사용하는 등 주먹구구식 구현이 많았습니다. 또한 이 컴파일러는 조상 격인 스몰-C(Small-C)의 유산을 그대로 물려받아 `struct` 키워드도 없이 바이트 풀 배열 안에 구조체 데이터를 때려 넣는 방식을 쓰고 있었습니다. 하지만 64비트 아키텍처에서는 포인터 크기가 64비트로 늘어나면서 32비트 int로 캐스팅하던 기존 방식이 완전히 무너지게 되었습니다.
작성자는 컴파일러가 최신 64비트 환경에서 빌드되면서도, 동시에 트랜스퓨터 환경에서 자기 자신을 스스로 컴파일(셀프 호스팅)할 수 있어야 한다는 엄격한 제약 조건을 걸고 리팩터링을 시작했습니다. 스페인어로 작성된 레거시 소스코드 속에서 정수형 배열에 포인터와 상태값을 뒤섞어 넣던 인클루드 스택 로직을 정식 `struct` 형태로 교체하고, 함수 프로토타입을 선언하며 표현식 처리 모듈의 포인터 뭉개기 코드들을 일일이 뜯어고쳤습니다. 낡은 레트로 컴파일러를 현대 머신에서 살려내려는 개발자의 집념 어린 삽질기를 엿볼 수 있습니다.
Sponsored · 광고