Readme
· · ·
题目进度 0 / 0 ✓ 0
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 | — |
| 1 | Lesson 0001-0003(速通) | 2-3 小时 | 中 |
| 2 | Lesson 0004-0005(对比+练习) | 1 小时 | 中 |
| 3 | 按 extensions.md 按需深入 | 持续 | 高 |
课程目录
| 课 | 主题 | 关键概念 |
|---|---|---|
| 0001 | 语法全景 | 字面量 / 模式匹配 / 函数 / 管道 / 列表 / 控制流 / 模块 |
| 0002 | 并发与容错 | Process / GenServer / Supervisor / Application / Oban |
| 0003 | Elixir 独门 | 协议 / 行为 / 宏 / 编译元编程 / 热代码 |
| 0004 | 横向对比 | Elixir vs Go / Clojure / C / Java / Kotlin 一表速查 |
| 0005 | 综合练习 | 8 道读代码 + 2 道改代码题 |
| 0006 | Mix 速通 | mix.exs / mix release / config / 跟 Lein/Maven 一一对应 |
| 0007 | Cloudflare 速通 | Tunnel / Turnstile / Workers AI / R2 / Image Resizing / Email Workers |
| 0008 | Vultr 速通 | API 起 VM / Snapshot / cloud-init / 按小时计费 / Firewall |
| 0009 | SEO 速通 | Meta / JSON-LD / sitemap / IndexNow / Core Web Vitals / Topic Cluster |
| 0010 | Auth 速通 | Clerk / Turnstile / 反爬虫 / 不用微信 300/年 |
| 0011 | Oban 任务队列 | Job / Worker / 重试 / 幂等 / 队列隔离 |
| 0012 | Ecto Schema 深入 | prefix / 复合主键 / Changeset / 安全写入 |
| 0013 | Ecto Query vs SQL | CTE / FILTER / LEFT JOIN / raw SQL |
| 0014 | Plug / Phoenix Web 请求链 | Router / Parsers / CORS / JSON API |
| 0015 | OTP 监督树 | Application / Supervisor / 条件 child / 优雅退出 |
| 0016 | Finch HTTP 客户端 | Pool / timeout / 业务错误 / SSE |
| 0017 | Behaviour / Protocol / Macro | 多态 / 协议 / 编译期 DSL / 设计边界 |
| 0018 | GenServer / ETS / 热重载 | 进程状态 / 内存表 / Code.purge |
| 0019 | Redix 与背压 | bounded queue / LPUSH / 失败队列 / 监控 |
| 0020 | Oban 完整生命周期 | Cron / retry / discarded / 失败通知 |
| 0021 | 测试金字塔 | ExUnit / DataCase / Sandbox / Mox / 集成测试 |
| 0022 | IEx 与 REPL 实战 | h / i / v / 进程观察 / 查询调试 / 安全探索 |
扩展文档
| 文档 | 主题 | 何时看 |
|---|---|---|
extensions.md | 45+ 进阶点(🟢/🟡/🔴 三档) | 学完 0001-0010 后按兴趣挑 |
extensions-serverless-architecture.md | Elixir + Cloudflare + Vultr 按需起 VM 架构 | 想”省钱 + 弹性”部署时 |
concepts-vultr-glossary.md | Vultr 专有名词速查 | 读架构文档时配套查 |
extensions-cf-ai-rag.md | Cloudflare 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 的 class | defmodule + defstruct + %{} | 没有 class 概念 |
| Go 的 goroutine | Process (BEAM 协程) | 1 进程 ≈ 几百字节,百万级并发 |
| Java/Kotlin 的 interface | @callback + @behaviour | 但 dispatch 走协议 (Protocol) 而不是 vtable |
开始
打开 lessons/0001-elixir-syntax.html 开始第一课。