42

我已经到了这样一个地步,即使用 Backbone.js 面向对象的 MVC 模式进行 GUI 编码变得非常复杂,并环顾其他范例。MDV玻璃钢ECS,哦,我的。

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

两者都是与编译成 JS 的 JS 非常不同的语言。我了解 Elm 是一种函数式反应式编程 (FRP) 语言。ClojureScript 不一定是 FRP,但你可以用它来做 FRP。Elm 使用 Haskell 编译,ClojureScript 使用 JVM 编译,因此这两者都是 Node 商店的额外要求。

也许它只是归结为Clojure vs Haskell

4

3 回答 3

46

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

其他区别:

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

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

于 2013-09-06T14:45:12.503 回答
17

只是为了在 2017 年更新这个。

Elm 不再是 FRP,它在几个版本前就消失了,取而代之的是 Elm 架构。

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

其他榆树优势

  • 重大错误消息
  • 包已强制执行语义版本控制
  • 包和工具往往具有非常明显的名称
于 2017-06-20T13:12:18.570 回答
7

它们的核心都是 FRP(功能响应式编程)——这意味着它们有一个映射到 DOM 的树,并且只渲染需要渲染的组件或子组件。(正如前面有人指出的,Elm 已经放弃了 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 中使用的异步通道。

老实说,这是一个品味问题,但我个人更喜欢 Elm(用两种语言编写)。但是,如果您确实使用 cljs,请确保您获得了一个不错的库,并且不要在原版 cljs 中做任何事情,否则当您想要保持 5k+ LOC 时,您会很抱歉。(查找 Fulcro、Reagent、om、OmNext、hoplon、 ETC。)

于 2018-02-22T16:59:02.630 回答