榆树与ClojureScript相比如何?

时间:2013-08-23 14:20:09

标签: clojurescript elm

我已经到了使用Backbone.js面向对象的MVC模式的GUI编码变得非常复杂并且环顾其他范例的程度。 MDVFRPECS,哦,我的。

ElmClojureScript相比如何?它们在哪里重叠?

两种语言都与编译为JS的JS非常不同。我知道Elm是一种功能性反应式编程(FRP)语言。 ClojureScript不一定是FRP,但你可以用它来做FRP。 Elm使用JVM编译Haskell和ClojureScript,因此这些都是Node商店的额外要求。

也许它只归结为Clojure vs Haskell

3 个答案:

答案 0 :(得分:39)

两者都强迫你使用比纯JS更具声明性/功能性的编程风格。 ClojureScript更像是JS替代品,而Elm更像是整个Web开发堆栈(HTML / CSS / JS)的替代品。

其他差异:

  • Elm语法更像Haskell-like
  • ClojureScript更接近传统的Lisp语法
  • Elm针对时变值(Elm中的“信号”)进行了高度优化
  • ClojureScript更成熟,你可以找到一些甜蜜的开发工具(Eclipse插件,LightTable等)。
  • Elm是静态类型的,ClojureScript是动态类型的

希望这会有所帮助。我还在学习这两种语言,所以我可能错过了一些东西。

答案 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,等)