何时将语言视为脚本语言?

When is a language considered a scripting language?

什么使语言成为脚本语言?我听过一些人说"当它被解释而不是编译时"。这将使PHP(例如)成为一种脚本语言。这是唯一的标准吗?还是有其他标准?

另请参见:

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


简单。当我使用它时,它是一种现代的动态语言,当你使用它时,它只是一种脚本语言!


脚本语言是一种"编写"其他事情的脚本的语言。主要关注的不是构建自己的应用程序,而是让现有的应用程序按照您想要的方式运行,例如浏览器的javascript、MS Office的VBA。


传统上,当讨论脚本和编程的区别时,脚本被解释并编译程序。一种语言可以以不同的方式执行-解释或编译(到字节码或机器代码)。这并不构成一种语言。

在某些人看来,你使用语言的方式使它成为脚本语言(例如,主要以C++开发的游戏开发者将在Lua中编写对象)。同样,这些行是模糊的-一种语言可以被一个人用来编程,同样的语言可以被另一个人用来编写脚本语言。

这是维基百科关于脚本语言的文章:

A scripting language, script language or extension language is a programming language that allows control of one or more software applications."Scripts" are distinct from the core code of the application, as they are usually written in a different language and are often created or at least modified by the end-user. Scripts are often interpreted from source code or bytecode, whereas the applications they control are traditionally compiled to native machine code. Scripting languages are nearly always embedded in the applications they control.

您会注意到"通常"、"经常"、"传统"和"几乎总是"的用法——所有这些都告诉您,没有一组独特的属性使特定语言成为"脚本语言"。


"A script is what you give the actors.
A program is what you give the
audience." -- Larry Wall

我真的不认为还有什么区别。所谓的"脚本"语言通常是在运行时快速编译的。一些"编程"语言也在运行时被进一步编译(考虑到JIT),"编译"的第一个阶段是语法检查和资源解析。

别挂断电话,这真的不重要。


我的定义是一种通常作为源而不是作为二进制分布的语言。


就像色情,你一看到就知道。脚本语言的唯一可能定义是:

1
A language which is described as a scripting language.

有点圆,不是吗?(顺便说一下,我不是开玩笑)。

基本上,没有什么能使语言成为脚本语言,除非它被称为脚本语言,特别是被它的创建者称为脚本语言。现代脚本语言的主要集合是php、perl、javascript、python、ruby和lua。Tcl是第一种主要的现代脚本语言(虽然它不是第一种脚本语言,但我忘记了它是什么,但我很惊讶地发现它早于Tcl)。

我在论文中描述了主要脚本语言的特点:

1
2
3
 A Practical Solution for Scripting Language Compilers
 Paul Biggar, Edsko de Vries and David Gregg
 SAC '09: ACM Symposium on Applied Computing (2009), (March 2009)

大多数是动态类型化和解释的,并且大多数在其引用实现之外没有定义的语义。然而,即使它们的主要实现被编译或抖动,也不会改变语言的"本质"。

他们唯一剩下的问题是,如何判断一种新语言是否是脚本语言。好吧,如果它被称为脚本语言,它就是一种。所以,因子是一种脚本语言(或者至少是写的时候),但是,Java不是。


有很多可能的答案。好的。

第一:这不是一个关于脚本语言和编程语言之间区别的问题,因为脚本语言是一种编程语言。更重要的问题是,什么特性使某些编程语言成为脚本语言,而另一种编程语言不是脚本语言。好的。

第二:很难说XYZ语言是什么,无论XYZ是"脚本"、"函数式编程"、"面向对象编程"还是"你拥有什么"。"函数式编程"的定义非常清楚,但是没有人知道"函数式编程语言"是什么。好的。

函数式编程或面向对象编程都是编程风格;您可以用几乎任何语言编写函数式或面向对象式。例如,Linux虚拟文件系统交换机和Linux驱动程序模型都是面向对象的,尽管用C语言编写,但是在Web上看到的许多Java或C代码是非常程序化的,而不是面向对象的。Otoh,我见过一些功能非常强大的Java代码。好的。

所以,如果函数式编程和面向对象编程仅仅是可以用任何语言完成的样式,那么如何定义一种"面向对象编程语言"?可以说,面向对象编程语言是一种允许面向对象编程的语言。但这并不是什么定义:所有语言都允许面向对象编程,因此所有语言都是面向对象的?所以,你说,如果一种语言强迫你用面向对象的方式编程,那么它就是面向对象的。但这也不是什么定义:所有语言都允许函数式编程,因此没有面向对象的语言?好的。

因此,对于我来说,我发现了以下定义:好的。

A language is a scripting language (object-oriented language / functional language) if it both

Ok.

  • facilitates scripting (object-oriented programming / functional programming), i.e. it not only allows it but makes it easy and natural and contains features that help with it, AND
  • encourages and guides you towards scripting (object-oriented programming / functional programming).

所以,在五段之后,我得出了这样的结论:"脚本语言是一种脚本语言"。多好的定义啊。不是。好的。

显然,我们现在需要看看"脚本"的定义。好的。

这就是第三个问题出现的地方:虽然术语"函数式编程"定义得很好,而且只有术语"函数式编程语言"有问题,但不幸的是,对于脚本,术语"脚本"和术语"脚本语言"都定义得不好。好的。

首先,脚本编写就是编程。这只是一种特殊的程序设计。IOW:每个脚本都是一个程序,但不是每个程序都是一个脚本;所有脚本集都是所有程序集的一个子集。好的。

在我个人看来,编写脚本并将其与其他类型的编程区分开来的是…好的。

Scripts largely manipulate objects that

Ok.

  • were not created by the script,
  • have a lifetime independent of the script and
  • live outside the domain of the script.

Also, the datatypes and algorithms used are generally not defined by the script but by the outside environment.

Ok.

考虑一个shell脚本:shell脚本通常操作文件、目录和进程。系统上的大多数文件、目录和进程可能不是由当前运行的脚本创建的。当脚本退出时,它们不会消失:它们的生命完全独立于脚本。它们也不是脚本的一部分,它们是系统的一部分。您没有通过编写FileDirectory类来启动脚本,这些数据类型与您无关:您只是假设它们存在,您甚至不知道(也不需要知道)它们是如何工作的。而且您也不实现自己的算法,例如,对于目录遍历,您只使用find,而不是实现自己的广度优先搜索。好的。

简而言之:一个脚本将自己附加到一个独立于脚本存在的更大的系统上,操作系统的一小部分,然后退出。好的。

更大的系统可以是shell脚本的操作系统、浏览器脚本的浏览器DOM、游戏(例如,Lua的魔兽世界或Linden脚本语言的第二人生)、应用程序(例如,AutoCAD或Excel/Word/Office宏的Autolisp语言)、Web服务器、一组机器人或其他实体。依靠。好的。

注意,脚本方面与编程语言的所有其他方面完全正交:脚本语言可以是强类型或弱类型、严格或松散类型、静态或动态类型、名义上、结构上或duck类型,甚至可以是非类型。它可以是命令式的或功能性的、面向对象的、过程性的或功能性的、严格的或懒惰的。它的实现可以解释、编译或混合。好的。

例如,Mondrian是一种具有编译实现的严格的强静态类型的惰性函数脚本语言。好的。

然而,所有这些都是没有意义的,因为脚本语言这个术语在现实世界中的实际使用方式与上述任何一种都没有关系。它通常被简单地用作侮辱,其定义相当简单,甚至简单:好的。

  • real programming language: my programming language
  • scripting language: your programming language

这似乎是这个词最常用的方式。好的。好啊。


"脚本语言"是一个模糊的概念,可以意味着很多事情。通常是指存在一个从源代码到执行的一步过程。

例如,在Perl中,您需要:perl my_source.pl

鉴于上述标准,PHP是一种脚本语言(即使您可以有一个"编译"过程,例如,当使用Zend编码器"保护"源代码时)。

通常(但并非总是)解释脚本语言。同样,脚本语言通常(但也不总是)是动态类型的。


所有脚本语言都是编程语言。所以严格来说,没有区别。

这个术语并不指语言的任何基本属性,它指的是语言的典型用法。如果典型的用途是写一些简短的程序,这些程序主要执行对预先存在的代码的调用,并对结果进行一些简单的处理(即,如果典型的用途是写脚本),那么它就是一种脚本语言。


我认为罗伯托先生有一个很好的答案或"在Lua中编程"中的问题:

However, the distinguishing feature of
interpreted languages is not that they
are not compiled, but that any
compiler is part of the language
runtime and that, therefore, it is
possible (and easy) to execute code
generated on the fly


一个部门是

  • 脚本=动态解释
  • 正常=已编译

动态解释语言在运行时被解释,而编译语言在执行前被编译。

我应该加上J?RG指出,解释/编译的区别不是语言的一个特性,而是执行引擎的特性。

您可能还对类型系统的这种解释感兴趣,它是相关的,并且更加关注语言方面,而不是执行引擎。大多数脚本语言都是动态类型,而"普通"语言大多是静态类型。

一般来说,静态和动态类型语言的划分被更好地定义,并且对语言的可用性有更多的影响。


脚本语言最初被认为是用硬编程语言编写的应用程序的控制机制。编译后的程序在运行时无法修改,因此脚本编写给了人们灵活性。

最值得注意的是,shell脚本正在操作系统内核(传统上是Macs上的applescript)中实现过程自动化;这个角色越来越多地被传递到Perl手中,然后最近又被传递到了Python中。我已经看到了用于声明光线跟踪场景的方案(尤其是在其诡计实现中);最近,Lua作为编写游戏脚本的编程语言非常流行——在许多新游戏中,唯一硬编码的东西是图形/物理引擎,而整个游戏逻辑是用Lua编码的。同样,人们认为javascript是为Web浏览器的行为编写脚本的。

语言被解放了;现在没有人把操作系统当作一个应用程序来考虑(或者根本不考虑),许多以前的脚本语言开始被用来编写自己的完整应用程序。这个名字本身就变得毫无意义,并且传播到今天使用的许多解释性语言,不管它们是否被设计成在另一个系统中被解释。

然而,"脚本语言"绝对不是"解释语言"的同义词——例如,basic在其生命的大部分时间都被解释了(即,在它失去了语言特异性并变成了Visual Basic之前),但是没有人真的认为它是脚本。

更新:像往常一样阅读维基百科上的资料。


脚本语言通常是:

  • 动态类型
  • 解释,很少强调性能,但具有良好的可移植性
  • 需要的样板代码要少得多,从而实现非常快速的原型设计
  • 用于小任务,适合写单个文件运行一些有用的"脚本"。
  • 而非脚本语言通常是:1。静态类型2。编译,强调性能三。需要更多样板代码,导致原型设计速度较慢,但可读性和长期可维护性更高4。用于大型项目,适应多种设计模式

    但在我看来,这更像是一个历史性的差异。JavaScript和Perl是用简单、简单的脚本编写的,而C++是用复杂的应用程序编写的,但两者都可以使用。许多编程语言,无论是现代的还是老的,都会模糊这条线(首先是模糊的!).

    可悲的是,我认识一些开发人员,他们厌恶他们所认为的"脚本语言",认为它们更简单,也没有那么强大。我的观点是,老套的陈词滥调——为工作使用正确的工具。


    第一点,编程语言不是"脚本语言"或其他什么语言。它可以是一种"脚本语言"和其他东西。

    第二点,语言的实现者将告诉您它是否是脚本语言。

    您的问题应该是"在什么实现中,编程语言会被视为脚本语言?",而不是"脚本语言和编程语言有什么区别?"之间没有。

    然而,如果一种语言被用来提供某种类型的中间软件,我会把它看作一种脚本语言。例如,我认为大多数JavaScript实现都是一种脚本语言。如果javascript是在操作系统中运行的,而不是在浏览器中运行的,那么它就不是脚本语言。如果PHP运行在Apache内部,那么它是一种脚本语言。如果是从命令行运行,则不是。


    我和我的朋友刚刚有过这样的争论:编程语言和脚本语言之间的区别是什么?

    一个流行的论点是,编程语言是编译的,脚本语言是解释的——但是我认为这个论点是完全错误的……为什么?

  • chakra&v8(微软和谷歌的javascript引擎)在执行前编译代码
  • Qbasic是解释的-这是否使Qbasic成为一种"脚本"语言?
  • 在此基础上,我认为编程语言和脚本语言的区别在于:

    编程语言在机器级运行,并且可以访问机器本身(内存、图形、声音等)。

    脚本语言是沙盒语言,只能访问暴露在沙盒中的对象。它不能直接访问底层机器。


    我认为脚本语言不需要一个明显的重量级感觉"编译"步骤。从程序员的角度来看,主要功能是:编辑代码并立即运行它。

    因此,我将把javascript和PHP视为脚本语言,而actionscript 3/flex并不是真正的脚本语言。


    我会继续把我的答案从重复的问题中转移出来。好的。

    "脚本语言"这个名称适用于一个非常具体的角色:编写命令发送到现有软件应用程序的语言。(就像传统的电视或电影"剧本")。好的。

    例如,以前,HTML网页很无聊。它们总是静止的。然后有一天,网景想,"嘿,如果我们让浏览器读取页面上的小命令并对其进行操作怎么办?"就这样,形成了JavaScript。好的。

    一个简单的javascript命令是alert()命令,它指示/命令正在读取网页的浏览器(软件应用程序)显示警报。好的。

    现在,EDCOX1与0是否以任何方式关联到C++或浏览器实际用来显示警报的任何代码语言?当然不是。在.html页面上编写"alert()"的人不了解浏览器实际如何显示警报。他只是在写一个浏览器会解释的命令。好的。

    让我们看看简单的javascript代码好的。

    1
    2
    var x = 4
    alert(x)

    这些是发送到浏览器的指示,供浏览器自行解释。浏览器所使用的编程语言实际上将变量设置为4,并将其放入警报中…它与JavaScript完全无关。好的。

    我们将最后一系列命令称为"脚本"(这就是为什么它包含在标记中的原因)。按照传统意义上的"脚本"定义:一系列发送给演员的指令和命令。每个人都知道剧本(电影剧本)就是剧本。好的。

    剧本(剧本)不是演员,不是照相机,也不是特效。剧本只是告诉他们该怎么做。好的。

    现在,到底什么是脚本语言?好的。

    工具箱中有许多编程语言,就像不同的工具;有些语言专门设计用作脚本。好的。

    JavaScript是一个明显的例子;很少有不属于脚本领域的Javascript应用程序。好的。

    actionscript(flash动画语言)及其派生语言是脚本语言,它们只向flash播放器/解释器发出命令。当然,也有一些抽象的东西,比如面向对象编程,但所有这些都只是一种达到目的的手段:向flash播放器发送命令。好的。

    python和ruby也常用作脚本语言。例如,我曾经在一家公司工作过,该公司使用Ruby编写命令脚本,发送到一个浏览器,该浏览器的行是"转到这个站点,单击这个链接…"来执行一些基本的自动测试。在那份工作中,我不是一个"软件开发人员"。我刚写了一些脚本,把命令发送到计算机,把命令发送到浏览器。好的。

    由于脚本语言的性质,它们很少被"编译"——也就是说,它们被翻译成机器代码,然后由计算机直接读取。好的。

    甚至从Python和露比创建的GUI应用程序都是用C++或C编写的API发送的脚本,它告诉C应用程序该做什么。好的。

    当然,这里有一条模糊的线。为什么你不能说机器语言/C是脚本语言,因为它们是计算机用来与基本主板/图形卡/芯片接口的脚本?好的。

    我们可以画一些线来澄清:好的。

  • 当您可以编写一种脚本语言,并且在不进行"编译"的情况下运行它时,它更像是一种直接的脚本类型的东西。例如,你不需要对剧本做任何事情来告诉演员如何处理它。它已经在那里了,已经用过了。出于这个原因,我们将从被称为脚本语言的编译语言中排除,即使它们在某些情况下可以用于脚本目的。好的。

  • 脚本语言意味着发送到复杂的软件应用程序的命令;这就是我们首先编写脚本的全部原因——所以您不需要知道软件如何工作的复杂性,就可以向它发送命令。因此,脚本语言往往是向复杂的软件应用程序发送(相对)简单命令的语言……在这种情况下,机器语言和汇编代码不会切断它。好的。

  • 好啊。


    我可以建议说,脚本语言是一个术语,很多人都在离开。我想说它现在主要归结为编译语言和动态语言。

    我的意思是,在当今时代,你不能说像python或ruby这样的语言是"脚本"语言(你甚至有Ironpython和Jit这类你最喜欢的语言,它们之间的区别已经变得更加模糊了)。

    老实说,就我个人而言,我觉得PHP不再是一种脚本语言了。我不希望人们喜欢在他们的简历上用Java不同的方式分类PHP。


    在我看来,我会说动态解释的语言,如PHP、Ruby等…仍然是"正常"语言。我想说的是,"脚本"语言的例子是bash(或ksh或tcsh等)或sqlplus。这些语言通常用于将系统上的现有程序串成一系列连贯的相关命令,例如:

  • 将a.txt复制到/tmp/work/
  • 在数据库服务器上运行夜间清理进程
  • 记录结果并将其发送到sysdamin
  • 所以我想说区别(对我来说,无论如何)更多地在于你如何使用语言。像php、perl、ruby这样的语言可以被用作"脚本语言",但我通常认为它们被用作"普通语言"(除了perl,这似乎是双向的)。


    脚本语言是配置或扩展现有程序的语言。脚本语言是一种编程语言。


    我更喜欢人们不使用"脚本语言"这个词,因为我认为它会减少工作量。以Perl这样的语言为例,它通常被称为"脚本语言"。

    • Perl是一种编程语言!
    • Perl是像Java和C++一样编译的。它的编译速度快得多!
    • Perl有对象、名称空间和闭包。
    • Perl有IDE、调试程序和概要文件。
    • Perl拥有培训、支持和社区。
    • Perl不仅仅是Web。Perl不仅仅是SysAdmin。Perl不仅仅是互联网的管道胶带。

    为什么我们甚至需要区分像JAVA这样的语言,而不是Ruby呢?贴标签有什么价值?

    有关更多信息,请参阅http://xoa.pettance.com/stop-saying-script。


    对这个问题的看法略有不同。脚本语言是编程语言,但编程语言不一定是脚本语言。脚本语言用于控制或编写系统脚本。该系统可以是脚本语言为bash的操作系统。系统可以是使用脚本语言php的Web服务器。脚本语言被设计来满足特定的利基市场;它们是特定于领域的语言。交互式系统已经解释了脚本语言,从而产生了脚本语言被解释的概念;然而,这是系统而不是脚本语言本身的结果。


    "脚本语言"的定义相当模糊。我将基于以下考虑:

  • 脚本语言通常没有用户可见的编译步骤。通常,用户只需在一个简单命令中运行程序。

  • 脚本语言中的程序通常以源形式传递。

  • 脚本语言通常具有大量系统上存在的运行时,并且运行时可以很容易地安装在大多数系统上。

  • 脚本语言往往是跨平台的,而不是特定于机器的。

  • 脚本语言使调用其他程序和与操作系统的接口变得容易。

  • 脚本语言通常很容易嵌入到用更传统的编程语言编写的大型系统中。

  • 脚本语言通常是为便于编程而设计的,而很少考虑执行速度。(如果您希望快速执行,通常的建议是用C之类的代码编写耗时的部分,并将语言嵌入C或从语言调用C位。)

  • 我上面列出的一些特性对于实现是正确的,在这种情况下,我指的是更常见的实现。有一些C解释器,(afaik)没有明显的编译步骤,但大多数C实现都不是这样。当然,您可以将Perl程序编译为本机代码,但这不是它通常的使用方式。其他一些特征是社会性的。上面的一些标准有些重叠。如我所说,定义是模糊的。


    脚本语言是一种每次运行脚本时都会被解释的语言,它意味着有一个解释器,而且大多数都是人类可读的,为了有用,脚本语言很容易学习和使用。

    每个可编译的语言都可以变成一种脚本语言,反之亦然,这完全取决于实现一个解释器或编译器,例如C++有一个解释器,因此它可以被称为脚本语言,如果使用的话(通常不太实用,因为C++是一种非常复杂的语言),目前最有用的脚本语言之一是Python。…

    因此,要回答你的问题,定义是使用解释器来运行快速而简单的脚本程序,处理简单的任务或原型应用程序,对脚本语言最强大的使用就是包括每次使用扩展已编译应用程序的可能性。


    脚本语言倾向于在脚本引擎中运行,而脚本引擎是更大应用程序的一部分。例如,javascript在浏览器脚本引擎中运行。


    脚本语言是一种编程语言,其中程序通常以可读的文本形式交付给最终用户,并且有一个程序显然可以直接执行该程序。(程序可以在内部很好地编译脚本;这与此处无关,因为用户看不到它。)

    对于脚本语言来说,能够支持交互式会话是比较常见的,在这种会话中,用户只需输入他们的程序并立即执行它。这是因为这只是第一段基本需求的一个小扩展;主要的额外需求是添加一个机制,以确定键入的语句何时完成,以便将其发送到执行引擎。


    一个重要的区别是强类型(相对于弱类型)。脚本语言通常是弱类型的,因此可以更快地编写小程序。对于大型程序来说,这是一个缺点,因为它禁止编译器/解释器自主地查找某些错误,这使得重构代码非常困难。


    你的标准听起来不错,但总是有点模糊。例如,Java都编译(字节码),然后解释(由JVM)。然而,它通常不属于脚本语言。

    这可能是因为Java是静态类型的。而javascript、ruby、python、perl等并非如此(所有这些通常都被称为脚本语言)。


    脚本语言是一种编程语言,用于操作、定制和自动化现有系统的设施。在这样的系统中,已经通过用户界面提供了有用的功能,脚本语言是一种向程序控制公开该功能的机制。这样,就可以说现有系统提供了对象和设施的主机环境,从而完成了脚本语言的功能。脚本语言供专业和非专业程序员使用。

    参考

    http://www.ecma-international.org/publications/files/ecma-st/ecma-262.pdf


    简而言之,脚本语言具有以下属性:

  • 基于解释程序。
  • 简单的语法,像目录中的访问文件在Python中与Java相比非常容易。
  • 通常用来写更少的代码行。
  • 便于编写自动化代码。
  • 非常高级的语言。
  • 例如:javascript、python、vba。


    我总是把脚本语言看作是与某种应用程序或程序进行通信的一种手段。相反,编译后的语言实际上创建了程序本身。

    现在请记住,脚本语言通常会添加或修改最初使用编译语言创建的程序。因此,它当然可以是大图片的一部分,但最初的二进制文件首先是用编译后的语言创建的。

    所以我可以创建一种脚本语言,允许用户执行各种操作或自定义我的程序。我的程序将解释脚本代码,然后调用某种函数。这只是一个基本的例子。它只是为您提供了一种在程序中动态调用例程的方法。

    我的程序必须解析脚本代码(您可以将这些代码称为命令),并实时执行任何操作。

    我看到这个问题已经回答了好几次了,但我想我应该把我看待事物的方式加进去。当然,有些人可能不同意这个答案,但这种思维方式一直在帮助我。


    我会说,脚本语言是一个严重操纵实体,它本身并没有定义。例如,javascript操作浏览器提供的DOM对象,PHP操作大量基于C的函数库,等等。当然不是一个精确的定义,更像是一种思考的方式。


    如果它不能/不会在CPU上运行,那对我来说就是一个脚本。如果一个解释器需要在程序下面的CPU上运行,那么它是一个脚本和一种脚本语言。

    没有什么理由比这更复杂了?

    当然,在大多数情况下(99%),很清楚一种语言是否是脚本语言。但是考虑到虚拟机可以模拟x86指令集,例如。在虚拟机上运行时,这是否会使x86字节码成为脚本语言?如果有人编写一个编译器,将Perl代码转换为本机可执行文件,会怎么样?在这种情况下,我不知道该如何称呼语言本身了。重要的是输出,而不是语言。

    再说一次,我不知道已经做了这样的事情,所以现在我仍然可以轻松地调用解释语言脚本语言。


    脚本是一个相对较小的程序。系统是一个相对较大的程序,或者是一组相对较大的程序。

    有些编程语言的设计具有语言设计者和编程社区认为在编写相对较小的程序时有用的功能。这些编程语言称为脚本语言,例如PHP。

    类似地,其他编程语言的设计具有语言设计者和编程社区认为在编写较大的程序时有用的功能。这些编程语言被称为系统语言,例如Java。

    现在,小程序和大程序可以用任何语言编写。一个小型Java程序就是一个脚本。例如,Java"Hello World"程序是脚本,而不是系统。用PHP编写的大型程序或程序集合是一个系统。例如,用PHP编写的Facebook是一个系统,而不是一个脚本。

    将单个语言特性视为"试金石",以确定该语言是否最适合脚本编写或系统编程,这是值得怀疑的。例如,脚本可以编译成字节码或机器码,也可以通过直接抽象语法树(AST)解释来执行。

    因此,如果一种语言通常用于编写脚本,那么它就是一种脚本语言。脚本语言可能被用来编写系统,但这样的应用程序可能被认为是可疑的。


    将Robert Sebesta译成编程语言的概念:

    A scripting language is used by putting a list of commands, called a script, in a file to be executed. The first of these languages, named sh (for shell), began as a small collection of commands that were interpreted as calls to system sub-programs that performed utility funcions, such as file management and simple file filtering. To this basis were added variables, control flow statemens, functions, and various other capabilities, and the result is a complete programming language.

    然后你有一些例子,比如awk,tcl/tk,perl(这说明最初是sh和awk的组合,但是它变得非常强大,以至于他认为它是一种"奇怪但成熟的编程语言")。其他例子包括CGI和JavaScript。


    我所知道的一个值得注意的资料来源所写的关于这个主题的最常见的文章被称为Ousterhout的二分法。它被高度批评为相当武断,经常被开玩笑地称为驱逐者的错误二分法。关于这个话题的讨论中所说的话值得引证。

    我个人同意这是一种错误的二分法,我不相信任何回答这个问题的人,他们提出要对什么定义脚本语言有坚定的属性。像"脚本语言必须是动态类型"这样的注释是错误的,像"脚本语言必须被解释"这样的注释甚至没有意义,因为与流行的观点相反,编译和解释根本不是语言的属性。

    上面提到的许多属性都是大致匹配的脚本语言,谢天谢地,大多数属性都正确地解释了这个术语没有严格的定义。所以我不会重复我的想法。根据我的经验,如果一种语言可以很容易地用它编写一些快速的废弃程序,而不需要编写太多的模板,人们就会把它看作一种脚本语言。我大部分的回答都是要给你一份驱逐令,我在这里看不到。


    正如其他人所指出的,没有编译或解释的语言,因为任何语言都可以编译或解释。但是传统上解释而不是编译的语言(python、perl、ruby、php、javascript、lua)也是人们倾向于称之为脚本语言的语言。所以说脚本语言是一种通常被解释而不是编译的语言是相对合理的。脚本语言的其他共同特征与解释它们的事实有关。

    脚本语言实际上是编程语言的一个子集;我认为大多数人不会声称我前面提到的任何语言都不是编程语言。


    只是为了布雷夫

    脚本语言在另一个程序中运行。未编译脚本语言。脚本语言易于使用和编写。但是…

    非常流行的程序设计语言(Java,C语言)运行在一个"父"程序中,就像脚本语言一样。今天的脚本语言被用来构建复杂的软件。如今的计算机速度如此之快,脚本语言的效率也如此之高,以至于对于大多数业务操作来说,编译后的编程语言没有实际的速度优势(以前是这样)。


    此外,您可能还想查看有关脚本语言的播客。


    即使Java是"脚本语言",因为它是用C语言实现的。

    尽管我不愿意尝试改进mgb的近乎完美的答案,但事实上,没有什么比C更好的实现方法,但是语言是相当低级的,并且接近硬件。当然,纯粹的天才,但要发展现代软件,我们需要一种更高层次的语言,可以说是站在C的肩膀上。

    所以,你有Python,Ruby,Perl,是的,甚至Java,所有在C.中实现的人都不会通过调用脚本语言来侮辱Java,但是它是。如果你想要一种强大的、现代的、动态的、反射的、废话连篇的语言,你可能正在运行类似Ruby的语言,它要么直接用C语言解释,要么编译成由某些C程序解释/jit编译的语言。

    人们的另一个区别是称动态类型语言为"脚本语言"。