Mic*_*ent 15 types annotations clojure
在Clojure代码中何时何地放置类型注释?当性能很重要时.但是,有什么规则可以让你(只有在做Java Interop?时)以及在哪里添加它们(函数定义参数)?
Rob*_*lan 15
我所知道的最重要的原因是性能.在clojure中的类型提示会消除反射,这可能会降低性能.所以我会将类型提示放在我测量的性能关键的函数中.
在clojure.org的java interop部分中有一个描述.在评论中:
Clojure支持使用类型提示来帮助编译器避免在性能关键的代码区域中反映.通常,在存在已知性能瓶颈之前,应避免使用类型提示.
...一旦将类型提示放在标识符或表达式上,编译器将尝试在编译时解析对方法的任何调用.此外,编译器将跟踪任何返回值的使用并推断它们的使用等类型,因此需要很少的提示才能获得完全编译时解析的一系列调用.请注意,静态成员(或其返回值!)不需要类型提示,因为编译器始终具有静态类型.
您始终可以打开警告反射标记以查看反射被调用的位置,因此,类型提示可能有帮助.
编辑:
关于你的问题"仅适用于java互操作?" - 没有.即使在纯粹的clojure应用程序中,类型提示也很有用.反射速度降低性能的问题是JVM上的事实,并且是动态语言通常必须处理的问题.
关于可以放置类型提示的位置,来自clojure.org:
它们可以放在函数参数,let-bound名称,var名称(定义时)和表达式上:
| 归档时间: |
|
| 查看次数: |
4482 次 |
| 最近记录: |