Haskell 和 Scheme, 哪一個更適合用於生產環境?
01-30
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的靜態類型還是可以消除不少錯誤的。
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的意義?