在Rascal中是否有可能创建具有不同身份的对象的克隆,以使它们相等但不相同?
答案 0 :(得分:0)
不,Rascal具有价值语义。
data X = x();
bool alwaysTrue = x() == x();
即使使用闭包,函数作为数据,也无法构造两个可区分的实例a
和b
,它们仍会在a == b
上返回true。原因是除非你有一个指向同一个实例的别名,否则闭包永远不会被认为是平等的。
也没有克隆操作或类似的东西。只有表达式,它们的结果与创建它们的表达式树同构。
语义上Rascal不保证堆上的所有值实际上都是共享的,或者它们只是无法区分,因此内存优化透视图完全由运行时实现完成。