Clojure的Agent模型历史

4

背景

Clojure代理不会收到新的值,而是接收到一个应用于旧值的函数。在程序的早期阶段,我发现这种方式有些反直觉,通常编写以下形式的代码:

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

后来我逐渐意识到,发送更新函数而不是新值有多么棒。

问题:

这个想法最初源自哪里?发送更新函数(而不是新值)被称为什么?这个想法是否属于另一种处理并发的更一般性技术集合中的一部分?

谢谢!

1个回答

2
这个视频中,Rich Hickey将其称为类似于功能时间模型。简而言之,在传统的OO语言中,标识是一个对象,在时间1时进入一种状态,在时间2时通过锁定该对象,然后编辑该对象,以使其在时间2时处于有效的状态,然后解锁它。必须锁定它以确保在状态之间没有人查看它。在视频中的棒球比赛示例中,这类似于让体育场内的每个人每次球移动时都闭上眼睛并清空他们的思想。值得花时间观看原始视频。
原则是“未来是过去的函数”。
标识是一系列状态,函数定义了这些状态之间的转换。
哦,回答最初的问题,Rich归功于Alfred North Whitehead提出的想法。

怀特海德是一位数学家 - 所以基本上是Rich发明了它? - user1383359
2
他将基本思想归功于怀特海德,自己则为实现过程负责,并提到从《Java并发编程实践》中获得了很多灵感。如果我们想更深入地探讨这个问题,也许需要来一杯啤酒;-) - Arthur Ulfeldt
你非常有知识。虽然我不喝酒,但我很愿意聊天。你碰巧住在旧金山湾区吗? - user1383359
对于旧金山湾区的任何Clojure爱好者,每月都有三次Clojure Meetup活动:http://www.meetup.com/The-Bay-Area-Clojure-User-Group/ - Arthur Ulfeldt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接