脚本语言不需要编译,那么经编译器和解释器的区别后怎么能使计算机识别呢?

我想自己用C/C++做一个脚本语言解释器,但是不知道需要什么知识?
我想自己用C/C++做一个脚本语言解释器,但是不知道需要什么知识?是一个解释型脚本语言解析器,但是我发现关于编译原理的书籍都是在讲编译型语言的,不知解释型语言会不会有什么特别不同的地方。我会C/C++和数据结构,在读大学(坑爹学校)的时候没有编译原理的课程,后来有看一些关于编译原理的书籍,但是还是觉得缺少了什么东西。希望各位可以给我指点一下如何入门~修正问题:解析器 -& 解释器。
按时间排序
写脚本无非是想利用自己已经写好的程序资源,来运行我们希望的流程。如果宏代码只是为了实现某种目的,并不需要自己实现复杂的解释器,因为有编译器可以利用,将你的脚本先翻译成源码,然后动态调用编译器把他编译成执行文件或库执行,是一个好办法。。。
当然还有就是自行实现字节码,将自己的脚本进行语法分析,然后转换字节码,由自己写的一个虚拟机来执行,这是一个不错的办法,在不利用编译器的情况,运行速度也有保证,但缺点就是难度很大。。
我觉得你应该试着用第一种方法,这个难度不大,很多程序也是这么实现脚本功能的,脚本写的几乎就是源码,毕竟你不能指望脚本解决任何问题,他是解决你希望的一类问题。。。。
just for fun的话,先从最简单的做起,等你支持了几个常见语法后,再回去看书,会有趣很多。
从表达式 eval 做起。先找一个算法把前端实现出来,用递归下降或调度场都好。然后遍历 AST,计算表达式的值,并且支持代入变量。然后有两条一般的路径:1. 实现控制流,做成脚本语言;2. 实现同像,做成 Lisp 方言;其实解释器(和不带静态分析的编译器)没什么门槛,编程刚入门的小孩就能做了。只要你硬着头皮往下写,会查资料就好。
若是不拘泥于正统的解释器,只为学习之用,也是可以用c++模板元编程实现一个Lisp解释器的,比如上面我写的这个基本的closure、lambda、call/cc等等都支持,而且所有运算都是在编译期完成,raw speed,当然,缺点就是没手写parser的灵活,毕竟受限于模板的语法,不过括号语言也没多少语法嘛原理其实和正经的解释器实现差不多,都是解释AST,不过既然是基于模板,所以就需要把语句表达成C++中的类型,然后eval就转化成类型运算,核心代码在 实现closure的话,就按SICP的环境模型,当然模板并无现成数据结构可用,环境链的搜索与插入需要点tricks实现call/cc有点难度,可以将每种continuation表达成不同的类型,eval时做CPS变换即可可以看看语法模样,比如下面定义一个Y Combinator:λf.( λx.(f λy. ((x x) y)) λx.(f λy.((x x) y)) )比如下面等价于((λk. (k λk.2)) (call/cc λk.k))
你可以试试用逆波兰式裸奔:1 2 add # 1+2的结果放入栈顶
3 4 mul # 3x4的结果放入栈顶
# 栈顶两个值相除,即3 / 12,结果放入栈顶
# 打印栈顶的值
比较容易和runtime的逻辑直接对应。详情参见PostScript,超爽的。
有一个很小的BASIC解释器——ubasic,你可以了解一下,很容易懂的。
推荐一本书,一个日本人写的一本书,《两周自制脚本语言》,比较有参考价值
题主是个好程序员,实现脚本解释器其实不难,基本就是按照 @的思路,一步一步细化,每一步难度都不大,不太需要什么理论指导,有比较强的编程能力就行。
我这有一个自己实现的解释器(工作之余爱好所作),语法吸收了js、java、c++各自的特点,已有比较完备的语法支持,添加了不少新的语法特性(如:循环表达式、不限位整数、引用重置、幂运算符,等等)。下面为实现的粗略过程:
1、表达式的解析和计算
a、定义要支持的表达式特性和数据类型。搞清楚双目运算符、单目运算符、括
号、优先级,以及运算符和操作数等的语法意义,可以先考虑最简单的+-*/和
括号。要点:操作数可以是子表达式,关于优先级,普通双目 & 单目 & 成员
访问符,普通双目的优先级可以任意设定。
b、错误处理机制(错误类型需逐步添加,实现的过程中会遇到各种各样的错误
c、定义标识符、常数、常量字符串等的书写规则。词法分析,获取最小语义单
词序列。实现要点:标识符的识别,注释处理,空白字符串处理,常数识别
d、根据最小语义序列建立表达式计算树。实现要点:递归分析或循环分析都可
e、计算表达式计算树。实现要点:主要为递归计算。
2、多语句脚本的解析和执行
a、定义要支持的语句。必须的如:if/else/else if,while/for/break/continue,函
数。后期可引入结构体/类,成员函数等。
b、设计变量的定义语法和内存模式,执行堆栈设计,函数的实现方式。
c、分析语句序列,存储到线性表。
d、设计执行入口方式,找到入口点,解释执行。每条普通语句就是一个表达
式,调用步骤1的库即可。实现要点:if/else/else if,while,for等就用原生
语言的同等语法实现。
当然每个过程都需要有好的软件架构模块设计,各个过程需要经常反复回溯细化改进。
我记得linux下有lex 和yacc可以用,自己百度下。
ChaiScript
是一个用 c++ 开发的类 c++ 语法的脚本。特点是 header only, thread safe, open source。它的源代码回答了题主所有的问题。去读吧。
写 Lisp 解释器的话倒是很容易你需要下面几样东西:Read - 包括 Reader,Tokenizer, Parser,etc.Eval - 主要就是实现 EvalPrint 和 Loop 太 trivial 了就不说了然后你就有了一个 Lisp 的 REPL把 Reader 的输入从 stdin 改成从文件输入你就有一个解释器了
题主原本的问题:我想自己用C/C++做一个脚本语言解析器,但是不知道需要什么知识?首先,请问题主想写的是“解析器”(parser)还是“解释器”(interpreter)?在编程语言实现的上下文里,“解析”其实通常是指“语法分析”;“解释”才是跟执行代码相关的名词。这俩名词经常被各种混用,是不对的。其次,编译器跟解释器是怎样的关系,我想放这个传送门: 里面我举了个简单的例子讲一个“一般的编译器”的工作流程是如何可以一点点转变为一个“解释器”。可以看到,解释器里许多概念其实还是跟编译器共同的,只是有些事情可以省略不做,或者本来应该在编译器里做的分析留到了运行时由解释器来做而已。具体请跳传送门看。再次,写解释器需要怎样的知识。前面有不少靠谱的答案,题主可以参考它们先练手试试看。像是说写个简易的LISP实现/Scheme实现,很容易上手。这条路子读读和作为辅助都挺好。如果想实现个类似C的语法的命令式语言的解释器,那可以从最基础的地方出发慢慢练习。下面是一个假想的顺序:简单的四则混合运算计算器,支持加减乘除、运算符优先级(乘除优先于加减、括号。例如可以运算 "12+3*5-6" 这样的表达式,不用考虑空格之类的问题。此时需要的知识非常简单:知道如何使用数据结构的“栈”就可以了。用两个栈就可以求出这样表达式的值,一个用来放操作数,一个用来放运算符;这种算法叫做。“词法分析”“语法分析”之类的概念都可以先不用管——尽管这个概念中实际上已经做了词法和语法分析,但还很简单,不用特别学什么。在上述基础上扩展,更好的支持“词法分析”的概念,例如允许空格的出现继续扩展,添加变量、赋值的支持。此时可以解释执行像是:a = 1 + 2;
b = a + 3 * 4;
的代码。此时就需要添加两种支持:更正式的语法分析:要能切分出赋值语句,然后里面的混合运算还是跟之前一样处理变量表:要有一个记录 (变量名 -& 值) 的表继续扩展,添加控制流语句,例如 if-else 语句。事情从这里开始就好玩了:之前的步骤里,所有代码都会按顺序被执行;而一旦添加了控制流语句的支持,输入的程序里就可能会有一些被条件执行,这要如何处理就有许多发挥空间了,例如说要不要引入抽象语法树(AST)。续集扩展,支持循环语句。续集扩展,支持函数的声明与调用。做完上面步骤之后,一个初具雏形的解释器就出来了。正巧,近来
做的演讲也是以类似的思路演化出一门语言的解释器实现。题主感兴趣也可以参考他的经验。他做的qlang解释器的实现思路我在另一个回答里也提到了一点,有兴趣请读读看:
将代码转换为抽象语法树,然后递归解释执行即可,闭包的实现有些难度。
题主可以看看这篇文章:作者用 C 语言写了一个类似 BASIC 语言的解释器,讲得很详细,很适合学习。我也参考这篇文章,自己写了一个解释器:这是我写的,修改了一些部分。这两个都不是编译型的。
既然是脚本语言解析器,为何不从Lisp入手?Peter Norvig有两篇文章,介绍了Lisp的简单实现,简单粗暴,同编译原理基础一起学习,对题主想必更有益处:最重要的,题主想要用C++来做一个脚本语言解释器,Norvig大神有一个Java版本的Lisp实现,思路同其两篇文章中所写完全一致,代码极易理解,转化为C++代码也不会很复杂:最后,题主也可以结合Python源代码阅读陈儒先生的,看一下现实中的脚本语言是如何实现的,其中涉及到编程语言的方方面面,想必题主定能受益匪浅。
如果只是为了练习编译原理,其实没必要按书上的来,就算用C++也麻烦了,如果你会其他语言比如java,python,强烈建议不要用C++,会有很多不必要的麻烦词法分析其实没必要一定理解自动机什么的,现在各种语言都有自己的正则库,一个表达式搞定:#用于解析token的正则表达式
_TOKEN_RE = re.compile(
r"""(\d+\.?\d*[eE][+-]?\w+|""" +
r"""\.\d+[eE][+-]?\w+|""" +
r"""\d+\.\w*|""" +
r"""\.\d\w*)|""" +
r"""(!=|==|&&=|&&|&=|&&=|&&|&=|[-%^&*+|/]=|&&|\|\||\+\+|--|\W)|""" +
r"""(\d\w*)|""" +
#词,关键字或标识符
r"""([a-zA-Z_]\w*)""")
这个来自于我的一个编译器源码,当然你可以根据自己的语法设计来改动,大体上都长这个样子,解出来后做二次处理,比如校验整数和浮点数的具体格式是否合法等语法分析一般可以自顶向下递归分析,个人觉得自己手写可控性更强,当然所分析的语法本身要比较适合,像C语言的类型定义这种就比较麻烦了
看看这个本书也不错,非常简单。
这个答案旨在把一些编译器方面的概念串起来讲成一个过程,请高手校正。----正文----先有一个状态机的概念:你可以想象有一个无穷多个抽屉的柜子,柜子里面可以放东西。一个程序基本上就是在这个柜子、这些抽屉里面搞小动作,拉开抽屉开一下,放点东西进去,又去搞下一个。那么,要如何对这个状态机机型操作呢?常见的方式有这两种:1. 自己发明一套指令集,来描述这个状态机可以理解的基本操作2. 通过抽象语法树(Abstract Syntax Tree, 简称 AST)以及一个存储“符号-状态”的字典来操作如果走路线1,你可以先参考一下其他真实存在的CPU指令或者其他虚拟机指令,例如 Lua,.NET, Python, Java 什么的,设计出一个你自己想要的指令集。这应该是比较难的路线,然而做得到位的话威力比较大。所以,如果你知道怎么设计指令集,那么我这个回答对你来说基本上没什么实际价值——后面我想说的,几乎可以假设你懂了吧?如果走路线2那就简单得多了,基本上跟写一个代数式求值器差不多,加减乘除就是代数式AST中的非叶子节点(如果你没做过代数式求值器,那么建议你先试试这个入门练习再来求答案)。那么在你自制的脚本语言里面,所有东西经过语法分析后,都会成为 AST 中的一个或者多个节点;所以只要你的解释器能够识别 AST 中的每一个节点所要求的动作,在遍历 AST 的时候根据这些动作来操作“符号-状态”字典,就相当于解释执行了代码。所以你就要问了, AST 是什么鬼?我的自制语言的代码如何变成一个 AST?图片由 Google 搜索提供:版权归该作者所有,图侵删。以这个图表示的语言为例,你的解释器得先识别出 “while" "y" "Block" 这些东西(也就是 Lexer 的工作),再把这些 Lexical Token 组织成一个 AST ( Parser 的工作)。为了简单起见,你可以把 Lexer 和 Parser 还有 AST Walker 分开三个部分来写。譬如 Lexer 打开文件并解析之后,输出的是一个 Lexical Token 的链表。然后 Parser 的输入就是这个链表,然后输出的就是 AST。最后,Interpreter 也就是你的解释器接收 AST 输入,就执行了,没有输出。
已有帐号?
无法登录?
社交帐号登录程序开发(4)
Linux(7)
& & 计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能执行高级语言编写的程序。翻译的方式有两种:一个是编译;一个是解释。两种方式只是翻译的时间不同。
编译性语言
编译型语言写的程序在执行之前,需要经过一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果(exe文件)就行了。因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。
解释性语言
  解释则不同,解释性语言的程序不需要编译,省了道工序,解释性语言在运行程序的时候才翻译,比如解释性java语言,专门有一个解释器能够直接执行java程序,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比编译性语言要低。
  脚本语言也是解释性语言。脚本语言一般都有相应的脚本引擎来解释执行。它们一般需要解释器才能运行。所以只要系统上有相应语言的解释程序就可以做到跨平台。例如vbscript,javascript,installshield&script等等,它不象c\c++等可以编译成二进制代码,以可执行文件的形式存在。
& & Java语言也是解释性语言。java很特殊,java程序也需要编译,但是没有直接编译称为机器语言,而是编译称为字节码,然后用解释方式执行字节码。Java既可以被编译,也可以被解释。通过编译器,可以把Java程序翻译成一种中间代码——称为字节码——可以被Java解释器解释的独立于平台的代码。通过解释器,每条Java字节指令被分析,然后在计算机上运行。只需编译一次,程序运行时解释执行。
Java字节码使“写一次,到处运行”成为可能。可以在任何有Java编译器的平台上把Java程序编译成字节码。这个字节码可以运行在任何Java&VM上。例如,同一个Java程序可以运行在WindowsNT、Solaris和Macintosh上。
编译器与解释器的区别
&&&编译型与解释型,两者各有利弊。前者由于程序执行速度快,同等条件下对系统要求较低,因此像开发操作系统、大型应用程序、数据库系统等时都采用它,像C/C++、Pascal/Object&Pascal(Delphi)等都是编译语言,而一些网页脚本、服务器脚本及辅助开发接口这样的对速度要求不高、对不同系统平台间的兼容性有一定要求的程序则通常使用解释性语言,如Java、JavaScript、VBScript、Perl、Python、Ruby、MATLAB&等等。
&&&&编译性语言例如:用c语言开发了程序后,需要通过编译器把程序编译成机器语言(即计算机识别的二进制文件,因为不同的操作系统计算机识别的二进制文件是不同的),所以c语言程序进行移植后,要重新编译。(如windows编译成ext文件,linux编译成erp文件)。
&&&&解释性语言,例如java语言,java程序首先通过编译器编译成class文件,如果在windows平台上运行,则通过windows平台上的java(VM)进行解释。如果运行在linux平台上,则通过linux平台上的java虚拟机进行解释执行。所以说能跨平台,前提是平台上必须要有相匹配的java虚拟机。如果没有java虚拟机,则不能进行跨平台。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:314886次
积分:3966
积分:3966
排名:第5498名
原创:85篇
转载:49篇
评论:31条
(2)(2)(4)(1)(1)(3)(5)(1)(2)(2)(1)(2)(1)(1)(1)(2)(1)(2)(7)(1)(1)(4)(1)(1)(1)(2)(1)(4)(2)(3)(5)(2)(3)(5)(5)(1)(6)(6)(4)(2)(17)(11)(4)脚本语言是什么意思?_百度知道
脚本语言是什么意思?
一、定义脚本语言(Script languages,scripting programming languages,scripting languages)是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语言。此命名起源于一个脚本“screenplay”,每次运行都会使对话框逐字重复。早期的脚本语言经常被称为批处理语言或工作控制语言。一个脚本通常是解释运行而非编译。虽然许多脚本语言都超越了计算机简单任务自动化的领域,成熟到可以编写精巧的程序,但仍然还是被称为脚本。几乎所有计算机系统的各个层次都有一种脚本语言。包括操作系统层,如计算机游戏,网络应用程序,文字处理文档,网络软件等。在许多方面,高级编程语言和脚本语言之间互相交叉,二者之间没有明确的界限。一个脚本可以使得本来要用键盘进行的相互式操作自动化。一个Shell脚本主要由原本需要在命令行输入的命令组成,或在一个文本编辑器中,用户可以使用脚本来把一些常用的操作组合成一组序列。主要用来书写这种脚本的语言叫做脚本语言。很多脚本语言实际上已经超过简单的用户命令序列的指令,还可以编写更复杂的程序。二、简介脚本语言是为了缩短传统的编写-编译-链接-运行(edit-compile-link-run)过程而创建的计算机编程语言。它的命名起源于一个脚本“screenplay”,每次运行都会使对话框逐字重复。早期的脚本语言经常被称为批量处理语言或工作控制语言。一个脚本通常是解释执行而非编译。脚本语言通常都有简单、易学、易用的特性,目的就是希望能让程序员快速完成程序的编写工作。而宏语言则可视为脚本语言的分支,两者也有实质上的相同之处。三、特点1、脚本语言(JavaScript,VBscript等)介于HTML和C,C++,Java,C#等编程语言之间。 HTML通常用于格式化和链接文本。而编程语言通常用于向机器发出一系列复杂的指令。2、脚本语言与编程语言也有很多相似地方,其函数与编程语言比较相像一些,其也涉及到变量。与编程语言之间最大的区别是编程语言的语法和规则更为严格和复杂一些.3、与程序代码的关系:脚本也是一种语言,其同样由程序代码组成。4、脚本语言是一种解释性的语言,例如Python、vbscript,javascript,installshield script,ActionScript等等,它不象c\c++等可以编译成二进制代码,以可执行文件的形式存在,脚本语言不需要编译,可以直接用,由解释器来负责解释。5、脚本语言一般都是以文本形式存在,类似于一种命令。举个例子说:如果建立了一个程序,叫aaa.exe,可以打开.aa为扩展名的文件,为.aa文件的编写指定了一套规则(语法),当别人编写了.aa文件后,自己的程序用这种规则来理解编写人的意图,并作出回应,那么,这一套规则就是脚本语言6、相对于编译型计算机编程语言:用脚本语言开发的程序在执行时,由其所对应的解释器(或称虚拟机)解释执行。系统程序设计语言是被预先编译成机器语言而执行的。脚本语言的主要特征是:程序代码即是脚本程序,亦是最终可执行文件。脚本语言可分为独立型和嵌入型,独立型脚本语言在其执行时完全依赖于解释器,而嵌入型脚本语言通常在编程语言中(如C,C++,VB,Java等)被嵌入使用7、和系统程序设计语言相比:不同是脚本语言是被解释而系统程序设计语言是被编译。被解释的语言由于没有编译时间而提供快速的转换,通过允许用户运行时编写应用程序,而不需要耗时的编译/打包过程。解释器使应用程序更加灵活,脚本语言的代码能够被实时生成和执行。脚本语言通常都有简单、易学、易用的特性,目的就是希望能让程序设计师快速完成程序的编写工作。
其他类似问题
为您推荐:
提问者采纳
实际上脚本就是程序、脚本语法比较简单、脚本多为解释执行、脚本与应用程序密切相关,比较容易掌握;
2、脚本一般不具备通用性,应用程序的宏和创作系统的批处理语言也可以归入脚本之类脚本英文为Script,所以包括相对应用程序自身的功能。脚本同我们平时使用的VB。应用程序包括浏览器(JavaScript、多媒体创作工具、VBScript):
1、C语言的区别主要是,所能处理的问题范围有限。
4,一般都是有应用程序提供的编程语言
您可能关注的推广
脚本语言的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁脚本语言不需要编译,那么经解释器后怎么能使计算机识别呢?_百度知道
脚本语言不需要编译,那么经解释器后怎么能使计算机识别呢?
最低级的语言脚本就是可执行的小程序,这种可以直接解释执行的,而需要计算机识别的是机器语言,也就是二进制码
其他类似问题
为您推荐:
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁什么是编译性语言、解释性语言和脚本语言   计算机不能直接理解高级语言,只能直接理解机器语言,所以必须要把高级语言翻译成机器语言,计算机才能值型高级语言编写的程序。  翻译的方式有两种,一个是编译,一个是解释。两种方式只是翻译的时间不同。编译型语言写的程序执行之前,需要一个专门的编译过程,把程序编译成为机器语言的文件,比如exe文件,以后要运行的话就不用重新翻译了,直接使用编译的结果就行了(exe文件),因为翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高。  解释则不同,解释性语言的程序不需要编译,省了道工序,解释性语言在运行程序的时候才翻译,比如解释性basic语言,专门有一个解释器能够直接执行basic程序,每个语句都是执行的时候才翻译。这样解释性语言每执行一次就要翻译一次,效率比较低。  什么是脚本语言? 1.脚本语言(JavaScript,VBscript等)介于HTML和C,C++,Java,C#等编程语言之间。 HTML通常用于格式化和链结文本。而编程语言通常用于向机器发出一系列复杂的指令。 2.脚本语言与编程语言也有很多相似地方,其函数与编程语言比较相象一些,其也涉及到变量。与编程语言之间最大的区别是编程语言的语法和规则更为严格和复杂一些. 3.与程序代码的关系:脚本也是一种语言,其同样由程序代码组成。 注:脚本语言一般都有相应的脚本引擎来解释执行。 他们一般需要解释器才能运行。JAVASCRIPT,ASP,PHP,PERL都是脚本语言。C/C++编译、链接后,可形成独立执行的exe文件。 4.脚本语言是一种解释性的语言,例如vbscript,javascript,installshield script等等,它不象c/c++等可以编译成二进制代码,以可执行文件的形式存在. 脚本语言不需要编译,可以直接用,由解释器来负责解释。 5.脚本语言一般都是以文本形式存在,类似于一种命令. 举个例子说,如果你建立了一个程序,叫aaa.exe,可以打开.aa为扩展名的文件. 你为.aa文件的编写指定了一套规则(语法),当别人编写了.aa文件后,你的程序用这种规则来理解编写人的意图,并作出回应.那么,这一套规则就是脚本语言. JAVA语言  java很特殊,java程序也需要编译,但是没有直接编译称为机器语言,而是编译称为字节码,然后用解释方式执行字节码。Java既可以被编译,也可以被解释。通过编译器,可以把Java程序翻译成一种中间代码 - 称为字节码 - 可以被Java解释器解释的独立于平台的代码。通过解释器,每条Java字节指令被分析,然后在计算机上运行。只需编译一次,程序运行时解释执行。下图说明了它是如何工作的: 可以把Java字节码看作运行在Java虚拟机(Java VM)上的机器代码指令。每中Java解释器,不管是Java开发工具还是可以运行Java小应用程序的Web浏览器,都是一种Java VM的实例。JavaVM也可以由硬件实现。  Java字节码使&写一次,到处运行&成为可能。可以在任何有Java编译器的平台上把Java程序编译成字节码。这个字节码可以运行在任何Java VM上。例如,同一个Java程序可以运行在WindowsNT、Solaris和Macintosh上。 Java平台  平台是程序运行的硬件或软件环境。Java平台与大多数其它平台不同之处在于它是运行于其它基于硬件平台的纯软件平台。大多数其它平台是硬件和操作系统的结合。 Java平台由两部分组成: Java虚拟机(Java VM) Java应用程序界面(Java API) 我们已经介绍了Java VM,它是Java平台的基础,可以移植到各种基于硬件的平台上。Java API是软件组件的集合,它们提供了很多有用的功能,如图形用户界面(GUI)。Java API被分组为相关组件的库(包)。  下图描述了一个运行在Java平台上的Java程序,如应用程序(application)或小应用程序(applet)。如图中显示的,JavaAPI和VM把Java程序从硬件依赖中分离出来。 作为一种独立于平台的环境,Java比本地代码慢一些。然而,聪明的编译器、很好地调制过的解释器和即时字节码编译器可以在不牺牲可移植性的条件下使Java的表现接近本地代码。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:146934次
积分:2921
积分:2921
排名:第8447名
原创:143篇
转载:24篇
评论:34条
(1)(3)(4)(9)(16)(2)(6)(46)(54)(26)

我要回帖

更多关于 脚本解释器 的文章

 

随机推荐