Scala 类型推断有多贵?

Scala 类型推断有多贵?,scala,Scala,对于Scala类型的推理引擎,我肯定非常激动,但在现实环境中: 它的性能下降了多少 何时在编译时或运行时推断类型 它的性能下降了多少 运行时性能通常被认为与Java相当。与Java相比,编译时间通常更长 何时在编译时或运行时推断类型 在编译时 在这篇大约8:50到12:50的文章中,Martin谈到了在“真实世界”环境中的使用和性能。他指出,从小型初创企业到大型企业,有许多公司都在使用Scala。Scala精巧而强大的类型在编译期间只存在(*):它们从源代码(您提供它们的地方)解析、推断、检查,

对于Scala类型的推理引擎,我肯定非常激动,但在现实环境中:

  • 它的性能下降了多少

  • 何时在编译时或运行时推断类型

  • 它的性能下降了多少

    运行时性能通常被认为与Java相当。与Java相比,编译时间通常更长

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

    在编译时


    在这篇大约8:50到12:50的文章中,Martin谈到了在“真实世界”环境中的使用和性能。他指出,从小型初创企业到大型企业,有许多公司都在使用Scala。

    Scala精巧而强大的类型在编译期间只存在(*):它们从源代码(您提供它们的地方)解析、推断、检查,最后丢弃。最后一种可能听起来很荒谬,但它是JVM的操作方式(请参阅),从语言设计者的角度来看,它非常有用

    因此,为了回答您的问题:在运行时,类型是显式给定的还是推断的没有区别,唯一的区别在于编译程序需要多长时间


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

    问题是Scala中的编译时间比Java中的编译时间长的问题从何而来。我很难说,因为我不是编译器构造专家。我能说的是,类型推断在Kotlin和Groovy2.0中显然并不昂贵。降低Scala速度的一定是其他因素,比如搜索隐式。

    Martin Odersky在回答中提到了这一点:“类型推断成本很高,特别是当它涉及隐式搜索时。”

    您应该更清楚地说明,类型推断对性能根本没有负面影响。@KimStebel,事实上,这是一个很好的观点,唯一有形的性能负面影响发生在编译时;编译器本身当然是完全不受影响的,它可能不太关心您坐在那里等待。没有。Groovy是动态类型的,不使用类型推断。所有类型都在运行时解析。Scala在编译时解析所有类型。不,不是从Groovy2.0开始,在Groovy2.0中,如果使用@CompileStatic注释方法或类,则可以使用>静态<类型。这样做时,不必声明类型。Groovy在大多数情况下都可以推断出来。见[链接]()Scala比其他语言需要更长的编译时间的原因是对隐式和非常严格的类型系统的搜索,在这两种语言中,需要做的匹配工作比在类型系统较弱的语言中要多得多。麻烦的是,您会被严重贬低,这仅仅是因为有人不知道Groovy同时具有类型推断和可选属性静态类型…顺便说一句,几天前我意识到,即使Go也有一定程度的类型推断。Go的首要任务是缩短构建时间!在运行时,类型推断并不重要,因为编译器在编译时已经推断出它们,因此对于当前构建来说,类型推断是一劳永逸的。