编程语言研究书库

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. 可带走的

  1. 书的六个 Web 框架/库名全不可信;真实名字:HTTP 有 std.http(标准库自带,0.12 起)、http.zig、zap。
  2. ziglings 是入门练习集,不是 HTTP 库——书连名字都是借的。
  3. 「建站五步骤」和「选框架四标准」通用可信,这是判断句红利。
  4. WebAssembly 是真出路:Zig 官方一等目标、-target 直出、Bun 和 wasm 库生态垫底——书唯一整节方向全对的主题。
  5. 「嵌 V8 跑 JS」工程上几乎不是正确答案;Zig×Web 的正解是「编译成 wasm 当计算库」。
  6. 「Zig 适合 Web 因为 goroutine」——前半句方向对,后半句机制假(第 08 章)。

8. 原文地图

主题原书章原文位置
框架名单 ziglings/http 等Chapter 16: Zig for Web Developmenttext/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 Developmenttext/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 Developmenttext/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 Developmenttext/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 Developmenttext/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

  1. 出处:「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

  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

  3. 出处:「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

  4. 补充(不在书里,来自权威外部资料):WebAssembly/wasm32-wasi 在官方支持表上,任何主机可交叉编译到它;Zig 是 Bun 等项目的实现语言。来源:《Overview — Zig Programming Language》https://ziglang.org/learn/overview/(查阅于 2026-10-19)。 ↩

On this page