FoxPro 停更近二十年后,有人给它换了个运行时
一个客户想让自己的 Visual FoxPro 应用继续跑下去,于是有了 foxscript:同样的语言,新的 Rust/Wasm 运行时,老 .fll 扩展仍能加载,表不再卡在 2 GB。报表还没做,构建未签名。
Visual FoxPro 的最后一个版本是 9,微软在 2007 年停止了它。之后的事并不难猜:一大批企业应用没跟着停。它们还在跑,32 位,多半跑在没人愿意碰的 Windows 机器上,里面躺着大量从没写进文档、却支撑着日常业务的规则。
不重写的理由很实在。一套用了二十年的业务系统,重写成本往往高过它剩余的价值,上线时间也没人敢承诺。把跑得好好的老系统推翻重做,是丢客户的标准做法。于是维护成了默认选项——直到某天连维护都找不到人。
一个客户把项目逼了出来
foxscript 的来历就是这个。按项目方的说法,客户希望这套应用在可预见的将来继续产出,于是有了它:语言不变,运行时换新。
新运行时用 Rust 写,编译到 WebAssembly。更值得停一下的是那句“checked against the real vfp9.exe”——兼容性拿原版解释器当基准去校验,而不是照着一份并不存在的规范重新实现。这种做法更慢,但对一门从未有过正式标准的语言来说更靠得住。选 wasm 也留出了不在 32 位 Windows 进程里运行的可能,不过现有材料没有描述迁移路径。
保留了什么,补了什么
保留项里最关键的是老 .fll 仍能加载。.fll 是 FoxPro 的 32 位扩展库格式,很多公司的核心逻辑就压在里面,源码可能早就没了。老代码能不能继续用,常常取决于这些二进制文件加不加载得起来,而不是语法支不支持。
补的部分有几样。表不再停在 2 GB——这是 DBF 格式和 32 位寻址留下的天花板,一张日志表长起来就会撞上。另外加了 lambda、JSON 和一个 HTTP 服务器。JSON 用来对接外部系统,HTTP 服务器让老应用能直接提供接口,不必再包一层。这些算不上语言设计的进步,更像是在一套 90 年代的代码和现代基础设施之间清掉几根管子。
还没做完的地方
报表没做。对相当一部分 FoxPro 部署来说,报表就是这门生意本身——订单、对账单、月结打印,缺了它,系统在很多生产场景里根本没法替换上线。
构建没有签名,Windows 会给出警告,企业内分发得自己处理证书。许可证是 MIT。
这些缺口不妨碍它是一个认真的项目:它没打算重新发明 FoxPro,只想让已经写好的那部分继续跑。Hacker News 上这个帖子拿到 288 分、170 条评论,说明戳中的不只是 FoxPro 用户,而是所有手里握着“停不了、也重写不起”的系统的人。
来源:Microsoft killed FoxPro in 2007. Anyway, here’s FoxPro revived(Hacker News RSS)