Soma的博客中文版

Somasegar's WebLog - 原文地址http://blogs.msdn.com/somasegar
随笔 - 126, 评论 - 145, 引用 - 3

导航

关于

Soma是微软全球副总裁,负责微软公司Developer Division的工作。 微软DevDiv上海团队将Soma的网络日志翻译为中文,在这里与大家分享.

每月存档

最新留言

广告

VS2010中VB和C#语言的增强

[原文发表地址] VB and C# enhancements in VS 2010

[原文发表时间] Wednesday, August 19, 2009 10:54 PM

选择一种编程语言是每一个程序员都要做的个人决定。这就好像对冰淇淋口味的选择一样。冰淇淋口味的选择多多,但你最喜欢的口味只关系到你的个人偏好。

Visual Studio 2010种,为了给程序员提供他们构建出色软件时所需要的所有工具而不用局限于他们所选择的语言,我们从好几个方面增强了我们最流行的两种语言,Visual  BasicC#语言的功能。

Visual Basic

Visual Basic开发团队为了让开发人员可以用更少的代码完成更多的任务,集中增加了和生产力相关的功能特性。Visual Basic客户最常提出的要求是在大多数情况下能省去为代码声明分成多行时所需要添加的下划线(“_”)。Visual Basic 10增加了隐式断行的功能特性,能在大多数情况下不要求开发人员使用下划线来断行。

    Function Filter(

                    ByVal customers As List(Of Customer),

                    ByVal orderCount As Integer

                   )

 

        Dim query =

                    From c In customers

          Where c.Orders.Count >

                orderCount

                    Select c

另一个新添加的和提高生产力有关的功能特性是自动实现属性。有了自动实现属性的功能,多行常规的属性实现的代码就可以用一行简单的声明代替。在加入该功能特性之前,属性声明经常如下所示:

    Private _FavoriteFlavor As String = "Butter Pecan"

 

    Property FavoriteFlavor() As String

        Get

            Return _FavoriteFlavor

        End Get

        Set(ByVal value As String)

            _FavoriteFlavor = value

        End Set

    End Property

 

    Private _FlavorList As New List(Of Flavor)

 

    Property FlavorList() As List(Of Flavor)

        Get

            Return _FlavorList

        End Get

        Set(ByVal value As String)

            _FlavorList = value

        End Set

    End Property

现在,属性声明能用简单的多得方法实现:

    Property FavoriteFlavor As String = "Butter Pecan"

    Property FlavorList As New List(Of Flavor)

集合初始化和数组Literal也变得更加简单。现在集合能在它们被声明的时候就被初始化,而数组Literal的类型能交由编译器来识别。

    Dim toppings = New List(Of String) From

        {

         "sprinkles",

         "chocolate chips",

         "strawberries"

        }

    Dim cones = {"sugar cone", "waffle cone"} 'String()的类型被编译器识别出来

现在,Visual Basic 10.0有了更好的lambda表达式支持。现在,Lambda表达式可以包含没有返回值的表达式,就像下面sub关键词所要表达的那样:

    Array.ForEach(toppings, Sub(n) Console.WriteLine(n))

有时候,你会想在Lamdba表达式声明中作些更复杂的工作。Visual Basic 10.0支持多行的Lamdba表达式。就像在常规Lambda表达式中一样,编译器将尽可能识别变量和返回类型。

    Dim doubleDown = Function(n As String)

                         If n.StartsWith("s") Then

                             Return "extra " & n

                         Else

                             Return n

                         End If

                     End Function

Visual Basic 10.0中,和PythonRuby语言等动态语言的互通操作也变得更加简单。比如,下面的代码片断调用了一个Python库“math.ph”中的方法:

    Dim mathLib As Object = python.UseFile("math.py")

    Dim firstNumber = 44.2

    Dim secondNumber = 9.5

    mathLib.PowerOf(firstNumber, secondNumber)

C#

C# 4.0主要增强了与动态编程语言的互通性并改进了Office编程性。动态查找是C# 4.0的一个新功能,能让你用同样的方法使用和操作IronPythonIronRubyJScriptHTML DOM以及标准.NET库中的对象,不管该对象从哪里获得。命名参数和可选参数,以及对COM客户端支持的改进等语言方面的增强让那些和Office API打交道的C#开发人员与Visual Basic开发人员有同样的美妙体验。

在你的代码中加入新的dynamic关键词能让它的类型在运行时被动态解析而非编译时的静态解析。这让动态语言用一种C#编程员觉得自然的方式在C#语言中暴露他们的对象:

    dynamic dynamicObject = GetDynamicObjectFromRuby();

    dynamicObject.Foo(7);

    dynamicObject.Property = "Property value";

    dynamicObject[0] = "Indexed value";

 

可选方法参数对Visual BasicC++的编程员来说再熟悉不过。现在C#编程员同样可以使用这种参数。可选参数在方法签名中与一个默认值一同声明,如下所示:

    private void CreateNewStudent(string name, int currentCredits = 0, int year = 1)

上面这个方法可以用下面任意一种方法调用:

    CreateNewStudent("Chloe");

    CreateNewStudent("Zoe", 16);

    CreateNewStudent("Joey", 40, 2);

如果要省略currentCredit参数但指明year参数,可以使用新加入的命名参数功能特性(如高亮的代码所示)。下面所有的调用都是合法的:

    CreateNewStudent("Jill", year: 2);

    CreateNewStudent(name: "Bill", currentCredits: 30, year: 2);

    CreateNewStudent("Will", currentCredits: 4);

即使不用可选参数,命名参数同时也是一种用来对你现有方法编写自定义调用的好方法。

学习更多

VB功能特性站点C#功能特性站点,你可以找到更多关于Visual Studio 2010在语言增强方面的内容,并能下载到示例代码。如果你想试试这些新的功能特性,可以下载并安装Visual Studio Beta 1,然后加入到我们的对话中来

Namaste!

posted on 2009-08-24 19:47:12 by Soma  评论(1) 阅读(5975)

从无到有快速创建完整的Web应用程序

[原文发表地址] VB and C# enhancements in VS 2010

[原文发表时间] Wednesday, August 19, 2009 10:54 PM

从无到有创建一个Web应用程序似乎是一件令人畏缩的任务。或许您对于您的网站要做些什么有一个很好的主意,但是您可能要花大量的时间和精力来决定使用哪种技术创建应用程序最好,来查找可重用的样本代码,和设计你站点的导航以及外观。

Windows Web App Gallery专门设计用来帮助您快速上手并运行一个可定制的Web应用程序,这样您就可以集中精力编写那些只有您才可以编写的代码。

Web App Gallery是一个包含了像DotNetNuke, Umbraco, ResourceBlender.NET 和mojoPortal等主流Web应用程序的集合,所有的应用程序都是免费的并且可以使用Web Platform Installer随时下载和安装。Web App Gallery包含有ASP.NET和PHP应用程序,并且您选择的应用程序所依赖的平台也将随着你的应用程序自动安装。大部分Web App Gallery中的应用程序也都是开源的。Web App Gallery自上线四个月以来已经有了500 000次的下载量。

现在让我们来看一下Web App Gallery是如何工作的,让我们先看下Web App Gallery。

clip_image001

您可以使用多种途径来查找应用程序,比如基于他们的流行程度、用户评价或者分类(比如内容管理,博客、或电子商务)。如果您正在为一个业务或者社区创建一个网站,您可能想要一个像Umbraco的内容管理应用程序。

当您点击您所选择的应用程序旁边的安装按钮时,Web Platform Installer(Web PI)会被启动,使用工具Web PI您可以很容易的安装微软的Web平台和任何Web App Gallery中提供的Web应用程序以及您选择的应用程序所依赖的东西。从Web App Gallery上,在Umbraco安装期间显示的第一个画面是一个有关Umbraco详细信息的页面。

clip_image002

此时,您可以点击位于左边的任意一个选项卡从微软的Web平台安装更多的产品,或直接开始Umbraco的安装。如果您只需要Umbraco,点击“Install”按钮。

clip_image003

接下来您马上会看到您正在安装以及其他您将要安装的产品的许可证条款,Web PI包含了所有您的应用程序运行所需要的产品,这可能包含配置正确的IIS组件、下载ASP.NET和安装SQL Server Express。除了您要安装的应用程序,您不需要担心其他任何事情,一旦您选择了“I Accept”按钮,Umbraco和所有它依赖的东西将被下载下来并安装。

这步完成以后,填写您要安装Umbraco的网站和一些Umbraco需要的基本信息。

clip_image004

现在您已经大功告成并且可以开始使用您的Web应用程序了。

使用安装界面上的链接来启动Umbraco,经过一些配置步骤,然后您就可以开始配置你新的Web应用程序了。

clip_image005

一旦您花了些时间熟悉您的Web应用程序之后,您可以在Web App Gallery上对它进行评价和复审。只要您的Web应用程序遵循了Web应用程序的展厅原则,您也可以提交您自己的Web应用程序到Web App Gallery,。Web Application Gallery总是在不断的添加更多的应用程序,所以请定期的访问。

Namaste!

.

View article...

posted on 2009-08-21 11:21:56 by soma  评论(0) 阅读(5007)

调试、剖析及分析并行应用程序

[原文发表地址] Debugging, Profiling and Analyzing Parallel Applications

[原文发表时间] Friday, August 07, 2009 11:46 PM

 

每当出现新的编程模型时,开发人员便需要一个用来学习、编写、调试以及优化代码的健壮的工具,以便能更好的利用该模型。由于并行计算在公式中添加了新的变量,对于工具的需求便更为突出。

Visual Studio 2010大幅度的提升了并行调试的用户体验。其中大部分的功能在Visual Studio 2008中也可通过插件获得。这里我将给大家介绍在Visual Studio 2008以及即将发布的Visual Studio2010中提供的并行编程、调试以及诊断等功能。

调试

虽然Visual Studio 2005有一个内建的MPI程序的简单调试器,但并未提供完整的“F5”体验。在新的Visual Studio 2008 插件(同时也将集成到Visual Studio 2010中)中,您只需选择一个集群头节点以及您需要多少核,然后按F5就可以对您的MPI程序进行调试了。

clip_image001

除了调试团队所作的很棒的核心工作以外,并行调试技术的领先供应商Allinea还将他们的环境导入到了Visual Studio中。Allinea的插件提供了针对集成的MPI程序的调试,包括基于排名的上下文切换、组单步调试、暂停及运行、并行栈视图和迭合。下面是Allinea的MPI调试环境:

clip_image002

面向服务的架构调试

Windows HPC Server 2008的一个重要的新的编程模型是集群系统面向服务体系架构 (Cluster SOA),它是基于WCF构建的,并包含由HPC的调度器和代理节点提供的高级调度和负载平衡功能。目前为止,对面向服务架构的集群系统的调试还仅仅限于基本的WCF/.Net方式的调试,并无集群的集成。在Visual Studio 2010中,一个集群面向服务架构插件将提供SOA设置标签,在这里您可以选择头节点、调试节点和服务、部署运行时类库并自动进行清理。现在来看一下Visual Studio 2010中新的SOA调试器吧:

clip_image003

剖析 (Profiling)

Windows Server HPC 1.0中没有集成针对MPI程序的剖析功能。在Windows HPC Server 2008中,XPerf等工具提供了MPI的剖析以及系统级别的剖析和故障排查的功能。但即使是XPerf也对MPI消息流量等细节所知甚少,目前为止也没有消息流量的浏览器。自那以后,消息流量浏览器Vampir被导入到Windows并完整地集成在事件跟踪日志(ETW)中。Vampir提供了对消息顺序和延迟进行故障排查的功能。还有更多的开源HPC工具,比如JumpShot是一个免费的基于Java的MPI消息浏览器。

在很多时候,VS内置的剖析器就能提供性能问题的分析。在Visual Studio 2010中,这一功能与HPC工作调度器进行了完整的集成,用来分析一个特定的MPI排名或节点的性能。Visual Studio MPI 剖析功能提供了行级别的剖析信息,包括与源代码视图并排的执行过程中的温度视图:

clip_image004

剖析器还显示多个运行或版本的结果比较报告,这样您就可以轻松地了解您的修改所带来的效果。

clip_image005

MPI 运行时分析

除了调试器和剖析器之外,有时您还需要专门的分析工具来帮助分析大规模并行程序的复杂度。位于斯图加特的HLRS/ZIH是德国的一个在该领域领先的机构,将他们自己的MPI分析工具Marmot导入到了Visual Studio 2008。Marmot可以用来检查MPI调用的输入参数的合法性、检测无法再生性、死锁和对资源的不正确管理。下面是运行中的Marmot:

clip_image006

Printf到集成的剖析和调试

不久前我们还在printf风格的调试世界里,“艺术级”的调试和剖析工具将此往前推进了一大步。

在Visual Studio里,您可以调试和剖析高性能MPI程序以及拥有成百到上千个核的集群SOA应用程序。您可以使用XPerf和事件跟踪日志来获取应用程序在整个系统环境中的全局视图。Visual Studio 2010里新增的多核剖析和调试工具也可以有效地用于集群的节点级别分析。

Visual Studio正成为越来越丰富和有效的编写各种并行程序的开发环境。访问Windows HPC Server 开发人员资源中心您能找到更多关于Windows HPC的开发模型。在CodePlex的Parallel Dwarfs站点上您能找到许多使用各种并行编程模型的示例。

Namaste!

posted on 2009-08-12 14:42:48 by soma  评论(1) 阅读(5379)

Powered by: Joycode.MVC引擎 0.5.2.0