# 내가 Common Lisp을 선택한 이유

> Clean Markdown view of GeekNews topic #18706. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=18706](https://news.hada.io/topic?id=18706)
- GeekNews Markdown: [https://news.hada.io/topic/18706.md](https://news.hada.io/topic/18706.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2025-01-13T09:51:50+09:00
- Updated: 2025-01-13T09:51:50+09:00
- Original source: [blog.djhaskin.com](https://blog.djhaskin.com/blog/why-i-chose-common-lisp/)
- Points: 11
- Comments: 2

## Summary

작성자는 Clojure의 느린 시작 속도 문제로 인해 새로운 Lisp 언어를 찾던 중, Common Lisp의 다양한 기능과 강력한 커뮤니티를 발견하고 이를 선택하였습니다. Common Lisp은 독립 실행 파일 생성, 다양한 운영 체제 지원, 빠른 런타임 속도, 멀티스레딩 지원 등 여러 요구 사항을 충족하며, 특히 CLOS와 Condition System 같은 고급 기능이 매력적이었습니다. Common Lisp의 생태계는 Quicklisp 등을 통해 다양한 라이브러리를 제공하며, Vim 및 VS Code와의 통합도 잘 이루어져 있어 개발 환경을 구축하는 데 용이했습니다.

## Topic Body

### 굿바이, Clojure  
- 약 7년간 Clojure를 사용해 왔으나 CLI 앱의 "느린 시작 속도" 문제 때문에 더 이상 만족스럽지 않았음  
- babashka 같은 프로젝트가 있었지만 GraalVM의 native-image 등으로도 느린 시작 속도를 해결하기 어려웠음  
- "단독 실행 파일의 빠른 시작 속도"가 필수 요구사항이 되었고, Clojure가 이를 만족하지 못한다고 판단  
  
### 새로운 Lisp 찾기   
- 새로운 Lisp 언어를 찾기 위해 여러 언어를 조사. 기존 프로젝트에서 겪었던 문제를 해결할 수 있는 언어를 모색  
- "명시적인 요구 사항"은 없었지만, 결과적으로 다음과 같은 기준을 정리함  
	- "독립 실행 가능하고 빠르게 시작되는 실행 파일"을 합리적인 툴체인으로 생성할 수 있어야 함 (Clojure에서의 주요 불만 해결)  
	- Emacs를 사용하지 못하므로, Vim에서 사용 가능해야함   
	- Windows와 Mac 지원이 필수이며, Linux/POSIX 운영 체제만 지원해서는 안 됨  
	- Clojure와 Java처럼 다른 대규모 커뮤니티 언어와의 플러그인 가능성이 있으면 좋음  
	- 런타임 속도가 충분히 빠를 것 (Clojure 수준 이상 선호)  
	- 멀티스레딩 지원이 강력해야 하며, 가능하다면 GIL(Global Interpreter Lock)같은게 없어야 함  
	- 강력한 커뮤니티가 필수  
	- 풍부한 생태계를 가져야 하며, 최소한 다음 라이브러리들이 구현되어야 함:  
		- JSON 파싱 및 직렬화  
		- Sqlite3 지원  
		- HTTP 리퀘스트 라이브러리  
		- Clojure와 같은 함수형 데이터 구조 지원 (다만, 이 부분은 덜 중요)  
- 조사한 언어들  
	- Scheme : r6rs와 r7rs로 표준 문제로 커뮤니티가 분열된 상태로 마음이 끌리지 않았고, 생태계가 작아 필요를 충족하지 못함   
	- Racket : 학창 시절 사용했지만 런타임이 느리고 무겁게 느껴져 선호하지 않음  
	- Common Lisp : [lisp-lang.org](https://lisp-lang.org/)에서 발견. 커뮤니티와 자료가 인상적이었으며, 시도해보기로 결정  
  
### Magic Happens Here  
  
- Common Lisp 학습 여정에 대한 전체 이야기는 생략, 그러나 학습 과정은 험난했음  
  - 시작은 잘못되었음. 크리스마스에 CLtLv2 책을 받아 이를 읽으며 시작  
  - 이후 HyperSpec을 발견하고 읽기 시작하며 더 나은 방향으로 학습 진행  
- Common Lisp의 독특한 특징이 있었음   
	- 표준화된 언어로 Java보다는 C와 유사  
	- 여러 컴파일러, 인터프리터, 런타임이 표준을 구현  
	- 다양한 구현체를 설치하고 관리할 수 있는 Roswell 같은 도구 존재  
	- 커뮤니티에서 가장 인기 있는 구현체는 SBCL로 평가됨  
- 탐색을 시작할때 만약 Janet을 알았다면?  
	- Janet은 다음과 같은 특징이 있어서 Common Lisp 학습 전 만족했을 가능성 있음  
  	- 간결한 문법, 빠르고 작은 실행 파일, C FFI 지원  
  	- [재미있는 입문서](https://janet.guide/) 존재  
  	- 개인적으로 중요하게 여긴 모든 요구사항을 충족  
- 그러나 Common Lisp을 선택한 이유	  
  - 나중에 알게된 CLOS와 Condition System 같은 고급 기능을 놓쳤을 것  
  - Common Lisp은 더 강력한 언어임   
  
### Requirements Met  
  
Common Lisp가 요구 사항을 충족하는 언어임을 확인한 후, 이를 다음 Lisp 언어로 선택하고 현재까지 사용 중. 주요 발견 사항은 다음과 같음:  
  
- 독립 실행 파일:  
  - Common Lisp에서 독립 실행 파일을 만드는 방법이 다양함  
  - 실행 파일을 압축 여부에 따라 시작 시간이 짧게는 몇 초의 일부에서 거의 즉시 실행 가능  
  - 이 기능은 부가적인 옵션이 아니라 Lisp 프로그램 배포의 주요 방법으로 설계됨  
- Vim 워크플로:  
  - 여러 훌륭한 옵션이 있지만, 개인적으로 Vim 워크플로를 직접 구성하여 사용  
  - 또한 VS Code가 Common Lisp IDE로서 사용하기에 충분히 괜찮음을 확인  
- Windows/Mac/Linux 지원:  
  - SBCL은 주요 운영 체제를 잘 지원  
- 대규모 명령형 생태계와의 통합:  
  - 대부분의 구현체가 C 언어와의 통합을 잘 지원하며 CFFI를 통해 활용 가능  
- 런타임 속도:  
  - SBCL은 런타임 속도가 매우 빠름  
- 멀티스레딩:  
  - Common Lisp 표준은 멀티스레딩에 대한 명시적 지원을 포함하지 않지만 주요 구현체들이 이를 지원  
  - Bordeaux-Threads라는 라이브러리로 다양한 구현체 간의 차이를 줄임  
  - lparallel, cl-async, blackbird 같은 라이브러리로 멀티스레딩 및 비동기 프로그래밍 가능  
- 강력한 커뮤니티:  
  - 커뮤니티 활동을 발견하며 참여  
  - 2024년 커뮤니티 설문조사 결과와 European Lisp Symposium에서 Common Lisp 커뮤니티의 활발한 활동 확인  
  - 블로그 네트워크와 subreddit에서도 커뮤니티 지원이 강력함  
- 생태계:  
  - 대부분 Quicklisp를 사용하지만, 개인적으로 OCICL로 패키지를 관리  
  - Common Lisp Cookbook, CLiki, Awesome CL 등에서 라이브러리와 기술 정보 탐색 가능  
  - 특정 라이브러리 지원:  
    - JSON: jzon  
    - Sqlite3: cl-sqlite  
    - HTTP 요청: dexador  
    - 함수형 데이터 구조: FSet, cl-hamt  
  
### 새로운 분들을 위한 참고사항  
- Common Lisp Discord에 초보자들이 늘어남에 따라, 본인이 Common Lisp를 선택하고 적응한 과정 공유를 위해 작성했음  
- 이 글이 Common Lisp에 관심을 가지는 분들에게 도움이 되길 바라는 마음임

## Comments



### Comment 33332

- Author: neo
- Created: 2025-01-13T09:51:51+09:00
- Points: 1

###### [Hacker News 의견](https://news.ycombinator.com/item?id=42671105) 
- SBCL을 사용하여 소스 코드 없이도 문제를 해결한 경험이 인상적이었음. 다른 기술 스택으로는 소스 코드가 없을 때 이렇게 빠르게 수정할 수 없었을 것임
  - SBCL은 매우 동적인 시스템이며, 소스 코드 없이도 REPL을 통해 문제를 해결할 수 있었음

- Common Lisp에서 Clojure로 전환한 경험을 공유하며, Clojure의 동시성 기능이 매력적이었음
  - babashka를 사용하여 빠른 스크립트를 작성할 때 유용했음

- vim-slime을 사용하여 생산성과 개발자 만족도가 크게 향상되었음
  - 다양한 언어에서 REPL을 사용할 수 있어 유용함
  - doom-emacs도 vim과 유사하여 생산성을 높일 수 있었음

- Lisp의 가치를 이해하지 못했지만, 관련 노래를 기억함

- Emacs/slime이 vim-slime보다 더 나은 Lisp IDE라고 주장함
  - Emacs에서 키 매핑을 변경하여 RSI 문제를 해결할 수 있었음

- Common Lisp을 취미로 사용하고 있으며, SBCL REPL에서 C# 코드를 실행하고자 함
  - 피드백 루프가 매우 빠르며, 문제를 즉시 해결할 수 있음

- Clojure와 babashka를 사용한 CLI 애플리케이션 개발 경험을 공유함
  - methodical 라이브러리를 사용하여 성능을 개선할 수 있었음

- native-image 사용 시 문제를 겪었으며, Clojure가 거의 완벽한 언어라고 생각함

- Janet 언어에 대한 관심을 표현하며, 프로젝트의 GitHub README와 FAQ가 유용하다고 언급함

- Lisp를 배우고 싶게 만든 경험을 공유하며, 특히 vim 팬인 저자가 매력적이었음

### Comment 33375

- Author: gurugio
- Created: 2025-01-13T17:44:24+09:00
- Points: 1
- Parent comment: 33332
- Depth: 1

Lisp의 가치를 이해하지 못했지만, 관련 노래를 기억함...Lisp노래가 많은데 유트부에 Land of Lisp 라는 노래가 있습니다 ;-)
