【发布时间】:2011-08-09 21:29:44
【问题描述】:
我是 F# 的新 C# 开发人员,我知道在 .net 中字符串是不可变的。换句话说,每次你修改一个字符串,你都会得到一个新的字符串实例。
对于像我这样的非功能性思维,第一个问题是效率,我知道 C# 可变对象不是持久的。因为字符串操作在大多数应用程序中通常是微不足道的。
我的问题是,F# 列表也是这种情况吗? F# 是否会在更改时克隆每个列表?例如,在过滤列表时,我是否会创建一个包含更少项目的新列表?
更新:我不是在比较 .net 字符串和列表。我将字符串命名为不可变对象的示例,并想知道 F# 是否为它的 List 提供任何特殊处理。
这就是我所说的“persistent”。
【问题讨论】:
-
.Net 字符串是不可变的,它与 C# 无关。 C#、VB.Net 和任何其他 .Net 语言都将具有不可变字符串,因为它是相同的代码库,并且最终是相同的 IL,而与语言无关。
-
抱歉,我编辑了标题,因为不可变数据结构是通常应用于函数式编程列表、地图等的术语,而持久对象有数据库意义上的第二个含义。
-
我同意,但这是数据结构实现术语中的标准术语。
-
虽然我完全理解您的好奇心。效率应该是您编写代码时最不担心的事情。您可以重新实现运行速度是原始速度两倍的东西,但它可以同时在 4 个处理器上运行。它现在的速度是原来的两倍。
-
我完全同意,但最好知道幕后发生的事情。
标签: f# performance immutability persistent