脚本语言与编程语言

Rah*_*ddy 333 scripting programming-languages scripting-language

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

T.J*_*der 448

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

例如,在正常情况下,您必须先编译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),无需重新编译即可使用.

这只是少数,如果你做一些研究,你可以找到更多.

  • @ mg30rg:嘿 - 脚本可以完全是"真正的"编程.(你不会相信我见过的一些bash脚本......)我认为定义它的最简单的方法(再次,这不是语言的东西,它是一个环境的东西)是:运行时环境看到源代码?如果是这样,我称之为"脚本"; 如果没有,我不会.因此,从这个意义上说,基于浏览器的JavaScript是"脚本",因为即使像V8这样的引擎在运行中编译它,源仍然会被传递到运行时环境.类似的shell脚本.传统的C程序源*不会传递给运行时. (45认同)
  • @ mg30rg:但是,这些线条一直在变得越来越模糊.:-)考虑Java字节码.没有JVM就无法运行它,但它不是源代码.(通常可以通过反编译器将其转换为看起来合理的源代码,但是......)我不会(远程)将Java视为传统环境中的脚本语言.但是,我也不会花很多时间考虑这些类别.:-) (2认同)
  • @ CME64:不,主要实现(CPython)动态编译为字节码并在VM中运行字节码.虽然有Python-to-C工具(Cython和Pyrex),但通常不会运行Python. (2认同)
  • 对于@Vityata的辩护,VBScript用记事本编写并解释为文本输入,而VBA代码在编辑器**中键入时编译为P-Code**,即在修改后在编辑器中看到的源代码代码行,不是你输入的代码,而是底层P代码的VBE*rendition*:VBA与VBScript的机制是完全不同的,并且将它们集中在该列表中只是感觉不对所有.VBA比VBS更接近VB6; 它只是一个明确的限制,阻止它构建一个独立的可执行文件. (2认同)

Yan*_* Li 98

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

最初,编写的语言是为了构建excel,word,浏览器,游戏等程序而编写的.这些程序是用c和java等语言构建的.加班,这些程序需要用户创建新功能的方式,因此他们必须提供字节码的接口,因此脚本语言诞生了.

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

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

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

最后,脚本语言也被认为是编程语言(虽然有些人拒绝接受) - 我们应该使用的术语是脚本语言与编译语言.

  • "这里的一个例子是Javascript将无法访问您的文件系统",Nodejs说 (5认同)
  • 难道你不认为你的意思是:"解释语言与编译语言"而不是"脚本语言与编译语言"? (4认同)

Ode*_*ded 61

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

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

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


小智 18

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

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


sai*_*arm 12

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

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

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


jh3*_*314 8

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

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


小智 6

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

实际区别在于编写代码的目标。谁将运行此代码。

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

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

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

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

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

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

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


小智 5

脚本语言

\n

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

\n

脚本语言示例

\n
    \n
  1. JavaScript
  2. \n
  3. 珀尔
  4. \n
  5. Python
  6. \n
\n

脚本语言的优点:

\n
    \n
  1. 简单的\xe2\x80\x93 脚本语言比编程语言更容易编写。

    \n
  2. \n
  3. 更少的代码行 (LOC)

    \n
  4. \n
\n

编程语言

\n

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

\n

编程语言示例

\n
    \n
  1. C
  2. \n
  3. C++ 和
  4. \n
  5. 爪哇
  6. \n
\n

更多细节

\n\n


小智 5

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

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

也不是说不能用Python写系统级代码,用C语言写Web脚本(只要能搭建好所需的平台和环境,肯定可以)。但这需要付出太多的努力,这可能会影响快速开发的时间限制,而减少一点点延迟并不会给我们在Web脚本中带来多大好处。但如果我们在 Python 中执行系统级任务,则反之亦然。

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


Kar*_*han 5

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

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

各种人/团体编写了新的解释器来解决特定的问题域。awk 是最著名的一个,它主要用于模式匹配和对输入应用一系列数据转换。它运行良好,但问题域有限。该领域的扩展几乎是不可能的,因为源代码不可用。Perl(拉里·沃尔,主要作者/架构师)工具脚本编写更上一层楼 - 并开发了一个解释器,不仅允许用户运行系统命令、操作输入和输出数据、支持无类型变量,还可以访问 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