2011-03-04 65 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

    相關問題