簡體   English   中英

Haskell“圖書館”

[英]Haskell “libraries”

在C中,可以將代碼拆分為“頭文件”和實現,編譯實現,然后只分發編譯版本和頭文件(不是完整源代碼)。

這在Haskell有可能嗎?

GHC允許這樣做,但當然您的代碼將綁定到特定的二進制平台。

點擊這里:

http://www.haskell.org/ghc/docs/2.10/users_guide/user_174.html

或者更新的解釋:

http://www.haskell.org/ghc/docs/7.0.3/html/users_guide/separate-compilation.html

特別是,尋找.hi文件。

很可能這樣做。 當GHC編譯Haskell模塊(即*.hs文件)時,它會在*.o目標文件中生成可執行代碼,並且還會生成*.hi “接口文件”。 您只需要對象文件和接口文件即可使用已編譯的代碼。

但是,與C不同,Haskell的運行時細節並未正式標准化。 因此,您不能使用不同的Haskell編譯器編譯代碼並將它們鏈接在一起; 結果不會奏效。 實際上,通常你甚至不能將用不同版本的GHC編譯的代碼鏈接在一起。 並不是說這樣做有什么“不可能”,只是沒有人標准化這個東西,所以目前它不起作用。

最近,還可以將Haskell代碼編譯為“動態庫”(Windows上的DLL,Unix上的*.so文件)。 同樣,您仍然需要*.hi文件來編譯這些文件,但在運行時您只需要庫文件本身。

請注意,GHC傾向於進行大量的跨模塊優化,這在某種程度上降低了動態鏈接的實用性。 (這有點像試圖“編譯”C ++模板庫......)

當然,如果您只是對沒有看到源代碼的人感興趣,或者不必向最終用戶提供Haskell編譯器,那么這一切都不重要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM