New Generation Computing

, Volume 25, Issue 3, pp 305–336 | Cite as

Implicitly Heterogeneous Multi-Stage Programming

  • Jason Eckhardt
  • Roumen Kaiabachev
  • Emir Pasalic
  • Kedar Swadi
  • Walid Taha


Previous work on semantics-based multi-stage programming (MSP) language design focused on homogeneous designs, where the generating and the generated languages are the same. Homogeneous designs simply add a hygienic quasi-quotation and evaluation mechanism to a base language. An apparent disadvantage of this approach is that the programmer is bound to both the expressivity and performance characteristics of the base language. This paper proposes a practical means to avoid this by providing specialized translations from subsets of the base language to different target languages. This approach preserves the homogeneous “look” of multi-stage programs, and, more importantly, the static guarantees about the generated code. In addition, compared to an explicitly heterogeneous approach, it promotes reuse of generator source code and systematic exploration of the performance characteristics of the target languages.

To illustrate the proposed approach, we design and implement a translation to a subset of C suitable for numerical computation, and show that it preserves static typing. The translation is implemented, and evaluated with several benchmarks. The implementation is available in the online distribution of MetaOCaml.


Functional Programming Multi-Stage Programming 


Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.


  1. 1.
    Calcagno, C., Moggi, E. and Taha, W., “ML-like inference for classifiers,” in European Symposium on Programming (ESOP ‘04), LNCS 2986, Springer-Verlag, pp. 79-93, 2004.Google Scholar
  2. 2.
    Cormen, T., Leiserson, C. and Rivest, R., Introduction to Algorithms, 14th ed. MIT Press and McGraw-Hill Book Company, 1994.Google Scholar
  3. 3.
    Dynamic Programming Benchmarks, available online from:, 2005.
  4. 4.
    Eckhardt, J., Kaiabachev, R., Pasalic, E., Swadi, K. and Taha, T., “Implicitly heterogeneous multi-stage programming,” in Proc. of the 4th ACM Intl. Conf. on Generative Programming and Component Engineering (GPCE ‘05), LNCS 3676, Springer-Verlag, pp. 275-292, 2005.Google Scholar
  5. 5.
    Elliott, C., Finne, S. and de Moore, O., “Compiling embedded languages,” in 17), pp. 9-7, 2000.Google Scholar
  6. 6.
    Frigo, M and Johnson, S.G, “FFTW: An adaptive software architecture for the FFT,” in Proc. 1998 IEEE Intl. Conf. Acoustics Speech and Signal Processing vol. 3, IEEE, pp. 1381-1384, 1998.Google Scholar
  7. 7.
    Gluck, R. and Jorgensen, J., “Multi-level specialization (extended abstract)” in Partial Evaluation: Practice and Theory (Hatcli, J., Torben, M. and Thiemann, P, ed.), LNCS 1706, Springer-Verlag, pp. 326-337, 1999.Google Scholar
  8. 8.
    Kamin, S., “Standard ML as a meta-programming language,” Technical Report, Univ. of Illinois Computer Science Dept, 1996, available at
  9. 9.
    Kamin, S.N., Callahan, M. and Clausen, L., “Lightweight and generative components I: Source-level components,” in Proc. of the First Intl. Symposium on Generative and Component-Based Software Engineering (GCSE ’99), LNCS 1799, Springer-Verlag, pp. 49-64, London, UK, 2000.Google Scholar
  10. 10.
    MetaOCaml: A compiled, type-safe multi-stage programming language, available online from, 2004.
  11. 11.
    Neverov, G. and Roe, P., “Towards a Fully-reflective Meta-programming Language,” Twenty-Eighth Australasian Computer Science Conference (ACSC ‘05), Conferences in Research and Practice in Information Institute Technology Vol. 38, ACS, pp. 151-158, Newcastle, Australia, 2005.Google Scholar
  12. 12.
    Oregon Graduate Institute Technical Reports, P.O. Box 91000, Portland, OR 97291-1000, USA, available online from
  13. 13.
    Pasalic, E., Taha, W. and Sheard, T., “Tagless staged interpreters for typed languages,” in Proc. of the Intl Conf. on Functional Programming (ICFP ‘02), Pittsburgh, USA, ACM, pp. 218-229, October 2002.Google Scholar
  14. 14.
    Stolpmann, G.. DL-ad-hoc dynamic loading for OCaml, available from
  15. 15.
    Swadi, K., Taha, W., Kiselyov, O. and Pasalic, E., “A monadic approach for avoiding code duplication when staging memoized functions,” in Proc. of the ACM SIGPLAN Workshop on Partial Evaluation and Program Manipulation (PEPM ‘06), ACM Press, January 2006.Google Scholar
  16. 16.
    Taha, W., Multi-Stage Programming: Its Theory and Applications, PhD thesis, Oregon Graduate Institute of Science and Technology, 1999, available from 12).Google Scholar
  17. 17.
    Semantics, Applications, and Implementation of Program Generation(Taha, W. (ed.)), LNCS 1924, Springer-Verlag, Montréal, 2000.Google Scholar
  18. 18.
    Taha, W., “A sound reduction semantics for untyped CBN multi-stage computation. Or, the theory of MetaML is non-trivial,” in Proc. of the Workshop on Partial Evaluation and Semantics-Based Program Manipulation (PEPM ‘00), Boston, ACM Press, pp. 34-43, 2000.Google Scholar
  19. 19.
    Taha, W. and Nielsen, M.F., “Environment classifiers,” in Proc. of the Symposium on Principles of Programming Languages (POPL ‘03) New Orleans, Louisisana, ACM SIGPLAN vol. 38(1), pp. 26-37, 2003.Google Scholar
  20. 20.
    Taha, W. and Sheard, T., “Multi-stage programming with explicit annotations,” in Proc. of Symposium on Partial Evaluation and Semantics Based Program manipulation, ACM SEGPLAN, pp. 203-217, 1997.Google Scholar
  21. 21.
    Tarditi, D., Lee, P. and Acharya, A., “No assembly required: Compiling standard ML to C,” ACM Letters on Programming Languages and Systems, 1(2), pp. 161-177, June 1992.Google Scholar
  22. 22.
    Xi, H., Chen, C. and Chen, G., “Guarded recursive datatype constructors,” in Proc. of the 30th ACM SIGPLAN-SIGACT Symposium on Principles of programming languages (POPL ’03), New Orleans, Louisiana, USA, ACM Press, pp. 224-235, 2003.Google Scholar
  23. 23.
    Cheney, J. and Hinze, R., “First-Class Phantom Types,” Technical Report 1901, Cornell University, Mar. 2006.Google Scholar
  24. 24.
    Sheard, T. and Pasalic, E., “Meta-programming with built-in type equality,” presented at the Fourth International Workshop on Logical Frameworks and Meta-Languages (LFM 4), Cork, Ireland, July, 2004.Google Scholar
  25. 25.
    Jones, S.P., Vytiniotis, D., Weirich, S and Washburn, G., “Simple unification-based type inference for GADTs,” in ACM SIGPLAN Notices, vol. 41(9), pp. 50-61, Sep, 2006.Google Scholar
  26. 26.
    Engler, D.R., “VCODE : A Retargetable, Extensible, Very Fast Dynamic Code Generation System,” in Proc. of the ACM SIGPLAN Conference on Programming Language Design and Implemantation, New York, ACM Press, pp. 160-170, May, 1996.Google Scholar
  27. 27.
    Consel, C., and Noel, F., “A General Approach for Run-Time Specialization and its Application to C,” in Proc. of The 23 rd ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (POPL ’96), pp. 145-156, 1996.Google Scholar
  28. 28.
    Grant, B., Mock, M., Philipose, M., Chambers, C. and Eggers, S.J., “Annotation-Directed Run-Time Specialization in C,” in Proc. of the ACM SIGPLAN Symposium on Partial Evaluation and Semantics-Based Program Manipulation, Amsterdam, The Netherlands, pp. 163-178, Jun 1997,.Google Scholar
  29. 29.
    Sperber, M. and Thiemann, P, “Two for the Price of One: Composing Partial Evaluation and Compilation” in Proc. of the ACM SIGPLAN ‘97 Conference on Programming Language Design and Implementation (PLDI), Las Vegas, Nevada, pp. 215-225, Jun, 1997.Google Scholar

Copyright information

©  2007

Authors and Affiliations

  • Jason Eckhardt
    • 1
  • Roumen Kaiabachev
    • 1
  • Emir Pasalic
    • 1
  • Kedar Swadi
    • 1
  • Walid Taha
    • 1
  1. 1.Department of Computer ScienceRice UniversityHoustonUSA

Personalised recommendations