2011-03-04 67 views
8

我想学习和使用ML,但有很多编译器。我需要:学习/使用ML。我应该使用哪个系统?

  • 速度
  • 低内存占用
  • 线程
  • 可变数组和记录类型
  • 延续
  • 准备生产代码
  • 容易FFI
  • 最新
  • ...帮助FUL库
  • 移植到一定程度

我不需要:

  • 对象
  • 窗户

例如,我发现OCamlOCaml Batteries include GUI

  • 支持和MLton。对我而言,我应该选择哪一种建议?

  • +0

    我认为包括ocaml的电池是不是自己的语言,而是一个ocaml的研究与开发平台。 – phimuemue 2011-03-04 08:13:42

    回答

    5

    好了MLton:

    • 速度
      • 整个程序optimisa tions definetley给你比OCaml更好的速度,但是你为每一个重新编译服务的惩罚可能会很烦人。见this link穿线
        • MLton和OCaml的
      • 的一个简单的非正式比较这里没有问题,你要么MLton.ThreadCML
    • 可变的数组和记录类型
    • 延续
    • 准备生产代码
      • 显然取决于你使用的库。但基础库是稳固的,但是MLton有自己的additions,还有一些其他的回收站的扩展名为here。但是MLton library project包含一些不错的代码。然而,像许多这样的库/扩展一样,它们往往依赖于由它们自己创建的其他扩展,因此很难仅使用它们中的小部分。
    • 易FFI
      • ForeignFunctionInterfaceNoLonger-FFI是巨大的。然而,我在大C代码库上遇到了NL-FFI的速度问题,我认为这是由于MLton没有完全删除幻像类型。然而,这只是一个猜测,我可能做错了什么。
    • 移植到一定程度
    +1

    请注意,MLTon虽然具有“线程”,但并不实际同时执行这些线程。它们都在单个操作系统线程中执行。因此,您从多个CPU内核中得不到好处。 – 2012-06-21 21:49:20

    +0

    即使是关于ocaml的mlton.org页面也承认ocaml比mlton编译得更快:http://mlton.org/OCaml – johnbakers 2016-10-15 10:24:22

    9

    SML对继续有更好的支持。如果你对继续有强烈的需求,这是一个更好的选择; OCaml没有对它们的语言支持,但是Oleg提供的Delimcc库用于分隔延续;作为外部的,它可能比SML的实现慢。否则,OCaml似乎现在有更多的牵引力,所以你应该期望工具和库稍微好点。

    更一般地说,SML往往更优雅,而OCaml具有一些更高级的功能,怪癖和用户。性能方面他们都很好。

    (两种语言的大多是常见片段的句法比较见this;当然OCaml中的对象和多态性变异都没有给出。)

    +0

    +1“更高级的功能,怪癖和用户。” (并且对于一般的良好答案) – 2011-03-05 20:02:19

    +1

    此外,@knivil,您应该知道OCaml的线程支持此时不支持并行计算线程 - 有一个锁可以防止多个线程并行运行。 OCaml线程对于I/O仍然非常有用(标准I/O模块在阻塞IO时释放线程锁),而C或FORTRAN代码可以在其他OCaml代码运行时在其自己的线程中运行。对于真正的并行/并发,有Plasma(分布式映射/减少),Functory(并行计算),并且OCamlNet 3具有多处理功能。 – 2011-03-05 20:06:00

    5

    ocaml的满足所有从你的列表中的需求与延续除外。它速度快,内存高效,可移植,拥有posix线程绑定和用于轻量级协作线程的良好库。标准库相当有限,但有很多third-party libraries

    有许多公司谁使用OCaml生产各种东西。有些公司在Caml consortium网站上提及。

    我也建议你阅读一些优秀的OCaml的体验报告:

    OCaml at Jane Street Capital

    OCaml at XenSource

    +2

    即使我今天为MLton编写代码,我也会使用Ocaml。关键在于SML是优雅的学术语言,OCaml是一种在实践中完成工作的野兽。所以这取决于你想要做什么。 – 2011-03-04 17:28:10

    相关问题