为什么没有 F# 不可变数组?

Why there is no F# immutable arrays?

我是 F# 的新手,我注意到数组仍然是可变的。 这是因为性能影响还是因为固有的 .NET CLR 类型系统? 我知道不可变列表确实存在。

谢谢

与 OCaml 一样,F# 是一种实用的而非纯粹的语言。这是像我这样的一些人最喜欢这些语言的地方。

在 OCaml 中,数组是可变的,而 F# 桥接了 OCaml 和 .NET CLR 库。那么拥有可变数组是完全有道理的。

对于初学者来说,这两个世界之间的桥梁确实有点令人不安,最好的办法是保持现状并继续学习语言。正如开头所说,认为务实而不是纯粹

我不确定你对可变列表的说法。 F# 列表是不可变的。您可以使用可变的 .Net CLR System.Collection.Generic.List。但是当谈到列表时,FSharpers 指的是不可变的 []、[1..3],或者按名称:Microsoft.FSharp.Collections.FSharpList`1 .

F# 集合:

https://docs.microsoft.com/en-us/dotnet/fsharp/language-reference/fsharp-collection-types

不可变的核心类型是列表、映射和集合。

这实际上是即将推出的语言功能。许多人都同意您的观点,即 F# 应该具有不可变数组,包括语言创建者。它将被称为“块”:https://github.com/fsharp/fslang-design/blob/main/RFCs/FS-1094-block.md.

至于为什么它从一开始就不存在,可能只是与其他功能相比优先级较低。