2010-04-02 55 views

回答

15

的首要原因,我「米知道的是性能。鍵入Clojure中暗示除去反射,這會降低性能。所以我會把類型提示中,我已經測得爲性能關鍵的功能。

有在clojure.org java的互操作部分中的description其中的言論:。

的Clojure支持使用類型的提示,以幫助編譯器在避免代碼通常情況下的性能關鍵領域的反思,應該避免直到存在已知的性能瓶頸時使用類型提示

... 一旦在標識符或表達式上放置了一個類型提示,編譯器就會在編譯時嘗試解析對該方法的任何調用。此外,編譯器將跟蹤任何返回值的使用並推斷其使用的類型等,因此只需要很少的提示即可獲得完全編譯時解析的一系列調用。請注意,靜態成員(或其返回值!)不需要類型提示,因爲編譯器始終具有靜態類型。

您可以隨時啓用反射標誌上的警告來查看反射被調用的位置,因此,類型提示可能會提供幫助。

編輯:

關於你的問題「只適用於java interop?」 - 沒有。即使在純粹的clojure應用程序中,類型提示也很有用。反射問題會降低性能,這是JVM生活中的一個現實問題,也是動態語言通常需要處理的問題。

關於其中type提示可以被放置,從clojure.org:

它們可以被放置在函數的參數,讓結合的名稱,變種名稱(定義時),和表達式:

+0

在這種情況下什麼是靜態成員? – johnbakers 2016-05-12 18:19:28

8

我知道你已經接受了一個答案,這並不是對你的問題的直接回答,但劉剛發佈了一篇關於Functional Fluid Dynamics in Clojure的非常好的文章,這對於性能方面的類型提示非常有教育意義。

+0

+1這是一篇很棒的文章。 – 2010-04-02 22:49:42

+0

404 - 文章似乎已經消失:( – jocull 2014-12-02 18:05:23

+1

[wayback machine](https://web.archive.org/web/20100403083120/http://www.bestinclass.dk/index.php/2010/03/功能流體動力學在clojure /)救援! – 2015-02-28 14:43:59