绿叶网 LOGO

Erlang 在线编译器

关于 Erlang 在线编译器

刚学 Erlang 时,如果只是想试一下模式匹配,或者看看 spawn(开进程)、!(发消息)和 receive(收消息)到底是怎么配合的,还要去搞一套完整的 Erlang/OTP 环境、建文件、编译……确实挺折腾。特别是第一次看到 -module、-export、-> 这些充满 “异域风情” 的符号,很容易让人头晕。

这时候,直接用咱们绿叶网的 Erlang 在线编译器就省事多了。打开网页直接敲代码,点一下运行就能看结果。不仅适合新手边学边试,拿来快速验证一小段相对独立的逻辑也非常方便。

Erlang 在线编译器怎么用?

页面上方就是咱们的编译器。操作非常简单,无非就是经典的 “四步走”:

  • 敲代码:在编辑区直接输入或粘贴你的 Erlang 代码。
  • 跑起来:点击 “运行” 按钮,或者使用 Ctrl + Enter 快捷键。
  • 看结果:程序跑完后,下方结果区会直接展示代码(比如 io:format)输出的内容。
  • 接着改:如果提示语法报错,或者运行结果不对,直接在代码里修改,再跑一次就行。

我们来跑个经典的小例子:主进程 “派活儿” 给子进程,子进程算完求和后,再把结果发回来。代码如下:

-module(main).
-export([main/0]).

main() ->
    Parent = self(),
    Worker = spawn(fun() ->
        receive
            {sum, Numbers} ->
                Parent ! {result, lists:sum(Numbers)}
        end
    end),
    Worker ! {sum, [10, 20, 30, 40]},
    receive
        {result, Total} ->
            io:format("Total: ~p~n", [Total])
    end.

运行结果如下。

Total: 100

你看,像上面这种几十行的小测试,用在线编译器是再合适不过了。不用建项目,写完就跑,所见即所得。

Erlang 在线编译器适合哪些场景?

Erlang 的编程思路和很多常见语言不太一样。与其抱着文档硬啃概念,不如边敲代码边看效果。咱们的 Erlang 在线编译器主打一个 “即开即用、随时验证”,非常适合以下几个场景:

  • 新手快速入门:刚接触 Atom(原子)、Tuple(元组)和 List(列表)?不用费劲折腾本地的 Erlang/OTP 环境,在网页上写一点、跑一点,能帮你最快找到手感。
  • 测试模式匹配:Erlang 处处皆匹配。如果你拿不准某个列表拆分(比如 [H|T])或者 case 分支到底能不能匹配成功,扔进去跑一下立马见分晓。
  • 把玩并发与消息传递:想看看进程之间是怎么 “聊天” 的?用几十行小代码测试一下 spawn、!(发送)和 receive 的配合,既直观又好玩。
  • 验证递归逻辑:Erlang 里没有传统的 for 循环,循环全靠递归。拿它临时测一下函数的终止条件或者列表处理逻辑,能帮你少绕很多弯路。
  • 教学与代码分享:讲课演示或者和别人讨论代码时,打开网页就能跑,大家还能顺手改两笔,非常省事。

绿叶网 Erlang 在线编译器的使用场景,展示了其在新手入门、测试模式匹配、把玩并发消息以及递归验证中的便捷性。

Erlang 是什么?

简单来说,Erlang 是一门专门为 “高并发、高可用” 量身定制的编程语言。它诞生于 20 世纪 80 年代,最早是爱立信(Ericsson)用来开发电信交换机系统的。

想象一下,电话网络必须 7x24 小时运行,总不能因为一个小故障就让整片地区的电话都打不通吧?所以 Erlang 从骨子里就自带 “抗造” 和 “容错” 的基因。

Erlang 编程语言简介图,强调了其专为高并发、高可用和电信级系统 7x24 小时运行设计的“抗造”特性。

对于初学的小伙伴来说,需要先建立 3 个直观印象:

  • 纯正的函数式编程:这里没有常见的对象和变量修改(数据是不可变的),逻辑处理大量依赖 “模式匹配” 和 “递归”。
  • 极致的轻量级并发:Erlang 里的 “进程” 极其轻量,一台普通电脑跑几十万个都不在话下。而且它们之间互不共享内存,全靠互相 “发消息” 来沟通,互不干扰。
  • 最佳搭档 OTP:日常开发中,我们常说 “Erlang/OTP”。Erlang 是语言本身,而 OTP 是它自带的一套极其强大的标准库和框架(包含了进程监控、自动重启机制等)。真正在工程中写后台,大家基本都是踩在 OTP 的肩膀上干活的。

Erlang 主要用在哪些地方?

Erlang 并不适合拿来写个普通的网页后台或者一次性的小脚本。它的主战场是那些需要同时处理海量连接、要求长时间稳定运行的系统。常见的典型场景包括:

  • 即时通讯(IM)与消息系统:应对海量用户同时在线聊天,Erlang 的 “独立进程 + 消息传递” 简直是专业对口(像 WhatsApp 早期就大量使用了 Erlang)。
  • 消息中间件与底层设施:比如大家常用的 RabbitMQ 就是用 Erlang 写的,主打就是一个高并发和高可靠。
  • 高可用的分布式后台:有些服务端程序宕机代价极大。Erlang 自带 “隔离机制”,局部代码报错不会拖垮整个系统,甚至还能通过 Supervisor(监控树)自动重启救活自己。
  • 电信与通信网:这是它的老本行,专门应对海量并发会话和故障隔离。

Erlang 的主要应用领域分布,包括即时通讯、消息中间件、高可用的分布式后台以及电信通信网络。

如果你的项目只是普通的增删改查,用 Erlang 会觉得大材小用且学习成本高。但如果业务场景明确要求 “并发极高、7x24小时不能停机、局部出错还要能自我恢复”,那 Erlang 这套技术栈就会让你觉得非常得心应手。

Erlang 为什么特别擅长并发?

很多语言也能开线程跑异步,但 Erlang 的并发是 “骨子里的”。这主要归功于它与众不同的两点设计:

  • 超轻量级的 “进程” :注意,Erlang 里的进程和操作系统的进程完全是两码事,它是由 Erlang 内部自己管理的。如果把操作系统的线程比作笨重的公交车,那 Erlang 进程就是轻巧的自行车。你只要用 spawn 命令就能瞬间创建一个进程,一台普通电脑同时跑几十万个这样的进程都不在话下。
  • 互不干涉,只靠 “发短信” 沟通:在很多传统语言里,多个线程往往会共享同一块内存,很容易出现 “大家抢着修改同一个数据” 引发的混乱(锁竞争问题)。但在 Erlang 里,进程之间是完全隔离的,谁也不碰谁的数据。需要合作怎么办?发消息!就像手机互发短信一样,既安全又清晰。

当然,这并不意味着用 Erlang 写并发就永远不会卡顿(比如消息发得太快把信箱塞满了也会出问题),但它确实从底层帮你避开了最让人头疼的 “共享状态” 陷阱。

Erlang 独特的并发机制示意图,直观展示了超轻量级进程的创建机制以及互不共享内存的消息传递模式。

Erlang/OTP 和 BEAM 是什么关系?

在看资料时,这 3 个名字经常像 “连体婴” 一样出现。其实不用被它们唬住,我们可以用盖房子的过程来理解它们:

  • Erlang(编程语言):好比是 “语法规则与设计图纸”。它规定了你怎么写函数、怎么做模式匹配、怎么收发消息。
  • OTP(框架与工具箱):好比是 “预制组件和脚手架”。你要盖一栋高楼,总不能从烧砖头开始吧?OTP 提供了一整套极其成熟的设计模式和库(比如负责干活的 gen_server,负责监控报错重启的 Supervisor),帮你快速搭建抗造的系统。
  • BEAM(虚拟机):好比是 “底层发动机”。你写好的 Erlang 代码并不能直接在 Windows 或 Linux 上跑,而是要交给 BEAM 这个虚拟机来执行。它负责给那几十万个轻量级进程分配资源,是真正干苦力活的幕后英雄(作用类似于 Java 的 JVM)。

Erlang、OTP 与 BEAM 的关系解析,通过生动的图文说明了编程语言、框架工具箱与底层虚拟机的协作过程。

Erlang 的 = 为什么不像普通 “赋值”?

在 C、Java 或 Python 里,= 就像个搬运工,负责把右边的值塞给左边的变量。但在 Erlang 里,= 其实叫 “模式匹配(Pattern Matching)” ,它的逻辑更像是 “对形状”。

我们来看看下面这几行代码:

Point = {10, 20},
{X, Y} = Point,
io:format("X=~p, Y=~p~n", [X, Y]).

其中:

  • 第一行:把变量 Point 和 {10, 20} 绑定在一起。
  • 第二行:这不是把 Point 赋值给两个新变量,而是拿左边的结构 {X, Y} 去和右边的值 {10, 20} 对比。因为两边 “形状” 完全一样,于是顺理成章地,X 被提取成了 10,Y 被提取成了 20。

这里有两个初学者一定要适应的设定:

  • 变量非常 “专一”(单次绑定): 一个变量只要绑定了值,就再也不能改成其他值了。
  • 大写才是变量: 变量名必须以大写字母或下划线开头(比如 X、Point)。像 hello、ok、error 这种小写开头的,在 Erlang 里叫作原子(Atom),你可以把它当成一种固定的状态标签。

一开始没有可变变量可能会让你觉得有些反常,但等你习惯了这种 “匹配” 思维后,你会发现以后用来拆解复杂参数、写分支逻辑(比如 case 和 receive)时,代码会变得非常清晰流畅。

常用快捷键

代码写得多了以后,鼠标点来点去多少有点慢。Erlang 在线编译器支持下面这些常用快捷键,小伙伴们先把几个高频的记住就够用了。

  • Ctrl + Enter:运行代码。
  • Ctrl + Z:撤销、Ctrl + Y:重做。
  • Ctrl + C:复制、Ctrl + V:粘贴。
  • Ctrl + A:全选。
  • Ctrl + X:剪切。
  • Ctrl + /:注释或取消注释。
  • Ctrl + Home:跳转到首行的行首。
  • Ctrl + End:跳转到末行的结尾。

其中最值得记住的还是 Ctrl + Enter。刚改完一个模式、receive 分支或者消息结构,顺手运行一次,很快就能知道代码到底按不按你的预期工作。

「在线编译器」正在不断完善中,小伙伴们如果发现任何问题,或者有更好的建议,还望多多给站长反馈,谢谢!

邮箱:lvyenet@vip.qq.com