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

Nat*_*hes 10 type-systems scala type-erasure reification

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

那么,为Scala键入擦除是否有好的一面,或者物化是一件毫不畏惧的好事?

Ken*_*oom 13

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

泛型是一种复杂的语言功能.当添加到已经具有子类型的现有语言时,它变得更加复杂.在一般情况下,这两个功能并不能很好地结合在一起,在将它们添加到语言时必须非常小心.如果该机器只需要提供一种语言,那么将它们添加到虚拟机很简单 - 并且该语言使用相同的泛型.但是仿制药还没有完成.目前尚不完全了解如何正确处理并且正在发生新的突破(Scala就是一个很好的例子).在这一点上,泛型不能被认为是"做得对".不仅有一种类型的泛型 - 它们在实现策略,功能和角落案例方面各不相同.

...

这一切意味着如果你想将已知的泛型添加到JVM,你应该非常肯定该实现可以包含所有希望在他们自己的泛型版本中进行创新的静态语言,以及所有想要的动态语言.使用Java库创建一个良好的实现和良好的接口设施.因为如果添加不符合这些标准的reified泛型,您将扼杀创新并使JVM更难用作多语言VM.

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