Volatiles 和 vswap! 在 1.7 版中加入,作为性能高效的机制,用于实现语言的无协同变异。
鉴于其添加主要是性能驱动的,vswap! 被实现为一个宏,而不是一个普通函数,以避免运行时对函数 var 的解引用和可选的多个参数中的 apply 负荷。
然而,这
-是不必要的
-打破了 volatile/atom、swap!/vswap!、reset!/vreset! 之间的 API 并行性
-使某些用例(如 update-in 表单中的 vswaps!)变得不可能
-鉴于 swap! 是一个函数,可能会引起混淆
事实上,该宏可以用一个带有 :inline 元数据的函数替换。
这是一个严格增量性的更改,将确保对于所有当前的 vswap! 有效用法,将不会发生变化,它仍然会被内联器宏展开,并且由于现在它是一个函数,它可以在 HOF 环境中使用,其中 swap! 的使用并不罕见。