【刘江按】以下是我的一点门外之见,做引玉的砖头之用。
Dmitry有一点是肯定正确的,语言之争更多的是一种类似宗教信仰上的,所以很难有结果,也没有太多实际意义。这种争论因为出自高手之间,所以还是会透露出很多重要的信息。比如:
1. 对于要求性能高的系统编程领域,C++其实未必胜过C,而且事实上,也确实有很多此类项目是选择C作为主要语言的。C的生命力目前仍然毋庸置疑。
2. C++目前确实处于一种被夹攻的态势,一方面在企业级系统开发(数据密集、业务规则复杂多变)中,C++已经基本被Java和C#等淘汰出局,另一方面在系统编程和嵌入式等更接近硬件的领域,又遭到C的强烈狙击。
3. OO技术并非one-size-fits-all。
……(大家补充)
必须看到的是,C语言作为一种古老的语言,其局限性也是很明显的,比如已经成为安全问题渊薮的缓冲区溢出。C的标准库也存在各种各样的问题。对于更加贴近现实世界的众多项目,没有面向对象机制,显然会影响开发效率。(有关C标准库源码层次的分析,图灵将出版著名C/C++专家Plauger的《C标准库》一书。)而且,即使是C程序员所引以为豪的性能优势,现在也岌岌可危了(参见C++之父Stroustrup的文章中相关的比较)。
C++目前的困境,很大程度上是由于此前的图书和文献曾经一度倾向于炫技,陶醉于对语言各种细节的深入探索,有华丽化、复杂化的趋势,语言设计者们苦心设计出来各种丰富的特性和多范型的编程风格,却成了学习者和使用者的负担,加上微软等开发工具又用MFC之类的糖衣,结果造就了大批基础不牢、半桶水叮当响的C++程序员,而且因为自以为掌握了世上最难的语言,往往有目空一切的傲气。这样开发出来的代码质量,可想而知。对C++的各种误解和不良使用习惯,可以说是漫天飞舞。而这种局面继而造成C++逐渐成为一般人心目中望而生畏、学不好教不好更用不好的“专家语言”,越来越无法吸引新入行的程序员。老人毛病多多,新人青黄不接,C++社区的确面临危机。
这几年,C++界的核心人物,包括Bjarne Stroustrup、Herb Sutter、Stan Lippman、Andrei Alexandrescu和Andrew Koenig、Stephen Dewhurst等,对此局面有过较多的反思,痛定思痛之后,写作了Learning C++ as a New Language、《C++ Primer》第四版、《C++编程规范》、《Accelerated C++》和《C++必知必会》等返璞归真的文章和图书。其核心变化,是对标准库(Torvalds语气中对STL和Boost也很不屑,不知是何原因,请方家告我)、规范化、领域概念和设计的强调,弱化底层语言细节,或者说强调更规范地选择使用语言特性。
比较同一作者的《C++ Primer》第四版和第三版、《C++编程规范》和《Modern C++ Design》以及Exceptional C++系列,可以清楚地看到这一点。
比如Primer第三版一上来就突出C++的多种编程风格(过程式编程、基于对象编程、面向对象编程、泛型编程),并且以此作为布局谋篇的主线,很容易使初学者晕倒。到了第四版,则更多地把力气花在打好扎实的基础,介绍那些实际开发中通用的、行之有效的编程技术,在特定场合,C++提供的丰富“武器库”中应该选择哪些设施、应该注意哪些问题、业界已经总结了哪些优秀的编程实践和易犯的错误等,成了书中的主干。这使此书成为目前最适合的C++学习和使用的百科全书。
与此配套的,当然应属《C++编程规范》,用条款形式说明了C++各种语言设施的正确用法和适用场合。如果你在学习C++的时候,就能结合其中的相关条款,了解所学特性的正确用法,当然是最理想的。而《C++必知必会》则选取了对C++程序员非常重要的知识点,进行一番贴近实际的讨论。
【070909更新】好像是和Linus Torvalds呼应似的,有相当权威性的TIOBE的编程语言指数最近一期的结果显示,C++下降了两名,落后于(Visual) Basic和PHP,成了老五。而C则稳居第二。
Position
Sep 2007 | Position
Sep 2006 | Delta in Position | Programming Language | Ratings
Sep 2007 | Delta
Sep 2006 | Status |
| 1 |
1 |
 |
Java |
21.701% |
+0.17% |
A |
| 2 |
2 |
 |
C |
14.908% |
-3.15% |
A |
| 3 |
4 |
|
(Visual) Basic |
10.748% |
+0.12% |
A |
| 4 |
5 |
|
PHP |
10.204% |
+1.08% |
A |
| 5 |
3 |
 |
C++ |
9.938% |
-0.82% |
A |
| 6 |
6 |
 |
Perl |
5.416% |
-0.01% |
A |
| 7 |
8 |
|
C# |
3.583% |
+0.59% |
A |
| 8 |
7 |
|
Python |
3.025% |
-0.12% |
A |
| 9 |
9 |
 |
JavaScript |
2.722% |
+0.28% |
A |
| 10 |
13 |
  |
Ruby |
2.065% |
+1.13% |
A |
【070910夜更新】
今天偶然翻到《Unix编程艺术》一书,其中第4章中“Compactness”(紧凑性)部分里,Eric Raymond写道:
“在通用编程语言中,C和Python是半紧凑的;Perl、Java、Emacs Lisp和shell则不是(尤其是真正的shell编程要求你知道半打sed和awk这样的其他工具)。C++是反紧凑的——语言的设计者承认,他并不指望任何一个程序员能够完全理解这一语言。” |