编程语言和脚本语言有什么区别?例如,考虑C与Perl。
脚本语言仅需要解释器而不需要编译和链接是唯一的区别吗?
A
的语言,然后写一个解释器B
在解释该语言A
可以执行,那么翻译C
的语言解释器B
可以执行本质上,这全都是间接问题,它与计算的理论基础无关,而与实际工程问题有关。
编程语言和脚本语言有什么区别?例如,考虑C与Perl。
脚本语言仅需要解释器而不需要编译和链接是唯一的区别吗?
A
的语言,然后写一个解释器B
在解释该语言A
可以执行,那么翻译C
的语言解释器B
可以执行本质上,这全都是间接问题,它与计算的理论基础无关,而与实际工程问题有关。
Answers:
我认为差异与语言的预期用途有很大关系。
例如,像Prolog一样,Python是经过解释的,不需要编译和链接。我将这两类都归为编程语言。
编程语言用于编写软件。它们旨在管理大型项目。他们可能可以调用程序,读取文件等,但是可能不如脚本语言那么出色。
脚本语言并不适用于大规模软件开发。它们的语法,功能,库等更多地集中在快速完成小型任务上。这意味着它们有时比编程语言更“骇俗”,并且可能不具有所有相同的出色功能。它们旨在使通常执行的任务(例如遍历一堆文件或执行sysadmin任务)自动化。
例如,Bash不能很好地执行算法,这可能会使在其中编写大型软件成为一场噩梦。
作为一种基准:即使可能,我也不会用perl编写音乐播放器。同样,我绝不会尝试使用C ++重命名给定文件夹中的所有文件。
这条线变得越来越模糊。从定义上讲,JavaScript是一种“脚本”语言,越来越多地用于开发在软件领域中更多的“ Web应用程序”。同样,Python最初适合脚本语言的许多特性,但现在看到越来越多的软件使用Python作为主要平台开发。
关于脚本语言的经典文章是John K. Ousterhout的《脚本:21世纪的高级编程》,发表于1998年计算机31(3)。他一方面区分了脚本语言,另一方面对系统编程语言进行了区分。另一个。
Ousterhout将系统编程语言描述为已进化为取代用于编程的机器语言。它们隐藏了诸如寄存器分配和子例程调用序列之类的繁琐细节,提供了用于编写循环和其他常见控制流习惯用法的简单构造,并强制执行键入规则。它们通常由(提前)编译器实现。这些语言旨在从头开始编写软件。示例是C,C ++和Java。
相反,根据Ousterhout的说法,脚本语言的前提是已经存在有用的程序,通常使用系统编程语言编写。诸如Perl,Python,Tcl,Visual Basic和Unix Shell之类的脚本语言提供了将这些现有程序组合成新程序的工具。Ousterhout将脚本语言描述为“无类型”(包括许多人称为动态类型),并强调了快速发展。它们通常由口译员实施。
现在,必须注意不要假设单个作者的概念模型具有权威性。尽管我们计算机科学家喜欢假装我们是对所有术语都给出精确定义的数学家,但实际上,大多数计算术语是在社会上构建的,具有模糊和异构的含义;对于大多数术语,高层都有一个粗略的共识,但是细节通常取决于谁在写。因此,把他的文章,我的答案以及所有其他答案都放在这里。
当您在问题中用语表达时,我个人会质疑“正常”编程语言的存在。但是,我认为您要传达的概念大致对应于Ousterhout的系统编程语言。
设置“脚本语言”是设置“编程语言”的子集。C和Perl之间的区别是系统编程语言和应用程序语言之间以及解释语言和编译语言之间的区别。
系统编程语言是低级的,面向内存管理,可预测的IO等。应用程序语言旨在快速解决更高级别的问题,例如“从文件读取设置,打开套接字并根据设置处理请求”。
因此,应用程序语言往往比系统语言更高级,即提供大量的内置抽象和帮助程序功能,并经常添加某种形式的自动内存管理。
在执行程序之前,已编译语言的程序已完全处理为某些代码。脚本语言是在执行过程中动态翻译的,通常包括用于动态代码生成的工具,并包括带有源代码的文件。
因此,所有脚本语言都是应用程序语言,但事实并非相反。系统语言始终是编译语言,因为脚本语言通常包含一些功能,这些功能就语言本身而言并不实用。但是请注意,脚本(解释)/编译的区别更多地是关于实现的:对于某些语言,两种类型的实现可能都存在,就像haskell一样。
其他人则涵盖了往往与脚本语言和非脚本语言相关联的属性。这有助于了解人们使用“脚本语言”一词的含义,但我觉得更重要的是要了解没有明确定义的界限:两个有知识的人可能会不同意某一种特定的语言X是否是一种语言。脚本语言。但是,“脚本语言”一词具有实用性,因为人们对边界之外或之外的语言达成了广泛共识。
比较“家用车”与“跑车”,或“杂志”与“报纸”。我敢说,要想出一个100%可靠的规则来区分每辆家用汽车和每辆可概括的跑车(这意味着它基本上不等于列举每个类别中的所有现有汽车)并且至少具有潜在的目标(表示所有人都可以接受)。但是这些术语在实践中仍然有用,因为尽管有些情况很难决定,但许多汽车显然属于一种类别,而没有另一种类别。