3

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

数组可变的原因在默认情况下是不可变的其他数据结构(列表、记录、哈希图、集合)中突出显示。

是否有一个原因?有不可变的替代品吗?

4

1 回答 1

4

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

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

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

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

最好问问为什么 OCaml 在其标准库中不包含不可变数组数据类型。我不确定任何人都可以对此给出明确的答案,但这可能只是因为它的要求不够,也许是因为 list 可以很好地完成类似不可变数组的事情。

于 2017-09-14T14:39:27.703 回答