精品国产一级在线观看,国产成人综合久久精品亚洲,免费一级欧美大片在线观看

當前位置:統一通信/協作企業動態 → 正文

Facebook新推出AL語言,意在簡化程序靜態分析

責任編輯:editor004 作者:Sergio De Simone |來源:企業網D1Net  2017-06-09 11:28:03 本文摘自:INFOQ

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

本文摘自:INFOQ

x Facebook新推出AL語言,意在簡化程序靜態分析 掃一掃
分享本文到朋友圈
當前位置:統一通信/協作企業動態 → 正文

Facebook新推出AL語言,意在簡化程序靜態分析

責任編輯:editor004 作者:Sergio De Simone |來源:企業網D1Net  2017-06-09 11:28:03 本文摘自:INFOQ

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

本文摘自:INFOQ

電子周刊
回到頂部

關于我們聯系我們版權聲明隱私條款廣告服務友情鏈接投稿中心招賢納士

企業網版權所有 ©2010-2024 京ICP備09108050號-6 京公網安備 11010502049343號

^
  • <menuitem id="jw4sk"></menuitem>

    1. <form id="jw4sk"><tbody id="jw4sk"><dfn id="jw4sk"></dfn></tbody></form>
      主站蜘蛛池模板: 灵川县| 青州市| 稷山县| 邻水| 阿尔山市| 安宁市| 泊头市| 贵南县| 凌海市| 灵石县| 黄龙县| 随州市| 鹰潭市| 通化县| 阳原县| 敖汉旗| 永善县| 珲春市| 巩留县| 阜南县| 平邑县| 丹巴县| 新和县| 中牟县| 卫辉市| 淮阳县| 孝昌县| 肇庆市| 马鞍山市| 滕州市| 正蓝旗| 延安市| 南宁市| 东乌珠穆沁旗| 五家渠市| 昌宁县| 新绛县| 屯留县| 交城县| 凤山市| 仲巴县|