2013-08-23 47 views
37

我到了一個地步,那就是用Backbone.js面向對象的MVC模式進行GUI編碼變得相當複雜,並且環顧其他範例。 MDVFRPECS,哦我的。Elm與ClojureScript相比如何?

Elm如何比較ClojureScript?它們在哪裏重疊?

這兩種語言都非常不同於JS編譯爲JS的語言。我瞭解Elm是一種功能性反應式編程(FRP)語言。 ClojureScript不一定是FRP,但你可以用它來做FRP。 Elm使用JVM編譯Haskell和ClojureScript,所以這兩者都是Node商店的額外要求。

也許它只是歸結爲Clojure vs Haskell

+1

這個問題可能會提供一些幫助:http://stackoverflow.com/q/15490053/90874 – thSoft

回答

36

兩者都強制您使用比純JS更多的聲明性/函數式編程風格。 ClojureScript更像是一個JS替代品,而Elm更像是整個Web開發棧(HTML/CSS/JS)的替代品。

其它差異:

  • 榆樹語法得多的Haskell狀
  • ClojureScript更接近傳統Lisp的語法
  • 榆樹高度在榆樹隨時間變化的值(「信號」優化的)
  • ClojureScript更成熟,你可以找到一些適合它的開發工具(Eclipse插件,LightTable等)
  • Elm是靜態類型的,ClojureScript是動態類型的編

希望這會有所幫助。我仍然在學習這兩種語言,所以我可能錯過了一些東西。

+3

這忽略了最大的區別:類型。 ClojureScript是動態類型化的,非常靈活,但Elm是靜態類型的,靈活性較差,但幾乎消除了所有未捕獲的運行時錯誤。 – jmite

+0

@jmite好點,我更新了我的答案。雖然我認爲這不是最大的差異,但它仍然是一個很大的差異。 – hoosierEE

7

只是爲了更新這個爲2017年

榆樹不再FRP,是走了幾個版本前贊成榆樹建築。

Elm的主要勝利在於它有一個靜態類型系統,它允許編譯器在編譯時對程序的正確性做出許多斷言。例如,您知道一個事實,即案件陳述不會涵蓋特定案件。或者,來自視圖函數的HTML會產生更新不知道如何處理的事件。

其他榆樹優勢

  • 大錯誤信息
  • 包已執行語義版本
  • 包和工具往往有真正明顯的名稱
1

他們都是FRP(官能團反應性編程)在他們的核心 - 這意味着他們有一棵樹映射到DOM,並只渲染該組件或需要渲染的子組件。(正如前面有人指出的,Elm已經放棄了FRP原則來追求自己的想法)

它們都在JavaScript中編譯(儘管使用ClojureScript/Om庫或Reagent,您可以在您的js中獲得實際的React對象)white榆樹自己的事情。我不喜歡榆樹必須通過NPM安裝,雖然czapliki據我所知是在一個獨立的安裝程序)

榆木在我看來更好,因爲它管理狀態更多一些編碼友好,它有一個很好(如前所述 - )類似於Haskell的語法,還可以將RuntimeErrors移入CompileTimeErrors中,作爲開發人員,這會更加令人滿意 - 而且它具有更簡單的代碼可維護性。另一方面,cljs有很多庫 - 其中一些正如我所提到的那樣返回實際的React組件(cljs/Om與rjj LifeCycle的1:1匹配) - 其他人只是尊重FRP和LifeCycle的心態而不被設計通過它。可能希望通過調用端點數據的GraphQL方法來查看Om/Next,並刪除了在純cljs/Om中使用的異步chans。

這是一個誠實的問題,但我一個人會喜歡埃爾姆(用兩種語言寫的)。 然而,如果你這樣做,請確保你有一個很好的圖書館,不要在香草cljs做東西,或者當你想維持5k + LOC時,你會後悔的(查看Fulcro,Reagent,om,OmNext,hoplon等等)