Skip to content

📡 Erlang

概述:Erlang 是由爱立信于 1986 年开发的函数式编程语言,专为电信系统设计。Erlang 以其"Let it crash"哲学和卓越的并发处理能力闻名,能轻松构建高可用、可伸缩的分布式系统。WhatsApp 后端曾使用 Erlang 处理数十亿消息。

概述

Erlang 属于 函数式 & 分布式语言 分类。Erlang 的名字来源于数学家 Agner Krarup Erlang,同时也是一种双关语:"ERicsson LANGuage"。

语言特点

  • Actor 并发模型:每个 Actor(进程)独立运行,通过消息传递通信
  • 超轻量进程:一个 Erlang 节点可运行数百万个进程
  • Let it Crash:不防御错误,而是让进程崩溃、由 Supervisor 重启
  • 热代码升级:运行时更新代码,无需停机
  • 分布式原生:跨节点通信和内置分布式数据库 Mnesia

Hello World

erlang
-module(hello).
-export([world/0]).

world() ->
    io:fwrite("Hello, World!\n").

基础语法

变量与模式匹配

erlang
% 变量必须大写开头,且只能赋值一次
Name = "Erlang",
Age = 36,

% 模式匹配
{X, Y} = {1, 2},     % X = 1, Y = 2
[A, B | Rest] = [1, 2, 3, 4],  % A = 1, B = 2, Rest = [3, 4]

% 下划线忽略匹配
{_, Value} = {a, 42},  % Value = 42

函数

erlang
% 函数定义(在模块中)
-module(math).
-export([add/2, factorial/1]).

add(A, B) -> A + B.

% 递归与模式匹配
factorial(0) -> 1;
factorial(N) when N > 0 -> N * factorial(N - 1).

控制流

erlang
% case 表达式
case Value of
    {ok, Result} -> io:fwrite("Success: ~p~n", [Result]);
    {error, Reason} -> io:fwrite("Error: ~p~n", [Reason])
end,

% if 表达式
if
    X > 0 -> positive;
    X < 0 -> negative;
    true -> zero
end,

并发编程

erlang
% 创建进程
Pid = spawn(fun() -> loop() end),

% 发送消息
Pid ! {hello, "World"},

% 接收消息
loop() ->
    receive
        {hello, Name} ->
            io:fwrite("Hello, ~s!~n", [Name]),
            loop();
        stop ->
            ok
    end.

OTP 监督树

erlang
% Supervisor 行为模式
-module(my_supervisor).
-behaviour(supervisor).
-export([init/1]).

init([]) ->
    {ok, {
        {one_for_one, 5, 10},
        [{
            my_worker,
            {my_worker, start_link, []},
            permanent,
            5000,
            worker,
            [my_worker]
        }]
    }}.

应用领域

  • 电信系统:电话交换机和通信设备
  • 即时通讯:WhatsApp 后端、RabbitMQ 消息队列
  • 分布式数据库:CouchDB、Riak
  • 金融系统:交易和支付处理平台
  • IoT 平台:物联网设备管理
  • 游戏服务器:高并发游戏后端

开发环境搭建

  1. 安装 Erlang/OTP:sudo apt install erlang 或从 erlang.org 下载
  2. 构建工具:Rebar3 (rebar3 new app myapp)
  3. 验证:erl 进入 Erlang Shell
  4. 编辑器:VS Code + Erlang 扩展、IntelliJ Erlang 插件

学习路线

  1. 入门阶段:模式匹配 → 递归 → 列表处理 → 模块系统
  2. 进阶阶段:并发编程 → 消息传递 → 错误处理 → OTP 行为模式
  3. 实战阶段:Supervisor 监督树 → 分布式应用 → 数据库集成
  4. 高级阶段:NIF 开发 → 热代码升级 → 性能调优

返回首页 | 查看所有语言

编程语言技术文档