PowerShell Runspace与DLR

时间:2009-07-26 11:39:50

标签: .net powershell scripting dynamic-language-runtime

随着.NET 4.0 beta的推出,以及.NET动态语言运行时的广泛可用性,我猜这些主题将变得“更热”。

我对DLR和PowerShell之间的概念差异感到困惑。在我看来,如果我想在我的.NET应用程序中提供脚本功能,我可以使用DLR(以及在IronPython或IronRuby中启用脚本,或者可用于DLR的任何其他Iron *语言),或者托管PowerShell运行空间。

每种方法的优缺点是什么?为什么我可以选择一个而不是另一个?作为一种动态语言本身,以及一流的.NET语言,为什么PowerShell还没有针对DLR?

5 个答案:

答案 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