从旧项目迁移到 Delphi 12:先消除隐患,再谈语法升级
老项目迁到 Delphi 12,真正麻烦的从来不是新语法,而是那些多年来被忽略的隐患会被一次性翻出来。这篇就是我做迁移时比较看重的顺序和经验。
把旧项目迁到 Delphi 12,表面上看像一次编译器升级,实际上更像一次系统体检。只要项目年龄够大,里面一定混着历史组件、过时写法、隐式转换、编码问题、第三方库版本差异,还有一些“以前一直能跑所以没人动”的危险逻辑。真要迁的时候,这些东西基本都会一起冒出来。
我现在做迁移不会一上来就追求“先编过再说”,因为这种思路很容易把原本就脆弱的问题继续带进新版本。我的顺序通常是先确认依赖,再清点高风险模块,最后才开始真正改代码。哪些第三方控件还维护、哪些包必须替换、哪些模块最容易受字符集和 64 位影响,这些东西先摸清,后面推进才不会乱。
另一个很实际的经验是,不要低估警告信息的价值。很多老项目之所以一直“看起来没事”,只是因为旧编译器对某些写法没那么严格。到了 Delphi 12,这些历史问题会更清楚地暴露出来。这个时候最忌讳的做法就是为了快速通过编译,把警告一股脑压掉。那不是解决问题,只是把雷重新埋回去。
我也不建议把迁移和大规模重构绑死在一起。迁移的首要目标应该是行为稳定,而不是顺便把架构全部翻新。真正稳妥的做法,是先把项目迁上来并验证关键流程,再逐步清理旧代码、替换危险实现、补齐边界检查。这样虽然节奏没那么“痛快”,但风险小得多。
如果项目里还有数据库、文件格式、串口通信、第三方 DLL、报表打印、脚本引擎这些外围依赖,那就更要尽早做真实环境测试。很多迁移问题在开发机上看不出来,一到客户环境才集中爆。我的习惯是越靠近系统边界的地方,越早验证。
所以我对 Delphi 12 迁移一直是这个态度:先消除隐患,再谈语法升级。编译通过不代表迁移完成,关键是项目能不能更稳地活在新版本上。