rainbowzc

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: :: :: 管理 ::
 2007年11月,微软正式发布了Visual Studio 2008 RTM版,在发布之前,既没有在网站首页醒目位置打上相关标识,也没有在现实生活中进行相关宣传,仅在下载中心给出其90天试用版的下载链接,显得十分低调,有关的宣传活动,恐怕要等到2008年2月份发布Windows Server 2008时一同进行吧。此次Visual Studio 2008为英文版,想用简体中文版的朋友可能也要等到明年2月份才有机会一睹庐山真面目了。那么,这次发布的Visual C++ 2008与以往有什么不同吗,会不会像Visual C++ 2005一样让全世界的C++爱好者兴奋不已呢,下面一一道来。
 
 
         Visual C++集成开发环境的变化
 
         1、在ATL、MFC及Win32应用程序中创建的对话框现在已符合Windows Vista样式标准了。使用Visual C++ 2008创建的新工程中所有对话框现在都会符合Vista窗口样式,但如果编译一个早期Visual C++版本创建的工程,对话框仍会保持原有的窗口样式。
 
         2、在ATL工程向导中,可选择为所有用户注册组件。从Visual Studio 2008开始,由ATL工程向导创建的COM组件与类型库,如未选择为所有用户注册,默认将注册在HKEY_CURRENT_USER中。
 
         3、注册表写入能被重定向。随着Vista而来的安全性要求,如果程序想写入到注册表的某特定区域,需要以权限提升模式运行,那总不可能总是以提升模式运行Visual Studio吧,所以,对注册表HKEY_CLASSES_ROOT区域的写入将自动重定向到HKEY_CURRENT_USER,而不需要进行任何编程。
 
         4、类设计器现在可提供对本机C++代码的有限支持。在Visual Studio的早期版本中,类设计器仅能用于Visual C#和Visual Basic,现在,C++程序员也能使用类设计器了,但只限于只读模式。
 
 
         Visual C++库的变化
 
         1、STL/CLR库。编写托管代码的程序员是不是又该高兴了,现在Visual C++已包含了STL/CLR库(即之前的STL.NET,STL.NET为当时把STL移植到 .NET平台的项目代号)。STL/CLR库是对标准模板库(STL)的封装,其是标准C++库的一个子集,STL/CLR结合了C++模板与 .NET的泛型概念,允许C++程序员在STL容器与算法中使用 .NET类型。现在,STL中的容器类(container)、迭代子(iterator)、算法等等,还不是照样信手拈来。
 
         2、MFC库。新的MFC9提供了支持Windows Vista的通用控件,新增了超过150个方法用于支持Vista的新特性及改进现有MFC类的功能,如新的CNetAddressCtrl类可用于输入及验证IPv4及IPv6地址或DNS名、新的CPagerCtrl类可简化选项卡控件的使用、新的CSplitButton类可简化SplitButton控件的使用。
         另外,不得不提的是,微软计划在2008年年中的某个时间,发布对MFC库的一个重大更新,可使程序员构造具有超现代用户界面的程序,如类似Office 2007 Ribbon、Office样式菜单、Visual Studio样式的停靠工具栏、MDI程序中的多选项卡文档,此次更新的组件在Windows 2000以上的操作系统均可运行,如下图所示。
 
 
 
 
 
 
         为了方便使用,在MFC Application Wizard就加入了相应的支持,在“工程样式”中就可进行选择。最重要的一点是,新的组件很容易融入现有的程序,所有新的功能都包装在新类中,并未对现有任何类进行修改,如果想把现有程序修改为新的样式,所需做的,仅是修改MFC程序中application及frame windows的基类,添加几行代码,就可以了。
 
 
 
 
 
 
         当然了,这次重要的更新不仅仅是在界面上,内部功能上也有不少亮点,如智能指针、正则表达式解析、新的容器类(tuple、array、unordered set等等)、完善的随机数产生器、多态函数包装器、新的外壳(shell)类等等。我们完全有理由相信,这次的MFC更新,将让Visual C++程序员重拾本机代码开发的信心。
 
         3、C++支持库。Visual C++ 2008引入了调度库(marshaling library),调度库提供了一种简单及优化的方法在本机与托管环境之间调度数据,可用于代替复杂且低率的PInvoke方法,且语法非常之简单:
 
#include <msclr\marshal.h>
 
TCHAR* c_style_string = _T("C style string");
System::String^ dotNetString = msclr::interop::marshal_as<System::String^>(c_style_string);
 
         4、ATL Server。要注意的是,现在Visual Studio 2008中已不再包含ATL Server。atlenc.h中的数据编码、解码类,atlutil.h、atlpath.h中实用工具函数及类现在已是ATL库的一部分了。另外,只要微软还对早期的Visual Studio版本提供支持,就会对其中早期版本的ATL Server提供支持,
 
 
         Visual C++编译器及链接器的变化
 
         1、编译器的变化。
         编译器已可支持托管代码增量生成。打开这个选项后,当引用的程序集发生改变时,编译器不会马上重新编译代码,而是进行增量生成,只对那些影响依赖性的代码文件重新编译。
         编译器支持Intel酷睿2微架构。编译器支持在代码生成期间对Intel酷睿2微架构进行适当的微调(tune),这种调整不会影响其他架构的CPU。
         对AMD及Intel CPU指令集的内置支持(intrinsics),可对两者近几年的指令集提供高度支持,应尽量使用这些内置支持,而不是内联汇编(inline asm)来访问CPU指令集。这些函数提供对Supplemental Streaming SIMD Extensions 3(SSSE3)、Streaming SIMD Extensions 4.1(SSE4.1)、SSE4.2、SSE4A的支持,其中某些高级位操作指令集只存在于Intel Penryn及Nehalem架构CPU和AMD K10架构的Opteron及Phenom中,所以,在使用之前,应确定要使用的内置函数是否被相应的平台支持,否则会导致运行时错误。
         __cpuid函数已更新。__cpuid函数现在支持AMD及Intel最新的CPU。
         /MP编译器选项可减少总体生成时间。/MP选项可使编译器创建多个进程,同时编译几个源代码文件,由此极大地减少了总体生成时间。在那些支持Intel超线程技术、多个处理器或多核处理器的平台上尤其有用。
         Visual C++ 2008中已不赞成使用/Wp64编译器选项及__w64关键字。/Wp64编译器选项及__w64关键字是用于检测64位可移植性问题的,在这个版本的Visual C++中已不赞成使用,并且会在未来的版本中完全移除。要进行64位编程,请配置编译器生成目标为64位平台。
         /Qfast_transcendentals。为超越数函数(transcendental)生成内联代码。
         /Qimprecise_fwaits。当使用/fp:except编译器选项时,移除try{…}中的fwait命令。
 
         2、链接器的变化
         用户账户控制现在已嵌入在可执行文件的清单文件中。这个功能默认是打开的,如图所示。
 
  
 
         链接器现在可使用/DYNAMICBASE选项以打开Windows Vista上的地址空间随机排列(Address Space Layout Randomization)功能。这个选项修改了可执行文件头,以表明程序在加载时,是否可以随机重新定位基址。
         当然在链接选项中,也少不了数据执行保护(DEP),见下图。
 
 
 
 
 
         Visual C++ 2008的发布,无疑把C++这种开发语言又推到了一个新的高度,从底层系统驱动开发到高层 .NET编程,都不在话下,而且在功能性、安全性、易用性上有了显著的进步,将来,随着C++0x标准的临近及ISO 2003标准C++库的普及,Visual C++必定又有一片新的天地,作为程序员的你,还等什么呢。
posted on 2008-07-15 04:52  ct  阅读(1340)  评论(0编辑  收藏  举报