族谱网 头条 人物百科

解释器

2020-10-16
出处:族谱网
作者:阿族小谱
浏览:465
转发:0
评论:0
历史第一个解释器是由史帝芬·罗素(SteveRussell)写成的LISP的解释器,基于IBM704的机器代码。解释器与编译器解释器运行程序的方法有:直接运行高级编程语言(如Shell内置的解释器)转换高级编程语言码到一些有效率的字节码(Bytecode),并运行这些字节码以解释器包含的编译器对高级语言编译,并指示处理器运行编译后的程序(例如:JIT)Perl,Python,MATLAB,与Ruby是属于第二种方法,而UCSDPascal则是属于第三种方式。在翻译的过程中,这组高级语言所写成的程序仍然维持在源代码的格式(或某种中继语言的格式),而程序本身所指涉的动作或行为则由解释器来表现。使用解释器来运行程序会比直接运行编译过的机器码来得慢,但是相对的这个解释的行为会比编译再运行来得快。这在程序开发的雏型化阶段和只是撰写试验性的代码时尤其来得重要,因为这个“编辑-解释-除错”的循环通常比“...

历史

第一个解释器是由史帝芬·罗素(Steve Russell)写成的LISP的解释器,基于IBM 704的机器代码。

解释器与编译器

解释器运行程序的方法有:

直接运行高级编程语言(如Shell内置的解释器)

转换高级编程语言码到一些有效率的字节码(Bytecode),并运行这些字节码

以解释器包含的编译器对高级语言编译,并指示处理器运行编译后的程序(例如:JIT)

Perl,Python,MATLAB,与Ruby是属于第二种方法,而UCSD Pascal则是属于第三种方式。在翻译的过程中,这组高级语言所写成的程序仍然维持在源代码的格式(或某种中继语言的格式),而程序本身所指涉的动作或行为则由解释器来表现。

使用解释器来运行程序会比直接运行编译过的机器码来得慢,但是相对的这个解释的行为会比编译再运行来得快。这在程序开发的雏型化阶段和只是撰写试验性的代码时尤其来得重要,因为这个“编辑-解释-除错”的循环通常比“编辑-编译-运行-除错”的循环来得省时许多。

在解释器上运行程序比直接运行编译过的代码来得慢,是因为解释器每次都必须去分析并翻译它所运行到的程序行,而编译过的程序就只是直接运行。这个在运行时的分析被称为"解释式的成本"。在解释器中,变量的访问也是比较慢的,因为每次要访问变量的时候它都必须找出该变量实际存储的位置,而不像编译过的程序在编译的时候就决定好了变量的位置了。

在使用解释器来达到较快的开发速度和使用编译器来达到较快的运行进度之间是有许多妥协的。有些系统(例如有一些LISP)允许解释和编译的代码互相调用并共享变量。这意味着一旦一个子程序在解释器中被测试并除错过之后,它就可以被编译以获得较快的运行进度。许多解释器并不像其名称所说的那样运行原始代码,反而是把原始代码转换成更压缩的内部格式。举例来说,有些BASIC的解释器会把保留字取代成可以用来在转移表中找出相对应指令的单一字节符号。解释器也可以使用如同编译器一般的文字分析器和语法分析器然后再翻译产生出来的抽象语法树。

可携性佳,解释式程序相较于编译式程序有较佳的可携性,可以容易的在不同软硬件平台上运行。而编译式程序经过编译后的程序则只限定于运行在开发环境平台。

字节码解释器

考量程序运行之前所需要分析的时间,存在了一个介于解释与编译之间的可能性。例如,用Emacs Lisp所撰写的源代码会被编译成一种高度压缩且最优化的另一种Lisp源代码格式,这就是一种字节码(bytecode),而它并不是机器码(因此不会被绑死在特定的硬件上)。这个"编译过的"码之后会被字节码直译器(使用C写成的)翻译。在这种情况下,这个"编译过的"码可以被说成是虚拟机(不是真的硬件,而是一种字节码解释器)的机器码。这个方式被用在Open Firmware系统所使用的Forth代码中:原始程序将会被编译成"F code"(一种字节码),然后被一个特定平台的虚拟机解释和运行。

即时编译

即时编译(Just-in-time compilation)是指一种在运行时期把字节码编译成原生机器码的技术;这项技术是被用来改善虚拟机的性能的。该技术在近几年来才开始获得重视,而它后来模糊了解释、字节码解释及编译的差异性。在.NET和Java的平台上都有用到JIT的技术。大约在1980年代Smalltalk语言出现的时候JIT的技术就存在了。

一个简单的解释器的例子

在文学编程文章中有一个简单的程序和一个解释器。

打孔卡读卡器

“interpreter”这个字眼有时候是指一些可以读取打孔卡的机器。这些机器可以读取卡片上的孔并以人们读得懂的格式打印出来。IBM 550数字读卡器和IBM 557字母读卡器是主要的两个例子。

有使用解释器的计算机程序语言

AWK

BASIC

JavaScript

LISP

Shell

Perl

Prolog

Ruby

Python

PHP Hypertext Preprocessor

参见

partial evaluation ( 英语 : partial evaluation )

解释语言

编译语言

dynamic compilation ( 英语 : dynamic compilation ) including the section on incremental compilation.

Threaded code ( 英语 : Threaded code ) , a compact form of code that depends on a simple interpreter.

Metacircular Interpreter ( 英语 : Metacircular Interpreter )

. find an interpreter in Australia

本条目部分或全部内容出自以GFDL授权发布的《自由在线电脑词典》(FOLDOC)。


免责声明:以上内容版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。感谢每一位辛勤著写的作者,感谢每一位的分享。

——— 没有了 ———
编辑:阿族小谱
发表评论
写好了,提交
{{item.label}}
{{commentTotal}}条评论
{{item.userName}}
发布时间:{{item.time}}
{{item.content}}
回复
举报
点击加载更多
打赏作者
“感谢您的打赏,我会更努力的创作”
— 请选择您要打赏的金额 —
{{item.label}}
{{item.label}}
打赏成功!
“感谢您的打赏,我会更努力的创作”
返回

更多文章

更多精彩文章
打赏
私信

推荐阅读

· 管仲之器小哉解释管仲隰朋从于桓公内容介绍
管仲是我国春秋时期著名的军事家,政治家,思想家。孔子曾说过:“管仲之器小哉。”这句话的意思是说管仲这个人器量很小,那孔子为什么会这样说管仲呢?管仲作为我国春秋时期的名相,他帮助齐桓公成为了春秋霸主,同时也帮助齐国成为春秋时期最强大的国家。对于齐国来说,管仲为他们国家出谋划策才使得他们国家变得富强了,既然如此,那么作为春秋时期诸子百家中最有名望的孔子为什么会觉得“管仲之器小哉”呢?《论语》记载子曰:“管仲之器小哉!”或曰:“管仲俭乎?”曰:“管氏有三归,官事不摄,焉得俭?”“然则管仲知礼乎?”曰:“邦君树塞门,管氏亦树塞门;邦君为两君之好,有反坫,管氏亦有反坫。管氏而知礼,孰不知礼?”这段话充分翻译为:孔子说:“管仲这个人器量真是小啊”问:“管仲知道俭吗?孔子回答:“管仲有三位妻子,怎么会知俭。”问:“管仲懂礼节吗?”孔子就回答:“皇帝门前的门塞他家门前也有,君主用来设宴招待外国使节的酒杯,...
· 古籍解释
清代陈昌治刻本说文解字【卷六】【邑部】祁太原县。从邑示声。巨支切清代段玉裁说文解字注大原县。二志同。前志曰:晋大夫贾辛邑。按贾辛为祁大夫。见左传昭廿八年。前此巳有祁奚,祁午,祁盈,祁胜,以邑为氏。今山西太原府祁县县东南七里有故祁城,汉县治也。毛传於吉日云:祁,大也。於采,大田云:祁祁,舒遟也。祁祁,徐皃也。於七月云:祁祁,众多也。皆与本义不相关。从邑示声。巨支切。按古音在十五部。当依广韵渠脂切。
· 解释型语言
解释型语言列表LISPPerlPythonRubyJavaScriptHTML参见脚本语言编译语言
· 法律解释
基本原则条文的意义由于成文法无法完全明确而且具体的对所有情况进行规定,因此司法机构在具体案件中必须解释法律条文应该如何运用。成文法含有不确定意义的原因有多种:文字在表达意图时是不完美的符号。文字的意义具有不准确性,并且随着时间的变迁文字的含义会有所改变。发生没有预见的情况是不可避免的,而新的科技和文化使得运用已有的法律出现困难。法律订立的过程会对法律注入不确定性,例如由于政治妥协或者同时满足不同利益集团的原因。因此,法庭必须通过解读法律来判断法律应该如何执行。在几乎所有法律体系中,法律解读的重要原则是(在合乎宪法的前提下)立法机构订立法律时是最高机构,司法机构的职权限于解释法律。但实际操作上,司法机构对法律的解读可能对法律的运行造成深远的改变。在法律解释过程中,法院必须研究法律条文,并判断其意义。立法机构订立的成文法律改变人民的责任和生活规则,而司法机构通过法律解释解决法律在具体情况下的运...
· 解释学
古典时期作为一门理论来研究。解释学是由19世纪德国哲学家F.E.D.施莱尔马赫(1768~1834)和W.狄尔泰在前人研究的基础上开创的。施莱尔马赫致力于圣经释义学中的科学性和客观性问题的研究,提出了有关正确理解和避免误解的普遍性理论,使神学的解释成为普遍解释理论的一种具体运用。狄尔泰被看作是西方传统解释学的集大成者,他仿效为自然科学奠定哲学基础的I.康德的"纯粹理性批判",提出了作为"历史理性批判"的解释学。他所关心的中心课题是:处于具体历史情境中的解释学如何能对其他历史性的表现进行客观的理解。他认为自然科学中的因果"说明"原则与精神科学中的"理解"原则根本对立,彼此各有其适用范围,互不逾越。他还把文化现象中的"理解"看作是一个生命(作品解释者)"进入"另一个生命(作品创作者)的过程。也就是说,一切社会文化现象都相当于在种种符号中固定化了的生命表现,理解这些现象就相当于把握符号创造者的主...

关于我们

关注族谱网 微信公众号,每日及时查看相关推荐,订阅互动等。

APP下载

下载族谱APP 微信公众号,每日及时查看
扫一扫添加客服微信