Volatiles和vswap!在1.7版本中作为高效的机制被添加到语言中,以便实现对数据的无协调突变。
鉴于它们的添加是出于性能考虑,vswap!被实现为一个宏,而不是一个普通函数,以避免对函数var的运行时解引用,以及在多个参数的情况下避免可选的apply开销。
然而,这
-是不必要的
-打破了volatile/atom swap!/vswap! reset!/vreset!之间的API并行性
-使得某些用例(update-in形式中的vswaps!)变得不可能
-可能会造成混淆,因为swap!是一个函数
事实上,可以使用:inline元数据将宏替换为函数。
这是一个严格添加性的更改,将使得对于所有当前的vswap!有效用法,没有任何变化,它仍将被内联器宏扩展;此外,由于它现在是一个函数,它可以用于HOF上下文,其中swap!的使用并不罕见。