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

时间:2020-03-06 14:24:08  来源:igfitidea点击:

我指的是这样的区别:

...bash isn't for writing applications it's for, well, scripting. So sure, your application might have some housekeeping scripts but don't go writing critical-business-logic.sh because another language is probably better for stuff like that.

作为使用多种语言工作的程序员,这似乎是C,Java和其他编译语言的no俩。我不是要加强我的意见或者波澜不惊的答案。相反,我确实想知道所指的是哪些技术差异。

(而且我在日常工作中使用C,因此我不只是出于防御。)

解决方案

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

脚本往往是一系列启动,运行和终止的命令。它通常不需要/很少需要人工干预。应用程序是一个"程序"……它经常需要人与人之间的交互,并且往往会更大。

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

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

我们还问为什么不编写脚本语言,所以:

甚至还没有用于脚本语言的单元测试工具?对于"真实"应用程序来说,这似乎是一个非常重要的工具,但它却完全消失了。而且很少有用于脚本语言的真正的库绑定。

在大多数情况下,无论如何,脚本都可以用真正的轻量级语言(如Python或者Ruby)代替。

传统上,程序是编译的,脚本是解释的,但这已经不再重要了。如果确实需要,我们可以生成大多数脚本的编译版本,并且实际上会解释其他"编译"语言(例如Java)(在字节码级别)。

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

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

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

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

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

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

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

通常,它是"脚本"与"程序"。

我与我们一样,这种区别主要是"汇编语言势利",或者引用拉里·沃尔(Larry Wall)的话,以及栅栏的另一边,"演员是脚本,是向观众提供节目"。

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

它通常只是语义参数,甚至是贬低某些编程语言的一种方式。就我而言,"脚本"是一种程序,确切的定义有些含糊且随上下文而变化。

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

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

术语"脚本语言"已用于动态解释(有时是编译)的语言,通常这些语言具有许多共同特征,例如非常高级的指令,内置的哈希值和任意长度的列表以及其他高级数据结构等。但是这些语言能够处理非常大型,复杂,模块化,设计良好的程序,因此,如果我们将"脚本"视为程序以外的东西,则该术语可能会使我们困惑。

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

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

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

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

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

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

但是,一个脚本只是作为西装革履而已,几乎没有计划。

但是,缺乏适当的计划并不能将我们降级为脚本。可能会使应用程序成为组织不良,计划不周的脚本的集合。

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

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

这并不意味着它在实际执行时功能不强大或者未通过某种方式进行编译。但是脚本本身不能做任何事情,只是纯文本。
从本质上讲,它只能是一个片段,需要结合起来以构建程序或者应用程序,但是扩展且充分开发的脚本或者脚本集在由主机执行时可以视为程序或者应用程序,就像一堆源文件可以在编译后成为应用程序。

这是一个有趣的话题,我认为对于区分"脚本"和"应用程序"没有很好的指导原则。

让我们看一些Wikipedia文章,以了解这种区别。

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

A scripting language, script language or extension language, is a programming language that controls a software application. "Scripts" are often treated as distinct from "programs", which execute independently from any other application. At the same time they are distinct from the core code of the application, which is usually written in a different language, and by being accessible to the end user they enable the behavior of the application to be adapted to the user's needs.

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

In computer science, an application is a computer program designed to help people perform a certain type of work. An application thus differs from an operating system (which runs a computer), a utility (which performs maintenance or general-purpose chores), and a programming language (with which computer programs are created). Depending on the work for which it was designed, an application can manipulate text, numbers, graphics, or a combination of these elements.

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

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

同样,就目的而言,脚本通常执行需要照顾的任务,例如,生成针对某个软件的多个发行版本的构建脚本。另一方面,应用程序旨在提供更完善的功能,并面向最终用户。例如,记事本或者Firefox。

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

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

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

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

程序:

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

脚本:

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