매크로가 아니다

2009-04-21

라이센스 - The GNU Free Documentation License 원저자 - Conrad Barski, M.D. 원본 출처 - http://lisperati.com/casting.html

이 강좌의 부분적 목적은 Lisp의 진짜 매크로라는 어려운 것에 관해 다룰 수 있는 방법에 대한 실험이었다. 종종, 매크로라는 것에 대한 개념을 다른 언어만 사용해 본 사람들에게 설명하려고 할 때면, “아 그래! C++에도 매크로 같은 게 있다구!“라는 반응을 보곤 한다. 그렇게 되면, “진짜 매크로"란 걸 설명하기가 아주 힘들어진다. 왜냐면 “매크로"란 말에 실려 있는 의미 때문이다. 무엇보다, “진짜 매크로"는 C++에 있는 그런 것, 수정된 코드를 컴파일러에게 알려주는 그런 방식과 전혀 같지 않다.

…그러니 상상해 보라 만일 John McCarthy가 “add” 란 단어를 “cons"대신에 목록에 항목을 연결하기 위해 썼다고 하면, 어떻게 cons가 일어나는지를 설명하기가 매우 힘들어졌을 것이다. 그러니, 나는 이 글에서 매크로 대신에 새로운 용어를 시험해보기로 했다. SPEL, “Semantic Program Enhancement Logic, 내용적 프로그램 확장 로직(용어 복잡하다;)”, 좀 억지스런 면이 있지만, 이 용어는 많은 장점이 있다.

1.Lisp 매크로가 Lisp 환영에서 바꿀 수 있는 그 마술같아 보이는 힘을 표현할 수 있다. 2.SPEL이라는 용어는 주문과 주문을 왼다는 은유를 사용해서 아주 다양한 방법으로 우아하게 프로그래밍 개념을 설명할 수 있다. 3.이 용어는 다른 언어의 매크로와 진짜 매크로 사이에 혼동을 방지한다. 4.spell이라는 용어에 실린 의미 부하는 매우 적다. “(macro OR macros) programming -lisp -scheme"라는 내용에 대한 구글 검색 결과는 28400 건이다. “(macro OR macros) programming (lisp OR scheme)” 라고 하는 걸 찾아보면 문제는 더 심각해진다. 395000건 밖에 안 된다! 그러니 바라건대, Lisp프로그래머라면, 이 새로운 용어를 지지하는 것을 고려하게 되기를. 물론, 어떤 새로운 문화 유전자도 성공 가능성은 매우 낮다. 라이브러리가 있거나 Lisp 를 구현하는 분이라면, 제발, 하던 걸 당장 내려놓고 라이브러리에 다음 한 줄을 추가하세요. (defmacro defspel (&rest rest) `(defmacro ,@rest))

그럼, 만사가 해결됐죠!

:)

– Conrad Barski, M.D.

땡강 악당은 혼자 다니지 않는다.