V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
eypidan
V2EX  ›  程序员

使用 TypeScript 的类型运行 DOOM

  •  
  •   eypidan · 1 天前 · 1656 次点击

    https://www.reddit.com/r/programming/comments/1iyqeu7/typescript_types_can_run_doom/

    如链接~ 本人非前端程序员,也不是很了解 ts 的类型系统,有老哥能帮忙讲一下这件事的难度吗😂

    补充:githuab: https://github.com/MichiganTypeScript/typescript-types-only-wasm-runtime

    10 条回复    2025-03-05 08:51:18 +08:00
    songray
        1
    songray  
       1 天前   ❤️ 1
    之前尝试过用纯 type 实现 Lua 虚拟机,只能说这玩意全是难点。
    举个简单的例子,纯 type 实现 通用的整数加法运算:

    // 创建长度为 N 的元组类型
    type BuildTuple<N extends number, R extends unknown[] = []> =
    R['length'] extends N
    ? R
    : BuildTuple<N, [...R, unknown]>;

    // 通过元组长度实现加法
    type Add<A extends number, B extends number> =
    [...BuildTuple<A>, ...BuildTuple<B>]['length'];

    但这玩意最多只能算到 45 ,因为 ts 类型系统有递归限制,默认的类型递归深度限制是 50 。
    要突破这个限制就只有把整数转为二进制数组,再从二进制数组转回整数。

    这样的限制存在方方面面... 所以这老哥真是神人了。
    zhizunzz
        2
    zhizunzz  
       1 天前 via Android
    我不理解这是用什么干了什么,我水平太低了
    sillydaddy
        3
    sillydaddy  
       1 天前   ❤️ 1
    可以跟这个类比: /t/822664 ,说的都是图灵完备,就可以做任何事情。
    hengshenyu
        4
    hengshenyu  
       1 天前   ❤️ 1
    @zhizunzz 用 ts 类型系统去开发一个游戏。ts 类型由于有三元表达式(条件),递归(循环),泛型(函数)。所以可以做到图灵完备。但是实际做起来有超多限制和问题,常见的就是 1 楼说的递归栈有限这种问题
    w568w
        5
    w568w  
       1 天前   ❤️ 1
    延伸阅读:GNU C 的 printf() 也是图灵完备的,因此理论上你可以用 printf 运行任何程序…… 例如 https://github.com/HexHive/printbf
    billccn
        6
    billccn  
       1 天前
    视频中说这个工作所涉及的范畴和已经远远超过了用类型实现的图灵机的复杂度。

    这个人学了好几个语言来把 Doom 编译成 WASM ,然后再写一个虚拟机/模拟器在类型系统上运行 WASM ,我想图形输出(以 Ascii Art 形式)肯定也是手搓的。

    另外 177TB 的类型文件直接用官方 tsc 去编译的话那估计直接崩溃了,所以这个 tsc 肯定也是优化过。
    wangtian2020
        7
    wangtian2020  
       1 天前
    写 JavaScript 就像在解一元方程,做 typescript 类型体操就像在求导就像在做微积分
    UnluckyNinja
        8
    UnluckyNinja  
       1 天前   ❤️ 1
    看了下源码,没有对 tsc 修改,就单纯地取消了各种深度、递归限制,视频 4:00 写了具体修改了哪些,在 repo 里可以从 patches 文件夹里看到(用的 pnpm 的本地补丁功能),看完视频最大的感受就是他的硬件成本也相当高,1.25P 的硬盘阵列,nodejs 吃 90G 内存……
    He could so he did...
    levelworm
        9
    levelworm  
       1 天前 via Android
    类似的事情,有用 imessage 用来 parse 图像的库来构造虚拟机指令,最后造出来一个 64 位的虚拟机的恶意软件。
    liuidetmks
        10
    liuidetmks  
       1 天前
    @sillydaddy 涨姿势了,orz
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5021 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 09:43 · PVG 17:43 · LAX 01:43 · JFK 04:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.