“脚本”和“应用程序”之间有什么区别?

时间:2008-09-19 00:16:57

标签: terminology

我指的是this answer中的区别:

  

... bash不是用于编写应用程序,而是脚本编写。当然,您的应用程序可能有一些内务处理脚本但不写critical-business-logic.sh,因为另一种语言可能更适合这样的东西。

作为使用多种语言的程序员,这似乎是C,Java和其他编译语言的势利。我不是在寻求加强我的意见或手工波澜的答案。相反,我真的想知道提到了哪些技术差异。

(我在日常工作中使用C,所以我不仅仅是防守。)

20 个答案:

答案 0 :(得分:46)

传统上编译程序并解释脚本,但这不再重要。如果你真的想要,你可以生成大多数脚本的编译版本,并且实际上解释了像Java这样的其他“编译”语言(在字节代码级别。)

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

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

答案 1 :(得分:41)

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

答案 2 :(得分:30)

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

我和你在一起,这种区别主要是“编译语言势利”,或者引用拉里·沃尔并采取另一面,“剧本是演员所拥有的,一个节目是给观众的”。

答案 3 :(得分:8)

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

答案 4 :(得分:8)

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

让我们看看一些维基百科的文章,以了解这种区别。

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

  

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

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

  

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

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

当谈到它时,我认为可以根据程序的 scale 来区分口语。与应用程序相比,脚本的规模通常较小。

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

答案 5 :(得分:4)

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

答案 6 :(得分:3)

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

答案 7 :(得分:3)

它通常只是一种语义论证,甚至是一种诋毁某些编程语言的方式。就我而言,“脚本”是一种程序,确切的定义有些模糊,因环境而异。

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

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

术语“脚本语言”已用于动态解释(有时编译)的语言,通常这些语言具有许多常见功能,例如非常高级别的指令,内置哈希和任意长度列表以及其他高级数据结构但是,这些语言能够使用非常大,复杂,模块化,设计良好的程序,因此,如果您将“脚本”视为程序之外的其他内容,则该术语可能会使您感到困惑。

另见perlfaq1中的Is it a Perl program or a Perl script?

答案 8 :(得分:2)

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

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

IMO,差异与使用的语言没有任何关系。用bash编写复杂的应用程序是可能的,并且可以用C ++编写一个简单的脚本。

答案 9 :(得分:2)

首先,我想清楚地表明脚本是一个程序。换句话说,脚本是一组指令。

<强>程序:

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

<强>脚本:

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

答案 10 :(得分:2)

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

答案 11 :(得分:1)

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

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

然而,一个脚本只是作为套装被抛在一起,并且涉及很少的计划。

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

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

答案 12 :(得分:1)

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

脚本意味着单个文件或单个命名空间。 (例如updateFile.pl)。

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

答案 13 :(得分:1)

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

脚本开始很小,如果你很幸运则保持小,很少卖给顾客,可能会自动运行或者不再使用。

答案 14 :(得分:1)

怎么样:

<强>脚本:

  

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

<强>应用

  

应用程序是任何计算机程序,其主要功能包括为人类演员提供服务。

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

任何接受者? :)

答案 15 :(得分:0)

<@> @ Jeff的答案很好。我最喜欢的解释是

  

许多(大多数?)脚本语言被解释,很少编译   语言被认为是脚本语言,但问题   编译与解释的关系只与问题松散相关   &#34;脚本编写&#34;与#34;严肃的&#34;语言。

     

这里的很多问题是&#34;脚本编写&#34;是一个非常模糊的   指定 - 它意味着一种便于写作的语言   脚本,而不是写&#34;完整的程序&#34; (要么   应用程序)。但是如何区分复杂的脚本和   简单的应用?这是一个基本上无法回答的问题。   通常,脚本是应用于某些集合的一系列命令   数据,可能是用户定义的顺序......但是,人们可以伸展   该描述适用于Photoshop,这显然是一个主要的   应用。脚本通常比应用程序小   一些明确定义的东西,并且更简单&#34;使用,通常可以   被分解成一系列明确的子操作,但所有这些   事情是主观的。

引自here

答案 16 :(得分:0)

我认为完全没有代码被编译或解释。

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

  • 如果代码生成的新功能未在系统中的其他程序中实现 - 那么它就是一个程序。它甚至可以由脚本操纵。

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

答案 17 :(得分:-1)

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

答案 18 :(得分:-1)

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

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

答案 19 :(得分:-2)

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

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


你也问为什么不编写脚本语言,所以:

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

大多数情况下,脚本可以用Python或Ruby等真实的轻量语言替换。