动态编译

更新时间:2022-08-26 10:28

是某些程式语言在执行时用来增进效能的方法。

简介

尽管这技术源于Self,但使用此技术最为人所知的是Java。此技术可以做到一些只在执行时才能完成的最佳化。使用动态编译的执行环境一开始执行速度较慢,之后,完成大部分的编译和再编译后,会执行得比非动态编译程式快很多。因为初始化时的效能延迟,动态编译不适用于一些情况。在许多实作中,一些可以在编译时期做的最佳化被延到执行时期才编译,导致不必要的效能降低。即时编译是一种动态编译的形式。

例子

一个非常近似的技术是递增式编译。递增式编译器用于POP-2、POP-11、一些Lisp的版本,如Maclisp和最少一种版本的ML语言(PoplogML)。这需要编程语言的编译器成为执行环境的一部分作为要件以实作。如此便得以在任何时候从终端、从档案、或从执行中程式所建造数据结构中读取源码。然后,转成机器码区块或函数(有可能取代之前同名的函数),之后可立即被程式使用。因为执行中对互动开发和测试的速度的要求,编译后的机器码所做的最佳化程度不如标准“批次编译器”。然而,递增式编译过的程式跑起来通常比同一个程式的一般解译版本还快。递增式编译因而能够同时提供编译和解译语言优点。 为了增加可移植性,递增式编译通常采两步骤。第一个步骤会编译到中间、与平台独立的语言,然后再到机器码。在这个例子中,移植只须改变“后端”编译器。不同于动态编译,递增式编译在程式执行后不会做更进一步的最佳化。

Self

Self语言,是一种基于原型的面向对象程序设计语言,于1986年由施乐帕洛阿尔托研究中心的David Ungar和Randy Smith给出了最初的设计。

Self语言把概念上的精简作为设计原则。它取消了的概念,只有对象的概念,同时把消息作为最基本的操作。把对象的属性理解为获取或更改属性这两种方法,从而把属性的概念简化为方法;取消了变量赋值,并以通过消息来读槽和写槽的方式代之。

Self语言是在Smalltalk的基础上发展而来,沿用了Smalltalk中一切都是对象的风格。Self同Smalltalk一样既是一个编程语言,也是一个集成开发环境运行环境。Self也拥有一个图形用户界面Morphic,Self的编程环境也是基于Morphic来实现的。Self在精简语言概念的同时也把大量的工作转交给环境来处理。如可见性(visibility),模块与代码的管理都是由环境来处理的,语言中的反馈机制(reflection)也同环境密切相关。

在发展Self的过程中,Self的设计研究人员也探索了Self的程序设计。他们提出了traits的概念,用对象实现了名字(对象名或方法名)的管理,用动态继承实现模式转换。

在实现Self系统的过程中,设计研究人员发展出了一种动态自适应编译技术。这种技术的采用提高了Self代码的执行效率。

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}