📡 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 平台:物联网设备管理
- 游戏服务器:高并发游戏后端
开发环境搭建
- 安装 Erlang/OTP:
sudo apt install erlang或从 erlang.org 下载 - 构建工具:Rebar3 (
rebar3 new app myapp) - 验证:
erl进入 Erlang Shell - 编辑器:VS Code + Erlang 扩展、IntelliJ Erlang 插件
学习路线
- 入门阶段:模式匹配 → 递归 → 列表处理 → 模块系统
- 进阶阶段:并发编程 → 消息传递 → 错误处理 → OTP 行为模式
- 实战阶段:Supervisor 监督树 → 分布式应用 → 数据库集成
- 高级阶段:NIF 开发 → 热代码升级 → 性能调优