2023年7月29日发(作者:)
什么是脚本解释性语⾔?1 什么是脚本?脚本,原指是指表演戏剧、拍摄电影等所依据的底本⼜或者书稿的底本。脚本可以说是故事的发展⼤纲,⽤以确定故事的发展⽅向。脚本:1.写脚本的⼈,也叫故事构成。2.与剧本不同,脚本并没有明确地指出演出者(包括动画、游戏⼈物等)究竟该说什么话,只是将⼈物需要做的任务安排下去。2 什么是脚本语⾔?脚本(script)是使⽤⼀种特定的描述性语⾔,依据⼀定的格式编写的可执⾏⽂件,⼜称作宏或批处理⽂件。脚本通常可以由应⽤程序临时调⽤并执⾏。各类脚本⽬前被⼴泛地应⽤于⽹页设计中,因为脚本不仅可以减⼩⽹页的规模和提⾼⽹页浏览速度,⽽且可以丰富⽹页的表现,如动画、声⾳等。举个最常见的例⼦,当我们点击⽹页上的E-mail地址时能⾃动调⽤Outlook Express或Foxmail这类邮件软件,就是通过脚本功能来实现的。也正因为脚本的这些特点,往往被⼀些别有⽤⼼的⼈所利⽤。例如在脚本中加⼊⼀些破坏计算机系统的命令,这样当⽤户浏览⽹页时,⼀旦调⽤这类脚本,便会使⽤户的系统受到攻击。所以⽤户应根据对所访问⽹页的信任程度选择安全等级,特别是对于那些本⾝内容就⾮法的⽹页,更不要轻易允许使⽤脚本。通过“安全设置”对话框,选择“脚本”选项下的各种设置就可以轻松实现对脚本的禁⽤和启⽤。3 解释性语⾔ 和编译语⾔我们编写的源代码是⼈类语⾔,我们⾃⼰能够轻松理解;但是对于计算机硬件(CPU),源代码就是天书,根本⽆法执⾏,计算机只能识别某些特定的⼆进制指令,在程序真正运⾏之前必须将源代码转换成⼆进制指令。所谓的⼆进制指令,也就是机器码,是 CPU 能够识别的硬件层⾯的“代码”,简陋的硬件(⽐如古⽼的单⽚机)只能使⽤⼏⼗个指令,强⼤的硬件(PC 和智能⼿机)能使⽤成百上千个指令。然⽽,究竟在什么时候将源代码转换成⼆进制指令呢?不同的编程语⾔有不同的规定:有的编程语⾔要求必须提前将所有源代码⼀次性转换成⼆进制指令,也就是⽣成⼀个可执⾏程序(Windows 下的 .exe),⽐如C语⾔、C++、Golang、Pascal(Delphi)、汇编等,这种编程语⾔称为编译型语⾔,使⽤的转换⼯具称为编译器。有的编程语⾔可以⼀边执⾏⼀边转换,需要哪些源代码就转换哪些源代码,不会⽣成可执⾏程序,⽐如 Python、JavaScript、PHP、Shell、MATLAB 等,这种编程语⾔称为解释型语⾔,使⽤的转换⼯具称为解释器。简单理解,编译器就是⼀个“翻译⼯具”,类似于将中⽂翻译成英⽂、将英⽂翻译成俄⽂。但是,翻译源代码是⼀个复杂的过程,⼤致包括词法分析、语法分析、语义分析、性能优化、⽣成可执⾏⽂件等五个步骤,期间涉及到复杂的算法和硬件架构。解释器与此类似,有兴趣的读者请参考《编译原理》⼀书,本⽂不再赘述。Java 和 C# 是⼀种⽐较奇葩的存在,它们是半编译半解释型的语⾔,源代码需要先转换成⼀种中间⽂件(字节码⽂件),然后再将中间⽂件拿到虚拟机中执⾏。Java 引领了这种风潮,它的初衷是在跨平台的同时兼顾执⾏效率;C# 是后来的跟随者,但是 C# ⼀直⽌步于Windows 平台,在其它平台鲜有作为。编译型语⾔和解释型语⾔的执⾏流程图 1 编译型语⾔和解释型语⾔的执⾏流程那么,编译型语⾔和解释型语⾔各有什么特点呢?它们之间有什么区别?编译型语⾔对于编译型语⾔,开发完成以后需要将所有的源代码都转换成可执⾏程序,⽐如 Windows 下的.exe⽂件,可执⾏程序⾥⾯包含的就是机器码。只要我们拥有可执⾏程序,就可以随时运⾏,不⽤再重新编译了,也就是“⼀次编译,⽆限次运⾏”。在运⾏的时候,我们只需要编译⽣成的可执⾏程序,不再需要源代码和编译器了,所以说编译型语⾔可以脱离开发环境运⾏。编译型语⾔⼀般是不能跨平台的,也就是不能在不同的操作系统之间随意切换。编译型语⾔不能跨平台表现在两个⽅⾯:1. 可执⾏程序不能跨平台可执⾏程序不能跨平台很容易理解,因为不同操作系统对可执⾏⽂件的内部结构有着截然不同的要求,彼此之间也不能兼容。不能跨平台是天经地义,能跨平台反⽽才是奇葩。⽐如,不能将 Windows 下的可执⾏程序拿到 Linux 下使⽤,也不能将 Linux 下的可执⾏程序拿到 Mac OS 下使⽤(虽然它们都是类Unix 系统)。另外,相同操作系统的不同版本之间也不⼀定兼容,⽐如不能将 x64 程序(Windows 64 位程序)拿到 x86 平台(Windows 32 位平台)下运⾏。但是反之⼀般可⾏,因为 64 位 Windows 对 32 位程序作了很好的兼容性处理。2) 源代码不能跨平台不同平台⽀持的函数、类型、变量等都可能不同,基于某个平台编写的源代码⼀般不能拿到另⼀个平台下编译。我们以C语⾔为例来说明。【实例1】在C语⾔中要想让程序暂停可以使⽤“睡眠”函数,在 Windows 平台下该函数是 Sleep(),在 Linux 平台下该函数是 sleep(),⾸字母⼤⼩写不同。其次,Sleep() 的参数是毫秒,sleep() 的参数是秒,单位也不⼀样。以上两个原因导致使⽤暂停功能的C语⾔程序不能跨平台,除⾮在代码层⾯做出兼容性处理,⾮常⿇烦。【实例2】虽然不同平台的C语⾔都⽀持 long 类型,但是不同平台的 long 的长度却不同,例如,Windows 64 位平台下的 long 占⽤ 4个字节,Linux 64 位平台下的 long 占⽤ 8 个字节。我们在 Linux 64 位平台下编写代码时,将 0x2f1e4ad23 赋值给 long 类型的变量是完全没有问题的,但是这样的赋值在 Windows 平台下就会导致数值溢出,让程序产⽣错误的运⾏结果。让⼈苦恼的,这样的错误⼀般不容易察觉,因为编译器不会报错,我们也记不住不同类型的取值范围。解释型语⾔对于解释型语⾔,每次执⾏程序都需要⼀边转换⼀边执⾏,⽤到哪些源代码就将哪些源代码转换成机器码,⽤不到的不进⾏任何处理。每次执⾏程序时可能使⽤不同的功能,这个时候需要转换的源代码也不⼀样。因为每次执⾏程序都需要重新转换源代码,所以解释型语⾔的执⾏效率天⽣就低于编译型语⾔,甚⾄存在数量级的差距。计算机的⼀些底层功能,或者关键算法,⼀般都使⽤ C/C++ 实现,只有在应⽤层⾯(⽐如⽹站开发、批处理、⼩⼯具等)才会使⽤解释型语⾔。在运⾏解释型语⾔的时候,我们始终都需要源代码和解释器,所以说它⽆法脱离开发环境。当我们说“下载⼀个程序(软件)”时,不同类型的语⾔有不同的含义:对于编译型语⾔,我们下载到的是可执⾏⽂件,源代码被作者保留,所以编译型语⾔的程序⼀般是闭源的。对于解释型语⾔,我们下载到的是所有的源代码,因为作者不给源代码就没法运⾏,所以解释型语⾔的程序⼀般是开源的。相⽐于编译型语⾔,解释型语⾔⼏乎都能跨平台,“⼀次编写,到处运⾏”是真是存在的,⽽且⽐⽐皆是。那么,为什么解释型语⾔就能快平台呢?这⼀切都要归功于解释器!我们所说的跨平台,是指源代码跨平台,⽽不是解释器跨平台。解释器⽤来将源代码转换成机器码,它就是⼀个可执⾏程序,是绝对不能跨平台的。官⽅需要针对不同的平台开发不同的解释器,这些解释器必须要能够遵守同样的语法,识别同样的函数,完成同样的功能,只有这样,同样的代码在不同平台的执⾏结果才是相同的。你看,解释型语⾔之所以能够跨平台,是因为有了解释器这个中间层。在不同的平台下,解释器会将相同的源代码转换成不同的机器码,解释器帮助我们屏蔽了不同平台之间的差异。
发布者:admin,转转请注明出处:http://www.yc00.com/news/1690561222a369227.html
评论列表(0条)