Ahead-of-time compilation

In computer science, ahead-of-time compilation (AOT compilation) is the act of compiling an (often) higher-level programming language into an (often) lower-level language before execution of a program, usually at build-time, to reduce the amount of work needed to be performed at run time.

It is most commonly associated with the act of compiling a higher-level programming language such as C or C++, or an intermediate representation such as Java bytecode or Common Intermediate Language (CIL) code, into native machine code so that the resulting binary file can execute natively, just like a standard native compiler. When being used in this context, it is often seen as an opposite of just-in-time (JIT) compiling.

Speaking more generally, the target languages of an AOT compilation are not necessarily specific to native machine code but are defined rather arbitrarily. Some academic papers use this word to mean the act of compiling the Java bytecode to C[1] or the timing when optimization pipeline are performed.[2] An academic project[3] uses this word to mean the act of pre-compiling JavaScript to a machine-dependent optimized IR for V8 (JavaScript engine)[4] and to a machine independent bytecode for JavaScriptCore.[5] Some industrial language implementations (e.g. Clojure[6] and Hermes JavaScript engine[7]) use this word to mean the act of pre-compiling the source language to VM specific bytecode. Angular (web framework) uses this word to mean converting its HTML template and TypeScript to JavaScript.[8]

In fact, since all static compilation is technically performed ahead of time, this particular wording is often used to emphasize examples where there are significant performance advantages over the act of such pre-compiling. The act of compiling Java to Java bytecode is hence rarely referred to as AOT since it is usually a requirement, not an optimization.

  1. ^ Jung, Dong-Heon; Park, Jong Kuk; Bae, Sung-Hwan; Lee, Jaemok; Moon, Soo-Mook (2006-10-22). "Efficient exception handling in Java bytecode-to-c ahead-of-time compiler for smbedded systems". Proceedings of the 6th ACM & IEEE International conference on Embedded software - EMSOFT '06. EMSOFT '06. Seoul, Korea: Association for Computing Machinery. pp. 188–194. doi:10.1145/1176887.1176915. ISBN 978-1-59593-542-7. S2CID 15591457.
  2. ^ Chambers, Craig (2002-01-14). "Staged compilation". Proceedings of the 2002 ACM SIGPLAN workshop on Partial evaluation and semantics-based program manipulation. PEPM '02. Portland, Oregon: Association for Computing Machinery. pp. 1–8. doi:10.1145/503032.503045. ISBN 978-1-58113-455-1. S2CID 18546907.
  3. ^ Zhuykov, R.; Sharygin, E. (2017-01-01). "Ahead-of-time compilation of JavaScript programs". Programming and Computer Software. 43 (1): 51–59. doi:10.1134/S036176881701008X. ISSN 1608-3261. S2CID 2338849.
  4. ^ ispras/v8-aotc, Ivannikov Institute for System Programming of the Russian Academy of Sciences, 2021-01-30, retrieved 2021-03-17
  5. ^ ispras/webkit-aotc, Ivannikov Institute for System Programming of the Russian Academy of Sciences, 2021-01-30, retrieved 2021-03-17
  6. ^ "Clojure - Ahead-of-time Compilation and Class Generation". clojure.org. Retrieved 2021-03-17.
  7. ^ "Hermes: A new open source JavaScript engine optimized for mobile apps". Facebook Engineering. 2019-07-12. Retrieved 2021-03-17.
  8. ^ "Angular". angular.io. Retrieved 2021-03-17.