Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Intermediate representation
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
=== Languages === Though not explicitly designed as an intermediate language, [[C (programming language)|C]]'s nature as an abstraction of [[Assembly language|assembly]] and its ubiquity as the ''de facto'' [[System programming language|system language]] in [[Unix-like]] and other operating systems has made it a popular intermediate language: [[Eiffel (programming language)|Eiffel]], [[Sather]], [[Esterel]], some [[Programming language dialect|dialect]]s of [[Lisp (programming language)|Lisp]] ([[Lush (programming language)|Lush]], [[Gambit (Scheme implementation)|Gambit]]), [[Squeak]]'s Smalltalk-subset Slang, [[Nim (programming language)|Nim]], [[Cython]], [[Seed7]], [[SystemTap]], [[Vala (programming language)|Vala]], V, and others make use of C as an intermediate language. Variants of C have been designed to provide C's features as a portable [[assembly language]], including [[C--]] and the [[C Intermediate Language]]. Any language targeting a [[virtual machine]] or [[p-code machine]] can be considered an intermediate language: * [[Java bytecode]] * Microsoft's [[Common Intermediate Language]] is an intermediate language designed to be shared by all compilers for the [[.NET Framework]], before static or dynamic compilation to machine code. * While most intermediate languages are designed to support statically typed languages, the [[Parrot intermediate representation]] is designed to support dynamically typed languages—initially Perl and Python. * [[IBM i#TIMI|TIMI]] is used by compilers on the [[IBM i]] platform. * [[O-code]] for [[BCPL]] * [[MATLAB]] precompiled code * [[Microsoft P-Code]] * [[Pascal (programming language)|Pascal]] [[p-code]] The [[GNU Compiler Collection]] (GCC) uses several intermediate languages internally to simplify portability and [[cross-compilation]]. Among these languages are * the historical [[Register Transfer Language]] (RTL) * the tree language [[GNU Compiler Collection#GENERIC and GIMPLE|GENERIC]] * the [[SSA (computing)|SSA]]-based [[GIMPLE]]. (Lower-level than GENERIC; input for most optimizers; has a compact "bytecode" notation.) GCC supports generating these IRs, as a final target: * [[HSA Intermediate Layer]] * [[LLVM#Intermediate representation|LLVM Intermediate Representation]] (converted from GIMPLE in the now-defunct llvm-gcc which uses LLVM optimizers and codegen) The [[LLVM]] compiler framework is based on the [[LLVM#Intermediate representation|LLVM IR]] intermediate language, of which the compact, binary serialized representation is also referred to as "bitcode" and has been productized by Apple.<ref name="Apple's bitcode">{{cite web | url=https://news.ycombinator.com/item?id=9684223 | title=Bitcode (iOS, watchOS) | publisher=Hacker News | date=10 June 2015 | access-date=17 June 2015}}</ref><ref name="LLVM Bitcode">{{cite web | url=http://llvm.org/docs/BitCodeFormat.html | title=LLVM Bitcode File Format | publisher=llvm.org | access-date=17 June 2015}}</ref> Like GIMPLE Bytecode, LLVM Bitcode is useful in link-time optimization. Like GCC, LLVM also targets some IRs meant for direct distribution, including Google's [[Native Client|PNaCl]] IR and [[Standard Portable Intermediate Representation|SPIR]]. A further development within LLVM is the use of ''Multi-Level Intermediate Representation'' ([[MLIR (software)|MLIR]]) with the potential to generate code for different heterogeneous targets, and to combine the outputs of different compilers.<ref>{{cite web |url=https://mlir.llvm.org/ |title = MLIR}}</ref> The ILOC intermediate language<ref> [http://www.engr.sjsu.edu/wbarrett/Parser/simManual.htm "An ILOC Simulator"] {{webarchive|url=https://web.archive.org/web/20090507084132/http://www.engr.sjsu.edu/wbarrett/Parser/simManual.htm |date=2009-05-07 }} by W. A. Barrett 2007, paraphrasing Keith Cooper and Linda Torczon, "Engineering a Compiler", [[Morgan Kaufmann]], 2004. {{ISBN|1-55860-698-X}}.</ref> is used in classes on compiler design as a simple target language.<ref>[http://www.cis.udel.edu/~pollock/471/project2spec.pdf "CISC 471 Compiler Design"] by Uli Kremer</ref>
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)