Computer Science
Algorithm
Data Processing
Digital Life
Distributed System
Distributed System Infrastructure
Machine Learning
Operating System
Android
Linux
Tizen
Windows
iOS
Programming Language
C++
也谈C++ (2012)
Erlang
Go
Javascript
Scala
Scheme
Type System
Software Engineering
Storage
Virtualization
Life
Life in Guangzhou (2013)
Recent Works (2013)
东京之旅 (2014)
My 2017 Year in Review (2018)
My 2020 in Review (2021)
十三年前被隔离的经历 (2022)
A Travel to Montreal (2022)
My 2022 in Review (2023)
Travel Back to China (2024)
Projects
Bard
Blog
RSS Brain
Scala2grpc
Comment Everywhere (2013)
Fetch Popular Erlang Modules by Coffee Script (2013)
Psychology
耶鲁大学心理学导论 (2012)
Thoughts
Chinese
English

也谈C++

Posted on 11 Feb 2012, tagged c++programming

近段时间有不少谈及C++的文章,其中酷壳的陈皓写了一篇《Why C++?王者归来》,介绍了Herb的一个演讲,说到语言的下一个时期又将是C++的时期。但是对于这些,我却是不甚同意。关于语言的战争从来没有停止过,这里只是我自己的想法,欢迎大家一起讨论。

一、运行性能问题

1.性能真的那么重要吗?

文中所提到的一个使用C++的主要理由,就是语言在机器上运行的性能问题。其实若论性能,非汇编莫属。但是由于汇编语言的晦涩,和硬件的关联紧密所造成的不可移植性,使得现在使用汇编的场合是非常之少,除非是极其追求性能的地方。由此我们不由想到,难道语言的运行效率真的那么重要吗?

现在的硬件性能每几个月就翻一番,现在一部普通的智能手机的运算速度,已经可以赶上十几年前的几台电脑加一起。有编写和调试C++代码的时间,也许更快的机器都已经出来了。所以性能问题,不能一概而论,需要性能的时候着重考虑性能问题,而当性能不是那么重要的时候,也许开发的效率才是考虑的主要问题。

说到效率,文中说到了手机平台,那么我这里也说一下手机平台吧。一直发展迅猛,把曾经的霸主塞班系统拉下马,现在和ios平分天下的手机系统是什么?Android系统。而众所周知,Android系统的架构就是中间有一层Java虚拟机,而Android系统上大部分应用,也都是用Java开发的。其实一个平台能迅猛发展非常重要的一点是什么?就是这个平台上的应用。ios就是凭借着其优秀的游戏应用起家。而Android作为后来者,能快速开发应用的能力是必不可少的,因此使用Java这种能快速开发的语言,可以说是一个明智之举。虽然Android也有C和C++的接口,但是我们日常使用的大部分应用都是Java开发的,有谁觉得性能很差吗?

其实很多程序员都信奉这样一条准则:“宁花机器十分钟,不花程序员一分钟。”程序员的时间是宝贵的,逻辑、架构、规划都是从程序员的脑子中出来的,而一些无聊的工作,完全可以交给机器去实现。把程序员从繁重的工作中解脱出来,让机器做机器应该做的事情,才是正确的做法。

但是,无可避免的,在一些地方确实需要考虑到效率问题,然而,C++的效率真的高吗?

2.C++的运行性能

说到运行性能,现在首先想到的肯定是C语言。虽然很多人认为C语言晦涩,但是我一直觉得C语言是一个很优秀的语言。C语言和硬件的结合可以说是在高级语言里最紧密的了。开发很多嵌入式的设备,人们第一个想到的就是C语言,可没谁会说去用C++吧。

有人说正因为C语言太晦涩,为了解决这个问题,再加上面向对象的思想,所以有了C++。然而相对于庞杂的C++来说,C语言反而是简单的。并且,完全的面向对象思想,也不一定适用于所有场合。现在有很多对C++不是很精通的程序员,对STL和泛型的滥用,不仅造成代码的质量低下,而且阅读起来也有一定的困难。一个用C++写的程序,绝对不会有一个用纯C写的程序一样的效率,也不一定有用C语言好写,这个问题在Linus的几封邮件里,有着直言不讳的叙述。

二、C++的抽象能力

上面说到了,C++的运行效率肯定是不如C语言的。原作者认为C++会流行的主要原因,就是C++比C语言有着更多的抽象能力。那么我们不如就比一下抽象的能力,包括C语言这种比较低级的语言,和Python、Perl这种比较高级的脚本语言。

1.和C语言比较

C++能做到的C语言真的做不到吗?答案是否定的。很多开源软件都是用纯C写出来的,若是有兴趣,不妨去看看他们是怎么写的,其中的模块化,丝毫不逊于C++写出来的东西,而且比C++要透明、简洁很多。

2.和Python、Perl等脚本语言的比较

类似于Python的高级语言类库丰富,支持动态类型、垃圾回收等高级特性,因而省去了程序员很多的麻烦。对于C++来说,这些东西都是需要自己去做的。另外,对于可以解释执行的语言,我们可以快速写一些东西来检测自己的一些想法。也许大公司都喜欢先写规划啊,什么都计划好,然后再写代码,可是对于很多黑客和高手来说,一边想一边写一边检测,才是最喜欢的编码方式。

三、结论

综合上面的考虑,C++和C语言比起来,只是多了很多面向对象的东西,相对于添加的这点功能而言,我觉得是得不偿失的,这使语言变得更混乱。可以说C++的初衷是好的,希望功能强大,什么都可以做。然而一个语言,如果能够专心做好一件事情,有时候是更值得使用的。

上面所说的,也不能完全否定C++的优点。例如在桌面环境这种天生就比较适合面向对象的思维的应用来所。然而在追求效率的地方,C语言则更加合适,在效率不是那么重要的地方,使用其它高级语言来节省程序员的时间才是更好的做法。