iCAx开思工具箱

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 24788|回复: 4
打印 上一主题 下一主题

C++断想(喜欢C++的兄弟一定要看,喜欢C#和JAVA的人也可以看看)

[复制链接]
跳转到指定楼层
楼主
发表于 2005-8-25 09:20:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册登录,享用更多网站功能!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
原文地址:https://www.royaloo.com/articles/articles.htm
荣耀  2002秋
  
C++是一门多范型(multi-paradigm)编程语言。C++并非单单具有面向对象特性,它支持面向对象以及另外数种有用的编程风格。比如基于过程(procedure-based)、基于对象(object-based)、面向对象(object-oriented)、泛型编程(generic programming)等。
  
那些具有根深蒂固的C情结的C++程序员大都习惯于生活在C风格程序设计之中,面向对象开发者则对OO风格着迷,而严肃的(前卫的)程序员正在探索着泛型编程技术。
  
C++语言之所以如此成功,并不是因为其鼓吹者的煽风点火,而是它很好地解决了它适合解决的现实问题,比如低阶系统设计、特定领域企业级软件设计等。在这些领域,尚没有第二门语言能够象C++这样,理想地解决目标问题。
  
迄今为止,也没有第二门语言能够象C++这样,吸引如此之多的智力投入。C++自身的复杂性和解决现实问题的良好能力,使得它极具工业、学术研究价值。在C++之后,语言越发趋于“傻瓜”。
  
C++自身已经有二十多年的发展历史,但标准C++还只是一门年轻的语言。C++的标准化,对其持续发展至关重要。
  
当大多数语言朝着深度面向对象的方向执著发展时,早在大约15年前,C++就义无反顾地向模板和泛型编程技术大踏步前进。对模板和泛型编程技术的强力支持,使得C++根本不同于其它编程语言。
  
仅仅掌握C++面向对象编程技术,而对模板和泛型编程技术懵懵懂懂,等于只学会了一半C++。
  
别指望垃圾收集会成为一等C++语言特性,它违背了不止一条C++设计理念。比方说,不应该为用不到的东西付出代价,遇到可疑之处就提供手工控制手段,所有语言特性都必须能够承受得起,等等。这些设计理念,大都带有浓厚的学院派味道。
  
Bjarne Stroustrup拒绝深入评价Java和C#,他说,“我不是任何专有语言的爱好者,而是开放的正式标准的爱好者。”这样的理由,冠冕堂皇,让人无话可说。但是,我们还是要考虑到这里面毕竟有个人性格、所处环境、文化背景以及历史因素在内。
  
任何伟大的人物在从事任何伟大的事业时,都难免掺杂个人动机在内。一位语言设计师之所以会设计一门新的语言,首先应是出于对现有语言的不满,并对自己的语言设计理念坚信不疑。
  
C++最初的成功很大程度上是因为它完整地兼容C,C++最初的卖点也不过是更好的C。但长期以来,Bjarne Stroustrup最想从C++中拿掉的东西正是那些为了和C保持兼容的特性,这多少都具有一些讽刺意味。今天,Bjarne Stroustrup说,用C++来写C风格的程序对大多数应用来说不是使用C++的最佳方式,要成为真正的C++行家里手,你必须合理使用C++所提供的抽象机制和类型系统。
  
在D&E一书中,Bjarne Stroustrup说道,“我们的历史从来都不是一张白纸,仅仅提供一种东西是不够的,我们还需要使人们能够从旧工具和旧思想转变到新东西中来。因此,假如C没有摆在那儿,C++无需与之兼容,我也会选择与另外的某种语言大体上兼容。假如一种作为基于C的语言但带有重大的不兼容性,或者想让一个白手起家的语言得到广泛应用,都会遇到更多的麻烦。”
  
这就是这门语言设计者的自白。这种设计出发点和Java以及C#是截然不同的,对设计哲学的不同崇尚,导致了今天存在这些不一样的语言,而对某种设计哲学的普遍认同,导致Java和C#如此酷似,而这,又无不与语言产生的历史背景和时代要求有关。
  
永远都不要指望Bjarne Stroustrup和ANSI/ISO标准委员会会从C++中拿掉象多重继承这样的诡异的玩意儿,或许,缺了诸如此类的语言特性,C++就不再是C++了。
  
一个人总可以站在自己的立场,杜撰出一套利于自己并力图说服别人的论点和论据。D&E解释了为什么C++会成为今天这个样子,你可以对Bjarne Stroustrup的解释点头称是,也可以对Bjarne Stroustrup的某些辩解不以为然,但是,从Bjarne Stroustrup对语言设计的折衷权衡考虑之中,我们应该能够领悟到不少语言设计乃至软件设计的思维方法。
  
D&E是、但也不仅仅是一部语言设计者的自我辩词。
  
单从诞生时间来看,C++是有些年头了。和Smalltalk、Eiffel这样的语言相比,C++的普及应用范围之广,有目共睹,和Java、C#这样的“现代语言”相比,似乎它不够时髦,但有一点毋庸置疑:C++在它擅长的工业领域取得的成就,现在将来Java和C#都难以望其项背。
  
C++会过时吗?对这个问题的最好的回答是,C++所擅长解决的问题领域会过时吗?或者说,C++所擅长解决的问题领域会消失吗?
  
Java和C#会危及C++的地位吗?Java已经存在数年,并已取得巨大的商业上的成功,但今天C++仍然保持着良好的发展势头,C#同样也没有能力挤掉C++。
  
我们可以注意到,和当初C++诞生时以“更好的C”为宣传口号不一样,今天,包括它的创建者在内,从来都没有人说过C#是更好的C++,尽管C#借用了大量的C++语法表达形式,但C#(也包括Java)同C++的设计理念存在着根本不同,因为它们要解决的目标问题领域,大不一样。
  
在C++所擅长解决的问题领域,比如说,低阶系统程序设计和严肃的嵌入式系统设计领域,C++真正的竞争对手,目前也只有C。事实上,在过去十几年以来,在C++的压力下,C的地盘就在不断紧缩。以后也不大可能在相同的领域出现可以和C++一较高下的语言。
  
在大多数高阶程序设计领域,许多语言都可以完成C++能够完成的任务,有些任务用别的语言甚至会比C++来得更便捷,但C++在运行效率、灵活性以及用户社团背景、资源等方面的优势,使得它一直处于有利的竞争位置。
  
但我相信 — 事实也已经证明,C++在攻城掠地的同时,也被Java、Object Pascal以及C#这样的语言所挤压,在某些高阶程序设计领域,C++的领地已经呈现紧缩趋势。
  
C++已经足够成熟,同时还有更加惊人的智力投入来保持其持续发展完善。但标准委员会的委员们向来都是以保守而不是激进而著称,不要指望ANSI/ISO标准委员会会轻易向C++语言自身加入更多的特性 — 它已经够复杂的了,也别指望它们会轻易对C++进行删繁就简。
  
C++说到底不过是一门语言而已,它并非是一个系统或平台 — 它也拒绝成为一个系统或平台。作为一项国际标准,保持自身的纯洁至关重要。不过,可以肯定,已经成为标准C++的一个重要组成部分的标准库,将会不断膨胀。
  
从某种意义上说,库就是C++的平台。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏1 分享淘帖 支持支持
沙发
发表于 2005-8-25 12:10:46 | 只看该作者

马上注册登录,享用更多网站功能!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
板凳
发表于 2005-8-30 20:12:53 | 只看该作者

马上注册登录,享用更多网站功能!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
地板
发表于 2005-9-20 21:08:54 | 只看该作者

马上注册登录,享用更多网站功能!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
5
发表于 2005-9-21 16:57:13 | 只看该作者

马上注册登录,享用更多网站功能!

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手板模型制作,在线3D打印服务

QQ|小黑屋|手机版|开思工具箱 CAD工具箱_CAM工具箱  

GMT+8, 2024-11-16 12:48 , Processed in 0.016505 second(s), 7 queries , Gzip On, Redis On.

Powered by Discuz! X3.3

© 2002-2024 www.iCAx.org

快速回复 返回顶部 返回列表