2013-03-03 41 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,您的发行版应该已经为您打包了一个,它非常简单高效,项目很好)。

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

相关问题