【问题标题】:Initializing data structures from large static lists and maps in Haskell在 Haskell 中从大型静态列表和映射初始化数据结构
【发布时间】:2012-12-31 17:07:50
【问题描述】:

我正在将 zxcvbn password strength 算法翻译成 Haskell。

在第一步中,我从常用单词列表(英文单词、姓氏、男性名字等)中生成了几个大型数据结构。这些列表是静态的,只会偶尔重建,并且只有在重新编译应用程序时才会重建。

这些列表和地图用于初始化实际的密码强度算法。

当我将原始 JavaScript 转换为 Scala 时,我将静态值保存为 JSON,算法在启动时会加载该 JSON。我只想生成初始化的 Scala vals,但是 Java 虚拟机对类有 64KByte 的限制,而我的数据超过了这个限制(每个结构包含数千个单词并且大于 64KBytes)。

在 Haskell 中处理此问题的最佳方法是什么?我可以只生成一个包含数据的源代码模块吗?最大模块尺寸限制是多少?我搜索了 Haskell2010 报告,但找不到编译器限制部分。

生成 Haskell 源代码显然是我的首选,因为这样代码可以保持纯净。如果我需要加载 JSON 并在启动时对其进行解析,那么模块的那部分将是不纯的。

【问题讨论】:

    标签: haskell module limits


    【解决方案1】:

    我可以只生成一个包含数据的源代码模块吗?

    是的。没有限制——尽管您的特定机器可能会遇到某些类型的数据和某些优化级别的问题。

    序列化数据的字节串文字通常“正常工作”。

    请参阅前面的问题 - How to compile a resource into a binary in Haskell?on the Haskell wiki

    【讨论】:

    • 谢谢。我会看一下其他 SOF 问题和 wiki。让我想起了用 C 编写解析器生成器的日子。
    • 太酷了!我刚刚查看了 wiki,特别喜欢将静态数据存储为 C 数组的可能性,如果需要提高效率的话。
    猜你喜欢
    • 1970-01-01
    • 2021-01-31
    • 1970-01-01
    • 1970-01-01
    • 2019-06-26
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多