`
hqs7636
  • 浏览: 216079 次
  • 性别: 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.ppt llvm使用及其组成简介

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

    20200212-LLVM后端简介-chenying.pdf

    20200212-LLVM后端简介-chenying.pdf

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

    LLVM的RVV支持现状和经验廖春玉目录Clang/LLVM简介RVV支持现状其它扩展浅薄的经验Clang/LLVM简介LLDB:调试器LLD:链接器polly

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

    项目简介其他工具HWASan 和 J extension2 RISC-V 相关工作情况和总结3 参考资料刘子康(实习)PLCT-LLVM 小队LLVM Comp

    LLVM C API(版本8.0.1)的Swift包装器-Swift开发

    简介LLVM IR程序LLVM IR程序的组织的基本单位是一个模块let module = Module(name:“ main”)LLVM IR的构造由IRBuilder对象处理。 IRBuilder是在上下文内部指向的光标,因此具有扩展该上下文并在其内部移动的方式...

    notes:关于我参加的课程,阅读的论文等的注释

    笔记 这些是我在大学时选修的主题的笔记,在阅读过的论文上也做了一些演讲的幻灯片。 科目 包含有关量子计算的一些注释 包含冯·诺依曼(Von Neumann)书中一些严格的质量管理基础 ... LLVM简介:通行证示例

    Fortran中文版教程.zip

    教程内容简介: 在此列出一些常见的Fortran编译器(参考fortran-lang.org的列表) 本中文文档将使用 gfortran 作为其中案例的编译器。 关于 gfortran 的安装方法请参考安装GFortran ...

    ARM微控制器基础与实战_第2版.part4.rar

    内容简介 以目前流行的、单片化的LPC2100系列ARM7微控制器为核心,由浅入深地介绍ARM微控制器的体系结构及应用编程,逐步引导读者掌握使用ARM的知识。分3部分: 第1部分为基础篇,包括1、2章,主要从使用ARM芯片的...

    数据融合matlab代码-GSOC_2018:gsoc2018的记录,gsoc2019的某种准备

    组织简介 组织名称 组织简介 先前项目 Lablua lua语言组织 跨平台解释器,API开发 languagetool.org 语言风格与语法检查器 LEAP Encryption Access Project 改善加密算法的易用性 各种用途的加密API开发 LibreHealth...

    杰姆

    在下面的文章中可以找到RVSDG的简介和jlm支持的优化: N. Reissmann,JC Meyer,H。Bahmann和M.Själander, “ RVSDG:优化编译器的中间表示” ,嵌入式计算系统(TACO)上的ACM交易,第一卷。 19号2020年12月6日

    laranja-os:尝试在Rust中实现MikanOS

    Laranja OS 在Rust中实现 (教育性OS)的尝试,Mikan在日语中是普通话,而laranja在葡萄牙语... 在macOS上,必须安装Homebrew llvm,并且llvm bin必须在PATH中。 建造 使用make构建bootloader和内核,并使用QEMU执行。

    polymcu, 微控制器软件的开放框架.zip

    polymcu, 微控制器软件的开放框架 简介从最初的设计到尽可能灵活,PolyMCU 已经设计好了: 主机操作系统独立 ( 支持 Linux,Windows,macOS ),支持任何工具链( GCC,LLVM ),任何( ARM RTX,FreeRTOS ),任何微型...

    程序员为什么还要刷题-FlyingTokyo19:Rhizomatiks的CinderC++研讨会-FlyingTokyo19-2016年5月

    简介 令人惊叹的太田帝一的日语翻译 首先,克隆这个仓库,启动安​​装脚本(运行时会克隆Cinder、Llvm、Clang、Cling等,构建、安装所有东西,所以需要一些时间!),暂时咖啡边喝边等待完成: 首先,请克隆这个...

    用于信号处理和声音合成的功能性编程语言-C/C++开发

    Faust-音频应用程序和插件的编程语言Grame,国家创作音乐中心:http://www.grame.fr master:master-dev:简介Faust(功能音频流)是一种有趣的Faust-音频应用程序和插件的编程语言插件Grame,国家创造音乐中心:...

    C-plusplus:我的作品与C ++编程语言有关

    它几乎总是以编译语言实现,并且许多供应商都提供C ++编译器,包括自由软件基金会,LLVM,Microsoft,Intel,Oracle和IBM,因此可在许多平台上使用。 C ++的设计偏向于系统编程和嵌入式,资源受限的软件和大型系统...

    Swift语言快速入门教程

    Swift被强大的llvm编译成机器码,直接运行在系统中。由于Swift是苹果的产品,所以目前只支持苹果的系统(OSX和iOS)。我们期待 会有社区开发出跨平台的Swift语言,因为这么好的一门编程语言,应该能够让世界上的每...

    工具安装—-Clang-format的基本使用

    简介 ClangFormat 是一个规范代码的工具 ClangFormat 支持的语言有:C/C++/Java/JavaScript/Objective-C/Protobuf/C# ClangFormat 支持的规范有:LLVM,Google,Chromium,Mozilla 和 WebKit 测试环境 Ubuntu ...

    SOLL:SOLL是一个新的编译器,用于通过solidity和yul生成Ewasm。 在此处查看演示:https:asciinema.orgaezJqNLicn5fya02zwu4VXIo8a

    1.简介 SOLL是一个新的编译器,用于从Solidity和Yul生成 (以太坊味的WebAssembly)文件。 为了尽可能多地支持开发人员,我们设计的项目不仅支持更智能的合约编程语言(例如Rust和C ++),而且还支持各种VM(例如...

Global site tag (gtag.js) - Google Analytics