我已经到了使用Backbone.js面向对象的MVC模式的GUI编码变得非常复杂并且环顾其他范例的程度。 MDV,FRP,ECS,哦,我的。
Elm与ClojureScript相比如何?它们在哪里重叠?
两种语言都与编译为JS的JS非常不同。我知道Elm是一种功能性反应式编程(FRP)语言。 ClojureScript不一定是FRP,但你可以用它来做FRP。 Elm使用JVM编译Haskell和ClojureScript,因此这些都是Node商店的额外要求。
也许它只归结为Clojure vs Haskell。
答案 0 :(得分:39)
两者都强迫你使用比纯JS更具声明性/功能性的编程风格。 ClojureScript更像是JS替代品,而Elm更像是整个Web开发堆栈(HTML / CSS / JS)的替代品。
其他差异:
希望这会有所帮助。我还在学习这两种语言,所以我可能错过了一些东西。
答案 1 :(得分:13)
仅为2017年更新此内容。
榆树不再是玻璃钢,它在几个版本之前消失了,转而支持榆树建筑。
Elm的主要胜利是它有一个静态类型系统,允许编译器在编译时对程序正确性做出许多断言。例如,您知道一个事实,即案例陈述不会涵盖特定案例。或者,视图函数中的HTML将生成更新不知道如何处理的事件。
其他榆树优势
答案 2 :(得分:5)
它们都是FRP(功能反应式编程)的核心 - 意味着它们有一个映射到DOM的树,只渲染那些需要渲染的组件。 (正如之前有人指出的那样,榆树已经放弃了FRP原则来追求自己的想法)
它们都是用JavaScript编译的(尽管使用ClojureScript / Om库或Reagent,你可以在你的js中获得实际的React对象),而Elm则做自己的事情。我不喜欢Elm必须通过npm安装,虽然我知道czapliki正在开发一个独立的安装程序)
Elm在我看来更好,因为它管理状态更加友好,并且它有一个非常好的(如前所述 - )类似Haskell的语法,并且你将RuntimeErrors移动到CompileTimeErrors中,这更加令人愉快。开发人员 - 加上它具有更简单的代码可维护性。
另一方面,cljs有很多库 - 其中一些是我提到的返回实际的React组件(cljs / Om与R.js LifeCycle匹配1:1) - 其他人只是尊重FRP和LifeCycle心态而不受阻碍它。可能想要查看Om / Next,使用GraphQL方式从端点调用数据,并删除了普通cljs / Om中使用的异步chans。
说实话,这是一个品味问题,但我更喜欢榆树(用两种语言写的)。 如果你这样做,那么请确保你有一个漂亮的图书馆,不要做香草cljs的东西,或者当你想维持5k + LOC时你会感到抱歉。(查看Fulcro,Reagent,om,OmNext,hoplon,等)