clojure - 我们可以考虑 Clojure 的 STM 'functional' 吗?

标签 clojure functional-programming stm purely-functional referential-transparency

<分区>

我们知道pure functions :

  1. 始终对给定的输入返回相同的结果
  2. 不产生副作用

这将我们引向 referential transparency - 其中,可以在不改变程序行为的情况下用值替换表达式

这告诉我们一个程序可以说是purely functional如果它排除了程序运行环境中实体的破坏性修改(更新)

当我们查看 Software Transactional Memory 时,我们看到一种类似于数据库事务的并发控制机制,用于控制并发计算中对共享内存的访问。但它本身并没有什么特别的功能。

我的问题是:我们能否将 Clojure 的 STM 视为“功能性”?

最佳答案

Clojure STM 有意不是“纯函数式”的,因为它旨在管理状态,而更新状态是一种副作用。这反射(reflect)了 Clojure 的设计哲学,作为一种默认情况下更喜欢函数式编程的语言,但仍然以一种有希望的可控方式为您提供工具来做有用/有状态的事情。

关于clojure - 我们可以考虑 Clojure 的 STM 'functional' 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35937029/

相关文章:

haskell - Clojure、Haskell(和其他语言)在 STM 中使用了哪些算法?

haskell - 对于某些 TVar 具有部分原子性的 STM

java - Storm redis spout元组无一异常(exception)地丢失

functional-programming - SKI微积分和BCKW的实际应用

functional-programming - 为什么我们在 Lisp 解释器中使用序列到表达式的转换?

f# - 学习F#: What books using other programming languages can be translated to F# to learn functional concepts?

Haskell STM检查函数返回未定义

clojure - 如果线程在 `swap!` 期间更改原子的值会发生什么?

loops - Clojure 循环读取一个额外的

loops - 这是 transient 的正确用法吗?