我正致力于设计一种渐进式语言,这是我个人的一个项目,我被一个关于不变性的特定设计决定所困。
以一种语言不可知的(可能是粗糙的)方式谈到这一点,我说有两件事可以是不变的或恒定的:变量绑定和值本身。
变量绑定是常量,就像Javascript中的const或Java中的final,其中变量不能被重新赋值。值本身是不可变的,就像C++中的const或Javascript中的Object.freeze()。
我的问题是,在不可变值(而不是绑定)的情况下,不可变性应该是什么属性?
Javascript的Object.freeze中的值/对象本身
var point = {x: 10};
var froze
在其介绍之后,立即以哲学论断开始,即应该将“直接在代码中表达思想”。这听起来是个好主意,直到我想到了这一点:
Speed s; // there will be one single value
std::vector<Mass> m; // there may be millions/billions of values
ComputeTotalKineticEnergy();
如果有大量的质量,并且适用于一般的物理“半正方形”定律,那么在质量矢量的(隐式,必要的)循环之外的速度平方是有意义的。但是,一旦平方,Speed s变量的类型是什么
运行以下Scala代码,编译到Scala-jsVersion0.8.0中,我得到以下错误:
An undefined behavior was detected: undefined is not an instance of java.lang.String
trait MyDataType extends js.Any {
var wordy: String = js.native
}
// This usually comes from the backend.
val dataStruct = js.Dynamic.literal().asInstanceOf[MyDataType