脚本语言和其他语言有啥区别[重复]
Posted
技术标签:
【中文标题】脚本语言和其他语言有啥区别[重复]【英文标题】:What is difference between scripting languages and other languages [duplicate]脚本语言和其他语言有什么区别[重复] 【发布时间】:2011-03-03 20:55:53 【问题描述】:可能重复:When is a language considered a scripting language?
我真的很困惑不同类型的语言。 任何人都可以指导什么是不同类型的语言或不同类别。
就像有人说 python 是脚本语言一样。这是什么意思。其他语言如 php 、 asp 、 java 是否不是脚本语言
【问题讨论】:
【参考方案1】:脚本语言是一种专注于简化链接或操作其他程序的语言
***说:
“When a language is used to give commands to a software application (such as a shell) it is called a scripting language”
“A scripting language, script language or extension language is a programming language that allows control of one or more software applications.”
这是正交的,无论是解释还是其他 - 例如,Java 最初是解释的,但没有人称它为脚本语言。碰巧的是,如果您正在实现一种脚本语言,那么解释它是一种直接的方法。
许多脚本语言被编译成字节码或机器码,通常使用 JIT。
【讨论】:
【参考方案2】:脚本语言与其他语言的区别主要在于解释型动态类型语言(例如 PHP、VBScript、JScript 和 javascript)和编译型静态类型语言(例如 C#、VB.NET、Java、C++ 和德尔福)。
ASP 不是语言,而是脚本语言(VBScript / JScript)的平台,而 ASP.NET 是编译语言(主要是 C# / VB.NET)的平台。
【讨论】:
动态/静态和强/弱类型是不同的关注点;强类型通常意味着缺少强制类型转换运算符。 @Pete:好点,我将在答案中使用动态/静态类型区分。 :) 为什么投反对票?如果你不解释你认为错的地方是什么,就无法改进答案。【参考方案3】:“脚本语言”这个名称适用于一个非常具体的角色:您编写命令以发送到现有软件应用程序的语言。 (像传统的电视或电影“剧本”)
例如,曾几何时,html 网页很无聊。它们总是静止的。然后有一天,Netscape 想,“嘿,如果我们让浏览器读取页面中的小命令并对其执行操作会怎样?”就这样,Javascript 就形成了。
一个简单的 javascript 命令是 alert()
命令,它指示/命令正在读取网页的浏览器(软件应用程序)显示警报。
现在,alert()
是否与 C++ 或浏览器实际使用 显示警报的任何代码语言相关?当然不是。在 .html 页面上编写“alert()”的人不了解浏览器实际显示警报的方式。他只是在写一个浏览器会解释的命令。
让我们看看简单的javascript代码
<script>
var x = 4
alert(x)
</script>
这些是发送到浏览器的指令,供浏览器自行解释。浏览器实际将变量设置为 4 并将其置于警报中的编程语言......它与 javascript 完全无关。
我们将最后一系列命令称为“脚本”(这就是它包含在<script>
标记中的原因)。仅仅按照“脚本”的定义,传统意义上的:发送给演员的一系列指令和命令。每个人都知道,例如剧本(电影剧本)就是剧本。
剧本(剧本)不是演员、摄影机或特效。剧本只是告诉他们该做什么。
现在,究竟什么是脚本语言?
有很多编程语言就像工具箱中的不同工具;某些语言被设计为专门用作脚本。
Javasript 是一个明显的例子;很少有 Javascript 应用程序不属于脚本领域。
ActionScript(Flash 动画的语言)及其衍生语言是脚本语言,因为它们只是向 Flash 播放器/解释器发出命令。当然,存在诸如面向对象编程之类的抽象,但所有这些都只是达到目的的一种手段:向 Flash 播放器发送命令。
Python 和 Ruby 通常也用作脚本语言。例如,我曾经在一家公司工作,该公司使用 Ruby 编写脚本命令以发送到浏览器,这些命令类似于“转到此站点,单击此链接...”来进行一些基本的自动化测试。在这份工作中,无论如何我都不是“软件开发人员”。我只是编写了向计算机发送命令以向浏览器发送命令的脚本。
由于它们的性质,脚本语言很少被“编译”——也就是说,被翻译成机器代码,并由计算机直接读取。
即使是从 Python 和 Ruby 创建的 GUI 应用程序也是发送到用 C++ 或 C 编写的 API 的脚本。它告诉 C 应用程序该做什么。
当然,有一条模糊的线。为什么不能说机器语言/C 是脚本语言,因为它们是计算机用来连接基本主板/显卡/芯片的脚本?
我们可以画一些线来澄清:
当您可以编写脚本语言并在不“编译”的情况下运行它时,它更像是一种直接脚本类型的东西。例如,你不需要对剧本做任何事情来告诉演员如何处理它。它已经在那里,按原样使用。出于这个原因,我们将编译语言排除在被称为脚本语言之外,即使它们在某些情况下可以用于脚本目的。
脚本语言意味着发送到复杂软件应用程序的命令;这就是我们首先编写脚本的全部原因——因此您无需了解软件如何向其发送命令的复杂性。因此,脚本语言往往是向复杂的软件应用程序发送(相对)简单命令的语言......在这种情况下,机器语言和汇编代码并不能解决问题。
李>【讨论】:
+1 表示努力和剧本描述 真的很喜欢这种方法。【参考方案4】:有很多taxonomies用于对编程语言进行分类。 关于脚本,scripting language(python、ruby、php)是一种直接从源代码在解释器上运行的语言。其他语言是编译语言(从二进制形式运行:c、c++、pascal)或者中间,编译成中间形式并在虚拟机(java、c#)中运行。
【讨论】:
传统 Pascal 编译为中间 P 代码。 Python 可以在 JIT VM 等中运行 FFS,任何语言都可以在解释器或虚拟机上运行,该短语表示主要的、普遍接受的实现。 但是在你的***链接中,它说定义特征是它们用于编写其他程序的脚本,而不是解释它们。 Forth 和 APL 是解释型语言,对吧?它们是脚本语言吗?【参考方案5】:见scripting-and-programming, whats-the-difference-between-a-script-and-an-application 以及许多类似的讨论。
【讨论】:
重复项的识别应在 cmets 中完成。【参考方案6】:脚本语言通常被解释而不是编译。
【讨论】:
以上是关于脚本语言和其他语言有啥区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章