阿里云「飞天发布时刻」2024来啦!新产品、新特性、新能力、新方案,等你来探~ 了解详情
写点什么

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:001740
用户头像

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

关注

评论

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

JAVA中Base64加密与解密

Howe

Java base64 加密解密

Spring中的测试类~简洁方便

程序员的时光

spring

Boyer-Moore 算法

Kenn

算法 数组 Boyer-Moore

技术人员加薪二三事

南方

管理 职场 技术管理 加薪 劈空掌

游戏夜读 | 2020周记(4.3-4.10)

game1night

职场“35岁现象”:焦虑 or 出路?是时候说出真相了!

狂师

职场 成长 软件测试 测试 软件开发

为什么每个软件人都要懂点系统架构?

刘华Kenneth

架构 DevOps 高可用 敏捷 高并发

Spring Cloud概述

会飞的猪

20 大类,100+ 网络副业兼职平台汇总推荐

一尘观世界

程序员 自由职业 副业 赚钱

制作Unknown Pleasures效果图的3种方法

张云金_GISer

设计 T恤 GIS 地图

动态规划问题的思路和技巧

Kenn

算法 动态规划

Dubbo 概述

会飞的猪

iOS Release 版本开启调试功能

liu_liu

ios release 调试

Kafka系列第4篇:消息发送时,网络“偷偷”帮忙做的那点事儿

z小赵

kafka 推荐 实时计算

缓存的五种设计模式

Rayjun

缓存

聊聊数据库原理和索引结构:1000万条数据优化后为什么能提升1500倍

牧码哥

MySQL 数据库 数据结构 性能优化 索引结构

程序员陪娃漫画系列——上学路上

孙苏勇

程序员 生活 陪伴 漫画

KubeFATE: 用云原生技术赋能联邦学习(二)

亨利笔记

Kubernetes 云原生 k8s FATE KUBEFATE

如何梳理画出牛逼的、高大上的架构图?

狂师

程序员 企业架构 开发者 软件测试 软件开发

Nacos 1.1.4 与微服务的实践经验记录

itfinally

Java 微服务 nacos

Redis学习笔记(概述)

编程随想曲

redis

认识数据产品经理(一 数据产品经理的细分)

马踏飞机747

大数据 数据中台 数据分析 产品经理

我愿沉迷于学习,无法自拔(三)

孙瑜

深度思考 程序员 感悟

Java新技术:文字块

X.F

Java 编程语言

为AndroidApk添加系统级签名

Howe

Java android

从Integer开始阅读JDK源码

指尖流逝

Java jdk源码

聊聊测试工程师的价值

软件测试 质量 测试工程师产出 测试的价值

记录自有意义

彭宏豪95

人生 写作 感悟 记录

动画设计的十个原则

养牛致富带头人

设计 动画

Java并发编程系列——锁顺序

孙苏勇

Java Java并发 并发编程 多线程

找工作不得不知道的事

熊斌

认知提升 求职

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