Jac*_*ale 10 ocaml functional-programming
我知道这个问题很普遍,我甚至不知道如何更好地问.
我没有太多的经验C,我只是希望我能在OCaml和Java中做类似的事情.
例如,Java我通常创建一个项目(使用Eclipse或其他IDE),然后我有一个src文件夹和一个bin文件夹.所有的compiled东西都去了bin.
所以对于首发,我怎么能做一些像上面这么简单的事情呢?只是拆分源文件并轻松编译文件?
通常,你们如何组织OCaml项目文件?
最后一个问题是我应该使用mli或module?我注意到它ocaml-batteries-included使用mli了很多.
在OCaml社区中对这个主题有很多不同的看法,这实际上取决于你想要的结构或灵活性.我自己使用makefile和ocamlbuild,如果我是懒惰和其他一切的绿洲.您应该查看一些随机的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的一部分,否则它们是可选的.在这种情况下,它们是强制性的
好问题!我真的很想看到其他答案,但这是我如何组织我的项目:
首先,我使用Eclipse与优秀的OCalIDE,它是一个非常酷的eclipse插件,积极维护.
如果您是Emacs用户,您可以使用TypeRex(已经死了,但由于OCaml社区移动得非常慢,您将拥有所有时间).如果你是Vim用户,总有Omlet,但没有任何非常好的解决方案.
使用Eclipse,您可以选择"Managed Ocaml Project",这意味着我基本上不想担心编译内容,我永远不会分享这个项目.
从那开始,这对个人项目和临时测试来说已经足够了.但是,如果你不能,你将不得不在"Ocaml Makefile Project"和"Ocaml project with ocamlbuild"之间做出选择.选择Makefile,它更灵活,更容易解决.
Eclipse将为您提供Ocaml项目的默认Makefile,在评论中有很好的解释.如果您不熟悉Ocaml构建系统,我建议您使用它.如果你是,我建议你使用自己的Makefile,因为默认的Makefile太大而且不可读(我认为).
好极了!现在我们的项目在我们最喜欢的编辑器中,并准备建立一个全球结构!
在项目的根本,我遵循经典GNU tarball的惯例,它说:
/
|- 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
Run Code Online (Sandbox Code Playgroud)
有时,没有lib目录,这很好.但是你应该提供一个AUTHOR和README文件,因为它对你的项目来说是安静的.
这是无聊的部分,src目录怎么样?
src/除非我能真正看到我的模块中的结构(那些是解析,那些是AI计算,那些是网络......),所以我将所有内容保持在目录中.我和C项目的方式相同.
OCaml是一种简洁的语言,所以你应该有几个文件.对于C项目,尽量保持目录体系结构尽可能平坦,请记住该目录不是模块名称或命名空间的一部分,因此只有程序员方便!
在一般情况下,我很高兴尽可能少地保留我的mli,以便客人立即知道哪些文件是有用的,哪些是内部/高级.
此外,它有助于重构,因为我没有类型约束阻止我继续前进.
请记住,测试套件是为了确保我们没有破坏任何东西(请参阅OUnit,您的发行版应该为您打包.这是非常简单和有效,良好的项目).
这就是我所看到的.希望能帮到任何人!