当前位置 : 主页 > 网络安全 > 测试自动化 >

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

来源:互联网 收集:自由互联 发布时间:2021-06-22
根据 Haskell文档, you can’t pass a primitive value to a polymorphic function or store one in a polymorphic data type. This rules out things like [Int#]. 是否有意义创建一个自定义列表实现,比如IntList,它只是Ints专用的
根据 Haskell文档, you can’t pass a primitive value to a polymorphic function or store one in a polymorphic data type. This rules out things like [Int#].

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

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

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

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

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

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

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

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

adaptive-containers包是对多态数据类型的类型索引特化的这些想法的实现.

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

网友评论