代码之家  ›  专栏  ›  技术社区  ›  Jon Ericson Homunculus Reticulli

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

  •  33
  • Jon Ericson Homunculus Reticulli  · 技术社区  · 16 年前

    我指的是区别,比如 this answer :

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

    作为使用多种语言的程序员,这似乎是C语言、Java语言和其他编译语言势利。我不想再强调我的观点或是手摇回答。相反,我真诚地想知道所提到的技术差异是什么。

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

    20 回复  |  直到 16 年前
        1
  •  46
  •   Jeff    16 年前

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

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

    Web是一个有趣的反例。我们都喜欢用谷歌搜索引擎查找东西。用于创建IT引用的“数据库”的大部分代码仅由其作者和维护人员使用。这就是剧本吗?

        2
  •  41
  •   Bernard    16 年前

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

        3
  •  30
  •   Thilo    16 年前

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

    我同意你的观点,这种区别主要是“汇编语言的势利”,或者引用拉里·沃尔的话,并采取另一种立场,“剧本是演员的,节目是给观众的”。

        4
  •  8
  •   coobird    16 年前

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

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

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

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

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

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

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

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

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

        5
  •  8
  •   Henk Langeveld    12 年前

    John Ousterhout(TCL的发明者)在 http://www.tcl.tk/doc/scripting.html 在这里,他提出了系统编程语言(用于实现构建块、强调正确性、类型安全)与脚本语言(用于组合构建块、强调对不断变化的环境和需求的响应、易于在文本表示中转换和从文本表示中转换)之间的区别。如果你使用这个分类系统,那么99%的程序员所做的工作比系统编程语言更适合于脚本语言。

        6
  •  4
  •   Aaron    16 年前

    脚本往往是一系列启动、运行和终止的命令。它通常需要很少的人与人之间的互动。应用程序是一个“程序”…它往往需要人类的互动,它往往更大。

        7
  •  3
  •   Doug T.    16 年前

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

        8
  •  3
  •   skiphoppy    16 年前

    它通常只是一个语义参数,甚至是一种否定某些编程语言的方法。就我而言,“脚本”是一种程序类型,确切的定义有点模糊,并随上下文变化。

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

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

    “脚本语言”一词已被用于动态解释(有时是编译的)语言,通常这些语言具有许多共同的特征,如非常高级的指令、内置的哈希和任意长度的列表以及其他高级数据结构等,但这些语言能够非常大、复杂、模块化、很好地定义签名程序,所以如果你把“脚本”看作是程序以外的东西,这个术语可能会让你困惑。

    也见 Is it a Perl program or a Perl script? 在PelLFQ1中。

        9
  •  2
  •   Martin OConnor    16 年前

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

        10
  •  2
  •   Jason Wadsworth    16 年前

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

    脚本是执行一个相当特定的任务的代码。

    在我看来,这种差异与使用的语言无关。用BASH编写复杂的应用程序是可能的,用C++编写一个简单的脚本是可能的。

        11
  •  2
  •   Mike G    12 年前

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

    程序:

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

    脚本:

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

        12
  •  1
  •   mopoke    16 年前

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

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

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

        13
  •  1
  •   Kent Fredric    16 年前

    就个人而言,我认为这种分离是实际实现的倒退。

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

    然而,一个脚本只是作为合适的东西放在一起,很少涉及计划。

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

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

        14
  •  1
  •   Norman Ramsey    16 年前

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

    一个脚本开始时很小,如果幸运的话保持较小,很少卖给客户,可能会自动运行或废弃。

        15
  •  1
  •   Mike G    12 年前

    如何:

    脚本:

    脚本 是用一种语言编写的编程语句的文本文件(或文本文件的集合),它允许在其中编写的单个语句 解释为计算机可执行文件 代码 直接前 每个都执行 为了这件事的发生 .

    应用:

    应用 是一种主要功能涉及为人类参与者提供服务的计算机程序。

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

    有接受者吗?:)

        16
  •  0
  •   FullStack    9 年前

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

    很多(大多数?)脚本语言被解释,很少被编译 语言被认为是脚本语言,但问题是 编译与解释只是松散地与问题联系在一起。 “脚本”和“严肃”语言。

    这里的很多问题是“脚本”是一个相当模糊的 名称——这是一种便于书写的语言。 脚本,而不是编写“完整的程序”(或 应用程序)。但是如何区分复杂的脚本和 简单应用?这是一个基本上无法回答的问题。 通常,脚本是应用于某些 数据,可能以用户定义的顺序…但那时,一个人可以伸展 这个描述适用于photoshop,它显然是 应用。脚本通常比应用程序小。 一些定义明确的东西,使用起来“简单”,通常可以 分解成一系列清晰的子操作,但所有这些子操作 事情是主观的。

    引用自 here .

        17
  •  0
  •   user6389186    8 年前

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

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

    • 如果代码产生了新的功能,而这些功能并没有在系统中的其他程序中实现,那么它就是一个程序。它甚至可以被一个脚本操纵。

    • 如果代码主要由其他程序的操作来操纵,那么总的结果主要是被操纵程序的工作结果——这是一个脚本。字面意思是一些程序的动作脚本。

        18
  •  -1
  •   paan    16 年前

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

        19
  •  -1
  •   Francesca    16 年前

    我想说剧本通常是 用纯文本编写的一组命令或指令 那是 由宿主应用程序执行 (浏览器、命令解释器或shell…)。

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

        20
  •  -2
  •   John Millikin    16 年前

    脚本语言没有标准库或平台(或者没有标准库或平台)。它又小又轻,被设计成嵌入一个更大的应用程序。bash和javascript是脚本语言的好例子,因为它们的功能完全依赖于其他程序。

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


    您还会问为什么不编写脚本语言,因此:

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

    大多数时候,脚本都可以被一种真实的、轻量级的语言(比如python或ruby)所取代。