
정규 표현식(regex)으로 도옴(Doom)을 구동하다: 프레임당 180초의 시간
요약
Artem Lytkin이 정규 표현식(regex)만을 사용하여 고전 게임 Doom을 구동하는 데 성공했습니다. 이 구현은 프레임당 약 180초가 소요될 정도로 매우 느리지만, 이진 트리 구조를 모방한 정규 표현식 점프 명령어를 통해 메모리 액세스를 구현한 기술적 성취를 보여줍니다.
핵심 포인트
- 정규 표현식의 치환 기능을 활용해 Doom의 출력을 바이트 단위로 동일하게 구현
- 정규 표현식 문자 점프 명령어를 사용하여 이진 트리 구조를 구현
- 프레임당 약 1,400만 번의 텍스트 치환이 발생하는 극도로 느린 실행 속도
- 단순한 텍스트 매칭 도구를 넘어선 정규 표현식의 강력한 계산 능력 증명
가장 무작위한 하드웨어에서 1992년 작 도옴(Doom)을 실행하는 것은 아마도 가장 흔한 비공식 프로그래밍 도전 과제가 되었을 것입니다. 우리는 이 게임이
부터 Anker 충전기에 이르기까지, 심지어 임신 테스트기에서 실행되는 것을 보았습니다. 기발한 코더들은 또한 상상할 수 없는 소프트웨어에서도 이 게임을 구동하며, 최근에는 Artem Lytkin이 정규 표현식(regular expressions)으로 이를 구현했습니다.청중의 개발자들은 아마도 경악할 것입니다. 왜냐하면 그 문장은 분명히 기괴하기 때문입니다. 보시다시피, 정규 표현식(regexes)은 프로그램에서 텍스트를 찾고 대체하는 데 사용되는 유틸리티 언어입니다. 이는 믿을 수 없을 만큼 강력하지만, 구문 자체가 마치 의미 없는 문자열처럼 보여서 종종 '쓰기 전용'이라고 불립니다. 예를 들어, /.*(\d{4}).*/g는
상상할 수 있듯이, 이는 엄청나게 느리며, Lytkin은 게임 출력의 단일 프레임을 생성하는 데 약 180초가 걸린다고 말합니다. 하지만 (a) 이것이 실제로 작동하며, (b) Lytkin은 이것이 실제로 실행 중인 Doom 출력과 바이트 단위로 동일(byte-identical)하다고 주장하는데, 각 프레임마다 거의 1,400만 번의 치환 (substitution)이 필요합니다. 심지어 키로 게임을 제어할 수도 있지만, 이 대담한 코더가 통렬하게 설명하듯, 이 게임을 플레이하는 것은 "반사 신경이 중요한 슈팅 게임(twitch shooter)이라기보다는 산탄총을 든 통신 체스(correspondence chess)에 가깝습니다."
특히 너드(nerdy) 기질이 있는 개발자라면 Lytkin이 메모리 액세스 (memory access) 부분을 어떻게 작성했는지 알고 기뻐할 것입니다. 기본적으로 표준 정규 표현식 (regex) 문자 점프 명령어를 사용하여 "가지(branch)"에서 다른 가지로 점프함으로써 이진 트리 (binary tree)를 구현했습니다. 이를 통해 해당 영역을 감싸는 "#M" 마커를 찾기 위해 96MB의 텍스트 전체를 반복적으로 스캔해야 하는 번거로움을 피할 수 있었습니다. Lytkin은 이 엔진이 초당 80,000번의 텍스트 치환 (text substitution)을 수행하기 때문에, 과제가 '할 수 있느냐'의 문제가 아니라 '우주의 열적 죽음 (heat death of the universe)이 오기 전에 게임이 실행될 수 있느냐'의 문제였다고 언급합니다.
doom-regex 저장소는 여기에 있으며, 자신의 컴퓨터에서 실행해 볼 수 있는 데모를 다운로드할 수 있습니다. 프로젝트 웹사이트에서는 정규 표현식 머신이 시각적 형식과 텍스트 형식 모두에서 어떻게 작동하는지 보여주며, 이는 보고 있으면 넋을 잃게 만듭니다. 이는 우리가 어렸을 적 디스크 조각 모음 (defragging) 유틸리티가 작동하는 것을 지켜보던 시절을 꽤나 떠올리게 합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 Tom's Hardware의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기