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

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

参见

外部链接

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.