Facebook 开源了 Haskell 代码重构工具 Retrie,该 工具 能够使代码重构的过程更轻松、速度更快,也能够令重构后的代码更加安全。Retrie 拥有重写表达式、类型和模式的功能,还具有重写脚本和附加条件的能力,并包含一个用于编写更高级重写脚本的库。
根据 Facebook 给出的信息,开发者可以利用 Retrie 重新编写超过 100 万行的大型代码库,并且是使用 Haskell 语法的方程式,而非正则表达式,以避免出现大型类别的重构错误。
代码重构对改善代码库的总体设计来说很有必要,但这一过程也十分繁琐且耗时。因此,Facebook 表示,重构工作通常手动完成,增量也较小,这样才能尽可能地防止错误。然而,随着代码库大小的增长,这种方法会越来越行不通,必须依靠工具的辅助。
重构工具可粗略地归为两类:一类是查找和替换字符串操作工具,例如 sed,这类工具速度很快,但是很难表达复杂的重写概念;另一类是用于解析和处理抽象语法树(AST)的工具,这类工具功能较为强大,但需要的领域知识更广泛,与前一类工具相比来说,速度也较慢。
此次新开源的 Retrie 则介于这二者之间。与使用复杂的正则表达式或 AST 遍历相比,使用 Haskell 语法以方程式进行重构更加容易。Facebook 还介绍说,由于方程式比正则表达式更强大,并且可以编写脚本,因此 Retrie 比单独的字符串替换更好用。同时,Retrie 能够利用多种解析技术,有效地缩小匹配项目的搜索空间,比经典的 AST 操作工具要快。
Retrie 此前已在现实中得到了应用。Facebook 有一个名为 Sigma 的反规则滥用引擎,用来阻止垃圾邮件、网络钓鱼攻击和恶意软件。为了应对不断增长的数据规模和渐趋复杂的规则,Facebook 在 2015 年将 Sigma 迁移到了 Haskell 上,这次迁移正是通过 Retrie 来进行,Facebook 称它“快速又安全”。
猜你喜欢: