2021 年你需要知道的关于 Erlang 的一切
- admin
- 07 Jan 2024
今天,我们将看一个相当古老且有些古怪的东西。 你们大多数人可能没有注意到的语言。 虽然 Erlang 不像某些现代编程语言那样流行,但它安静地运行着 WhatsApp 和微信等每天为大量用户提供服务的应用程序。 在这篇文章中,我将告诉你关于这门语言的更多事情、它的历史,以及你是否应该考虑自己学习它。 ## 什么是 Erlang,它在哪里使用? Erl
Read More今天,我们将看一个相当古老且有些古怪的东西。 你们大多数人可能没有注意到的语言。
虽然 Erlang 不像某些现代编程语言那样流行,但它安静地运行着 WhatsApp 和微信等每天为大量用户提供服务的应用程序。
在这篇文章中,我将告诉你关于这门语言的更多事情、它的历史,以及你是否应该考虑自己学习它。
Erlang 是一种函数式的通用语言,旨在构建具有高可用性保证的可扩展、并发系统。
它于 1980 年代末在爱立信建造,用于处理电话交换机。 当时,电话交换系统是最复杂的系统之一,就像现在的互联网一样。 出于这个原因,用于对其进行编程的语言需要支持高并发和零停机时间。
在经历了多种现有的语言选择之后,公司的三个人—— Joe Armstrong, Robert Virding, and Mike Williams——决定创建自己的语言。 这导致了最酷的编程语言之一的产生,也许是我见过的最棒的语言营销视频。
那么,这种语言与其他所有语言的区别是什么?
Erlang 与其他语言的主要区别在于其基于进程的计算模型。 它使用隔离的、轻量级的进程,这些进程通过消息相互通信。
这些进程可以接收消息,并响应消息,创建新进程,向其他进程发送消息,或修改它们的状态。 换句话说,Erlang 遵循Actor模型。 如果您在 JVM 上使用过 Akka,您会感到非常熟悉。
这些进程是隔离的,创建速度很快,并且只占用少量内存。 通过创建更多进程可以轻松扩展您的系统。 由于这些进程无法辨别其他进程是在同一个核心上还是在另一个地方,因此您可以轻松地水平扩展(通过添加更多机器)和垂直扩展(通过添加核心)。
人们通常将 Erlang 与 Scala 和 Haskell 等其他语言归为一门函数式编程语言(FP)。 FP的一些特征是:
有关函数式编程的更多信息,您可以在introduction to FP中找到。
首先,当涉及跨网络的多个代理之间的消息传递时,Erlang 是一个不错的选择,因为它很好地映射了语言的基本结构。
它非常适合:
您可以在我们的 Elixir 和 Erlang 公司列表中查看 Erlang 的一些常见用例。
是的。 总体而言,Erlang 非常适合创建快速且可扩展的 Web 应用程序。 如果你到达那里,这是非常有益的。 不过,有一些警告。
您的 Web 应用程序(以及任何其他使用 HTTP 的应用程序)的核心将是 Cowboy,但除此之外,您还需要了解 Web 应用程序的组成部分并分别为每一层选择您的工具。
现实中有很好的文档,但新手级别的介绍性材料相对稀少,而且你不会找到所有内容的教程。 它不是 JavaScript。
总而言之,如果您决定构建 Web 应用程序,使用 Elixir(一种基于 Erlang 构建的语言)可能是更好的选择。
与其他编程语言相比,Erlang 具有三个显着优势,这主要源于该语言的独特构建方式。
在本节中,我将尝试深入了解 Erlang 应用程序的结构以及“Let it crash”的理念如何在现实生活中发挥作用。
实际上,Let it crash并不是为了用户或系统而崩溃。 这是 Erlang 极力避免的事情。 相反,它是在失败不可避免地发生时遏制失败,因为在生活中,事情有时确实会失败。 最差的情况发生了。 让我们看看 Erlang 是如何清理它的。
基本上,一个 Erlang 应用程序是一个进程树。
在树的底部叶子,我们有工作进程——那些做大部分工作的进程。 在他们之上,我们有主管,他们启动工人并检查他们。
监督者自己可以被监督; 我们可以在这里轻松地在树的顶部添加一个 Grand Supervisor。
如果进程崩溃,它会向其主管发送一条消息。 根据监管策略集,要么只重启进程,要么重启其主管下的所有进程。
如果在一段时间内重启连接的工作人员并没有解决问题给定的次数,主管将终止其所有子进程,然后终止自身。 此时,尝试处理问题的责任被向上推到下一个监督层。
只有当顶级主管失败时,它才会重新启动并且应用程序崩溃。
Erlang 不是唯一在 BEAM 上运行的语言。 还有很多其他的。 主要的是Elixir。
Elixir是什么?
Elixir 由 José Valim 在 2010 年代初创建。 他采用 Erlang 并在其上增加了一个薄层,该层具有更现代的语法,类似于 Ruby。
由此产生的语言是对 Erlang 和 Ruby 的改进。 在 2015-2016 年,它的主要 Web 框架 Phoenix 发布时,它的受欢迎程度大幅上升。
您可以在我们对 Elixir 的介绍中了解更多关于 Elixir 和 Phoenix 的信息。
Elixir 实际上并没有为 Erlang 添加很多新功能。你可以在 Elixir 中做的所有事情,你也可以在 Erlang 中做,并且可以相互调用两种语言。 Elixir 的大部分优势源于它具有更现代的、类似 Ruby 的语法这一事实,这导致它比 Erlang 更受欢迎。
下面是 Elixir 相对于 Erlang 的优势:
那么,为什么要学习这种语言呢?原因有以下三个:
如果最后一个是真的,我实际上会为你指明通往 Elixir 的道路。虽然这两种语言都很好用,但 Elixir 似乎是最近更流行的一种。它会给你更多的工作机会,也会更容易学习。
之后,您可以学习 Erlang 以及它的成功之处。了解 Erlang 在 Elixir 下的功能将帮助您编写更好的 Elixir 代码,并使您更有可能被聘为 Elixir 开发人员。
无论如何,我认为你不会后悔学习 BEAM 的任何部分,即使它不全是阳光和彩虹(BEAM 语言有时会变得很奇怪)。如果您想知道从哪里开始,我会推荐Learn You Some Erlang for Great Good!或我们的 Elixir 初学者指南。
今天,我们将看一个相当古老且有些古怪的东西。 你们大多数人可能没有注意到的语言。 虽然 Erlang 不像某些现代编程语言那样流行,但它安静地运行着 WhatsApp 和微信等每天为大量用户提供服务的应用程序。 在这篇文章中,我将告诉你关于这门语言的更多事情、它的历史,以及你是否应该考虑自己学习它。 ## 什么是 Erlang,它在哪里使用? Erl
Read More这篇文章探讨了 Erlang/OTP 25 中基于类型的新优化,其中编译器将类型信息嵌入到 BEAM 文件中,以帮助JIT(即时编译器)生成更好的代码。 ## 两全其美 OTP 22 中引入的基于SSA的编译器处理步骤进行了复杂的类型分析,允许进行更多优化和更好的生成代码。然而,Erlang 编译器可以做什么样的优化是有限制的,因为 BEAM 文件必须
Read More自从Erlang 存在,就一直有让它更快的需求和野心。这篇博文是一堂历史课,概述了主要的 Erlang 实现以及如何尝试提高 Erlang 的性能。 ## Prolog 解释器 Erlang 的第一个版本是在 1986 年在 Prolog 中实现的。那个版本的 Erlang 对于创建真正的应用程序来说太慢了,但它对于找出Erlang语言的哪些功能有用,哪
Read More