标题可能有点令人困惑,所以让我详细说明,我一直在阅读一些关于Scala的批评.这是一封发送给Tyepsafe的电子邮件,内容是来自Coda Hale(Yammer的基础设施架构师)的 Scala的一些不足之处,所以引用:
我们不再看到lambdas是免费的,并开始在匿名课程之上将它们视为语法糖,因此我们对匿名课程产生了同样的厌恶.
所以,从这一点来看,我有几个关于lambda如何在Scala中工作的问题:
main单例对象)?是的,lambda 仍然是对象,匿名类的实例。
这就是 JVM 的工作原理,所有引用都是对象。您可以拥有引用或值(基元),并且没有办法绕过它。
Java 的更高版本有 MethodHandles。但值得注意的是,它MethodHandle仍然只是一个抽象类 - 尽管 JVM 明确知道如何在运行时进行优化。
另外值得注意的是,JVM 通常可以对抽象类(例如 Scala 的函数)执行逃逸分析,并对其进行优化。
除此之外,Scala 可以使用带有方法的任何apply对象,就好像它是Function. 在这种情况下,显式调用会apply在字节码中发出,并且您不再处理匿名类。
考虑到上述所有内容,不可能对 Scala 函数实现的性能做出一般性的陈述,这取决于您的具体代码/用例。一般来说,我不会担心,除非你遇到了一个极端的情况,你的分析器在这里指出了一个问题(这不太可能)
| 归档时间: |
|
| 查看次数: |
306 次 |
| 最近记录: |