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语言,意在简化程序静态分析相关推荐

  1. 信捷总线11轴伺服程序,本人原创,客户设备完美运行,plc程 序框架逻辑很顺畅,梯形图只有逻辑程序,不包含任何运算,运用大量c语言完美简化程序

    信捷总线11轴伺服程序,本人原创,客户设备完美运行,plc程 序框架逻辑很顺畅,梯形图只有逻辑程序,不包含任何运算,运用大量c语言完美简化程序,伺服采用c语言书写多段速,是伺服运动更柔性化.触摸屏采用 ...

  2. A Swift Tour, 苹果新推出的开发语言

    苹果近日召开了全球开发者大会(WWDC),推出了一种新的开发语言 Swift,有人说是用来替代Objective-C的,以下是苹果官方文档,第一时间整理了一下,觉得还是很有前景的,有些英文看不懂的就直 ...

  3. Nutanix推出新的产品组合,以简化混合多云之路

    2022年2月16日,混合多云计算领导者Nutanix(纳斯达克:NTNX)今日宣布在全球推出简化的产品组合,以适应快速变化的客户需求.Nutanix云平台为所有类型的云提供统一的运营模式,包括公有云 ...

  4. 微软推出新逆天开源语言,告别 for 循环,提高开发效率!

    拥抱开源的微软近日又为开发者带来好消息:在受 TypeScript 语法类型与 ML 和 Node/JavaScript 语义启发下,微软推出了全新的开源编程语言 Bosque. Bosque 创作者 ...

  5. Facebook新AI模型实现直接从非英语语言翻译到另一种非英语语言

    据外媒报道,机器翻译技术自诞生以来走过了漫长的道路.虽然像谷歌这样的翻译曾经粗糙.不可靠,而且只对最基本的翻译有用,但如今,由于AI的力量,它们可以实现惊人的准确.然而一些古老的翻译方法仍然存在. 比 ...

  6. 微软推出新逆天开源语言Bosque,告别 for 循环,提高开发效率!

    拥抱开源的微软近日又为开发者带来好消息:在受 TypeScript 语法类型与 ML 和 Node/JavaScript 语义启发下,微软推出了全新的开源编程语言 Bosque. Bosque 创作者 ...

  7. c语言如何乘分数,C语言分数相乘程序简化问题。

    C语言分数相乘程序简化问题. 答案:2  信息版本:手机版 解决时间 2019-10-03 09:30 已解决 2019-10-03 02:33 这是一个先输入分数个数n,回车后再分别输入分子和分母, ...

  8. 新浪地产自动打卡程序推出2.3版

    经过了1年,为了方便自己,也方便他人,紧跟新浪地产步伐,对程序不断改进,今天推出2.3版,欢迎下载. 下载地址:http://download.csdn.net/detail/dcf8080/3510 ...

  9. Facebook推出简体中文语言版本

    Facebook今日推出了简体中文语言版本.当中国大陆地区用户访问Facebook.com,将自动跳转到http://zh-cn.facebook.com/ 的页面上,页面显示为简体中文字符. 用户使 ...

最新文章

  1. Docker: Failed to get D-Bus connection: No connection to service
  2. 图片二:matplotlib、PIL、CV2操作图片
  3. 排序算法——各算法性能
  4. Redis数据库(一)——Redis简介、部署及常用命令
  5. php外部系统命令执行函数
  6. javascript --- [代码优化]将复杂的函数分解写异步请求数据的同步写法
  7. 快速验证业务决策,“玩转”用户增长
  8. 一文带你看懂物联网开源操作系统
  9. 丢手帕程序C语言,语言丢手绢教案中班
  10. 1900页Python系列PPT分享四:字符串与正则表达式(109页)
  11. python并行计算for循环_在python中并行化这个嵌套的for循环
  12. Exchange2010安装配置
  13. z变换判断稳定性和因果性_LTI系统判断因果性稳定性.PPT
  14. 训练集、验证集、测试集的作用和意义
  15. 《Android源码设计模式解析与实战》读书笔记(七)——策略模式
  16. 高等数学-函数的四个性质
  17. MySQL | 视图
  18. hive和hadoop的浅显理解
  19. 升级系统后maxvim不能用,重新下载编译个
  20. 计算机网络指令截图,windows常用快捷键,截图命令你知道吗-win7全屏

热门文章

  1. java实现简单的约瑟夫环问题(二)
  2. IT外企那点事[转载]
  3. 浅析2007年商业智能领域上演的收购大戏
  4. 如何在一个背景图像上,做半透明的图。
  5. js_高级_表格排序案例---分别用面向过程和面向对象实现
  6. 让我为你介绍一个神器:Chimee,一套可扩展的 H5 视频播放器解决方案
  7. Java网络编程——9.服务器Socket
  8. 2016年CCPC/ICPC比赛总结
  9. mysql的介绍;安装及基本配置;mysql数据库运行必备技能
  10. Oracle 9i 升级至Oracle10g数据库最好的方法