2010-04-02 4 views
15

언제 Clojure 코드에 형식 주석을 넣으시겠습니까? 분명히 성능이 중요 할 때. 그러나 (Java Interop을 수행 할 때만) 언제 어디에 살 수있는 규칙이 있습니까? (함수 정의 인수)를 추가 할 위치는 무엇입니까? 나는 "성능입니다 알고 있어요언제 Clojure 코드에 형식 주석을 넣을까요?

답변

15

최우선 이유. Clojure의에서 힌트를 입력 그래서 내가 성능 중요한로 측정 한 기능의 유형 힌트를 넣어 것입니다. 성능이 저하 될 수 있습니다 반사를 제거합니다.

clojure.org에서 자바 상호 운용성 섹션에서 description가 발언 중 :..

Clojure의 유형의 사용은 코드 보통의 성능이 중요한 분야에서 반사를 피할 수있는 컴파일러를 지원하기 위해 힌트를 지원, 하나는 피해야한다 알려진 성능 병목 현상이 발생할 때까지 형식 힌트 사용.

... 식별자 또는 표현식에 힌트가 추가되면 컴파일러는 컴파일시 해당 메서드에 대한 호출을 해결하려고합니다. 또한 컴파일러는 반환 값의 사용을 추적하고 형식을 유추하는 등의 작업을 수행하므로 완전히 컴파일 타임에 해결 된 일련의 호출을 얻는 데 필요한 힌트는 거의 없습니다. 컴파일러는 항상 정적 유형이 있기 때문에 유형 힌트는 정적 멤버 (또는 그 반환 값!)에 필요하지 않습니다.

반사 경고 플래그를 켜면 반사가 호출되는 위치를 볼 수 있으며 결과적으로 유형 힌트가 도움이 될 수 있습니다. 귀하의 질문에 대해서는

:

EDIT "오직 자바 상호 운용성을 위해?" --아니. 유형 힌트는 순수한 클로저 응용 프로그램에서도 유용합니다. 리플렉션 성능이 저하되는 문제는 JVM에서 실제로 발생하는 문제이며 동적 언어가 일반적으로 처리해야하는 문제입니다. 그들은 함수 매개 변수에 배치 할 수 있습니다

,하자 바인딩 이름, VAR 이름 (정의 된 경우) 및 표현식 :

타입 힌트가 clojure.org에서, 배치 할 수있는 위치에 관한

+0

이 컨텍스트에서 정적 멤버 란 무엇입니까? – johnbakers

8

당신은 이미 대답을 받아 들였습니다. 귀하의 질문에 대한 직접적인 대답은 아니지만, Lau는 퍼포먼스상의 이유로 힌트를 쓸 때 매우 교육적인 Functional Fluid Dynamics in Clojure에 정말 멋진 글을 올렸습니다.

+0

+1 멋진 기사입니다. –

+0

404 - 기사가 사라진 것 같습니다. ( – jocull

+1

[wayback machine] (https://web.archive.org/web/20100403083120/http://www.bestinclass.dk/index.php/2010/03/ 기능 - 유체 역학 -에서 - clojure /) 구조! –