clangC/C++编译器
Clang 是一个 C++ 编写、基于 LLVM、发布于 LLVM BSD 许可证下的 C/C++/Objective C/Objective C++ 编译器,其目标(之一)就是超越 GCC。
Clang 开发事出有因,Wiki 介绍如下:
Apple 使用 LLVM 在不支持全部 OpenGL 特性的 GPU (Intel 低端显卡) 上生成代码 (JIT),令程序仍然能够正常运行。之后 LLVM 与 GCC 的集成过程引发了一些不快,GCC 系统庞大而笨重,而 Apple 大量使用的 Objective-C 在 GCC 中优先级很低。此外 GCC 作为一个纯粹的编译系统,与 IDE 配合很差。加之许可证方面的要求,Apple 无法使用修改版的 GCC 而闭源。于是 Apple 决定从零开始写 C family 的前端,也就是基于 LLVM 的 Clang 了。
Clang 的特性:
- 快:通过编译 OS X 上几乎包含了所有 C 头文件的 carbon.h 的测试,包括预处理 (Preprocess),语法 (lex),解析 (parse),语义分析 (Semantic Analysis),抽象语法树生成 (Abstract Syntax Tree) 的时间,Clang 是 Apple GCC 4.0 的 2.5x 快。(2007-7-25)
- 内存占用小:Clang 内存占用是源码的 130%,Apple GCC 则超过 10x。
- 诊断信息可读性强:我不会排版,推荐去网站观看。其中错误的语法不但有源码提示,还会在错误的调用和相关上下文的下方有~~~~~和^的提示,相比之下 GCC 的提示很天书。
- GCC 兼容性。
- 设计清晰简单,容易理解,易于扩展增强。与代码基础古老的 GCC 相比,学习曲线平缓。
- 基于库的模块化设计,易于 IDE 集成及其他用途的重用。由于历史原因,GCC 是一个单一的可执行程序编译器,其内部完成了从预处理到最后代码生成的全部过程,中间诸多信息都无法被其他程序重用。Clang 将编译过程分成彼此分离的几个阶段,AST 信息可序列化。通过库的支持,程序能够获取到 AST 级别的信息,将大大增强对于代码的操控能力。对于 IDE 而言,代码补全、重构是重要的功能,然而如果没有底层的支持,只使用 tags 分析或是正则表达式匹配是很难达成的。
评论
wieldylccC编译器 c++编译器
用c++重构了lcc源代码,去掉了lcc中支持多种处理器的模式,仅支持x86一种。项目目标是编译器的源代码是易于理解的,编译出的asm文件也是易于理解的。目前项目状态是完成了lcc源代码向c++的改造
wieldylccC编译器 c++编译器
0
AsmJitC/C++ 编译器
AsmJit是一个完整的JIT(Just-In-Time,运行时刻)的针对C++语言的汇编器,可以生成兼容x86和x64架构的原生代码,不仅支持整个x86/x64的指令集(包括传统的MMX和最新的AV
AsmJitC/C++ 编译器
0
GCCC/C++ 编译器
GCC(GNUCompilerCollection,GNU编译器套装),是一套由GNU开发的编程语言编译器。它是一套以GPL及LGPL许可证所发行的自由软件,也是GNU计划的关键部分,亦是自由的类Un
GCCC/C++ 编译器
0
FlasCCFlash的C++编译器
代号Alchemy的FlashruntimeC++编译器今天正式对外发布正式beta版本:Flascc!对于有C++工作流的端游团队可以用此技术编译你的C项目为SWF!这是端游进军页游的捷径与利器!F
FlasCCFlash的C++编译器
0
Cheerp用于 Web 的 C++ 编译器
Cheerp是一个基于LLVMmonorepo的 C++ 编译器,允许将C/C++代码编译为WebAssembly和JavaScript。Cheerp基于并集成到LLVM/clang基础架构,具有许多
Cheerp用于 Web 的 C++ 编译器
0
Zapcc基于 Clang 的 C++ 编译器
Zapcc是基于LLVM/Clang的缓存型C++编译器,旨在执行更快的编译。Zapcc在client-server架构中使用in-memory技术来编译缓存,它会记住运行之间的所有编译信息。Zapc
Zapcc基于 Clang 的 C++ 编译器
0