为什么Reason数组可变?

3
我想了解这个设计决策背后的原理。
在其它数据结构(列表、记录、哈希表、集合)默认为不可变的情况下,数组作为可变的数据结构显得有些异常。
这是有原因的吗?是否存在不可变的替代方案?
1个回答

4
实际上,"Reason数组"并不存在。Reason是OCaml的替代语法,而OCaml具有可变数组。然而,通常使用BuckleScript后端编译为JavaScript的Reason,JavaScript也具有可变数组,但原因略有不同。
在OCaml中,当您需要数组的特性时,通常会使用数组,例如其性能概况,但您可能还希望使用它的内存布局,该布局非常直观且易于从其他语言交互,但也必须能够通过访问和突变共享地址空间来与硬件通信。
对于BuckleScript而言,数组直接映射到JavaScript数组,除了可变之外,还具有动态大小,因此实际上是一个数组列表。在这种情况下,您通常会将其用于性能和与JavaScript的交互,但由于实现略有不同,性能特征也略有不同。
在两种情况下,如果您想要类似数组但不可变的东西,通常会使用列表,但也有其他选项,例如Immutable.re's Vector

也许更好的问题是为什么OCaml标准库中没有包含不可变数组数据类型。我不确定是否有人能够给出明确的答案,但可能只是因为它没有被足够请求,也许是因为列表已经很好地完成了类似于不可变数组的功能。


1
谢谢。我同意这个问题应该是“为什么OCaml标准库中没有包括一个不可变数组数据类型?” - balajeerc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接