解释器

✍ dations ◷ 2025-10-02 18:51:50 #计算机语言,系统软件,编译原理,程序设计工具,软件工程,计算机编程

解释器(英语:interpreter),是一种程序,能够把编程语言一行一行解释运行。解释器像是一位“中间人”,每次运行程序时都要先转成另一种语言再作运行,因此解释器的程序运行速度比较缓慢。它不会一次把整个程序翻译出来,而是每翻译一行程序叙述就立刻运行,然后再翻译下一行,再运行,如此不停地进行下去。

解释器的好处是它消除了编译整个程序的负担,程序可以拆分成多个部分来模块化,但这会让运行时的效率打了折扣。相对地,编译器已一次将所有源代码翻译成另一种语言,如机器代码,运行时便无需再依赖编译器或额外的程序,故而其运行速度比较快。

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

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

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字母读卡器是主要的两个例子。

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

相关

  • 血管性痴呆血管性痴呆(Vascular dementia),亦称多发梗塞性痴呆(multi-infarct dementia),是一系列由于血管性疾病引起的大脑梗塞,其中包括高血压性脑血管病、脑动脉硬化性痴呆。其梗塞过程往
  • 周边动脉阻塞性疾病周边动脉疾病(Peripheral artery disease, PAD),可以称为周边血管疾病(Peripheral vascular disease, PVD)、周边动脉阻塞性疾病(Peripheral artery occlusive disease, PAOD),或是
  • Porter, R.S.罗伊·波特(1946年12月31日-2002年3月3日,英语:Roy Porter),英国历史学家,以其在医学史上的大量研究成果成名。2001年自伦敦大学卫康医学史研究中心退休。退休不满一年即心脏病发辞
  • 低频低频(LF, Low frequency)是指频带由30 KHz到300 KHz的无线电电波。LF多用作卫星导航系统(差分全球定位系统)、国际广播以及AM广播等,另外亦可用作电波时计(授时)。一些无线电频率识
  • 化能生物化能生物(英语:Chemotroph),其中化能菌又分为(异养菌)和(自养菌)两大类。前者靠氧化有机物取得能量,后者则靠氧化无机物获取能量。化能生物种类繁多,从蠕虫到鱼类应有尽有。
  • 刺尾鱼刺尾鲷科,辐鳍鱼纲鲈形目的一个科。本科鱼类广泛分布于印度太平洋区的热带浅水珊瑚礁海域。从0米的潮池、潮间带到深数十米之岩礁及珊瑚礁海域,但有些鱼种可达50至60米深。本
  • FeBrsub2/sub溴化亚铁,化学式FeBr2,棕黄色潮解固体,可溶于水。在室温下从水溶液中结晶出淡绿色的六水合物。温度升高时,也可结晶出四水合物和二水合物。400 °C时,在溴化氢气流中加热含水的
  • 曼尼普尔语曼尼普尔语,又称梅泰语(Meitei-lon/ꯃꯤꯇꯩ ꯂꯣꯟ;又名Meitei-lol/ꯃꯤꯇꯩ ꯂꯣꯟ、pangal-lol或Manipuri/মনিপুরি,又或Meithei/মেইথেই)是印度东北部喜马拉雅山
  • 鲁比亚卡洛·鲁比亚(意大利语:Carlo Rubbia,1934年3月31日-),出生于戈里齐亚,意大利物理学家,因与西蒙·范德梅尔在欧洲核子研究组织共同发现W及Z玻色子而获得1984年诺贝尔物理学奖。鲁比
  • 黛米·洛瓦托德梅特里亚·迪芳·洛瓦托(英语:Demetria Devonne Lovato,1992年8月20日-),是一名美国歌手、词曲作家、演员及电视名人。她因主演迪士尼频道作品《摇滚夏令营》、《公主保卫战(英语