程序员成功地让《毁灭战士》在 TypeScript 的类型系统中运行

2025年02月28日 10:19 次阅读 稿源:cnBeta.COM 条评论

人们已经将 Doom 移植到从计算器到麦当劳收银机的各种设备上。 最近,人们开始推动在没有实际处理能力的平台上运行该软件,PDF 和Word 文档就是最新的例子。 当然,这些方法都非常缓慢,但令人难以置信的是,游戏甚至可以在非计算机平台上执行。

人们已经将 Doom 移植到从计算器到麦当劳收银机的各种设备上。 最近,人们开始推动在没有实际处理能力的平台上运行该软件,PDFWord 文档就是最新的例子。 当然,这些方法都非常缓慢,但令人难以置信的是,游戏甚至可以在非计算机平台上执行。

软件工程师德米特里-米特罗普洛斯(Dmitri Mitropoulos)将《毁灭战士》移植到非计算机平台的工作提升到了一个全新的高度。 这位程序员成功地让 Doom 在 TypeScript 的类型系统中运行,其复杂程度令人匪夷所思,他花了整整一年的时间才完成这一壮举。

TypeScript 是微软开发的一种语言,它在 JavaScript 的基础上增加了静态类型检查功能,以便在执行前捕捉编码错误。 将其视为代码的拼写或语法检查程序,可确保函数和变量的输入正确无误。 开发人员通常用它来构建大型 JavaScript 应用程序。

在 TypeScript 的类型系统中运行游戏被认为是"不可能的"。 米特罗普洛斯甚至指出,他开始这个项目是为了"快速"证明为什么做不到。 然而,随着他的深入研究,他开始执着地想让它成功。 最后,就连经验丰富的 TS 开发人员也对他刮目相看,无话可说。

米特罗普洛斯对 TypeScript 终于渲染出第一帧末日画面做出反应。

米特罗普洛斯版本的《毁灭战士》运行了 3.5 万亿行类型,耗费了惊人的 177 TB。 编译一帧画面需要 12 天,导致每秒 0.0000009645 帧的速度慢得惊人。 TypeScript 类型跟踪器必须每秒处理 2000 万个类型实例才能生成输出,导致帧速率极慢。

尽管开销巨大,但米特罗普洛斯认为性能提升是可能的。 在密歇根 TypeScript Discord 频道中他提出,通过进一步优化,编译时间可以减少到"1 到 12 小时"。 他已经确定了可以提高速度的领域。

为了实现这一切,他完全使用 TypeScript 类型构建了一个虚拟机,包括运行 Doom 所需的全部 116 条 WebAssembly 指令的逻辑实现。 一台正常运行的计算机的每一个元素--内存、磁盘空间,甚至 L1 CPU 缓存--都必须在类型系统中费尽心思地重新创建。 由于 TypeScript 只允许从左侧迭代字符串,因此他必须反向输入二进制算法。

运行该程序需要一个自定义的 WebAssembly 运行时,在 TypeScript 编辑器中处理所有内容。 此外,TypeScript 编译器也必须进行修改,以处理项目的超大规模,因为在执行过程中,仅类型跟踪器就消耗了超过 90GB 的 RAM。

米特罗普洛斯形容这项工作是一项艰巨的挑战。 他写了 12364 个手写测试,学习了多种编程语言,最初估计该项目在优化前需要 1.25 PB。 有一次,编译一个框架需要连续实例化三个月。 他说人工智能帮不上忙。

米特罗普洛斯在他简短的 7 分钟视频解释中说:"哦,人工智能对这些东西都无能为力。它是如此低级,引擎内部没有数组、对象、字符串或布尔,只有二进制数,而且 Doom 只使用 64 位和 32 位整数,仅此而已。 哦,这些整数既不是有符号的,也不是无符号的。 我花了一整天才弄明白。"

这项艰巨的任务花了整整一年的时间,每天工作 18 个小时才完成。 TS 的其他开发人员对这个项目有很多疑问,因此米特罗普洛斯计划再发布两段视频,解释其中的高技术细节和他的动机。 现在,我们又多了一个证据,证明《毁灭战士》可以在任何东西上运行--包括那些根本无法运行游戏的东西。

对文章打分

程序员成功地让《毁灭战士》在 TypeScript 的类型系统中运行

1 (50%)
已有 条意见

    最新资讯

    加载中...

    编辑精选

    加载中...

    热门评论

      Top 10

      招聘

      created by ceallan