哪种编程语言好?大神为你分析 Go、Java、C、C++ 等主流编程语言

文/ 赵玉锡



2004 年进入华为,一直在消息产品开发一线耕耘,今年下半年转入华为融合视频业务。曾参与多个重要项目与重要版本的设计、重构与开发,辗转多个语言:长期从事 C、C++ 开发,Java 与 Python 也有约 30K+ 代码的开发经验,目前正在基于 Go 语言开发,对 HTML/JS/Shell 等脚本语言也有一定掌握。


本文主要分析 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 语言还未完全准备好。


小结


Go 已经证明在动态语言需要性能方面,是作为 Python 和 Ruby 的理想候选者;在应用开发方面,尤其是 HTTP 相关应用方面,目前已经是站在 Java 面前的一位挑战者,同时在对资源的掌控力不是那么强烈诉求的地方也是 C/C++ 之外提供另外一种角色。


在生产力方面,其语言特性和生态系统还未成熟,版本还在快速迭代中,相比动态语言和 Java,并不具有优势,目前阶段是这些语言在某些场景下的可选角色。长期看,在 Google 的鼎力支持下,新特性和库的应用能力还会不断加入,是一门欣欣向荣的编程语言,但目前阶段,建议必须控制好程序的规模和复杂度,语言和生态还未提供健全的支撑,同时还必须留意它的不成熟和版本快速迭代带来的风险。


2、Java


Java 的成功得益于 10 年前以 Unix 系统为主的 SUN、IBM、Oracle 等大型公司的强力支持,这让它在企业应用领域和 WEB 应用方面站稳了脚跟,而随后的 10 年,前半段是靠 x86+Linux 带来的革命继续保持份额,后半段就是 android 的成功让其在步履蹒跚停止脚步后再一次登顶。这二十年,Java 积累了最强大的生态系统,你可以说它无所不包, 毋庸置疑,Java 早已是一艘航空母舰的巨大身躯,这足已证明它的地位与成功。但是其语言、库、框架和生态系统的复杂度,对技术人员构筑其巨大的障碍,比如并发方面,语言的 synchronized 机制,标准库的 notify 再到 concurrent,也可以通过 Apache+tomcat 容器来获得 HTTP 等的并,而基于 JVM 技术,Java 又与其它语言具有良好的互操作性,比如并发方面的 Scala,可以选择其 Actor 或者也是用 Scala 写的 Akka,当然业界选择 nginx 等混搭的场景更多,太多太多…


这就是 Java 的世界,永远不嫌多,无需要重复造车马,这是 Java 成功的关键所在,历史沉淀下来的,让 Java 提供的选项太多,深入后就知道 Java 的学习成本比 C++ 更高,对程序员的要求比 C++ 更高,除非掉队了,还在用 7 年甚至 10 年前的 Java 技术,技术人员要非常精心地组织框架和设计,否则各种复用的结果就是堆砌出一个异常臃肿的程序,其运行时对资源的消耗有时候会让你感到恐惧,而这是太多的基于 Java 所开发的平台被广泛诟病的关键所在,重用是个双刃剑,需要量体裁衣而不是一锅端,拿捏的尺度对开发人员要求无疑是最高昂的,除非语言和标准库提供了最好最直接的选项。


小结


Java 早已证明它的无所不包,近十年基本都是排名最好的语言,积累最强大的生态系统。要澄清下一

  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值