The Compiler Forest

  • Mihai Budiu
  • Joel Galenson
  • Gordon D. Plotkin
Part of the Lecture Notes in Computer Science book series (LNCS, volume 7792)


We address the problem of writing compilers targeting complex execution environments, such as computer clusters composed of machines with multi-core CPUs. To that end we introduce partial compilers. These compilers can pass sub-programs to several child (partial) compilers, combining the code generated by their children to generate the final target code. We define a set of high-level polymorphic operations manipulating both compilers and partial compilers as first-class values. These mechanisms provide a software architecture for modular compiler construction. This allows the building of a forest of compilers, providing a structured treatment of multistage compilers.


Operator Application Source Program Denotational Semantic Execution Engine Lambda Calculus 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


  1. 1.
    Benton, N., Hughes, J., Moggi, E.: Monads and Effects. In: Barthe, G., Dybjer, P., Pinto, L., Saraiva, J. (eds.) APPSEM 2000. LNCS, vol. 2395, pp. 42–122. Springer, Heidelberg (2002)CrossRefGoogle Scholar
  2. 2.
    Blass, A.: Questions and answers – a category arising in linear logic, complexity theory, and set theory. In: Advances in Linear Logic. London Math. Soc. Lecture Notes, vol. 222, pp. 61–81 (1995)Google Scholar
  3. 3.
    Buneman, P., et al.: Comprehension syntax. SIGMOD Record 23(1), 87–96 (1994)CrossRefGoogle Scholar
  4. 4.
    Chang, B.-Y.E., Harren, M., Necula, G.C.: Analysis of low-level code using cooperating decompilers. In: Proc. 13th SAS, pp. 318–335. ACM (2006)Google Scholar
  5. 5.
    de Paiva, V.: The Dialectica categories. In: Proc. Cat. in Comp. Sci. and Logic, 1987. Cont. Math., vol. 92, pp. 47–62. AMS (1989)Google Scholar
  6. 6.
    Dean, J., Ghemawat, S.: MapReduce: Simplified data processing on large clusters. In: Proc. 6th OSDI, pp. 137–150. ACM (2004)Google Scholar
  7. 7.
    Duffy, J.: Concurrent Programming on Windows. Addison Wesley (2008)Google Scholar
  8. 8.
    Erwig, M.: Inductive graphs and functional graph algorithms. J. Funct. Program. 11(5), 467–492 (2001)MathSciNetMATHCrossRefGoogle Scholar
  9. 9.
    Ghemawat, S., Gobioff, H., Leung, L.: The Google file system. In: Proc. 19th SOSP, pp. 29–43. ACM (2003)Google Scholar
  10. 10.
    Gordon, M.J., Milner, A.J., Wadsworth, C.P.: Edinburgh LCF. LNCS, vol. 78. Springer, Heidelberg (1979)MATHCrossRefGoogle Scholar
  11. 11.
    Hutton, G.: A tutorial on the universality and expressiveness of fold. J. Funct. Program. 9(4), 355–372 (1999)MathSciNetMATHCrossRefGoogle Scholar
  12. 12.
    Hyland, J.M.E.: Proof theory in the abstract. APAL 114(1-3), 43–78 (2002)MathSciNetMATHGoogle Scholar
  13. 13.
    Kelsey, R., Hudak, P.: Realistic compilation by program transformation. In: Proc. 16th POPL, pp. 281–292. ACM (1989)Google Scholar
  14. 14.
    Kock, A.: Commutative monads as a theory of distributions. Theory and Applications of Categories 26(4), 97–131 (2012)MathSciNetMATHGoogle Scholar
  15. 15.
    Kossmann, D.: The state of the art in distributed query processing. ACM Comput. Surv. 32, 422–469 (2000)CrossRefGoogle Scholar
  16. 16.
    Lerner, S., et al.: Composing dataflow analyses and transformations. In: Proc. 29th POPL, pp. 270–282. ACM (2002)Google Scholar
  17. 17.
    Meijer, E., et al.: LINQ: reconciling object, relations and XML in the .NET framework. In: Proc. SIGMOD Int. Conf. on Manage. Data, p. 706. ACM (2006)Google Scholar
  18. 18.
    Melnik, S., et al.: Dremel: interactive analysis of web-scale datasets. Proc. VLDB Endow. 3, 330–339 (2010)Google Scholar
  19. 19.
    Milner, R., Bird, R.: The use of machines to assist in rigorous proof. Phil. Trans. R. Soc. Lond. A 312(1522), 411–422 (1984)MATHCrossRefGoogle Scholar
  20. 20.
    Moggi, E.: Computational lambda-calculus and monads. In: Proc. 4th LICS, pp. 14–23. IEEE Computer Society (1989)Google Scholar
  21. 21.
    Moggi, E.: Notions of computation and monads. Inf. Comput. 93(1), 55–92 (1991)MathSciNetMATHCrossRefGoogle Scholar
  22. 22.
    Pierce, B.C.: Types and programming languages. MIT Press (2002)Google Scholar
  23. 23.
    Power, J., Robinson, E.: Premonoidal categories and notions of computation. MSCS 7(5), 453–468 (1997)MathSciNetMATHGoogle Scholar
  24. 24.
    Sarkar, D., Waddell, O., Dybvig, R.K.: Educational pearl: A nanopass framework for compiler education. J. Funct. Program. 15(5), 653–667 (2005)MATHCrossRefGoogle Scholar
  25. 25.
    Sheth, A., Larson, J.: Federated database systems for managing distributed, heterogeneous, and autonomous databases. ACM Comput. Surv. 22, 183–236 (1990)CrossRefGoogle Scholar
  26. 26.
    Tarditi, D., Puri, S., Oglesby, J.: Accelerator: using data parallelism to program GPU’s for general-purpose uses. In: Proc. 12th. ASPLOS, pp. 325–335. ACM (2006)Google Scholar
  27. 27.
    Yu, Y., et al.: DryadLINQ: A system for general-purpose distributed data-parallel computing using a high-level language. In: Proc. 8th OSDI, pp. 1–14. ACM (2008)Google Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 2013

Authors and Affiliations

  • Mihai Budiu
    • 1
  • Joel Galenson
    • 1
    • 2
  • Gordon D. Plotkin
    • 1
    • 3
  1. 1.Microsoft ResearchSilicon ValleyUSA
  2. 2.University of CaliforniaBerkeleyUSA
  3. 3.University of EdinburghUK

Personalised recommendations