PowerShell和Ruby之间的区别

3

我是动态语言领域的新手,正在寻找一个好的起点。

看到微软正在减少其Iron Ruby在其产品中的作用,我正在寻找一种在dotNET平台上得到支持的动态编程语言。您能列出一些特定的功能,在其中一种语言中找到而在另一种语言中找不到,以帮助选择吗?


有一些明显的东西,比如通常更清晰的语法,但我对功能很感兴趣。 - GregC
也许可以参考这个链接:https://dev59.com/-XA75IYBdhLWcg3wFEyb - Roman Kuzmin
1个回答

7

PowerShell主要是一个Windows自动化工具,通过以下几种方式展示其功能:

  1. 一个类似于KornShell、CSH、BASH的shell(控制台)。
  2. 一种动态脚本语言。
  3. 可托管的引擎,例如TK/TCL和Windows Scripting引擎。
  4. Windows 7故障排除框架的基础。

我认为像Python和Ruby这样的语言是通用的语言,尽管它们可能提供REPL提示,但并不适合于Shell编程,即轻松启动系统命令和EXE,捕获stdin/out,处理非终止与终止错误等。这就是PowerShell的优点所在。

另一方面,我不会将PowerShell用于所有通用编程任务。它不能:

  1. 定义.NET类型(除了那些属于PSCustomObject类型的)
  2. 实现接口
  3. 实现任何通用内容
  4. 调用通用方法
  5. 不支持静态扩展方法调用语法,例如array.Where()
  6. 不支持命名空间导入的概念(即C#中的using system;)

正如古谚所说,一定要选择正确的工具来完成工作。


从你的评论来看,如果微软想要覆盖所有领域,他们需要积极开发一种动态语言。目前我们只能庆幸C# 4.0中有动态关键字。 - GregC
https://dev59.com/-XA75IYBdhLWcg3wFEyb - GregC
但是VB已经有很多年的动态性了,不是吗?你难道不认为它是一种“真正”的语言吗? :-) - Keith Hill
也许10年或12年前,所有Windows应用程序中有90%是用VB编写的。回到你的帖子,Add-Type在这方面非常有帮助。然而,它不再是一个“纯粹”的PowerShell解决方案了。而array.Where()可以很容易地使用本机PowerShell实现,只需使用$array | Where-Object {}即可。 - Joey
1
已经同意PowerShell的LINQ类似特性,如Where/Select等。然而,还有其他通用和/或静态扩展方法,希望能够调用-Enumerable.Join/Intersect等。 - Keith Hill

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