Symantec C/C++ 已经不见踪影,Symantec现在专心做他的安全软件,诺顿杀毒软件,还有一些其他的,Boland C/C++最后还是被收购了,现在的RAD C++ Builder混的一直不愠不火,WATCOM 被Sybase败落后终于开源了,现在是Open WATCOM 1.9,Open WATCOM 2.0正在构建中,前几日我还编译了 2.0Beta1 现在呢,Microsoft C/C++也还不错,代码质量什么的也很好,在微软的内部,C/C++的压力也不小,.NET托管的还有C# Visual Basic F#这些都在争取微软的资源,微软也曾经推出过C/C++编译器的研究项目Phoenix,现在呢,是推出Roslyn,C#,Visual Basic的编译器项目,WPF直到Visual Studio 11才在Windows 8上正式支持C/C++构建,以往,如果不是自己设置,C/C++代码不用C/CLR是无法支持的,当然就算WPF支持也要C/CLR。不过,在Windows平台上,最佳C/C++应用开发Visual C/C++是最佳选择,前提是你有足够的钱支付软件授权费用。GCC在Windows上有两个著名的移植版本一个是cygwin,也就是windows 上模拟Linux,一般而言开发基于Windows的程序不太建议,因为这样的程序还要调用cygwin库,这个cygwin库是在Win32API上封装模拟出一个POSIX系统,所以运行起来效率还是有问题的,一般应用是没有关系,但是要实现杀手级应用还是有影响,还有一个比较好的就是MinGW,封装了最简单的win32API,在Windows上编译为原生代码,效率比较高。当然无论如何,他们都只是GCC的一个分支。此时此刻,在编译器领域只有GCC才可以和Microsoft C/C++相媲美。
有一个项目发展好几年了,苹果的发展,还有该项目的逐渐成熟,前途不可小觑。这就是LLVM。
先不谈LLVM如何牛逼,不过在Windows上使用LLVM/Clang还是很尴尬的。任何一种C/C++编译器的配置都比Clang的配置简单,Windows风格的环境变量似乎对LLVM无效,而Broland C/C++编译器,OpenWatcom,连GCC的都很好配置,还有LCC什么的。但不可否认,LLVM/Clang还是有它的特色!也在快速发展。
要说编译器的大战,就现在而言,不像十几年前那样是孤军混战,现在更像集团军对峙。
MS大棒,Microsoft Visual Studio'tools+Microsoft.Net
开源斗士 GNU-GCC
苹果的尖兵 LLVM/Clang
先谈跨平台能力:
跨平台能力最好的还是GCC,GCC针对不同的平台有不同的实现,而且交叉编译能力也很强大。
在就LLVM在很多平台上也实现了,但是LLVM在其他平台上的实际性能还是不够理想,特别是在Windows上。
由于MS的东西并没有开源,所以并不知道其实际跨平台性能,但微软的跨平台性能并不够理想,只支持微软自己的平台,不过纯编译器是可以脱离操作系统而实现跨操作系统平台的,而且微软也有实现arm的cl,所以微软的Cl移植到linux 也并不是难事。比较难实现的是链接程序和外部库。
代码效率:
对于MS来说自家的东西就在自家的园子,自己知根知底,所以MS的代码效率还是不错的。GCC众人拾柴火焰高,代码效率还是不错,传说中Clang如何神奇,不过这个还真的是事实,Mac OS iOS最近的都是基于LLVM/Clang+GCC搞出来的,GCC原来在MacOS上饱受诟病。不过,对于最大的windows平台,LLVM还是那么的不尽人意。
总的来说 出现了三个集团,一个是微软以Visual C++ + .NET的微软的VS系列,一个是LLVM/Clang系列,一个就是GCC系列,无论是多种语言的集成还是商业化,支持的项目,很难找到与这三个相提并论的编译器集团,虽然Open Watcom开始支持多个平多种系统,甚至支持三种语言,但是还是很孱弱,为什么不说JDK,因为JDK不可能实现整个系统从底层到上层的开发 ,JDK限制与应用方面。可以说未来数年,这几个编译器集团的斗争将变得非常激烈,LLVM/Clang一心想取代GCC,而MSVS想的是如何保持氛围,GCC要保持地位和抢占MSVS的高地。 MSVS的优势就是编译器和快速开发环境的集成,极大地降低了开发门槛,支持的处理器有x86 AMD64 ARM,这些和GCC,LLVM都是差不多的,GCC则是一个纯编译器,超强的平台支持能力而且开源,极强的定制能力,而LLVM优化编译的能力和底层虚拟机这些先进的理念也将冲击那些古老的编译器,不过类似于LLVM的框架,微软早有研究,那个是叫 “Phoenix”,而GCC也在使用C++编写源代码,并且在GCC 5.0时实现模块化 向LLVM靠拢,很期待这些编译器集团军的作为,让我们拭目以待吧。
未完待续
2012.11.23
LLVM/Clang的设置是硬编码的问题,主要要利用MSYS来支持。在Windows下还是可以使用的 但是还有一部分额外的项目没有在Windows上很好实现 如libc++,vmkit....