|
对于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吧,就在近期了。(要习惯于跳票哦,呵呵)
-wsw |
|