不可变性和 vswap! 在 1.7 中被添加作为对语言进行无协调变异的高效机制。
由于它们的加入是以性能为中心的,vswap! 被实现为一个宏而不是一个普通函数,以避免在运行时多次参数的函数 var 引用和可能的开销。
然而这
-是不必要的
-破坏了 volatile/atom swap!/vswap! reset!/vreset! 之间的 api 并行性
-使得某些用法(update-in 格式中的 vswaps!)变得不可能
-由于 swap! 是一个函数,因此可能令人困惑
实际上,该宏可以用具有 :inline 元数据的函数替换。
这是一个严格增加的变化,将确保对于所有当前有效的 vswap! 使用,没有任何变化,它仍然会由分线器宏展开,并且由于现在它是一个函数,它可以在 HOF 环境中使用,在 HOF 环境中通常会看到 swap! 的使用。