脚本语言与编程语言

Scripting Language vs Programming Language

有人能解释一下脚本语言和编程语言之间的区别吗?你也可以为每一个陈述一些例子。我在谷歌上搜索了很多,但我总是能从堆栈溢出中找到最好的答案。


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

例如,在正常情况下,在运行C程序之前必须先编译它。但在正常情况下,在运行JavaScript程序之前不需要编译它。因此,JavaScript有时被称为"脚本"语言。

这一行变得越来越模糊,因为使用现代硬件和现代编译技术可以快速编译。例如,V8,Google Chrome中的javascript引擎,在浏览器之外也使用了很多,实际上是将javascript代码快速编译为机器代码,而不是解释它。(实际上,V8是一个优化的两阶段编译器。)

还要注意,一种语言是否是一种"脚本"语言,与其说是语言,还不如说是关于环境的。你没有理由不能编写一个C解释器并把它用作脚本语言(人们也有)。也没有理由不能将javascript编译为机器代码并将其存储在可执行文件中(人们也有)。Ruby语言就是一个很好的例子:最初的实现是完全解释的(一种"脚本"语言),但是现在有了多个编译器。

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

  • 卢阿
  • JavaScript
  • vbscript和vba
  • 珀尔

以及少量传统上与显式编译步骤一起使用的代码:

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

…然后,您可以在这两个阵营中使用类似于python的东西:python在没有编译步骤的情况下被广泛使用,但是主实现(cpython)通过动态编译到字节码,然后在虚拟机中运行字节码来实现这一点,并且它可以将字节码写到文件(.pyc.pyo中以供使用,而无需重新编译。

这只是少数,如果你做一些研究,你会发现更多。


为了理解脚本语言和编程语言之间的区别,我们必须理解脚本语言的诞生原因。

最初,有编程语言编写程序,如Excel、Word、浏览器、游戏等等。这些程序是用C语言和Java语言构建的。随着时间的推移,这些程序需要一种用户创建新功能的方法,因此他们必须为字节码提供一个接口,因此脚本语言就诞生了。

脚本语言通常不编译,所以只要编写有意义的东西就可以运行。因此Excel可以使用C++来构建,但它公开了一种称为VBA的脚本语言,以供用户定义功能。类似的浏览器可以用C++/Java构建,但是它们公开了一种叫做JavaScript的脚本语言(与Java无关)。游戏通常是用C++构建的,但是公开了一种称为LUA的语言,以便用户定义自定义功能。

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

尽管脚本语言可能访问较少,速度较慢,但它们可以是非常强大的工具。脚本语言成功的一个因素是容易更新。你还记得Web上Java应用程序的日子吗?这是运行编程语言(Java)和运行脚本语言(JavaScript)的一个例子。当时,计算机没有那么强大,JavaScript也没有那么成熟,所以Java applet主宰了场景。但是Java应用程序很烦人,它们要求用户对负载进行排序并编译语言。快速前进到今天,Java小程序几乎灭绝了,JavaScript在这个场景中占据主导地位。由于大多数浏览器组件都已安装,因此JavaScript的加载速度非常快。

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


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

语言没有被归类为脚本或者不属于脚本——它完全取决于执行环境。

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


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

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


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

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

***但在某些情况下,编程语言会转换为解释器,副诗式的用法是使用C解释器,您可以使用"C"脚本。编写脚本通常是为了控制应用程序的行为,在这种情况下,将使用编程语言来构建应用程序。但是要注意,作为Python的一个例子,它的界限日益模糊,这取决于人们如何使用该语言。


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

  • 脚本语言不是由用户(python、perl、shell等)编译为机器代码的。相反,另一个程序(称为解释器,运行程序并模拟其行为)
  • 一些不是脚本编写的编程语言(C、C++、Haskell和其他"编译"语言)被编译成机器代码,然后运行。

  • 我不同意这样一个事实:使用解释程序的语言是脚本语言,而编译的语言是编程语言。我们可以为任何语言开发一个解释器或编译器。解释环境更适合Web脚本编写,并使其更容易,这就是为什么我们拥有它。

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

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

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


    在脚本语言(如JavaScript和旧的PHP版本)中,我们使用现有的基本函数和方法来执行我们的工作。以JavaScript中的一个例子为例,我们可以使用ajaxweb-sockets,前提是浏览器或方法支持它们,或者它们存在于浏览器中。但是在C语言或C++语言中,Java可以从头开始编写这个特性,即使这个库的任何库都不可用,但是我们不能在JavaScript中这样做。

    您能在javascript的帮助下支持Internet Explorer 8或更早版本的Web套接字吗?但是你可以在C或C++或Java中编写一个插件,它可以向Internet Explorer 8添加Web套接字的特性。

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

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

    另外,我很抱歉只围绕php-javascript来讨论我的答案,但我使用这两个,因为我在这两个方面有相当的经验。


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

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

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

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

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

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

    如果我们说真正的区别在于它是否被编译了,那么我们会遇到一个问题,因为在V8中运行的javascript被编译了,而在Rhino中运行的JavaScript却没有。

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

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


    早在这个世界还年轻的时候,在你从.exe或.bat中选择的个人电脑世界里,描述起来很简单。UNIX系统总是有shell脚本(/bin /SH,/bin /cSH,/bin /kSH等)和编译语言(C/C++ + FORTRAN)。

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

    不同的人/团体编写新的口译员来解决特定的问题领域。awk是最著名的一种,它主要用于模式匹配和对输入应用一系列数据转换。它工作得很好,但问题域有限。由于源代码不可用,该域的扩展几乎不可能。Perl(Larry Wall,Principle Author/Architect)工具脚本编写到下一个级别,并开发了一个解释器,它不仅允许用户运行系统命令、操作输入和输出数据、支持无类型变量,还允许用户从脚本本身中访问作为函数的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


    除了解释脚本语言和编译编程语言的不同之外,还有下面的另一个不同之处,我想已经忽略了。

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

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

    SRC-ECMA


    脚本语言

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

    脚本语言示例

  • JavaScript
  • 珀尔
  • Python
  • 脚本语言的优点:

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

  • 更少的代码行(loc)

  • 程序语言

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

    编程语言示例

  • C
  • C++与
  • 爪哇
  • 更多细节

    • http://www.yorku.ca/nmw/facs1939f13/javascript_all/js_scriptingvsprogramming.html
    • http://www.killersites.com/blog/2005/scripting-vs-programming-is-there-a-difference/


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

    谢谢尼特·K·贾哈


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

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

    • 它适用于小型"脚本",而不是大型程序。
    • 它嵌入在另一个应用程序中,用于对该应用程序进行小的修改。
    • 它是解释而不是编译的。
    • 它是为初学者而不是专业人员设计的。
    • 它的名字以"脚本"结尾。

    我补充说:

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

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

    如果一种编程语言具有显著的"编译时"行为,它在不运行程序的情况下分析代码和报告错误,比如C、Java或C语言中的类型错误,那么它很可能不被认为是脚本语言。

    传统上,很多脚本语言都是直接从源代码中解释的,但是它们中更流行的是预编译代码的性能更强的实现,比如python的.pyc文件,或者优化运行前编译为本机代码的javascript引擎。

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

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

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

    BASIC也是一种古老的编程语言,如COBOL和FORTRAN,从人们对一种语言进行静态分析之前开始,基本上在"脚本语言"甚至成为一种东西之前。