Rust but Lisp: Rust의 의미론을 위한 S-Expression 구문 탐구

시스템 프로그래밍과 함수형 구문의 교차점은 언어 설계자들에게 오랫동안 매혹적인 지점이었습니다. "rust-but-lisp" 프로젝트는 S-expressions를 사용하여 Rust 코드를 작성하는 방법을 제공함으로써 이 간극을 메우려고 시도합니다. 새로운 런타임이나 가비지 컬렉터를 가진 새로운 언어를 도입하는 대신, 이 프로젝트는 Lisp와 유사한 인터페이스를 통해 Rust의 기존 의미론을 드러내는 것을 목표로 합니다.

핵심 개념: Rust의 의미론, Lisp의 구문

"rust-but-lisp"의 주요 목표는 Rust의 강력한 안전성과 성능 보장을 S-expressions에 직접 매핑하는 것입니다. 커뮤니티 구성원들이 언급했듯이, 이 프로젝트는 새로운 의미론을 도입하지 않습니다. 본질적으로 Rust이지만, 다른 구문으로 표현된 것입니다. 이러한 접근 방식은 개발자가 Lisp 구문의 구조적 명확성(또는 복잡성)을 실험하면서 Rust의 소유권 모델, 빌림(borrowing), 그리고 제로 코스트 추상화(zero-cost abstractions)를 활용할 수 있게 해줍니다.

이 접근 방식에 찬성하는 주요 논거 중 하나는 사용자가 전통적인 C 스타일 구문에 얽매이지 않고도 메모리 안전성과 동시성 측면에서 높이 평가받는 Rust의 특정 의미론으로부터 이점을 얻을 수 있다는 점입니다. 한 기여자가 다음과 같이 지적했습니다:

I think some comments are missing the upside of it being precisely Rust, without any new semantics... The purpose of bringing Rust into it is to surface Rust-specific semantics -- which many people quite like!

커뮤니티 비판 및 기술적 과제

개념적인 매력에도 불구하고, 이 프로젝트는 Hacker News 커뮤니티로부터 구현, 유용성, 그리고 LLM 통합이라는 세 가지 주요 영역에 집중된 상당한 조사를 받았습니다.

1. "AST-as-Input" 문제

여러 비판가들은 이 프로젝트가 제대로 된 Lisp 방언이라기보다는 Rust의 추상 구문 트리(AST)를 S-expressions로 직접 매핑한 것에 가깝다고 주장합니다. 이는 전통적인 Lisp 프로그래밍에 익숙한 사람들에게 "weirdness"라는 느낌을 줍니다. 비판의 핵심은 AST를 구문으로 작성하는 것이 매크로와 동형성(homoiconicity) 같은 Lisp의 고유한 강점을 위해 설계된 언어로 작성하는 것과는 근본적으로 다르다는 것입니다.

2. 구문 범위 및 예외 사례

기술적 회의론자들은 프로젝트가 포괄적인 구문 범위를 주장함에도 불구하고, Rust 문법의 가장 까다로운 측면들에 대한 예시가 부족한 경우가 많다고 지적했습니다. 특히, 수명(lifetimes)과 "turbofish" 연산자(::<>)에 관한 예시가 없다는 것은 매핑이 주장만큼 완전하지 않을 수 있음을 시사합니다.

3. LLM의 개발 역할

A 논의의 상당 부분은 생성(generation)을 위한 대규모 언어 모델(LLM)의 사용에 관한 것이었습니다. 이는 두 가지 측면에서 논쟁을 불러일으켰습니다:

  • Parser Complexity: S-expression 파서(parser)는 작성하기가 매우 간단하기로 유명하므로, 구현을 위해 LLM에 의존하는 것이 불필요해 보인다는 주장입니다.
  • AI Compatibility: 흥미롭게도 일부 사용자들은 S-expressions가 LLM 기반 코딩 에이전트에게는 오히려 poor한 선택이라고 제안했습니다. 이러한 모델들은 깊게 중첩된 괄호의 일치 여부를 확인하는 데 어려움을 겪는 경우가 많으며, Algol 스타일이나 Pythonic 구문이 더 나은 성능을 보이는 경우가 많기 때문입니다.

더 넓은 맥락: Lisp에서의 소유권

"rust-but-lisp" 프로젝트는 이러한 세계를 결합합하는 유일한 시도가 아닙니다. 논의에서는 Rust에서 영감을 받아 소유권과 빌림(borrowing)을 설계에 구체적으로 통합한 Lisp인 Loon과 같은 다른 프로젝트들도 언급되었습니다. 이는 Lisp의 고수준 자유도와 Rust가 현대 시스템 프로그래밍의의 핵심인 엄격한 메모리 관리를 결합한 언어를 만드는 것에 대한 관심이 높아지고 있음을 시사합니다.

결론

"rust-but-lisp"를 누군가는 호기심이나 "syntax sugar" 실험으로 볼 수도 있지만, 이는 언어 설계의 근본적인 질문을 던집니다: 함수형, 표현식 중심 구문의 인체공학적 측면을 시스템 언어의 엄격한 요구 사항과 성공적으로 결합할 수 있는가? 프로젝트가 현재 구현 및 LLM 의존성에 대해 비판을 받고 있지만, 대화가 생성하는 논의는 Rust의 의미론에 대한 지속적인 매력과 이를 표현하는 대적인적인 방법들에 대한 갈망망을 강조합니다.

Sources