解组散列数据的技术选择

Pas*_*uoq 6 functional-programming marshalling

似乎有相当多的民间传说知识在限制圈内浮动,关于散乱的陷阱与编组 - 解组数据相结合.我正在寻找这些花絮的可引用参考.

例如,曾经有人向我指出了库aterm并且提到作者已经清楚地考虑过这个并且磁盘上的表示是自下而上的(节点的子节点在数据流中的节点本身之前).当您需要重新共享每个节点(内存中已有可能相同的节点)时,这确实是正确的做法.这种重新分享通行证需要自下而上完成,因此解组本身也可能也是如此,因此可以在一次通过中完成所有操作.

我正在描述在我们自己的背景下遇到的困难,以及我们找到的解决方案.我很感激任何有关上述民俗知识的引用.有些人之前显然遇到过这些问题(aterm库只是一个例子).但我没有发现任何书面形式.即使是关于aterm的一小部分信息都是听说的.我并不担心它不可靠(你无法做到这一点),但"个人通信"和"看看它在源代码中是如何完成的"在引用中被认为是不好的形式.

我有足够的参考资料单独使用哈希值.我只对那些干扰编程其他方面的参考文献感兴趣,例如编组或分发.

Nor*_*sey 3

好吧,这并没有多大用处,但是 Andrew Kennedy 写了一个名为Pickling Combinators 的函数式珍珠,它出现在函数式编程杂志 (2004), 14:6:727-739 中。对结构共享以及如何在 pickles 中处理它进行了广泛的讨论,但没有直接讨论这个问题如何与语言实现中的哈希构造相关。但这篇文章确实讨论了内存中和 pickle 中的结构共享,所以我希望它总比没有好。

Martin Elsman 于 2005 年在《函数式编程趋势》中发表了一篇后续论文;标题是带有共享的类型专用序列化。本文主要讨论 unpickler(反序列化器)的哈希处理,而不是实现中的哈希处理,但它可能还是有价值的。

JFP 论文是专有的,但安德鲁的网页上似乎有预印本。Elsman 的论文似乎可以通过 Google Scholar 获取:http://tinyurl.com/yd5tw2b


(在前世,我参与了一个创建人们可以阅读和编辑的 ASCII pickle 的项目。我愚蠢地未能发布它,但我保留了兴趣。)