Elixir是否可以做Erlang无法做的事情,反之亦然?


102

这个问题是在Beam VM及其提供的功能的范围内,而不是在Turing完整语言可以做什么的一般范围内。我想花一些时间学习纯正的Erlang或Elixir。我得到了两者之间的基本区别,并且由于宏,更好的语法和今天更快的语言开发,我倾向于Elixir。

我的问题是:如果我选择Elixir,我会偶然发现我无法在Elixir中做到但可以在Erlang中做到的事情吗?我可以将所有OTP内容,所有Erlang库,代码重新加载等与Elixir一起使用吗?

我并不是要在这两者之间要求某人的偏爱。关于语言可能性的事实。最好是从在生产中同时使用过的人。


19
@hedgehog没意见,事实。问题是“我的问题是,如果我选择Elixir,我会偶然发现我无法做到但可以在Erlang中做到的事情吗?我可以在Elixir中使用所有OTP内容,所有Erlang库,代码重载等吗?” 答案是基于事实而不是观点。
SASAŠijak

4
对于该问题,答案是:您可以在Elixir中使用Erlang做任何事情。但是标题表明,问题是您应该投资什么,在这里答案是“取决于”。你想让我做什么?对于Web应用程序,Elixir更好,因为它是为解决此问题而创建的。对于某些分布式系统,您可以发现Erlang的优越性。缺少功能通常是一件好事。仅学习Erlang可以帮助您专注于最重要的一点:OTP。
tkowal

2
@SašaŠijak我将问题的标题更改为IMO,以更好地反映问题的内容-如果您不同意,请回复。
帕维尔Obrok

2
@PawełObrok伟大的编辑,它正确地总结我有兴趣知道的内容
SASAŠijak

3
每次我提出此类问题时,我都会得到-10张
反对票-arisalexis

Answers:


37

只是作为序言-我只在生产中使用了Elixir,而不是Erlang。

我会诚实地推荐Elixir。这是我的观点,不一定适合您,但是下面我将列出我的理由。

  1. 生产力:我来自Ruby / Rails背景,因此Elixir的语法和样式对我来说是非常熟悉的。帮助我确定是否学习语言的主要因素之一是我的语言效率—主要是为什么选择Ruby。长生不老药是一样的。我可以像使用Ruby一样快地工作,同时拥有并发和模式匹配的所有其他好处。
  2. Erlang:由于Elixir是在Erlang之上构建的,并且可以编译为erlang和Beam vm,因此您可以访问每个erlang模块和软件包。因此,如果您担心使用长生不老药,而错过了Erlang的所有功能,则不应该这样。Elixir甚至拥有自己的大多数较大的Erlang / OTP功能的实现,例如GenServer,GenEvent等。
  3. 社区/资源:Elixir社区确实是一个很棒的社区。松弛频道非常受欢迎,并且是获取初学者问题的最佳方法。已经有一些关于该语言的非常好的书(《 Programming Elixir 1.2-Dave Thomas》,《 Ruby Pickaxe》的作者)也使进入该语言变得非常容易。

确实,如果您对两者混为一谈,您可能会得出一个相同的决定,那就是Elixir是一种更好的语言,具有Erlang + More的所有功能。它也在上升,我不记得确切的数字,但我记得从Hex网站(软件包管理器)那里读到一些有关软件包下载量大量增加的信息。


14
Elixir不会编译为Erlang,而是编译为BEAM代码。Elixir与coffeescript等类似。等 那只写JS。
Peter R

64

您不应该偶然发现一种您可以做的任何事情,而另一种却做不到,因为您可以从Erlang中自由调用Elixir代码,反之亦然。您甚至可以在一个项目中轻松混合Erlang和Elixir文件。

在长生不老药中:

:erlang_module.erlang_function(args)

在Erlang中:

'Elixir.ElixirModule':elixir_function(args)

2
在构建具有嵌套依赖项或其他非常特殊情况的发行版时,有时可能会有些棘手,但我认为这绝对是正确的答案。 注意:如果在资源非常有限的计算机上运行,​​则在内存中将Elixir和Elixir依赖项添加到发行版中可能会更重。因此,如果我没有记错的话,有时可能会发生这样的情况:坚持使用纯Erlang可能会节省几兆字节的内存,从而在没有空间扩展VM时更容易避免崩溃。
Laymer '18

37

TL; DR- 从Elixir开始

与Elixir相比,Erlang的学习曲线更为陡峭。一旦开始学习Elixir,您将自动开始学习Erlang。因此,从Elixir开始。Elixir用Erlang和Elixir编写。参见Github上的发行版(因为Elixir充满了宏,也称为元编程)。 Elixir项目代码分发

您可以将Elixir与Erlang一起使用,反之亦然,因此可以使用拥有20多年图书馆历史的完整Erlang生态系统。

Erlang Solutions的更多详细信息

Elixir的“开箱即用”生产力是通过高度关注工具和表达数据操纵表达的便利来实现的。Elixir和Erlang中的系统设计相同,但是Elixir删除了许多样板代码,并且更易于扩展。删除样板可提高生产率,并使程序员更快地获得反馈,这对于希望尽快将产品投放市场至关重要。更少的样板也使快乐的开发人员受益,而快乐的开发人员无疑是富有成效的开发人员。

Joe Armstrong(Erlang发明家)的博客文章关于Elixir

从这里开始了解Elixir- 入门

一旦感觉良好,就可以练习锻炼其他资源


3

有几件事。我认为您无法在Elixir中创建递归anon函数。公平地说,在Erlang 8年以上的时间里,我认为我不需要做任何事情,而且如果我做到了,则可以通过其他方式轻松完成。老实说,您可能还忽略了其他一些事情。

通常,对于大多数人关心的事情,您可以在Erlang中进行,而可以在Elixir中进行,反之亦然。Elixir方面的社区似乎更加活跃,所以我建议从这里开始。我最近从Erlang搬到了Elixir,除了Proper中的一些奇特的东西外,我可以说这是一个非常容易的过渡

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.