【发布时间】:2014-04-11 15:08:30
【问题描述】:
是否可以在 Rascal 中创建具有不同标识的对象的克隆,以便它们相等但不相同?
【问题讨论】:
标签: rascal
是否可以在 Rascal 中创建具有不同标识的对象的克隆,以便它们相等但不相同?
【问题讨论】:
标签: rascal
不,Rascal 具有值语义。
data X = x();
bool alwaysTrue = x() == x();
即使使用闭包、函数作为数据,您也无法构造两个可区分的实例a 和b,它们仍将在a == b 上返回true。原因是闭包永远不会被认为是相等的,除非你有一个指向同一个实例的别名。
也没有克隆操作或类似的操作。只有表达式,它们的结果与创建它们的表达式树同构。
从语义上讲,Rascal 不保证堆上的所有值实际上都是共享的,或者它们只是无法区分,因此内存优化的观点完全留给了运行时实现。
【讨论】: