我对Scala类型推理引擎感到非常激动,但在现实环境中:
它的性能回退多少?
何时在编译时或运行时推断出类型?
答案 0 :(得分:18)
Scala的复杂而强大的类型在编译期间仅存在(*):它们从源(您给出它们)进行解析,推断,检查,然后最终丢弃。最后可能听起来没有意义,但它是JVM的操作方式(参见type erasure)并且从语言设计者的角度来看非常有用。
所以,回答你的问题:在运行时,显式给出或推断类型没有区别,唯一的区别在于编译程序需要多长时间。
(*)2.10版本将附带一个反射库,允许程序在运行时也访问其类型信息;这增加了自由度 - 如果使用它当然会在运行时刻录CPU周期 - 但不会改变任何上述点。
答案 1 :(得分:4)
有多少表演退缩了?
通常认为运行时性能与Java相当。与Java due to the complexity of the compiler相比,编译时间通常更长。
何时在编译时或运行时推断出类型?
在编译时。
在大约8:50到12:50的video中,Martin谈到了“现实世界”环境和性能的使用。他指出,有很多公司使用Scala从小型创业公司到大型企业。
答案 2 :(得分:0)
Martin Odersky在这个答案中提到了这一点:Why does IntelliJ IDEA compile Scala so slowly?“类型推断成本很高,特别是如果它涉及隐式搜索。”
答案 3 :(得分:-2)
问题是Scala中的编译时间比Java更长的问题来自于。我很难说,因为我不是编译器建设专家。我可以说的是,类型推断显然在Kotlin中并不昂贵,也不在Groovy2.0中。什么减慢Scala必须是其他东西,如搜索implicits。