HVM:Rust编写的比Haskell GHC更好的运行时


Haskell程序员可能会发现 HVM 项目非常有趣:高阶虚拟机 (HVM)是一个纯函数式编译目标,它是惰性的、非垃圾收集的和大规模并行的。
它也是 beta 最优的,这意味着在某些情况下,它可以比大多数函数运行时(包括 Haskell 的 GHC)快得多。
这得益于一种新的计算模型,即交互网络,它结合了图灵机和 Lambda 演算。该模型的先前实现在实践中效率低下,但是最近的一项突破大大提高了其效率,从而催生了 HVM。尽管是一个原型,但它在许多情况下已经击败了成熟的编译器,并且将朝着未知的性能水平扩展。
与 GHC 相比,HVM 有两个主要优势:自动并行性和 beta 最优性。
类似于 LLVM,但适用于函数式语言,随着 AMD 发布 128 核 CPU,这种方法似乎很可能会在未来长期有效。
突破点:

  1. 一种紧凑的内存格式,避免了存储一堆指针,本质上是将占用空间减半。例如,lambdas不需要一个指向其父类的指针。这听起来说起来容易做起来难。弄清楚什么时候需要指针,什么时候不需要指针是非常具有挑战性的。Fan nodes 需要2个或3个指针,这取决于它们的位置。Lambdas 需要他们的变量指向他们,而这必须始终保持同步。另外,也不清楚什么时候应该停止减少。但所有这些事情最后都有了合理的解决方案。
  2. 通过用户定义的方程来实现函数比通过Y-组合器Y-combinators和λ-编码 λ-encodings要有效得多,因为你不需要重复复制sabe big body 。这就省去了很多改写的工作,这也有很大的帮助。

 
存疑:当一个共享值被释放时,它将以不影响其他共享值的方式从被丢弃的值中释放尽可能多的内存。
示意图:第一个示例显示了一个未共享的 GC 列表。在这种情况下,它只是被完全释放(黄色圈出的区域)。第二个示例显示了一个共享的 GC 列表。在这种情况下,仅释放特定于丢弃副本的节点。
好像不是一种非常专业的引用计数形式,计数只能是 2、1 和 0。

项目点击标题