Dealing with important topics for modern compilers and virtual machines:
- Good books
- Andy Appel - Modern Compiler Construction an Design - based on case study
- Stephen Muchnik - definitive reference 1999
- Obsolete books
- Aho "Dragon book" - good for history
- - more from page 3
- Research papers have the latest stuff
- important for compilers:
- graph coloring
- tree parsing
- ssa
- Example topics
- Compiler Optimization - process of tuning the output of a compiler to minimize or maximize some attributes of an executable computer program. The most common requirement is to minimize the time taken to execute a program; a less common one is to minimize the amount of memory occupied.
- Register allocation - Register allocation is an important optimization aecting the performance of compiled code. For example, good register allocation can improve the performance of several SPEC benchmarks by an order of magnitude relative to when they are compiled with poor or no register allocation.
- Lecture notes on compilers and coloring - http://www.cs.ucla.edu/~palsberg/course/cs132/color-lecturenotes.pdf and http://www.cs.ucla.edu/~palsberg/course/cs132
- Importance of compilers
- Terms:
- Abstract syntax tree - more practical than parse tree, used as IR between front end and back end.
cortical graphs
- efficient coloring in linear time
- example compilers - pg 4
- pcc
- gcc
dynamic language diffs
eval? - javascript
- avm shell
More to look at:
- http://lambda-the-ultimate.org/node/3674 - State of the art C compiler optimization tricks - A survey about state of the art C compiler optimization tricks, Felix von Leitner, Linux Kongress 2009. - http://portal.acm.org/citation.cfm?id=989403
http://en.wikipedia.org/wiki/Chaitin%27s_algorithm - Chaitin's algorithm is a bottom-up, graph coloring register allocation algorithm that uses cost/degree as its spill metric. It is named after its designer, Gregory Chaitin. Chaitin's algorithm was the first register allocation algorithm that made use of coloring of the interference graph for both register allocations and spilling
http://en.wikipedia.org/wiki/Static_single_assignment_form - Static Single Assignment SSA
- Register Allocation - http://en.wikipedia.org/wiki/Register_allocation
- NP-Complete - http://en.wikipedia.org/wiki/NP-complete
http://www.compileroptimizations.com/
See also: