随着.NET 4.0 beta的推出,以及.NET动态语言运行时的广泛可用性,我猜这些主题将变得“更热”。
我对DLR和PowerShell之间的概念差异感到困惑。在我看来,如果我想在我的.NET应用程序中提供脚本功能,我可以使用DLR(以及在IronPython或IronRuby中启用脚本,或者可用于DLR的任何其他Iron *语言),或者托管PowerShell运行空间。
每种方法的优缺点是什么?为什么我可以选择一个而不是另一个?作为一种动态语言本身,以及一流的.NET语言,为什么PowerShell还没有针对DLR?
答案 0 :(得分:12)
在.NET 4.0中,DLR包含您可以考虑的“DLR v1.0”。这包括调用站点缓存机制,跨语言互操作特性以及对现有LINQ表达式树的改进。这些功能对于实现语言非常有用,但不能托管语言。
这是DLR 1.0中缺少的部分 - 所有语言的共享主机故事。但我们确实已经开始使用我们在CodePlex上发布的主机API,包括DLR和IronPython项目,以及在github上使用IronRuby。遗憾的是,我们并不认为我们可以在.NET 4.0时间框架内将这些API推向船舶质量,因此我们不包括它们。特别是我们希望从其他语言(如Powershell,甚至VB和C#)获得更多反馈,以确保我们拥有正确的API。
因此,除了IronPython和IronRuby之外,每种语言或多或少都有自己的托管故事。但是我们很乐意看到所有这些在未来得到统一,因此您的用户可以选择使用哪种语言。但是现在,Powershell的目标框架中没有任何内容可供选择。
答案 1 :(得分:4)
我同意,DLR已经并将继续产生大量良好的讨论。 PowerShell不是DLR的目标。我不知道为什么。
在.NET应用程序中托管PowerShell可以在脚本解决方案中启用PowerShell对象管道,我相信这是一个关键的好处。
有calling PowerShell from IronPython的例子。
您也可以embed IronPython in PowerShell。
IronPython和IronRuby与Windows的集成与PowerShell不同。如果PowerShell开箱即用DLR,那就太好了。
答案 2 :(得分:1)
Doug's answer点击了几个关键点,但我认为将PowerShell用作.NET应用程序中的脚本引擎的主要原因是PowerShell正在成为跨Microsoft应用程序的主要管理界面,并将享受到熟悉维护应用程序的系统管理员。
IronPython和IronRuby(以及针对DLR的任何其他语言)可能会让开发人员更熟悉。
答案 3 :(得分:0)
我对此的看法是,微软应该开发基于DLR的后台管理界面,这样一流的,已经过验证的语言,如Python中的Python和Ruby(或者在DLR上构建的任何其他语言)都可以杠杆作用,而不是我认为他们用Powershell重新发明轮子。除了用于管理基础设施应用程序之外,例如交流,当有优秀的语言时,我没有动力去学习Powershell。我的.02美分。
答案 4 :(得分:0)
我是在阅读维基百科上的 Dynamic Language Runtime 时来到这个帖子的
我想澄清一下,但我的声望还没有达到 50,尽管我要说的内容很快就会对读者有价值。
在 Doug Finke 的评论(2009 年 7 月 26 日)中有一个链接,指向从 IronPython 调用 PowerShell 的示例。
该链接指向 codeplex.com,该链接已处于存档模式,将于 2021 年 7 月 1 日停用。今天查看链接 codeplex 会将读者指向 github repo for IronPython