Chinaunix首页 | 论坛 | 博客
  • 博客访问: 52706
  • 博文数量: 6
  • 博客积分: 66
  • 博客等级: 民兵
  • 技术积分: 78
  • 用 户 组: 普通用户
  • 注册时间: 2012-04-02 09:49
文章分类

全部博文(6)

文章存档

2013年(4)

2012年(2)

我的朋友

分类: C/C++

2012-09-12 17:03:23

一、Clang简介

        简单来说,Clang是一个编译器,目前用来编译C、C++、Objective-C语言。
        更进一步来说,Clang只是一个编译器前端,其将上述的C类语言编译成一种“汇编语言(中间语言)”。接着,通过LLVM(Low Level Virtual Machine)作为后端,将这种“汇编语言”编译成针对不同机器的二进制机器语言。
        Clang是在类BSD许可证下发布,所以不必担心像GPL下发布的GCC那样,不能在商业软件中使用。

二、Clang/LLVM的特性

真正的自由!
        Clang是在类BSD许可证下发布,所以不必担心像GPL下发布的GCC那样,不能在商业软件中使用。而GPL的“自由”,以我的观点,就是象牙塔里的“自由”。而真正推动社会进步的力量,其中很重要的一步是经济力量。虽然GPL没有禁止软件的商业用途,但是其强制开放源码的策略,让许多试图在部分闭源的软件中使用开源软件公司望而却步。
        当然,这仅仅从商业上的软件重用的角度来看待问题的。在刺激和保障开源软件的连续性上,GPL的用途是不可磨灭的。

方面的学习
       GCC的参与者众多,代码参差不齐,开发年限很长,因而庞大而臃肿,对于试图初学编译器相关知识的朋友来说,阅读GCC的源码会让人有点不知所措。而Clang却轻盈许多,代码简单易懂,占用内存小。
        根据Apostolou Dimitrios于2011年7月5日在GCC开发邮件列表中GSOC-Student Roundup的邮件中所说的一段话:“对我来说,阅读GCC代码库已变得非常困难。事实上这是我唯一所知道的随着时间的流逝而变得越来越复杂的项目”(译自维基百科)
        如果想学习编译器的相关知识,不妨尝试阅读Clang/LLVM的代码。

相比于 GCC,Clang 具有如下优点:(摘自结构化编译器前端 Clang 介绍
  • 编译速度快:在某些平台上,Clang 的编译速度显著的快过 GCC。
  • 占用内存小:Clang 生成的 AST 所占用的内存是 GCC 的五分之一左右。
  • 模块化设计:Clang 采用基于库的模块化设计,易于 IDE 集成及其他用途的重用。
  • 诊断信息可读性强:在编译过程中,Clang 创建并保留了大量详细的元数据 (metadata),有利于调试和错误报告。
  • 设计清晰简单,容易理解,易于扩展增强。与代码基础古老的 GCC 相比,学习曲线平缓。
当前 Clang 还处在不断完善过程中,相比于 GCC, Clang 在以下方面还需要加强:
  • 支持更多语言:GCC 除了支持 C/C++/Objective-C, 还支持 Fortran/Pascal/Java/Ada/Go 和其他语言。Clang 目前支持的语言有 C/C++/Objective-C/Objective-C++。
  • 加强对 C++ 的支持:Clang 对 C++ 的支持依然落后于 GCC,Clang 还需要加强对 C++ 提供全方位支持。
  • 支持更多平台:GCC 流行的时间比较长,已经被广泛使用,对各种平台的支持也很完备。Clang 目前支持的平台有 Linux/Windows/Mac OS。
另外,FreeBSD10计划以Clang来代替GCC

三、Clang使用

        写好一个C语言的Hello World之后(文件名为test.c)。

点击(此处)折叠或打开

  1. #include <stdio.h>
  2.  int main(int argc, char **argv)
  3.  {
  4.     printf("hello world\n");
  5.     return 0;
  6.  }
        在对应的文件夹下(假设已经安装好Clang,Linux各个发行版安装Clang很简单的,目前我是在Linux下做的,关于Windows下Clang的编译安装,到时候我会写个教程),输入:

点击(此处)折叠或打开

  1. clang test.c
        就可以编译出常见的a.out了,这时输入a.out就可以在终端显示出“Hello world了”。

四、最重要的一点

        撇开编译器上的常见用途。Clang的优势有:拥有清晰的错误提示;模块化设计,方便二次开发(非常重要);可与IDE完美结合!

目前就先写到这,有空我再补充。
       
阅读(22965) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~