首页
学习
活动
专区
圈层
工具
发布

转载:【AI系统】传统编译器发展

什么是编译器典型的编译型程序语言有 C 和 C++,以 C 语言为例:C 语言代码由固定的词汇按照固定的格式组织起来,简单直观,程序员容易识别和理解,但是对于 CPU,只认识有限的二进制形式的指令。...:常用 GUN 组织开发的 GCC,很多 Linux 发行版都自带 GCC;Mac:常用的是 LLVM/Clang,被集成在 Xcode 中代码语法正确与否是由编译器来检查,即编译器可以 100% 保证开发者编写的程序代码从语法上是正确...最后是编译器的几个重要的特点:编译器读取源程序代码,输出可执行机器码,即把开发者编写的代码转换成 CPU 等硬件能理解的格式将输入源程序转换为机器语言或低级语言,并在执行前并报告程序中出现的错误编译的过程比较复杂...GCC 是参照 GPL(GNU 公共许可证)授权的,而 Clang/LLVM 是 Apache 许可授权的。比较 GCC 和 Clang 的许可授权,最专业的是律师。...Clang 是基于 LLVM 的主要支持 C、C++、Objective-C 和 Objective-C++ 编译器,具有快速的编译速度和低内存占用,Clang 的底层框架 LLVM 具有足够的可扩展性

39600

【AI系统】传统编译器发展

什么是编译器典型的编译型程序语言有 C 和 C++,以 C 语言为例:C 语言代码由固定的词汇按照固定的格式组织起来,简单直观,程序员容易识别和理解,但是对于 CPU,只认识有限的二进制形式的指令。...:常用 GUN 组织开发的 GCC,很多 Linux 发行版都自带 GCC;Mac:常用的是 LLVM/Clang,被集成在 Xcode 中代码语法正确与否是由编译器来检查,即编译器可以 100% 保证开发者编写的程序代码从语法上是正确...最后是编译器的几个重要的特点:编译器读取源程序代码,输出可执行机器码,即把开发者编写的代码转换成 CPU 等硬件能理解的格式将输入源程序转换为机器语言或低级语言,并在执行前并报告程序中出现的错误编译的过程比较复杂...GCC 是参照 GPL(GNU 公共许可证)授权的,而 Clang/LLVM 是 Apache 许可授权的。比较 GCC 和 Clang 的许可授权,最专业的是律师。...Clang 是基于 LLVM 的主要支持 C、C++、Objective-C 和 Objective-C++ 编译器,具有快速的编译速度和低内存占用,Clang 的底层框架 LLVM 具有足够的可扩展性

39910
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Objective-C笔记

    因此本篇文章作为简单学习ObjC的记录,不会涉及太深入的语法特性,简而言之就是——够用就行。 什么是Objective-C Objective-C,简称OC,是一种通用、高级、面向对象的编程语言。...它扩展了标准的ANSI C编程语言, 将Smalltalk式的消息传递机制加入到ANSI C中。当前主要支持的编译器有GCC和Clang(采用LLVM作为后端)。...现在Objective-C与Swift是OS X和iOS操作系统、及与其相关的API、Cocoa和Cocoa Touch的主要编程语言。 Objective-C是C语言的严格超集。...C++强制要求所有的方法都必须有对应的动作,且编译期绑定使得函数调用非常快速。 缺点是仅能借由virtual关键字提供有限的动态绑定能力。...@synthesize关键字来实现,它由属性的声明自动的产生一对访问方法。

    1.3K40

    LLVM简介

    由上图可知,LLVM架构下,不同的前端和后端使用统一的中间代码LLVM InterMediate Representation(LLVM IR) 如果需要支持一门新的编程语言,只需要实现一个新的前端...相比之下,GCC的前端后端没有实现分离,前端后端耦合在了一起,所以GCC为了支持一门新的编程语言,或者为了支持一个新的硬件设备,就变得特别困难。...LLVM现在被作为实现各种静态和运行时编译语言的通用基础结构(GCC家族、Java、.NET、Python、Ruby、Scheme、Haskell、D等) 什么是Clang Clang是LLVM的项目的子项目...它是LLVM架构下的C/C++\Objective-C的编译器前端。诞生之初是为了替代GCC,提供更快的编译速度。 相比较于GCC,Clang具有如下优点: 编译速度快。...流程如下: image.png 虽然Clang是LLVM的前端,但是LLVM的前端不只是Clang。Clang只是为C、C++、Objective-C设计的LLVM的编译器前端。

    10.1K11

    xcode中三种编译器的区别

    在xcode中有三种编译器供我们选择,分别是GCC、LLVM GCC、LLVM compliler 三者区别 GCC :是一套由 GNU 开发的编程语言编译器。...编译前端和后端皆使用GCC LLVM GCC:编译前端使用GCC,后端使用LLVM LLVM compliler :编译前端使用Clang,后端使用LLVM 为什么存在三种编译器 苹果公司最开始使用GCC...编译器 为了实现对 Objective-C 新特性的支持,苹果公司结合LLVM改进GCC,从而衍生出了一个GCC分支,也就是LLVM GCC 由于LLVM GCC的笨重和局限性,苹果公司从零开始开发了一套自己的编译前端系统...Clang,配合LLVM,就有了LLVM GCC Clang的优势 相比GCC而言: 编译速度快,占用内存小 模块化设计,易于扩展,易于IDE集成 错误提示人性化 产出小 值得一提的是,Android...NDK从r18开始就已经抛弃GCC,转而采用Clang编译,Clang未来可期 乱码三千-欢迎您的关注

    1.3K10

    编译原理基础

    Contents 1 GCC 是什么 2 gcc 与 g++ 的区别 3 Clang 是什么 4 MinGW是什么 5 GTK 是什么 6 GNU 是什么 7 GNU工具链是什么 GCC 是什么 GNU...Clang 是什么 Clang(发音为/ˈklæŋ/类似英文单字clang) 是一个C、C++、Objective-C和Objective-C++编程语言的** 编译器前端 **。...它采用了 LLVM 作为其后端,而且由 LLVM2.6 开始,一起发布新版本。它的目标是提供一个GNU编译器套装(GCC)的替代品,支持了GNU编译器大多数的编译设置以及非官方语言的扩展。...GNU工具链是什么 GNU工具链(英语:GNU toolchain)是一个包含了由 GNU 计划所产生的各种编程工具的集合,其组成包括我们非常熟悉的 GCC 编译器,由自由软件基金会负责维护工作。...3 等其它平台直接使用或进行了移植。

    2.7K10

    APP生成与运行(一)

    一、编译 汇编 CPU 由上亿个晶体管组成,在运行的时候,单个晶体管只能根据电流的流通或关闭来确认两种状态,我们一般说 0 或 1,根据这种状态,人类创造了二进制,通过二进制编码我们可以表示所有的概念。...LLVM 是一个涵盖和开发一系列紧密结合的低级工具链组件(例如,汇编器,编译器,调试器等)的综合项目 传统的编译器通常分为三个部分,前端(frontEnd),优化器(Optimizer)和后端(backEnd...Clang Clang 是一个C、C++、Objective-C和Objective-C++编程语言的编译器前端。它采用了LLVM作为其后端。...Clang是2005年由苹果电脑发起,是LLVM编译器工具集的前端(front-end),目的是输出代码对应的抽象语法树(Abstract Syntax Tree, AST),并将代码编译成LLVM Bitcode...Clang本身性能优异,其生成的AST所耗用掉的内存仅仅是GCC的20%左右,测试证明Clang编译Objective-C代码时速度为GCC的3倍,还能针对用户发生的编译错误准确地给出建议。

    1.5K10

    Hades:移动端静态分析框架

    以上图为例,代码块区域是用 Objective-C 和 TypeScript 编写的一个简单条件语句源码,下面是其对应的抽象语法结构表达。...现有方案中不少 Lint 工具便是基于 Clang 的,Clang 包含了以下特点: 编译速度快:Clang 的编译速度远快于 GCC。...占用内存小:Clang 生成的 AST 所占用的内存是 GCC 的五分之一左右。 模块化设计:Clang 采用基于库的模块化设计,易于 IDE 集成及其他用途的重用。...通过 Hades 接口封装,我们无需清楚底层模型是如何生成的,在这一层我们可以制作 Lint 或者其它监控、分析工具。 为什么 Hades 的架构设计是这样的呢?下面我们将一一道来。...它能够表达一个编译单元定义了哪些接口声明、实现了哪些类/类别的方法、定义和展开了哪些宏定义、对象的方法调用和函数使用情况等等。

    2.4K20

    Hades:移动端静态分析框架

    [AST 描述] 以上图为例,代码块区域是用 Objective-C 和 TypeScript 编写的一个简单条件语句源码,下面是其对应的抽象语法结构表达。...占用内存小:Clang 生成的 AST 所占用的内存是 GCC 的五分之一左右。 模块化设计:Clang 采用基于库的模块化设计,易于 IDE 集成及其他用途的重用。...本章节主要内容包含:Hades 的整体架构、为什么要定义语义模型、定义什么样的语义模型、如何输出语义模型以及模型的序列化和持久化。...通过 Hades 接口封装,我们无需清楚底层模型是如何生成的,在这一层我们可以制作 Lint 或者其它监控、分析工具。 为什么 Hades 的架构设计是这样的呢?下面我们将一一道来。...它能够表达一个编译单元定义了哪些接口声明、实现了哪些类/类别的方法、定义和展开了哪些宏定义、对象的方法调用和函数使用情况等等。

    3.2K30

    iOS 代码染色原理及技术实践

    Clang Clang 是 LLVM 的子项目,是 C、C++ 和 Objective-C 的编译器。...Clang 在整个 Objective-C 编译过程中扮演了编译器前端的角色,同时也参与到了 Swift 编译过程中的 Objective-C API 映射阶段。...以 Xcode 为例,Clang 编译 Objective-C 代码的速度是 Xcode 5 版本前使用的 GCC 的 3 倍,其生成的 AST 所耗用掉的内存仅仅是 GCC 的五分之一左右。...GCOV GCOV 是一个 GNU 的本地覆盖测试工具, 伴随 GCC 发布,配合 GCC 共同实现对 C 或者 C++ 文件的语句覆盖和分支覆盖测试。是一个命令行方式的控制台程序。...Lines 是指令在代码文件中行数。 GCDA gcda 是由加了 -fprofile-arcs 编译参数的编译后的文件运行所产生的,它包含了弧跳变的次数和其他的概要信息。

    1.9K10

    Clang与LLVM的关系

    我们可以认为LLVM是一个完整的编译器架构,也可以认为它是一个用于开发编译器、解释器相关的库。在理解LLVM时,我们可以认为它包括了一个狭义的LLVM和一个广义的LLVM。...接下来,简要的介绍一下Clang。 Clang是一个C++编写、基于LLVM、发布于LLVM BSD许可证下的C/C++/Objective-C/Objective-C++编译器。...那么为什么已经有了GCC还要开发Clang呢?Clang相比于GCC有什么优势呢? 其实,这也是Clang当初在设计开发的时候所主要考虑的原因。...Clang是一个高度模块化开发的轻量级编译器,它的编译速度快、占用内存小、非常方便进行二次开发。 最后,我们大概讲一讲LLVM和Clang的关系。...Clang其实大致上可以对应到编译器的前端,主要处理一些和具体机器无关的针对语言的分析操作;编译器的优化器部分和后端部分其实就是我们之前谈到的LLVM后端(狭义的LLVM);而整体的Compiler架构就是

    1.9K12

    iOS编译简析

    LLVM 历史 早期 iOS 选用的是当时一家独大的 GCC 编译器作为 OC 语言的前端,但是随着时间的推移,Apple 为 OC 增加了很多特性,想要 GCC 给与实现,但是 GCC 却并没有支持,...iOS 在 Xcode 5 版本前使用的是 GCC ,在 Xcode 5 中将 GCC 彻底抛弃,替换为了 LLVM ,这期间也是慢慢过渡过来的,由开始使用 GCC 编译->GCC 与 LLVM 共存-...,那么只需要实现一个新的后端,优化阶段是一个通用的阶段,它针对的是统一的 LLVM IR,不论是支持新的编程语言,还是支持新的硬件设备,都不需要对优化阶段做修改。...主要子项目: LLVM 核心库 编译器前端 Clang LLDB libc ++和 libc++ lld Clang Clang 是 LLVM 项目的一个子项目,是 C 系列(C、C++、OC)的编译器前端...负责导入 Clang 模块,并将导出的 C 或 Objective-C API 映射到相应的 Swift API 中。

    1.8K20

    从预编译的角度理解Swift与Objective-C及混编机制

    本文从预编译的基础知识入手,由浅至深的介绍了 Objective-C 和 Swift 的工作机制,并通过这些机制来解释混编项目中使用到的技术和各种参数的作用,由此来指导开发者如何进行混编。...简单来说,你可以把它理解为一种对组件的描述,包含了对接口(API)和实现(dylib/a)的描述,同时 Module 的产物是被独立编译出来的,不同的 Module 之间是不会影响的。...打破砂锅问到底 关于第一个问题 对于未开启 Clang Module 特性的组件,Clang 是通过怎样的机制查找到头文件的呢?在查找系统头文件和非系统头文件的过程中,有什么区别么?...为了更好的解释 Swift 和 Objective-C 是如何寻找到彼此的方法声明的,我们这里引入一个例子,在这个例子由三个部分组成: 第一部分是一个 ViewController 的代码,它里面包含了一个...Objective-C API 就会被转换成更简约的形式。

    2.5K32

    envoy filter 开发实践系列 3:编译 envoy 的其它方式

    前言 前天早上开会还说这个 envoy 1.16 不知道什么时候发布,我们需要的几个新特性都在这个版本中,今天一看已经发布了,所以今天又测试了一波 1.16 上的例子。 2....使用官方 docker 编译镜像来编译 从 envoy 1.16 开始发现 gcc 7.5 的版本已经无法编译通过了,从其官网推荐来说是要 gcc 9 以上或者要 clang 10 以上。...2.1 查看 docker 镜像 可以用于编译的是 envoyproxy/envoy-build-ubuntu 这个镜像。...版本 进入镜像后可以看一下 gcc 的版本号,这个镜像使用的是 9.3 的 gcc。...编译 envoy 1.16 接下来就来编译吧,编译过程和之前介绍的大体差不多,但是这里我们是要把 envoy 的版本 check 到 1.16 上去。

    2.2K10

    认识 LLVM

    JVM 也是该模型的一个实现,它使用 Java 字节码作为前端和优化器之间的接口。...而如果按传统设计,前端和后端实际是耦合在一起,实现新的源语言或支持新的目标架构将需要从头开始,要支持 N 目标和 M 源语言将需要 N*M 个编译器。...LLVM 提供了 Clang 作为官方的编译器前端,同时支持 C、C++、Objective-C 和 Objective-C++ 语言。...主要来自 Apple 公司的赞助支持,Clang 的目的用以取代 GCC 系统底下的 C / Objective-C 编译器,在当代的系统,它较为容易与集成开发环境(IDE)集成,而且对于线程有更好的支持...许多 GCC 的前端也已经可以与其运行,LLVM目前支持 Ada、C语言、C++、D语言、Fortran、Haskell、Julia、Objective-C、Rust 及 Swift 等语言的编译。

    1.5K20
    领券