Secrets of the Glasgow Haskell Compiler inliner. Higher-order languages such as Haskell encourage the programmer to build abstractions by composing functions. A good compiler must inline many of these calls to recover an efficiently executable program. In principle, inclining is dead simple: just replace the call of a function by an instance of its body. But any compiler-writer will tell you that inclining is a black art, full of delicate compromises that work together to give good performance without unnecessary code bloat. The purpose of this paper is, therefore, to articulate the key lessons we learned from a full-scale “production” inliner, the one used in the Glasgow Haskell compiler. We focus mainly on the algorithmic aspects, but we also provide some indicative measurements to substantiate the importance of various aspects of the inliner.

References in zbMATH (referenced in 103 articles , 1 standard article )

Showing results 1 to 20 of 103.
Sorted by year (citations)

1 2 3 4 5 6 next

  1. Schmidt-Schauß, Manfred; Kutz, Yunus: Nominal unification with letrec and environment-variables (2021)
  2. Mokhov, Andrey; Mitchell, Neil; Peyton Jones, Simon: Build systems à la carte: theory and practice (2020)
  3. van Doorn, Floris; Ebner, Gabriel; Lewis, Robert Y.: Maintaining a library of formal mathematics (2020)
  4. Hamana, Makoto: How to prove decidability of equational theories with second-order computation analyser SOL (2019)
  5. Schrijvers, Tom; Oliveira, Bruno C. D. S.; Wadler, Philip; Marntirosian, Koar: COCHIS: stable and coherent implicits (2019)
  6. Baydin, Atılım Güneş; Pearlmutter, Barak A.; Radul, Alexey Andreyevich; Siskind, Jeffrey Mark: Automatic differentiation in machine learning: a survey (2018)
  7. Bendkowski, Maciej; Grygiel, Katarzyna; Tarau, Paul: Random generation of closed simply typed (\lambda)-terms: a synergy between logic programming and Boltzmann samplers (2018)
  8. Ishii, Hiromi: A purely functional computer algebra system embedded in Haskell (2018)
  9. Orchard, Dominic: Complexity bounds for container functors and comonads (2018)
  10. Shaikhha, Amir; Dashti, Mohammad; Koch, Christoph: Push versus pull-based loop fusion in query engines (2018)
  11. Spector-Zabusky, Antal; Spector, Donald: Schrödinger’s zebra: applying mutual information maximization to graphical halftoning (2018)
  12. Ahn, Ki Yung; Vezzosi, Andrea: Executable relational specifications of polymorphic type systems using Prolog (2016)
  13. Breitner, Joachim; Eisenberg, Richard A.; Peyton Jones, Simon; Weirich, Stephanie: Safe zero-cost coercions for Haskell (2016)
  14. Dieterle, M.; Horstmeyer, T.; Loogen, R.; Berthold, J.: Skeleton composition versus stable process systems in Eden (2016)
  15. Downen, Paul; Maurer, Luke; Ariola, Zena M.; Peyton Jones, Simon: Sequent calculus as a compiler intermediate language (2016)
  16. Gibbons, Jeremy: Comprehending ringads. For Phil Wadler, on the occasion of his 60th birthday (2016)
  17. Kapfer, Simon: Computing cup products in integral cohomology of Hilbert schemes of points on (K3) surfaces (2016)
  18. Sivaramakrishnan, K. C.; Harris, Tim; Marlow, Simon; Peyton Jones, Simon: Composable scheduler activations for Haskell (2016)
  19. Montenegro, Manuel; Peña, Ricardo; Sánchez-Hernández, Jaime: A generic intermediate representation for verification condition generation (2015)
  20. Newton, Ryan R.; Fogg, Peter P.; Varamesh, Ali: Adaptive lock-free maps: purely-functional to scalable (2015)

1 2 3 4 5 6 next