你会推荐 Iron Ruby、Iron Python 还是 PowerShell 用于将 C# 应用程序作为脚本主机吗?

12

您会推荐Iron Ruby、Iron Python还是PowerShell作为C#应用程序的脚本宿主吗?

经过一些快速的试验,现在我更倾向于使用PowerShell,有两个主要原因(请注意这些纯属我的个人观点,如果有错误,我很想知道!):

1)很容易创建一个具有类的运行空间,因此很容易使应用程序可以编写脚本。

2)我听说Microsoft正在削减对IronRuby和IronPython的支持,因此它们可能不是长期解决方案?

虽然这是我第一次将脚本添加到应用程序中,但我欢迎所有曾经走过这条路的人给出的建议。

具体来说,除了让我知道您是否同意我上面的两点之外,我还想知道IronRuby和IronPython是否比PowerShell更容易使用(对于用户而言,而不仅仅是开发人员),并且在您使用DLR时是否像传递对象给PowerShell运行空间那样容易? 如果我添加了对DLR和IR/IP脚本的支持,我的应用程序是否仍然向后兼容XP?

3个回答

12

2022年6月编辑

经过12年的发展,原来的回答已经很糟糕了。

  • PowerShell于2012年成为了DLR语言(某种程度上)
  • IronRuby在那时基本上是被放弃的软件
  • PowerShell在2016年开源
  • PowerShell在2018年跨平台运行,支持.NET Core
  • IronPython 3在2020年移植到了.NET Core

由微软运营的PowerShell开源项目拥有比IronLanguages更多数量级的社区参与和受欢迎程度...

虽然它仍然不是作为嵌入式脚本语言设计的,但PowerShell肯定具备这样的能力。

虽然它以前无法使用DLR托管模型,但现在它确实有一个工作的托管模型。

新授权使PowerShell完全可再分发。

随着扩展操作系统支持(甚至兼容ARM),选择PowerShell真的没有任何理由不选。

2010年原始回答:

我并不认为PowerShell的长期目标之一是成为应用程序的脚本语言。首先,它是一个 shell,其次是一个集成和自动化引擎,第三是一个 shell 脚本语言...由于它根本不可再分发,我不确定嵌入式脚本在哪里适合。

当然,在目标计算机上预装PowerShell时,它非常容易托管,因此它是一个非常可行的选项,但我认为通常使用IronRuby或IronPython同样容易。

我怀疑DLR本身将不会消失,因此我认为使用DLR语言仍然是一个很好的选择:您可以用更少的工作量设置接受其他DLR语言,而且DLR和语言都是可再分发的。

此外,托管PowerShell所需要的工作只能得到PowerShell——而您可以利用相同的工作使IronPython和IronRuby正常工作。谁知道,由于PowerShell是一种动态语言,也许在未来的版本中它将被移植到DLR中,并拥有正确的动态支持...但它不太可能成为可再分发的,因为微软不认为它是开发工具,而是操作系统的核心部分。

底线是:使用DLR更加可移植——不仅限于XP,甚至还包括Mono(因此可以在Linux、OS X、iOS、Android等等平台上运行,甚至可以通过Silverlight在Web或Windows Phone上运行)。


2
实际上,作为应用程序管理和自动化的脚本语言是PowerShell团队提出的主要目标之一。虽然我不反对您提出的其他观点,但只要PowerShell存在,使用它进行这种方式的支持和改进几乎可以得到保证。话虽如此,我对PowerShell周围的重分发政策和实践感到困惑。 - Philip Rieck

7

第二点是正确的(动态语言团队一直在失去人手),这是一个很好的理由。Ruby和Python不是微软的编程语言,因此Iron*只是“让它在.NET上运行”。PowerShell是微软的创造,由微软控制和支持。

更重要的是,多个微软产品已经深度依赖于PowerShell(Exchange、SharePoint等),因此几乎没有关于PowerShell作为一种语言的持续支持的问题。

最后,PowerShell认为成为其他应用程序的脚本语言是其一流的支持目标之一。


遗憾的是,关于IronXxx的事情是真的。就在我们开始期望官方VS支持的时候... - Dmitri Nesteruk
1
好的,IronPython仍然得到微软的支持。IronRuby是被放弃的那个。 - jcao219

2

我处于类似的境地。我决定使用IronPython脚本,但自从我看了Anders Hejlsberg的演讲“The Future of C#”之后,我就觉得IronPython注定要失败。

对于微软来说,开发DLR是符合他们利益的,但他们最终希望我们使用他们控制的工具和语言。毕竟,你使用的不是Java而是C#,那么微软动态语言会是什么样子呢?动态的解释型C#(Iron C#)怎么样?Hejlsberg的演讲明确表明它并不遥远。他甚至有一个带有REPL接口的控制台窗口。话虽如此,Iron VB也有可能出现,这可以说是闭环。

对于我们程序员来说,Iron C#的另一个好处是解决了我遇到的另一个问题——存在两个平行的对象环境,一个是.Net对象,一个是Python对象。从一个环境转换到另一个环境需要一些工作。我认为Iron C#会利用.Net类结构。

我的建议:坚持使用Iron Python和.Net类。当Iron VB或Iron C#出现时,语言转换将很快,甚至可能是自动的。此外,如果有足够多的人使用IronPython,微软可能会改变他们的思维方式。


F# 是微软支持的动态语言吗? - akonsu
没有F#是一种静态类型的编程语言。 - Sergey Teplyakov

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