What's the difference between a “script” and an “application”?我指的是这样的区别:
作为使用多种语言工作的程序员,这似乎是C,Java和其他编译语言的俩。 我不是要加强我的意见或波折的答案。 相反,我确实想知道所指的是哪些技术差异。 (而且我在日常工作中使用C,因此我不只是出于防御。) 传统上,程序是编译的,脚本是解释的,但这已经不再重要了。如果确实需要,可以生成大多数脚本的编译版本,并且实际上会解释其他"编译"语言(例如Java)(在字节码级别)。 一个更现代的定义可能是程序旨在供客户使用(也许是内部程序),因此应包括文档和支持,而脚本主要供作者使用。 网络是一个有趣的反例。我们都喜欢使用Google搜索引擎查找内容。创建其引用的"数据库"的大部分代码仅由其作者和维护者使用。这使它成为脚本吗? 我要说的是,一个应用程序倾向于交互使用,脚本将在其中运行,适合批处理工作。我不认为这是具体的区别。 通常,它是"脚本"与"程序"。 我和您一样,这种区别主要是"汇编语言势利",或者引用拉里·沃尔(Larry Wall)的话,然后是篱笆的另一面,"演员就是剧本,是给观众看的节目"。 John Ousterhout(TCL的发明者)在http://www.tcl.tk/doc/scripting.html上有一篇不错的文章,他提出了系统编程语言之间的区别(用于实现构建块,强调正确性,类型安全)。 vs脚本语言(用于组合构件,强调对变化的环境和需求的响应能力,易于在文本表示形式之间进行转换)。如果使用该分类系统,那么99%的程序员所从事的工作更适合脚本语言而不是系统编程语言。 这是一个有趣的话题,我认为对于区分"脚本"和"应用程序"没有很好的指导原则。 让我们看一下一些Wikipedia文章,以了解这种区别。 脚本(维基百科->脚本语言):
应用程序(维基百科->应用程序软件->术语)
阅读以上条目似乎表明,区别在于脚本由另一软件"托管",而应用程序则不是。我认为这可以争论不休,例如控制shell行为的shell脚本和控制解释器执行所需操作的行为的perl脚本。 (我觉得这可能有点麻烦,所以我可能并不完全同意。) 归根结底,我认为可以根据程序的规模来进行口头区分。与应用程序相比,脚本的规模通常较小。 同样,就目的而言,脚本通常执行需要照顾的任务,例如,生成针对某个软件的多个发行版本的构建脚本。另一方面,应用程序旨在提供更完善的功能,并面向最终用户。例如,记事本或Firefox。 脚本往往是一系列启动,运行和终止的命令。它通常不需要/很少需要人工干预。应用程序是一个"程序"……它经常需要人与人之间的交互,并且往往会更大。 它通常只是语义参数,甚至是贬低某些编程语言的一种方式。就我而言,"脚本"是一种程序,确切的定义有些含糊且随上下文而变化。 我可能会使用"脚本"一词来表示主要线性执行的程序,而不是使用大量顺序逻辑或子例程执行的程序,就像好莱坞的"脚本"是演员要执行的线性指令序列一样。我可能会用它来表示用嵌入较大程序中的语言编写的程序,以驱动该程序。例如,使用AppleScript在旧的Mac OS下自动执行任务,或者驱动一个通过嵌入式TCL界面以某种方式公开的程序。 但是在所有这些情况下,脚本都是一种程序。 术语"脚本语言"已用于动态解释(有时是编译)的语言,通常这些语言具有许多共同的特征,例如非常高级的指令,内置的哈希值和任意长度的列表以及其他高级数据结构等。但是那些语言能够处理非常大,复杂,模块化,设计良好的程序,因此,如果您将"脚本"视为程序以外的东西,则该术语可能会使您感到困惑。 另请参见它是Perl程序还是Perl脚本?在perlfaq1中。 对我而言,脚本意味着对代码进行逐行解释。您可以打开脚本并查看其程序员可读的内容。应用程序意味着一个独立的编译可执行文件。
脚本通常作为脚本引擎内部较大应用程序的一部分运行 应用程序是针对一组常见问题的脚本的集合。 脚本是用于执行一个相当具体的任务的一些代码。 IMO,区别与所使用的语言无关。可以使用bash编写复杂的应用程序,也可以使用C ++编写简单的脚本。 首先,我想清楚地表明脚本是程序。换句话说,脚本是一组指令。 程序: 一组将要编译的指令称为程序。 脚本: 一组将被解释的指令称为脚本。 就我个人而言,我认为分离是实际实施的退步。 据我估计,正在计划一个应用程序。它具有多个目标,具有多个可交付成果。在设计时有一些在应用程序必须满足的编码之前被搁置的任务。 然而,一个脚本只是作为西装被扔在一起,几乎没有计划。 但是,缺乏适当的计划并不能将您降级为脚本。可能会使您的应用程序成为组织不良,计划不周的脚本的集合。 此外,应用程序可以包含聚合的脚本,这些脚本构成了整体。但是脚本只能引用应用程序。 一个应用程序很大,将被人们反复使用,并可能出售给客户。 脚本从小开始,如果幸运的话,会变小,很少出售给客户,并且脚本可能会自动运行或被废弃。 以perl为例,您可以编写perl脚本或perl应用程序。 脚本将暗示单个文件或单个名称空间。 (例如updateFile.pl)。 应用程序将由文件或名称空间/类的集合组成(例如,OO设计的Perl应用程序,其中包含许多.pm模块文件)。 关于什么: 脚本:
应用:
因此,从理论上讲,以脚本语言编写的基于脚本的程序可以在执行脚本时更改其文本语句(当然,这样做的风险很大)。编译程序的类似情况是将内存中的位翻转。 有没有人? :) 我认为代码是编译还是解释都没有关系。 真正的区别在于代码的核心逻辑:
@Jeff的答案很好。我最喜欢的解释是
从这里引用。 我想说一个脚本通常是一组以纯文本形式编写的命令或指令,这些命令或指令由托管应用程序(浏览器,命令解释器或shell等)执行。
这并不意味着它在实际执行时功能不强大或未通过某种方式进行编译。但是脚本本身不能做任何事情,只是纯文本。 实际上,脚本(或脚本语言)与应用程序之间的区别在于,脚本不需要将其编译为机器语言。.您可以使用解释器运行脚本的源代码。.应用程序将源代码编译为机器代码,以便您可以将其作为独立的应用程序运行。 脚本语言没有标准的库或平台(或者没有太多)。它体积小,重量轻,旨在嵌入到更大的应用程序中。 Bash和Javascript是脚本语言的绝佳示例,因为它们绝对依赖其他程序来实现其功能。 使用此定义,脚本是用于驱动更大的应用程序(套件)的代码。 Javascript可能会在Firefox上打开窗口或操纵DOM。 Bash脚本执行现有程序或其他脚本,并将它们与管道连接在一起。 您还问为什么不编写脚本语言,所以: 甚至还没有用于脚本语言的单元测试工具?对于"真实"应用程序来说,这似乎是一个非常重要的工具,但它却完全消失了。而且很少有用于脚本语言的真正的库绑定。 在大多数情况下,无论如何,脚本都可以用真正的轻量级语言(如Python或Ruby)代替。 |