动态语言运行时和CLR - DLR的重点是什么?

时间:2009-05-14 04:55:54

标签: .net

来自维基百科的DLR条目,

看起来DLR的目的是使用像Python,Ruby等语言。这是DLR的全部吗?还有其他任何好处,为什么你想通过C#选择IronPython作为ASP.net项目或Winform应用程序?

5 个答案:

答案 0 :(得分:3)

CLR及其底层执行模型针对静态类型语言进行了优化。几乎所有使用.NET的类库中的所有方法都采用比类型系统的根,System.Object更精确地键入的参数。

动态类型语言在运行时需要一组不同的功能。他们需要能够有效地执行动态类型代码。例如,当动态类型语言调用常规CLR类时,它需要将每个参数转换和/或类型转换为CLR类上的静态定义类型。如果不仔细进行,可能效率低下。

类似地,动态类型语言通常具有对象模型,该对象模型不容易映射到具有显式类型属性,方法,字段等的CLR类模型。相反,对象通常更像是哈希表,键值对的桶键是字符串(或符号),值是方法,闭包或对象值本身。对象(和/或它们的类型)通常也可以在运行时扩展。

由于动态类型语言之间存在相似之处,因此将通用性提取到基本功能集中,以简化互操作和动态语言实现,以及使CLR优化更容易专注于动态语言。 C#中的新dynamic关键字是其中的一部分:它使用DLR中的机制来帮助与动态类型语言和对象系统进行互操作,例如COM自动化对象,IronPython,IronRuby等。

答案 1 :(得分:1)

DLR非常强大且实用。例如,使用DLR,您可以在用C#编写的应用程序中执行任何任意Ruby或Python脚本。还有很多其他使用场景,但动态脚本托管到目前为止对我来说是最有用的。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

你是否厌倦了写作

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

使用DLR,您只需编写

即可
dynamic firstName = Session.FirstName;

答案 4 :(得分:0)

新的C#将使用DLR中的一些功能。新的结构和语言元素已经交换......