新智元推荐
来源:菊厂搞机(ID:future_technologies)
整理编辑:张佳
2017年5月的一个凌晨,华为某实验室里,方舟编译器上第一个Java程序“Hello, World”跑通了。
C++:1983年正式发布。由贝尔实验室基于C语言改良,所以C++是完全兼容C语言的。
Objective-C:1980年代发明。1988年,斯蒂夫·乔布斯(Steve Jobs)在NeXT公司时买下了 Objective-C 语言的授权,后来成为苹果公司MAC电脑和iPhone手机的程序设计语言。
Java:1995年5月发布。SUN公司为了在电视机顶盒等电子产品智能化过程中抢占先机,解决跨平台的问题,所以开发了Java语言。但Java需要借助虚拟机机制来解释源代码并调度硬件资源。安卓系统使用的基础语言就是Java。
C#:2000年6月,由微软发布。C#与Java有着惊人的相似,也需要借助类似于虚拟机的Framework来运行;不同的是,Java支持所有平台,而C#只支持Windows和Linux系统。
GO:谷歌在2009年发布。GO语言主要用作服务器端和云计算开发。
Swift:2014年由苹果公司发布,可以和Objective-C语言混合使用。
Windows系统
使用CL编译器。它直接集成在Visual Studio或Visual C++的开发者环境中,一般不单独使用。
Linux系统
使用开源的GCC编译器。GCC,由自由软件运动的精神领袖理查德·马修·斯托曼(Richard Matthew Stallman, RMS)在上个世纪80年代创立。它原本只处理C语言,后续扩展可以处理C++、Objective-C、Java等其他语言。GCC被认为是跨平台软件的编译器首选。
苹果Mac和iOS系统
最初使用GCC编译器,现已替代为Clang + LLVM。
为什么苹果公司要换编译器呢?
因为苹果发现开源的GCC开发者根本使唤不动,他们不愿意专门为了苹果公司的要求优化和改进GCC代码,所以苹果将编译器后端直接替换为LLVM(Low Level Virtual Machine,底层虚拟机),并且将读研时(2003年)发明LLVM的天才少年克里斯·拉特纳(Chris Lattner)招入麾下。克里斯进入了苹果之后,大幅度优化和改进LLVM以适应Objective-C的语法变革和性能要求,同时发起了CLang项目来完全替代GCC。
今天,GCC + LLVM 已经被替换成了 Clang +LLVM。LLVM负责编译器后端,用来处理代码优化和跨平台,而Clang负责前端,只需将程序源代码转换成LLVM可以看得懂的IR(Intermediate Representation,中间语言)即可。
另外,上文提到的Swift语言,则是这位天才少年克里斯为苹果公司贡献的第三个重要作品。
安卓系统
安卓主要使用预编译的Java语言开发,最初版本通过虚拟机运行,不需要编译器,后续版本加入了JIT和AOT编译机制(下一部分将详细展开)。
Intel的ICC编译器
ICC编译器,全称Intel C++ Compiler,是Intel开发的C/C++/Fortran编译器套装,适用于Linux、Microsoft和Mac OS X操作系统,广泛应用于高性能计算、分布式计算等商业计算领域。
SGI等公司推出的Open64编译器
SGI(S代表超级计算机,G代表图形工作站,I代表具有突破性的洞察力)生产的超级计算机,主要应用于巨大的实验室,采用Open64编译器。
第一个命门
Java的“虚拟机”
第二个命门
Java的“原罪”——额外的JNI开销
第三个命门
代码优化空间有限
第四个命门
Java现有内存回收机制易造成间歇性卡顿
春节快乐,方舟大吉!
Talk is cheap. Show me the code!
空谈误国,实干兴邦!