程序员成功地让《毁灭战士》在 TypeScript 的类型系统中运行
人们已经将Doom移植到从计算器到麦当劳收银机的各种设备上。最近,人们开始推动在没有实际处理能力的平台上运行该软件,PDF和Word文档就是最新的例子。当然,这些方法都非常缓慢,但令人难以置信的是,游戏甚至可以在非计算机平台上执行。
人们已经将Doom移植到从计算器到麦当劳收银机的各种设备上。最近,人们开始推动在没有实际处理能力的平台上运行该软件,PDF和Word文档就是最新的例子。当然,这些方法都非常缓慢,但令人难以置信的是,游戏甚至可以在非计算机平台上执行。
软件工程师德米特里-米特罗普洛斯(DmitriMitropoulos)将《毁灭战士》移植到非计算机平台的工作提升到了一个全新的高度。这位程序员成功地让Doom在TypeScript的类型系统中运行,其复杂程度令人匪夷所思,他花了整整一年的时间才完成这一壮举。
TypeScript是微软开发的一种语言,它在JavaScript的基础上增加了静态类型检查功能,以便在执行前捕捉编码错误。将其视为代码的拼写或语法检查程序,可确保函数和变量的输入正确无误。开发人员通常用它来构建大型JavaScript应用程序。
在TypeScript的类型系统中运行游戏被认为是"不可能的"。米特罗普洛斯甚至指出,他开始这个项目是为了"快速"证明为什么做不到。然而,随着他的深入研究,他开始执着地想让它成功。最后,就连经验丰富的TS开发人员也对他刮目相看,无话可说。
米特罗普洛斯版本的《毁灭战士》运行了3.5万亿行类型,耗费了惊人的177TB。编译一帧画面需要12天,导致每秒0.0000009645帧的速度慢得惊人。TypeScript类型跟踪器必须每秒处理2000万个类型实例才能生成输出,导致帧速率极慢。
尽管开销巨大,但米特罗普洛斯认为性能提升是可能的。在密歇根TypeScriptDiscord频道中他提出,通过进一步优化,编译时间可以减少到"1到12小时"。他已经确定了可以提高速度的领域。
为了实现这一切,他完全使用TypeScript类型构建了一个虚拟机,包括运行Doom所需的全部116条WebAssembly指令的逻辑实现。一台正常运行的计算机的每一个元素--内存、磁盘空间,甚至L1CPU缓存--都必须在类型系统中费尽心思地重新创建。由于TypeScript只允许从左侧迭代字符串,因此他必须反向输入二进制算法。
运行该程序需要一个自定义的WebAssembly运行时,在TypeScript编辑器中处理所有内容。此外,TypeScript编译器也必须进行修改,以处理项目的超大规模,因为在执行过程中,仅类型跟踪器就消耗了超过90GB的RAM。
米特罗普洛斯形容这项工作是一项艰巨的挑战。他写了12364个手写测试,学习了多种编程语言,最初估计该项目在优化前需要1.25PB。有一次,编译一个框架需要连续实例化三个月。他说人工智能帮不上忙。
米特罗普洛斯在他简短的7分钟视频解释中说:"哦,人工智能对这些东西都无能为力。它是如此低级,引擎内部没有数组、对象、字符串或布尔,只有二进制数,而且Doom只使用64位和32位整数,仅此而已。哦,这些整数既不是有符号的,也不是无符号的。我花了一整天才弄明白。"
这项艰巨的任务花了整整一年的时间,每天工作18个小时才完成。TS的其他开发人员对这个项目有很多疑问,因此米特罗普洛斯计划再发布两段视频,解释其中的高技术细节和他的动机。现在,我们又多了一个证据,证明《毁灭战士》可以在任何东西上运行--包括那些根本无法运行游戏的东西。
踩一下[0]
顶一下[0]