具有不同身份的平等对象?

时间:2014-04-11 15:08:30

标签: rascal

在Rascal中是否有可能创建具有不同身份的对象的克隆,以使它们相等但不相同?

1 个答案:

答案 0 :(得分:0)

不,Rascal具有价值语义。

data X = x();
bool alwaysTrue = x() == x();

即使使用闭包,函数作为数据,也无法构造两个可区分的实例ab,它们仍会在a == b上返回true。原因是除非你有一个指向同一个实例的别名,否则闭包永远不会被认为是平等的。

也没有克隆操作或类似的东西。只有表达式,它们的结果与创建它们的表达式树同构。

语义上Rascal不保证堆上的所有值实际上都是共享的,或者它们只是无法区分,因此内存优化透视图完全由运行时实现完成。