Are there things Elixir can do that Erlang cannot, or vice versa?

This question is in the context of the Beam VM and the capabilities that it provides, not in the general context of what a Turing complete language can do. I want to invest some time to learn either pure Erlang or Elixir. I get the basic differences between the two and I am leaning towards Elixir because of the macros, better syntax and faster development of the language this day.

My question is: if I choose Elixir, will I stumble on something that I cannot do in it, but can do in Erlang? Can I use all the OTP stuff, all the Erlang libraries, code reload, etc. with Elixir?

I am not asking for someone's preference between the two; just facts about the possibilities of the languages. Preferably from someone who used both in production.

37512 次浏览

只是序言-我只在生产中使用长生不老药,而不是二郎。

我真心推荐长生不老药。这是我的观点,并不一定适合你,但下面我将列出我的理由。

  1. 工作效率: 我来自 Ruby/Rails 背景,所以 Elixir 的语法和风格对我来说非常熟悉。帮助我决定是否学习一门语言的主要因素之一是我在这门语言中的工作效率——主要是我选择 Ruby 的原因。长生不老药也一样。我可以像使用 Ruby 一样快速地工作,同时还可以获得并发性和模式匹配的额外好处。
  2. Erlang: 由于长生不老是建立在 Erlang 之上并且编译成 Erlang 和 beamvm,你可以访问每个 Erlang 模块和包。因此,如果你担心使用长生不老药会错过 Erlang 的所有特色,那么你不应该担心。长生不老药甚至有自己的实现,可以实现大多数 Erlang/OTP 的大功能,比如 GenServer、 GenEvent 等。
  3. 社区/资源: 长生不老药社区确实是一个很棒的社区。松弛通道真的很受欢迎,是一个很好的方式来获得一些初学者的问题的答案。已经有一些非常好的关于这门语言的书(Programming Elixir 1.2-Dave Thomas,Ruby Pickax 的作者) ,这些书使得进入这门语言变得非常容易。

实际上,如果你对这两种语言感到困惑,你可能会做出同样的决定: Elixir 是一种更好的语言,具有 Erlang + More 的所有特性。它也在上升,我不记得确切的数字,但我记得从 Hex 网站(软件包管理器)上读到一些关于软件包下载大幅增加的内容。

你不应该在一个地方碰巧发现你能做的事情,而在另一个地方却做不到,因为你可以自由地从 Erlang 调用长生不老药代码,反之亦然。您甚至可以在一个项目中轻松地混合 Erlang 和 Elixir 文件。

In Elixir:

:erlang_module.erlang_function(args)

在 Erlang:

'Elixir.ElixirModule':elixir_function(args)

DR-从长生不老药开始

与长生不老药相比 Erlang 的学习曲线更陡峭。一旦您开始学习长生不老药,您将自动开始学习 Erlang。因此,从长生不老药开始。长生不老是在 Erlang 和长生不老写的。请参阅 Github 上的发行版(因为长生不老药充满了宏,又名元编程)。 Elixir Project Code distribution

你可以使用长生不老药和 Erlang,反之亦然,因此,20多年的图书馆的完整 Erlang 生态系统。

来自 Erlang 解决方案公司的更多细节

长生不老药的“开箱即用”生产力是通过强烈关注工具和方便的数据操作表达来实现的。长生不老药和 Erlang 的系统设计是一样的,但是长生不老药移除了大量的样板代码,并且更容易扩展。删除样板提高了生产力,并允许程序员更快地获得反馈——当您想要尽快将产品投放市场时,这一点至关重要。更少的样板文件也会让开发人员感到高兴,而高兴的开发人员毫无疑问是高产的开发人员。

乔 · 阿姆斯特朗关于长生不老药的博客文章

从这里开始学习长生不老药 -开始

Once you feel its going well, work your way towards practicing on 运动 and 其他资源.

有几件事。我觉得你不能在长生不老药里做一个递归的匿名函数。公平地说,在 Erlang 的8年多时间里,我认为这是我从来不需要做的事情,如果我做了,也可以用其他方式轻松完成。可能还有一些类似的事情,老实说你可以忽略。

一般来说,对于大多数人关心的事情,你可以在 Erlang 做任何事情,你可以在长生不老药中做,反之亦然。长生不老药方面的社区似乎更加活跃,所以我建议从那里开始。我最近从 Erlang 搬到了长生不老药(Elixir) ,我可以说,这是一个相当容易的转变,除了 Proper 中的一些花哨的东西之外