C++语言风格流变史

来源:互联网  作者:王咏刚
摘要:程序代码也有风格,这算不得什么新鲜事。早在20世纪80年代,C语言程序员就必须在K&R风格和ANSI风格之间择善而从。但平心而论,我确实没有见过哪一种语言能像C++这样,在代码风格方面表现得如此诡谲和难以捉摸:谁也说不清C++代码究竟能衍生出多少种迥异…

8. C++Builder——Borland的复兴之路

Borland公司在发布了Borland C++ 3.1之后,就因为不思进取而将C++开发工具的市场拱手让给了Microsoft[4]。在经历了Borland C++ 4.0、4.5和5.0等版本的失败后,1997年,Borland推出了全新的C++开发工具C++Builder。这个在市场上为Borland挽回了颜面的产品不但在界面风格上与Borland的支柱产品Delphi别无二致,甚至还在产品内部直接照搬了Delphi的VCL(Visual Component Library)库。结果,使用C++Builder开发的代码天生就受到了Delphi风格的传染,长相酷似Pascal语言了(以下代码取自C++Builder 6.0的示例代码):

class TFormClrDlg : public TForm
{
published: // IDE-managed Components
  TColorDialog *ColorDialog;
  TButton *Button;
  TPanel *Panel1;
  void fastcall ButtonClick(TObject *Sender);
private:  // User declarations
public: // User declarations
  virtual fastcall TFormClrDlg(TComponent* Owner);
};

说实话,尽管C++Builder在市场上的表现不错,但我还是不喜欢Borland将C++语言与Delphi中的Object Pascal语言刻意混淆的做法。也许在Borland这种做法的背后有提高产品通用性、缩短产品开发周期等体面的理由,但使用C++Builder开发出的代码在外表上已经离标准C++风格越来越远了。

值得注意的是,Borland于2003年推出了其下一代C++开发工具 ——C++BuilderX。让人哭笑不得的是,这一次Borland居然将C++开发环境构筑在了用Java语言实现的PrimeTime平台上,这多少将C++语言推向了一种极为尴尬的处境。不过,C++BuilderX也为我们带来了一些好消息:在后续的版本中,C++BuilderX将集成vxWindows框架库[5],在这种框架下开发的C++代码显然要比使用VCL的代码具备更多的标准C++风格。

9. Visual C++ .NET——革命还是叛逆?

Microsoft将C++引入.NET环境的举动其实比Borland还要激进。单从风格上说,使用Visual C++ .NET开发的代码可能兼具MFC、ATL、标准C++、.NET托管代码等多种不同的风格。其中,对C++语言本身影响最大的,当然要数.NET托管代码为C++注入的若干新鲜血液了:

#using <mscorlib.dll>

using namespace System;
using namespace System::Reflection;
using namespace System::Security::Permissions;

public __value enum SomeStuff {
  e1 = 1,
  e17 = 17
};

[attribute(AttributeTargets::Class, AllowMultiple=true)]
public __gc class ABC {
public:
  ABC(int __gc[]) {}
  ABC() {}
  ABC(int) {}
  ABC(int, float) {}
  ABC(SomeStuff) {}
  ABC(String*) {}
  int rgnField __gc [];
  double rgdField __gc [];
  double dField;
};

上述代码来自MSDN中的示例程序。看到Microsoft大刀阔斧地为C++语言引入的垃圾收集、Attribute属性等新特性和新技术,看到.NET托管代码新奇得近乎离经叛道的语言风格,我不知道是应该为Microsoft在发展通用语言平台上的努力而欢呼雀跃,还是应该为C++在C#语言阴影下日渐屈居.NET大戏中的配角而灰心丧气。也许,语言风格和程序员的感受在Microsoft眼中,都是些不值一提的小事,它们哪能和.NET的宏伟战略及Microsoft的强大帝国相提并论呢?

10. 回顾和展望

语言风格的变迁从一个侧面反映了技术思想和产业需求的嬗变规律。从1979年Stroustrup完成第一个Cpre预处理程序算起,C++语言来到这个世界上已经快满25个年头了。这是一种在实践中诞生、成长和发展起来的语言。也许,Stroustrup从一开始就压根儿也没想把它设计成像Smalltalk那样纯粹的面向对象语言。开放性、高效率、兼容性和扩展性的需求将C++语言塑造成了一种典型的多模式(Multiparadigm)语言。无论是C++早期对Simula语言的继承,还是后来对Smalltalk、Ada、Clu等语言的借鉴,无论是ANSI/ISO标准风格的迅速普及,还是Visual C++ .NET在技术创新上的不懈努力,所有这些历史变迁都说明,C++在风格上的多样性主要源自C++语言本身“海纳百川”的胸襟和气概。

5年以后,当C++步入而立之年的时候,它会给我们带来新的惊喜吗?我们还会看到更加新奇的C++语言风格吗?也许,没有谁能给出准确的答案。但作为程序员,我们至少应该知道:无论面对什么样的软件需求,无论使用什么样的思维方式,C++语言都赋予了我们选择语言风格的最大自由;当我们真正理解了C++语言的精神实质之后,这种自由也必将成为所有优秀软件和优雅代码的坚实基础。

参考文献
[1] 刘勰. 文心雕龙·序志.
[2] Stroustrup B. C++ 语言的设计和演化. 北京: 机械工业出版社, 2002
[3] Stroustrup B. Learning Standard C++ as a New Language. C/C++ Users Journal. pp 43-54. May 1999.
[4] 李维. Borland 传奇. 北京: 电子工业出版社, 2003
[5] 李维. 细说Borland C++BuilderX. 程序员. 2003.11

【相关文章】好搜一下
送给C++语言初学者的49个忠告

送给C++语言初学者的49个忠告

内容提示:本文总结学习C++语言的49个忠告,希望对初学者有所帮助。1. 把C+…