模块 00查看课程目录
00起跑线:两门语言,一台机器01先建立 BEAM 心智模型02Elixir 基础:让数据流过函数03Erlang 基础:读懂 BEAM 的母语04两种语法,一套语义05从裸进程理解并发06从手写循环推导 OTP07监督树与应用08状态、吞吐与背压09分布式与可运维性10Erlang ↔ Elixir 互操作11综合项目:可靠任务调度器
00
地基零基础BEAMElixirErlang

起跑线:两门语言,一台机器

先把 Erlang、Elixir、BEAM、OTP 与 Mix 的关系说清楚。

2检查点
2 小时预计完成
为什么先学这个

先修正心智模型,再增加 API

很多初学者把 Elixir 当作“换了语法的 Ruby”,把 OTP 当成一个可以随时补学的库,又把 Mix、Hex 和 BEAM 混成同一层。这样会在并发、错误处理、依赖和项目结构上不断用错心智模型。本章先固定地图:Erlang 与 Elixir 是语言,BEAM 是运行时,OTP 是构建可靠系统的一组设计原则与组件;Mix 是随 Elixir 提供、负责创建、编译、测试和组织项目的构建工具。

学完你能做到

可验证的学习目标

  • 能画出“源码 → BEAM 字节码 → BEAM VM → OTP 应用”的关系
  • 能分别启动 erl、iex,并解释两者提示符的差异
  • 能用版本输出定位安装层、语言层与 OTP 层的问题
  • 能解释 Mix 与 IEx、OTP、Hex 的职责边界,并运行最小 Mix 项目
前置知识
  • 会使用终端执行命令
  • 知道函数和变量的基本含义
最小心智模型

先抓住三个词

01

BEAM

Erlang/OTP 的虚拟机。它负责调度轻量进程、隔离堆、投递消息和装载代码。

02

OTP

不是另一门语言,而是一套库、behaviour 与系统设计原则;Supervisor、GenServer 都属于它。

03

Mix

随 Elixir 安装的构建工具。它通过任务创建、编译、格式化、测试项目并管理依赖;`mix.exs` 是项目配置入口。Mix 不是 BEAM、OTP,也不等于 Hex 包仓库。

双语代码桥

先对齐协议,再看标点

两段语法不同,但都在创建一个 BEAM 进程、发送一个 tuple,再用模式匹配接收它。

Elixir
# 在 IEx 中
parent = self()

spawn(fn ->
  send(parent, {:hello, :from_elixir})
end)

receive do
  {:hello, source} -> {:received, source}
end
Erlang
%% 在 erl 中
Parent = self(),

spawn(fun() ->
  Parent ! {hello, from_erlang}
end),

receive
  {hello, Source} -> {received, Source}
end.
LAB
可运行实验

确认版本,并让 Mix 跑起第一个项目

约 15–25 分钟

不要从安装成功的提示猜结论。先比较 Erlang、Elixir 与 Mix 报告的工具链,再让 Mix 生成项目、运行测试,并从项目上下文读取 OTP release。

  1. 01

    运行 `erl`,输入 `erlang:system_info(otp_release).`

  2. 02

    运行 `elixir --version` 与 `mix --version`,标出 Erlang/OTP、Elixir、Mix 三类版本

  3. 03

    执行 `mix new beam_probe`,观察 `mix.exs`、`lib/` 与 `test/` 分别承担什么职责

  4. 04

    进入项目运行 `mix test`,再用 `mix run -e` 从同一项目读取 OTP release

在终端 / shell 中运行
erl -noshell -eval 'io:format("OTP ~s~n", [erlang:system_info(otp_release)]), halt().'
elixir --version
mix --version

mix new beam_probe
cd beam_probe
mix test
mix run -e 'IO.puts("OTP #{:erlang.system_info(:otp_release)}")'
预期观察
  • Erlang、Elixir 与 Mix 的输出指向同一套 OTP 工具链
  • Mix 生成 `mix.exs`、源码目录和测试目录,而不是另一台 VM
  • 生成的示例测试通过,`mix run` 能直接调用 Erlang 的 `erlang` 模块
故意弄坏

退出 `beam_probe` 目录后运行 `mix test`。观察 Mix 如何通过缺少 `mix.exs` 判断“这里不是 Mix 项目”,并把它与编译错误区分开。

这个实验能证明

Mix 已随当前 Elixir 安装,可在这套 OTP 上创建、编译和测试一个最小项目。

这个实验不能证明

示例测试通过不代表所有第三方依赖兼容,也不代表该项目已经具备生产级 OTP 结构。

快速自测

下面哪一项最准确地描述 OTP?

本章挑战

环境诊断卡

写一份不超过 12 行的诊断输出,包含 Erlang/OTP、Elixir、Mix 版本与当前 Mix 项目状态,并为“命令不存在”“缺少 mix.exs”和“版本不兼容”各写一个排查动作。

提示 1轻推一下

先运行 `elixir --version`、`mix --version` 和 `mix help`。

提示 2缩小问题

区分 shell 找不到命令、Mix 找不到 `mix.exs`,以及 VM 能启动但版本不满足。

提示 3接近实现

把输出保存下来,它会成为后续提问时最有价值的上下文。

提示 4用验收标准反推

从下面每一条验收标准倒推一个最小测试。若某条无法写成测试,先把表述改成可观察结果。

完成标准
  • 能看到 OTP、Elixir、Mix 三类版本信息
  • 能说明 `mix.exs` 是项目配置入口,并区分 Mix 与 Hex
  • 三种故障分别对应不同排查路径
  • 没有把操作系统线程称作 BEAM 进程
带走这三句话

复习卡

  1. 1语言是入口,BEAM 是运行的地方,OTP 是构建可靠系统的方法。
  2. 2Elixir 调 Erlang 不是跨语言 RPC,而是同一 VM 内的普通模块调用。
  3. 3Mix 负责项目与构建任务,Hex 提供包生态;从第一天起就把它们与运行时分层诊断。
继续核对

本章一手资料

Elixir Getting StartedErlang Getting StartedIntroduction to Mix