`
hqs7636
  • 浏览: 220888 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

llvm 简介

阅读更多
原标题: llvm/clang将把FreeBSD带向何方?
http://www.linuxsir.org/bbs/showthread.php?t=353921


对于FreeBSD最近的发展,最引人注目、最让人有所期待、最让人遐想的就是在将来的某个版本里将引入llvm/clang。这是一个什么东西?为什么值得期待?请听我慢慢地扯。

llvm/clang是一个编译器,llvm是类似虚拟机的东西(www.llvm.org),这个虚拟机不是类似java或者说python的VM,llvm的目的不是运行而是编译生成代码。也就是说这个llvm是编译器的后端。clang呢,(clang.llvm.org)简单来说就是llvm一个C语言家族的前端,它的责任就是把C家族语言翻译成llvm认识的中间代码,然后再由llvm后端生成具体架构的汇编代码,最后由系统中的汇编器、连接器生成某一个架构下的可执行文件。

说实话,任何编译器不都是这个套路吗?分前端后端,代码生成,也许还有代码优化, llvm到底有什么不同?最主要的是llvm提供的是函数库,一组较好定义的接口,使得编译器前端的设计相当的傻瓜。我们可以为Perl写一个llvm的前端,它就可以把perl脚本编译成本地二进制代码运行;给python写个前端,它一样可以编译。不要以为这个前端有多么的复杂,通过llvm比较合理的接口,这个工作不是很难。

所以总得来说llvm/clang的架构要优于GCC的架构(其实写个GCC的语言前端也不是什么大事,但是你必须了解GCC内部的机制和细节,并不能像llvm那样调用几个库函数就把事情给搞定。),就因为这个优势,FreeBSD准备迁移到llvm/clang上面。怎么可能? 不要太天真了。一个庞大的操作系统要迁移到另外一个还在开发之中的编译器上,不是一件容易的事情。这么做的原因其实是GNU把后续开发的GCC变成GPLv3了,BSD的人本来就对GPL不感冒,这个V3影响到了使用FreeBSD做商业运作的公司的核心利益。其实如果使用FreeBSD的商业公司愿意对FreeBSD贡献一下力量的话(确实已经贡献了不少力量),llvm/clang不用多久就可以引入FreeBSD的base,而且llvm/clang本身还能有长足的发展。但是人嘛,总是只想得到不想付出的,商业公司做事的唯一考量就是做这件事情有没有利益。所以llvm/clang要真正实用不是近期的事情,虽然FreeBSD的svn中有了clangbsd这个项目。

有人也曾经提出一个Unix的source base里面只能有C语言写的程序,所以FreeBSD只需要PCC(http://pcc.ludd.ltu.se/)。PCC也是一个老壶装新酒的编译器,它是UNIX的research版本的编译器,后来有人重新修改、重写了一遍,变成一个经典的分2个pass的C编译器,并支持C99标准。这个没有能进入FreeBSD其实一方面是在目前的工业界是回避不了C++的(llvm/clang是使用C++写的,clang对C++的全面的支持是一定的,不然clang自己都不能bootstrap啊。),除非做个理想的操作系统如Plan9那样,设计的好不好,当然好,就是20多年还没有被大众接受。要让一个Unix系统中只用C语言就像让现在的中国走社会主义道路一样,好不好?当然好,就是现实做不到。第二个方面用PCC编译FreeBSD的事情没有人肯去做,我也在mailling list上呼吁过,说什么可以使用PCC啊,多么经典啊,多么简单啊,自己就是不想去修改一个Makefile,不想去查看一行代码。嗨。。人嘛,就设个本性,牛都是要吹的,事情最好都人家做。(BTW:一直想修改FreeBSD的msdosfs让其支持UTF-8的中文文件名的,就是一直没做,其实是想等别人来做或者允许我找个借口--忙啊!!囧)

革命呢,还是要充满乐观主义情绪的,所以我相信llvm/clang最终会进入FreeBSD的base。那个时候我们刚装完FreeBSD后,第一个要干的事情是到ports中安装最新的gcc。因为大量的ports中的软件是非gcc不可编译的,当然有些简单的软件是可以用clang编的,比如shell/bash(我试过,编出来的可执行文件比gcc编出来的小,但是编译时间比gcc长,执行性能就不知道了)。

革命呢,也是要认清人民群众的本性的。如果想要在近年内完全脱离GNU编译器族,那也不太可能。llvm/clang就是个C/C++编译器,最后还要使用系统中的汇编器和连接器来生成可执行文件的,在FreeBSD中这些as和ld可都是GNU的。虽然BSD的binutils早就在开发了,除了有个ar,nm之类的东西开发完成,as,ld估计是八字没有一瞥呢。当然,我也理解啊,有的用就先用着,何必为了licence去重造轮子呢?对于assembler估计llvm项目自己会出一个,好像叫“mc”(也是听人家在mailling list上吹的),至于linker嘛,虽说不是什么复杂的软件,估计要等GNU把它的ld变成GPLv3才有希望看到BSD的linker了。

最后,这个新的编译器将把FreeBSD带向哪里?也不能带向哪里(我承认我是个标题党。。。),不就是个编译器嘛,再说近期还不可能实用。倒是FreeBSD-8的新东西比较吸引人,新的TTY层、增强的kernel SMP、ULE、Gaint lock 进一步去除,特别是网络栈中Gaint lock的去除,我就等待着FB-8的性能测试报告,估计在多CPU的情况下,网络栈的性能要上个档次!还有新的USB代码(我没有觉得老代码有什么不好,新代码估计是架构上的改进,具体还没看。。),增加amd64上kernel内存的极限,这下使用ZFS更加啦风了。新的AHCI(SATA)driver,进入了CAM子系统,终于把SATA当作SCSI处理了,(是不是落后与Linux了?无所谓,稳定了的东西我们才用)。


等着FreeBSD-8吧,就在近期了。(要习惯于跳票哦,呵呵)
分享到:
评论

相关推荐

    LLVM Cookbook

    #### 一、LLVM简介与重要性 **LLVM**(Low Level Virtual Machine)是一个模块化、可扩展的编译器基础设施项目,它提供了工具链来开发前端编译器、优化器以及目标代码生成器等。LLVM的设计初衷是为了支持持续的研究与...

    LLVM Cookbook 英文版

    #### 一、LLVM简介与背景 **LLVM**(Low Level Virtual Machine)是一个模块化和可扩展的编译器基础设施集合,它为优化和生成中间及机器码提供了一系列工具和库。LLVM项目始于2000年,由伊利诺伊大学厄巴纳-香槟...

    LLVM cookbook

    #### 一、LLVM简介 - **定义与背景**:LLVM(Low Level Virtual Machine)是一个模块化、可扩展的编译器基础设施项目,旨在提供一系列工具和库来支持高效编程语言的编译过程。它由一系列紧密相连的子项目组成,包括...

    Learn LLVM 17 A beginners guide to learnin - Kai Nacke.pdf

    LLVM简介 - **定义**:LLVM(Low Level Virtual Machine)是一个模块化、可扩展的编译器基础设施项目,它提供了一套强大的工具链用于优化、链接和执行代码。 - **用途**:LLVM主要用于编译现代编程语言,支持代码...

    llvm overview

    #### 编译器与LLVM简介 在计算机科学领域,编译器扮演着将一种编程语言(源代码)转换为另一种语言(目标代码)的关键角色。通常情况下,目标代码能实现与源代码相同的功能,但在某些特殊情况下可能会有所不同。...

    llvm cookbook

    #### 一、LLVM简介与背景 - **LLVM**(Low Level Virtual Machine)是一种模块化、可扩展的编译器基础设施框架,最初由University of Illinois和Xerox PARC开发,旨在为现代编程语言提供高效的编译和优化支持。 - *...

    Go-llgo-基于LLVM的Go编译器

    一、LLVM简介 LLVM(Low-Level Virtual Machine)是一个开源的编译器基础设施,最初由Chris Lattner在斯坦福大学开发。它提供了一套模块化的、可重用的编译器和工具链技术,支持从源代码到机器代码的多种语言。LLVM...

    Getting Started with LLVM Core Libraries-wrapper

    1. **第1章:LLVM简介** —— 介绍LLVM的发展历史、设计哲学以及其在整个编译过程中的作用。 2. **第2章:LLVM IR基础** —— 解释LLVM的中间表示(IR),这是LLVM的核心组成部分之一。 3. **第3章:LLVM Core库入门...

    llvm.ppt llvm使用及其组成简介

    llvm.ppt llvm使用及其组成简介

    使用llvm实现的类C语言(解释器构造实践课程设计).zip

    1. **LLVM简介** - LLVM的核心理念是提供一种低级别的虚拟机,它可以被用于多种编程语言的编译和优化。 - LLVM IR(中间表示)是一种静态单赋值形式(SSA),便于进行代码分析和优化。 - LLVM包含了前端(语言...

    20210626-廖春玉-LLVM的RISCV支持现状和经验1

    【Clang/LLVM简介】 Clang/LLVM是一组模块化和可重用的编译器及工具链技术项目,尽管名字中含有“VM”,但LLVM与传统的虚拟机关联不大。LLVM项目的名字并不是首字母缩写,而是项目的全称。Clang是用于C、C++和...

    LLVM_exp12c_HI_AggressiveLSR_MUL.7z

    1. **LLVM简介**:LLVM是由Chris Lattner在2003年开发的,最初是为苹果公司设计的,现在已经成为一个跨平台的编译器基础设施,支持C、C++、Objective-C、Swift、Rust、Go等多种编程语言。它的核心特点是模块化和层次...

    clang-user-manual, clang 中文用户手册&llvm; 文档.zip

    2. LLVM简介:LLVM是一套高度模块化的编译器框架,不仅包含前端(如Clang),还包含后端(如代码生成器)和中间表示(IR)。它的设计允许开发者对编译流程的各个阶段进行定制,广泛应用于静态分析、动态编译、代码优化...

    20200819-Kaleidoscope(第二期)-孙少策.pdf

    ### 一、LLVM简介 LLVM (Low Level Virtual Machine) 是一个模块化、可扩展的编译器基础设施集合,它提供了一系列工具和服务来支持高效地编译和优化程序。LLVM 项目的最初目标是为了支持编译时、链接时和运行时的...

    20220119-刘子康-LLVM-rt简介1

    LLVM Compiler-rt 是一套运行时库,它主要用于提供编译器所需的特定功能,特别是与代码分析和调试相关的服务。这个项目是LLVM项目的一个重要组成部分,主要由Google开发并贡献给LLVM社区,广泛应用于Android和...

    TypeScriptCompiler:TypeScript编译器(通过LLVM)

    **LLVM简介** LLVM是一个模块化和可重用的编译器和工具链集合,最初由Chris Lattner在斯坦福大学开发。它的设计目标是为现代编译器提供一个通用的、高性能的基础架构。LLVM可以用于前端语言的编译,也可以作为后端...

    Python库 | wllvm-1.1.4.tar.gz

    **LLVM简介** LLVM是一个开源的、模块化的编译器基础设施项目,由C++编写而成,可以生成优化的中间表示(IR)。它支持多种编程语言,并被广泛用于高性能计算、嵌入式系统以及静态编译和动态编译环境。LLVM的灵活性使得...

    基于IDA microcode的控制流反混淆框架设计与实现.docx

    1. Obfuscator-LLVM简介: - 指令替换:用复杂指令序列替换标准运算指令,增加代码复杂性。 - 虚假控制流:在基本块前插入条件跳转,可能指向虚假基本块,增加分析难度。 - 控制流平坦化:将控制流扁平化,使代码...

Global site tag (gtag.js) - Google Analytics