【问题标题】:PowerShell Runspace vs DLRPowerShell 运行空间与 DLR
【发布时间】:2010-11-14 03:17:24
【问题描述】:

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

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

每种方法的优缺点是什么?为什么我会选择其中之一?作为一种动态语言本身,以及一流的 .NET 语言,为什么 PowerShell 不也针对 DLR?

【问题讨论】:

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


    【解决方案1】:

    我在阅读维基百科上的 Dynamic Language Runtime 时来到这个帖子

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

    在 Doug Finke 的评论(2009 年 7 月 26 日)中,有一个链接指向从 IronPython 调用 PowerShell 的示例。

    该链接指向已处于存档模式的 codeplex.com,将于 2021 年 7 月 1 日停用。今天查看该链接 codeplex 将读者指向github repo for IronPython

    【讨论】:

      【解决方案2】:

      我对此的看法是,微软应该基于 DLR 开发他们的 Backoffice 管理界面,以便可以使用一流且已经证明的语言,如 .NET 中的 Python 和 Ruby(或任何其他基于 DLR 构建的语言)杠杆,而不是我认为他们用 Powershell 重新发明轮子所做的事情。除了用于管理基础设施应用程序,例如交换,当已经有优秀的语言存在时,我没有学习 Powershell 的动力。我的 0.02 美分。

      【讨论】:

      • Monad 于 2003 年发布,2006 年发布 v1.0。DLR 于 2007 年发布,2010 年发布 v1.0。与普遍看法相反,IIS/Exchange/etc 团队没有时光机。
      【解决方案3】:

      在 .NET 4.0 中,DLR 包含您可以考虑的“DLR v1.0”。这包括调用站点缓存机制、跨语言互操作功能以及对现有 LINQ 表达式树的改进。这些都是非常有用的功能,对于实现一种语言但不托管一种语言。

      这就是 DLR 1.0 中缺失的部分 - 所有语言的共享托管故事。但我们确实以托管 API 的形式开始了这方面的工作,我们在 CodePlex w/ DLR 和 IronPython 项目以及在 github 上使用 IronRuby 提供托管 API。不幸的是,我们认为我们无法在 .NET 4.0 时间范围内推动这些 API 达到交付质量,因此我们没有将它们包括在内。特别是我们希望从其他语言(例如 Powershell 甚至 VB 和 C#)获得更多反馈,以确保我们拥有正确的 API。

      因此,除了 IronPython 和 IronRuby 目前,每种语言或多或少都有自己的托管故事。但我们希望看到所有这些在未来得到统一,以便您的用户可以选择使用哪种语言。但是现在 Powershell 的盒子里没有东西可以定位。

      【讨论】:

        【解决方案4】:

        Doug's answer 提到了几个关键点,但我认为在 .NET 应用程序中使用 PowerShell 作为脚本引擎的主要原因是 PowerShell 正在成为跨 Microsoft 应用程序的主要管理界面,并且会更加熟悉在维护您的应用程序的系统管理员中。

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

        【讨论】:

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

        我同意,DLR 已经并将继续引发大量良好的讨论。 PowerShell 不针对 DLR。我不知道为什么。

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

        calling PowerShell from IronPython的例子。

        你也可以embed IronPython in PowerShell

        IronPython 和 IronRuby 与 Windows 的集成与 PowerShell 不同。如果 PowerShell 能够开箱即用地启用 DLR,那就太好了。

        【讨论】:

        • 我真的不明白你为什么要做这些事情(从 IronPython 调用 PowerShell,或将 IronPython 嵌入 PowerShell)。我看到了 IronRuby 调用 PowerShell 的演示,虽然它很酷,但我看不出它有多大用处。
        • 我从 PowerShell 调用 IronPython 的一个原因是使用已经用 Python 编写的复杂例程。使用 .NET 4.0 的方式与我相同。当我想利用无法从 IP 轻松获得的功能或系统集成点时,从 Py 调用 PoSh。
        猜你喜欢
        • 1970-01-01
        • 2018-07-08
        • 2015-11-17
        • 2012-07-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多