나만의 프로그래밍 언어 만들기: 생각보다 쉽지만, 동시에 더 어렵기도 한 일

17년 경력의 개발자가 작년 12월 중순부터 게임 모딩 최적화를 위해 시작한 프로그래밍 언어 개발 프로젝트로, 현재 약 1,000줄(LOC)의 몬테카를로 패스 트레이서를 구동할 수 있는 수준까지 진행되었습니다. 기존 Lua의 샌드박싱 한계와 네이티브 모딩의 배포 문제를 해결하기 위해 시작된 이 프로젝트는 성능과 보안 사이의 균형을 목표로 합니다.

AI 요약

17년의 프로그래밍 경력을 가진 개발자 Lisyarus는 게임 모딩 시스템의 고질적인 문제를 해결하기 위해 작년 12월 중순부터 자신만의 프로그래밍 언어 개발에 착수했습니다. 기존의 모딩 방식 중 Lua는 샌드박싱이 불안정하고 ECS(Entity Component System) 구조에서 성능 오버헤드가 크며, 네이티브 방식은 플랫폼별 배포가 까다롭다는 단점이 있었습니다. 저자는 이러한 기존 솔루션들의 한계를 극복하고자 직접 컴파일러와 언어를 설계하기 시작했으며, 비록 현재는 프로젝트가 일시 중단된 상태이나 이미 1,000 LOC(라인 수) 규모의 몬테카를로 패스 트레이서를 작성하여 성공적으로 실행하는 성과를 거두었습니다. 이 과정은 언어 설계가 생각보다 시도하기 쉬우면서도, 프로덕션 수준의 품질을 확보하는 데는 거대한 노력이 필요함을 보여줍니다.

핵심 인사이트

  • 개발 타임라인 및 성과: 작년 12월 중순에 프로젝트를 시작하여, 해당 언어로 1,000라인(LOC) 분량의 몬테카를로 패스 트레이서 프로그램을 성공적으로 구현함.
  • Lua의 샌드박싱 취약점: Lua를 안전하게 샌드박싱하려면 IO 기능 등 표준 라이브러리 함수를 일일이 제거하는 복잡한 전처리가 필요하며, 이는 신뢰성이 낮다는 점을 지적함.
  • ECS 성능 오버헤드: 고성능이 필요한 ECS 엔터티 반복문 처리 시, Lua와 네이티브 코드 간의 점프로 인해 발생하는 성능 손실을 언어 제작의 주요 동기로 언급함.

주요 디테일

  • 17년의 개발 경험: 저자는 전문가 수준의 PL 디자이너는 아니지만, 17년의 프로그래밍 경력과 몇 주간의 어셈블리 코드 분석을 통해 언어 개발의 가능성을 확인한 후 프로젝트에 착수함.
  • 기존 언어와의 차별화: C/C++/Rust 등을 대체하기 위한 목적이 아닌, '게임 모딩'이라는 특정 도메인에서의 즐거움과 효율성을 목표로 함.
  • LuaJIT 파편화 문제: 표준 Lua와 LuaJIT 사이의 버전 분기(Divergence)로 인해 모더와 개발자 모두가 혼란을 겪는 상황을 개선하고자 함.
  • 네이티브 모딩의 한계: 네이티브 바이너리 배포 시 모든 플랫폼에 대한 개발 환경 구축 및 중앙 저장소 관리가 필요한 '배포의 지옥' 문제를 해결하려는 의도가 포함됨.
  • 현재 상태: 프로젝트는 현재 '일시 중지(Pause)' 상태이지만, 그동안의 경험을 바탕으로 PL 설계의 난이도와 보람을 공유함.

향후 전망

  • 도메인 특화 언어(DSL)의 가치: 범용 언어가 아닌 게임 모딩과 같은 특정 분야에 최적화된 언어 설계가 소규모 프로젝트에서도 유의미한 시도가 될 수 있음을 시사함.
  • 커뮤니티 피드백 기반 발전: 저자는 건설적인 제안과 피드백에 열려 있다고 밝혀, 향후 프로젝트 재개 시 사용자 편의성과 샌드박싱 기능이 강화될 것으로 예상됨.
Share

이것도 읽어보세요

댓글

이 소식에 대한 의견을 자유롭게 남겨주세요.

댓글 (0)

불러오는 중...