为什么 Reason 数组是可变的?

Why are Reason Arrays Mutable?

我想我是在问这个设计决定背后的基本原理。

数组可变的原因在默认情况下不可变的其他数据结构(列表、记录、散列映射、集合)中显得异常突出。

这有什么原因吗?是否有不可变的替代方案?

真的没有"Reason arrays"这样的东西。 Reason 是 OCaml 的替代语法,并且 OCaml 具有可变数组。然而,Reason 通常与编译为 JavaScript 的 BuckleScript 后端一起使用,它也有可变数组,但原因略有不同。

  • 在 OCaml 中,当您需要数组的特性时使用数组,通常是为了它的性能配置文件,但您可能还想将它用于内存布局,这非常简单易行与其他语言进行交互,但也需要能够通过共享地址空间的访问和变更与硬件进行通信。

  • 使用 BuckleScript,数组直接映射到 JavaScript 数组,它除了可变之外还可以动态调整大小,因此实际上是一个数组列表。在这里,您通常也会将它用于性能和与 JavaScript 的互操作,但由于实现略有不同,因此性能特征也略有不同。

在这两种情况下,如果您想要类似数组但不可变的东西,您通常会使用列表,但也有其他选项,例如 Immutable.re's Vector.

最好问一下为什么 OCaml 在其标准库中不包含不可变数组数据类型。我不确定任何人都可以给出明确的答案,但这可能只是因为它没有被足够的要求,也许是因为 list 做的不可变数组之类的事情做得足够好。