脚本语言与编程语言


Answers:


466

脚本语言是不需要显式编译步骤的编程语言。

例如,在正常情况下,您必须先编译C程序,然后才能运行它。但是在通常情况下,您无需在运行前就编译JavaScript程序。因此JavaScript有时被称为“脚本”语言。

由于使用现代硬件和现代编译技术可以如此快速地进行编译,因此这条线变得越来越模糊。例如,V8是Google Chrome浏览器中的JavaScript引擎,并且在浏览器之外也经常使用,实际上将JavaScript代码动态地编译为机器代码,而不是对其进行解释。(实际上,V8是一个优化的两阶段编译器。)

还要注意,一种语言是否为“脚本”语言可能比该语言更能说明环境。没有理由您不能编写C解释器并将其用作脚本语言(人们已经拥有)。也没有理由不能将JavaScript编译为机器代码并将其存储在可执行文件中(人们已经拥有)。Ruby语言就是一个很好的例子:原始实现完全被解释(一种“脚本”语言),但是现在有多个编译器。

“脚本”语言的一些示例(例如,传统上使用没有显式编译步骤的语言):

  • a
  • 的JavaScript
  • VBScript和VBA
  • 佩尔

以及少量传统上用于显式编译步骤的代码:

  • C
  • C ++
  • d
  • Java (但请注意,Java被编译为字节码,然后在运行时进行解释和/或重新编译)
  • 帕斯卡

...然后您将诸如Python之类的东西放在两个阵营中:Python被广泛使用而无需编译步骤,但是主要实现(CPython)通过即时编译为字节码,然后在VM,它可以写字节码出来的文件(.pyc.pyo)使用而无需重新编译。

这只是一个非常小,如果你做一些研究,你可以找到更多。


1
极好的解释!
角斗士

48
@ mg30rg:呵呵-脚本完全可以是“真实的”编程。(您不会相信我见过的一些bash脚本...)我认为定义它的最简单方法(同样,这不是语言,而是环境):运行时环境是否看到源代码?如果是这样,我会称其为“脚本”;如果没有,我不会。因此,从这种意义上说,基于浏览器的JavaScript是“脚本”,因为即使V8之类的引擎即时进行编译,其源代码仍会传递到运行时环境。类似地,shell脚本。传统C程序的源代码交付给运行时。
TJ Crowder 2014年

2
@ mg30rg:但是同样,这些行一直变得越来越模糊。:-)考虑Java字节码。没有JVM,您将无法运行它,但这不是源代码。(通常,反编译器可以将其转换为外观合理的源代码,但是...)我不(遥远)认为传统环境中的Java是脚本语言。但是,我也没有花很多时间考虑类别。:-)
TJ Crowder 2014年

2
@ CME64:不,主要实现(CPython)即时编译为字节码,然后在VM中运行字节码。尽管有Python到C的工具(Cython和Pyrex),但通常不是运行Python的方式。
TJ Crowder

2
为了捍卫@ Vityata,VBScript用记事本编写,并解释为文本输入,而在编辑器中键入时,VBA代码被编译为P代码,即修改一行代码后在编辑器中看到的源代码,不是您键入的代码,而是VBE 对基本P代码的再现:VBA与VBScript的机制完全不同,将它们混在一起在列表中根本感觉不对。VBA比VBScript更接近VB6。这只是一个明确的限制,阻止它构建独立的可执行文件。
Mathieu Guindon '17

103

要了解脚本语言和编程语言之间的区别,必须了解为什么脚本语言诞生了。

最初,有一些编程语言是为构建诸如excel,word,浏览器,游戏等程序而编写的。这些程序是由诸如c和java之类的语言构建的。随着时间的流逝,这些程序需要用户创建新功能的方式,因此它们必须提供与其字节码的接口,因此脚本语言应运而生。

脚本语言通常不会编译,因此只要您编写有意义的内容就可以运行。因此,可以使用C ++构建excel,但是它公开了一种称为VBA的脚本语言,供用户定义功能。类似地,浏览器可能是用C ++ / Java构建的,但它们公开了一种称为javascript的脚本语言(与Java毫无关系)。游戏通常是使用C ++构建的,但会公开一种称为Lua的语言,供用户定义自定义功能。

脚本语言通常位于某种编程语言之后。脚本语言通常在原始编程语言的一部分上运行,因此它们对计算机本机功能的访问较少。这里的一个示例是Javascript将无法访问您的文件系统。脚本语言通常比编程语言慢。

尽管脚本语言可能访问较少且速度较慢,但​​它们可能是非常强大的工具。脚本语言成功的一个因素是更新的简便性。您还记得网络上Java小程序的时代吗?这是运行编程语言(java)与运行脚本语言(javascript)的示例。当时,计算机还没有强大的功能,而javascript还不那么成熟,因此Java applet占据了主导地位。但是Java小程序很烦人,它们要求用户进行某种负载并编译语言。快进到今天,Java applet已几乎绝迹,而Java主导了整个场景。由于大多数浏览器组件已经安装,因此Javascript加载速度非常快。

最后,脚本语言也被认为是编程语言(尽管有些人拒绝接受)-我们在此应使用的术语是脚本语言与编译语言。


4
您难道不认为您的意思是:“解释语言与编译语言”而不是“脚本语言与编译语言”吗?
bitsapien

6
“一个例子就是Javascript将无法访问您的文件系统”,Nodejs打招呼
Mohammad

@Mohammad NodeJS是一个运行时,它允许编码人员将Javascript用作编码的“语言”。NodeJS不是100%Javascript。
JeffNhan

65

所有脚本语言都是编程语言。

语言是否未分类为脚本-它完全取决于执行环境。

如果环境是可解释的环境,则通常将其称为脚本环境。


18

差异越来越小。传统上,脚本语言扩展了现有程序...我认为“脚本”的主要定义是指为现有实体执行要编写的一组指令。但是,在脚本语言以专有和口语语法开头的情况下,如今,大多数流行的语言都与C有关。

我认为“解释与编译”的区别实际上是扩展现有程序(带有内置解释器)的症状,而不是内在的区别。程序员和外行更关心的是“程序员在做什么?” 一个程序被解释而另一个程序被编译的事实对确定创建者的活动差异几乎没有意义。您不会判断剧作家是更常朗读还是在舞台上表演,是吗?


12

编程语言:编译为机器代码,并在基础操作系统的硬件上运行。

脚本语言:是编程语言的非结构化子集。它通常被解释。它基本上是“脚本”其他要做的事情。主要重点不是主要构建自己的应用程序,而是使现有应用程序按您想要的方式运行,例如,用于浏览器的JavaScript,TCL等,

***但是在某些情况下,编程语言会转换为解释器,反之亦然,例如使用C语言解释器,您可以在其中使用“ C”脚本。通常编写脚本来控制应用程序行为,其中使用“编程语言”来构建应用程序。但是请注意,作为Python的示例,分界每天都在变得越来越模糊,这取决于人们使用该语言的方式。


10

脚本语言是编程语言的子集。

  1. 用户不会将脚本语言编译为机器代码(python,perl,shell等)。而是另一个程序(称为解释器,运行该程序并模拟其行为)
  2. 一些不是脚本的编程语言(C,C ++,Haskell和其他“编译”语言)被编译为机器代码,然后运行。

4

我认为您所说的“差异”实际上是真正差异的结果。

实际的差异是所编写代码的目标。谁来运行此代码。

脚本语言用于编写以软件系统为目标的代码。这将使该软件系统上的操作自动化。该脚本将是对目标软件系统的一系列指令。

编程语言以计算系统为目标,该计算系统可以是真实或虚拟机。指令由机器执行。

当然,一台真正的机器只能理解二进制代码,因此您需要编译一种编程语言的代码。但这是针对计算机而不是程序的结果。

另一方面,脚本的目标软件系统可以编译或解释代码。取决于软件系统。

如果说真正的区别在于它是否已编译,那么就会遇到问题,因为Javascript在V8中运行时是编译的,而在Rhino中运行时则不是。

由于脚本语言已经发展为非常强大的功能,因此变得更加混乱。因此,它们不仅限于创建小型脚本来自动化另一个软件系统上的操作,还可以使用它们创建任何功能丰富的应用程序。

Python代码以解释器为目标,因此我们可以说它在该解释器上“编写”了脚本操作。但是,当您编写Python代码时,您不会将其视为编写解释器的脚本,而是将其视为创建应用程序。解释器只是在那里可以进行更高级别的编码。因此,对我来说,Python更像是一种编程语言,而不是脚本语言。


4

我不赞成使用解释器的语言是脚本语言,而被编译的语言是编程语言。我们可以为任何语言开发解释器或编译器。解释后的环境更适合于Web脚本编写,并使其更容易,这就是我们拥有它的原因。

好吧,我觉得脚本语言和编程语言之间没有任何区别。这是完成工作的全部。当涉及到与Web相关的任务时,我们将它们称为考虑了小任务的Web脚本,这样,我们也可以将与系统相关的任务称为系统或OS级别的脚本,将用于完成这些任务的编程语言称为系统脚本语言。

并不是说不能用C语言用Python和Web脚本编写系统级代码(如果我们可以建立所需的平台和环境,绝对可以做到)。但是,所有工作量太大,可能会影响快速开发的时间限制,并且减少的少量延迟不会使Web脚本受益匪浅。但是,如果我们使用Python执行系统级任务,反之亦然。

底线:语言选择取决于要执行的任务的性质,区分语言是一种脚本语言,这是神话。


4

脚本语言

脚本语言在另一个程序中解释。JavaScript嵌入在浏览器中,并由该浏览器解释。

脚本语言示例

  1. 的JavaScript
  2. 佩尔
  3. 蟒蛇

脚本语言的优点:

  1. 简单–脚本语言比编程语言更容易编写。

  2. 更少的代码行(LOC)

程式语言

像Java这样的编程语言是经过编译的,不会由其他应用程序以相同的方式进行解释。

示例编程语言

  1. C
  2. C ++和
  3. 爪哇

更多细节


脚本语言编程语言。此外,Java的通过调用JVM另一个应用程序解释。
bfontaine

4

在脚本语言(JavaScript和旧的PHP版本)中,我们使用现有的基本功能和方法来执行工作。让JavaScript我们举一个例子,我们可以使用ajaxweb-sockets仅当它们受浏览器支持或存在的方法或它们在浏览器中时才使用。但是,在C或C ++,Java之类的语言中,即使该功能的任何库不可用,我们也可以从头开始编写该功能,但是我们无法在JavaScript中使用它。

您可以在Internet Explorer 8或更低版本中借助JavaScript来支持Web套接字 吗?但是您可以用C或C ++或Java编写插件,从而可以向Internet Explorer 8添加Web套接字的功能。

基本上,在脚本语言中,我们按顺序编写代码,然后按顺序执行现有方法以完成工作。在数字计算器中输入数字和公式来执行操作也是脚本语言的一个很好的例子。我们应该注意,每种脚本语言的编译器/运行时环境总是以编程语言编写的,我们可以在其中添加更多功能和方法,并可以编写新的库。

PHP 这是某种黑白编程和脚本编写的语言。我们可以通过添加以另一种高级语言编写的已编译扩展来添加新方法。我们不能直接在PHP中添加高级网络功能或创建图像处理库。

PS非常抱歉,我只回答围绕PHP JavaScript的问题,但我使用了这两个,因为我在这两个方面有丰富的经验。


4

早在世界还很年轻的时候,在PC世界中,您是从.exe或.bat中选择的,所以描述很简单。Unix系统始终具有shell脚本(/ bin / sh,/ bin / csh,/ bin / ksh等)和编译语言(C / C ++ / Fortran)。

为了区分角色和职责,汇编语言(通常称为第三代语言)被视为“编程”语言,而“脚本”语言被视为调用了解释器的语言(通常称为第四代语言)。脚本语言通常被用作在多个命令/已编译程序之间进行连接的“胶水”,以便用户不必为执行任务而担心一组步骤-他们开发了一个文件,该文件描述了哪些步骤他们想要完成,这成为任何人都可以遵循的“脚本”。

许多人/团体写了新的口译员来解决特定的问题领域。awk是最知名的软件之一,它主要用于模式匹配和对输入进行一系列数据转换。它运行良好,但问题域有限。该域的扩展几乎是不可能的,因为源代码不可用。Perl(Larry Wall,主要作者/架构师)工具脚本提高了一个层次-并开发了解释器,该解释器不仅允许用户运行系统命令,操纵输入和输出数据,支持的无类型变量,而且还可以访问Unix系统级API作为脚本本身内部的功能。它可能是最早使用的高级脚本语言之一。

您的问题专门关于Python。因为python解释器针对包含python代码的文本文件运行,并且python代码可以在存在python解释器的任何位置运行,所以我想说这是一种脚本语言(与Perl相同)。您不需要为每个不同的OS / CPU架构重新编译用户python命令文件(就像使用C / C ++ / Fortran一样),从而使该文件明显更可移植且更易于使用。

此答案归功于Jerrold(Jerry)Heyman。原始线程:https : //www.researchgate.net/post/Is_Python_a_Programming_language_or_Scripting_Language


3

除了脚本语言是解释性语言和编程语言是编译性语言的区别外,还有另一个区别,如下所述,我想这是没有想到的。

脚本语言是一种编程语言,用于操纵,定制和自动化现有系统的设施。在这样的系统中,有用的功能已经可以通过用户界面获得,脚本语言是一种将该功能暴露给程序控制的机制。

而通常使用编程语言从头开始对系统进行编码。

src ECMA


2

如果我们从逻辑上看编程语言和脚本语言,那么这是99.09%相同。因为我们使用相同的概念,例如循环,控制条件,变量等,所以我们可以说是相同的,但是它们之间只有一点不同,那就是在C / C ++和其他编程语言中,我们在执行之前编译代码。但是在PHP,JavaScript和其他脚本语言中,我们不需要编译就可以直接在浏览器中执行。

谢谢Nitish K. Jha


2

脚本语言是人们认为是脚本语言的编程语言。这是一个没有明确界限的人为类别,每个提议的规则都有例外。

用于说一种语言是一种脚本语言的经典规则是特征,而不是定义。如果一种语言满足许多规则,则很有可能将其视为脚本语言。如果没有,则很有可能不是。规则通常包括:

  • 它用于小型“脚本”,而不是大型程序。
  • 它嵌入在另一个应用程序中,用于对该应用程序进行小的修改。
  • 它是解释而不是编译。
  • 它适用于新手程序员,而不是专业人士。
  • 它的名称以“脚本”结尾。

我会补充:

  • 脚本语言是一种编程语言,几乎所有错误都在运行时检测到。

也就是说,它可以是一种解释语言。

如果编程语言具有显着的“编译时”行为,可以在不运行程序的情况下分析代码并报告错误,例如C,Java或C#的类型错误,则很可能不将其视为脚本语言。

传统上,许多脚本语言是直接从源代码中解释的,但是在更流行的脚本语言中,已经获得了性能更高的实现,这些实现可以对代码进行预编译,例如Python的.pyc文件,或优化JavaScript引擎,这些引擎在运行前可编译为本机代码。

如果该语言可以由解释器实现,而解释器仅在运行源代码时查看源代码,则该语言可能被视为脚本语言。是否实际上以这种方式实现并不重要,但是如果可以实现,那么也就不需要对代码进行大量的编译时错误检查。

如果该语言提供了有用的静态语义,而无需运行程序就可以检测到错误(语法错误除外),则该语言可能不是脚本语言。

总是有例外,通常基于某种语言的传统而不是任何实际规则。尽管BASIC几乎可以满足任何人曾经使用过的所有标准,但通常不会将其视为“脚本语言”。这就是为什么Visual Basic Sc​​ript必须在名称中添加“脚本”,以使其与Visual Basic(一种用于大型程序的“真实”编程语言)区分开来。

BASIC还是一种古老的编程语言,例如COBOL和Fortran,在人们期望从某种语言进行静态分析之前,甚至在“脚本语言”还没有成为现实之前,BASIC都是这样。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.