我正致力于设计一种渐进式语言,这是我个人的一个项目,我被一个关于不变性的特定设计决定所困。
以一种语言不可知的(可能是粗糙的)方式谈到这一点,我说有两件事可以是不变的或恒定的:变量绑定和值本身。
变量绑定是常量,就像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