107

是什么让语言成为脚本语言?我听说有些人说“当它被解释而不是编译时”。这将使 PHP(例如)成为一种脚本语言。这是唯一的标准吗?还是有其他标准?

也可以看看:

4

40 回答 40

92

简单的。当我使用它时,它是一种现代动态语言,当您使用它时,它只是一种脚本语言!

于 2008-09-21T04:56:56.293 回答
52

脚本语言是一种“脚本化”其他事情来做事情的语言。主要重点不是构建您自己的应用程序,而是让现有应用程序以您想要的方式运行,例如用于浏览器的 JavaScript,用于 MS Office 的 VBA。

于 2008-09-19T10:56:16.143 回答
41

传统上,当谈论脚本与编程的区别时,脚本被解释并且程序被编译。一种语言可以以不同的方式执行——解释或编译(字节码或机器码)。这不会使一种语言成为一种或另一种。

在某些人眼中,您使用语言的方式使其成为一种脚本语言(例如,主要使用 C++ 开发的游戏开发人员将使用 Lua 编写对象脚本)。同样,界限是模糊的——一个人可以将一种语言用于编程,而另一种人可以将相同的语言用于脚本语言。

这是来自关于脚本语言的维基百科文章:

脚本语言、脚本语言或扩展语言是一种允许控制一个或多个软件应用程序的编程语言。“脚本”与应用程序的核心代码不同,因为它们通常用不同的语言编写,并且通常由最终用户创建或至少修改。脚本通常从源代码或字节码解释,而它们控制的应用程序传统上被编译为本机机器代码。脚本语言几乎总是嵌入在它们控制的应用程序中。

您会注意到“通常”、“经常”、“传统”和“几乎总是”的使用 - 这些都告诉您没有一组不同的属性可以使特定语言成为“脚本语言”。

于 2010-05-20T13:33:57.853 回答
31

“剧本就是你给演员的东西。节目就是你给观众的东西。” ——拉里·沃尔

我真的不认为有太大的区别了。所谓的“脚本”语言通常是编译的——只是非常快,而且是在运行时。一些“编程”语言也在运行时进一步编译(想想 JIT),“编译”的第一阶段是语法检查和资源解析。

不要挂断电话,这真的不重要。

于 2010-05-20T13:39:11.103 回答
25

我的定义是一种通常作为源而不是二进制文件分发的语言。

于 2008-09-19T11:09:00.903 回答
16

就像色情片,你看到它就知道了。脚本语言的唯一可能定义是:

A language which is described as a scripting language.

有点圆,不是吗?(顺便说一句,我不是在开玩笑)。

基本上,没有什么可以使一种语言成为脚本语言,除非它被称为脚本语言,尤其是它的创建者。现代脚本语言的主要集合是 PHP、Perl、JavaScript、Python、Ruby 和 Lua。Tcl 是第一个主要的现代脚本语言(虽然它不是第一个脚本语言,我忘记了它是什么,但得知它早于 Tcl 时我很惊讶)。

我在论文中描述了主要脚本语言的特性:

 A Practical Solution for Scripting Language Compilers
 Paul Biggar, Edsko de Vries and David Gregg
 SAC '09: ACM Symposium on Applied Computing (2009), (March 2009)

大多数是动态类型和解释的,并且大多数在其参考实现之外没有定义的语义。然而,即使它们的主要实现被编译或 JITed,也不会改变语言的“性质”。

他们唯一剩下的问题是如何判断一种新语言是否是脚本语言。好吧,如果它被称为脚本语言,它就是一种。所以Factor是一种脚本语言(或者至少在编写它的时候是这样),但是,比如说,Java 不是。

于 2009-08-15T13:40:42.467 回答
16

对此有很多可能的答案。

首先:这并不是脚本语言和编程语言之间区别的问题,因为脚本语言一种编程语言。更多的问题是什么特性使某些编程语言成为脚本语言,而另一种编程语言不是脚本语言。

第二:真的很难说 XYZ 语言是什么,无论 XYZ 是“脚本”、“函数式编程”、“面向对象编程”还是你有什么。“函数式编程”的定义非常清楚,但没有人知道“函数式编程语言”是什么。

函数式编程或面向对象编程是编程风格;您可以用几乎任何语言以函数式风格或面向对象风格进行编写。例如,Linux 虚拟文件系统切换和 Linux 驱动程序模型虽然是用 C 编写的,但在很大程度上是面向对象的,而您在 Web 上看到的许多 Java 或 C# 代码都是非常程序化的,根本不是面向对象。OTOH,我见过一些功能强大的 Java 代码。

那么,如果函数式编程和面向对象编程仅仅是可以用任何语言完成的风格,那么如何定义“面向对象编程语言”呢?您可以说面向对象的编程语言是一种允许面向对象编程的语言。但这并不是一个定义:所有语言都允许面向对象编程,因此所有语言都是面向对象的吗?所以,你说,如果一门语言迫使你以面向对象的风格进行编程,那么它就是面向对象的。但这也不是什么定义:所有语言都允许函数式编程,因此没有语言是面向对象的吗?

所以,对我来说,我找到了以下定义:

一种语言是脚本语言(面向对象语言/功能语言),如果它同时

  • 促进脚本编写(面向对象编程/函数式编程),即它不仅允许它,而且使它变得简单自然,并包含有助于它的功能,并且
  • 鼓励引导您编写脚本(面向对象编程/函数式编程)。

所以,在五段之后,我得出了:“脚本语言是一种用于脚本的语言”。多么棒的定义。不是。

显然,我们现在需要看一下“脚本”的定义。

这是第三个问题出现的地方:虽然术语“函数式编程”是明确定义的,只有术语“函数式编程语言”是有问题的,不幸的是对于脚本,术语“脚本”和术语“脚本语言” "定义不明确。

好吧,首先脚本编程。这只是一种特殊的编程方式。IOW:每个脚本都是程序,但不是每个程序都是脚本;所有脚本的集合是所有程序集合的真子集。

在我个人看来,编写脚本并将其与其他类型的编程区分开来的是……

脚本主要操纵对象

  • 不是由脚本创建的,
  • 拥有独立于脚本的生命周期,并且
  • 生活在脚本的域之外。

此外,使用的数据类型和算法通常不是由脚本定义的,而是由外部环境定义的。

想想一个 shell 脚本:shell 脚本通常操作文件、目录和进程。您系统上的大多数文件、目录和进程可能不是由当前运行的脚本创建的。当脚本退出时它们不会消失:它们的生命周期完全独立于脚本。它们也不是脚本的一部分,它们是系统的一部分。您没有通过编写FileDirectory类来开始您的脚本,这些数据类型与您无关:您只是假设它们在那里,您甚至不知道(也不需要知道)它们是如何工作的。而且您也不会实现自己的算法,例如,对于您只使用find而不是实现自己的广度优先搜索的目录遍历。

简而言之:脚本将自身附加到独立于脚本而存在的更大系统上,操纵系统的一小部分,然后退出。

这个更大的系统可以是操作系统(如果是 shell 脚本)、浏览器 DOM(如果是浏览器脚本)、游戏(例如使用 Lua 的魔兽世界或使用 Linden 脚本语言的第二人生)、应用程序(例如 AutoLisp AutoCAD 或 Excel/Word/Office 宏的语言)、Web 服务器、机器人包或其他东西。

请注意,脚本方面与编程语言的所有其他方面完全正交:脚本语言可以是强类型或弱类型、严格类型或松散类型、静态或动态类型、名义上、结构上或鸭子类型,甚至可以是无类型的. 它可以是命令式的或函数式的、面向对象的、过程式的或函数式的、严格的或惰性的。它的实现可以被解释、编译或混合。

例如,Mondrian 是一种严格的强静态类型惰性函数式脚本语言,具有编译实现。

然而,所有这些都没有实际意义,因为脚本语言这个术语在现实世界中的实际使用方式与上述任何内容都无关。它最常被简单地用作侮辱,定义相当简单,甚至简单化:

  • 真正的编程语言:我的编程语言
  • 脚本语言:你的编程语言

这似乎是该术语最常用的方式。

于 2010-05-20T15:17:45.207 回答
5

“脚本语言”是那些可能意味着很多事情的模糊概念之一。通常它指的是存在一个从源代码到执行的一步过程。

例如在 Perl 你做:perl my_source.pl

鉴于上述标准,PHP 是一种脚本语言(即使您可以进行“编译”过程,例如在使用 Zend 编码器“保护”源代码时)。

PS。通常(但不总是)脚本语言会被解释。也经常(但同样,并非总是)脚本语言是动态类型的。

于 2008-09-19T10:56:06.847 回答
5

所有脚本语言都是编程语言。所以严格来说,没有区别。

该术语不是指该语言的任何基本属性,而是指该语言的典型用法。如果典型的用途是写短程序,主要是调用已有的代码,并对结果进行一些简单的处理,(即如果典型的用途是写脚本),那么它就是一种脚本语言。

于 2010-05-20T13:54:04.450 回答
4

我认为 Roberto Ierusalimschy 先生有一个很好的答案或“Lua 编程”中的问题:

然而,解释性语言的显着特点不是它们不被编译,而是任何编译器都是语言运行时的一部分,因此可以(并且很容易)执行动态生成的代码

于 2008-11-21T21:27:22.203 回答
4

一个部门是

  • 脚本 = 动态解释
  • 正常 = 编译

动态解释语言在运行时解释,而编译语言在执行前编译。

我应该补充一点,正如 Jörg 所指出的,解释/编译的区别不是语言的特征,而是执行引擎的特征。

您可能还对Type system的这个解释感兴趣,它是相关的,并且更多地关注语言方面,而不是执行引擎。大多数脚本语言是动态类型的,而“普通”语言大多是静态类型的。

一般来说,静态类型语言与动态类型语言的划分更好定义,并且对语言的可用性有更多影响。

于 2010-05-20T13:34:07.013 回答
3

我将脚本语言视为不需要明显重量级的“编译”步骤的任何东西。从程序员的角度来看,主要特点是:您编辑代码并立即运行它。

因此,我会将 JavaScript 和 PHP 视为脚本语言,而ActionScript 3 / Flex则不是。

于 2009-03-20T15:42:48.137 回答
3

脚本语言通常是

  1. 动态类型
  2. 口译,很少强调性能,但可移植性好
  3. 需要少得多的样板代码,从而实现非常快速的原型设计
  4. 用于小任务,适合编写单个文件来运行一些有用的“脚本”。

而非脚本语言通常是: 1. 静态类型 2. 编译,强调性能 3. 需要更多样板代码,导致原型制作速度较慢但更具可读性和长期可维护性 4. 用于大型项目,适应许多设计模式

在我看来,这更像是一个历史差异。Javascript 和 Perl 在编写时考虑到了小而简单的脚本,而 C++ 在编写时考虑到了复杂的应用程序;但两者都可以使用。许多编程语言,无论是现代的还是古老的,都模糊了界限(而且一开始就很模糊!)。

可悲的是,我认识一些开发人员讨厌他们认为的“脚本语言”,认为它们更简单且功能不强。我的观点是陈词滥调——为工作使用正确的工具。

于 2010-05-20T13:46:42.153 回答
3

脚本语言最初被认为是用硬编程语言编写的应用程序的控制机制。编译后的程序不能在运行时修改,所以脚本给了人们灵活性。

最值得注意的是,shell 脚本正在自动化操作系统内核中的进程(传统上,Mac 上的 AppleScript);这个角色越来越多地进入 Perl 的手中,然后最近又离开了 Python。我见过用于声明光线追踪场景的 Scheme(尤其是在其 Guile 实现中);最近,Lua 作为编写游戏脚本的编程语言非常流行——以至于许多新游戏中唯一硬编码的东西是图形/物理引擎,而整个游戏逻辑都是用 Lua 编码的。同样,人们认为 JavaScript 可以为 Web 浏览器的行为编写脚本。

语言解放了;现在没有人将操作系统视为一个应用程序(或根本没有考虑太多),许多以前的脚本语言开始用于编写自己的完整应用程序。该名称本身变得毫无意义,并传播到当今使用的许多解释语言中,无论它们是否旨在从另一个系统中进行解释。

然而,“脚本语言”绝对不是“解释性语言”的同义词——例如,BASIC 在其生命的大部分时间里都是解释性的(即在它失去缩写词并成为 Visual Basic 之前),但没有人真正认为它是脚本。

更新:像往常一样在 Wikipedia上提供阅读材料。

于 2010-05-20T14:02:24.700 回答
3

首先,编程语言不是“脚本语言”或其他东西。它可以是“脚本语言”或其他东西。

第二点,语言的实现者会告诉你它是否是一种脚本语言。

您的问题应该阅读“在哪些实现中编程语言会被视为脚本语言?”,而不是“脚本语言和编程语言之间有什么区别?”。之间没有。

但是,如果一种语言用于提供某种类型的中间件,我会将其视为脚本语言。例如,我认为 JavaScript 的大多数实现都是一种脚本语言。如果 JavaScript 在操作系统而不是浏览器中运行,那么它就不是脚本语言。如果 PHP 在 Apache 内部运行,它就是一种脚本语言。如果它是从命令行运行的,则不是。

于 2010-05-20T14:29:09.890 回答
3

我和我的朋友刚刚争论过:编程语言和脚本语言有什么区别。

一个流行的论点是编程语言是编译的,脚本语言是解释的——但是我认为这个论点是完全错误的……为什么?

  1. Chakra & V8(微软和谷歌的 JavaScript 引擎)在执行前编译代码
  2. QBasic 是解释型的——这是否使 Qbasic 成为一种“脚本”语言?

在此基础上,这是我对编程语言和脚本语言之间区别的论点:

编程语言在机器级别运行并且可以访问机器本身(内存、图形、声音等)。

脚本语言是沙盒的,只能访问暴露在沙盒中的对象。它不能直接访问底层机器。

于 2014-02-27T11:54:11.453 回答
2

我是否可以建议脚本语言已经成为很多人正在远离的术语。我想说它现在主要归结为编译语言和动态语言。

我的意思是你不能说像 Python 这样的东西,或者 Ruby 在这个时代是“脚本”语言(你甚至有IronPythonJIT-your-favorite-language之类的东西,区别更加模糊了)。

老实说,我个人觉得 PHP 不再是一种脚本语言了。我不希望人们喜欢在简历上对 PHP 进行不同于 Java 的分类。

于 2008-09-19T11:10:21.803 回答
2

在我的观点中,我会说动态解释语言,如 PHP、Ruby 等......仍然是“正常”的语言。我想说“脚本”语言的例子是 bash(或 ksh 或 tcsh 或其他)或 sqlplus。这些语言通常用于将系统上的现有程序串在一起,形成一系列连贯且相关的命令,例如:

  1. 将 A.txt 复制到 /tmp/work/
  2. 在数据库服务器上运行夜间清理过程
  3. 记录结果并将它们发送到 sysdamin

所以我想说的区别(对我来说,无论如何)更多的是你如何使用语言。PHP、Perl、Ruby 等语言可以用作“脚本语言”,但我通常将它们视为“普通语言”(Perl 除外,它似乎是双向的。

于 2010-05-20T13:42:03.033 回答
2

我将继续从重复的问题中迁移我的答案


“脚本语言”这个名称适用于一个非常具体的角色:您编写命令以发送到现有软件应用程序的语言。(如传统的电视或电影“剧本”)

例如,曾几何时,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. 当您可以编写脚本语言并在不“编译”的情况下运行它时,它更像是一种直接脚本类型的东西。例如,你不需要对剧本做任何事情来告诉演员如何处理它。它已经在那里,按原样使用。出于这个原因,我们将排除编译语言被称为脚本语言,即使它们在某些情况下可以用于脚本目的。

  2. 脚本语言意味着发送到复杂软件应用程序的命令;这就是我们首先编写脚本的全部原因——因此您无需了解软件如何向其发送命令的复杂性。因此,脚本语言往往是向复杂软件应用程序发送(相对)简单命令的语言……在这种情况下,机器语言和汇编代码并不能解决问题。

于 2010-06-19T09:58:29.617 回答
1

脚本语言是每次运行脚本时都会被解释的语言,它意味着有一个解释器,并且大多数都是非常易于阅读的,有用的脚本语言很容易学习和使用。

每种可编译语言都可以制成脚本语言,反之亦然,这一切都取决于实现解释器或编译器,例如 C++ 有一个解释器,因此如果使用它可以称为脚本语言(通常不像 C++ 那样实用是一种非常复杂的语言),目前最有用的脚本语言之一是 Python...

因此,要回答您的问题,定义是关于使用解释器来运行快速简便的脚本程序,以解决简单的任务或原型应用程序,脚本语言最强大的用途是包括每种用途的可能性来扩展编译的应用程序。

于 2008-09-21T05:38:04.213 回答
1

我更喜欢人们不要使用“脚本语言”这个词,因为我认为它会减少工作量。以 Perl 之类的语言为例,通常称为“脚本语言”。

  • Perl 是一种编程语言!
  • Perl 像 Java 和 C++ 一样编译。它只是编译得更快!
  • Perl 有对象、命名空间和闭包。
  • Perl 有 IDE、调试器和分析器。
  • Perl 有培训、支持和社区。
  • Perl 不仅仅是网络。Perl 不仅仅是系统管理员。Perl 不仅仅是 Internet 的胶带。

为什么我们甚至需要区分像 Java 这样已编译的语言和未编译的 Ruby?标签的价值是什么?

有关这方面的更多信息,请参阅http://xoa.petdance.com/Stop_saying_script

于 2008-09-22T03:01:57.963 回答
1

一个重要的区别是强类型(相对于弱类型)。脚本语言通常是弱类型的,因此可以更快地编写小程序。对于大型程序,这是一个缺点,因为它禁止编译器/解释器自主查找某些错误,使得重构代码非常困难。

于 2009-09-23T10:44:30.803 回答
1

脚本语言是一种编程语言,其中程序通常以可读的文本形式交付给最终用户,并且有一个程序显然可以直接执行该程序。(程序很可能会在内部编译脚本;这里不相关,因为它对用户不可见。)

脚本语言能够支持交互式会话是相对常见的,用户只需键入他们的程序并让它立即执行。这是因为这是对第一段基本要求的微不足道的扩展;主要的额外要求是添加一种机制来确定输入语句何时完成,以便可以将其发送到执行引擎。

于 2010-05-20T14:13:42.253 回答
1

对于这个问题略有不同的看法。脚本语言是一种编程语言,但编程语言不一定是脚本语言。脚本语言用于控制或编写系统脚本。该系统可以是脚本语言为 bash 的操作系统。该系统可以是一个使用 PHP 脚本语言的 Web 服务器。脚本语言旨在填补特定的利基;它们是特定领域的语言。交互式系统已经解释了脚本语言,从而产生了脚本语言被解释的概念。然而,这是系统的结果,而不是脚本语言本身。

于 2010-05-20T14:22:11.810 回答
1

脚本语言是一种配置或扩展现有程序的语言。
脚本语言是一种编程语言。

于 2010-05-20T14:39:41.203 回答
1

“脚本语言”的定义相当模糊。我会基于以下考虑:

  1. 脚本语言通常没有用户可见的编译步骤。通常,用户可以通过一个简单的命令运行程序。

  2. 脚本语言的程序通常以源代码形式传递。

  3. 脚本语言通常具有存在于大量系统上的运行时,并且运行时可以很容易地安装在大多数系统上。

  4. 脚本语言往往是跨平台的,而不是特定于机器的。

  5. 脚本语言使调用其他程序和与操作系统交互变得容易。

  6. 脚本语言通常很容易嵌入到用更传统的编程语言编写的更大的系统中。

  7. 脚本语言通常是为了便于编程而设计的,而对执行速度的考虑要少得多。(如果您想要快速执行,通常的建议是用 C 之类的语言编写耗时的部分,然后将该语言嵌入到 C 中或从该语言中调用 C 位。)

我上面列出的一些特性对于实现来说是正确的,在这种情况下,我指的是更常见的实现。有 C 解释器,(AFAIK)没有明显的编译步骤,但大多数 C 实现并非如此。您当然可以将 Perl 程序编译为本机代码,但这不是通常使用的方式。其他一些特征本质上是社会性的。上述某些标准有些重叠。正如我所说,定义是模糊的。

于 2010-06-15T21:34:53.790 回答
0

脚本语言倾向于在作为更大应用程序一部分的脚本引擎中运行。例如,JavaScript 在您的浏览器脚本引擎中运行。

于 2008-09-19T10:54:02.170 回答
0

我会说脚本语言是一种它本身并没有定义的大量操纵实体。例如,JavaScript 操作浏览器提供的 DOM 对象,PHP 操作大量基于 C 的函数库,等等。当然不是一个精确的定义,更多的是一种思考方式。

于 2008-09-19T10:54:34.620 回答
0

您的标准听起来不错,但总是有点模糊。例如,Java 既被编译(为字节码),又被解释(由 JVM)。然而,它通常不被归类为脚本语言。

这可能是因为 Java 是静态类型的。而 JavaScript、Ruby、Python、Perl 等则不是(所有这些通常都称为脚本语言)。

于 2008-09-19T10:56:49.730 回答
0

如果它不/不会在 CPU 上运行,那对我来说就是一个脚本。如果解释器需要在程序下方的 CPU 上运行,那么它就是脚本和脚本语言。

没有理由让它比这更复杂吗?

当然,在大多数情况下(99%),一种语言是否是脚本语言是很清楚的。但是考虑到 VM 可以模拟 x86 指令集,例如。在 VM 上运行时,这不会使 x86 字节码成为一种脚本语言吗?如果有人要编写一个编译器来将 perl 代码转换为本机可执行文件怎么办?在这种情况下,我不知道如何称呼语言本身了。重要的是输出,而不是语言。

再说一次,我不知道有这样的事情发生过,所以现在我仍然很乐意将解释语言称为脚本语言。

于 2008-11-22T00:51:21.357 回答
0

脚本是一个相对较小的程序。一个系统是一个比较的程序,或者是比较大的程序的集合

一些编程语言的设计具有语言设计者和编程社区认为在编写相对较小的程序时有用的特性。这些编程语言被称为脚本语言,例如 PHP。

类似地,其他编程语言的设计具有语言设计者和编程社区认为在编写相对较大的程序时有用的特性。这些编程语言被称为系统语言,例如 Java。

现在,可以用任何语言编写小型和大型程序。一个小的 Java 程序是一个脚本。例如,Java“Hello World”程序是一个脚本,而不是一个系统。用 PHP 编写的大型程序或程序集合是一个系统。例如,用 PHP 编写的 Facebook 是一个系统,而不是脚本。

将单一语言特性视为决定该语言是否最适合脚本或系统编程的“试金石”是有问题的。例如,脚本可以编译为字节码或机器码,或者它们可以通过直接抽象语法树 (AST) 解释来执行。

因此,如果一种语言通常用于编写脚本,那么它就是一种脚本语言。脚本语言可能用于编写系统,但这样的应用程序可能被认为是可疑的。

于 2009-03-20T15:35:18.777 回答
0

此外,您可能想查看这个关于脚本语言的播客

于 2009-05-22T11:58:40.383 回答
0

在《编程语言概念》中解释 Robert Sebesta :

通过将称为脚本的命令列表放入要执行的文件中来使用脚本语言。这些语言中的第一个,命名为sh(代表 shell),开始是一个小的命令集合,这些命令被解释为对执行实用程序功能(例如文件管理和简单文件过滤)的系统子程序的调用。在此基础上添加了变量、控制流语句、函数和各种其他功能,结果是一门完整的编程语言。

然后你有像AWKTcl/TkPerl这样的例子(它说最初是shAWK的组合,但它变得如此强大,以至于他认为它是一种“奇怪但成熟的编程语言”)。其他示例包括 CGI 和 JavaScript。

于 2009-06-22T05:10:37.593 回答
0

简而言之

脚本语言在另一个程序中运行。不编译脚本语言。脚本语言易于使用且易于编写。但是……</p>

非常流行的编程语言(Java、C#)在“父”程序中运行——比如脚本语言。今天的脚本语言用于构建复杂的软件。如今,计算机速度如此之快,脚本语言如此高效,以至于对于大多数业务操作而言,编译型编程语言没有实际的速度优势(曾经有过)。

于 2010-05-20T14:20:50.767 回答
0

正如其他人指出的那样,没有编译或解释语言这样的东西,因为任何语言都可以编译或解释。但是传统上被解释而不是编译的语言(Python、Perl、Ruby、PHP、JavaScript、Lua)也是人们倾向于称之为脚本语言的语言。所以说脚本语言是一种通常解释而不是编译的语言是相对合理的。脚本语言的其他共同特征与它们被解释的事实有关。

脚本语言实际上是编程语言的一个子集。我认为大多数人不会声称我之前提到的任何语言都不是编程语言。

于 2010-05-20T14:24:57.283 回答
0

我一直将脚本语言视为与某种应用程序或程序进行通信的一种方式。相反,经过编译的语言实际上会创建程序本身。

现在请记住,脚本语言通常会添加或修改最初使用已编译语言创建的程序。因此,它当然可以成为更大图景的一部分,但最初的二进制文件首先是用一种已编译的语言创建的。

所以我可以创建一种脚本语言,让用户执行各种操作或自定义我的程序。我的程序会解释脚本代码,然后调用某种函数。这只是一个基本的例子。它只是为您提供了一种在程序中动态调用例程的方法。

我的程序必须解析脚本代码(您可以将它们称为命令)并实时执行任何预期的操作。

我看到这个问题已经被回答了好几次,但我想我会把我看待事物的方式加入其中。当然,有些人可能不同意这个答案,但这种思维方式一直对我有所帮助。

于 2013-08-23T18:26:10.433 回答
0

脚本语言是一种编程语言,用于操作、定制和自动化现有系统的设施。在这样的系统中,有用的功能已经通过用户界面可用,并且脚本语言是一种用于将该功能暴露给程序控制的机制。这样,可以说现有系统提供了对象和设施的宿主环境,从而完成了脚本语言的能力。脚本语言旨在供专业和非专业程序员使用。

参考

http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf

于 2013-10-10T05:45:55.170 回答
0

简而言之,脚本语言具有以下属性:

  1. 基于解释器。
  2. 简单的语法。与 java 相比,python 中的目录访问文件非常容易。
  3. 一般用于编写较少行的代码。
  4. 方便编写自动化代码。
  5. 非常高级的语言。

例如:Javascript,python,VBA。

于 2014-03-21T19:56:42.597 回答
0

我所知道的一个值得注意的来源就该主题撰写的最常见的文章被称为Ousterhout 的二分法。它被高度批评为相当武断,并经常被开玩笑地称为 Ousterhout 的错误二分法。在关于该主题的讨论中说,它值得引用。

我个人同意这是一种错误的二分法,我不相信任何人回答这个建议对脚本语言的定义具有坚定属性的人。诸如“必须动态键入脚本语言”之类的评论是错误的,并且诸如“必须解释脚本语言”之类的评论甚至没有意义,因为与流行的看法相反,编译与解释根本不是该语言的属性。

There are lots of properties that people have mentioned above as roughly matching scripting languages, thankfully most of them properly explaining that this term has no rigorous definition. So I won't duplicate my ideas of what they are here. For my experience people consider a language a scripting language if they can easily write some quick throwaway programs in them without writing much boiler plate. I'm mostly answering to give you the citation to Ousterhout which I don't see here.

于 2014-03-24T23:16:36.510 回答
-1

甚至 Java 也是“一种脚本语言”,因为它是用 C 实现的

尽管我不愿尝试改进mgb近乎完美的答案,但事实是,没有什么比 C 更好的实现了,但该语言相当低级且接近硬件。当然,纯粹的天才,但要开发现代软件,我们需要一种站在 C 肩膀上的更高级别的语言,可以这么说。

所以,你有 Python、Ruby、Perl,是的,甚至 Java,都是用 C 实现的。人们不会侮辱 Java,称它为脚本语言,但它确实如此。如果你想要一种强大的、现代的、动态的、反射性的、等等等等的语言,你可能正在运行像 Ruby 这样的东西,它要么直接用 C 解释,要么被一些 C 程序编译成解释/JIT 编译的东西。

人们所做的另一个区别是将动态类型语言称为“脚本语言”。

于 2009-11-07T04:16:04.733 回答