脚本语言与编程语言

谁能解释一下脚本语言和程序设计语言的区别?< br > 你也可以举一些例子。我在谷歌上搜索了很多,但我总是从Stack Overflow上找到最好的答案
361490 次浏览

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

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

随着现代硬件和现代编译技术的发展,编译的速度越来越快,这条界限变得越来越模糊。例如,谷歌Chrome中的JavaScript引擎V8(在浏览器之外也经常使用)实际上是将JavaScript代码实时编译为机器代码,而不是解释它。(实际上,V8是一个优化的两阶段编译器。)

还要注意,一种语言是否是“脚本”语言可能更多地与环境有关,而不是语言本身。没有理由不能编写C解释器并将其用作脚本语言(人们已经这样做了)。也没有理由不能将JavaScript编译为机器代码并将其存储在可执行文件中(人们已经这样做了)。Ruby语言就是一个很好的例子:最初的实现是完全解释的(一种“脚本”语言),但现在有多个编译器。

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

  • Lua
  • JavaScript
  • VBScript和VBA
  • Perl

还有一小部分传统上与显式编译步骤一起使用:

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

...然后你就有了像Python这样的东西,它们处于两个阵营:Python被广泛使用,没有编译步骤,但主要实现(CPython)是通过动态编译字节码,然后在VM中运行字节码来实现的,并且它可以将字节码写入文件(.pyc.pyo)以供使用,而无需重新编译。

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

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

语言并不被归类为脚本——这完全取决于执行环境。

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

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

  1. 脚本语言不会被用户编译成机器码(python、perl、shell等)。相反,另一个程序(称为解释器,运行程序并模拟其行为)
  2. 一些不是脚本的编程语言(C、c++、Haskell和其他“编译”语言)被编译成机器代码,然后运行。
编程语言: 编译为机器码并在底层操作系统的硬件上运行。< / p >

脚本语言: 是编程语言的非结构子集。这是一般的解释。 它基本上是“脚本”其他事情来做事情。主要的重点不是构建你自己的应用程序,而是让现有的应用程序以你想要的方式运行,例如浏览器的JavaScript, TCL等,

但是有些情况下,编程语言被转换为解释器,反之亦然,比如使用C解释器,你可以用C脚本。 脚本通常用于控制应用程序的行为,而编程语言则用于构建应用程序。 但要注意的是,界限正在日益模糊——作为一个Python的例子,这取决于你如何使用语言

这些差异正变得越来越不重要。传统上,脚本语言扩展了现有的程序……我认为这就是“脚本”的主要定义,它指的是为现有实体编写一组执行指令。然而,脚本语言起源于专有的和口语化的语法,现在流行的大多数脚本语言都与C有某种关系。

我认为“解释型与编译型”的区别实际上是扩展现有程序(使用内置解释器)的症状,而不是本质上的区别。程序员和外行更关心的是,“程序员在做什么?”一个程序是解释的,另一个是编译的,这一事实对于确定创建者活动的差异意义不大。你不会根据一个剧作家的戏剧是更常被大声朗读还是更常在舞台上表演来评价他,对吗?

脚本语言

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

脚本语言示例

  1. JavaScript
  2. Perl
  3. Python

脚本语言的优点:

    简单-脚本语言比编程更容易编写 语言。< / p >
  1. 减少代码行数(LOC)

编程语言

像Java这样的编程语言是由另一个应用程序以同样的方式编译和解释的。

编程语言示例

  1. C
  2. c++和
  3. Java

更多的细节

除了脚本语言是解释性的,而编程语言是编译性的,还有一个不同之处,如下所示,我想这一点已经被忽略了。

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

而编程语言通常用于从头开始编写系统代码。

src ECMA

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

实际的区别在于所编写代码的目标。谁来运行这段代码。

脚本语言用于编写针对软件系统的代码。它将对软件系统进行自动化操作。脚本将是目标软件系统的指令序列。

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

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

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

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

由于脚本语言已经进化得非常强大,所以它变得更加令人困惑。因此,它们不局限于创建小脚本来自动化另一个软件系统上的操作,您可以使用它们创建任何丰富的应用程序。

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

要理解脚本语言和程序设计语言之间的区别,就必须理解脚本语言诞生的原因。

最初,有编写程序的语言,如excel, word,浏览器,游戏等。这些程序是用c和java等语言编写的。随着时间的推移,这些程序需要用户创建新功能的方法,因此它们必须为字节码提供接口,因此脚本语言诞生了。

脚本语言通常是不编译的,所以只要你写了一些有意义的东西就可以运行。因此,excel可以使用c++构建,但它公开了一种名为VBA的脚本语言供用户定义功能。类似地,浏览器可以用c++ /Java构建,但它们暴露了一种称为javascript的脚本语言(与Java没有任何关系)。游戏通常是用c++构建的,但会公开一种名为Lua的语言供用户定义自定义功能。

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

尽管脚本语言可能访问较少且速度较慢,但它们可能是非常强大的工具。脚本语言成功的一个因素是易于更新。你还记得web上的java applet的日子吗?这是一个运行编程语言(java)和运行脚本语言(javascript)的例子。在那个时候,计算机还没有那么强大,javascript也还不成熟,所以Java小程序占据了主导地位。但是Java applet很烦人,它们要求用户加载和编译语言。快进到今天,Java小程序几乎绝迹,Javascript占据了主导地位。Javascript加载速度非常快,因为大多数浏览器组件都已经安装好了。

最后,脚本语言也被认为是编程语言(尽管有些人拒绝接受这一点)——我们在这里应该使用的术语是脚本语言与编译语言的对比。

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

< p >谢谢 Nitish K. Jha

在脚本语言(JavaScript和旧的PHP版本)中,我们使用现有的基本函数和方法来执行我们的工作。 让我们以JavaScript为例,我们可以使用ajaxweb-sockets,只有当它们被浏览器支持或在浏览器中存在方法。但在C或c++、Java等语言中,我们可以从头开始编写该功能,即使该功能的任何库都不可用,但在JavaScript中我们不能这样做

在JavaScript的帮助下,你能支持ie8或更早版本的web-socket吗 但是你可以用C或c++或Java编写一个插件,它可以为ie8添加web-socket的特性

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

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

注:我真的很抱歉围绕PHP JavaScript旋转我的答案,但我使用这两个,因为我在这两个方面有相当多的经验。

我不同意使用解释器的语言是脚本语言,而被编译的是编程语言。我们可以为任何语言开发解释器或编译器。解释环境更适合web脚本编写,使它更容易,这就是为什么我们有它。

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

同样,这并不是说不能用Python编写系统级代码,不能用C语言编写Web脚本(如果我们能够建立所需的平台和环境,当然可以这样做)。但它所需要的是太多的努力,这可能会影响快速开发的时间限制,而减少的一点点延迟对我们的web脚本没有多大好处。但如果我们在Python中执行系统级任务,则相反。

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

在世界还很年轻的时候,在PC世界中,你可以从。exe或。bat中选择,描述很简单。Unix系统一直都有shell脚本(/bin/sh, /bin/csh, /bin/ksh等)和编译语言(C/ c++ /Fortran)。

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

不同的人/团体编写新的解释器来解决特定的问题域。Awk是比较著名的一种,它主要用于模式匹配和对输入应用一系列数据转换。它工作得很好,但问题范围有限。该域的扩展几乎是不可能的,因为源代码不可用。Perl (Larry Wall,主要作者/架构师)工具脚本到下一个层次-并开发了一个解释器,不仅允许用户运行系统命令,操作输入和输出数据,支持无类型变量,而且还可以从脚本本身作为函数访问Unix系统级api。它可能是最早被广泛使用的高级脚本语言之一。正是Perl (IMHO)使脚本语言跨越了任意界限,并增加了编程语言的功能。

你的问题是关于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

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

经典的规则用来说一种语言是一种脚本语言是表征,而不是定义。如果一种语言满足许多规则,那么它很有可能被认为是一种脚本语言。如果不是,很有可能不是。规则通常包括:

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

我还要补充说:

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

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

如果一种编程语言具有显著的“编译时”行为,即在不运行程序的情况下分析代码并报告错误,例如来自C、Java或c#的类型错误,那么它很可能不被认为是一种脚本语言。

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

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

如果该语言提供了一种有用的静态语义,可以帮助检测错误(除了语法错误),而不需要运行程序,那么它可能不是一种脚本语言。

总会有例外,通常是基于一门语言的传统,而不是任何实际的规则。 BASIC通常不被认为是一种“脚本语言”,尽管它几乎满足了任何人曾经使用过的作为脚本语言的所有标准。这就是为什么Visual Basic Script必须在名称中添加“脚本”,以区别于Visual Basic,后者是一种用于大型程序的“真正”编程语言

BASIC也是一种古老的编程语言,就像COBOL和Fortran一样,在人们期望从语言中获得静态分析之前,基本上在“脚本语言”出现之前。