Project Corsa:TypeScript 7 的未被讲述的故事(Git 法医惊悚)
Source: Dev.to
演员阵容
- Jake Bailey (The Anchor) – 基础设施负责人 & “The Fixer”
- Anders Hejlsberg (The Architect) – 创造者 & “The Wizard”
- Gabriela Araujo Britto (The Verifier) – 测试负责人 & “The QA Spec Ops”
- Nathan Shively‑Sanders (The Specialist) – 解析器守护 & “The Academic”
- Sheetal Nandi (The Scaler) – 企业 LSP & “The City Planner”
- Mateusz Burzyński (The Sync) – 功能搬运工 & “The Bridge Runner”
- Ron Buckton (The Transformer) – 发射器 & “The Industrialist”
- Daniel Rosenwasser (The Bridge) – 项目经理 & “The Evangelist”
基于真实故事(以及 git 日志)。用于模拟这些开发者的完整“Persona Prompts”可在 GitHub 仓库中获取。
序章:静态噪声
年份是 2024 年。TypeScript 主宰着网络,但它的引擎——“Strada”代码库(旧版 JS)——在自身成功的重量下已经开始嘎吱作响。构建缓慢,内存占用高,社区也变得焦躁不安。在微软内部,一个秘密项目获得了批准:Project Corsa。
任务: 用 Go 重写整个编译器,使其速度提升 10 倍,并且不破坏任何功能。
第一幕:下落
场景 1 – “上帝对象”
日期: 2024年10月19日,上午09:21
地点: 代码仓库
Commit: 6e692937a
Message: Initial port of compiler
Stats: +25,474 insertions
Anders Hejlsberg 提交了一个单一且巨大的提交,将核心——类型检查器、绑定器、解析器——迁移到全新的 Go 代码库中。“Genesis” 区块被挖出。
场景 2 – “哎呀”
日期: 2024年10月16日
角色: Jake Bailey(锚点)
Commit: 06103e3fc
Message: Add forgotten isFile change
在设置 CI、代码检查工具和构建脚本时,Jake 漏掉了一个文件。这是一次在整体史诗般重写中出现的小小人为失误。
第二幕:恐慌
场景 3 – 糟糕的合并
日期: 2024年11月21日,下午 02:18
提交: 9a82b808c
Message: Revert "Add basic reference/module resolution to program.go"
一次仓促的合并将复杂的模块解析逻辑引入,导致灾难性失败。Jake 紧急制动;缺乏正确的解析,编译器只能沦为普通的语法高亮器。
场景 4 – 转向
日期: 2025年2月10日
提交: 8c4573af8
Message: Hack in configDir fix for now
团队选择了务实的临时修复,以止血。“Hack” 成为一个绷带,让开发得以继续前进。
第三幕:苦差事
蒙太奇 – “测试之墙”
日期: 2025年上半年至中期
主演: Gabriela Araujo Britto(验证者)
在新引擎雏形逐步成形的同时,Gabriela 正在进行等价性测试:必须让 20 000 条测试用例的行为与旧的 JS 编译器完全一致。以下是一系列迁移测试的提交记录:
3fae7ba01– “Port document symbol tests”e34615c82– “Port workspace symbols tests”08bc24d5b– “Port baseline diagnostics tests”
她手动核对数千个输出,确保错误信息保持完全一致。
场景5 – 同步大师
角色: Mateusz Burzyński
Commit: d9178cc1f
Message: Port "Fixed crash when adding unreachable code..."
Mateusz 在旧的 “Strada” 仓库与新引擎之间搭建桥梁,迁移关键的安全修复。
第四幕:润色
场景 6 – 专家
日期: October 31 2024 (Halloween)
角色: Nathan Shively‑Sanders (语法纳粹)
Commit: c028facc6
Message: Add AsteriskAsteriskEqualsToken scanning for **=
Nathan 为很少使用的 **= 运算符添加了支持,进一步收紧了语法。
场景 7 – 最后一块
日期: November 2025
角色: Sheetal Nandi (标度器)
Commit: 66ab80db1
Message: Multiproject requests like find all refs, rename
Sheetal 实现了重型 LSP 功能,使编译器能够处理拥有 500 多个包的单体仓库。Project Corsa 从科学实验升级为企业级工具。
尾声:揭示
日期: 2025年12月
状态: 公开 Alpha (@typescript/native-preview)
Scene 4 中的 “Hack” 大部分已被移除。Jake 继续修复模块输出错误(8d8850a6a)。Gabriela 完成了测试基线。Anders 则转向下一个不可能的架构。
你,作为开发者,运行 npm install,看到构建在 200 ms 内完成,而不是 2 s,于是继续编码——对让这一切成为可能的传奇毫不知情。
Directed by Antigravity
Data provided by git log.
No actual developers were harmed in the making of this narrative (we assume).