许多朋友都认为,学习C++要专一,了解过多的其它语言就把精力分散了,有百害而无一利。我不同意这种观点。
我认为,程序语言的演化是相互学习、相互借鉴的,一个好的语言往往是吸纳了多种其它语言的优点、摒弃了它们的缺点才形成自己的风格的。所以,了解的知识面越宽,所能够横纵比较的范围才越大,才越能够明白C++为什么要设计成这个样子。
闲言少叙,现看看Bjarne Stroustrup设计C++的灵感都源于何处,一下摘自《The C++ Programming Language (Special Edition)》:
很清楚,C++大大地受惠于C。除封闭了其它类型系统中的少量严重漏洞之外,C++仍然保留C作为一个子集。我还保留了C在功能上的强项,能在足够低的层次上处理最苛刻的系统设计工作。C转而从其前驱BCPL受惠颇多;事实上,BCPL的//注释约定也被(重新)引进了C++。给C++以灵感的另一个主要来源是Simula67;类的概念(包括派生类和虚函数)都是从那里搬过来的。C++有关重载运算符和自由地将声明放置在可以出现语句的任何位置的功能,使人联想到Algol68。
…….
模板机制部分地受到Ada中类属(generic)的启发(包括其威力及其弱点),部分地受到Clu语言参数化模块地影响。与此类似,C++的异常处理机制部分地受到Ada、Clu 和ML的影响。其它方面的开发是在1985~1995的时间跨度中做出的,例如,多重继承、纯虚函数,以及名字空间,这些基本上是在C++使用经验推动下推广而来的,而不是由其它语言引进的。
由此可见,C++语言的设计者Bajarne Stroustrup、STL的设计者Alex Stepanov绝非只懂一种语言,我推测他们每人至少懂个七、八、十来种,不然怎么取长补短的设计出如此优秀的C++语言呢?
另外,C++重实用的语言,而不是那种盲目追求完美的语言。在《C Traps and Pitfalls》(中文版叫做《C陷阱与缺陷》)的中文版的附录上记录着这样一个典故:
王曦和孟岩采访Andrew Koenig时,曾问:“有时,编写平台无关的C++程序比较困难,而且开发效率也不能满足需求。您是否认为把C++与其它的语言,尤其类似Python和TCL/TK那样的脚本语言合并使用是个好主意?” Koenig回答说:“是的。我最近在学习Python,得出的看法是:Python和C++构成完美的一对组合。Python程序比相应的C++程序短小精悍,而C++程序则比Python快得多。因此,我们可以用C++来构造那些对性能要求很高的部分,然后用Python把它们粘在一起。Boost中的一个作者Dave Abrahams写了一个很不错的C++库,很好的处理了C++和Python的接口问题,我认为这是一个好的想法。”
C++的专家尚这么说,我们何必又何必强出头,盲目狂热,做愤青呢?:) 俗话说,艺多不压身,多学有啥不好?站得高方才望的远,知道的多才能领悟的深。当然,这只是我的个人看法,并非希望强加于你。我认为,学习也需顺其自然,别把人家的建议当金科玉律,方法和资料需由着自己的性格和习惯来选取,别人觉的好的,未必适合你!:p
>> 本文固定链接: http://www.vcgood.com/archives/859