Learning
VOL. XIII · NO. 28 · Elixir · 26 JUL 2026

Readme

Elixir 编程 · 26 JUL 2026 · 5 min read · 1,001 words
· · ·

Elixir 速成 + 扩展地图

从”会 Haskell/Closure/C/Java/Kotlin 的 CS 背景”到”能读懂 + 改 ex/elixir 项目”。

学习目标

  • 速通语法(Lesson 0001-0002):3 课内掌握 Elixir 语法 + OTP 并发模型,立刻能读 ex/elixir 下的 Oban Worker / Plug / Ecto Schema。
  • 核心机制(Lesson 0003):宏、协议、行为、behaviour、热代码升级——Elixir 区别于其他 FP 语言的”独门武器”。
  • 横向对比(Lesson 0004):跟 Go/Clojure/C/Java/Kotlin 一表速查。
  • 综合练习(Lesson 0005):8 道读代码 + 2 道改代码题,模拟真实 ex/elixir 场景。
  • 扩展地图extensions.md):45+ 个 Elixir 进阶点,按”为什么学 / 学到什么程度 / 影响哪些项目代码”分门别类。不是速通,是给你画一张探索雷达

阅读建议

阶段内容预计难度
0看本文档 (README)5 min
1Lesson 0001-0003(速通)2-3 小时
2Lesson 0004-0005(对比+练习)1 小时
3extensions.md 按需深入持续

课程目录

主题关键概念
0001语法全景字面量 / 模式匹配 / 函数 / 管道 / 列表 / 控制流 / 模块
0002并发与容错Process / GenServer / Supervisor / Application / Oban
0003Elixir 独门协议 / 行为 / 宏 / 编译元编程 / 热代码
0004横向对比Elixir vs Go / Clojure / C / Java / Kotlin 一表速查
0005综合练习8 道读代码 + 2 道改代码题
0006Mix 速通mix.exs / mix release / config / 跟 Lein/Maven 一一对应
0007Cloudflare 速通Tunnel / Turnstile / Workers AI / R2 / Image Resizing / Email Workers
0008Vultr 速通API 起 VM / Snapshot / cloud-init / 按小时计费 / Firewall
0009SEO 速通Meta / JSON-LD / sitemap / IndexNow / Core Web Vitals / Topic Cluster
0010Auth 速通Clerk / Turnstile / 反爬虫 / 不用微信 300/年
0011Oban 任务队列Job / Worker / 重试 / 幂等 / 队列隔离
0012Ecto Schema 深入prefix / 复合主键 / Changeset / 安全写入
0013Ecto Query vs SQLCTE / FILTER / LEFT JOIN / raw SQL
0014Plug / Phoenix Web 请求链Router / Parsers / CORS / JSON API
0015OTP 监督树Application / Supervisor / 条件 child / 优雅退出
0016Finch HTTP 客户端Pool / timeout / 业务错误 / SSE
0017Behaviour / Protocol / Macro多态 / 协议 / 编译期 DSL / 设计边界
0018GenServer / ETS / 热重载进程状态 / 内存表 / Code.purge
0019Redix 与背压bounded queue / LPUSH / 失败队列 / 监控
0020Oban 完整生命周期Cron / retry / discarded / 失败通知
0021测试金字塔ExUnit / DataCase / Sandbox / Mox / 集成测试
0022IEx 与 REPL 实战h / i / v / 进程观察 / 查询调试 / 安全探索

扩展文档

文档主题何时看
extensions.md45+ 进阶点(🟢/🟡/🔴 三档)学完 0001-0010 后按兴趣挑
extensions-serverless-architecture.mdElixir + Cloudflare + Vultr 按需起 VM 架构想”省钱 + 弹性”部署时
concepts-vultr-glossary.mdVultr 专有名词速查读架构文档时配套查
extensions-cf-ai-rag.mdCloudflare Workers AI + Vectorize 零后端 RAG想做”语义搜索”时

代码示例来源

本教程几乎所有 Elixir 代码例子都来自 ex/elixir/ 下的实际项目:

  • lib/pipeline/dag.ex — 静态 DAG 拓扑 + 实时数据流
  • lib/pipeline/application.ex — OTP 监督树根
  • lib/pipeline/llm.ex + llm/real.ex + llm/dummy.ex — behaviour + 运行时多态
  • lib/pipeline/execution.ex — 审计 + 动态查询
  • lib/pipeline/jobs/news_digest.ex — Oban Worker 完整流程
  • lib/pipeline/web.ex — Plug.Router 路由
  • lib/pipeline/feishu_message.ex — Ecto Schema 极简示例
  • mix.exs — 项目配置(Mix 速通课用)

风格约定

  • 中英对照:术语首次出现给英文括注(如 进程 (Process)),之后中文即可。
  • 代码优先:每个抽象概念给一个 ≤15 行的代码例子,全部来自 ex/elixir 真实文件。
  • 记 vs 理解:纯语法细节给 Anki 卡片(见 anki.md),机制/对比给解释段落。
  • 测验驱动:每节课末尾有 5-8 道选择题 + 2-3 道读代码题,先做题再回看

你的前置知识映射

你已知的Elixir 中的对应备注
函数式编程 / 不可变数据全部天然支持Elixir 默认全 immutable
持久化数据结构 (HAMT/Persistent Vector):persistent_term / ETS / [head | tail] List但 Elixir 不是 Clojure——Erlang VM 偏热代码 + 进程消息,而非不可变优先
进程 / Actor 模型Process + 消息传递 (类似 Akka Erlang)Elixir 的 Process 是 BEAM 调度器管理的极轻量级协程
递归 / 尾递归def foo(n), do: foo(n-1) 同样工作跟 Haskell/OCaml 风格一致
代数数据类型 / Sum Type没有原生 sum type,map + pattern match 模拟Elixir 用 {:ok, x} {:error, e} 这种 tagged tuple 代替
TypeScript/Java 的 classdefmodule + defstruct + %{}没有 class 概念
Go 的 goroutineProcess (BEAM 协程)1 进程 ≈ 几百字节,百万级并发
Java/Kotlin 的 interface@callback + @behaviour但 dispatch 走协议 (Protocol) 而不是 vtable

开始

打开 lessons/0001-elixir-syntax.html 开始第一课。