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

Saš*_*jak 96 erlang elixir erlang-otp

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

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

我不是要求两者之间的偏好; 关于语言可能性的事实.优选地来自在生产中使用两者的人.

Paw*_*rok 62

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

在Elixir:

:erlang_module.erlang_function(args)
Run Code Online (Sandbox Code Playgroud)

在Erlang:

'Elixir.ElixirModule':elixir_function(args)
Run Code Online (Sandbox Code Playgroud)

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

Har*_*cas 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的作者)也使得进入该语言非常容易.

真的,如果你把这两者搞得一团糟,你可能会得出同样的决定,即Elixir是一种更好的语言,具有Erlang + More的所有功能.它也在上升,我记不清确切的数字,但我记得从Hex网站(包经理)那里读到了关于包下载大幅增加的一些内容.

  • Elixir没有编译成Erlang,它编译为BEAM代码.Elixir与coffeescript等不相似.人.那只是写JS. (12认同)

Sai*_*ram 32

TL; DR - 从Elixir开始

与Elixir相比,Erlang的学习曲线更加陡峭.一旦你开始学习Elixir,你将自动开始学习Erlang.因此,从Elixir开始.Elixir是用Erlang和Elixir编写的.请参阅Github上的分发(因为Elixir充满了宏,即元编程). Elixir项目代码分发

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

来自Erlang Solutions的更多细节

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

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

从这里开始了解Elixir - 入门

一旦你感觉良好,就要练习练习和其他资源.


Zac*_*y K 5

有几件事。我认为你不能在 Elixir 中创建递归匿名函数。现在公平地说,这是在 Erlang 8 年多的时间里我认为我不需要做的事情,如果我做了,可以通过其他方式轻松完成。老实说,可能还有其他一些类似的事情您可以忽略。

一般来说,对于大多数人关心的事情,你可以在 Erlang 中做任何事情,你可以在 Elixir 中做,反之亦然。Elixir 方面的社区似乎更活跃,所以我建议从那里开始。我最近从 Erlang 迁移到 Elixir,除了 Proper 中的一些花哨的东西,我可以说这是一个非常简单的转换