榆树与ClojureScript相比如何?

for*_*sto 39 clojurescript elm

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

榆树ClojureScript相比如何?它们在哪里重叠?

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

也许它只是归结为Clojure vs Haskell.

hoo*_*rEE 39

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

其他差异:

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

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

  • 这错过了最大的区别:类型.ClojureScript是动态类型的,非常灵活,但是Elm是静态类型的,不太灵活,但几乎消除了所有未捕获的运行时错误. (5认同)

Zac*_*y K 14

只是为2017年更新.

榆树已经不再是FRP了,它在几个版本之前消失了,转而支持Elm Architecture.

Elm的主要胜利是它有一个静态类型系统,允许编译器在编译时对程序正确性做出许多断言.例如,您知道一个事实,即案例陈述不会涵盖特定案例.或者,视图函数中的HTML将生成更新不知道如何处理的事件.

其他榆树的优点

  • 很棒的错误消息
  • 软件包已强制实施语义版本控制
  • 包和工具往往具有非常明显的名称


and*_*ndy 5

它们都是FRP(功能性反应式编程)的核心-意味着它们具有映射到DOM的树,并且仅渲染该组件或需要渲染的子代。(正如之前指出的那样,榆树放弃了玻璃钢原则以追求自己的想法)

它们都可以在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心态而不会受到它的束缚。可能希望使用具有GraphQL方式从端点调用数据的Om / Next进行调查,并删除了普通cljs / Om中使用的异步chans。

老实说,这是一个品味问题,但是我更喜欢Elm(用两种语言编写)。但是,如果您选择使用cljs,请确保您拥有一个不错的库并且不要在vanilla cljs中做任何事情,否则当您要保持5k + LOC时会后悔的。(查找Fulcro,Reagent,om,OmNext,hoplon,等等。)