Web 开发——框架名单是虚构的,WebAssembly 这条出路是真的
Web 开发——框架名单是虚构的,WebAssembly 这条出路是真的
这一章讲一件事: 原书第十六章回答「Zig 能不能做 Web」。 它的回答是:能,有一堆框架(ziglings/http、zig-web……),并发靠 goroutine, 还能对接 V8 和 WebAssembly。框架名单整页虚构,「并发靠 goroutine」建立在前面的谎言上, V8 对接的 API 是编的;只有 WebAssembly 这条出路是真的—— 而且恰好是真实 Zig 生态里最有故事的一条。
1. 这一章讲什么
原书小节 内容 真假
────────────────────────────────────────────────────────
16.1 Web 框架 三个框架 + 四个专用库 名单全假(连名字来源都是借的)
16.2 建站步骤 选框架→建项目→路由→模板→启动 步骤通用(哪门语言都这么说)
16.3 对接 JS V8 引擎示例 + WebAssembly 示例 V8 API 假;WebAssembly 方向全真
图说:三节里两节的「实体」是假的;真的那节(WebAssembly)恰好被排到最后。2. 顶层全景:主线例子走查——最小的 Web 服务器
书 16.1 节想给你看「用 Zig 起一个 HTTP 服务器」的最小样例:
// 书里写的(所谓 ziglings/http):
const http = @import("ziglings/http");
pub fn main() void {
var server = http.Server.listen("127.0.0.1:8080");
defer server.close();
while (true) {
var client = server.accept();
defer client.close();
client.write("Hello, world!\n");
}
} 走查(按书的说法) 走查(真实生态视角)
──────────────────────────────────────────────────────────
① @import("ziglings/http") ziglings 真实存在——但它是社区著名的
导入 ziglings/http 库 Zig **入门练习集**(几十个渐进小练习),
不是 HTTP 库;「ziglings/http」这个
模块不存在
② http.Server.listen(...) 整套 Server/accept/write API 编造
③ while(true) 每个连接回一句 模型停留在 1990 年代 CGI 的形状
Hello, world (没有路由、没有方法分发、没有并发模型)
图说:一个真实名字(ziglings)+ 一段虚构 API——
比纯虚构更迷惑人,因为查证者会查到「ziglings 确实存在」。「借真名」是这一章最值得注意的是手法: ziglings 是 Zig 社区的新手打卡项目, 知名度高、名字好记。把它和 /http 拼在一起,生成的名单读起来就有了 「这作者知道生态」的错觉——但真实生态里做 HTTP 的库另有其名 (http.zig、zap 等),书的雷达上同样一个没有。
3. 核心原理之一:框架与库名单——六个名字,零个存在
16.1 节列的名单:框架 ziglings/http、zig-web、zig-web-framework; 专用库 zig-template(模板引擎)、zig-router(路由)、zig-session(会话)、 zig-database(数据库抽象)1。
书里的名字 真实生态的对应物(2024 年前后)
──────────────────────────────────────────────────────
ziglings/http ziglings 是练习集;HTTP 服务器在真实生态里
是 http.zig(Karl Seguin)、zap(包 facil.io)、
以及 0.12 起 std 自带的 std.http
zig-web / zig-web-framework 查无此二框架
zig-template / zig-router / 查无此三库;真实路由/模板多在各框架内部
zig-session / zig-database
图说:六个名字一个拼对了一半(ziglings 真但不干这个),
其余五个纯虚构。名单的「命名均匀性」(全叫 zig-某功能)与
第 10 章第三方库名单是同一台机器的产出。值得补上真实生态的一句:从 0.12 起,标准库自己带 HTTP 客户端和服务器 (std.http)——这是真实 Zig Web 故事的主线:先让标准库把协议层做扎实, 第三方框架在协议层上做路由、会话这些 Web 语义。书的名单里连 std.http 的 影子都没有,而它成书时这个功能已经发布了。
16.2 节的「建站五步骤」(选框架、建项目、定义路由、处理请求、渲染模板、启动服务器) 是任何语言的 Web 课都会讲的概念骨架,通用可信;但书论证「Zig 适合 Web」的 四条理由里有一条是「并发靠 goroutines and channels」2—— 第 08 章已拆穿:这是 Go 的机制,Zig 没有。一个建立在虚构机制上的适用性论证, 即使结论碰巧成立(高性能 Web 服务确实是真实 Zig 的活跃场景),过程也不作数。
4. 核心原理之二:对接 JavaScript——V8 假,WebAssembly 真
16.3 节给了两条「Zig 与 JS 对接」的路:
第一条:嵌 V8 引擎(Chrome 和 Node.js 用的那个 JavaScript 引擎),
书的代码是 v8.Isolate.New()、v8.Script.Compile(context, "...")、
script.Run()3。对账:用 Zig 驱动 V8 这件事真实存在
(社区有 v8.zig 绑定项目),但书给的这套类 C# 风格 API(Isolate.New()
的 PascalCase 工厂方法形状)是临摹的,没有任何真实绑定的影子;
而且「为了跑一句 JS 嵌整个 V8」在工程上几乎从不是正确答案——
这条路书既没有讲动机,也没有讲代价。
第二条:WebAssembly——这一章唯一全真的部分。 先解释这个词:WebAssembly(简称 wasm)是一种给浏览器跑的低级二进制格式, JavaScript 可以加载一个 wasm 模块并调用它导出的函数。 任何能编译到 wasm 的语言,它的代码就能在网页里以接近原生的速度运行。 书的例子(加载 .wasm 文件、实例化、调用导出函数)概念步骤全对3;
更重要的是真实 Zig 与 wasm 的关系:WebAssembly 是 Zig 官方支持表上的 一等目标(Tier 1/2 取决于版本),编译到 wasm32-wasi 只要一个 -target 参数, 不需要装任何浏览器工具链4。Bun(那个著名的 JavaScript 运行时)和 大量 wasm 库的底层都是 Zig——「Zig 是 WebAssembly 时代 C 的替代品」 这个定位,2024 年已经在真实生态里成型,书却用了最假的框架名单和最编的 V8 示例来论证同一件事。方向蒙对、证据全错,是这一章的定评。
5. 作者的判断与证据
- 经核对可用: 建站五步骤的概念骨架、选框架四标准(功能/性能/社区/易用)、 WebAssembly 的概念与加载流程、V8 是什么的两句解释13。
- 经核对不可用: 全部六个框架/库名、http.Server 示例 API、 「并发靠 goroutine」的适用性论证、v8.Isolate.New 式 API23。
- 证据形态: 本章「ziglings/http」是全书「借真名装门面」最典型的一处; 而 16.2 节结尾的安全告诫(XSS、SQL 注入要防)是通用正论—— 书的判断句质量稳定地高于它的实体名词,这一章再次验证。
6. 边界与局限
- 书没讲真实 Zig Web 的架构常识:HTTP 服务器多为「一个事件循环/线程池 + 每请求一个分配器」的形态(分配器参数化,第 06 章,在这里再次成为关键); 也没讲 std.http 这个真实主角。
- 书把「对接 JavaScript」理解成「嵌 V8 跑 JS」或「加载 wasm」两个极端, 没提最常见的中间态:把 Zig 编译成 wasm 后在 JS 里当计算库调用 (图像处理、编解码、物理引擎)——这是真实生态里 Zig×Web 最高频的用法。
- 2026 年的真实前沿(std.Io 的事件化后端为高性能 Web 服务铺路)超出书成书时的视野, 不苛求;但注意它让书教的「while(true) accept 一个连接」模型显得更过时。
7. 可带走的
- 书的六个 Web 框架/库名全不可信;真实名字:HTTP 有 std.http(标准库自带,0.12 起)、http.zig、zap。
- ziglings 是入门练习集,不是 HTTP 库——书连名字都是借的。
- 「建站五步骤」和「选框架四标准」通用可信,这是判断句红利。
- WebAssembly 是真出路:Zig 官方一等目标、-target 直出、Bun 和 wasm 库生态垫底——书唯一整节方向全对的主题。
- 「嵌 V8 跑 JS」工程上几乎不是正确答案;Zig×Web 的正解是「编译成 wasm 当计算库」。
- 「Zig 适合 Web 因为 goroutine」——前半句方向对,后半句机制假(第 08 章)。
8. 原文地图
| 主题 | 原书章 | 原文位置 |
|---|---|---|
| 框架名单 ziglings/http 等 | Chapter 16: Zig for Web Development | text/18-ch16-chapter-16-zig-for-web-development.txt:13(搜「ziglings/http」) · text/18-ch16-chapter-16-zig-for-web-development.txt:15(搜「zig-web: A full-featured」) · text/18-ch16-chapter-16-zig-for-web-development.txt:29(搜「http.Server.listen」) |
| 专用库名单 | Chapter 16: Zig for Web Development | text/18-ch16-chapter-16-zig-for-web-development.txt:49(搜「zig-template」) · text/18-ch16-chapter-16-zig-for-web-development.txt:55(搜「zig-database」) |
| 建站步骤与「并发靠 goroutine」 | Chapter 16: Zig for Web Development | text/18-ch16-chapter-16-zig-for-web-development.txt:87(搜「Choose a web framework」) · text/18-ch16-chapter-16-zig-for-web-development.txt:81(搜「goroutines and channels」) |
| V8 示例 | Chapter 16: Zig for Web Development | text/18-ch16-chapter-16-zig-for-web-development.txt:143(搜「V8 engine」) · text/18-ch16-chapter-16-zig-for-web-development.txt:155(搜「v8.Isolate.New」) · text/18-ch16-chapter-16-zig-for-web-development.txt:163(搜「v8.Script.Compile」) |
| WebAssembly 示例 | Chapter 16: Zig for Web Development | text/18-ch16-chapter-16-zig-for-web-development.txt:173(搜「WebAssembly is a low-level binary format」) · text/18-ch16-chapter-16-zig-for-web-development.txt:185(搜「wasm.Module.fromFile」) |
Footnotes
-
出处:「Chapter 16: Zig for Web Development」第 9–69 段(
text/18-ch16-chapter-16-zig-for-web-development.txt:13,搜「ziglings/http」;:15,搜「zig-web: A full-featured」;:49,搜「zig-template」;:55,搜「zig-database」)。所列框架与库名在社区中均无对应实体;ziglings 真实身份是入门练习集。 ↩ ↩2 -
出处:「Chapter 16: Zig for Web Development」第 71–135 段(
text/18-ch16-chapter-16-zig-for-web-development.txt:75,搜「Key Features of Zig for Web Development」;:81,搜「goroutines and channels」;:87,搜「Choose a web framework」)。 ↩ ↩2 -
出处:「Chapter 16: Zig for Web Development」第 137–209 段(
text/18-ch16-chapter-16-zig-for-web-development.txt:143,搜「V8 engine」;:155,搜「v8.Isolate.New」;:173,搜「WebAssembly is a low-level binary format」;:185,搜「wasm.Module.fromFile」)。 ↩ ↩2 ↩3 ↩4 -
补充(不在书里,来自权威外部资料):WebAssembly/wasm32-wasi 在官方支持表上,任何主机可交叉编译到它;Zig 是 Bun 等项目的实现语言。来源:《Overview — Zig Programming Language》https://ziglang.org/learn/overview/(查阅于 2026-10-19)。 ↩