Haskell 和 Scheme, 哪一個更適合用於生產環境?


IN THE NAME OF FP GOD HASKELL SHALL RISE AGAIN

作為即將踏入TIOBE前20的語言,Haskell在我回答的這個時間點上,已經毋庸置疑的是最成熟的FP語言了。以它的語言特性豐富程度,生態的規模和發展速度來說,遠比任何一個現存的scheme更加適合生產環境。


得要看是何種生產環境,如果只是寫寫 Script 或是做個 Web 後台,Racket 本身的特性是很適合的,他提供了很多自由且強大的語義建構方法,尤其是處理商務邏輯上,能用 macro 與 call/cc 做出各種 DSL,誰用誰知道。這類事情用 Haskell 做,除非是已經完全熟悉 Haskell 的 Geek,否則一般人可能會把東西全塞進 do notation 裏,不然就是接合各種 monad 接得礙手礙腳,甚至是連接都接不起來 :p

但如果你要做程序驗證、程序分析、併發編程等等的工作,那還是 Haskell 比較適合。我之前用過 Racket 來練習一些程序語義與解釋器的實現,基本上寫到最後每個函數介面都必須加上類型註解,要不然代碼很不好讀。舉個例子來說,在 Racket 中實現 CESK-Machine 的 apply 操作,我就得在函數介面上加個像這樣的註解:

;; apply : Val * [Val] * Store * Kont -&> (State | Terminal)

但如果是用 Haskell 來做,那麼函數的類型標籤就已經達到了注釋的作用了,就不必另外寫注釋表明這函數的類型,而且編譯器還會幫我驗證我的程序是否符合這個規則。


Haskell的靜態類型還是可以消除不少錯誤的。

Scheme 除非用Typed Scheme/Typed Racket, 不然其動態特性會讓很多程序員難以駕馭(當然也有很多黑科技)。


Haskell是科學家發明出來的語言,OCaml是工程師改進出來的語言,其他的FP都是渣渣~~~

你說生產環境?我已經回答了啊。。。


一定要二選一的話,個人更傾向於 scheme(guile)。首先可以和 C 互調,然後也有成熟的案例可以借鑒(GIMP),最後,作為 GNU 項目的官方擴展語言,文檔很棒且短時間內不會死掉。

多人協作的情況下,最好不要用這兩種,工程管理複雜,代碼閱讀難度大,程序員也不好招。


Scheme 只能算是個 Toy 吧,真正生產工具還是 Haskell 。


推薦閱讀:

SICP 1.16
能不能用DrRacket代替GUN/MIT Scheme去實現SICP中的習題?DrRacket和GNU/MIT Scheme有什麼區別?
(如何(用Python)寫一個(Lisp)解釋器(下))
相比 Scheme 與 Common Lisp,Clojure 有哪些坑?
了解和掌握scheme的意義?

TAG:編程 | Haskell | Scheme |