핫한 이슈라 그런지 조회수 많군요 감사합니다 ㅎㅎ
정말 말도 안되는 영상이 올라와서 번역해봅니다.
1993년 출시된 고전 게임 Doom이 TypeScript 타입 시스템에서 실행될 수 있을까?
누군가에게는 황당한 질문처럼 들릴 수도 있지만, 한 개발자는 1년 이상의 연구 끝에 순수 TypeScript 타입만을 이용해 Doom을 실행하는 데 성공했다. 이 프로젝트는 무려 3조 5천억 줄(3.5 trillion lines)의 타입 코드와 177TB의 데이터를 처리하는 타입 체크 과정을 거쳐야 했으며, 12일간 TypeScript 컴파일러(TSC)가 연속으로 실행되어야 했다.
이것이 가능한 일일까? 그리고 어떤 과정을 거쳐 이 목표를 달성했을까?
이번 글에서는 해당 프로젝트의 주요 내용을 소개하고, TypeScript 타입 시스템으로 가상 컴퓨터를 구현하고 Doom을 실행하는 방법에 대해 살펴보겠다.
이 프로젝트를 진행한 개발자는 "타입 챌린지 해결"을 전문으로 하는 유튜브 채널
Michigan TypeScript (구독자 약 1만명)이다. 300개의 TypeScript 타입 챌린지를 해결한 후, 그는 "Doom이 타입 시스템에서 실행될 수 있을까?"라는 의문을 품었다.
처음에는 단순한 호기심에서 출발했지만, 프로젝트는 점점 더 깊이 빠져들었고, 결국 세계에서 가장 큰 TypeScript 코드베이스를 만들게 되었다.
이 프로젝트가 얼마나 거대한지 감을 잡기 위해, 일반적인 TypeScript 프로젝트와 비교해 보자.
그리고...
이 프로젝트는 단순히 "TypeScript로 Doom을 돌려보자"라는 개념을 넘어서, 순수 타입으로 WebAssembly 가상 머신을 구현하고, 이를 통해 Doom을 실행하는 것을 목표로 했다.
이 프로젝트의 핵심은 TypeScript 타입 시스템만을 이용한 가상 컴퓨터 구현이다.
즉, JavaScript 코드 실행 없이, 타입 시스템 자체가 프로그램 실행을 담당하는 구조를 만들어야 했다.
이 가상 컴퓨터는 다음과 같은 기능을 갖추고 있다.
RAM 및 디스크 스페이스:
콜 스택 & 서브루틴 & 메모리 포인터:
116개의 WebAssembly 명령어 구현:
타입 기반 CPU 캐시 & 가비지 컬렉터:
런타임 메모리 압축 & 데드 코드 제거:
실시간 디버깅 & 스택 트레이스:
Doom 그래픽 프레임 렌더링:
이 프로젝트를 진행하면서 TypeScript 컴파일러(TSC)의 여러 한계를 극복해야 했다.
기본적으로 TypeScript 타입 시스템에는 스택 깊이 제한, 타입 크기 제한, 재귀 제한 등이 존재한다.
이를 해결하기 위해 컴파일러 자체를 수정하여 다음과 같은 제한을 제거했다.
이 과정에서 TypeScript 타입 체크러는 100GB 이상의 메모리를 소비했고,
잘못된 코드를 작성하면 무한 루프에 빠져 시스템이 정지하는 문제가 발생하기도 했다.
이 프로젝트의 최종 목표는 "Doom을 실행하는 것이 아니라, Doom이 실행될 수 없는 이유를 찾는 것"이었다.
그러나, 모든 한계를 극복하고 결국 Doom을 실행하는 데 성공했다.
그 과정에서 다음과 같은 극한의 최적화를 수행해야 했다.
처음 계산된 실행 시간: 3개월 (1.25PB 데이터 처리 필요)
TypeScript 컴파일러가 초당 2,000만 개의 타입 인스턴스를 평가
최종 출력: TypeScript 타입 시스템이 생성한 픽셀 데이터
"TypeScript 타입 시스템으로 Doom을 실행한다"는 말은 처음에는 불가능한 농담처럼 들릴 수도 있다.
그러나, 이 프로젝트는 그것을 현실로 만들었다.
이 과정에서 개발자는 1년 동안 매일 18시간씩 작업하며 새로운 기술을 익히고, 기존의 한계를 깨뜨리는 방법을 배웠다.
결과적으로, 세계에서 가장 큰 TypeScript 코드베이스를 만들고, 타입 시스템의 극한을 실험하는 프로젝트를 완수했다.
이 프로젝트에 대한 상세한 설명은 유튜브 영상에서 확인할 수 있다.
이 미친 도전의 결과가 궁금하다면, 직접 확인해 보자! 🚀🔥
https://www.youtube.com/watch?v=0mCsluv5FXA
대충 의역하자면...
"그는 요즘 회사들이 원하는 레벨의 신입 개발자입니다."