Home
Scholarly Works
Multi-stage programming with functors and monads:...
Journal article

Multi-stage programming with functors and monads: Eliminating abstraction overhead from generic code

Abstract

We use multi-stage programming, monads and Ocaml’s advanced module system to demonstrate how to eliminate all abstraction overhead from generic programs, while avoiding any inspection of the resulting code. We demonstrate this clearly with Gaussian Elimination as a representative family of symbolic and numeric algorithms. We parameterize our code to a great extent–over domain, input and permutation matrix representations, determinant and rank tracking, pivoting policies, result types, etc.–at no run-time cost. Because the resulting code is generated just right and not changed afterward, MetaOCaml guarantees that the generated code is well-typed. We further demonstrate that various abstraction parameters (aspects) can be made orthogonal and compositional, even in the presence of name-generation for temporaries, and “interleaving” of aspects. We also show how to encode some domain-specific knowledge so that “clearly wrong” compositions can be rejected at or before generation time, rather than during the compilation or running of the generated code.

Authors

Carette J; Kiselyov O

Journal

Science of Computer Programming, Vol. 76, No. 5, pp. 349–375

Publisher

Elsevier

Publication Date

May 1, 2011

DOI

10.1016/j.scico.2008.09.008

ISSN

0167-6423

Contact the Experts team