2015-11-20 71 views
1

假設我有一些OCaml代碼,我需要使用Str模塊。如果我用解釋器運行代碼,那麼我必須讓#load Str.cma能夠使用Str模塊。但是,如果我想本機編譯代碼,那麼load指令會導致錯誤。我怎樣才能以這種方式導入模塊? (a)一種包含可在兩種模式下工作的模塊的方法;或者(b)一種加載解釋器模塊的方式,編譯器會忽略它,讓我在命令行中指定它。在解釋和編譯模式下包含OCaml模塊

回答

1

我不會把#load放入源文件,它不是OCaml代碼。這是對頂層的指示(當然你知道)。

一種可能性是將您需要的#load命令添加到您的~/.ocamlinit文件中。加載一些額外的模塊並不會造成傷害,所以您可以在您處理不同事情時偶爾修改您的~/.ocamlinit

1

如果您希望能夠做到ocaml my_code.mlmy_code.ml使用Str模塊,請執行ocaml str.cma my_code.ml

2

您可以像腳本描述的那樣以腳本方式使用OCaml(使用ocaml二進制文件,稱爲頂層)。腳本的優點是代碼易於訪問和更改。但是,一些問題就出來了:

  • 在每次調用,這是相當快的,但是從最佳
  • 遠遠加載需要的軟件包的指令是特定於頂層,並與編譯器不兼容的腳本字節碼編譯
  • 如果你需要從opam必須全局安裝OPAM OCaml的包管理器的許多包目前是Linux管理員的工作,而不是正式推薦

之一,所以有對ocaml的頂部沒有兼容語法級別和編譯器調用。頂層的命令行參數需要另一個包裝腳本。

我的建議:

  • 使用互動發展,特色探索頂層和測試
  • 使用OPAM安裝程序爲您的包裹編譯器,這會給你更新工具
  • 根據您的要求將您的腳本編譯爲字節碼或本機代碼,編譯後的代碼在平臺內便攜並且速度很快

一旦你知道如何指定組件,編譯對於ocaml程序來說相當簡單。

附註:有一個名爲ocamlscript的opam軟件包,它爲您的軟件包和依賴關係提供了一種特定的語法,但是它將腳本透明地編譯到磁盤。也許這是你想要的 - 但需要全局安裝opam。