Jac*_*ale 1 ocaml functional-programming
OCaml是功能性的,因此在许多情况下,所有数据都是不可变的,这意味着它不断创建新数据,或将数据复制到新内存等.
然而,它具有快速的声誉.
关于OCaml的一些讨论总是说虽然它不断创造新事物,但它仍然很快.但我找不到任何解释原因的地方.
有人可以总结为什么即使用功能方式它也很快?
此外,您应该知道副本的制作几乎不像您想象的那么频繁.只需更新不可变数据结构的已更改部分.例如,假设您有一个不可变集x.然后y,您可以定义x其中包含一个附加项.该集y将分享其大部分底层表示与x即使语义x和y完全不同的集合.对此的通常参考是Okasaki的Purely Functional Data Structures.
我认为,正如Jerry101指出的那样,如果知道在一个几乎所有对象都是不可变且短命的环境中工作,你可以使GC更快.您可以使用世代收集器,实际上没有任何对象可以使用第一代.这令人惊讶地快.
OCaml也具有可变值.对于某些情况(我希望它们在实践中很少见),您会发现使用可变性会使代码变慢,因为GC会针对不变性进行调整.
OCaml没有并发GC.这是很棒的事情.
另一个角度是OCaml实现者(Xavier Leroy等人)非常出色:-)
真实世界OCaml书似乎对OCaml中的GC有很好的描述.这是我找到的链接:https://realworldocaml.org/v1/en/html/understanding-the-garbage-collector.html