Find centralized, trusted content and collaborate around the technologies you use most.
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
在 Rascal 中是否可以创建具有不同身份的对象的克隆,以便它们相等但不相同?
不,Rascal 具有值语义。
data X = x(); bool alwaysTrue = x() == x();
即使使用闭包、函数作为数据,你也不能构造两个可区分的实例a,b它们仍然会在a == b. 原因是闭包永远不会被认为是相等的,除非你有一个指向同一个实例的别名。
a
b
a == b
也没有克隆操作或类似的东西。只有表达式,它们的结果与创建它们的表达式树同构。
从语义上讲,Rascal 不保证堆上的所有值实际上都是共享的,或者它们只是无法区分的,因此内存优化的观点完全留给了运行时实现。