Haskell性能:手动无盒装列表?

yon*_*ong 5 performance haskell

根据Haskell文档,您不能将原始值传递给多态函数或将其存储在多态数据类型中.这排除了[Int#]之类的东西.

创建自定义列表实现是否有意义,比如说IntList,这只是专门用于Ints 的列表类型?一个人已经存在吗?

Don*_*art 7

是的,它确实有意义,因为有一些有趣的混合惰性/严格数据结构比严格的,扁平的,未装箱的数组具有更好的复杂性,但是比懒惰的盒装结构更有效.

我描述了这样的数据类型,以及构建它们的方法,而不需要在以下方面使用手动拆箱:

http://donsbot.wordpress.com/2009/10/11/self-optimizing-data-structures-using-types-to-make-lists-faster/

天真地,您可以使用多态元素的通用表示来转换延迟链表(或类似的延迟结构):

在此输入图像描述

进入一个"等效"结构,专门用于表示元素类型的节点,删除每个节点的几个间接:

在此输入图像描述

特别是,多态的spine-lazy,node-strict/unboxed数据类型,但是对每种元素类型专门化容器更加密集,并且具有比通用盒装(多态)数据类型快得多的常数因子.

这是以编译时复杂性和实例生成为代价的,但我认为这是一个富有成效的研究领域.这些类似于模板专用数据类型.

自适应的容器包是这些想法为多态的数据类型的类型索引的专业化的实现.

最大的好处是树/词典/集和其他纯功能容器类型.