OCaml在寫編譯器上比Haskell好在哪?為何Rust第一個版本採用了OCaml?

感覺Haskell好爽,需要看一些言論來吸引我去用OCaml。


沒用過ocaml,但是用過F#,which是從ocaml改出來加了.net和一系列高級功能的結果。我對F#最不滿意的就是,當我寫let fuck = shit的時候,fuck竟然是一個(變)量,不是函數。Haskell用習慣的話,會引發一系列血案。


rust第一版用ocaml寫純屬其作者的喜好,我認為跟ocaml的llvm綁定沒關係,haskell一樣有llvm綁定,也是用在ghc上的,成熟度可靠性不亞於ocaml綁定

ocaml寫編譯器的優勢在於可以使用製作編譯器的傳統套路

比如說符號表,ghc自身沒有使用傳統的符號表,符號信息存儲在ast上,如果對編譯器不熟悉,光符號表就是個門檻

再比如後端的流優化,才3000多行的hoopl框架,ghc團隊也是花了好多年,推翻重來幾遍才整出來

總結:如果用haskell,可以加深對某個領域的理解;如果用ocaml,可以快速把東西做出來


這種impure,連ad hoc都沒有(雖然有module system),類型系統貧乳的語言有啥好的?

Rust第一個版本用OCaml並不是因為OCaml多好吧……我記得Rust之父當年是OCaml廚。

利益相關:OCaml廚。


只是因為graydon hoare開始是ocaml的粉絲吧。

相比haskell,ocaml是典型的ml語言,非pure導致很容易干臟活;module系統比haskell強;寫起真實程序可能還是ocaml整體好點。但ocaml也是以語法丑而出名,campl5希望改善但應用不廣;並且標準庫差強人意導致Jane Stree core和Batteries included兩套理念相悖的擴展庫。


OCaml 的 open_in 什麼的比 Haskell 簡單算嘛 2333


因為llvm官方提供ocaml綁定


因為需要用llvm的後端避免重複發明輪子。而llvm後端API只支持C、C++、Ocaml三種語言的原生綁定,而且其中C的支持只是子集。

最近兩年好像有了Python的綁定,但是我不清楚具體情況(功能是否完整,以及API是否穩定),但是當時肯定是沒有的。話說回來,就算當初就有完整Python,以Rust開發組的品味估計也不會選。


推薦閱讀:

如何評價eta-lang?
對大量使用 immutable data structure 的語言,其 VM 和 GC 會有何特點?
Haskell適合做網站開發嗎?有什麼優缺點?
如何理解Haskell中的"Proxy Argument Trick"?
如何使用 haskell 寫出高效代碼刷演算法比賽題目?

TAG:Haskell | 編譯器 | OCaml |