我指的是诸如以下的区别 这个答案:

...bash 不是用来编写应用程序的,它是用来编写脚本的。当然,您的应用程序可能有一些内务脚本,但不要编写 critical-business-logic.sh 因为另一种语言可能更适合类似的事情。

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

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

有帮助吗?

解决方案

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

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

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

其他提示

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

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

我同意你的观点,这种区别主要是“编译语言势利”,或者引用拉里·沃尔的话,站在栅栏的另一边,“剧本是演员拥有的,节目是提供给观众的”。

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

让我们看一下维基百科的一些文章来感受一下其中的区别。

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

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

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

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

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

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

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

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

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

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

它通常只是一种语义论证,甚至是诋毁某些编程语言的一种方式。就我而言,“脚本”是一种程序,确切的定义有些模糊并且随上下文而变化。

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

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

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

也可以看看 它是 Perl 程序还是 Perl 脚本? 在 perlfaq1 中。

脚本通常是脚本引擎内部较大应用程序的一部分。JavaScript->浏览器这与传统的静态键入编译语言和动态语言相反,该语言旨在构成应用程序的主要部分。

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

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

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

首先,我想澄清的是 脚本是一个程序. 。换句话说,脚本是一组指令。

程序:

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

脚本:

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

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

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

应用程序将由文件或命名空间/类的集合组成(例如一个面向对象设计的 Perl 应用程序,带有许多 .pm 模块文件)。

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

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

然而,剧本只是像套装一样拼凑在一起,几乎不涉及任何计划。

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

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

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

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

关于什么:

脚本:

A 脚本 是用某种语言编写的编程语句的文本文件(或文本文件的集合),该语言允许用该语言编写的各个语句 解释为机器可执行文件 代码 就在之前 每个都被执行 并为了实现这一目标.

应用:

一个 应用 是其主要功能涉及向人类参与者提供服务的任何计算机程序。

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

有接受者吗?:)

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

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

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

参考自 这里.

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

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

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

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

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

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

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

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

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


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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top