2013-03-03 40 views
9

我知道這個問題是相當一般的,我甚至不知道如何更好地問。我應該如何組織我的OCaml項目?


我沒有太多的經驗C,我只是希望我可以做類似的事情,OCaml中的Java編寫的。

例如,在Java,我通常創建一個項目(使用Eclipse或其他IDE),然後我有一個src文件夾和一個bin文件夾。所有compiled的東西去bin


所以對於首發,我怎麼能這樣做如上簡單的東西?只需拆分源文件並輕鬆編譯文件?


通常情況下,你們如何組織OCaml項目文件?


的最後一個問題是,我應該使用mlimodule?我注意到ocaml-batteries-included很多使用mli

回答

6

OCaml社區對這個主題有很多不同的看法,這取決於你想要的結構或靈活性。我自己我使用的是makefile和ocamlbuild,如果我是懶惰的,並且其他所有的東西都是oasis。你應該看看幾個隨機OCaml項目,看看它是如何工作的,以及你想要什麼。例如,綠洲項目可能如下所示:https://github.com/avsm/ocaml-github。你只需要看看_oasis文件(如果你曾經使用maven,可以把它看作是pom.xml文件)。運行oasis setup應該爲你生成所有的構建文件。 ocaml setup.ml -all,然後ocaml setup.ml -install將在您的系統上安裝庫。

至於使用mli的。對他們有一點爭議。以下是來自郵件列表的討論:http://www.mentby.com/Group/caml-list/why-should-i-use-mli-files.html

我個人認爲它們是可選的,除非您的模塊是其他人將使用的公共API的一部分。在這種情況下他們是強制性的。

7

不錯的問題! 我真的很感興趣看到其他答案,但這裏是我如何組織我的項目:

首先,我用優秀的OCalIDE Eclipse,它是一個非常酷的eclipse插件,積極維護。
如果您是Emacs用戶,您可以使用TypeRex(已死亡,但由於OCaml社區的移動速度非常緩慢,所以您有時間)。 如果你是Vim用戶,總是有Omlet,但是沒有任何非常好的解決方案。

使用Eclipse,你可以選擇「託管Ocaml項目」這意味着基本上我不想擔心編譯的東西,我永遠不會分享這個項目
從此開始,這對於個人項目和臨時測試來說已經足夠了。但是,如果你不能,你將不得不在「Ocaml Makefile Project」和「Ocaml project with ocamlbuild」之間進行選擇。選擇Makefile,這是更加靈活和簡單的解決方案。

Eclipse會爲您提供a default Makefile for Ocaml projects,在評論中有很好的解釋。如果您不熟悉Ocaml構建系統,我建議您使用它。如果你是,我建議你使用你自己的Makefile,因爲默認的太大而且不可讀(我認爲)。


太棒了!現在我們在我們最喜歡的編輯器中有我們的項目,並準備好放置一個全球結構!

在項目的根,我遵循GNU經典壓縮包的約定,說:

/ 
|- src/  # source files 
|- lib/  # dependencies 
|- test/ # tests files and test binaries 
|- _build/ # binaries and object files, sometimes managed by ocamlbuild 
|- AUTHORS # who did that marvelous stuff 
|- README # what is it 
|- Makefile # *always* provide a Makefile, you never know... 
|- _tags # when I use ocamlbuild 
|- _oasis # when I use oasis 

有時候,沒有lib目錄,這是很好的。但是你應該提供一個AUTHOR和README文件,因爲它對你的項目非常有利。


那是無聊的部分,那麼src目錄呢?

  1. OCaml模塊化系統在自己的容器中製作東西非常有用。我注意到在我自己的經驗:
    • 我不使用任何內部模塊,但函數
    • 我保持我的模塊自己一致(排序黃金法則)。爲此,我的模塊名稱主要與數據類型或具有內部狀態的特定容器有關(什麼是javaist稱爲Singletons)
    • 我經常製作兩到三個明顯特定的模塊:入口點,包含所有常見類型的模塊以及模塊包含所有常用功能。它避免了循環依賴。
  2. 我把所有單位在src/目錄中,除非我真的可以看到在我的模塊結構(那些被解析,這些都是AI運算,這些都是網絡......)。與C項目一樣。

    OCaml是一個簡潔的語言,所以你應該有幾個文件。至於C項目,儘量保持目錄架構儘可能平坦,記住目錄不是模塊名稱或命名空間的一部分,所以這只是程序員的方便!

  3. mli部分:它真的取決於您的項目的目標。這是我的方法:
    • 唯一的一般規則是:記錄mli是否存在。 Mlis在這裏幫助編譯器程序員。
    • 這是給你的嗎?在ml部分中記錄並僅爲輸入約束或太大的瀏覽ml生成mli。
    • 你想分配你的項目?在mli中記錄文件,因爲如果我們有選擇,我們將讀取第一個文件。選擇你要生成界面的文件,也許有些是內部的,你不希望他們被臨時用戶閱讀。
    • 當你處理OCaml對象系統時,總是需要它們,因爲它很快就會變得混亂。

在一般情況下,我很高興地讓我的美林儘可能少所以客人會立即知道哪些文件是很好的瞭解,哪些是內部/高級。

此外,它有助於重構,因爲我沒有類型約束阻止我繼續前進。
請記住,測試套件在這裏確保我們不會破壞任何東西(請參閱OUnit,您的發行版應該已經爲您打包了一個,它非常簡單高效,項目很好)。

這就是我所看到的。希望能幫助任何人!

相關問題