不可变性:变量、值还是API的属性?

我正致力于设计一种渐进式语言,这是我个人的一个项目,我被一个关于不变性的特定设计决定所困。

以一种语言不可知的(可能是粗糙的)方式谈到这一点,我说有两件事可以是不变的或恒定的:变量绑定和值本身。

变量绑定是常量,就像Javascript中的const或Java中的final,其中变量不能被重新赋值。值本身是不可变的,就像C++中的const或Javascript中的Object.freeze()

我的问题是,在不可变值(而不是绑定)的情况下,不可变性应该是什么属性?

Javascript的Object.freeze中的值/对象本身

var point = {x: 10};
var frozenPoint = Object.freeze(point);

或者是C++中的类型的一部分?

const Point p(10);

或者像Rust中那样作为变量绑定?

let p = Point { x: 10 };
// vs let mut p = Point { x: 10 };

或者作为库的API的一部分?脸书的Immutable.js,谷歌的用于Java的Guava库(ImmutableList类)等等。

我知道这个问题可能没有“正确”的答案,所以我真正想要的是对这些方法的哲学和动机进行比较。

转载请注明出处:http://www.cshftz.com/article/20230526/1149222.html