NVIDIA 初创加速计划,免费加速您的创业启动 了解详情
写点什么

Facebook 新推出 AL 语言,意在简化程序静态分析

  • 2017-06-08
  • 本文字数:933 字

    阅读完需:约 3 分钟

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。

查看英文原文: Facebook’s New AL Language Aims to Simplify Static Program Analysis

2017-06-08 19:001742
用户头像

发布了 227 篇内容, 共 71.5 次阅读, 收获喜欢 27 次。

关注

评论

发布
暂无评论
发现更多内容

信创舆情一线--数据安全法草案提请初审

统小信uos

大数据 安全

架构师训练营学习总结——系统架构【第四周】

王海

极客大学架构师训练营

架构师训练营作业 (第四周)

王海

极客大学架构师训练营

大型互联网应用系统的技术方案和手段

周冬辉

week04

Geek_2e7dd7

第四周作业

赵龙

架构师训练营第4周——学习总结

极客大学架构师训练营 互联网架构模式 互联网架构的演进

写给大忙人看的操作系统(内附思维导图)

cxuan

后端 操作系统

「架构师训练营」第 4 周作业

旭东(Frank)

极客时间第 0 期架构师训练营第四周总结

2流程序员

架构师训练营第四周作业

张锐

区块链技术打通信用壁垒赋能租赁业务

CECBC

去中心 区块链技术 防篡改 去信任

架构师训练营第4周作业

不谈

极客大学架构师训练营

架构师训练营——第四周总结

jiangnanage

架构师训练营第 04 周—— 练习

李伟

极客大学架构师训练营

链技术如何提升金融行业安全与互信

CECBC

百度 区块链技术 超级链 探索与实践

浅谈比特币匿名的意义

CECBC

第四周总结

赵龙

架构师训练营-第四章-学习总结

而立

极客大学架构师训练营

架构师训练营 No.4 周总结

连增申

典型大型互联网应用系统的技术方案和手段

极客大学架构师训练营 第四周作业 互联网应用技术方案 互联网系统架构 互联网系统特点

互联系统架构演化史之感

旭东(Frank)

架构 感悟 极客大学架构师训练营

大型互联网应用系统常用技术(持续更新)

2流程序员

「架构师训练营」第 4 周作业 - 一个典型的大型互联网应用系统使用了哪些技术方案和手段,主要解决什么问题

guoguo 👻

极客大学架构师训练营

架构师训练营第四周 架构分析

suke

极客大学架构师训练营

程序员如何提升自己横向能力?

Boss.Guo

团队建设 能力提升 人才培养 个人总结

互联网系统架构设计概览

dony.zhang

通用编程风格

顿晓

Java 学习 编程风格

愿景集团与聚盛国际达成战略合作共建外汇市场新篇章

Geek_116789

西博泰科携手中国电信共同抢占NB-IoT新赛道

Geek_116789

week04 总结

Geek_2e7dd7

Facebook新推出AL语言,意在简化程序静态分析_移动_Sergio De Simone_InfoQ精选文章