Java程序设计语言
java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由Sun Microsystems公司于1995年5月推出的本文来源gaodai#ma#com搞@@代~&码*网2Java程序设计语言和Java平台(即JavaEE(j2ee), JavaME(j2me), JavaSE(j2se))的总称。
本文主要分析 C、C++98、C++11、Java 与 Go,主要论述语言的关键能力。在论述的过程中会结合华为各语言编程专家和华为电信软件内部的骨干开发人员的交流,摒弃语言偏好或者语言教派之争,尽量以客观公正的角度来论述下各个语言的特点和不足,对语言选型作为一个客观的参考。
把这些写出来,期望得到大家的指正与反馈,让整个分析更客观,性能方面,着重对 Go 做深入剖析参考。内容很多,期望不会让你望而却步。
语言整体概要
1、Go
在并发方面, goroutine 和 channel 机制提供了语言层面的轻量级和毫无拖泥带水的并发机制;在性能方面,提供了不弱于 Java 的性能(性能是个伪命题),而内存资源消耗方面,相对 Java 和其它动态语言,具备明显的优势;在语法方面,具备了部分 Python 的动态语言特性,在对象初始化、构造和序列化等方面提供了无比简洁的表述方式,而这些处理代码可能占据 10%~50% 的代码分量,尤其对于处理数据、配置和协议映射场景,相比 C、C++、Java 在此方面拙笨,这就是动态语言为何让人着迷的关键所在。
这也是为啥 Go 语言第一个版本发布时就如此受人瞩目的关键所在,尤其是对于动态语言来说,它提供了动态语言所不具有的并发与性能优势,Pike 设计 Go 语言目的是想作为 C/C++ 的另外一个可选的角色(注意不是替换,其设计目标不是替换),Go 语言之父 Google 首席软件工程师 Pike 2012 年“大道至简”演讲稿中对于此目标充满沮丧,引用其中一句话:“Although we expected C++ programmers to see Go as an alternative, instead most Go programmers come from languages like Python and Ruby. Very few come from C++.” C++ 的价值精髓在于:语言提供更加广泛的抽象、优雅和灵活的特性,而这些表达能力是硬件零成本的,而 C 语言一开始就把硬件零成本作为其设计目的,但语言表述力是 C++ 来解决,Go 思考的方向显然不是零成本,至少不是零 CPU 成本,Go 的主张更多考虑的是最小化程序员的工作量。
一个是硬件零成本的极致追求,一个是最小化程序员的工作量,谁都替换不了谁最有价值的部分,Go 无法同时符合两个目标,它选择了动态语法和 gc,就注定了它选择开发效率,会为开发效率牺牲硬件效率,所以它走向另外一个方向,也就是 Java 所擅长的应用方向,尤其是目前的网络和 HTPP 应用方面,这就需要有良好的标准库和生态系统支持,而在标准库方面,Go 已提供了处理 tcp/http/xml/json/ 加解密等更轻量级和优秀的代码库,对网络的核心协议 http 的高并发支持,已经为它提供了撬动 Java 的敲门砖。
但是我们必须面对它目前的不足,在其语言重要特性和严谨性方面还远未成熟,还有不少断层或临时解决方案,而这也会影响到其生态的成熟度,这些问题还需要在新版本中解决。Go 语言 2012 年 3 月 28 日正式发布第一个版本,截止目前 1.7 版本发布,差不多一年两个大版本发布,中间还有数个 beta 与 RC 版本发布,这也基本能说明 Go 语言还未完全准备好。
小结