0.0000009645 fps

둠은 이제 거의 모든 플랫폼에서 포팅되었다고 해도 과언이 아닐 정도입니다. 그러나 지금까지 id Software의 이 타이틀이 Typescript의 Type 시스템 내부에서 구현된 적은 없었습니다. 이제 마침내 가능하게 되었습니다.
이 대단한 업적은 소프트웨어 엔지니어 디미트리 미트로풀로스(Dimitri Mitropoulos)가 개발했습니다. 그는 미시간 Typescript의 설립자이자 SquiggleConf의 공동 설립자입니다. 그는 게임을 Typescript의 Type 시스템 내에서 구동시키기 위해 1년간 노력한 결과를 담은 영상을 공개했습니다.
Typescript는 Javascript를 기반으로 구축된 언어로, 정적 타이핑(static typing) 기능을 추가하여 코드가 실제로 실행되기 전에 수많은 잠재적 오류를 포착합니다. 이는 마치 함수나 다른 변수가 올바르게 사용되는지 검사하는 가드레일 역할을 합니다. 일반적으로 모든 종류의 개발 분야에서 사용되지만, Typescript의 Type 시스템 자체 내에서 게임을 구동하는 것은 전례 없는 일이었습니다.
기술 애호가, 40년 된 프린터 컨트롤러에서 둠 구동에 성공하다
해당 포트는 총 177TB에 달하는 3조 5천억 줄의 타입으로 구성되어 실행됩니다. 이는 Typescript의 Type 트래커(Type tracker)를 통해 구동되며, 둠의 첫 프레임을 컴파일하는 데 무려 12일이 걸렸고(프레임당 0.0000009645 fps), 결과물을 얻기 위해서는 매초 2천만 개의 타입 인스턴스화가 실행되어야 했습니다.
미트로풀로스는 미시간 TypeScript 디스코드 서버에서 이 과정의 개선 가능성을 설명하며, 이 과정을 "1시간에서 12시간"까지 단축할 수 있다고 언급했습니다. 그는 잠재적인 성능 최적화가 가능한 지점에 대한 노트도 가지고 있다고 덧붙였습니다.
이 프로젝트는 맞춤형 WASM(WebAssembly) 런타임 내부에서 실행되며, 이후 에디터를 통해 Typescript로 처리되어 프레임이 표시되는 방식으로 작동합니다.
미트로풀로스는 이 프로젝트가 12,364개의 수기 테스트 케이스 작성, 그리고 C, C++, WebAssembly 등 여러 언어를 학습해야 했기 때문에 1년간의 고군분투의 산물이었다고 설명했습니다.
이 저자는 "저는 역대 가장 거대한 Typescript 코드베이스 중 하나를 개발했다고 자부합니다"라고 밝혔습니다. 최적화 전에는 이 프로젝트가 최대 1.25 페타바이트의 데이터가 필요할 수 있었으며, 첫 프레임 컴파일만 하려면 3개월간의 지속적인 타입 인스턴스화가 필요했습니다.
프로젝트 내 모든 타입은 수천 줄에 달했으며, 이 작업에는 RAM과 디스크 공간 같은 요소까지 갖춘 Type 시스템 내부의 가상 머신 개발이 포함되었습니다. 그는 "이 컴퓨터는 둠이 구동하는 데 필요한 116개 WebAssembly 명령어의 논리적 구현체 역할을 하는 Typescript 타입들로 만들어졌습니다"라고 설명했습니다.
미트로풀로스는 또한 Typescript Type 시스템 내의 각 값이 픽셀 한 줄에 해당하여, 총 128,000줄의 픽셀로 구성되었으며, 이는 ASCII로 표시되는 "해상도" 320x200을 이룬다고 부연 설명했습니다.
야심찬 개발자가 64KB의 작은 실행 파일에 저장된 매끄러운 3단계 Quake급 게임을 선보이다
'마이크로칩의 2억 개 살아있는 인간 신경 세포'가 둠을 플레이하는 것을 시연하다
이러한 목표를 달성하기 위해 개발자는 Typescript 컴파일러 자체의 제한 사항을 제거해야 했으며, 이 과정에서 프로젝트의 거대한 규모가 드러났습니다. 타입 트래커 런타임만 실행되는 동안 90GB가 넘는 RAM을 소모했습니다.
이 엄청난 오버헤드는 Typescript의 일반적인 도구 사용을 불가능하게 만들었고, 결과적으로 둠의 모든 요소를 타입으로 인코딩해야 하는 엄청난 난제를 야기했습니다. 이 과정에서 Typescript 타입 내부에서 L1 CPU 캐시 같은 요소를 직접 개발해야 했습니다. Typescript가 왼쪽에서 단일 문자열에 대해 반복해야 하는 특성상, 이진 알고리즘은 역순으로 입력해야 했습니다.
미트로풀로스는 "그리고 AI는 도움을 줄 수 없다"고 덧붙이며, 이 작업의 난이도가 너무 저수준(low level)이라 AI가 어떠한 작업에도 도움을 줄 수 없었음을 강조했습니다. 아쉽게도 Grok 3는 그럴 수 없었습니다.
미트로풀로스는 이 도전에 다른 'Types 챌린지'를 완료한 후 착수했으며, 이 프로젝트는 놀라운 성과를 보여주었습니다.
(End of text.)