3
在基於JVM的程序中,可以將文件編譯爲.class文件,並且能夠再次運行二進制文件,而無需編譯所有文件。是否可以在cabal項目中編譯「只有一個文件」?
在haskell中可以這樣做嗎?是否有必要編譯和鏈接項目中的所有文件?如果是,爲什麼?
如果沒有二進制文件,那麼您只安裝一個庫?
在基於JVM的程序中,可以將文件編譯爲.class文件,並且能夠再次運行二進制文件,而無需編譯所有文件。是否可以在cabal項目中編譯「只有一個文件」?
在haskell中可以這樣做嗎?是否有必要編譯和鏈接項目中的所有文件?如果是,爲什麼?
如果沒有二進制文件,那麼您只安裝一個庫?
對於GHC,您可以更改和重新編譯單個模塊,而無需重新編譯模塊(具體取決於該模塊),前提是暴露的接口不會更改。 GHC的--make
模式(默認爲ghc-7。*)會檢查是否需要重新編譯,並僅重新編譯那些無法確定不需要的模塊。
如果你有改變一個模塊後,一個陰謀包,你cabal build
,您可以從編譯器的輸出看,它並沒有重新編譯所有模塊封裝在一般情況下,僅將更改的模塊和[也許]的那些視在上面。
如果您構建可執行文件,那當然必須重新鏈接,但許多舊的目標文件可以重複使用。
如果建立一個庫,當然必須重建庫存檔,但許多舊的對象文件可以重複使用。
對於感興趣的,[GHC評論解釋了這是如何工作的詳細](http://hackage.haskell.org/trac/ghc/wiki/Commentary/Compiler/RecompilationAvoidance)。 – hammar 2012-04-22 12:52:07