在c#的上下文中动态特征运行时的未来?

dex*_*ter 5 .net clr dynamic-language-runtime .net-4.0 c#-4.0

因此,c#已经发展为静态类型语言,并且在利用.net框架开发业务线应用程序方面做了一个非常完美的工作.

现在,显然,在最近的过去,微软已经开始实现其他基本范式的飞跃,而c#和.net从未真正声称是最近的工具.

其中之一是DLR

好的语言多样性 - 很棒,我在想,现在看来我必须改变我的思维方式当我用类编写我的业务实体时,如果我想利用这个功能......这很酷,我我都在学习新的东西.但在此之前,我在这方面对受尊敬的社区提出了一些问题.现在为了澄清,我对DLR和CLR的应用更感兴趣.

所以我们开始:

  1. 您认为,DLR是否是一个可行的功能,从企业商业软件开发的角度来看是否值得关注?这意味着,c#真的需要它作为一个功能来继续做它正在做的事情,还是在那时切换到一个标准的动态类型语言更有意义?

  2. 在CLR和DLR的开发和编写代码的组合在业务适用性方面如何发挥作用?具体的例子对我来说是最有价值的.

  3. 优点.

现在msdn说:

Provides Future Benefits of the DLR and .NET Framework Languages implemented by using the DLR can benefit from future DLR and .NET Framework improvements. For example, if the .NET Framework releases a new version that has an improved garbage collector or faster assembly loading time, languages implemented by using the DLR immediately get the same benefit. If the DLR adds optimizations such as better compilation, the performance also improves for all languages implemented by using the DLR.

好极了,但究竟怎么样?如果我只是升级我的框架,我不会得到相同的吗?为什么我需要在DLR中写这个?

  1. 您是否可以发布代码示例以展示DLR可以比常规c#做更好的jon?

  2. 是否值得学习它是一个有市场的.net工程师,或者它或多或少是一个同义词特征,只是说:"哦,我们比Ruby好,我们也可以做得更多"?

  3. 在app中单独使用DLR或仅使用DLR的开销是多少.发展?

  4. DLR可以与f#一起使用吗?

问候.

小智 6

值得澄清的是,DLR是在CLR之上分层的API,以降低实现动态类型语言功能的标准.你可以像IronPython,IronRuby,Clojure和其他语言那样端到端地使用它来实现你的语言.您可以像C#或VB一样使用它来获取动态调用站点缓存(搜索内联多态缓存以获取有关概念的一般信息).因此,C#添加了'dynamic'关键字,它使用DLR的CallSites,绑定器,DynamicMetaObjects等来实现这种语言功能.

是的,DLR是一个可行的功能,对C#有意义.对于COM互操作,无类型数据源(DB,XML等),C#在VB后面,并且在网页后面的重量较轻的语法(例如,button.text ="yo").当我喜欢一种语言,发现它通常很有用,或者已经调整了我的实力时,我喜欢尽可能地使用这种语言.我不想通过使用多种语言来拼凑并在我的解决方案中创建维护开销,除非我真的需要这样做.C#的'动态'让我可以用更容易和更美味的方式做我已经在C#中做的事情,这当然意味着我不必使用纯动态或可选的显式类型语言来更容易编写更多代码情况现在.

如果您尝试将动态类型功能添加到语言或大型丰富系统,则使用DLR开发代码会很闪耀.正如经常引用的那样,"任何足够复杂的...程序都包含...... Lisp的临时......实现." 如果您发现需要对数据或对象进行一些动态类型的访问,通过计算操作意味着给出一些输入并希望将该操作缓存到程序中该位置的后续类似计算,DLR可帮助您实现以较低的成本方式.问题是,您可能甚至不需要在此级别使用DLR,因为C#已经为您引入了"动态".但是,您可能希望在表示数据源的某些对象上实现IDynamicMetaObjectProvider,以便它们可以参与C#的动态调度调用执行的绑定操作.例如,如果XmlElement实现了IDMOP,那么您可以编写类似于:dynamic x = source.GetXmlElement(...); ... x.Customers [i] .Address.City =="伊利"......

这些好处是针对数据或对象编写的代码的更高程度的可表达性,这些数据或对象本质上是动态的,而不是必须表达复杂的中间类型声明并且执行大量的o.G​​etBlahByName("无论什么")调用.

您从DLR文档中引用的段落是关于在DLR上构建的语言实现.是的,您的应用程序当然也可以获得好处.更重要的是,例如,IronPython如何变得更快,不仅仅是因为DLR的出现,而且因为CLR本身确实起到了间接改进DLR上的IronPython实现的作用.

除非您需要为您的语言或系统添加一些缓存动态访问权限,否则不要费心学习DLR.大多数人不会在这种复杂程度上编码.大多数人使用语言和框架,很少有人实现它们.

F#可以使用DLR,但一个常见的误解是F#是一种动态语言.它不是.它是严格静态类型的,但并未在所有情况下明确键入,这使人们感到困惑.由于大量使用类型推理和重要的空白,它在语法上看起来很轻巧.如果F#有一天决定添加像C#那样的"动态"类型模型,那么使用DLR以便于实现和与C#,.NET上的动态语言,动态库和框架互操作是有意义的.等

法案