Facebook 开源 Haskell 代码重构工具 Retrie
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 称它“快速又安全”。
关注公众号
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
-
上一篇
每日一博 | 深入了解 kafka 系列-消费者
前言 与生产者对应的是消费者,应用程序可以通过KafkaConsumer来订阅主题,并从订阅的主题中拉取消息。不过在使用KafkaConsumer消费消息之前需要先了解消费者和消费组的概念,否则无法理解如何使用KafkaConsumer。 <!--more--> Consumer 消费者(Consumer)负责订阅Kafka中的主题(Topic),并且从订阅的主题上拉取消息。与其他一些消息中间件不同的是:在Kafka的消费理念中还有一层消费组(Consumer Group)的概念,每个消费者都有一个对应的消费组。 当消息发布到主题后,只会被投递给订阅它的每个消费组中的一个消费者。如图所示,某个主题中共有4个分区(Partition):P0、P1、P2、P3。有两个消费组A和B都订阅了这个主题,消费组A中有4个消费者(C0、C1、C2和C3),消费组B中有2个消费者(C4和C5)。按照Kafka默认的规则,最后的分配结果是消费组A中的每一个消费者分配到1个分区,消费组B中的每一个消费者分配到2个分区,两个消费组之间互不影响。每个消费者只能消费所分配到的分区中的消息。换言之,每...
-
下一篇
Chrome 新特性,可将 PC 电池续航延长 2 小时
作为市占率高达 70 %的全球第一大桌面浏览器,谷歌的Chrome浏览器在收获众多好评的同时,也存在着一些备受吐槽的“顽疾”,其中之一就是功耗问题。一直以来,Chrome浏览器就被标榜为耗电大户,尤其是在打开多个标签时,消耗更甚。 然而现在,谷歌则计划通过 Chrome 86 中的一项新功能来解决此问题,该功能可以通过在标签页处于后台时关闭不必要的 JavaScript 计时器和跟踪器来减少能耗。这项实验性的 Chrome 功能可以限制标签的后台流程,包括检查滚动位置的跟踪器 、报告日志并分析与广告互动的活动。 Chromium 小组在一个名为“限制 JavaScript 计时器以减少后台标签中的电池使用量”的文档中发布了运行的实验结果。该文档解释称,网站开发人员使用这些计时器进行分析的方式并不会使用户受益,并且会消耗 macOS、Windows 和 Linux 设备上的电量。 “我们使用 Devtools 在后台检查了一些热门站点所做的工作,发现很多工作都是由 JavaScript 定时器完成的。此外,我们还发现,当页面处于后台时,用这些 JavaScript 计时器完成的工作通常对...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2整合Redis,开启缓存,提高访问速度
- MySQL数据库中FOR UPDATE的使用
- SpringBoot2整合MyBatis,连接MySql数据库做增删改查操作
- CentOS7,8上快速安装Gitea,搭建Git服务器
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Docker容器配置,解决镜像无法拉取问题
- SpringBoot2更换Tomcat为Jetty,小型站点的福音
- MySQL表碎片整理
- SpringBoot2整合Thymeleaf,官方推荐html解决方案


微信收款码
支付宝收款码