频道栏目
读书频道 > 软件开发 > C# > Visual C#2010开发权威指南
1.2.12 .NET 4.0中的新特性 - 动态语言C#与VB混合编程
2012-12-07 16:19:51     我来说两句
收藏   我要投稿

本文所属图书 > Visual C#2010开发权威指南

Visual Studio是微软公司推出的开发环境,是目前最流行的Windows平台应用程序开发环境。Visual Studio 2010版本于2010年4月12日面市,其集成开发环境(IDE)的界面被重新设计和组织,变得更加简单明了。Visual ...  立即去当当网订购

动态语言运行库(DLR)是一种运行时环境,它将一组适用于动态语言的服务添加到公共语言运行库(CLR)。借助于DLR,可以更轻松地开发要在.NET Framework上运行的动态语言,而且向静态类型化语言添加动态功能也会更容易。

动态语言可以在运行时标识对象的类型,而在类似C#和Visual Basic的静态类型化语言中(当您使用Option Explicit On时),您必须在设计时指定对象类型。动态语言的示例有Lisp、Smalltalk、JavaScript、PHP、Ruby、Python、ColdFusion、Lua、Cobra和Groovy。

1. 大多数动态语言都会向开发人员提供以下优点

可以使用快速反馈循环(REPL或读取-计算-打印循环)。这样,就可以在输入几条语句之后立即执行它们以查看结果。

同时支持自上而下的开发和更传统的自下而上的开发。例如,当使用自上而下的方法时,可以调用尚未实现的函数,然后在需要时添加基础实现。

更易于进行重构和代码修改操作,原因是不必在代码中四处更改静态类型声明。

利用动态语言可以生成优秀的脚本语言。利用新的命令和功能,客户可以轻松地扩展使用动态语言创建的应用程序。动态语言还经常用于创建网站和测试工具、维护服务器场、开发各种实用工具以及执行数据转换。

DLR的目的是允许动态语言系统在.NET Framework上运行,并为动态语言提供.NET互操作性。在Visual Studio 2010中,DLR将动态对象引入到C#和Visual Basic中,以便这些语言能够支持动态行为,并且可以与动态语言进行互操作。

DLR还可帮助创建支持动态操作的库。例如,如果具有一个使用XML或JavaScript对象表示法(JSON)对象的库,则对于使用DLR的语言,开发者的对象可以显示为动态对象。这使库用户能够编写语法更简单且更自然的代码,以便操作对象和访问对象成员。

例如,在C#中,开发者可能会使用下面的代码来递增XML中的计数器值:

Scriptobj.SetProperty("Count", ((int)GetProperty("Count")) + 1);

通过使用DLR,可以改用下面的代码来执行相同的操作:

scriptobj.Count += 1;

与CLR类似,DLR是.NET Framework的一部分,并随.NET Framework和Visual Studio安装包一起提供。DLR的开放源代码版本还可以从CodePlex网站下载获得。

使用DLR开发的语言的示例包括:

 IronPython:在CodePlex网站上作为开放源代码软件提供。

 IronRuby:在RubyForge网站上作为开放源代码软件提供。

2.  DLR的主要优点

(1) 简化动态语言到.NET Framework的移植。

借助于DLR,语言实施者不必再按传统的方式来创建词法分析器、语法分析器、语义分析器、代码生成器以及其他工具。若要使用DLR,语言需要生成表达式树(以树形结构表示语言级代码)、运行时帮助器例程以及用于实现IDynamicMetaObjectProvider接口的可选动态对象。DLR和.NET Framework可以自动执行许多代码分析和代码生成任务。这样,语言实施者就可以将精力集中在独有的语言功能上。

(2) 允许在静态类型化语言中使用动态功能。

现有的.NET Framework语言(如C#和Visual Basic)可以创建动态对象,并将动态对象与静态类型化对象一起使用。例如,C#和Visual Basic可以将动态对象用于HTML、文档对象模型 (DOM)和.NET反射。

(3) 提供DLR和.NET Framework的未来好处。

通过使用DLR实现的语言可以从将来的DLR和.NET Framework改进中获益。例如,如果.NET Framework发布的新版本改进了垃圾回收器或加快了程序集加载时间,则通过使用 DLR实现的语言会立即获得相同的好处。如果DLR优化了某些方面(如编译功能得到改进),则通过使用DLR实现的所有语言的性能也会随之提高。

(4) 允许共享库和对象。

使用一种语言实现的对象和库可供其他语言使用。DLR还允许在静态类型化语言和动态语言之间进行互操作。例如,C#可以声明一个动态对象,而此对象使用利用动态语言编写的库。同时,动态语言也可以使用.NET Framework中的库。

(5) 提供快速的动态调度和调用。

DLR通过支持高级多态缓存,能够快速执行动态操作。DLR首先会创建一些规则以将使用对象的操作绑定到必需的运行时实现,然后缓存这些规则,以避免在对同一类型的对象连续执行相同代码期间,出现将耗尽资源的绑定计算。如图1.56所示。


 

DLR向CLR中添加了一组服务,以便更好地支持动态语言。

表达式树。DLR使用表达式树来表示语言语义。为此,DLR对LINQ表达式树进行了扩展,以便包括控制流、工作分配以及其他语言建模节点。有关更多信息,请参见表达式树(C#和Visual Basic)。

调用站点缓存。动态调用站点是代码中用于对动态对象执行类似a+b或a.b()的操作的位置。DLR将缓存a和b的特性(通常是这些对象的类型)以及有关操作的信息。如果先前已执行过此类操作,则DLR将从缓存中检索所有必需的信息,以实现快速调度。

动态对象互操作性。DLR提供一组表示动态对象和操作的类和接口,可供语言实施者和动态库的作者使用。这些类和接口包括Idynamic Meta ObjectProvider、Dynamic Meta Object、Dynamic Object和Expando Object。

DLR通过在调用站点中使用联编程序,不仅可以与.NET Framework通信,还可以与其他基础结构和服务(包括Silverlight和COM)通信。联编程序将封装语言的语义,并指定如何使用表达式树在调用站点中执行操作。这样,使用DLR的动态和静态类型化语言就能够共享库,并获得对DLR支持的所有技术的访问权。

您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:1.2.11 .NET 4.0中的新特性 - 并行计算
下一篇:1.2.13 .NET 4.0中的新特性 - 性能及诊断
相关文章
图文推荐
排行
热门
最新书评
特别推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站