Paint.NET 为 WINE 内置 Direct2D 重写实现
Paint.NET 在 WINE 上运行的新尝试
Paint.NET 长期以来在 WINE 上运行的最大障碍之一是 Direct2D。按照 Paint.NET 作者 Rick Brewster 的说法,WINE 中的 Direct2D 实现显然无法完整到满足 Paint.NET 的需求,而 Paint.NET 也不能简单地“禁用”Direct2D。
因此,Paint.NET 现在为 WINE 场景内置了一套从零开始、洁净室逆向工程实现的 Direct2D 重写版本。该实现通过使用 /wine 触发,位于 PaintDotNet.Windows.Direct2D1.Managed.dll 中。
Claude 参与生成了大量代码
Brewster 表示,这套实现由 Claude 编写;如果没有 Claude,这件事“不可能完成,也绝不会发生”。
不过,他也强调其中大部分代码属于所谓的“vibe coded”:并没有经过彻底审查,更像是“先相信它能跑”的风格。他提到,这部分代码约有 18 万行,规模过大,无法逐行审查。作为对比,Paint.NET 其余部分约有 70 万行代码,而他已经维护这个项目超过 20 年。
AI 编程的能力与风险并存
Brewster 对 Claude 的评价并不单一。他形容 Claude 有时像“10 个刚被解放的爱因斯坦级 10x 程序员”一样高效,但有时表现也并不理想。
他提到,自己必须经常监督 Claude,尤其是在资源管理方面。例如,Claude 曾一度没有正确处理类似 COM AddRef() 的引用计数对象管理问题。他还发现过一些糟糕的设计或架构决策,需要及时纠正。
与此同时,他也认可 Claude 在逆向工程上的表现,尤其是在推导实现 Direct2D 内置效果库所需公式时,展现出了一些聪明且持续的工作能力。
值得关注的讨论点
这个案例展示了 AI 编程助手在大型工程中的一种现实用法:
- 可以承担大量重复、复杂或探索性的实现工作;
- 能在逆向工程和公式推导等任务中发挥作用;
- 生成代码规模可能迅速膨胀,人工审查成本极高;
- 资源管理、架构设计等关键问题仍需要有经验的开发者把关。
对于关注 AI 编程、跨平台兼容、.NET、WINE 和图形栈实现的开发者来说,这是一个很有讨论价值的案例。