FoxPro 这门停更多年的数据库语言,正被一个独立开源项目 FoxDev Studio 重新实现。它直接打开原有的项目、表单、类库、菜单和 DBF 表,让二十多年前写下的程序在 64 位环境里继续运行和调试。旧语言之上还扩展出 FoxScript,可以加 Lambda,直接跑 HTTP 服务。文章适合技术决策者和负责遗留系统的开发者,用来评估老项目该重写、该维持还是该迁移。
这个复兴项目到底是什么
FoxDev Studio 是面向 Visual FoxPro 9 应用的现代 IDE 和运行时,由 FoxDevCommunity 社区维护。项目把口径写在开头,不转换、不导出,直接打开既有项目继续开发。项目的自我定位是假如微软当年出了 Visual FoxPro 10,会是什么样子。
它不是微软官方产品。编译器和虚拟机用 Rust 写,再编译到 WebAssembly,程序编译成字节码,在 fiber 上运行。遇到 MESSAGEBOX 这类会阻塞的语句,运行时以 yield 方式让出,窗口不冻结。表单跑起来是一棵活的控件树,由 React 直接绘制。改一个标签的 Caption,只重绘那一个控件。
兼容到什么程度,数字说了算
项目拿兼容性当卖点,还给了一组可核对的数字。VFP9 语言参考一共 1722 个元素,其中 1534 个已经有对照测试,自称只剩 3 个名字还没碰到。做法是直接问 VFP 本身,按它的行为来匹配。
实际的覆盖范围包括项目、表单、类库、菜单、报表预览、命令窗口、断点调试,DBF 表和索引、备注文件就地读写。老的 FLL 库、Automation、COM 调用也尽量保留。32 位 FLL 装不进 64 位进程,项目的办法是起一个 fllhost.exe 小进程持有这些库,已测过 vfpencryption 和 FoxTools。
迁移老系统具体怎么操作
对躺在目录里的老 VFP 项目,迁移流程已经很具体。
- 在 FoxDev Studio 里用 File 菜单的 Import Visual FoxPro Project,读入 .pjx 和 .scx、.vcx、.mnx、.prg,在原目录旁生成 JSON。
- 双击 .dbf 或 .dbc 直接浏览和编辑数据,表单保留 VFP 属性名,只存和默认值不同的部分。
- 用 Ctrl+E 运行表单,Ctrl+Shift+D 打开调试器,断点、单步、调用栈和变量窗口都在。
- 调通后用 Build App 编成 .fxa 包,再用 Build Executable 带上运行时打成独立 exe,交给没有 IDE 的机器跑。
整个流程里老代码基本保持原样,改的只是运行环境。重写的风险不在写新代码,而在没人说得清旧逻辑到底做了什么。
64 位是福音也是单行道
把文件偏移升到 64 位,单个 DBF 表可以长到几百 GB,不再被 VFP 2GB 上限卡住,这对数据量涨了很多年的老系统是实打实的解脱。但项目文档说得很直接,这是一条单行道。表一旦在 FoxDev 下超过 2GB,Visual FoxPro 就再也打不开它了。
所以要不要让它继续长大,取决于这张表还需不需要回老环境。双向并行阶段,表得控制在 2GB 以内。报表设计器、引擎和最终用户的打包安装器都还没做完,这些空白直接影响上线节奏。
许可证没写清之前别把话说满
这个项目目前的事实基础偏薄。仓库没有挂常见的开源许可证文件,第三方很难据此判断能否直接商用、能否修改后分发。包是未签名的,Windows 首次运行要过 SmartScreen,macOS 要过 Gatekeeper。发布形态是每次提交 main 分支自动重建的 nightly。
这些空白决定了它现在的合理用法是验证和评估。团队可以先拿一个非核心模块试跑,把兼容性、性能和许可证风险都摸一遍,再决定投入。
常见问题
问,FoxScript 和 FoxDev Studio 是什么关系。
答,FoxDev Studio 是 IDE 加运行时的项目名。FoxScript 是在 VFP 语言之上加的扩展,带 Lambda 和 FoxScript.Http 命名空间。新项目用 FoxScript.Http.CreateServer() 起服务,用路由函数加 SQL 查游标,再转 JSON 返回。
问,没有 Visual FoxPro 环境能跑吗。
答,能。它不需要先装 VFP,装上 FoxDev Studio 就能打开老项目。命令行还有一个 foxvm 运行器,可以脱离 IDE 跑检查、反汇编和执行。
问,哪些老东西明确不支持。
答,文档列了有意拒绝的内容,包括 16 位 overlay 和 FoxPro 2.x 屏幕设计器。导入时会逐条列出转不了的原因,不会悄悄丢东西。
问,什么团队现在就该试,什么团队再等等。
答,维护压力大又要长期续命的 VFP 系统,现在可以拿非核心模块去试。报表编辑器是刚需,或合规要求软件带明确许可证的,等补齐再评估。无论如何,备份老项目和表是任何动作之前的第一步。