对于Scala来说,键入擦除有什么好处吗?

时间:2011-08-05 01:48:06

标签: scala type-systems type-erasure reification

我一直听到很多关于不同的JVM语言,仍然处于蒸发软件模式,建议以某种方式实现具体化。我有一半的记忆(或者完全想象,不知道哪个),我认为Scala以某种方式利用JVM的类型擦除做了一些它无法用于具体化的事情。由于Scala是在CLR和JVM上实现的,因此对我来说没有任何意义,所以如果reification会引起某种限制,它会出现在CLR实现中(除非CLR上的Scala只是忽略了具体化)

那么,为Scala键入擦除是否有好的一面,或者说具体化是一件毫无疑问的好事?

1 个答案:

答案 0 :(得分:13)

Ola Bini's blog。众所周知,Java具有使用站点协方差,通过在您认为方差适当的地方几乎没有问号来实现。 Scala具有定义 - 站点协方差,由类设计者实现。他说:

  

泛型是一种复杂的语言功能。它变得更加   添加到已有的现有语言时会很复杂   子类型。这两个功能并没有很好地结合在一起   一般情况下,将它们添加到a时必须非常小心   语言。如果该机器将它们添加到虚拟机很简单   只需要提供一种语言 - 而且该语言使用相同的语言   仿制药。但是仿制药还没有完成。目前还不完全清楚如何   正确处理并且正在发生新的突破(Scala是一个   很好的例子)。此时,不能考虑泛型   “做得对”。不仅有一种类型的泛型 - 它们各不相同   实施策略,功能和角落案例。

     

...

     

这一切意味着如果你想要将改良的泛型添加到   JVM,您应该非常肯定该实现可以包含   所有想要自己创新的静态语言   泛型的版本,以及想要创建的所有动态语言   良好的实现和与Java的良好接口设施   库。因为如果添加不符合的具体化的泛型   这些标准,你将扼杀创新并使之成功   更难将JVM用作多语言VM。

即。如果我们在JVM中使用了泛型,那么很可能这些具体化的泛型不适合我们真正喜欢Scala的功能,而且我们会遇到一些不理想的问题。