创建自定义列表实现是否有意义,比如IntList
,这只是Int
专用的列表类型?是否存在?
答案 0 :(得分:7)
是的,它确实有意义,因为有一些有趣的混合惰性/严格数据结构比严格的,扁平的,未装箱的数组具有更好的复杂性,但比懒惰的盒装结构更有效。
我描述了这样的数据类型,以及在不使用手动拆箱的情况下构建它们的方法:
天真地,您可以使用多态元素的通用表示来转换惰性链表(或类似的惰性结构):
进入"等同于"结构,专门用于表示元素类型的节点,删除每个节点的几个间接:
特别是,多态的spine-lazy,node-strict / unboxed数据类型,但是对每种元素类型专门化容器更加密集,并且具有比通用盒装(多态)数据类型快得多的常数因子。
这是以编译时复杂性和实例生成为代价的,但我认为这是一个富有成效的研究领域。这些类似于模板专用数据类型。
adaptive-containers包是对多态数据类型的类型索引特化的这些想法的实现。
最大的好处将是树木/字典/集合和其他纯功能容器类型。