脚本语言与编程语言

时间:2013-06-22 17:41:53

标签: scripting programming-languages scripting-language

有人可以解释脚本语言和编程语言之间的区别吗? 你也可以为每个例子说明一些例子。我已经搜索了很多,但我总是从Stack Overflow中找到最好的答案。

13 个答案:

答案 0 :(得分:436)

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

例如,在正常情况下,您必须先编译C程序才能运行它。但在正常情况下,您不必在运行之前编译JavaScript程序。所以JavaScript有时被称为“脚本”语言。

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

另请注意,语言是否是“脚本”语言可能更多地是关于环境而不是语言。没有理由你不能编写C语言解释器并将其用作脚本语言(人们有)。也没有理由不能将JavaScript编译成机器代码并将其存储在可执行文件中(人们也有)。 Ruby语言是一个很好的例子:原始实现完全被解释(一种“脚本”语言),但现在有多个编译器。

“脚本”语言的一些示例(例如,在没有明确编译步骤的情况下传统使用的语言):

  • 的Lua
  • 的JavaScript
  • VBScript和VBA
  • 的Perl

传统传统的一小部分用于显式编译步骤:

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

...然后你就像Python一样坐在两个阵营中:Python在没有编译步骤的情况下被广泛使用,但主要的实现(CPython)通过动态编译为字节码然后运行VM中的字节码,可以将该字节码写入文件(.pyc.pyo),无需重新编译即可使用。

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

答案 1 :(得分:61)

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

语言不归类为脚本 - 它完全取决于执行环境。

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

答案 2 :(得分:18)

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

我认为“解释与编译”的区别实际上是扩展现有程序(使用内置解释器)的症状,而不是内在差异。程序员和非专业人士更关心的是“程序员在做什么?”一个程序被解释而另一个程序被编译的事实意味着很难确定创建者的活动差异。你不会判断一个剧作家是否他的戏剧更常被大声朗读或在舞台上演出,对吗?

答案 3 :(得分:11)

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

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

***但是有一种情况是编程语言被转换为解释器而反之亦然,因为使用有一个C解释器,你可以在这里使用C'脚本。     通常编写脚本来控制应用程序行为,其中使用编程语言来构建应用程序。     但请注意,分界日常模糊,作为Python的一个例子,它取决于人们如何使用该语言。

答案 4 :(得分:8)

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

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

答案 5 :(得分:4)

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

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

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

编程语言面向计算系统,计算系统可以是真实的或虚拟的机器。说明由机器执行。

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

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

如果我们说真正的区别在于它是否被编译,那么我们就会遇到一个问题,因为在V8中运行Javascript时会编译它并且在Rhino中运行时不会。

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

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

答案 6 :(得分:4)

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

您是否可以在Internet Explorer 8或之前借助JavaScript 支持网络套接字 但您可以使用C或C ++或Java编写插件,这可能会将Internet插件的功能添加到Internet Explorer 8中。

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

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

P.S。我真的很抱歉只围绕PHP JavaScript来回答我的答案,但我使用这两个因为我在这两个方面有相当丰富的经验。

答案 7 :(得分:4)

我与使用解释器的语言是脚本语言并且编译的语言是编程语言这一事实​​不一致。我们可以为任何语言开发解释器或编译器。解释的环境更适合Web脚本编写,这使我们更容易理解它。

嗯,我觉得脚本语言和编程语言之间没有任何区别。这一切都与完成工作有关。当涉及到Web相关任务时,我们称之为考虑小任务的Web脚本,这样我们也可以将系统相关任务称为系统或操作系统级脚本,以及我们用来完成这些任务的编程语言作为系统脚本语言。

也不是因为人们无法用C语言编写Python和Web脚本中的系统级代码(如果我们能够建立所需的平台和环境,肯定可以做到)。但是所需要的只是过多的努力,这可能会影响快速开发的时间限制,并且减少的小延迟不会对Web脚本有太大的好处。但是,如果我们在Python中执行系统级任务,则反之亦然。

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

答案 8 :(得分:4)

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

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

各种人/团体编写了新的口译员来解决特定的问题领域。 awk是众所周知的之一,它主要用于模式匹配并在输入上应用一系列数据转换。它运作良好,但域名有限。该域的扩展几乎不可能,因为源代码不可用。 Perl(Larry Wall,主要作者/架构师)将工具脚本提升到新的水平 - 并开发了一个解释器,它不仅允许用户运行系统命令,操纵输入和输出数据,支持无类型变量,还可以访问Unix系统级API作为脚本本身的功能。它可能是最早使用的高级脚本语言之一。与Perl(恕我直言)一样,脚本语言越过任意一行并增加了编程语言的功能。

你的问题是关于Python的。因为python解释器针对包含python代码的文本文件运行,并且python代码可以在任何有python解释器的地方运行,我会说它是一种脚本语言(与Perl一样)。您不需要为每个不同的OS / CPU体系结构重新编译用户python命令文件(就像使用C / C ++ / Fortran一样),使其更加便携和易于使用。

这个答案归功于杰罗德(杰里)海曼。 原帖:https://www.researchgate.net/post/Is_Python_a_Programming_language_or_Scripting_Language

答案 9 :(得分:3)

脚本语言

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

脚本语言示例

  1. 的JavaScript
  2. 的Perl
  3. Python
  4. 脚本语言的优点:

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

    2. 更少的代码行(LOC)

    3. 程序化语言

      像Java这样的编程语言是以相同的方式编译而不是由其他应用程序解释的。

      编程语言示例

      1. C
      2. C ++和
      3. 爪哇
      4. 更多细节

答案 10 :(得分:3)

除了脚本语言是解释和编程语言是编译的区别之外,还有另外一个区别如下,我猜想已经错过了..

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

而编程语言通常用于从Scratch编写系统。

src ECMA

答案 11 :(得分:2)

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

由于 Nitish K. Jha

答案 12 :(得分:0)

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

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

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

我要添加:

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

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

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

>

传统上,很多脚本语言都是直接从源代码中解释的,但是最受欢迎的脚本语言已经获得了性能更高的预编译代码的实现,例如Python的.pyc文件,或者优化了可编译为本机代码的JavaScript引擎。在运行之前。

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

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

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

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