动态编译是某些程序语言在执行时用来增进性能的方法。尽管这技术源于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
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.