4

语境

不会向 Clojure 代理发送新值。他们被发送一个应用于旧值的函数。在编程的最初几天,我发现这个反直觉,并且经常编写以下形式的代码:

(send some-atom (fn [old] new_value))

然后,逐渐地,我意识到发送一个更新函数而不是一个新值是多么棒。

问题:

这个想法最初来自哪里?发送更新函数(而不是新值)叫什么?这个想法是用于处理并发的不同方式的更通用技术集的一部分吗?

谢谢!

4

1 回答 1

2

Rich Hickey 将此称为此视频中的功能时间模型。转述;在传统的 OO 语言中,身份是一个对象,它通过锁定对象从时间 1 的一个状态到时间 2 的另一个状态,然后编辑该对象,使其有效地始终处于它当时所处的状态 - 2、然后解锁。您必须锁定它以确保没有人在状态之间查看它。在该视频中的棒球比赛示例中,这类似于每次球移动时让体育场内的每个人都闭上眼睛并清醒头脑。值得花时间观看原始视频。

原则是“未来是过去的函数”

标识是一系列状态,函数定义这些状态之间的转换

哦,为了回答最初的问题,Rich 将这个想法归功于 Alfred North Whitehead

于 2012-06-15T21:33:45.520 回答