2012-12-31 46 views
3

我正在將zxcvbn password strength算法轉換爲Haskell。從Haskell中的大型靜態列表和地圖初始化數據結構

在第一步中,我從常見單詞列表(英文單詞,姓氏,男性名稱等)生成了幾個大型數據結構。這些列表是靜態的,只會偶爾進行重建,然後纔會重新編譯應用程序。

這些列表和地圖用於初始化實際的密碼強度算法。

當我將原始JavaScript轉換爲Scala時,我將靜態值保存爲JSON,該值在啓動時由算法加載。我只想生成初始化Scala val s,但Java虛擬機對類有64KByte的限制,並且我的數據超過了(每個結構包含數千個單詞並且大於64KBytes)。

在Haskell中處理這個問題的最好方法是什麼?我可以只生成一個包含數據的源代碼模塊嗎?什麼是最大模塊大小限制?我搜索了Haskell2010報告,但找不到編譯器限制部分。

生成Haskell源代碼顯然是我的第一選擇,因爲代碼可以保持純粹。如果我需要在啓動時加載JSON並對其進行解析,那麼該模塊的那部分將是不純的。

回答

3

我可以只生成一個包含數據的源代碼模塊嗎?

是的。沒有限制 - 雖然您的特定機器可能會遇到某些類型的數據和一些optimizatino級別的問題。

序列化數據的Bytestring文字通常「正常工作」。

請參閱前面的問題 - How to compile a resource into a binary in Haskell?on the Haskell wiki

+0

感謝。我會看看另一個SOF問題和維基。讓我想起在C中編寫解析器生成器的日子。 – Ralph

+0

這非常酷!我只是看着維基,特別喜歡將靜態數據存儲爲C數組的可能性,如果需要提高效率。 – Ralph