라떼군 이야기


데이터 타입도, 스택도 없다: 세상에서 가장 단순한 언어 'Om'의 혁명적 접근법

TL;DR Om은 연산자, 구분자, 피연산자 단 3개의 요소로만 구성된 극단적으로 단순한 실험적 프로그래밍 언어입니다. 전통적인 데이터 타입과 스택 메모리를 없애고, 함수가 프로그램의 나머지 부분 자체를 조작하는 독특한 ‘전위 연결(Prefix concatenative)’ 방식을 채택하여 프로그래밍의 본질을 재정의합니다.


현대의 프로그래밍 언어들은 수많은 기능과 복잡한 타입 시스템을 추가하며 발전해 왔습니다. 하지만 때로는 모든 군더더기를 덜어낸 극단적인 미니멀리즘이 기술적 영감을 주기도 합니다. ‘Om’은 우리가 당연하게 여기던 데이터 타입이나 스택 구조를 완전히 배제하고, 언어의 기본 구성 요소를 단 3가지로 압축한 흥미로운 개념 증명(Proof of Concept) 언어입니다. 새로운 패러다임과 인터프리터 설계에 관심 있는 개발자라면 이 낯설고도 혁신적인 접근에 주목할 만합니다.

핵심 내용

Om 언어는 연산자, 구분자, 피연산자(중괄호 {} 사용)라는 단 3가지 구문 요소만으로 이루어져 있습니다. 가장 큰 특징은 전통적인 데이터 타입이 존재하지 않는 ‘범형(Panmorphic)’ 타입 시스템을 사용한다는 점인데, 모든 데이터는 피연산자로 취급되며 연산자는 이 피연산자 내부의 프로그램을 직접 해석하여 처리합니다. 또한 Forth 같은 후위 표기법 기반의 연결형 언어와 달리 ‘전위 표기법(Prefix)‘을 사용하여, 함수가 스택 대신 ‘프로그램의 나머지 부분’ 자체를 입력으로 받아 결과 프로그램을 출력합니다. 이를 통해 스택 언더플로우를 원천 차단하고, 단일 패스(Single-pass) 평가를 가능하게 하며, 메모리 오버헤드가 극히 적은 효율적인 재귀 처리를 구현했습니다.

기술적 인사이트

소프트웨어 엔지니어링 관점에서 Om은 코드와 데이터의 경계를 완전히 허무는 극단적인 동형성(Homoiconicity)을 보여줍니다. 기존의 스택 기반 후위 언어들이 데이터를 메모리(스택)에 쌓아두어야 했던 반면, Om의 전위 연결 방식은 데이터를 즉시 소비(Eager evaluation)하므로 상태 머신이나 이벤트 스트림 처리를 언어 레벨에서 매우 자연스럽게 모델링할 수 있습니다. 하지만 모든 데이터를 피연산자(문자열/프로그램 형태)로 취급하고 매번 파싱해야 하므로, 네이티브 정수나 부동소수점을 사용하는 기존 언어들에 비해 심각한 성능 트레이드오프가 발생합니다. 즉, 이 언어는 범용적인 실무 도구라기보다는 함수 합성, 파싱, 컴파일러 아키텍처에 대한 새로운 멘탈 모델을 제시하는 학술적 연구에 가깝습니다.

시사점

현재 Om은 C++ 헤더 온리 라이브러리로 제공되어 기존 C/C++ 프로젝트에 쉽게 내장(Embed)할 수 있습니다. 당장 상용 서비스의 메인 언어로 쓰기에는 무리가 있지만, 극도로 단순한 문법 덕분에 특수한 목적의 DSL(도메인 특화 언어), 매크로 시스템, 또는 유연한 설정 언어를 구축할 때 훌륭한 아키텍처적 영감을 줍니다. 또한, 개발자들에게 데이터 타입과 메모리 관리에 의존하던 기존의 사고방식에서 벗어나, ‘함수 합성과 프로그램 자체의 변형’이라는 근본적인 관점에서 로직을 설계해보는 신선한 훈련 기회를 제공합니다.


Om 언어는 우리에게 ‘프로그래밍 언어에서 정말로 필수적인 요소는 무엇인가?‘라는 근본적인 질문을 던집니다. 끊임없이 복잡해지는 현대 기술 생태계 속에서, 때로는 이처럼 모든 것을 비워낸 미니멀리즘적 접근이 복잡한 시스템을 설계하는 새로운 열쇠가 될지도 모릅니다.

원문 읽기

협업 및 후원 연락하기 →