PowerShell Runspace与DLR的比较

12

随着.NET 4.0测试版的推出和.NET动态语言运行时的更广泛可用性,我猜这些话题将变得更加“热门”。

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

每种方法的优缺点是什么?我为什么要选择其中一种?作为一种动态语言,并且是一种一流的.NET语言,为什么PowerShell不针对DLR?

5个回答

12
在.NET 4.0中,DLR包括您可以认为是“DLR v1.0”的内容。这包括调用站点缓存机制、跨语言互操作功能以及现有LINQ表达式树的改进。这些都是实现语言非常有用的功能,但不适用于托管语言。
而这也是DLR 1.0缺失的部分 - 适用于所有语言的共享托管模型。但我们在CodePlex上发布的DLR和IronPython项目以及github上的IronRuby中已经开始了这方面的工作,提供了托管API。不幸的是,我们认为无法在.NET 4.0时间范围内使这些API成为可用产品,因此我们没有将它们包含在内。特别是,我们想要从像Powershell甚至VB和C#等其他语言中获得更多反馈,以确保我们拥有正确的API。
因此,每种语言或多或少都有自己的托管方式,除了IronPython和IronRuby。但我们希望将所有这些统一起来,以便用户可以选择使用哪种语言。但目前,Powershell没有可用的选项。

4

我同意,DLR已经并将继续产生大量有益的讨论。PowerShell不是针对DLR的。虽然我不知道为什么。

在.NET应用程序中托管PowerShell可以在脚本解决方案中启用PowerShell对象管道,我认为这是一个关键优势。

有一些从IronPython调用PowerShell的示例

你也可以在PowerShell中嵌入IronPython

IronPython和IronRuby与PowerShell相比,在Windows上的集成不同。如果PowerShell能够默认启用DLR,那就太好了。


我真的不明白为什么你想要做这些事情(从IronPython调用PowerShell,或将IronPython嵌入PowerShell)。我看过IronRuby调用PowerShell的演示,虽然很酷,但我并没有看到它有太多用处。 - alastairs
我会从PowerShell中调用IronPython的一个原因是为了使用已经在Python中编写的复杂例程。同样的方式,我也可以使用.NET 4.0来实现。当我想要利用函数或系统集成点时,无法轻松地从IP中获取,我会从Py中调用PoSh。 - Doug Finke

1

Doug's answer提到了一些关键点,但我认为在.NET应用程序中使用PowerShell作为脚本引擎的主要原因是PowerShell正在成为Microsoft应用程序中的主要管理界面,并且将在系统管理员中享有更广泛的熟悉度,这对于维护您的应用程序非常重要。

IronPython和IronRuby(以及任何其他针对DLR的语言)可能会更加熟悉开发人员受众。


那么,PowerShell将是具有SysAdmin类型功能的应用程序的适当选项,而DLR语言则更适合于帮助终端用户应用程序中的高级用户? - alastairs
我认为PowerShell更适合由系统管理员或“高级用户”维护的企业应用程序。开发人员将更多地进行脚本编写的应用程序可以选择任何一种方式。 - Steven Murawski
这对我来说听起来不像是一个足够好的理由。VB和F#针对非常不同的受众,但使用相同的运行时。希望微软能够效仿这个例子,不要人为地分割他们的技术。Dino的回答给了我们希望 :) - Richard Berg
不要误会,我并不反对在DLR上托管PowerShell,但是当寻求将脚本语言集成到应用程序中时,我认为由于管理员、开发人员和其他人员对其越来越熟悉,PowerShell应该是首选的语言。 - Steven Murawski

0
我的看法是,微软本应该基于DLR开发其后台管理界面,这样就可以利用像Python和Ruby在.NET(或任何其他基于DLR构建的语言)等一流且已经证明过的语言,而不是我认为他们重新发明了Powershell轮子。除了用于管理基础架构应用程序(例如Exchange)之外,当已经有优秀的语言存在时,我没有学习Powershell的动力。我的观点。

2
Monad在2003年宣布,并于2006年推出v1.0。DLR在2007年宣布,并于2010年推出v1.0。与普遍的看法相反,IIS/Exchange等团队没有时间机器。 - Richard Berg

0

我在阅读维基百科上关于动态语言运行时的文章时来到了这个帖子。

我想澄清一下,但我还没有50个声望,尽管我要说的话很快就会对读者有价值。

在道格·芬克(Doug Finke)的评论(2009年7月26日)中,有一个链接可以调用IronPython中的PowerShell示例。

该链接是通过codeplex.com提供的,该网站已经处于存档模式,并将于2021年7月1日关闭。今天查看该链接,codeplex将读者引导至IronPython的github repo


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