Scala将“const classes”作为Fantom的障碍是什么?

时间:2013-02-14 14:31:02

标签: scala

Fantom支持provably immutable课程。知道一个类是不可变的编译器的优点必须是众多的,其中最重要的是保证在actor之间传递不可变的消息。 Fantom的方法似乎很简单 - 它对Scala有什么困难?

2 个答案:

答案 0 :(得分:12)

Scala方面对追踪副作用的兴趣更大,这是一个比单纯不变性更难的命题。

不可变性本身并不像引用透明度那样重要,事实上,Scala的一些不可变集合不会通过“经过验证的不可变”测试,因为实际上它们不是。就任何人都可以从外部观察而言,它们是不可变的,但是它们具有用于各种目的的可变字段。

一个这样的例子是List的子类::(构成列表中所有内容但是空列表的类),其中head和{{1}的字段实际上是可变的。这样做是为了使tail能够以FIFO顺序高效组合 - 请参阅List及其ListBuffer方法。

无论如何,虽然保证不变性会很有意思,但这些东西实际上更像是一种默认可变性的语言工具。根据我的经验,在Scala编程时,它并没有成为一个实际问题。

答案 1 :(得分:1)

虽然这种方法可能很简单,但

  1. 它的保证可以通过反思来打破;
  2. 它需要相当多的努力,Scala团队可能认为不值得或不是优先考虑。