学习/使用ML.我应该使用哪个系统?

kni*_*vil 8 ocaml ml sml

我想学习和使用ML,但那里有很多编译器.我需要:

  • 速度
  • 内存使用率低
  • 穿线
  • 可变数组和记录类型
  • 延续
  • 准备好生产代码
  • 容易ffi
  • 最新
  • ......有用的图书馆
  • 便携在某种程度上

我不需要:

  • 对象
  • GUI
  • 支持Windows

例如,我发现OCaml,OCaml电池包括MLton.对我来说有什么建议我应该选择哪一个?

gas*_*che 9

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

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

(请参阅此内容,对两种语言中最常见的片段进行语法比较;当然,OCaml的对象和多态变体不会出现.)


ala*_*rik 5

Ocaml满足列表中的所有要求,但continuation除外.它速度快,内存效率高,可移植,具有posix线程绑定和轻量级协作线程的良好库.标准库非常有限,但有许多第三方库.

有许多公司在生产中使用OCaml来处理所有类型的事情.Caml财团网站上提到了一些公司.

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

简街资本的OCaml

XenSource的OCaml

  • 即使我在当天为MLton编写代码,我也会使用Ocaml.关键是SML是优雅的学术语言,OCaml是一个在实践中完成工作的野兽.所以这取决于你想要做什么. (2认同)

Jes*_*erg 5

对于MLton来说:

  • 速度
    • 整个程序优化definetley给你提供比OCaml更好的速度,但是你为每次重新编译服务的惩罚可能非常烦人.有关MLton和OCaml的简单非正式比较,请参阅此链接
  • 穿线
  • 可变数组和记录类型
  • 延续
  • 准备好生产代码
    • 显然取决于您使用的库.但基础库是可靠的,但是MLton有自己的附加功能,还有一些其他的具有此处列出的扩展名的repos .但是,MLton库项目包含一些不错的代码.然而,与许多此类库/扩展一样,它们倾向于依赖于由它们自己创建的其他扩展,因此很难仅使用它们的一小部分.
  • 容易ffi
    • ForeignFunctionInterfaceNoLonger-FFI都很棒.然而,我在大C代码库上遇到了NL-FFI的速度问题,我认为这是因为MLton没有删除幻像类型的完整性.然而,这只是猜测,我可能做错了什么.
  • 便携在某种程度上