2011-08-23 6 views
4

예를 들어 패턴 일치는 매크로를 통해 클로저 언어에 추가 할 수있는 프로그래밍 언어 기능입니다. http://www.brool.com/index.php/pattern-matching-in-clojure라이브러리를 통해 Clojure에 추가 할 수있는 언어 기능은 무엇입니까?

언어에 추가 할 수있는 다른 언어 기능은 무엇입니까?

+12

"누군가에게 포트란을 주면 그는 포트란을 갖게됩니다. 누군가에게 Lisp을 주면 그는 기뻐하는 언어를 갖게됩니다." Guy Steele –

+1

* 이런 식으로 언어에 추가 할 수없는 것을 나열하는 것이 쉬울 것입니다. 불행히도'goto'가 그들 중 하나입니다. –

+1

JVM은 적절한 테일 호출 부족과 같은 몇 가지 제한을 부과합니다 (http://blogs.oracle.com/jrose/entry/tail_calls_in_the_vm). – ponzao

답변

2

내 모자의 맨 위에는 두 가지 예가 나와 있지만 그 이상이있을 것입니다.

+0

David Nolens는 [core.logic] (http://github.com/clojure/core.logic)에서 작동하며 mini-kanren에 대해서도 언급 할 수 있습니다. – kotarak

1

, 당신이 요청해야하는 것은 추가하지 못할 것입니다. 매크로를 사용하면 거의 모든 것을 할 수 있다는 것을 컴파일러에 연결할 수 있습니다.

현재 언어에 고유 한 구문을 추가 할 수 없습니다. Clojure에는 사용자 확장기 (user extensble) 독자가 없기 때문에 독자가 매크로를 가지고 있지 않다는 것을 의미합니다 (http://dorophone.blogspot.com/2008/03/common-lisp-reader-macros-simple.html). 이것은 기술적 인 문제로 인한 것이 아니라 Rich Hickey (Clojure 창안자)의 결정 때문입니다.

할 수없는 일은 추가 꼬리 호출 의미 또는 goto과 같은 가상 매치 니스 지원이 필요한 기능을 구현하는 것입니다.

작업이 완료되었습니다 몇 가지 물건 보려면 :이 목록은 현재까지 100 %의 최대이다 Are there any Clojure DSLs?

참고.

편집 : 당신은 당신이 정말 match 도서관에서 찾아야한다 예를 들어 (이 매크로의 힘에 대한 정말 좋은 예이다)와 같은 패턴 매칭을했다 보인다 때문에

. Clojure에서 가장 빠른 패턴 일치 라이브러리입니다. http://vimeo.com/27860102

+1

당신은 여전히 ​​자신 만의 문법을 추가 할 수 있습니다 : 전체 Clojure 리더를 당신 자신의 것으로 대체하고'(my-include "file.clj")'매크로로 사용하십시오. –

0

원하는 언어 기능을 효과적으로 추가 할 수 있습니다.

이것은 컴파일 타임에 임의의 코드를 구성 할 수있는 매크로의 기능입니다. 언어 기능을 구현하기 위해 생성해야하는 코드를 파악할 수 있으면 매크로를 사용하여 구현할 수 있습니다.

내가 본 몇 가지 예 :

  • 쿼리 언어 (Korma)
  • 논리 프로그래밍 (core.logic)
  • 이미지 합성 DSL은 (clisk)
  • 산술에 대한
  • 중위 표기법
  • 대수 조작
  • 실시간 d의 선언적 정의 몇 가지주의 사항이있다

ATA 흐름 (Storm, Aleph)

  • 음악 프로그램 (Overtone, Music As Data) :이 기능은 JVM에 의해 직접 지원되지 않는 경우

    • (예를 들어, 꼬리 호출 최적화를 상호 재귀 적으로 사용하는 경우) 에뮬레이트해야합니다. 큰 문제는 아니지만 성능에 약간의 영향을 줄 수 있습니다.
    • Clojure 독자가 지원하지 않는 구문이 필요한 경우 Clojure에 현재 확장 가능한 판독기가 없기 때문에 자체 독자를 제공해야합니다. 따라서 Clojure 구문/양식을 고수하면 훨씬 쉽습니다.
    • 너무 독특하거나 고유하지 않은 경우 다른 사람이 선택하지 않을 것입니다. 표준 Clojure 규칙을 고수하면서 많은 가치가 있습니다.
    • 매크로가 필요하지 않은 곳에주의하십시오. 흔히 일반 함수 (아마도 상위 함수)를 사용하는 것만으로도 많은 새로운 언어 기능을 구현하기에 충분합니다. 일반적인 규칙은 "절대적으로 필요하지 않는 한 매크로를 사용하지 마십시오"입니다.
  • 관련 문제