我听说过很多关于不同 JVM 语言的信息,这些语言仍处于蒸气软件模式,建议以某种方式实现具体化。我有一个半记得的(或者完全想象的,不知道是哪一个)的想法,我在某处读到 Scala 以某种方式利用 JVM 的类型擦除来完成具体化无法完成的事情。这对我来说并没有什么意义,因为 Scala 是在 CLR 和 JVM 上实现的,所以如果具体化导致某种限制,它会显示在 CLR 实现中(除非 CLR 上的 Scala 只是忽略具体化) 。
那么,对于 Scala 来说,类型擦除有好的一面吗?或者具体化是一个十足的好事吗?
See 奥拉·比尼的博客 http://olabini.com/blog/2010/07/questioning-the-reality-of-generics/。众所周知,Java 具有使用站点协方差,通过在您认为方差合适的地方打上一些问号来实现。 Scala 具有定义站点协变性,由类设计者实现。他说:
泛型是一个复杂的语言功能。就变得更加
当添加到已有的现有语言中时会变得复杂
子类型化。这两个功能不能很好地结合在一起
一般情况下,将它们添加到
语言。将它们添加到虚拟机中很简单,如果该机器
只需要提供一种语言 - 并且该语言使用相同的语言
仿制药。但泛型还没有完成。目前还不完全明白如何
正确处理并且新的突破正在发生(Scala 是
很好的例子)。此时就不能考虑泛型了
“做得对”。仿制药不仅只有一种类型——它们的不同之处在于
实施策略、功能和极端案例。
...
这一切意味着,如果您想将具体化泛型添加到
JVM,您应该非常确定该实现可以包含
两种静态语言都想在自己的领域进行创新
泛型的版本,以及所有想要创建一个
良好的实现和与 Java 的良好接口设施
图书馆。因为如果你添加具体化的泛型,则无法满足
这些标准,你会扼杀创新并使其如此
很难将 JVM 用作多语言 VM。
也就是说,如果我们在 JVM 中具体化泛型,那么这些具体化泛型很可能不适合我们真正喜欢的 Scala 功能,并且我们会陷入一些次优的困境。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)