【问题标题】:Scripting Language vs Programming Language [closed]脚本语言与编程语言[关闭]
【发布时间】:2013-06-19 15:58:07
【问题描述】:

谁能解释一下脚本语言和编程语言之间的区别?
你也可以为每个人陈述一些例子。我用 Google 搜索了很多,但我总是从 Stack Overflow 中找到最佳答案。

【问题讨论】:

    标签: scripting programming-languages scripting-language


    【解决方案1】:

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

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

    这条线越来越模糊,因为现代硬件和现代编译技术的编译速度如此之快。例如,谷歌浏览器中的 JavaScript 引擎 V8 在浏览器之外也使用了很多,它实际上将 JavaScript 代码即时编译成机器代码,而不是解释它。 (事实上​​,V8 是一个优化的两阶段编译器。)

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

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

    • 卢阿
    • JavaScript
    • VBScript 和 VBA
    • Perl

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

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

    ...然后你会在两个阵营中都有类似 Python 的东西:Python 在没有编译步骤的情况下被广泛使用,但主要实现 (CPython) 通过即时编译为字节码然后运行VM 中的字节码,它可以将该字节码写入文件(.pyc.pyo)以供在不重新编译的情况下使用。

    这只是非常少数,如果您进行一些研究,您会发现更多。

    【讨论】:

    • @T.J.Crowder 澄清一下,我不想在这里争论。我迫切需要原始问题的答案,以解决辩论。我可以将脚本与编码区分开来,因为我感觉我在做什么,但这不是一个有效的论点,它在所有情况下都不起作用。即,当我在编写 批处理文件安装脚本powershell 脚本,但我不确定何时创建基于 ASPPHP 的服务器。还有很多JavaScript“魔法”感觉就像真正的编程。 (我经常看到其他人这样做。)
    • @mg30rg:呵呵——脚本完全可以是“真正的”编程。 (你不会相信我见过的一些 bash 脚本......)我认为定义它的最简单方法(再次强调,这不是语言问题,而是环境问题)是:看到源代码?如果是这样,我会称之为“脚本;”如果没有,我不会。所以从这个意义上说,基于浏览器的 JavaScript 是“脚本”,因为即使像 V8 这样的引擎即时编译它,源代码仍然会传递到运行时环境。类似地 shell 脚本。传统 C 程序的源代码不会传送到运行时。
    • @mg30rg:但同样,这些界限越来越模糊。 :-) 考虑 Java 字节码。没有 JVM 就无法运行它,但它不是源代码。 (通常可以通过反编译器将其转换回看起来合理的源代码,但是......)我不(远程)将传统环境中的 Java 视为脚本语言。但是,我也没有花很多时间考虑类别。 :-)
    • @CME64:不,主要实现 (CPython) 动态编译为字节码并在 VM 中运行字节码。虽然有 Python 到 C 的工具(Cython 和 Pyrex),但 Python 通常不是这样运行的。
    • 为@Vityata 辩护,VBScript 是用记事本编写并解释为文本输入,而 VBA 代码在编辑器中键入时会编译为 P-Code,即修改一行代码后在编辑器中看到的源代码,不是您键入的代码,而是 VBE 对底层 P-Code 的再现:VBA 与 VBScript 的机制是完全彻底的不同,并且将它们放在该列表中根本感觉不对。 VBA 比 VBScript 更接近 VB6;这只是一个明确的限制,阻止它构建独立的可执行文件。
    【解决方案2】:

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

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

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

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

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

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

    【讨论】:

    • 你不认为你的意思是:“解释语言与编译语言”而不是“脚本语言与编译语言”吗??
    • " 例如,Javascript 将无法访问您的文件系统",Nodejs 打招呼
    • @Mohammad NodeJS 是一个运行时,它允许编码人员使用 Javascript 作为编码的“语言”。 NodeJS 不是 100% Javascript。
    【解决方案3】:

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

    语言不属于脚本,它完全取决于执行环境。

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        【解决方案5】:

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

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

        *** 但是在某些情况下,编程语言被转换为解释器,反之亦然,比如使用 C 解释器,您可以在其中使用“C”脚本。 脚本通常用于控制应用程序行为,而编程语言用于构建应用程序。 但请注意,作为 Python 的示例,分界日趋模糊,这取决于人们如何使用该语言。

        【讨论】:

          【解决方案6】:

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

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

          【讨论】:

            【解决方案7】:

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

            实际不同的是所写代码的目标。谁来运行这段代码。

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

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

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

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

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

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

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

            【讨论】:

              【解决方案8】:

              在世界还年轻的时候,在您从 .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 一样),使其更易于移植和使用。

              这个答案的功劳归于 Jerrold (Jerry) Heyman。 原帖:https://www.researchgate.net/post/Is_Python_a_Programming_language_or_Scripting_Language

              【讨论】:

                【解决方案9】:

                脚本语言

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

                脚本语言示例

                1. JavaScript
                2. Perl
                3. Python

                脚本语言的优势:

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

                2. 更少的代码行 (LOC)

                编程语言

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

                编程语言示例

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

                更多详情

                【讨论】:

                • 脚本语言编程语言。此外,Java 由另一个称为 JVM 的应用程序解释。
                【解决方案10】:

                除了Scripting language是Interpreted和Programming language是Compiled的区别外,还有一个区别如下,我想已经错过了..

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

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

                srcECMA

                【讨论】:

                  【解决方案11】:

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

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

                  另外,也不是不能用 Python 编写系统级代码,用 C 语言编写 Web 脚本(如果我们能建立所需的平台和环境,肯定可以做到)。但是它所需要的只是太多的努力,这可能会影响快速开发的时间限制,而减少一点延迟并不会让我们在 web 脚本中受益匪浅。但如果我们在 Python 中执行系统级任务,则反之亦然。

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

                  【讨论】:

                    【解决方案12】:

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

                    您能否借助 JavaScript 在 Internet Explorer 8 或更早版本中支持 web-sockets 但是你可以用 C 或 C++ 或 Java 编写一个插件,它可以为 Internet Explorer 8 添加 web-socket 的特性。

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

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

                    P.S.我很抱歉只围绕 PHP JavaScript 进行回答,但我使用这两个是因为我在这两个方面有相当多的经验。

                    【讨论】:

                      【解决方案13】:

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

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

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

                      我会补充:

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

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

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

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

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

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

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

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

                      【讨论】:

                        【解决方案14】:

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

                        谢谢 Nitish K. Jha

                        【讨论】:

                          猜你喜欢
                          • 1970-01-01
                          • 2012-10-02
                          • 1970-01-01
                          • 2011-03-12
                          • 1970-01-01
                          • 2014-06-05
                          • 2010-10-19
                          • 1970-01-01
                          • 2023-03-29
                          相关资源
                          最近更新 更多