是什么让一个语言的脚本语言? 我听到一些人说:“当它得到解释,而不是编”。 这将使PHP(例如)的脚本语言。 这是唯一的标准? 还是有其他的标准是什么?
也可以看看:
- 什么是“脚本”和“应用”之间的区别?
是什么让一个语言的脚本语言? 我听到一些人说:“当它得到解释,而不是编”。 这将使PHP(例如)的脚本语言。 这是唯一的标准? 还是有其他的标准是什么?
脚本语言是一种语言,“脚本”其他的事情要做的东西。 主要的焦点主要不是建立自己的应用程序这么多,因为让现有的应用程序行事,你所希望的方式,如对JavaScript的浏览器,VBA的MS Office的。
简单。 当我使用它,这是一个现代的动态语言,当你使用它,它只是一个脚本语言!
传统上,谈到有关脚本编程相比的区别时,脚本解释和编译程序。 甲语言可以以不同的方式执行 - 解释或编译(为字节码或机器代码)。 这并不使语言一种或另一种。
在一些人眼中,你使用语言的方式使得它的脚本语言(例如,游戏开发者主要是谁在开发C ++ 脚本将在Lua的对象)。 同样,界限模糊 - 语言可以由一个人来用于编程和相同的语言,可用于由其他脚本语言。
这是从维基百科的文章关于脚本语言:
脚本语言,脚本语言或扩展语言是一种编程语言,它允许一个或多个软件应用程序的控制。 “脚本”是从应用程序的核心代码的不同,因为它们通常用不同的语言,并且通常创建或由最终用户的至少修改。 脚本通常从源代码或字节代码解释,而它们所控制的应用程序传统上是编译为本地机器代码。 脚本语言几乎总是嵌入在他们控制的应用程序。
你会发现使用“通常”,“经常”,“传统”和“几乎总是” -这些都告诉你,有没有一套不同的属性,使特定的语言“脚本语言”的。
“脚本是你给的演员。一个程序是你给了观众。” 拉里 - 沃尔
我真的不认为有多大的差别更多的。 所谓的“脚本”语言通常编译 - 只是非常迅速,并在运行时。 而一些“编程”语言是在运行时被进一步编译以及(JIT想的)和“编译”的第一阶段是语法检查和资源解析。
不要被它挂了,它真的并不重要。
我的定义将是通常分布源,而不是作为二进制语言。
有很多可能的答案,这样的。
第一:这是不是一个真正的脚本语言和编程语言之间的差异的问题,因为脚本语言是一种编程语言。 这是一个什么样特质做一些编程语言的脚本语言,而另一种编程语言不是脚本语言更多的问题。
第二:这真的很难说一个XYZ语言是什么,那XYZ无论是“脚本”,“函数编程”,“面向对象编程”,或你有什么。 什么是“函数编程”的定义,是相当清楚的,但是没有人知道什么是“函数式编程语言”是。
功能的编程或面向对象的编程中编程风格 ; 你可以在一个实用的风格或在几乎任何语言的面向对象的风格写的。 例如,Linux的虚拟文件系统交换机和Linux的驱动程序模型被大量面向对象的,尽管用C写的,而大量的Java或C#代码,你在网络上看到的是非常的程序,并在所有不是面向对象的。 OTOH,我已经看到了一些严重的功能的Java代码。
所以,如果函数式编程和面向对象编程仅仅是可以用任何语言来完成的风格,那么你如何定义一个“面向对象的编程语言”? 可以说,面向对象的编程语言是一种语言,它允许面向对象的编程。 但是,这并不是太大的定义: 所有语言允许面向对象编程,因此所有的语言都面向对象? 所以,你说,还有一个语言是面向对象的,如果它迫使你在一个面向对象的编程风格。 但是,这并不是太大的定义,无论是: 所有语言允许函数式编程,因此没有语言面向对象?
所以,对我来说,我已经找到了如下的定义:
语言是脚本语言(面向对象的语言/功能性的语言),如果它都
- 便于脚本(面向对象的编程/功能编程),即它不仅可以让 ,但很容易和自然的和包含的功能,用它的帮助 ,
- 鼓励和引导你走向脚本(面向对象的编程/功能编程)。
于是,经过五段,我已经到达了:“一个脚本语言是脚本语言”。 真是一个伟大的定义。 不。
很显然,我们现在需要看看“脚本”的定义。
这是第三个问题来自于:而术语“函数式编程”是明确的,它是唯一的术语“函数式编程语言”,也就是有问题的,不幸的脚本, 无论术语“脚本”和术语“脚本语言“是不明确的。
嗯,首先脚本编程是 。 这只是一个特殊的节目。 督察:每个脚本是一个程序,但并不是每个程序的脚本; 该组中的所有脚本是集所有程序的一个子集。
在我个人看来,这使得脚本脚本和其他类型的节目区分开来,事情是,...
脚本主要操作对象
- 不是由脚本创建,
- 具有终身独立的脚本和
- 住脚本外域。
另外,所使用的数据类型和算法通常不是由脚本,但由外部环境来定义。
想想一个shell脚本:shell脚本通常操作文件,目录和进程。 您的系统上大多数的文件,目录和进程很可能不是由当前运行的脚本创建的。 和脚本退出时,他们没有消失:他们的一生是完全独立的脚本。 他们是不是真正的脚本的一部分,或者说,它们是系统的一部分。 你没写启动脚本File
和Directory
类,这些数据类型是关你的事:你只是假设他们在那里,你甚至不知道(你也不需要知道),他们是如何工作的。 而你没有实现自己的算法,或者说,如用于目录遍历你刚才用find
的,而不是实现自己的广度优先搜索。
简而言之:一个脚本本身附着到存在独立的脚本,操纵系统的一些小部分,然后退出一个更大的系统。
这更大的系统可以是操作系统的shell脚本的情况下,浏览器的DOM的浏览器脚本的情况下,游戏(如魔兽和Lua或第二人生与林登脚本语言的世界),应用程序(例如AutoLISP语言语言为AutoCAD或Excel /字/ Office宏),web服务器,机器人什么的一包东西完全。
需要注意的是脚本方面是完全垂直于编程语言的所有其他方面:脚本语言可以被强或弱类型,严格或松散类型,静态或动态类型,名义上,结构或鸭打字,赫克它甚至可以是无类型。 它可以是势在必行或功能性的,面向对象的,程序上的或功能性的,严格或懒惰。 它的实现可以解释,编译或混合。
例如,蒙德里安是一个编译执行严格的强静态类型的懒人功能的脚本语言。
然而,所有这一切都是没有实际意义,因为这个词的脚本语言是真的在现实世界中使用的方式,没有任何与上述任何一项。 这是最通常只是用来作为一种侮辱,并定义相当简单,甚至简单:
- 真正的编程语言:我的编程语言
- 脚本语言:您的编程语言
这似乎是这个词最常用的方式。
这就像色情,你知道当你看到它。 脚本语言的唯一可能的定义是:
A language which is described as a scripting language.
有点圆,不是吗? (顺便说一句,我不是在开玩笑)。
基本上,没有什么可以使语言的脚本语言,除了它被称为这样的,尤其是它的创造者。 现代脚本语言的主要集是PHP,Perl和JavaScript中,Python,Ruby和Lua的。 TCL是第一个重要的现代脚本语言(这是不是第一个脚本语言虽然,我忘了是什么,但我很惊讶地得知,它早TCL)。
我描述了主要的脚本语言的功能我的论文 :
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)
大多数都是动态类型和解释,并且大多数都没有他们的参考实现的外部定义语义。 然而,即使他们的主要实现变得编译或JIT编译的,不改变语言的“自然”。
他们只剩下的问题是你怎么能告诉我们,如果一个新的语言是一种脚本语言。 好吧,如果这就是所谓的脚本语言,它是一个。 所以因子是一种脚本语言(或者至少是当被写入),但是,比方说,Java是不是。
“脚本语言”是那些模糊的概念,这可能意味着很多事情之一。 通常,它指的是存在一个步骤的过程带您从源代码来执行的事实。
例如在Perl你做: perl my_source.pl
鉴于上述标准PHP是一种脚本语言(尽管你可以使用Zend Encoder来“保护”的源代码时有例如“汇编”的过程)。
PS。 通常(但并不总是)脚本语言解释。 还经常(但同样,不总是)脚本语言是动态类型。
所有的脚本语言编程语言。 所以严格来说,没有什么区别。
该术语并不是指语言的任何基本特性,它指的是典型使用的语言。 如果典型的应用是编写短程序,主要做调用预先存在的代码,并在结果一些简单的处理,(也就是说,如果典型的应用是编写脚本 ),那么它是一种脚本语言。
我想先生罗伯托·萨利姆斯有一个很好的答案或“在Lua编程”的问题:
然而,解释型语言的显着特点是不是他们没有编制,但任何编译器和语言运行库的一部分,因此,它是可能的(容易)执行实时生成的代码
一个分工
甲动态解释语言在运行时解释而编译语言被执行之前编译。
我要补充一点,作为约尔格指出,该解释/编译的区别不是语言的一个特征,但执行引擎。
您可能也有兴趣在这个解释型系统 ,这是相关的,并更侧重于语言方面,而不是执行引擎。 大多数脚本语言是动态类型,而“正常”的语言大多是静态类型。
在一般静态VS动态类型语言的划分是更好的界定和对语言的实用性更影响。
脚本语言通常是:
虽然非脚本语言通常是:1,静态类型2.编,重点对性能要求3.更样板代码,从而导致成型慢,但更多的可读性和长期维护4.用于大型项目,适应多设计模式
但它更是一个历史差异的今天,在我看来。 Javascript和Perl的,是经过小的,简单的脚本编写,而C ++的设计考虑了复杂的应用程序编写; 但两者都可以使用任何一种方式。 和很多编程语言,现代与古老的一致好评,模糊的线无论如何(这是摆在首位的模糊!)。
可悲的是,我认识的几个开发谁厌恶什么,他们认为是“脚本语言”,认为他们是简单,没有那么强大。 我的看法是,老话说 - 用于作业的工具。
脚本语言最初认为是书面的硬编程语言应用的控制机制。 编译程序不能在运行时修改,所以脚本给人的灵活性。
最值得注意的是,shell脚本是自动化的操作系统内核进程(传统上,的AppleScript在Mac上); 其中越来越多的传递到Perl的手中,然后出它成Python最近的作用。 我见过的方案(特别是在其狡诈实现)用于声明光线追踪的场景; 最近,Lua是作为编程语言编写脚本的游戏非常流行 - 来,在许多新游戏的唯一硬编码的是图形/物理引擎的地步,而整个游戏逻辑在Lua编码。 以同样的方式,JavaScript是认为脚本的Web浏览器的行为。
语言中解放出来; 没有人认为现在对OS的应用程序(或想着它更在所有),和许多以前的脚本语言开始被用来写自己的完整的应用程序。 这个名字本身变得毫无意义,而今天在使用蔓延到许多解释语言,不管他们是否被设计成从另一个系统中或没有解释。
然而,“脚本语言”是最肯定不是的代名词,“解释型语言” - 例如,BASIC被解释为大多数它的生活(即前失去了它acronimicity成为Visual Basic中),但没有人真的认为它作为脚本。
更新:阅读材料照常提供维基百科 。
第一点,编程语言是不是一个“脚本语言”要不了什么。 它可以是一个“脚本语言”和别的东西。
第二点,语言的实现者会告诉你,如果它是一个脚本语言。
你的问题应该是“在什么样的实现将一个编程语言被认为是一个脚本语言?”,而不是“是什么脚本语言和编程语言之间的区别?”。 没有之间。
不过,我会考虑语言的脚本语言,如果用它来提供某种类型的中间件的。 例如,我会考虑的JavaScript的大多数实现的脚本语言。 如果JavaScript的是在操作系统,而不是浏览器中运行,那么它不会是一个脚本语言。 如果PHP运行的Apache里面,这是一个脚本语言。 如果它是在命令行中运行,它不是。
我看到一个脚本语言的任何不需要的公然重量级的感觉“编译”步。 从程序员的角度来看,主要特点是:编辑代码并运行它的时候了。
因此,我会认为JavaScript和PHP作为脚本语言,而ActionScript 3的 / Flex的是不是真的。
我的朋友,我只是有这样的说法:是什么编程语言和脚本语言之间的差异。
一种流行的说法是,编程语言进行编译和脚本语言解释 - 不过,我相信这种说法是完全错误的......为什么呢?
在此基础上,这是我的编程语言和脚本语言之间的差异的说法:
一种编程语言,在机器级别运行,并先后获得了机器本身(内存,图形,声音等)。
脚本语言是砂盒装和只能访问暴露在沙盒对象。 它具有潜在的机器不能直接访问。
在我看来,我会说,动态解释语言如PHP和Ruby等...仍然是“正常”的汉语语言。 我要说的是的“脚本”语言的比方的bash(或ksh或tcsh或其他)或SQLPLUS。 这些语言通常被用来绾现有方案的系统上成一系列连贯和相关命令,如:
所以,我想说的差异(对我来说,反正)更多的是如何使用的语言。 如PHP,Perl和Ruby等语言可作为“脚本语言”,但我通常看到他们作为“正常的语言”(Perl的除外,这似乎是双向的。
我就先走一步,从重复的迁移问题我的回答
命名为“脚本语言”适用于非常特殊的角色:你写的命令发送到现有的软件应用程序的语言。 (像传统的电视或电影“剧本”)
例如,曾几何时,HTML网页和无聊。 他们总是静态的。 后来有一天,网景认为,“嘿,如果我们让浏览器读取并在页面的小命令的行为?” 而这样,JavaScript是形成。
一个简单的JavaScript命令是alert()
命令,该命令指示/命令,在读取该网页来显示警报的浏览器(软件应用)。
现在,确实alert()
相关的,以任何方式,对C ++或任何代码语言,浏览器实际使用 ,显示警报? 当然不是。 有人谁一个.html页面上写道:“警报()”没有的浏览器实际上是如何显示警报理解。 他只是写一个命令,浏览器会解释。
让我们来看看简单的JavaScript代码
<script>
var x = 4
alert(x)
</script>
这些是发送给浏览器,浏览器本身来解释指示。 编程语言,浏览器经过实际变量设置为4,并把在警报......这是完全无关的JavaScript。
我们称之为最后一个系列命令的“脚本”的(这就是为什么它被封闭在<script>
标签)。 仅仅通过“脚本”的定义,传统意义上的: 一系列的发送到演员指令和命令 。 大家都知道,一个电影剧本(电影剧本),例如,一个脚本。
电影剧本(剧本)是不是演员,或相机,或特殊效果。 剧本只是告诉他们做什么。
现在,什么是脚本语言 ,到底是什么?
有很多是像在工具箱中不同工具的编程语言; 一些语言是专门设计用来为脚本。
Javasript是一个明显的例子; 也有不属于脚本的领域内的Javascript应用很少。
的ActionScript(用于Flash动画语言)及其衍生物的脚本语言,因为它们只是发出Flash播放器/解释器命令。 当然,也有抽象,如面向对象编程,但这一切只是到最后的手段:发送命令给Flash播放器。
Python和Ruby通常也用作脚本语言。 例如,我曾经为所使用的Ruby脚本命令发送到沿,该线是一个浏览器公司“去这个网站,点击这个链接...”做一些基本的自动化测试。 我是不是一个“软件开发”通过任何手段,在那工作。 我只写发送命令到计算机将命令发送到浏览器的脚本。
由于其性质,脚本语言很少“编” - 也就是说,翻译成机器代码,并通过电脑直接读取。
即使从Python和Ruby创建GUI应用程序脚本发送到C语言编写的API ++或C.它告诉C程序做什么。
当然还有一个模糊的线。 你为什么就不能说是机器语言/ C的脚本语言,因为它们是计算机使用的基本主板/显卡/芯片接口脚本?
有一些我们可以得出澄清线:
当你可以写一个脚本语言,没有“编译”运行它,它更是一个直接的脚本类的事情。 例如,你不需要为了告诉演员们什么用它做一个剧本做任何事情。 它已经存在,使用原样。 出于这个原因,我们将排除编译语言被称为脚本语言,即使他们可以用来在某些场合脚本目的。
脚本语言暗示发送到一个复杂的软件应用程序的命令; 这就是全部的原因,我们写在首位的脚本 - 所以你不需要知道软件是如何工作将命令发送到它的复杂性。 所以,脚本语言往往是发送(相对)简单的命令,以复杂的软件应用 ......在这种情况下,机器语言和汇编代码不剪的语言。
我可以建议脚本语言一直是项很多人正在远离。 我会说这主要归结于编译型语言和动态语言时下。
我的意思是,你真的不能说什么像Python或Ruby是这个时代的“脚本”语言(你甚至有这样的东西的IronPython和JIT,你最喜欢的语言 ,差已经更加模糊)。
说实话,我个人不觉得PHP是一种脚本语言了。 我不希望人们喜欢从发言权的Java上自己的简历不同的分类PHP。
脚本语言往往一个脚本引擎,它是一个更大的应用程序的一部分中运行。 例如,运行JavaScript的浏览器的脚本引擎中。
脚本语言是解释每一个脚本运行时语言,它意味着有一个解释,最都很人类可读的,有用的脚本语言易于学习和使用。
每个编译语言可以做成一个脚本语言,反之亦然这一切都取决于实现翻译或编译器,作为一个例子C ++有一个解释,因此它可以被称为如果使用这样(不是一般很实用为C的脚本语言++是一个非常复杂的语言),最有用的脚本语言之一,目前是Python的...
因此,要回答你的问题的定义上采用了解释的运行快速,方便的脚本程序,以解决简单的任务或原型应用的最强大的使用可以使脚本语言是针对每使用,以延长的可能性编译的应用程序。
我喜欢的人不使用术语“脚本语言”,因为我认为它削弱了努力。 以如Perl语言,通常被称为“脚本语言”。
为什么我们甚至需要Java等语言进行编译和Ruby是不区分? 是什么在标签的价值?
欲了解更多关于这一点,看看http://xoa.petdance.com/Stop_saying_script 。
一个重要的区别是强类型 (相对于弱类型 )。 脚本语言通常是弱类型 ,从而可以写的小程序更迅速。 对于大型项目,这是一个缺点,因为它抑制编译器/解释器来自动发现某些缺陷,使之很难重构代码。
脚本语言进行编程,其中的程序通常是交付给最终用户以可读的文本形式和那里是可以直接明显执行该程序的程序语言。 (该计划可能在内部编译脚本,这不是与此有关,因为它是对用户不可见的。)
这是比较常见的脚本语言能够支持交互式会话,用户只需键入他们的计划,并立即执行。 这是因为这是从第一款的基本要求一个平凡扩张; 主要的额外需求是增加了一个机制,以找出当键入的语句是完整的,以便它可以被发送到执行引擎。
对于一个稍微不同的承担问题。 脚本语言是一种编程语言,而是一种编程语言,不一定是一个脚本语言。 脚本语言是用来控制或脚本的系统。 该系统可以是一个操作系统,其中的脚本语言将是bash。 该系统可以说是PHP脚本语言的Web服务器。 脚本语言的设计填补了一个特定的利基; 他们是领域特定语言。 互动系统已经解释脚本语言引起的概念,脚本语言解释; 然而,这是该系统的结果,而不是脚本语言本身。
脚本语言是配置或扩展现有程序的语言。
脚本语言是一种编程语言。
“脚本语言”的定义是非常模糊的。 我将它基于以下考虑:
脚本语言通常不具有用户可见的编译步骤。 通常情况下,用户可以只运行在一个简单的命令程序。
在脚本语言程序以源代码形式通常被传来传去。
脚本语言通常有上存在大量的系统运行时间和运行时间可以很容易地在大多数系统上进行安装。
脚本语言往往是跨平台的,而不是机器特定的。
脚本语言可以很容易地调用其他程序和界面与操作系统。
脚本语言通常是很容易嵌入到写得比较传统的编程语言更大的系统。
脚本语言通常设计成易于编程,并与执行速度更方面。 (如果你想快速执行,通常的建议是在类似于C的耗时的部分代码,要么嵌入语言转换为C或从语言中调用C位。)
一些我上面列出的特征实现,在这种情况下,我指的是更常见的实现也是如此。 已经有Ç翻译,用(据我所知)没有明显的编译步骤,但是这不是最C实现的事实。 你当然可以编译Perl程序的本地代码,但是这就是它不是如何正常使用。 其他的一些特性是社会性的。 一些上述标准有所重叠。 正如我所说的,这个定义是模糊的。
我想说的脚本语言是一个严重操纵它本身不定义实体。 举例来说,JavaScript的操纵DOM对象由浏览器提供,PHP运行的基于C语言的函数库的巨大,等等。 当然不是一个确切的定义,更多的方式去思考,如果它。
如果没有/ 在CPU上运行,这是一个脚本给我。 如果一个翻译需要下面的程序在CPU上运行,那么它是一个脚本,脚本语言。
没有理由让任何比这更复杂?
当然,在案件最多(99%),这是明确的语言是否是一种脚本语言。 但是,考虑到虚拟机可以模拟x86指令集,例如。 这是不是让86字节代码的脚本语言时,在虚拟机上运行? 如果有人是写一个编译器,它会变成Perl代码为本地可执行? 在这种情况下,我不知道叫什么语言本身了。 这将会是输出,将问题,而不是语言。
再说,我不知道像这样的已经做了什么,所以现在我还是舒服调用解释型语言脚本语言。
脚本是一个相对较小的项目。 系统是一个比较大的项目,或者比较大的程序的集合 。
一些编程语言设计与语言设计者和编程界认为是有用的编写比较小程序时的功能。 这些编程语言被称为脚本语言 ,如PHP。
同样,其他编程语言的设计与语言设计者和编程界认为是有用的编写较大的程序时的功能。 这些编程语言被称为系统语言 ,例如,Java。
现在,小型和大型程序可以用任何语言编写。 一个小型的Java程序是一个脚本。 例如,一个Java的“Hello World”程序是一个脚本,而不是一个系统。 大型程序或程序集合,用PHP写的是一个系统。 例如,脸谱,用PHP编写的,是一个系统,而不是一个脚本。
考虑一个单一的语言功能的“试金石”来决定的语言是否是最适合的脚本或系统编程是值得商榷的。 例如,脚本可被编译成字节代码或机器代码,或者它们可以通过直接的抽象语法树(AST)的解释来执行。
所以, 语言是一种脚本语言,如果它通常用于编写脚本 。 脚本语言可以用来写系统,但这样的应用有可能被认为是可疑的。