微軟官方將對C++語言引入.NET環境的舉動,先從風格上說,使用Visual C++ .NET開發的代碼可能兼具MFC、ATL、標准C++、.NET托管代碼等多種不同的風格,這大大的方便了進行Visual C++ .NET開發的技術人員。
其中,對C++語言本身影響最大的,當然要數Visual C++ .NET托管代碼為C++注入的若干新鮮血液了:
- #using
- 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的強大帝國相提並論呢?
語言風格的變遷從一個側面反映了技術思想和產業需求的嬗變規律。從1979年Stroustrup完成第一個Cpre預處理程序算起,C++語言來到這個世界上已經快滿25個年頭了。這是一種在實踐中誕生、成長和發展起來的語言。也許,Stroustrup從一開始就壓根兒也沒想把它設計成像Smalltalk那樣純粹的面向對象語言。
開放性、高效率、兼容性和擴展性的需求將C++語言塑造成了一種典型的多模式Multiparadigm)語言。無論是C++早期對Simula語言的繼承。還是後來對Smalltalk、Ada、Clu等語言的借鑒。
無論是ANSI/ISO標准風格的迅速普及,還是Visual C++ .NET在技術創新上的不懈努力,所有這些歷史變遷都說明,C++在風格上的多樣性主要源自C++語言本身“海納百川”的胸襟和氣概。