唠唠脚本语言

脚本语言区别于系统语言

http://it.taocms.org/08/4736.htm

“后者则在附加的抽象机器层运行,屏蔽了对计算机系统的直接掌控特性,正因此也造成执行效率相对低下”

脚本语言更接近于人,屏蔽了对计算机系统的直接掌控,要解释效率低下。理论上基本都是基于图灵机或者其等价的模型,所以脚本语言能办到的事情,系统语言肯定能办到,相反,系统语言能办到的事情,脚本语言就算能勉强完成,其执行效率也可谓相差甚远。比如操作系统、编译系统之类的软件,基本上只会选择系统语言作为开发工具。

系统语言与脚本语言各有优势,扬长避短,求同存异才是我们应有的态度。游戏编程完美融合了文学、绘画和音乐等多种艺术形式,并且技术层面的应用也是恰到好处。从游戏编程中,至少可以学到一点:区分主应用程序(游戏引擎)与模块应用程序(游戏内容)。也就是说用系统语言开发变化不大的核心逻辑模块,而使用脚本语言开发经常变化的一些乱七八糟的模块,最终集成二者,或者说是将脚本嵌入应用主程序。

但是这并不是什么新奇玩意儿,因为我们可以使用动态链接库链接模块,随便安装个大中型软件,看见一堆的dll很正常吧。他们就是一些系统语言程序段,被编译成本地的机器码,在主程序链接时装载。其执行效率和主程序是一样的,并且能够达到上述模块化的目的,这不是我们梦寐以求的银弹吗?

那么,为什么硬在系统语言编程中嵌入脚本?

对于软件公司的开发,软件的执行效率远不如开发效率重要,免去了繁杂的特性自然可以更加轻松地编程,甚至让压根没学过编程的人都可以快速部署开发,随时增加人手,而不会扰乱整个项目。所以越多采用脚本语言,越能让财源滚滚来,何乐而不为?

许多应用软件的功能和需求会随着项目的进展时刻发生变化,这可以说是项目开发的常态(比如,我今天想要看所有的特定的文件系统下的inode,我明天可能就要看目前系统下的所有的inode了,后天我可能还有什么需求这都是没准儿的事情)。虽然开发前会认真商量,多番询问,对需求弄得清清楚楚。不过计划赶不上变化,实际软件开发过程中不得不经常修改已经完成模块中的许多东西。

如果直接硬编码,在主程序中写死这些东西,即时是微不足道的一个修改也不得不完全重新编译整个工程。这在项目非常小时还可以接受;若是源文件就有几十上百兆,那就麻烦了,如果机子性能受限,还可能死机,一起付之东流。即使采用链接库,仍然需要重新编译那个模块,然后重新链接加载,这也是很麻烦的。

减小与主程序的耦合度:人非圣贤,使用系统语言开发犯错是常事儿,往往这些错误很隐晦,如果某个模块经常被更改,犯错的概率更大。使用动态链接库,耦合度在运行时并没有显著降低,而是链接成一个整体;但是脚本语言在解释器或者虚拟机中,隔离了真实的机器,并且往往都有异常处理机制,能够比较容易地捕捉到脚本执行的异常情况,并做出相应的处理,是软件运行不会因为一些小Bug而即刻崩溃。

阻碍用户做逆向工程:系统语言直接编译链接成可执行文件在本机上运行,就一定能够得知其运行逻辑,没有什么软件不能破解的,但是脚本语言往往被编译成自己码,而且还经过特殊地编码,至少没有现成的反汇编工具可以使用

时间: 2024-10-27 05:03:08

唠唠脚本语言的相关文章

java脚本语言学习心得

第一篇技术博客,一定要认真! 第一篇技术博客,一定要认真! 第一篇技术博客,一定要认真! 好了,进入正题: 一 什么是脚本语言? 程序的运行方式有两种:编译运行和解释运行 1.1 前者的典型代表是java, 从文件角度看分为三步: write[编写]: a.java文件(拿个记事本就能写,扩展名是.java), compile[编译]: 编译(cmd命令是java a.java,ide集成了编译器运行之前自动编译)之后产生了a.class文件(是一堆二进制码,人看不懂,是给虚拟机看的) 运行[r

关于JS脚本语言的基础语法

JS脚本语言的基础语法:输出语法  alert("警告!");  confirm("确定吗?");   prompt("请输入密码");为弱类型语言: 开始时要嵌入JS代码:<script type="text/javascript"></script>: 关于写程序是需注意的基本语法:1.所有的字符全都是英文半角的:2.大部分情况下每条语句结束后要加分号:3.每一块代码结束后加换行:4.程序前呼后应:

shell、cmd、dos和脚本语言区别和联系

问题一:DOS与windows中cmd区别   在windows系统中,"开始-运行-cmd"可以打开"cmd.exe",进行命令行操作. 操作系统可以分成核心(kernel)和Shell(外壳)两部分,其中,Shell是操作系统与外部的主要接口,位于操作系统的外层,为用户提供与操作系统核心沟通的途径.在windows系统中见到的桌面即explorer.exe(资源管理器)是图形shell,而cmd就是命令行shell.这算是cmd与dos的最大区别,一个只是接口.

自动化运维脚本语言之expect实践学习(1)

一.expect简介 expect是一种简单的基于Tcl的脚本语言工具,一个可实现自动交互功能的软件套件,其功能就是进行自动化的人机交互:也能够按照脚本内容里面设定的方式与交互式程序进行"会话"的程序,根据脚本内容expect可以知道程序会提示或反馈什么内容以及什么是正确的应答:它是一种可以提供"分支和嵌套结构"来引导程序流程的解释型脚本语言. shell功能虽然强大,但是不能实现有交互功能的多机器之间的操作例如ssh和ftp,而expect可以帮助我们来实现. 主

JS的脚本语言

js的脚本语言全程javascript在网页里面使用的脚本语言:分类:1.嵌入网页里面2.在外部脚本标签可以写在网页的任何地方,但一般都写在网页的底部:<script type="text/javascript"></script>代表这是一个脚本:二.注释语法样式表的注释:单行注释用//表示:多行注释/**/可以注释多行文字: <!---->是在网页里面的注释:三.数据类型的分类:1.整型(存放整数的数据)用int来表示整型:2.flioat(单精

JS(脚本语言)后半部分、语句:①if...else、②switch:break

JS(脚本语言) 七.运算法表达式 1.数字运算符:+   -  *  /  %  强制类语言:整数/整数=整数(小数点舍) 2.逻辑运算符:&&并   :||或   :! 3.其它:①字符串的拼接“+”  ②三元运算符:a==b?"A等于B":"A不等于B"; 4.比较运算符:① ==  等于 ②!=   不等于③  >=  大于等于 ④<=  小于等于 ⑤>  大于 < 小于 语句 一.顺序: 如:var a=10; va

JDK1.7新特性(3):java语言动态性之脚本语言API

简要描述:其实在jdk1.6中就引入了支持脚本语言的API.这使得java能够很轻松的调用其他脚本语言.具体API的使用参考下面的代码: 1 package com.rampage.jdk7.chapter2; 2 3 import java.io.FileWriter; 4 import java.io.IOException; 5 6 import javax.script.Bindings; 7 import javax.script.Compilable; 8 import javax.

Java中使用Lua脚本语言(转)

Lua是一个实用的脚本语言,相对于Python来说,比较小巧,但它功能并不逊色,特别是在游戏开发中非常实用(WoW采用的就是Lua作为脚本的).Lua在C\C++的实现我就不多说了,网上随便一搜,到处都是这方面的介绍,我想说的是如何在Java下使用Lua以提高编程效率.增强你的程序可扩展性. 首先,要在Java上使用Lua脚本,必须有关于Lua脚本解释器以及Java程序可以访问这些脚本的相关API,即相关类库.我使用的是一个叫做LuaJava的开源项目,可以在: http://www.keple

动态网页脚本语言

在ASP .PHP.JSP环境下,HTML代码主要负责描述信息的显示样式,而程序代码则用来描述处理逻辑.普通的 HTML页面只依赖于Web服务器,而ASP .PHP.JSP页面需要附加的语言引擎分析和执行程序代码.程序代码的执行结果被重新嵌入到HTML代码中,然后一起发送给浏览器.ASP .PHP.JSP三者都是面向Web服务器的技术,客户端浏览器不需要任何附加的软件支持. 二.技术特点: (一)ASP的技术特点: 1. 使用VBScript .JScript等简单易懂的脚本语言,结合HTML代