【发布时间】:2013-11-21 10:29:45
【问题描述】:
Rascal 感觉既实用又必要。它支持任务。但它也声称是纯净的。所以我想像分配这样的功能是模拟的。那么什么是 Rascal 的命令式模型,通过 monad 的 Haskell 方式或通过唯一性的 Clean 方式?
【问题讨论】:
标签: rascal
Rascal 感觉既实用又必要。它支持任务。但它也声称是纯净的。所以我想像分配这样的功能是模拟的。那么什么是 Rascal 的命令式模型,通过 monad 的 Haskell 方式或通过唯一性的 Clean 方式?
【问题讨论】:
标签: rascal
Rascal 是纯粹的,因为它的数据实例是不可变的,并且一切(函数参数传递、赋值、调用 Java 方法)都是按值传递的。不可能有别名 (*)。
即使使用全局变量或类似的捕获堆栈位置的闭包,所有赋值都是按值进行的,但它们是真正的赋值。 I.o.w.没有单子,没有唯一性类型,只有简单直接的副作用,但没有别名和突变。
使 Rascal 中的 Java 代码“安全”的副作用是发送/接收数据总是通过(反)序列化不可变值,即您确实无法通过 Java 将有状态数据引用到 Rascal(除非你开始用int 或loc 编码指针:-)
(*) 你可以使用闭包创建一种别名形式,但你必须先跳过几个高环才能做到这一点。
【讨论】: