是否有 Elixir 可以做而 Erlang 做不到的事情,反之亦然?

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

这个问题是在 Beam VM 及其提供的功能的上下文中,而不是在图灵完备语言可以做什么的一般上下文中。我想花一些时间学习纯 Erlang 或 Elixir。我明白了两者之间的基本区别,我更倾向于 Elixir,因为今天语言的宏、更好的语法和更快的开发。

我的问题是:如果我选择 Elixir,我是否会偶然发现一些我在其中做不到但在 Erlang 中可以做的事情?我可以在 Elixir 中使用所有 OTP 东西、所有 Erlang 库、代码重新加载等吗?

我不是在征求某人对两者的偏好;只是关于语言可能性的事实。最好来自在生产中使用过两者的人。

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

老实说,我会推荐 Elixir。这是我的意见,不一定适合你,但下面我会列出我的理由。

  1. 生产力:我来自 Ruby/Rails 背景,所以我对 Elixir 语法和风格非常熟悉。帮助我决定是否学习一门语言的主要因素之一是我在这门语言中的生产力——主要是我选择 Ruby 的原因。长生不老药是一样的。我可以在其中尽可能快地工作 Ruby,并具有并发性和模式匹配的所有附加优势。
  2. Erlang:由于 Elixir 构建在 Erlang 之上并向下编译为 erlang 和 beam vm,因此您可以访问每个 erlang 模块和包。因此,如果您担心使用 elixir 并错过 Erlang 的所有功能,您不应该担心。 Elixir 甚至有它自己的大多数更大 Erlang/OTP 功能的实现,例如 GenServer、GenEvent 等。
  3. Community/Resources:Elixir 社区真的很棒。 Slack 频道非常受欢迎,是获得初学者问题答案的好方法。已经有一些关于该语言的非常好的书籍(Programming Elixir 1.2 - Dave Thomas,Ruby Pickaxe 的作者)也使进入该语言变得非常容易。

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

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

在长生不老药中:

:erlang_module.erlang_function(args)

在二郎中:

'Elixir.ElixirModule':elixir_function(args)

TL;DR - Start with Elixir

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

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

来自 Erlang Solutions

的更多详细信息

Elixir’s ‘out of the box’ productivity is accomplished by a strong focus on tooling and convenience in expression of data manipulation. System design is the same in Elixir and Erlang, but Elixir removes a lot of boilerplate code and is easier to extend. The removal of boilerplate raises productivity and allows programmers to get feedback faster – crucial when you want to launch your product to market as fast as possible. Less boilerplate also makes for happy developers, and happy developers are unsuprisingly productive developers.

Joe Armstrong's (Erlang inventor's) blog post about Elixir

从这里开始了解 Elixir - Getting Started

一旦感觉进展顺利,就开始练习 Exercism and other resources

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

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