rutils으로 커먼리습 확장해서 clojure 비슷하게, 더 편하게
커먼리습은 CLHS 이후로 언어 자체 정의는 변하지 않았다.
구현체마다 조금씩 확장이 있을수도 있지만 딱히 그렇게 하지도 않는거 같다. 그럴만도 하다고 생각하는게 어차피 커먼리습에서 lisp reader을 확장하는게 CLHS에서 정의해놓은 기능 중 하나이고, 구현체들도 스펙을 잘 구현해놓았으니까.
결국 커먼리습에서 문법이나 그런게 조금 마음에 안들거나 확장하고 싶으면 언제든지 매크로를 만들듯이 확장하면 되니까.
‘커먼리습 언어 자체를 커먼리습으로 프로그램 할 수 있다’
이런 커먼리습 확장 ‘라이브러리’ 들이 여러가지 있는데, 가장 요즘에 쓸만할거 같다고 생각하는건 rutils이다. https://github.com/vseloved/rutils
(eval-when (:compile-toplevel :load-toplevel :execute) ...)
같은거
매번 반복해서 쳐넣는걸 그냥 eval-always
으로 바꿔준다거나.
gensym
하는것도 with-gensyms
제공하거나 하는 이런류의
라이브러리들에서 보통 제공하는것들부터.1
내가 제일 유용할거 같은건:
- Clojure 같은 Lambda 함수 표현
- Hashtable, Vector, Heredoc String literal 표현
- Clojure 같은
->
,->>
threadings macros2 rutils.bind:with
: destructuring 편안하게!rutils.generic:?
: nested object에 대해서 편안하게 accessing
리터럴 표현들의 경우에는 sharpsign을 쓰는 문법이 기존 커먼리습 편집기들이랑 별 충돌 없이 잘 동작할듯.3
rutils의 기능들을 일일이 하나씩 소개하지는 않겠음. 그냥 tutorial 주욱 읽고 자기가 커먼리습 코드를 작성할때 참고해서 더 편안하고 깔끔한 코드를 짜는데 도움이 되었으면 좋겠다.
-
https://common-lisp.net/project/alexandria/draft/alexandria.html ↩︎
-
.. https://en.wikipedia.org/wiki/Thread_(computing) 이거 말고. ↩︎
-
왜냐하면
#...
와 같은 형태로 sharpsign은 http://clhs.lisp.se/Body/02_dh.htm 와 같이 더 보편적인 리더매크로 표현법이니까. ↩︎