Scala中的哪些功能/特性仅作为底层平台的特许权存在,如果针对其他内容应该删除?

soc*_*soc 25 port compatibility scala llvm

前段时间我读到了关于Scala for LLVM的问题,我一直想知道Scala语言/规范/库中的哪些内容只是为了让JVM满意或改进与Java的互操作.

考虑到在LLVM上运行Scala提供了更多的自由,并且计划是移植语言(而不是围绕它的整个Java生态系统)哪些功能在那里没有意义?

指导:我想知道的事情,如Object#finalize监视器的东西(notify,wait),cloneCloneable,没有64位数组索引,集合大小限制为32位java.lang.String,Java反射,...

Bil*_*ill 21

null,null,null和null

  • 为什么Scala需要四个空值?我以为一个已经太多了...... (4认同)
  • @Kipton:说真的,null是类型系统中的一个漏洞.你提到的这些观点可能会带来一些不便,但这与居住在空引用中的邪恶力量相比毫无结果:每个空引用都是一个小定时炸弹,被扔到系统的某个地方,并在其他地方炸毁.这是一个假装成你想要的每个物体的冒名者,它会背叛你,因为它不是. (4认同)
  • 它会迫使代码永远不会留下任何未初始化的内容.这可能不方便,但它会提高稳健性.您可以将"x"重新定义为`var x:Option [List [Int]] = None`. (3认同)
  • 如果删除`null`,`var x:List [Int] = _`会是什么?另一个例子:如果父类的构造函数引用子类字段,应该返回什么值?也许访问未初始化的字段应该抛出异常?但这可能会导致性能下降. (2认同)

Dav*_*ith 19

键入擦除.让每个对象都有一个监视器引用(一个可怕的Java错误功能).


Lan*_*dei 11

AnyVal型分支可能在永恒的地狱之火燃烧.数组可以以理智的方式实现(好吧,丑陋现在很好地隐藏),同样适用于具体类型.的方法clone,hashCodetoString能进入型类属于他们的地方.可以在没有多个arg列表的情况下实现Currying.可以改进类型推断和类型级编程.