0

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

4

1 回答 1

0

不,Rascal 具有值语义。

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

即使使用闭包、函数作为数据,你也不能构造两个可区分的实例ab它们仍然会在a == b. 原因是闭包永远不会被认为是相等的,除非你有一个指向同一个实例的别名。

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

从语义上讲,Rascal 不保证堆上的所有值实际上都是共享的,或者它们只是无法区分的,因此内存优化的观点完全留给了运行时实现。

于 2014-04-11T18:34:43.187 回答