在CSDN上读到几篇《C++与90年代程序设计语言发展趋势批判》(C++?? A Critique of C++ and Programming and Language Trends of the 1990s,3rd Edition,以下简称《C++批判》) 的译著,也读到不少C++支持者的争论,于是,拿E文的原文来读,顿觉感想颇多,不书不快!
书与作者:
《C++批判》是其作者Ian Joyer在UNISYS公司使用C++进行系统软件开发的过程中逐步完成的。起初的第一、第二版完成于1992年,那时还只是在comp.lang.c++新闻组里发表。尔后,随着Ian Joyer在面向对象领域的深入研究,《C++批判》的第三版也于1996年面世,并且演变成一本数十页的小册子,其内容也由单纯的C++变成为多种程序设计语言的比较,其中包括了当时正如日中天的Java和Bertrand Meyer在《面向对象软件构造》一书中设计的Eiffel。到了1999年,《C++批判》的第四版更是编纂成书,名为《对象揭密:Java,Eiffel与C++》(Objects Unencapsulated: Java,Eiffel and C++??, Prentice Hall)2 ,在Amazon上颇有些成绩。
Ian Joyer对读者的建议非常有趣:
Buy it (Eiffel users), borrow it (Java users), or steal one and ceremonially burn it (C++ users).
(Eiffel用户买来看,Java用户借来看,C++用户应该偷一本来烧掉!:))
那么,有没有一种不失性能而又简洁易用的编程方式呢?随着CPU主频依循墨尔定律不断攀升,程序的性能瓶颈将会逐步淡化;而RISC技术的广泛采用又给编译技术,尤其是动态编译(JIT, Just In Time Compile)留下广阔的发展空间;加以面向对象软件工程的进一步发展,我们终将避开繁琐的细节而直面亟待解决的问题本身。
理想终究还只是理想,性能仍然是目前的大多数应用不得不考虑的问题之一,而灵活性与简洁性的权衡杠杆仍然是语言设计中悬而未决的问题。但作为语言使用者的我们,却拥有足够的自由空间来解决这些问题。
首先是工具的选择。没有完美的程序语言,“选择正确的工具完成工作,不要成为工具或语言的狂热分子!”9。C++是一种适用于多数场合的通用语言,但在某些特定的领域,确实存在很多比C++更为适用的程序语言工具,比如:Java,许多Script语言以及一些RAD工具都是针对特定领域设计的。正确的工具能够帮助我们完成很多工作,并且使得开发和维护过程事半功倍。
其次是经验的积累,泛泛的了解几种语言工具的语法无助于水平的提高。尤其是对于像C++这样复杂的语言,其蕴含的无穷能量需要通过实践的积累与专家经验的学习才能得以体现。C++给我们留下了灵活选择的余地,但我们应该深入的了解究竟应该怎样使用这种灵活性,如何避免对灵活性的滥用。比如:应该尽量避免使用的类型转换机制,以及使用标准C++库取代多数场合下的指针。《C++批判》中的指出的缺陷,也可以理解为“避免这样使用C++”。
最后,也是最重要的,是思想的修行,无论是Eiffel,Java抑或是C++,其幕后的面向对象的分析,设计和编程思想大同小异。这些思想理念的演进较语言工具的更迭更为稳定。避免在语法层面的细节处纠缠不休,直指其背后的设计理念与设计思想,才能在纷繁复杂的语言工具面前游刃有余,立于不败之地。例如:将面向对象的设计思想结合到C++的编程过程中,就能弥补C++自身对于软件工程支持的不足,使程序趋于完善。
[1] C++?? A Critique of C++ and Programming and Language Trends of the 1990s, Ian Joyer
[2] Objects Unencapsulated: Java,Eiffel and C++??, Prentice Hall, Ian Joyer
[3] C++ FAQ, Bjarne Stroustrup, http://www.research.att.com/~bs/
[4] Element of Functional Programming, Addison-Wesley, Chris Reade
[5] Object Oriented Software Construction, Prentice Hall, Bertrand Meyer
[6] More Effective C++, Addison-Wesley, Scott Meyer
[7] The C++ Programming Language, Addison-Wesley, Bjarne Stroustrup
[8] The Design and Evaluation of C++, Addison-Wesley, Bjarne Stroustrup
[9] Exceptional C++, Addison-Wesley, Herb Sutter