35

我指的是这个答案中的区别:

...bash 不是用来编写应用程序的,它是用来编写脚本的。所以可以肯定的是,您的应用程序可能有一些管理脚本,但不要编写critical-business-logic.sh,因为另一种语言可能更适合这样的东西。

作为从事过多种语言的程序员,这似乎是对 C、Java 和其他编译语言的势利。我不是在寻找强化我的观点或挥手回答的问题。相反,我真的想知道所指的技术差异。

(而且我在日常工作中使用 C,所以我不仅仅是防御性的。)

4

20 回答 20

51

传统上,一个程序被编译并一个脚本被解释,但这已经不再重要了。如果您真的愿意,您可以生成大多数脚本的编译版本,而其他“编译”语言(如 Java)实际上是解释的(在字节码级别)。

更现代的定义可能是程序旨在供客户使用(可能是内部程序),因此应包括文档和支持,而脚本主要供作者使用。

网络是一个有趣的反例。我们都喜欢使用 Google 搜索引擎查找内容。用于创建它引用的“数据库”的大部分代码仅供其作者和维护者使用。这是否使它成为一个脚本?

于 2008-09-19T00:20:19.433 回答
44

我会说应用程序倾向于以交互方式使用,脚本将在其中运行,适合批处理工作。我不认为这是一个具体的区别。

于 2008-09-19T00:18:54.960 回答
32

通常,它是“脚本”与“程序”。

我和你一样,这种区别主要是“编译语言势利”,或者引用拉里沃尔的话说,“演员有剧本,观众有节目”。

于 2008-09-19T00:24:31.777 回答
8

这是一个有趣的话题,我认为区分“脚本”和“应用程序”没有很好的指导方针。

让我们看一些 Wikipedia 文章来感受一下区别。

脚本(维基百科 -> 脚本语言):

脚本语言、脚本语言或扩展语言,是一种控制软件应用程序的编程语言。“脚本”通常被视为与“程序”不同,后者独立于任何其他应用程序执行。同时,它们与应用程序的核心代码不同,后者通常用不同的语言编写,并且通过最终用户可以访问,它们使应用程序的行为能够适应用户的需求。

应用程序(维基百科 -> 应用程序软件 -> 术语)

在计算机科学中,应用程序是旨在帮助人们执行某种类型工作的计算机程序。因此,应用程序不同于操作系统(运行计算机)、实用程序(执行维护或通用任务)和编程语言(用于创建计算机程序)。根据设计的工作,应用程序可以操作文本、数字、图形或这些元素的组合。

阅读上述条目似乎表明区别在于脚本由另一个软件“托管”,而应用程序不是。我想这是可以争论的,例如控制 shell 行为的 shell 脚本,以及控制解释器行为以执行所需操作的 perl 脚本。(我觉得这可能有点牵强,所以我可能不完全同意。)

归根结底,我认为可以根据程序的规模来区分口语。与应用程序相比,脚本的规模通常较小。

此外,就目的而言,脚本通常执行需要处理的任务,例如,构建为某个软件生成多个发布版本的脚本。另一方面,应用程序旨在提供更精细且面向最终用户的功能。例如,记事本或 Firefox。

于 2008-09-19T01:04:03.850 回答
8

John Ousterhout(TCL 的发明者)在http://www.tcl.tk/doc/scripting.html有一篇很好的文章,他在其中提出了系统编程语言之间的区别(用于实现构建块,强调正确性,类型安全)与脚本语言相比(用于组合构建块,强调对不断变化的环境和要求的响应能力,轻松转换进出文本表示)。如果您使用该分类系统,那么 99% 的程序员所做的工作更适合脚本语言而不是系统编程语言。

于 2009-01-16T00:39:04.093 回答
4

脚本往往是一系列启动、运行和终止的命令。它通常不需要/很少的人机交互。应用程序是一个“程序”......它通常需要人工交互,它往往更大。

于 2008-09-19T00:19:15.363 回答
3

对我来说,脚本意味着对代码的逐行解释。您可以打开一个脚本并查看其程序员可读的内容。应用程序意味着一个独立的编译可执行文件。

于 2008-09-19T00:21:00.070 回答
3

它通常只是一个语义论点,甚至是贬低某些编程语言的一种方式。就我而言,“脚本”是一种程序,确切的定义有些模糊,并因上下文而异。

我可能会使用术语“脚本”来表示主要以线性方式执行的程序,而不是具有大量顺序逻辑或子例程的程序,就像好莱坞的“脚本”是演员执行的线性指令序列一样。我可能会用它来表示以嵌入在更大程序中的语言编写的程序,以驱动该程序。例如,在旧的 Mac OS 下使用 AppleScript 自动执行任务,或者使用嵌入式 TCL 接口驱动以某种方式暴露自身的程序。

但在所有这些情况下,脚本都是一种程序。

“脚本语言”一词已用于动态解释(有时是编译)语言,通常这些语言具有许多共同特征,例如非常高级的指令、内置散列和任意长度的列表以及其他高级数据结构等。但是这些语言能够编写非常大、复杂、模块化、设计良好的程序,所以如果你认为“脚本”不是程序,那么这个术语可能会让你感到困惑。

另请参阅它是 Perl 程序还是 Perl 脚本?在 perlfaq1 中。

于 2008-09-19T00:31:02.603 回答
2

脚本通常作为脚本引擎内较大应用程序的一部分运行,例如。JavaScript -> 浏览器 这与传统的静态类型编译语言和动态语言形成对比,其中代码旨在构成应用程序的主要部分。

于 2008-09-19T00:22:41.440 回答
2

应用程序是针对一组常见问题的脚本集合。

脚本是用于执行一项相当具体的任务的一段代码。

IMO,差异与使用的语言无关。可以使用 bash 编写复杂的应用程序,也可以使用 C++ 编写简单的脚本。

于 2008-09-19T00:49:37.287 回答
2

首先,我想明确一点,脚本就是程序。换句话说,脚本是一组指令。

程序:

将要编译的一组指令称为程序。

脚本:

一组将被解释的指令称为脚本。

于 2010-07-22T11:29:41.027 回答
1

以 perl 为例,您可以编写 perl 脚本或 perl 应用程序。

脚本将暗示单个文件或单个命名空间。(例如 updateFile.pl)。

应用程序将由文件或名称空间/类的集合组成(例如,带有许多 .pm 模块文件的 OO 设计的 perl 应用程序)。

于 2008-09-19T00:20:58.200 回答
1

就个人而言,我认为分离是从实际实施退一步。

据我估计,已经计划了一个应用程序。它有多个目标,有多个可交付成果。在应用程序必须满足的编码之前,在设计时预留了一些任务。

然而,一个脚本只是作为套装组合在一起,几乎没有涉及任何计划。

然而,缺乏适当的计划并不会将您降级为脚本。可能,它使您的应用程序成为组织不良的脚本集合。

此外,应用程序可以包含聚合构成整体的脚本。但是一个脚本只能引用一个应用程序。

于 2008-09-19T00:49:46.680 回答
1

一个应用程序很大,将被人们一遍又一遍地使用,并可能出售给客户。

脚本一开始很小,如果幸运的话,它会保持很小,很少出售给客户,并且可能会自动运行或被废弃。

于 2009-01-16T01:29:57.920 回答
1

关于什么:

脚本:

脚本是用一种语言编写的编程语句的文本文件(或文本文件的集合),它允许在其中编写的各个语句在每个语句执行之前直接解释为机器可执行代码,并且意图发生这种情况

应用:

应用程序是任何计算机程序,其主要功能涉及向人类 Actor 提供服务。

因此,理论上,用脚本语言编写的基于脚本的程序可以在执行脚本时更改其文本语句(当然,风险很大)。编译程序的类似情况是翻转内存中的位。

有接盘侠吗?:)

于 2012-03-01T06:49:10.433 回答
0

@Jeff 的回答很好。我最喜欢的解释是

许多(大多数?)脚本语言是解释性的,很少有编译语言被认为是脚本语言,但是编译与解释的问题只是松散地与“脚本”与“严肃”语言的问题相关联。

这里的很多问题是“脚本”是一个非常模糊的名称——它意味着一种便于编写脚本的语言,而不是编写“成熟的程序”(或应用程序)。但是如何区分一个复杂的脚本和一个简单的应用程序呢?这是一个本质上无法回答的问题。通常,脚本是应用于某些数据集的一系列命令,可能以用户定义的顺序......但是,可以将该描述扩展到适用于 Photoshop,这显然是一个主要应用程序。脚本通常比应用程序小,做一些定义明确的事情并且使用起来“更简单”,并且通常可以分解成一系列清晰的子操作,但所有这些事情都是主观的。

从这里引用。

于 2015-02-24T08:15:23.903 回答
0

我认为代码是编译还是解释都没有关系。

真正的区别在于代码的核心逻辑:

  • 如果代码产生了系统中其他程序未实现的新功能 - 它就是一个程序。它甚至可以通过脚本进行操作。

  • 如果代码主要通过其他程序的操作进行操作,并且总结果主要是被操作程序的工作结果 - 它是一个脚本。从字面上看,一些程序的动作脚本。

于 2016-10-27T05:38:59.983 回答
-1

实际上脚本(或脚本语言)和应用程序之间的区别在于脚本不需要将其编译为机器语言。您使用解释器运行脚本的源代码。应用程序将源代码编译成机器代码,以便您可以将其作为独立应用程序运行。

于 2008-09-19T00:25:03.337 回答
-1

我会说脚本通常是一组以纯文本编写的命令或指令由托管应用程序(浏览器、命令解释器或 shell,...)执行。

这并不意味着它在实际执行时不强大或没有以某种方式编译。但是脚本本身不能做任何事情,它只是纯文本。
本质上它只能是一个片段,需要组合起来构建一个程序或应用程序,但扩展和完全开发的脚本或脚本集在主机执行时可以视为程序或应用程序,就像一堆源文件编译后可以成为应用程序。

于 2008-09-19T00:53:08.793 回答
-2

脚本语言没有标准库或平台(或者没有多少)。它小巧轻便,旨在嵌入到更大的应用程序中。Bash 和 Javascript 是脚本语言的绝佳示例,因为它们的功能完全依赖于其他程序。

使用此定义,脚本是为驱动更大的应用程序(套件)而设计的代码。Javascript 可能会调用 Firefox 来打开窗口或操作 DOM。Bash 脚本执行现有程序或其他脚本,并通过管道将它们连接在一起。


您还问为什么不使用脚本语言,所以:

是否有任何脚本语言的单元测试工具?对于完全缺失的“真实”应用程序来说,这似乎是一个非常重要的工具。而且很少有任何真正的脚本语言库绑定。

大多数时候,无论如何,脚本都可以替换为真正的轻量级语言,例如 Python 或 Ruby。

于 2008-09-19T00:19:51.913 回答