首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    微信团队分享:极致优化,iOS版微信编译速度3倍提升的实践总结

    如果继续优化,得从编译器下手。正如我们平常做的客户端性能优化,在优化之前,先分析原理,输出每个地方的耗时,针对耗时做相对应的优化。...在 Xcode,C/C++/ObjC 的编译器是 Clang(前端)+LLVM(后端),简称 Clang。...5.2 分析耗时 Clang/LLVM 编译器是开源的,我们可以从官网下载其源码,根据上述编译过程,在每个编译阶段埋点输出耗时,生成定制化的编译器。...头文件定义的类也包含进 AST 中。...7、未来展望 期待公司的蓝盾分布式编译 for ObjC;另外可以把业务代码模块化,项目文件按模块加载,目前 kinda/小程序/mars 在很好的实践中。

    2.7K43

    C++反射 - 反射信息的自动生成

    , 还是给我们的C# bridge工具的开发带来了比较多的便利, 所以在C#中, 我们也尝试寻求相关的模板语言解决方案, 最终选择的是被广泛使用的Liquid模板语言....当从某个Cursor中解析到一个Type, 很多时候我们需要层层递进的分析, 才能最终解析出它实际的类型....API, 对应的Api是clang_visitChildren, 在ClangSharp中, 我们最终是直接使用CXCursor.VisitChildren()这个成员方法来完成对相关AST节点的子节点的访问的.... 8.3 一个C#版-ast-dump的实现 熟悉clang的同学可能知道clang是可以通过命令行参数来支持AST输出的: clang -cc1 -ast-dump your_file.c clang...-cc1 -ast-view your_file.c clang -cc1 -ast-print your_file.c 在正常的编译流程中, 我们很少需要对AST进行分析和处理, 基本很少使用相关功能

    5.2K20

    ASTMatcher分析函数调用链(上)

    这样通过替换xcode中clang编译器和加载clang插件分析AST,可以完全控制clang AST。编写插件有三步:自定义类继承、重载、注册插件。...3、ASTMatcher ASTMatcher:我们在写clang插件过程中,最大的痛点是在AST阶段快速找到自己想要的节点,RecursiveASTVisitor的方式需要递归遍历、逐层查找,不仅代码冗余...:允许用户编写一个程序来匹配AST节点并能通过访问节点的c++接口来获取该AST节点的属性、源位置等任何信息,其主要由宏与模板驱动,用法和函数式编程类似,其可实现简单精准高效的匹配。...在官网AST Matcher Reference中可以查看clang提供的所有不同类型的匹配器以及说明,主要分为三类(取自【clang】ASTMatcher & clang-query的描述): Note...ASTMatcher执行命令中必须加上参数 -- ,不然会报compilation-database:No such file or directory的错,或者可以通过-p参数为ASTMatcher加载编译数据库

    7.2K81

    C++反射:反射信息的自动生成!

    , 还是给我们的C# bridge工具的开发带来了比较多的便利, 所以在C#中, 我们也尝试寻求相关的模板语言解决方案, 最终选择的是被广泛使用的Liquid模板语言.  ...当从某个Cursor中解析到一个Type,很多时候我们需要层层递进的分析,才能最终解析出它实际的类型。...AST遍历-CXCursor的VisitChildren()使用 在libclang中,我们更多的通过callback方式来访问c++的AST,在 ClangSharp中也同样支持这种方式,我们先来看一下相关...API,对应的Api是clang_visitChildren,在ClangSharp中,我们最终是直接使用CXCursor.VisitChildren()这个成员方法来完成对相关AST节点的子节点的访问的...(三)一个C#版-ast-dump的实现 熟悉clang的同学可能知道clang是可以通过命令行参数来支持AST输出的: clang -cc1 -ast-dump your_file.cclang

    3.4K30

    微信安全下一代特征计算引擎的探索与实践

    作者:remyliu 针对业务问题,本文研究了多种计算引擎实现方案,并基于Clang/LLVM实现了一个C/C++解释器,同时还探讨了相关的Clang编译技术在实现过程中的应用。...Action是一个编译步骤,对应Clang Driver流水线中的阶段,可参考Clang文档 整个Clang Driver流水线按从Action角度来看如下: PreprocessJobAction:...最右边Loc显示了Token在文件中的位置,其中"factorial"在第1行第5列。...Clang的语义检查与一般方法不同,常规方案方法是在生成抽象语法树AST之后,遍历AST进行检查。而Clang在AST节点生成过程中即时检查语义。...Clang开发示例 在探索Clang的过程中,本人收集和开发了一些Clang开发用例llvm-example,主要是AST的遍历和修改,可以通过GitHub获取代码,编译和运行。

    28810

    斩获 3.4k+ Star 的 C++ Insights:用编译器的视角看源码!

    当然,至少对于 Clang 来说,是有 AST(抽象语法树)转储功能的,我们可以用 Compiler Explorer 等工具查看编译器从 C++ 源代码片段生成的代码。...请记住,C++ Insights 是基于 Clang 及其对 AST 的理解而建立的。 3、如何构建? C++ Insights 可以在 Clang 源代码树内部或外部进行构建。...(3)在 Clang 外部构建 你需要在搜索路径中安装 Clang。...(4)在 Clang 内部构建 在 Clang 源代码树中 C++ Insights 最简单的方法,是使用 LLVM_EXTERNAL_PROJECTS 选项。...这些路径是二进制文件中的硬编码,似乎来自 C++ Insights 的编译器。要解决这个问题,可查看 scripts/getinclude.py,这个脚本会尝试从编译器中收集系统包含路径。

    41610

    iOS编译简析

    前言 一般的编译器都是由三部分构成.从源码到机器码基本上都要经过这三部分. 编译器前端(FrontEnd): 词法分析,语法分析,语义分析,将源代码抽象为语法树 AST,继而生成中间代码 IR。...从 GCC 到 LLVM 以及大部分编译器都是这种结构。...AST 所占用的内存是 GCC 的五分之一左右 模块化设计:Clang 采用基于库的模块化设计,易于 IDE 集成及其他用途的重用 诊断信息可读性强:在编译过程中,Clang 创建并保留了大量详细的元数据...负责导入 Clang 模块,并将导出的 C 或 Objective-C API 映射到相应的 Swift API 中。...Xcode 的编译设置里也可以设置优化级别-01,-03,-0s;优化级参数位于参数位于Build Settings -> Apple Clang - Code Generation ->Optimization

    1.4K20

    Hades:移动端静态分析框架

    这种树状的结构表达,省略了一些细节(比如:没有生成括号节点),从图中的这种映射关系中我们也可以发现: 源码的语法结构是可以通过明确的数据结构表示的。 大多数编程语言都可以用相似的 AST 表达的。...在使用 Clang 的学习过程中,基本的概念便是表示 AST 的节点类型,这里重要的几点是: ASTContext。...在静态分析中,更多的是对象的错误方法调用和非法的继承/复写关系等问题,即便具备良好的编码规范也会疏忽。这里乍一看没太大区别,但是从着重点来说,Hades 的设计理念上会存在本质区别。 ?...创建 HadesDriver 在创建驱动器之前,可以使用 Clang 提供的 CommonOptionsParser 类,它将负责解析与编译数据库和输入相关的命令行参数,然后将其作为驱动器的输入。...在接入 HadesLint 的项目后,我们将项目以 Pod 为单位,从 Maven 中读取缓存模型 Zip 包。

    2.2K20

    Hades:移动端静态分析框架

    这种树状的结构表达,省略了一些细节(比如:没有生成括号节点),从图中的这种映射关系中我们也可以发现: 源码的语法结构是可以通过明确的数据结构表示的。 大多数编程语言都可以用相似的 AST 表达的。...在使用 Clang 的学习过程中,基本的概念便是表示 AST 的节点类型,这里重要的几点是: ASTContext。...在静态分析中,更多的是对象的错误方法调用和非法的继承/复写关系等问题,即便具备良好的编码规范也会疏忽。这里乍一看没太大区别,但是从着重点来说,Hades 的设计理念上会存在本质区别。...创建 HadesDriver 在创建驱动器之前,可以使用 Clang 提供的 CommonOptionsParser 类,它将负责解析与编译数据库和输入相关的命令行参数,然后将其作为驱动器的输入。...HadesLint 的实现细节如下图所示: [HadesLint 实现] 在接入 HadesLint 的项目后,我们将项目以 Pod 为单位,从 Maven 中读取缓存模型 Zip 包。

    2.9K30

    Objective-C代码规范检测

    1、抽象语法树AST 在编译过程中,第三步语义分析(Semantic Analysis):验证语法是否正确,然后将所有节点组成抽象语法树 AST 。...基于AST的不依赖具体文法和不依赖语言细节的特点,使得其在很多领域有广泛的应用,比如浏览器,智能编辑器,编译器。 while b !...AST如下图所示: 通过上面的语法树可以看到其描述代码的具体结构,而在Clang对代码编译时会进入一个语法树的解析阶段,则这个阶段中语法树的每个节点都会被遍历到,因此借助此阶段可以检测程序中所有代码的书写格式是否符合规范...> X("VisitAST", "My plugin”);就可以把插件注册到Clang中。.../AST/AST.h" #include "clang/AST/ASTConsumer.h" #include "clang/ASTMatchers/ASTMatchers.h" #include "clang

    1.4K30

    【Rust日报】 2019-05-08:Rust并发的实践研究

    他们的代码库concache在GitHub上公开,是Rust语言中最快的并发HashMap之一,可以帮助降低并发程序中的瓶颈。...来构建待生成测试代码的模板(TokenSteam) 将这些模板填充以后从TokenSteam转称字符串。 使用fs::write写到指定的目录文件中。...x12pp Read More ---- 「讨论」Rust和C编译器优化问题 #c 该reddit帖子作者用C和Rust分别写了一个同样功能的示例,发现rust编译器不如clang编译器优化的彻底,clang...Read More ---- app-route: 将app的路由作为一种强类型结构 #route 一个应用程序的路由由Url Path和查询参数组成。...编码可以构建为webdev工具链的一部分,或者由代理或CDN注入,因此可以在不更改原始网站的情况下自动提高最终用户的性能。 此编码目前在JavaScript TC39标准化过程中。

    1.1K30

    腾讯云代码分析—Clang-Tidy-16工具配合编译数据库使用

    -16是一款强大的C++静态分析工具,能够自动检测代码中的问题并提供修复建议,为了更高效通常会结合编译数据库(Compile Database)来使用。...Clang-Tidy-16是基于Clang提供的AST(抽象语法树)框架实现的。通过遍历AST来进行代码分析。...AST是源代码的一种抽象表示,将代码转化为一棵语法树,帮助分析器理解代码的结构、语义和逻辑。在默认情况下,Clang-Tidy-16会直接使用Clang内置的AST来进行代码分析。...编译数据库使用说明 ▼ 使用方式: Clang-Tidy-16工具在执行时可以指定文件的编译命令,如下: clang-tidy test.cpp -- -Imy_project/include -DMY_DEFINES...对于一个项目来说,可以生成一个compile_commands.json文件(包含每个文件的编译命令)如下: 然后在工具运行时使用 -p 参数指定该文件,对每个文件分析时,会自动寻找对应的编译命令,这种指定了项目编译命令的方式

    17810

    iOS底层原理之LLVM & Clang

    2006年Chris Lattner加盟Apple Inc.并致力于LLVM在Apple开发体系中的应用。Apple也是LLVM计划的主要资助者。...在词法分析的基础上,将单词序列组合成各类语法短语,如“语句”,“表达式”等,然后将所有节点组成抽象语法树(Abstract Syntax Tree,AST)。...也可以在 xcode 中设置:target -> build Setting -> Optimization Level 2.5: bitCode Xcode 7以后,如果开启bitcode,苹果会对...因为这个函数是从外部引入的,需要将使用的对应的库链接进来。...同时还多了一个dyld_stub_binder符号,其实只要链接就会有这个符号,这个符号是负责动态绑定的,在Mach-O进入内存后(即执行),dyld立刻将libSystem中dyld_stub_binder

    1.5K10
    领券