Rhombus: Lisp의 메타프로그래밍 파워, Python의 문법으로
Lisp 계열 언어는 오랫동안 메타프로그래밍 분야의 선두에 서 있었다. 특히 Racket은 매크로를 일상적인 프로그램에 쉽게 녹여내려는 시도를 꾸준히 이어왔다. 그러나 Lisp 특유의 괄호 중심 문법은 진입 장벽이 높아, "Lots of Irritating Silly Parentheses"라는 농담이 생길 정도였다. Rhombus는 이 두 세계의 장점을 결합하려는 신생 언어다. Racket의 강력한 메타프로그래밍 능력을 유지하면서, Python과 유사한 직관적인 문법과 합리적인 표준 라이브러리 기본값을 제공하는 것이 핵심 목표다.
언어의 배경과 현재 상태
Rhombus는 Racket 프로젝트의 일환으로, 학문적 뿌리를 두고 있다. Utah 대학의 Matthew Flatt과 홍콩 중문대학의 Wing Hei Chan이 가장 활발하게 기여하고 있으며, 두 대학 모두에서 교육용 언어로 활용되고 있다. 그러나 단순한 학문적 실험으로 머물지 않으려는 의지도 뚜렷하다. Racket Programming Language Foundation의 지원 아래 실무 환경에서도 사용 가능한 언어로 발전하는 것을 목표로 하고 있으며, 2025년 6월 22일에 1.0 릴리즈를 달성했다. 이미 Economancy라는 카드 게임 툴셋 일부가 Rhombus로 작성되는 등 비학술적 활용 사례도 나타나고 있다.
라이선스는 MIT 또는 Apache 2.0 중 선택할 수 있다. 다만 Racket 런타임 위에서 동작하기 때문에, 일부 동적 라이브러리에는 LGPL 3.0 코드가 포함된다는 점은 상용 프로젝트 도입 시 주의가 필요하다.
Java 백엔드 개발자 관점에서 주목할 이유
Java 생태계도 메타프로그래밍에서 자유롭지 않다. 어노테이션 프로세서, Lombok, AspectJ, 그리고 최근의 Annotation Processing API까지 — 런타임 혹은 컴파일 타임에 코드를 생성하거나 변환하는 수요는 꾸준히 존재한다. Rhombus가 제시하는 방식은 이 문제를 언어 레벨에서 근본적으로 다룬다는 점에서 시사점이 크다.
// 개념적 예시: Rhombus 스타일 매크로 정의
macro 'retry $n times: $body':
'for i in 0..$n: try: $body; catch _: #void'
Java에서라면 AOP나 별도 유틸리티 클래스로 처리할 로직을, 언어 자체의 문법 확장으로 표현할 수 있다는 개념이다. 또한 Racket의 기존 인프라를 재활용하기 때문에, 최적화 컴파일러와 풍부한 라이브러리 생태계를 처음부터 활용할 수 있다. 프로그램은 인터프리터 방식, 바이트코드 컴파일 등 다양한 실행 방식을 지원한다.
정리
- Rhombus는 Racket의 강력한 매크로 기반 메타프로그래밍을 Python스러운 문법으로 재포장한 언어로, 2025년 6월 1.0을 공식 출시했다.
- MIT/Apache 2.0 라이선스를 제공하지만, 기반인 Racket 런타임의 LGPL 3.0 코드 포함 여부를 상용 프로젝트 도입 전 반드시 확인해야 한다.
- 언어 레벨의 메타프로그래밍 접근 방식은 Java의 어노테이션 프로세서·AOP 패턴과 대비되며, 언어 설계 사상으로서 참고할 가치가 있다.