探秘Erlang:独特而强大的编程语言
在编程的广阔天地里,有这样一门语言,它或许没有现代热门编程语言那般耀眼,却默默支撑着如WhatsApp和微信等拥有海量用户的应用程序,这就是Erlang。
在编程的广阔天地里,有这样一门语言,它或许没有现代热门编程语言那般耀眼,却默默支撑着如WhatsApp和微信等拥有海量用户的应用程序,这就是Erlang。
一、Erlang是什么以及它的起源
Erlang诞生于20世纪80年代末的爱立信公司,是为应对当时电话交换系统这一复杂难题而打造的。那时,电话交换系统如同当今的互联网一样复杂,需要一种能支持高并发且零停机时间的编程语言。经过对多种现有语言的筛选,Joe Armstrong、Robert Virding和Mike Williams这三位工程师决定创造一门属于自己的语言,于是Erlang应运而生,还诞生了可能是有史以来最酷的语言营销视频。
Erlang是一种函数式、通用型语言,旨在构建具有高可用性保证的可扩展、并发系统。它以独特的计算模型和特性,在编程语言之林中占据了一席之地。
二、Erlang的独特特性
- 面向进程:与其他语言相比,Erlang最显著的特点就是其基于进程的计算模型。它使用相互隔离、轻量级的进程,通过消息进行通信。这些进程能够接收消息,并依据消息创建新进程、向其他进程发送消息或修改自身状态,遵循的是actor模型。例如,如果你熟悉在JVM上使用的Akka,那么在Erlang中使用进程就会有一种熟悉感。这些进程不仅相互隔离,创建速度快,而且占用内存少。通过创建更多进程,能轻松扩展系统。由于进程无需区分其他进程是在同一核心还是其他位置,所以无论是横向扩展(增加更多机器)还是纵向扩展(增加核心)都很容易实现。
- 函数式特性:Erlang通常与Scala和Haskell等语言一同被归为函数式编程语言,具有纯函数频繁使用、高阶函数以及模式匹配等函数式编程的典型特征。例如在处理数据时,纯函数能保证相同输入始终得到相同输出,这使得代码的行为更可预测,便于调试和维护。
三、Erlang的应用领域
- 聊天应用:像微信和WhatsApp这样的聊天巨头都借助Erlang来应对海量并发用户。Erlang拥有名为ejabberd的出色消息平台,利用它可打造大规模的聊天应用。以WhatsApp为例,每天数以亿计的消息能快速、稳定地传递,背后离不开Erlang的强大支撑。
- 消息队列系统:RabbitMQ作为实现AMQP等协议的开源消息代理,是Erlang的一个成功范例。它在分布式系统中负责高效的消息传递和处理,确保各个组件之间可靠地通信。
- 区块链:Aeternity这样旨在实现可扩展、安全且去中心化的区块链应用,其节点实现采用了Erlang,借助Erlang的特性保障区块链系统的稳定运行。
- 二进制操作:由于历史上要为电信目的快速实现二进制协议,Erlang具备使二进制操作更便捷的特性,比如对二进制的模式匹配。例如,它甚至可以像十六进制编辑器一样使用,对二进制数据进行精准处理。
- 其他分布式、高性能服务:在金融科技项目中处理来自各地的交易,或者创建竞标/用户匹配平台等场景,Erlang也是不错的选择。
四、用Erlang构建Web应用
虽然可以用Erlang构建快速且可扩展的Web应用,但存在一些注意事项。Web应用核心一般会用到Cowboy,但除此之外,开发者需要清楚Web应用的组成结构,并为每一层分别挑选合适的工具。尽管相关库文档完善,但适合新手的入门资料相对较少,并非所有内容都有教程。相比之下,如果决定自行构建Web应用,基于Erlang的Elixir语言或许是更好的选择,借助Elixir软件开发公司的支持能更顺利地开展工作。
五、Erlang在项目中的优势
- 并发:Erlang的虚拟机BEAM使用轻量级执行线程(即进程),这些进程相互隔离,能在所有CPU上运行,并通过消息通信。结合语言的函数式特性,在Erlang中编写并发程序相对容易。
- 可扩展性:Erlang完美适配现代计算的分布式特性以及如今的多核CPU。通过增加机器或为现有机器添加核心,借助Erlang进程可轻松实现系统扩展。
- 可靠性:Erlang有“let it crash”的理念。基于独特的容错方式,轻量级进程可由监督系统快速重启,有助于构建自我修复系统。例如某个进程因临时故障崩溃,监督系统能迅速重启它,而不会影响整个系统的运行,除非顶层监督者失败,否则应用不会崩溃。
六、“let it crash”的原理
实际上,“let it crash”并非让用户或系统崩溃,而是在不可避免的故障发生时进行有效处理。Erlang应用是一个进程树,底部是执行大部分工作的工作进程,往上是监督者,负责启动和检查工作进程,监督者自身也可被监督。当某个进程崩溃时,会向其监督者发送消息,监督者根据设定的监督策略,决定是仅重启该进程,还是重启其下方所有进程。若在一定时间内多次重启相关工作进程仍无法解决问题,监督者会终止其所有子进程,然后自身终止,将处理问题的责任上推到下一个监督层。只有顶层监督者失败时,应用才会崩溃。
七、Erlang与Elixir的比较
- Elixir简介:Elixir由José Valim在21世纪10年代初创建,它在Erlang之上构建了一层更现代、类似Ruby语法的薄层。2015 - 2016年,随着其主要Web框架Phoenix的发布,Elixir迎来了一定程度的流行热潮。
- Elixir相对Erlang的优势:
- 现代语法:对于有其他流行编程语言编程经验的人来说,Elixir的语法更容易理解,减少了样板代码,可提高开发者生产力。
- 更高的流行度:Elixir在一段时间内更受欢迎,相关内容更新且数量更多。
- 框架:在Web开发方面,Phoenix是优秀的框架之一,对于想进行Web开发和函数式编程的人来说非常便捷。此外,Elixir还有用于嵌入式软件的Nerves框架,若从事相关领域,Elixir是更好的选择。
八、Erlang是否值得学习
学习Erlang主要有以下三个原因:
- 若你瞄准Erlang应用的特定领域岗位,比如渴望在WhatsApp这样的聊天应用公司工作,那么学习Erlang是合理的选择。
- 如果你想编写尽可能少依赖、小巧便携的程序,Erlang能提供许多开箱即用的功能来满足需求。
- 要是你纯粹出于好奇,想探索新的编程方式,那么欢迎踏入BEAM的世界。不过,若是出于此原因,建议先学习Elixir。Elixir近来更受欢迎,能提供更多工作机会且更容易学习。掌握Elixir后再学习Erlang,了解其底层原理,有助于编写更优质的Elixir代码,增加成为Elixir开发者被录用的机会。
总之,尽管探索BEAM语言的旅程并非一帆风顺,但相信无论选择Erlang还是Elixir,都不会让你后悔。如果想入门,可以参考《Learn You Some Erlang for Great Good!》或相关Elixir入门指南。
更多推荐
所有评论(0)