Facebook新推出AL语言,意在简化程序静态分析
AL是一种易用的声明式编程语言,适用于抽象语法树(AST)推理,使开发人员可以扩展Facebook Infer静态分析器的功能。
Infer采用OCaml编写,可标识Null指针访问、资源和内存泄漏,以及其它一些C、Java和Objective-C代码中的可检测错误。据Facebook介绍,在他们的iOS和Android移动应用中,80%的软件缺陷是由Infer正确地检测出的。
AL易于扩展,这克服了一个局限Infer的问题。实现扩展不仅需要具备静态分析的专门技能验,而且需要掌握Infer的内部机制。具体而言,AL意在简化对过程内(Intra-procedural)软件缺陷新类型分析程序(Checker)的定义,即局限于过程代码内的软件缺陷。这类软件缺陷可使用更简单的分析手段检测到,包括借助于程序语法、通用语言习语和自定义约定。举个例子,在Objective-C中,为避免存留环路,对象的delegate通常不应做为strong引用。针对需求的分析程序可使用AL定义为:
DEFINE-CHECKER STRONG_DELEGATE_WARNING = { LET name_contains_delegate = declaration_has_name(REGEXP("[dD]elegate")); SET report_when = WHEN name_contains_delegate AND is_strong_property() HOLDS-IN-NODE ObjCPropertyDecl; SET message = "Property or ivar %decl_name% declared strong"; SET suggestion = "In general delegates should be declared weak or assign"; };
在上面的AL代码中,亮点在report_when语句。该语句在ObjCPropertyDecl对象上定义了一个条件,声明为一个strong引用(is_strong_property)。ObjCPropertyDecl对象就是关联到Objective-C属性定义的AST节点。
据Facebook介绍,通常使用数行AL代码就能新定义一个分析程序,并可立即投入使用,无需重新构建Infer,确保了对新分析程序的快速反馈。AL还支持定义基于时态逻辑模型的更复杂公式,其中一个AST节点可关联到时间上某一点,其所有的后代节点均看作是未来可验证的。例如,为保证程序的正确性,HOLDS-EVENTUALLY所关联的表达式可在未来某个时间点上得以验证。
AL是Infer的一个组成部分,已开源于GitHub上,适用于C、C++和Objective-C。
本文转自d1net(转载)
Facebook新推出AL语言,意在简化程序静态分析相关推荐
- 信捷总线11轴伺服程序,本人原创,客户设备完美运行,plc程 序框架逻辑很顺畅,梯形图只有逻辑程序,不包含任何运算,运用大量c语言完美简化程序
信捷总线11轴伺服程序,本人原创,客户设备完美运行,plc程 序框架逻辑很顺畅,梯形图只有逻辑程序,不包含任何运算,运用大量c语言完美简化程序,伺服采用c语言书写多段速,是伺服运动更柔性化.触摸屏采用 ...
- A Swift Tour, 苹果新推出的开发语言
苹果近日召开了全球开发者大会(WWDC),推出了一种新的开发语言 Swift,有人说是用来替代Objective-C的,以下是苹果官方文档,第一时间整理了一下,觉得还是很有前景的,有些英文看不懂的就直 ...
- Nutanix推出新的产品组合,以简化混合多云之路
2022年2月16日,混合多云计算领导者Nutanix(纳斯达克:NTNX)今日宣布在全球推出简化的产品组合,以适应快速变化的客户需求.Nutanix云平台为所有类型的云提供统一的运营模式,包括公有云 ...
- 微软推出新逆天开源语言,告别 for 循环,提高开发效率!
拥抱开源的微软近日又为开发者带来好消息:在受 TypeScript 语法类型与 ML 和 Node/JavaScript 语义启发下,微软推出了全新的开源编程语言 Bosque. Bosque 创作者 ...
- Facebook新AI模型实现直接从非英语语言翻译到另一种非英语语言
据外媒报道,机器翻译技术自诞生以来走过了漫长的道路.虽然像谷歌这样的翻译曾经粗糙.不可靠,而且只对最基本的翻译有用,但如今,由于AI的力量,它们可以实现惊人的准确.然而一些古老的翻译方法仍然存在. 比 ...
- 微软推出新逆天开源语言Bosque,告别 for 循环,提高开发效率!
拥抱开源的微软近日又为开发者带来好消息:在受 TypeScript 语法类型与 ML 和 Node/JavaScript 语义启发下,微软推出了全新的开源编程语言 Bosque. Bosque 创作者 ...
- c语言如何乘分数,C语言分数相乘程序简化问题。
C语言分数相乘程序简化问题. 答案:2 信息版本:手机版 解决时间 2019-10-03 09:30 已解决 2019-10-03 02:33 这是一个先输入分数个数n,回车后再分别输入分子和分母, ...
- 新浪地产自动打卡程序推出2.3版
经过了1年,为了方便自己,也方便他人,紧跟新浪地产步伐,对程序不断改进,今天推出2.3版,欢迎下载. 下载地址:http://download.csdn.net/detail/dcf8080/3510 ...
- Facebook推出简体中文语言版本
Facebook今日推出了简体中文语言版本.当中国大陆地区用户访问Facebook.com,将自动跳转到http://zh-cn.facebook.com/ 的页面上,页面显示为简体中文字符. 用户使 ...
最新文章
- Docker: Failed to get D-Bus connection: No connection to service
- 图片二:matplotlib、PIL、CV2操作图片
- 排序算法——各算法性能
- Redis数据库(一)——Redis简介、部署及常用命令
- php外部系统命令执行函数
- javascript --- [代码优化]将复杂的函数分解写异步请求数据的同步写法
- 快速验证业务决策,“玩转”用户增长
- 一文带你看懂物联网开源操作系统
- 丢手帕程序C语言,语言丢手绢教案中班
- 1900页Python系列PPT分享四:字符串与正则表达式(109页)
- python并行计算for循环_在python中并行化这个嵌套的for循环
- Exchange2010安装配置
- z变换判断稳定性和因果性_LTI系统判断因果性稳定性.PPT
- 训练集、验证集、测试集的作用和意义
- 《Android源码设计模式解析与实战》读书笔记(七)——策略模式
- 高等数学-函数的四个性质
- MySQL | 视图
- hive和hadoop的浅显理解
- 升级系统后maxvim不能用,重新下载编译个
- 计算机网络指令截图,windows常用快捷键,截图命令你知道吗-win7全屏