Visual Studio 11开发者预览版本中的C++新特性(What's New for Visual C++ in Visual Studio 11 Developer Preview)

原文链接:http://msdn.microsoft.com/en-us/library/hh409293(v=vs.110).aspx

【此文档仅针对预览版,在以后的发布版后会修改。空主题被做为分隔符。】

此文档介绍新的和增强的Visual Studio 11开发者预览版中的Visual C++特性。

更多关于Visual Studio 11开发者预览版的详细信息,参考 Product Highlights for Visual Studio 11 Developer Preview

 

提高了对C++11标准的支持

标准模板库

做为Visual Studio 11开发者预览版中C++11规范的一部分, Visual Studio中的标准模板库(STL)被增强了,它提供规范需要的额外编程结构。主要包括以下:

l  新的头文件支持: <atomic>,<chrono>,<condition_variable>,<filesystem>,<future>,<mutex>,<ratio><thread>

l  优化内存资源使用,相对它们目前的表现,所有容器都会更小。例如,在x86采用默认设置的release模式下,std::vector 从Visual C++ 2010的16个字节缩减为Visual Studio 11开发者预览版的12个字节,std::map 从Visual C++ 2010的16个字节缩减为Visual Studio 11开发者预览版的8个字节。

其他对C++11的增强

嵌接迭代器(SCARY iterators):尽管只是C++11标准允许而不是必要,嵌接迭代器已经实施了。更多信息,请参考PDF文档SCARY Iterator Assignment andInitialization

无籍lambda表达式(Stateless lambdas),它是一个以空lambda[]开头的代码且捕获任何局部变量,已经按照C++11标准隐式转换为函数指针。

局部枚举变量支持。目前支持C++ enum类的枚举-关键字。

Visual C++ 编译器和链接器

自动矢量化。一个最显著的性能提升是用并行方式代替顺序方式。VisualStudio 11开发者预览版不仅在任务级别提供了并行方式,在循环级别也提供了。如果可能,C++编译器将自动对循环矢量化。矢量化将重组织一个循环,例如求和循环,以便CPU能同时执行多次迭代。当在支持SIMD指令的CPU上使用自动矢量化,循环运算能提速8倍。例如,大多数现代化处理器都支持SSE2指令集,它允许编译器指示CPU在进行数学运算时,一次处理4个数字。

因为在编译代码时,编译器能识别可以被矢量化的循环,因此矢量化是自动的。需要注意的是,这与并行计算是不同的。并行计算将在下一列表项介绍。

自动并行化。VisualStudio 11开发者预览版正在提升使用多处理器和多核硬件的能力。使用自动并行化,循环能够被重组织以便它能同时在多线程中执行。这意味着你的应用程序能使用多核CPU和多处理器来分发工作的所有部分至所有可用的处理器中。并行化自动重组织循环并多任务执行,这一切都不需要你在应用中增加任何代码。你可以使用 #pragma parallelize指示符告诉编译器哪个循环需要并行化。

自动矢量化和自动并行化之间有明显区别。首先,自动矢量化一直是打开的,不需要用户交互,而自动并行化需要程序员决定那个循环需要并行。并且,矢量化能在支持SIMD指令的单核CPU上提升性能,而并行化则是在多处理器和多核CPU上提升性能。这两种特性能同时工作,以便矢量化的循环能在多处理器间被并行处理。

支持C++的加速大规模并行机制(AMP)。C++的AMP能加速代码的执行,它使用了通常是作为GPU独立显卡的数据并行硬件。C++AMP编程模式包括了多维数组、索引、内存转移、瓦片(tiling)和一个数学函数库。C++AMP语言扩展编译指令以使你能够控制数据如何从CPU流向GPU或反向流通。更多信息,请参考 C++ Accelerated MassiveParallelism (C++ AMP)

 

Visual C++

提升并行编程

随着硬件步入多核和众核架构,开发者可以不再依赖日益增加的CPU时钟速度来增强程序性能。C++名空间concurrency中的并行编程技术能使开发者利用这些新架构。

在Visual Studio 2010中,我们看到了强大的C++并行库介绍,例如Parallel Patterns库。我们还介绍了通过复杂的数据流管道使用并发能力的概念。在Visual Studio 11开发者预览版中,这些库被扩展,为开发者最需要的并行模式提供更好的性能、更好的控制及更丰富的支持。现在已发行的包括:

l  并行模式库,它支持交叉联合(fork-join)并行机制(parallel_forparallel_for with affinityparallel_for_eachparallel_sortparallel_reduce,parallel_transform)。

l  一个丰富的基于任务的编程模式,它支持异步和延续。

l  代理和消息,它允许开发者明示自然分解成并行的单位的数据流管道。

l  安全并发的容器包,它提供了线程安全的std::data结构版本,例如priority_queuequeuevectormap

l  可定制的调度和资源管理,用于促进与之前列举的模式间的无缝组合。

 

集成开发环境(IDE)

Visual Studio 11开发者预览版的Visual C++中,IDE在一些工具上有显著提升,这些工具帮助你更有创造性的进行C++编程。更多关于IDE增强性的信息,参考 Product Highlights for Visual Studio 11 Developer Preview

Visual Studio 模板支持。你现在可以使用Visual Studio 模板技术来编制C++工程和项目模板。这在之前是不支持C++的。

C++/CLI智能提示。C++/CLI现在有全面的智能提示支持了。所有的智能提示特性,例如快速消息、参数帮助、列表成员及自动完成现在都为C++/CLI工作。此外,此主题中所列的新的智能提示和IDE增强也为C++/CLI工作。

C++代码片段。基本代码结构例如switch, if-else和for循环的框架代码在列表成员下拉框中是可用的。从列表中选择一个代码片段插入至你的代码中,然后填充需要的逻辑。你还能在编辑器中创建你自己定制的代码片段。更多信息,参考Code Snippets

列表成员增强。当你在代码编辑器中键入代码时,列表成员下拉菜单自动出现。结果会被过滤掉,以便仅与你类型相关的成员被显示。你能使用类型过滤逻辑来控制成员列表,它位于文本编辑器->C/C++->高级的选项(Options)对话框中。更多信息,参考 Using IntelliSense

语义着色。其他C++标记,例如类型、枚举都已经着色了。着色缺省是打开的。参数以斜体显式。你能在选项对话框中指定额外的标记着色,它位于环境->字体和颜色下。更多信息,参考 Code and Text Editor

标记高亮。放置鼠标指针在一个字符上将会高亮显示本文件中的所有此字符实例。按 CTRL + SHIFT + 向上箭头或CTRL + SHIFT + 向下箭头在高亮的标记间移动。你可以在选项对话框中关闭此功能,它位于文本编辑器->C/C++->高级下。

 

代码质量工具

并行调试

除了具有 Visual Studio 2010的并行任务并行堆栈窗口外,Visual Studio 11开发者预览版提供了一个新的并行查看窗口,它允许你查看跨越所有线程和进程的表达式的值,在结果中执行排序和过滤,并且使用你自己的可视化来扩展此窗口。你也能使用新的多进程支持,来跨越所有工具窗口。

C++ AMP调试和分析

调试。对使用针对GPU的C++ AMP应用, Visual Studio提供类似的CPU调试经验。它包含了之前提到的新的并行调试。调试C++ AMP应用就如调试任何C++应用一样。

分析。目前有GPU活动工具的分析器,支持C++ AMP和其他的基于Direct3D的编程模式。

静态代码分析

C++的静态代码分析器已经更新了,它提供了更丰富的错误内容信息、更多的分析规则和更好的分析结果,展示在新的代码分析Code Analysis)窗口中。在此窗口中,你现在可以根据关键字、工程和严重性来过滤消息。选择一个此窗口中的消息将高亮源代码编辑器中对应的消息触发行。对某些C++警告,消息还将列出代码行,从而向你展示导致此警告的执行路径。

其他的代码分析增强展示如下:

l  新的并发警告,以帮助你确认多线程编程中的正确锁定规则。分析器能检测一些并发bug。它们包括潜在的条件竞争、锁顺序颠倒、主叫/被叫锁定违反以及不匹配的同步操作。

l  你能创建或使用规则集(rule sets)来定制你想应用的C++代码分析规则。

l  在代码分析窗口中,你能插入一个编译指令(pragma )至源代码以抑制所选的警告。

更多信息,参考 Analyzing Application Quality by Using Code AnalysisTools

更新单元测试框架

使用 Visual Studio 中新的C++单元测试框架写C++单元测试用例。使用新工程New Project)->Visual C++类别下加载的C++单元测试工程(C++ Unit Test Project)模板,插入一个新的测试用例工程至你的C++解决方案中。开始在新产生的Unittest1.cpp文件中的 TEST_METHOD代码中写你的单元测试用例。一旦测试代码写完,你会发现测试会按以下方式自动进行:创建解决方案,然后通过点击视图(View)->其他窗口(OtherWindows)->单元测试浏览器(Unit TestExplorer)打开一个单元测试浏览器窗口。右键点击单元测试浏览器中的测试用例,然后选择运行选中的测试Runselected test)运行测试。运行完毕后,你可以在同样的窗口中查看测试结果和额外的堆栈跟踪信息。

架构依赖图

为了更好的理解你的代码,现在你能为二进制、类、名空间和你的C++解决方案中包含的文件产生依赖图。打开菜单架构(Architecture)->产生依赖图(Generate Dependency Graph)->工程(Project )或解决方案(Solution )为你的整个解决方案或所选工程产生依赖图。一旦依赖图产生完毕,你就能通过展开每个节点浏览依赖图,通过在节点间移动以了解依赖关系,通过右键点击节点然后选择查看内容(View Content)浏览源代码。要产生包含文件的依赖图,右键点击一个*.cpp源文件或*.h头文件,然后选择产生所包含文件的图表(Generate Graph of IncludeFiles)。

层图

在代码执行前,使用层图来验证架构设计。选择菜单架构(Architecture)->新图(New Diagram)->层图(Layer Diagram)。从Windows的工具箱(ToolBox)中拖拽形状,开始画架构,然后链接工程,或直接从解决方案浏览器(SolutionExplorer)中拖拽工程到图上。一旦架构图完成了,右击此图然后选择验证架构(ValidateArchitecture)对代码进行验证。查看错误列表(ErrorList)中的结果(从视图(View)菜单打开)。你也可以通过右击此图然后选择产生依赖(Generate Dependencies)来产生依赖关系图。然后,你就可以在层图中可视化实际代码的依赖。

架构浏览器

架构浏览器使你可以浏览你的C++解决方案、工程或文件中的“资产”。架构浏览器位于架构(Architecture)-> Windows ->架构浏览器(Architecture Explorer)。点击你感兴趣的节点,例如类视图(ClassView),然后工具窗口将在右侧展开,显式所有名空间的列表。继续选择一个名空间,则一个新的列将在右侧创建,显示此名空间中的类、结构和枚举的列表。选择节点可以继续显示资产,或返回最左边的列重新开始查询。

代码覆盖

代码覆盖已经更新为运行时动态工具二进制,它提供更低的配置开销并且提供更好的性能。你也可以从Visual Studio C++应用的单元测试工具收集代码覆盖的数据。请参考关于此主题的单元测试框架章节以获得更多关于如何创建和运行单元测试。一旦你创建了C++单元测试,你可以使用单元测试浏览器(Unit Test Explorer)来自动检测你的解决方案中的测试。在单元测试浏览器中,选择分析代码覆盖(Analyze Code Coverage),它将运行单元测试同时从测试中收集代码覆盖数据。在代码覆盖结果(Code Coverage Results)窗口中查看代码覆盖的结果(测试(Test)->Windows->代码覆盖结果(Code Coverage Results))。

发布了52 篇原创文章 · 获赞 53 · 访问量 68万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览