动态语言运行时和CLR——DLR的意义是什么?

3

从维基百科关于DLR的条目来看,DLR的目的似乎是为了使用像Python、Ruby等语言。那么DLR还有其他好处吗?为什么你想选择IronPython而不是C#来进行ASP.net项目或Winform应用程序的开发呢?

5个回答

3
CLR及其基础执行模型被优化为静态类型语言。在.NET类库中,几乎所有方法都需要比类型系统根元素System.Object更精确的参数。
动态类型语言需要运行时中不同的功能集。它们需要能够高效地执行动态类型代码。例如,当动态类型语言调用常规CLR类时,它需要将每个参数转换和/或强制转换为CLR类上静态定义的类型。如果没有小心处理,这可能是低效的。
同样,动态类型语言通常具有不易映射到具有显式类型属性、方法、字段等的CLR类模型的对象模型。相反,对象通常更像哈希表,是键值对的桶,其中键是字符串(或符号),而值是方法、闭包或对象值本身。在运行时,对象(和/或其类型)通常也是可扩展的。
由于动态类型语言之间存在相似之处,将共同点提取到一组基本功能中会很有用,以便于互操作和动态语言实现,并使CLR优化特别集中于动态语言变得更加容易。C#中的新关键字dynamic就是其中的一部分:它使用来自DLR的机制来帮助与动态类型语言和对象系统(如COM自动化对象、IronPython、IronRuby等)进行互操作。

1
DLR非常强大和有用。例如,使用DLR,您可以在C#编写的应用程序中执行任何任意Ruby或Python脚本。还有许多其他用途场景,但动态脚本托管迄今为止对我来说是最有用的一个。

1

它为开发人员提供了更多选项和灵活性,以使用.NET CLR及其所有功能。您可以使用您最熟悉的语言或最适合手头任务的语言,无论是C#、F#、Ruby还是其他语言。


+1 不需要强制你学习C#或VB.net - 你可以继续利用你在Ruby或Python等动态语言方面的专业知识,仍然能够高效工作。实际上执行你的代码的是CLR,这已经成为了一个不透明的技术细节。 - Gishu

0

你是否厌烦了写代码?

string firstName = (string)Session["FirstName"];

使用DLR,您可以简单地编写

dynamic firstName = Session.FirstName;

这不是DLR本身,而是一个新的C#功能。 - Sam Saffron
不,我不这样做,而且在我看来,这只是另一个要避免的功能。我更喜欢第一行代码,因为它更加明确,而且我是干净代码的粉丝。至于这个DLR,我们已经有了像适配器、提供者等模式来处理这种问题。创建一个作为接口的契约,并让库提供包装器来调用CLR世界之外的环境是正确的方法。 - MeTitus

0
新版的C#将会使用DLR中的一些特性。新的结构和语言元素即将到来...

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接