冒号和他的学生们(连载18)——系统语言 - 编程入门网
的目标也就实现了一半。回头再说说C语言,它源自Unix操作系统的开发,以其良好的抽象性和可移植性取代了汇编语言作为系统开发语言。因其简洁实用、灵活高效,很快从系统领域发展到其他领域而成为通用语言。随着新兴语言的崛起以及硬件性能的大幅提高,C语言的缺点也日益显著:过于宽松的类型检查、容易出错的内存管理、相对贫乏的语言特征等等。虽然自身还在发展,它的市场份额日益减少乃不争的事实。但在相当长的时间内,它在其所擅长的领域里仍会占举足轻重的一席之地。如果C能借鉴C++的命名空间、重载、异常处理和STL等非OO的特征,它的生命力绝不会比任何OOP语言弱。“
引号咨询道:“关于C语言的学习,您有何建议?” “精读K&R的《The C Programming Language》,此书不过二百页,堪称C语言的剑诀。其中的R即Dennis Ritchie,是C的创造者,同时也是Unix的缔造者之一,是真正的大师。如今的大师,同博士、教授、院士等头衔一样,严重地通货膨胀了。”冒号不无感慨。 问号尖锐地问:“C++既保持了C的底层开发能力,又引入了OOP,C的处境想必更加艰难吧?” 冒号坦承:“这是不假。C++成功的一个重要因素是对C语言的兼容,由此吸引了大批的C程序员。但这不是没有代价的,C++在兼容C的同时也保留了C的许多缺陷。Java成功的地方有很多,一个不容忽视的因素是它彻底摆脱了与C兼容的桎梏。由于C++对C的改革不彻底,又过于庞杂,并且效率上不如C,这使得C仍有其生存空间。略有讽刺意味的是,对C++批判最激烈的往往来自C的社区,比如Linux之父Linus Torvalds就曾激烈地批判过C++。” “Linus?那可是我的偶像呢!”叹号惊讶道。 冒号劝诫:“如果你因为是他的粉丝而后悔学C++,那就是为他人的偏执买单,不管那人名气有多大。” 句号指出:“C++最为人诟病的地方有:语法过于复杂,学习曲线陡、开发效率低;支持的范式过多;OOP不彻底;自省(Reflection)功能不足;支持指针操作导致安全隐患;没有自动垃圾回收,容易内存泄漏;没有线程支持;没有丰富的标准库支持图形界面、网络编程等。” “罪状不少哇!这些说法都有一定道理,但也有失公允。且听我一一道来。”冒号当起了辩护律师,“C++过于复杂这点没错,Stroustrup说过一句耐人寻味的话:一种语言不复杂是因为不成熟。成人肯定比儿童复杂,因为他要承担更大的责任。大家不妨看看Java从1.0到6.0的发展过程,是否应证了这一点?当然C++的复杂度的确高于其他语言,但如果不执着于奇技淫巧,它绝非高不可攀。C++的开发效率相比Java与C#,差距主要在两个方面:一是标准库不够完善,二是需要手工回收垃圾。关于前者,的确是C++的一大软肋,标准库竟然连企业应用中最常用的图形界面、网络编程、数据库处理等都不能涵盖,严重障碍了生产力。其实C++也有苦衷,不像Java和C#那样有大公司的鼎力支持,只靠效率极为低下的标准委员会来维护。98年的一个标准直到03年还在修订,下一个标准至少要到09年。连Stroustrup都在哭穷,说没有足够的人和时间来开发标准库,可为何广受赞誉的Boost库至今仍徘徊在标准门外?考虑到Boost的创办人大多出自标准委员会,其他无此背景的类库恐怕更难登C++之堂了。相比之下D语言更惨,虽然天生丽质,苦无豪门青睐,只好一直待字闺中。” 叹号感慨:“金钱才是技术的最大推动力啊!” “话糙理不糙。”冒号也很无奈,“此外,C++不支持自动垃圾回收,是因为Stroustrup固执地认为这该由library来支持。一方面,C++主张RAII(Resource Acquisition Is Initialization)原则,通过析构函数(destructor)或智能指针(smart poin |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |