成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

iOS前端編譯器擴展——Clang

移動開發 iOS
Clang在iOS代碼編譯中主要用于C/C++、Objective-C的前端編譯工作,Clang屬于llvm編譯鏈的一部分,是llvm的前端編譯器。

Part 01、了解Clang   

眾所周知,編譯器一般分為前端和后端,編譯器前端主要負責預處理、詞法分析、語法分析、語法檢查、生成中間代碼等與底層計算機架構無關的工作。

后端以中間代碼為輸入,首先進行架構無關的代碼優化,之后針對不同的機器架構生成不同的機器碼,進行匯編鏈接。

圖片

Clang在iOS代碼編譯中主要用于C/C++、Objective-C的前端編譯工作,Clang屬于llvm編譯鏈的一部分,是llvm的前端編譯器。我們可以通過Clang開放出來的API接口對源碼進行自定義處理,如靜態代碼檢查、編譯流程控制、代碼查找提示補全等功能。Clang工具針對的對象正是AST——語法分析的結果,抽象語法樹(abstract syntax tree)。

一個AST的簡單例子:

圖片


Clang工具可以遍歷讀取AST上的每一個節點,并對節點對應的代碼進行查詢、修改操作。Clang插件更能夠直接集成進iOS的編譯流程中,控制輸出自定義的編譯告警、錯誤,控制編譯流程。

Part 02、Clang工具的選擇  

Clang大體包含三種不同的工具,libClang、Clang插件和libTooling。Clang插件和libTooling代碼類似,關于AST的所有信息都通過ASTContext上下文返回,并且對AST有完全的控制權。而libClang不同,它通過封裝好的穩定高層C API進行訪問,利用Cursor和Token遞歸遍歷,不能對AST進行完全控制。三者的優缺點如下:

1. libClanglibClang是針對Clang的穩定高層C語言封裝,當你無需對AST進行完全控制時,libClang是使用最簡單最合適的工具,應該首先考慮使用。其次,它只能作為獨立工具使用,不能嵌入當前項目的編譯流程。

  • 優點:可以使用XCode或Python進行集成開發,擁有穩定的高層API,使用簡單;
  • 缺點不能全量控制AST,不能嵌入編譯流程。

2. Clang插件Clang插件允許在代碼的編譯流程中額外插入一些操作,比如在編譯的過程中打印特殊字符或者警告,甚至中斷編譯。

  • 優點:能夠嵌入編譯流程開啟或中斷編譯,打印自定義告警和錯誤,并對AST進行全量控制;
  • 缺點:代碼編寫復雜,集成Clang插件會降低原本的編譯速度。?

3. libToolinglibTooling是一個基于C的用于編寫獨立工具的Clang工具,這點類似于libClang,但是它只能用C編寫并且功能更強大,對AST能夠全量控制。

  • 優點:對工程文件全量的處理,對AST的全量控制;
  • 缺點:不能嵌入編譯流程,對Clang的升級較為敏感,API不穩定。

這三個工具,從上到下,兼容性越來越差,對Clang升級變化越來越敏感,使用越來越復雜,但是功能越來越強大。

Part 03、Clang的具體應用 

在和家親中Clang的應用正在初步展開,我們使用libClang遍歷項目中的每一個源文件,找到項目中所有關于圖片名稱的字符串描述,圖片名稱往往以固定字符串的形式出現,從而判斷在我們的工程中,哪些圖片已經被使用而哪些已經沒有在用了,進行包的大小優化。

我們使用Clang插件對已在工程中定義的卻沒有在工程中使用的類、方法進行告警提示。方法是:首先利用Clang插件的VisitObjCInterfaceDecl和VisitObjCMethodDecl方法找出工程中所有的類定義和方法定義,再利用VisitObjCMessageExpr和VisitObjCSelectorExpr找到所有的消息發送,在iOS中方法的調用是通過消息發送的形式進行的,對于那些沒有在消息發送列表中出現的類和方法,我們認為這些類和方法未被使用,從而直接在編譯的時候進行告警提示。將插件在編譯器中集成即可使用。

圖片


責任編輯:龐桂玉 來源: 移動Labs
相關推薦

2020-11-03 10:32:22

編譯器工具代碼

2018-03-06 14:33:21

Windows微軟編譯器

2022-03-28 10:25:27

前端文件編譯器

2018-04-13 10:56:14

編譯器工具開發者

2016-12-12 14:19:59

LLVMClangApple

2017-09-01 11:35:37

C++語言編譯器

2010-01-18 10:34:21

C++編譯器

2010-01-21 09:11:38

C++編譯器

2009-08-10 17:12:54

C#編譯器

2017-03-20 18:01:55

編譯器匯編

2013-03-29 10:02:37

編譯器語言編譯開發

2010-03-23 11:17:16

Python 動態編譯

2010-10-20 13:43:37

C++編譯器

2019-08-06 08:20:07

編譯器工具開發者

2010-02-02 17:08:26

Python靜態編譯器

2010-02-02 17:08:26

Python靜態編譯器

2010-03-02 10:55:47

Linux SkyEy

2011-05-18 11:06:25

java編譯器

2010-09-16 15:57:25

Java編譯器

2013-12-30 11:21:31

Go編譯器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美高清视频 | av网站在线播放 | 欧美亚州 | 日韩国产三区 | 久久精品一区 | 国产精品国产a级 | 全免费a级毛片免费看视频免 | 中文字幕日韩欧美一区二区三区 | 国产精品一区二区福利视频 | 91精品国产一区二区三区香蕉 | 亚洲一视频 | 国产美女黄色片 | 日韩资源| 午夜久久久久久久久久一区二区 | 国内精品视频 | 国产在线麻豆精品入口 | 久久av网站 | 久久91 | 国产一区中文字幕 | 亚洲精品国产成人 | 一级全黄少妇性色生活免费看 | 久久免费观看一级毛片 | 欧美日韩三级 | 中文字幕一区二区三区精彩视频 | 欧美日韩国产一区二区三区 | 亚洲乱码一区二区三区在线观看 | 成人精品久久日伦片大全免费 | 国产精品成av人在线视午夜片 | 国产日韩精品视频 | 99久久婷婷国产精品综合 | 91精品国产综合久久香蕉麻豆 | 一区二区三区高清 | 成av人电影在线 | 亚洲精品久久久 | 国产一级片| 最新国产精品视频 | 欧美理论片在线观看 | av片在线观看网站 | 好姑娘影视在线观看高清 | 国产欧美精品一区二区 | 国产欧美一区二区三区在线播放 |