GitHub 上的 graemeg/blaise 最近持续更新。这个项目把自己定位为“现代、自托管 Object Pascal 编译器”,强调 zero legacy、full ARC、unified UTF-8,并将 QBE 作为代码生成后端目标。截至页面信息,项目约有 31 个 star、1 个 fork、196 次提交和 5 个 tag。

这不是一次声势浩大的 Pascal 复兴,也不是 Delphi 或 Free Pascal Compiler(FPC)的直接替代宣言。更准确地说,Blaise 是一名语言实现者对旧 Pascal 生态长期包袱的拆解:如果不再背负几十年的兼容承诺,Object Pascal 能不能以更干净的编译器形态重新开始?

Blaise 要解的不是语法怀旧,而是历史包袱

Pascal 系语言并不缺编译器。商业世界有 Delphi,开源世界有 FPC/Lazarus。它们的优势是可用、成熟、兼容历史代码;代价也在这里:字符串编码、内存管理、运行时库、平台差异和遗留语义,往往牵一发动全身。

Blaise 的切入点不是“再造一个 Delphi”,而是绕开旧兼容压力。README 里的几项关键词,指向的都是老生态里最容易积累技术债的位置。

项目选择试图解决的问题现实判断
zero legacy不为旧代码兼容让步有利于设计干净,但会限制迁移吸引力
full ARC用自动引用计数管理对象生命周期降低手动管理成本,但语义和运行时仍需验证
unified UTF-8统一字符串编码模型对跨平台更友好,也意味着与旧代码习惯可能冲突
targeting QBE借轻量后端生成机器码实现成本低于自建后端,但后端边界会影响调试与优化

这组选择说明,Blaise 的价值不在“Pascal 又火了”,而在它把 Object Pascal 当作一门可以重新设计实现的现代语言看待。对编译器开发者来说,这比 star 数更有参考意义。

自举和 QBE 是亮点,也是风险集中区

近期提交集中在自举、代码生成、测试迁移、RTL 和许可证调整等底层工作。例如 5 月上旬的提交提到,项目修复了 QBE IR 中循环内动态栈分配问题,1242 个测试通过,stage-1 IR 与 stage-2 IR 已做到字节级一致;但同一提交也说明,stage-2 二进制在生成 stage-3 时仍会崩溃,问题仍在调试。

这就是读者最容易误判的地方:自托管是编译器项目的重要里程碑,但材料并不支持“Blaise 已经完成稳定自举”的结论。它正在接近自举链路中的关键检查点,却还没跨过生产可用那条线。

QBE 的选择也很典型。相比 LLVM,QBE 更轻、更容易嵌入,适合个人或小团队快速实现编译器后端。但轻量后端通常意味着生态工具、优化能力、调试经验都不能按 LLVM 的成熟度来假设。Blaise 如果继续推进,真正要证明的不只是“能生成代码”,而是生成出的二进制在复杂自举、异常处理、运行时库边界上可重复、可诊断。

受影响的主要是语言实现者和 Pascal 老用户

对普通应用开发者,Blaise 目前不构成换工具链的理由。它没有展示企业采用、性能优势、完整 IDE 生态,也没有承诺高兼容 Delphi/FPC。拿它去替代现有项目,风险远大于收益。

更适合关注它的人有两类。一类是编译器和语言实现研究者,他们可以从 Blaise 的自举路径、QBE 接入、ARC 与 RTL 设计里看到小型现代编译器的工程取舍。另一类是 Pascal/Delphi/FPC 开发者,尤其是长期被编码、内存管理和兼容层折磨的人;Blaise 至少给出了一条“不修补旧房子,而是另起炉灶”的样本。

项目许可证也有现实含义。Blaise 已从 BSD-3-Clause 调整为 Apache-2.0 WITH Swift-exception,并在 NOTICE 中包含 QBE attribution。Apache-2.0 带来明确专利授权,Swift-style runtime exception 则意在避免编译产物因链接运行时库而继承额外归属负担。这不是功能新闻,却是编译器项目走向长期使用时绕不开的地基。

接下来最该观察三件事:stage-2/stage-3 崩溃能否关闭;测试套件能否从依赖 FPC 更完整地迁移到 Blaise 自身;RTL 和异常处理能否撑住更大的真实程序。若这些问题没有解决,Blaise 仍会停在漂亮设计与可用工具之间。