动态编译
动态编译是某些程序语言在执行时用来增进性能的方法。尽管这技术源于Self[来源请求],但使用此技术最为人所知的是Java。此技术可以做到一些只在执行时才能完成的优化。使用动态编译的执行环境一开始执行速度较慢,之后,完成大部分的编译和再编译后,会执行得比非动态编译程序快很多。因为初始化时的性能延迟,动态编译不适用于一些情况。在许多实现中,一些可以在编译时期做的优化被延到执行时期才编译,导致不必要的性能降低。即时编译是一种动态编译的形式。
一个非常近似的技术是递增式编译。递增式编译器用于POP-2、POP-11、一些Lisp的版本,如Maclisp和最少一种版本的ML语言(Poplog ML)。这需要编程语言的编译器成为执行环境的一部分作为要件以实现。如此便得以在任何时候从终端、从文件、或从执行中程序所建造数据结构中读取原始码。然后,转成机器代码区块或函数(有可能取代之前同名的函数),之后可立即被程序使用。因为执行中对交互开发和测试的速度的要求,编译后的机器代码所做的优化程度不如标准“批量编译器”。然而,递增式编译过的程序跑起来通常比同一个程序的一般解译版本还快。递增式编译因而能够同时提供编译和解译语言优点。 为了增加可移植性,递增式编译通常采两步骤。第一个步骤会编译到中间、与平台独立的语言,然后再到机器代码。在这个例子中,移植只须改变“后端”编译器。不同于动态编译,递增式编译在程序执行后不会做更进一步的优化。
参见
外部链接
- The UW Dynamic Compilation Project
- Architecture Emulation through Dynamic Compilation (页面存档备份,存于互联网档案馆)
- SCIRun (页面存档备份,存于互联网档案馆)
- Article "Dynamic Compilation, Reflection, & Customizable Apps" by David B. Scofield and Eric Bergman-Terrell
- Article "High-performance XML: Dynamic XPath expressions compilation (页面存档备份,存于互联网档案馆)" by Daniel Cazzulino
- Article "A Survey of Adaptive Optimization in Virtual Machines (页面存档备份,存于互联网档案馆)" by Matthew R. Arnold, Stephen Fink, David P. Grove, Michael Hind, and Peter F. Sweeney