2011-04-21 7 views

답변

1

즉시 볼 수있는 가장 중요한 문제입니다. Arc에는 실제 tail-call 최적화가 있으며 clojure는 JVM 제한 때문에 발생하지 않습니다. AFAIK은 최소한 Arc 함수를 JVM 메서드로 직접 호출 할 수있는 기능을 포기해야 함을 의미하며 Arc 함수를 Clojure 함수에 직접 매핑 할 수는 없다는 것을 의미한다.

아마도 평범한 클로저를 사용하여 컴파일 된/효율적인 버전의 아크를 쉽게 만들 수 없다는 것을 의미합니다. 다른 한편으로는 "장난감"통역사가 자신이하는 일을 안다면 너무 어려워서는 안됩니다.

+2

Clojure의 아크 구현이 반복 동작과 동일한 방식으로 꼬리 재귀 호출을 자동으로 제거하지 못합니다. 마찬가지로, 유사한 자동 변환은 일반적인 경우에 트램펄린을 목표로 할 수 있습니다. – fogus

+2

예, 그렇지만 문제를 이해하는 한, 아크가하는 것과 동일한 보장을주기 위해 자기 재귀가 아닌 모든 꼬리 호출을 "trampoline"해야합니다. 당신은 어디에서나 연속 전달을 사용해야한다는 것을 의미합니다. 그것은 물론 할 수 있지만, 클로저가 그것을 사용하지 않는 이유가 있습니다. –

1

Clojure에서 Arc 컴파일러를 구현하는 데 큰 즐거움을 안겨주지 만, JVM 바이트 코드로 컴파일하는 것은 위에서 언급 한 TCO 문제로 인해 조금 더 어려울 수 있습니다. Clojure로 작성 되었기 때문에 JVM을 대상으로해야한다는 것은 아닙니다.

한편, Arc 인터프리터는 매우 합리적입니다.