我想學習和使用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