我想学习和使用ML,但有很多编译器。我需要:学习/使用ML。我应该使用哪个系统?
- 速度
- 低内存占用
- 线程
- 可变数组和记录类型
- 延续
- 准备生产代码
- 容易FFI
- 最新
- ...帮助FUL库
- 移植到一定程度
我不需要:
- 对象
- 窗户
例如,我发现OCaml,OCaml Batteries include GUI
我想学习和使用ML,但有很多编译器。我需要:学习/使用ML。我应该使用哪个系统?
我不需要:
例如,我发现OCaml,OCaml Batteries include GUI
好了MLton:
请注意,MLTon虽然具有“线程”,但并不实际同时执行这些线程。它们都在单个操作系统线程中执行。因此,您从多个CPU内核中得不到好处。 – 2012-06-21 21:49:20
即使是关于ocaml的mlton.org页面也承认ocaml比mlton编译得更快:http://mlton.org/OCaml – johnbakers 2016-10-15 10:24:22
SML对继续有更好的支持。如果你对继续有强烈的需求,这是一个更好的选择; OCaml没有对它们的语言支持,但是Oleg提供的Delimcc库用于分隔延续;作为外部的,它可能比SML的实现慢。否则,OCaml似乎现在有更多的牵引力,所以你应该期望工具和库稍微好点。
更一般地说,SML往往更优雅,而OCaml具有一些更高级的功能,怪癖和用户。性能方面他们都很好。
(两种语言的大多是常见片段的句法比较见this;当然OCaml中的对象和多态性变异都没有给出。)
+1“更高级的功能,怪癖和用户。” (并且对于一般的良好答案) – 2011-03-05 20:02:19
此外,@knivil,您应该知道OCaml的线程支持此时不支持并行计算线程 - 有一个锁可以防止多个线程并行运行。 OCaml线程对于I/O仍然非常有用(标准I/O模块在阻塞IO时释放线程锁),而C或FORTRAN代码可以在其他OCaml代码运行时在其自己的线程中运行。对于真正的并行/并发,有Plasma(分布式映射/减少),Functory(并行计算),并且OCamlNet 3具有多处理功能。 – 2011-03-05 20:06:00
ocaml的满足所有从你的列表中的需求与延续除外。它速度快,内存高效,可移植,拥有posix线程绑定和用于轻量级协作线程的良好库。标准库相当有限,但有很多third-party libraries。
有许多公司谁使用OCaml生产各种东西。有些公司在Caml consortium网站上提及。
我也建议你阅读一些优秀的OCaml的体验报告:
即使我今天为MLton编写代码,我也会使用Ocaml。关键在于SML是优雅的学术语言,OCaml是一种在实践中完成工作的野兽。所以这取决于你想要做什么。 – 2011-03-04 17:28:10
我认为包括ocaml的电池是不是自己的语言,而是一个ocaml的研究与开发平台。 – phimuemue 2011-03-04 08:13:42