谁能解释脚本语言和编程语言之间的区别?
您还可以为每个示例说明一些示例。我已经用Google搜索了很多,但是我总是从Stack Overflow中找到最好的答案。
谁能解释脚本语言和编程语言之间的区别?
您还可以为每个示例说明一些示例。我已经用Google搜索了很多,但是我总是从Stack Overflow中找到最好的答案。
Answers:
脚本语言是不需要显式编译步骤的编程语言。
例如,在正常情况下,您必须先编译C程序,然后才能运行它。但是在通常情况下,您无需在运行前就编译JavaScript程序。因此JavaScript有时被称为“脚本”语言。
由于使用现代硬件和现代编译技术可以如此快速地进行编译,因此这条线变得越来越模糊。例如,V8是Google Chrome浏览器中的JavaScript引擎,并且在浏览器之外也经常使用,实际上将JavaScript代码动态地编译为机器代码,而不是对其进行解释。(实际上,V8是一个优化的两阶段编译器。)
还要注意,一种语言是否为“脚本”语言可能比该语言更能说明环境。没有理由您不能编写C解释器并将其用作脚本语言(人们已经拥有)。也没有理由不能将JavaScript编译为机器代码并将其存储在可执行文件中(人们已经拥有)。Ruby语言就是一个很好的例子:原始实现完全被解释(一种“脚本”语言),但是现在有多个编译器。
“脚本”语言的一些示例(例如,传统上使用没有显式编译步骤的语言):
以及少量传统上用于显式编译步骤的代码:
...然后您将诸如Python之类的东西放在两个阵营中:Python被广泛使用而无需编译步骤,但是主要实现(CPython)通过即时编译为字节码,然后在VM,它可以写字节码出来的文件(.pyc
,.pyo
)使用而无需重新编译。
这只是一个非常小,如果你做一些研究,你可以找到更多。
要了解脚本语言和编程语言之间的区别,必须了解为什么脚本语言诞生了。
最初,有一些编程语言是为构建诸如excel,word,浏览器,游戏等程序而编写的。这些程序是由诸如c和java之类的语言构建的。随着时间的流逝,这些程序需要用户创建新功能的方式,因此它们必须提供与其字节码的接口,因此脚本语言应运而生。
脚本语言通常不会编译,因此只要您编写有意义的内容就可以运行。因此,可以使用C ++构建excel,但是它公开了一种称为VBA的脚本语言,供用户定义功能。类似地,浏览器可能是用C ++ / Java构建的,但它们公开了一种称为javascript的脚本语言(与Java毫无关系)。游戏通常是使用C ++构建的,但会公开一种称为Lua的语言,供用户定义自定义功能。
脚本语言通常位于某种编程语言之后。脚本语言通常在原始编程语言的一部分上运行,因此它们对计算机本机功能的访问较少。这里的一个示例是Javascript将无法访问您的文件系统。脚本语言通常比编程语言慢。
尽管脚本语言可能访问较少且速度较慢,但它们可能是非常强大的工具。脚本语言成功的一个因素是更新的简便性。您还记得网络上Java小程序的时代吗?这是运行编程语言(java)与运行脚本语言(javascript)的示例。当时,计算机还没有强大的功能,而javascript还不那么成熟,因此Java applet占据了主导地位。但是Java小程序很烦人,它们要求用户进行某种负载并编译语言。快进到今天,Java applet已几乎绝迹,而Java主导了整个场景。由于大多数浏览器组件已经安装,因此Javascript加载速度非常快。
最后,脚本语言也被认为是编程语言(尽管有些人拒绝接受)-我们在此应使用的术语是脚本语言与编译语言。
我认为您所说的“差异”实际上是真正差异的结果。
实际的差异是所编写代码的目标。谁来运行此代码。
脚本语言用于编写以软件系统为目标的代码。这将使该软件系统上的操作自动化。该脚本将是对目标软件系统的一系列指令。
编程语言以计算系统为目标,该计算系统可以是真实或虚拟机。指令由机器执行。
当然,一台真正的机器只能理解二进制代码,因此您需要编译一种编程语言的代码。但这是针对计算机而不是程序的结果。
另一方面,脚本的目标软件系统可以编译或解释代码。取决于软件系统。
如果说真正的区别在于它是否已编译,那么就会遇到问题,因为Javascript在V8中运行时是编译的,而在Rhino中运行时则不是。
由于脚本语言已经发展为非常强大的功能,因此变得更加混乱。因此,它们不仅限于创建小型脚本来自动化另一个软件系统上的操作,还可以使用它们创建任何功能丰富的应用程序。
Python代码以解释器为目标,因此我们可以说它在该解释器上“编写”了脚本操作。但是,当您编写Python代码时,您不会将其视为编写解释器的脚本,而是将其视为创建应用程序。解释器只是在那里可以进行更高级别的编码。因此,对我来说,Python更像是一种编程语言,而不是脚本语言。
我不赞成使用解释器的语言是脚本语言,而被编译的语言是编程语言。我们可以为任何语言开发解释器或编译器。解释后的环境更适合于Web脚本编写,并使其更容易,这就是我们拥有它的原因。
好吧,我觉得脚本语言和编程语言之间没有任何区别。这是完成工作的全部。当涉及到与Web相关的任务时,我们将它们称为考虑了小任务的Web脚本,这样,我们也可以将与系统相关的任务称为系统或OS级别的脚本,将用于完成这些任务的编程语言称为系统脚本语言。
并不是说不能用C语言用Python和Web脚本编写系统级代码(如果我们可以建立所需的平台和环境,绝对可以做到)。但是,所有工作量太大,可能会影响快速开发的时间限制,并且减少的少量延迟不会使Web脚本受益匪浅。但是,如果我们使用Python执行系统级任务,反之亦然。
底线:语言选择取决于要执行的任务的性质,区分语言是一种脚本语言,这是神话。
脚本语言在另一个程序中解释。JavaScript嵌入在浏览器中,并由该浏览器解释。
脚本语言示例
脚本语言的优点:
简单–脚本语言比编程语言更容易编写。
更少的代码行(LOC)
像Java这样的编程语言是经过编译的,不会由其他应用程序以相同的方式进行解释。
示例编程语言
在脚本语言(JavaScript和旧的PHP版本)中,我们使用现有的基本功能和方法来执行工作。让JavaScript
我们举一个例子,我们可以使用ajax
或web-sockets
仅当它们受浏览器支持或存在的方法或它们在浏览器中时才使用。但是,在C或C ++,Java之类的语言中,即使该功能的任何库不可用,我们也可以从头开始编写该功能,但是我们无法在JavaScript中使用它。
您可以在Internet Explorer 8或更低版本中借助JavaScript来支持Web套接字 吗?但是您可以用C或C ++或Java编写插件,从而可以向Internet Explorer 8添加Web套接字的功能。
基本上,在脚本语言中,我们按顺序编写代码,然后按顺序执行现有方法以完成工作。在数字计算器中输入数字和公式来执行操作也是脚本语言的一个很好的例子。我们应该注意,每种脚本语言的编译器/运行时环境总是以编程语言编写的,我们可以在其中添加更多功能和方法,并可以编写新的库。
PHP 这是某种黑白编程和脚本编写的语言。我们可以通过添加以另一种高级语言编写的已编译扩展来添加新方法。我们不能直接在PHP中添加高级网络功能或创建图像处理库。
PS非常抱歉,我只回答围绕PHP JavaScript的问题,但我使用了这两个,因为我在这两个方面有丰富的经验。
早在世界还很年轻的时候,在PC世界中,您是从.exe或.bat中选择的,所以描述很简单。Unix系统始终具有shell脚本(/ bin / sh,/ bin / csh,/ bin / ksh等)和编译语言(C / C ++ / Fortran)。
为了区分角色和职责,汇编语言(通常称为第三代语言)被视为“编程”语言,而“脚本”语言被视为调用了解释器的语言(通常称为第四代语言)。脚本语言通常被用作在多个命令/已编译程序之间进行连接的“胶水”,以便用户不必为执行任务而担心一组步骤-他们开发了一个文件,该文件描述了哪些步骤他们想要完成,这成为任何人都可以遵循的“脚本”。
许多人/团体写了新的口译员来解决特定的问题领域。awk是最知名的软件之一,它主要用于模式匹配和对输入进行一系列数据转换。它运行良好,但问题域有限。该域的扩展几乎是不可能的,因为源代码不可用。Perl(Larry Wall,主要作者/架构师)工具脚本提高了一个层次-并开发了解释器,该解释器不仅允许用户运行系统命令,操纵输入和输出数据,支持的无类型变量,而且还可以访问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
如果我们从逻辑上看编程语言和脚本语言,那么这是99.09%相同。因为我们使用相同的概念,例如循环,控制条件,变量等,所以我们可以说是相同的,但是它们之间只有一点不同,那就是在C / C ++和其他编程语言中,我们在执行之前编译代码。但是在PHP,JavaScript和其他脚本语言中,我们不需要编译就可以直接在浏览器中执行。
谢谢Nitish K. Jha
脚本语言是人们认为是脚本语言的编程语言。这是一个没有明确界限的人为类别,每个提议的规则都有例外。
用于说一种语言是一种脚本语言的经典规则是特征,而不是定义。如果一种语言满足许多规则,则很有可能将其视为脚本语言。如果没有,则很有可能不是。规则通常包括:
我会补充:
也就是说,它可以是一种解释语言。
如果编程语言具有显着的“编译时”行为,可以在不运行程序的情况下分析代码并报告错误,例如C,Java或C#的类型错误,则很可能不将其视为脚本语言。
传统上,许多脚本语言是直接从源代码中解释的,但是在更流行的脚本语言中,已经获得了性能更高的实现,这些实现可以对代码进行预编译,例如Python的.pyc
文件,或优化JavaScript引擎,这些引擎在运行前可编译为本机代码。
如果该语言可以由解释器实现,而解释器仅在运行源代码时查看源代码,则该语言可能被视为脚本语言。是否实际上以这种方式实现并不重要,但是如果可以实现,那么也就不需要对代码进行大量的编译时错误检查。
如果该语言提供了有用的静态语义,而无需运行程序就可以检测到错误(语法错误除外),则该语言可能不是脚本语言。
总是有例外,通常基于某种语言的传统而不是任何实际规则。尽管BASIC几乎可以满足任何人曾经使用过的所有标准,但通常不会将其视为“脚本语言”。这就是为什么Visual Basic Script必须在名称中添加“脚本”,以使其与Visual Basic(一种用于大型程序的“真实”编程语言)区分开来。
BASIC还是一种古老的编程语言,例如COBOL和Fortran,在人们期望从某种语言进行静态分析之前,甚至在“脚本语言”还没有成为现实之前,BASIC都是这样。