[英]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.