PowerShell是什么类型的语言?

18 .net powershell

我最近一直在使用相当多的PowerShell(我主要是系统管理员),我想知道它是什么类型的语言.我认为它是一种解释性语言,但我听到了很多其他描述语言的名称:强类型和弱类型,动态,静态.PowerShell属于什么?

Neo*_*ard 25

首先澄清几点:

这两个类别:Compiled和Interpreted是指源代码(或脚本)转换为动作的方式.

在解释语言中,命令被解释器直接解释为动作.

在编译语言中,源代码首先被翻译(或编译)为机器语言(或Java的字节代码或.Net程序集之类的中间语言),在运行时将转换为动作.对于已编译的程序,您可以将已编译的代码视为解释语言的源代码,并将CPU视为解释器(或Java的JVM和.NET的.NET Runtime).

静态和动态类型语言的概念指的是该语言的变量.

静态类型语言(如C系列或Java)将在其源中定义变量的类型,并且将从该类型派生该变量的使用(通常由编码器).

动态类型语言(如Scheme或VBScript)将根据其用法定义变量的类型.在某些情况下,编码器根本无法为变量定义类型(如在Scheme或Bash脚本中),而在其他情况下,这只是可选的(如VBScript).

第三个概念对是强类型和弱类型语言.这些概念指的是强加于语言中变量类型之间关系的规则(最常见的与强制转换相关).键入系统"强度"的问题并不像其他问题那样布尔,因此大多数语言介于具有强类型和周类型系统之间.

在松散(弱)类型的语言中,编译器和运行时将允许您将一种类型的变量视为另一种类型的变量,并且这种情况的行为通常是特定于语言的(在某些情况下甚至是特定于实现的) .例如,您可以将数字与字符串相加,这将被视为有效代码.

在具有强类型系统的语言中,编译器和运行时将要求您执行特定操作,以便在不同类型的变量之间执行操作.最常见的例子是强制转换(比如将int转换为浮点数).

底线

要定义PowerShell,它是一种解释型语言,但对于.NET来说,这是一个灰色的区域.在PowerShell中定义变量不包括定义它们的类型,因此它显然是一种动态类型语言,并且可以无缝地组合变量(如@ halr9000所述),这表示丢失类型系统.

在一个句子中,我会说它是一种解释动态类型的语言,具有弱类型系统.

  • 很棒的答案,除了最后一点关于它是强类型.我请求在那里有所不同.将不同类型的变量一起添加非常容易. (8认同)

klu*_*msy 7

PowerShell不是编译语言.它也不直接产生IL.完全解释版本1和版本2新版本的PS V3确实在后台生成和缓存表达式作为IL用于速度和光学化目的,但不暴露任何已编译的DLL或其他语言可以像常规CLR类型一样调用(虽然其他语言可以托管PowerShell引擎,并在其中执行脚本.)

所以把它想象成一种恰好生活在Dotnet生态系统中的解释性语言,它允许它实例化并与DOTNET对象交互,从而使它看起来像一个"DOTNET语言".PowerShell有自己的扩展类型系统(ETS),使其更具动态性.您可以使用您想要的任何属性动态创建对象,或者获取现有的dotnet对象,并向其添加内容.

PowerShell是一种动态语言.具有动态范围.它是一种以管道为中心的语言,它通过管道传递丰富的对象(与unix中的二进制/文本管道相反)

PowerShell是哲学和实现中的命令(动词和名词)中心语言,虽然它是一种RICH对象语言,但我不会说它的对象是ORIENTATED.您可以与对象进行交互并创建它们,但目标是生成基于任务的命令

PowerShell生活在不同的环境中.它是一行一行的REPL命令行解释器,但它也是一个完整的脚本引擎,可以嵌入到其他应用程序中.

PowerShell具有动态而非词汇范围的变量.

PowerShell具有许多"功能"特性,Scriptblocks是强大的Lambdas,它(因为V2)也有完整的闭包.尽管Lambdas经常被认为是一个困难的概念.它们在powershell中很好地流动,很多人都很难用到编程.实际上在PowerShell中,每个脚本,函数或高级函数都是真正的lamda.PowerSHell的lamdas与其他lamdas不同,因为它们具有动态范围,也因为它们在管道中执行.以下是使用内置cmdlet的简单示例

get-process | where { $_.MainWindowTitle -like '*stack*' } | select processname
Run Code Online (Sandbox Code Playgroud)

在这里,您将lamda传递给cmdlet,在该cmdlet中,对于通过管道的每个项目进行评估,其结果将返回到管道,然后由select命令处理.

PowerShell(自V2起)是一种分布式语言,具有完整的远程处理堆栈,允许您同时从一台计算机连接到多台计算机,执行带有throlling的命令,并处理许多流上的结果(结果,错误,警告等)因为它们发生在每台计算机上.

那么PowerShell是什么类型的语言?

它是一种以命令为中心的语言,主要针对系统管理和自动化,也是一种生活在dotnet生态系统中的丰富的基于对象管道的语言.它是一种动态范围的动态语言,具有功能语言功能和功能组合,我相信它是一种非常新的创新语言

但遗憾的是,PowerShell有许多问题和问题,虽然从初学者到初级阶段的学习曲线并不陡峭,但进入中级阶段却非常陡峭.

  • 导向?奇异果.悲痛. (5认同)

小智 5

PowerShell 使用所谓的动态类型脚本语言。它可以实现复杂的操作,支持变量、函数、循环、分支、结构化错误/异常处理,并与 .NET 集成。动态类型语言是在运行时而不是在编译时进行类型检查,并且其变量没有类型但可以引用任何类型的值。动态类型语言的示例包括 PHP、JavaScript、MATLAB、Ruby、Python 等。