有没有Elixir可以做的事情,Erlang不能,反之亦然?

时间:2016-06-22 10:00:48

标签: erlang elixir otp

这个问题是在Beam VM及其提供的功能的背景下,而不是图灵完整语言可以做的一般上下文。我想投入一些时间来学习纯Erlang或Elixir。我得到了两者之间的基本差异,我倾向于Elixir因为今天的语言更好,语法更好,语言更快。

我的问题是:如果我选择Elixir,我会偶然发现我不能做的事情,但可以在Erlang中做些什么吗?我可以使用Elix的所有OTP内容,所有Erlang库,代码重新加载等吗?

我并不是要求两者之间有人偏好;关于语言可能性的事实。最好是在生产中同时使用它们的人。

4 个答案:

答案 0 :(得分:61)

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

在Elixir:

:erlang_module.erlang_function(args)
在Erlang中

'Elixir.ElixirModule':elixir_function(args)

答案 1 :(得分:35)

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

我会诚实地推荐Elixir。这是我的意见,并不一定适合你,但下面我会列出我的原因。

  1. 生产力:我来自Ruby / Rails背景,所以Elixir的语法和风格对我来说非常熟悉。帮助我确定是否学习某种语言的主要因素之一是我可以有多高效 - 主要是为什么我选择了Ruby。 Elixir是一样的。我可以像Ruby一样快速地工作,并且具有并发和模式匹配的所有额外好处。
  2. Erlang:由于Elixir构建在Erlang之上并编译为erlang和beam vm,因此您可以访问每个erlang模块和包。因此,如果您担心使用elixir并错过了Erlang的所有功能,那么您就不应该这样做。 Elixir甚至拥有大多数更大的Erlang / OTP功能的实现,如GenServer,GenEvent等。
  3. 社区/资源:Elixir社区真的很棒。松弛的渠道非常受欢迎,也是获得初学者问题答案的好方法。已经有一些非常好的书写在该语言上(Programming Elixir 1.2 - Dave Thomas,Ruby Pickaxe的作者)也使得进入该语言非常容易。
  4. 真的,如果你对这两者感到困惑,你可能会得出同样的决定,即Elixir是一种更好的语言,具有Erlang + More的所有功能。它也在崛起,我无法记住确切的数字,但我记得从Hex网站(包管理器)那里读到了关于包下载量大幅增加的内容。

答案 2 :(得分:30)

TL; DR - Start with Elixir

与Elixir相比,Erlang的学习曲线更为陡峭。一旦你开始学习Elixir,你将自动开始学习Erlang。因此,从Elixir开始。 Elixir是用Erlang和Elixir编写的。 See distribution on Github(因为Elixir充满了宏,即元编程)。 Elixir Project Code distribution

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

来自Erlang Solutions

的更多详情
  

Elixir的“开箱即用”生产力是通过强烈关注工具和表达数据操作的便利来实现的。 Elixir和Erlang中的系统设计是相同的,但Elixir删除了大量样板代码并且更容易扩展。删除样板提高了工作效率,并允许程序员更快地获得反馈 - 当您希望尽快将产品推向市场时至关重要。较少的样板也可以让开发人员感到高兴,而开心的开发人员也是非常高效的开发人员。

Joe Armstrong(Erlang发明者)blog post about Elixir

从这里开始了解Elixir - Getting Started

一旦您感觉良好,请按照Exercismother resources的方式练习。

答案 3 :(得分:2)

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

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