Clojure 매크로는 작성하기 쉽지만 Racket의 위생적인 매크로만큼 신뢰할 만하다고 들었습니다. 내 질문에는 두 부분이 있습니다.
gensym
위생적인 매크로와 어떻게 다릅니 까?- 라켓 매크로는 Clojure가 제공하지 않는 기능을 제공합니까? (안전성, 구성 성 등)
2
위생 매크로는 실수로 식별자를 캡처하지 않도록 확장 된 매크로입니다. 우발적 인 포획의 일반적인 문제는 위생 매크로를 도입하기 전에 Lisp 커뮤니티에서 잘 알려져 있습니다. 매크로 작성자는 문제를 피하기 위해 고유 식별자 (예 : gensym)를 생성하거나 난독 화 된 식별자를 사용하는 언어 기능을 사용합니다. 위생 매크로는 매크로 확장기 자체에 통합 된 캡처 문제에 대한 프로그래밍 방식의 솔루션입니다. en.wikipedia.org/wiki/Hygienic_macro
—
Robert Harvey
[라켓의] 위생적인 매크로 시스템은 매크로의 작동 방식에 대한 깊은 지식을 가지고 있기 때문에, 매크로는 환경에 매우 잘 통합되어 있습니다 : 구문 강조가 올바르게 작동하고, 자동 변수 이름이 올바르게 작동하고, 상호 참조가 올바르게 작동하며, 다른 것들도 모두 마찬가지입니다. 매끄러운 [라켓] IDE 기능. 다시 말해, 위생은 변수 캡처와 같은 단순한 버그로부터 사용자를 보호 할뿐만 아니라 Common LISP에는 존재하지 않는 도구로 코드를 공식적으로 분석 할 수 있습니다. randomhacks.net/2002/09/13/hygienic-macros
—
Robert Harvey