

虚拟-John Carmack(下):购买未来的人当一台机器还不足以画出、传送或及时更新一个世界,开发者只能等待下一代硬件吗?本期《原代码》回到 1990 年那块没有被完整重画却开始移动的 PC 屏幕,沿着 Commander Keen、Doom、QuakeWorld、Rage 与 Oculus,追踪 John Carmack 和同行如何重新安排像素、空间判断、网络确认、纹理与身体反馈。 从只更新边缘的一块屏幕,到根据新姿态改写过去的一帧:所谓“虚拟”,正是在一次次及时回应中,从能被看见的图像,变成可以行动、进入并共同维持的世界。 时间轴 00:00 那块屏幕又回来了 01:53 世界移动,显存大部分不动 05:54 玩家进入以前,机器已经等过了 09:59 借来一个尚未确认的现在 12:58 一张纹理背后的工厂 20:08 花掉过去的一帧 24:50 哪些等待不能藏起来 30:41 尾声 本期资料 - [John Carmack 为 Michael Abrash《Graphics Programming Black Book》所写前言](https://github.com/jagregory/abrash-black-book/blob/master/src/about.md) - [Michael Abrash:Inside Quake: Visible-Surface Determination](https://jacobfilipp.com/DrDobbs/articles/DDJ/1996/9613/9613f/9613f.htm) - [Digital Foundry:Face-Off: Rage](https://www.eurogamer.net/digitalfoundry-rage-face-off) - [John Carmack:Latency Mitigation Strategies](https://danluu.com/latency-mitigation/) - [Michael Abrash:What VR Could, Should, and Almost Certainly Will Be within Two Years](http://media.steampowered.com/apps/abrashblog/Abrash%20Dev%20Days%202014.pdf) - [David Kushner:Masters of Disruption,John Carmack 访谈](https://davidkushner.substack.com/p/masters-of-disruption-post-2-john) - [Chip Morningstar 与 F. Randall Farmer:The Lessons of Lucasfilm's Habitat](https://web.stanford.edu/class/history34q/readings/Virtual_Worlds/LucasfilmHabitat.html) - [VRML 1.0C 规范](https://www.jch.com/jch/vrml/vrml10c.html) - [Philip Rosedale:Enabling Player-Created Online Worlds with Grid Computing and Streaming](https://www.gamedeveloper.com/game-platforms/enabling-player-created-online-worlds-with-grid-computing-and-streaming) 源码、论文与工程记录 - [Commander Keen in Keen Dreams 公开源码](https://github.com/keendreams/keen) - [Fuchs、Kedem 与 Naylor 1980 年 BSP 原论文](https://www.cs.unc.edu/~fuchs/publications/VisSurfaceGeneration80.pdf) - [id Software 公开的 Doom BSP 构建工具](https://www.gamers.org/pub/idgames/utils/level_edit/node_builders/doombsp.zip) - [Doom 公开源码](https://github.com/id-Software/DOOM) - [Quake 与 QuakeWorld 公开源码](https://github.com/id-Software/Quake) - [John Carmack .plan 文件公开归档](https://github.com/oliverbenns/john-carmack-plan) - [Quake III Arena q_math.c](https://github.com/id-Software/Quake-III-Arena/blob/master/code/game/q_math.c) - [Doom 3 renderer 与 MegaTexture 公开源码](https://github.com/id-Software/DOOM-3/tree/a9c49da5afb18201d31e3f0a429a037e56ce2b9a/neo/renderer) 访谈与历史原声来源 - [Lex Fridman Podcast #309:John Carmack](https://lexfridman.com/john-carmack/) - [QuakeCon 2011 John Carmack Keynote](https://www.youtube.com/watch?v=4zgYG-_ha28) - [Eurogamer:John Carmack and the Virtual Reality Dream](https://www.eurogamer.net/john-carmack-and-the-virtual-reality-dream) - [GDC 2004:Issues and Rewards of Bleeding Edge Engine Development](https://www.youtube.com/watch?v=YUF-07ab9wU) 说明与延伸阅读 - “购买未来”是本期用来描述工程成本交换的叙事隐喻,不是 Carmack 为这些技术建立的统一术语;“被看见、被使用、被进入、被共同维持”同样是节目用于解释“虚拟”的分析框架。 - PC 滚屏不是从真空里出现的。Carmack 明确回忆自己通过 Romero 注意到 Abrash 的 EGA 文章,在理解已有显示控制器知识后发展自己的方法;Hall、Romero、美术与后续工具工作又把它变成了可以发行的游戏。 - BSP 在 Doom 之前已有长期的学术与工业实践。Doom 的离线 BSP 构建、运行时遍历与 Quake 的 PVS 是不同产品中的不同机制,不能合并成一项由 Carmack 发明的算法。 - QuakeWorld 的客户端预测没有消灭网络延迟,权威服务器状态仍会回来;Rage 的 virtual texturing 也没有消灭存储、内容生产和兼容成本,纹理迟到的程度会随平台、安装方式、驱动和负载变化。 - 0x5f3759df 出现在 Quake III 公开代码中,但 Carmack 后来明确否认作者身份。现有材料指向更早的工业与数值方法谱系,仍不足以把精确常数无条件归给某一个人。 - Timewarp 可以用更新姿态修正旧帧,却不能创造遮挡后原本不存在的像素,也不能让持续低帧率无损变成高帧率。VR presence 与长期运行的共享世界都依赖团队、产品和用户关系;Habitat、VRML 与 Second Life 在本期只是比较坐标,不是 Carmack 的直接影响来源。
虚拟-John Carmack(上):图形世界的王John Carmack 为什么会在离开 id Software 时,被公司形容为“任务已经完成”?本期《原代码》从这句冷静得像一张已关闭工单的告别出发,回到一九九零年那个让 PC 屏幕滚动起来的夜晚,追踪 Commander Keen、Doom、Quake、Rage 与 Oculus 如何一次次改变他和身边人的位置。 从一块移动的屏幕,到一台不再随个人判断移动的机器:所谓“图形世界的王”,不是一个人完成所有作品,而是技术判断、同伴、工具与组织尺度共同制造的位置。 时间轴 00:00 任务已经完成 02:15 屏幕滚动的夜晚 08:07 在那一夜以前 12:17 一间办公室怎样成为王国 18:14 时间开始向成功索债 22:34 另一台没有完成的机器 27:16 百分之五的机器 34:17 尾声 本期资料 - [John Carmack 加入 Oculus 出任 CTO](https://www.meta.com/blog/john-carmack-joins-oculus-as-cto/) - [John Carmack 正式离开 id Software](https://www.gamedeveloper.com/programming/john-carmack-officially-leaves-id-software) - [Apogee 保存的 1990 年 Commander Keen 提案信](https://www.apogeeent.com/devblog/when-you-have-an-amazing-history-share-it) - [3D Realms:A Look Back at Commander Keen](https://legacy.3drealms.com/keenhistory/) - [John Carmack Answers,Slashdot 1999](https://games.slashdot.org/story/99/10/15/1012230/john-carmack-answers) - [Game Developer:Monsters From the Id,Doom 制作期报道](https://www.gamedeveloper.com/game-platforms/the-game-developer-archives-monsters-from-the-id-the-making-of-i-doom-i-) - [Wired:The Egos at Id,Quake 制作期报道](https://www.wired.com/1996/08/id/) - [John Carmack 2022 年 Meta 离职全文](https://daringfireball.net/misc/2022/12/carmack-facebook.text) - [Dallas Innovates 2023 年 John Carmack 专访](https://dallasinnovates.com/exclusive-qa-john-carmacks-different-path-to-artificial-general-intelligence/) 源码、论文与工程记录 - [John Carmack 为 Michael Abrash《Graphics Programming Black Book》所写前言](https://github.com/jagregory/abrash-black-book/blob/master/src/about.md) - [Commander Keen in Keen Dreams 公开源码](https://github.com/keendreams/keen) - [Doom 公开源码](https://github.com/id-Software/DOOM) - [Quake 公开源码](https://github.com/id-Software/Quake) - [Fuchs、Kedem 与 Naylor 1980 年 BSP 原论文](https://www.cs.unc.edu/~fuchs/publications/VisSurfaceGeneration80.pdf) - [John Carmack .plan 文件公开归档](https://github.com/oliverbenns/john-carmack-plan) ## 访谈与本人回顾 - [Electric Play 1997 年 John Carmack 访谈重刊](https://www.quakewiki.net/profile-retro-interview-john-carmack/) - [QuakeCon 2011 John Carmack Keynote](https://www.youtube.com/watch?v=4zgYG-_ha28) - [Joe Rogan Experience #1342:John Carmack](https://www.youtube.com/watch?v=udlMSe5-zP8) - [Lex Fridman Podcast #309:John Carmack](https://lexfridman.com/john-carmack/) - [The Examined Game:The Dial Up Entrepreneur,Scott Miller](https://www.theexaminedgame.com/the-dial-up-entrepreneur-scott-miller-apogee-entertainment-duke-nukem-3d-wolfenstein-3d/) - [UploadVR:John Carmack 与 Andrew Bosworth Twitter Spaces 录音及说话人稿](https://www.uploadvr.com/carmack-bosworth-recording-twitter/) - [David Kushner:Masters of Disruption,John Carmack 系列访谈](https://davidkushner.substack.com/p/masters-of-disruption-post-2-john) 说明与延伸阅读 - “图形世界的王”描述的是 Carmack 在实时图形、工具和产品决策中的位置,不是把 Commander Keen、Doom、Quake、Rage 或 Oculus 写成他的单人作品。Tom Hall、John Romero、Adrian Carmack、Kevin Cloud、Michael Abrash 以及更多程序、美术、关卡、发行和 Oculus 工程团队成员都改变了最终结果。 - PC 滚屏不是从真空里出现的。Carmack 明确回忆自己通过 Romero 注意到 Michael Abrash 关于 EGA 的文章,在理解已有显示控制器技术后发展出自己的实现;公开知识、个人方法与最终产品需要分开归属。 - BSP 在 Doom 以前已有长期的学术和工业实践。本期讨论 Carmack 如何把已有问题家族约束到具体硬件与游戏产品,不把 BSP 数据结构本身归为他的发明。 - Carmack 关于 Rage 应该降低部分技术雄心、提前大约两年发布的说法,是他在 2019 年回看项目时的后见判断,不是 Rage 制作期已经存在的计划,也不能单独解释项目的全部结果。 - 现有公开材料只支持 Carmack 在加入 Oculus 后把注意力转向 VR,以及同时兼顾多项工作很困难;它们不能证明他在 2013 年离开 id 是一场未公开的人际决裂。 - “百分之五的 GPU 利用率”是 Carmack 在 Meta 离职信中用来描述组织低效的工程比喻,不是组织审计或客观测量。Quest 也依赖制造、供应链、追踪、显示、内容、安全与运营等大型团队系统。
跨过山丘-V8、Dart 与 FlutterDart 为什么没有进入 Chrome,却成为了 Flutter 的核心语言?本期《原代码》从 Lars Bak 的“我没有时间”出发,追踪 V8、Dart、TypeScript、Sky 与 Flutter 如何围绕开发者等待、浏览器治理和真实产品工作负载,走出几条不同的路。 从 Chrome 里空下的位置,到手机屏幕上的一次 Hot Reload:Dart 如何跨过 Web 没有跨过去的那座山。 时间轴 00:00 我没有时间 02:38 把等待藏在语言下面 08:14 两只钟 13:23 原声:更稳妥的赌注 15:39 空位与开关 21:25 Flutter 把时间写进 Dart 28:46 一秒以内 本期资料 - Dart 2011 年发布:https://developers.googleblog.com/en/dart-a-language-for-structured-web-programming/ - Dartium 技术预览:https://blog.chromium.org/2012/02/tech-preview-of-chromium-with-dart.html - Dart for the Entire Web:https://news.dartlang.org/2015/03/dart-for-entire-web.html - V8 十周年官方回顾:https://v8.dev/blog/10-years - TypeScript 2012 年发布:https://learn.microsoft.com/en-us/archive/blogs/somasegar/typescript-javascript-development-at-application-scale - Dart 团队欢迎 TypeScript:https://news.dartlang.org/2012/10/the-dart-team-welcomes-typescript.html - ECMA-408 官方页面:https://ecma-international.org/publications-and-standards/standards/ecma-408/ - Dart 2 stable:https://dart.dev/blog/announcing-dart-2-stable-and-the-dart-web-platform - Dart 2.3 UI-as-code:https://dart.dev/blog/announcing-dart-2-3-optimized-for-building-user-interfaces - Dart VM 十年回顾:https://mrale.ph/talks/vmil2020/ - Flutter 1.0 发布:https://developers.googleblog.com/en/flutter-10-googles-portable-ui-toolkit/ 源码与工程记录 - Flutter 2014 Open the Sky 初始 commit:https://github.com/flutter/flutter/commit/00882d626a478a3ce391b736234a768b762c853a - Sky-Dart 构建开关 commit:https://github.com/eseidel/skydart/commit/8c05f989d2cfa2171504305d4a30582db121df90 - 首个功能性 Sky-Dart commit:https://github.com/eseidel/skydart/commit/0fc92de0468213f621cba0fbdfd96c1625052ba7 - Sky 正式切换 Dart 的 Mojo revision:https://chromium.googlesource.com/external/mojo.git/+/a6a07e06560b24546177088301a0c42ad25b209f - Flutter iOS 预编译 snapshot commit:https://github.com/flutter-team-archive/engine/commit/d6ff8e90b07c1729d968e4f1ba8ee6d1e0607281 - Flutter 仓库:https://github.com/flutter/flutter - Dart SDK 仓库:https://github.com/dart-lang/sdk 访谈与历史原声来源 - GOTO Aarhus 2012,Anders Hejlsberg and Lars Bak:https://www.youtube.com/watch?v=5AqbCQuK0gM - Dart Developer Summit 2015,Sky: An Experiment Writing Dart for Mobile:https://www.youtube.com/watch?v=PnIWl33YMwA - GOTO Chicago 2016,Want to be a Better Programmer?:https://www.youtube.com/watch?v=P8ltWIqDPzo 说明与延伸阅读 - Dart 和 Go 最初面向不同的问题域,不能写成直接的内部竞品。 - TypeScript 的兼容路线与 Dart 有部分重叠,但没有证据证明它直接导致 Chrome 终止 Dart VM 计划。 - Sky 的 Dart 迁移早于 2015 年 3 月的 Chrome 路线转向;Flutter 不是随后临时创造的“救援项目”。 - ECMA-408 的规范发布不等于多浏览器原生 Dart VM 的采用。 - Flutter 深刻影响了 Dart 的运行时与产品语境,但 Dart 2 的类型和语言演进还受到 Web 编译器、Google 内部大型应用与工具链等多重压力影响。
等待机器-BunBun 为什么会出现?本期节目从“保存文件以后等浏览器更新”的几秒钟讲起,追踪 Bun 如何从 Jarred Sumner 的开发等待中诞生,如何把 JavaScript 工具链压进一个 all-in-one 二进制,又如何在 Anthropic、Claude Code 和 Rust rewrite 的语境里,被重新定义为 AI coding agents 时代的基础设施。 这不是一集 Bun 教程,也不是一场性能榜单复述。它是一集关于等待、注意力、工具链、开源维护和软件世界如何不断重造轮子的故事。 时间轴 01:30 等待的史前史 06:08 一个游戏被等待吞掉 08:54 一只大轮子 14:59 掌声变成 issue 19:21 为什么不能让 Node 更快一点 20:38 从人类开发者到 AI agents 24:23 轮子被重铸 30:51 等待没有消失 本期资料 本期主要资料包括 Bun 官方博客、Bun GitHub 仓库与 PR、Jarred Sumner 的公开访谈、Anthropic 收购新闻稿、Claude Code 安装文档,以及 Hacker News、Lobsters、Ziggit 等社区讨论。 核心资料 - Bun 官网:https://bun.sh - Bun 1.0 官方博客:https://bun.sh/blog/bun-v1.0 - Bun joins Anthropic:https://bun.sh/blog/bun-joins-anthropic - Anthropic acquires Bun:https://www.anthropic.com/news/anthropic-acquires-bun-as-claude-code-reaches-usd1b-milestone - Bun GitHub 仓库:https://github.com/oven-sh/bun - PR #30412 Rewrite Bun in Rust:https://github.com/oven-sh/bun/pull/30412 - Bun single-file executable docs:https://bun.com/docs/bundler/executables - Claude Code setup docs:https://code.claude.com/docs/en/setup 访谈与原始音频来源 - PodRocket: Bun with Jarred Sumner:https://podrocket.logrocket.com/bun - Syntax #544: Supper Club x Bun with Jared Sumner:https://syntax.fm/show/544/supper-club-bun-with-jared-sumner - DevTools FM Episode #37: Jarred Sumner - Bun:https://www.devtools.fm/episode/37 - InfoWorld Jarred Sumner interview:https://www.infoworld.com/article/2338698/interview-with-jarred-sumner-buns-creator-talks-tech-funding-and-startups.html 社区讨论与背景资料 - HN launch thread:https://news.ycombinator.com/item?id=31993429 - HN Bun 1.0 thread:https://news.ycombinator.com/item?id=37434117 - HN Rust rewrite merged thread:https://news.ycombinator.com/item?id=48132488 - OSSInsight Bun stargazers history:https://api.ossinsight.io/v1/repos/oven-sh/bun/stargazers/history/ - Star History Bun chart:https://www.star-history.com/#oven-sh/bun - DevClass Oven announcement:https://www.devclass.com/development/2022/08/24/bun-announces-oven-promises-first-bake-in-six-months/1620543 - DevClass Anthropic acquisition:https://www.devclass.com/development/2025/12/03/bun-javascript-runtime-acquired-by-anthropic-tying-its-future-to-ai-coding/ - DevClass Rust rewrite:https://www.devclass.com/ai-ml/2026/05/15/anthropics-bun-rust-rewrite-merged-at-speed-of-ai/5240541 - RedMonk Bun analysis:https://redmonk.com/sogrady/2026/06/04/bun-two-lessons/