类型推断是多么昂贵?

我绝对比Scala类型推理引擎更激动,但是在真实的世界环境中:

  1. 有多少表现退缩?

  2. 在编译时或运行时,何时推断出类型?

Scala的复杂而强大的类型在编译时只存在(*):从源代码(你给它们的地方)解析,推断,检查,然后最终被丢弃。 最后可能听起来是荒谬的,但它是JVM的工作方式(请参见类型擦除 ),从语言设计者的角度来看非常有用。

因此,要回答你的问题:在运行时,是否明确给出或推断类型是没有区别的,唯一的区别是编译程序需要多长时间。

(*)2.10版本将附带反射库,允许程序在运行时访问其类型信息; 这给了额外的自由 – 如果使用,当然会在运行时刻刻CPU周期 – 但不会改变上述任何一点。

有多少表现退缩?

通常认为运行时间性能与Java相当。 由于编译器的复杂性,编译时间通常比Java长。

在编译时或运行时,何时推断出类型?

在编译时。

在这段视频中 ,大约8点50分到12点50分,马丁在“现实世界”环境和表现中触及了使用情况。 他指出,有许多公司从小型初创公司到大型企业使用Scala。

Martin Odersky在回答中提到: 为什么IntelliJ IDEA如此慢地编译Scala? “类型推断是昂贵的,特别是如果涉及隐式搜索。”

问题是Scala中的编译时间比Java中长的问题来自哪里。 我很难说,因为我不是编译器构建专家。 我可以说的是类型推断在Kotlin中显然不是昂贵的,也不在Groovy2.0中。 什么减慢斯卡拉必须是别的东西,如搜索implicits。