Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
ReasonML vs Elm_Elm_Reason - Fatal编程技术网

ReasonML vs Elm

ReasonML vs Elm,elm,reason,Elm,Reason,我在StackOverflow看到了这个问题,现在我想知道ReasonML和Elm之间的比较 它们的相同点和不同点是什么?什么时候我应该用哪一个? 一个比另一个有什么好处?我对榆树不是很熟悉,但我已经研究了一点,我对它的原因很熟悉,所以我要试一试。我相信这里会有不准确的地方,所以请不要把我说的任何话当作事实,而是用它作为指针,如果这对你来说很重要的话,你自己可以更详细地了解 Elm和Reason都是类似于ML的语言,具有非常相似的编程模型,因此我将重点讨论它们之间的差异 语法: Elm使用了一种

我在StackOverflow看到了这个问题,现在我想知道ReasonML和Elm之间的比较

它们的相同点和不同点是什么?什么时候我应该用哪一个?
一个比另一个有什么好处?

我对榆树不是很熟悉,但我已经研究了一点,我对它的原因很熟悉,所以我要试一试。我相信这里会有不准确的地方,所以请不要把我说的任何话当作事实,而是用它作为指针,如果这对你来说很重要的话,你自己可以更详细地了解

Elm和Reason都是类似于ML的语言,具有非常相似的编程模型,因此我将重点讨论它们之间的差异

语法: Elm使用了一种类似Haskell的语法,这种语法是为Elm和Reason使用的编程模型设计(和/或改进)的,因此,一旦您熟悉了它,就应该能够很好地阅读和编写惯用代码,但对于大多数程序员来说,这似乎是非常不同和陌生的

Reason试图通过尽可能多地模拟JavaScript的语法来变得更加平易近人,这对大多数程序员来说都很熟悉。然而,它还旨在支持底层OCaml语言的整个特性集,这使得一些功能模式非常尴尬

其中一个例子是函数应用程序语法,它在Elm中强调函数的通用性(
fab
),非常适合组合函数和构建可读的DSL。Reason用括号括起来的语法(
f(a,b)
)隐藏了这种复杂性,这使得它更容易进入(直到你无意中被它绊倒,因为它下面当然还是不同的),但大量使用函数组合,造成括号混乱

易变性: Elm是一种纯粹的函数式语言,它在理论上很好,但在实践中很有挑战性,因为周围的世界很少关心Elm对纯度的追求。我认为,Elm对此的首选解决方案是通过用JavaScript编写有问题的代码来隔离杂质,然后通过web组件或端口在Elm中访问它。这意味着您可能需要用一种独立且非常不安全的语言维护大量代码,需要大量的样板文件来连接它们,还需要首先找出如何通过端口的方孔等来适应圆形的东西

另一方面,原因是。。。我喜欢称之为务实。为了提高生产率和短期效益,您牺牲了一些安全、理想和长期效益。从理性上来说,隔离杂质仍然是一种很好的做法,但你不可避免地会为了完成事情而走捷径,这将在以后对你造成伤害

但是,即使你做到了足够的自律以隔离所有的不洁,你仍然要为语言的变异付出代价。这个代价的一部分是所谓的,你迟早会遇到它,它会让你既困惑又愤怒,因为它会拒绝直觉上应该可以工作的代码,只是因为编译器无法证明在某一点上不可能涉及可变引用

JavaScript互操作性: 如上所述,Elm提供了通过端口和web组件与JavaScript进行互操作的能力,这是故意限制的。你曾经能够使用原生模块,这提供了更大的灵活性(以及射中你自己脚的能力),但这种可能性正在消失(至少对平民来说),这一举动并非毫无争议(但考虑到哲学,也不应该那么令人惊讶)

Reason,或者更确切地说是BuckleScript,提供了一组丰富的原语,可以直接绑定到JavaScript,并且通常生成一个惯用的Reason接口,而无需编写任何粘合代码。虽然不是很直观,但只要你摸索一下就很容易做到。然而,它也很容易出错,并在以后的某个随机点在你的脸上爆炸。为了提供一个好的惯用API而必须编写的任何粘合代码都可以合理地编写,并提供所有安全保证,而不必编写不安全的JavaScript

生态系统: 由于Elm有限的JavaScript互操作性,生态系统相当小。没有很多高质量的第三方JavaScript库可以提供web组件,而自己完成这项工作需要很多努力。因此,您将看到库直接在Elm本身中实现,这当然需要更多的努力,但通常会导致更高的质量,因为它们是专门为Elm设计的

工具: Elm以其巨大的错误消息而闻名。理性在很大程度上并没有,尽管它努力做到这一点。这至少在一定程度上是因为Reason本身不是一个编译器,而是构建在OCaml编译器之上的,所以可用的信息是有限的,并且可能出现错误的表面积非常大。但他们也没有经过深思熟虑

Elm还有一个很棒的打包工具,它可以为您设置所有内容,甚至可以检查您发布的包的接口是否已更改,以及版本凹凸是否对应于语义版本控制。ResOn/BuckleScript只使用
npm
,并要求您手动管理特定于Reason/BuckleScript的所有内容,比如使用新的依赖项更新
bsconfig.json

不过,BuckleScript、它的构建系统和OCaml都非常迅速。我还没有经历过任何项目从零开始编译需要3秒以上的时间,包括所有依赖项,增量编译通常只需要几毫秒(尽管这并不是完全没有用户友好性的代价)。据我所知,埃尔姆并没有那么出色

Elm和Reason都有格式化工具,但Reason格式化的代码质量明显较差(尽管改进缓慢)。我认为这主要是因为