Approaches in Typecase Optimization

From LRDE

Abstract

We contrast two approaches to optimizing the Common Lisp typecase macro expansion. The first approach is based on heuristics intended to estimate run time performance of certain type checks involving Common Lisp type specifiers. The technique may, depending on code size, exhaustively search the space of permutations of the type checks, intent on finding the optimal order. With the second technique, we represent a typecase form as a type specifierencapsulating the side-effecting non-Boolean parts so as to appear compatible with the Common Lisp type algebra operators. The encapsulated expressions are specially handled so that the Common Lisp type algebra functions preserve them, and we can unwrap them after a process of Boolean reduction into efficient Common Lisp codemaintaining the appropriate side effects but eliminating unnecessary type checks. Both approaches allow us to identify unreachable code, test for exhaustiveness of the clauses and eliminate type checks which are calculated to be redundant.

Documents

Bibtex (lrde.bib)

@InProceedings{	  newton.18.els,
  author	= {Jim Newton and Didier Verna},
  title		= {Approaches in Typecase Optimization},
  booktitle	= {European Lisp Symposium},
  year		= 2018,
  address	= {Marbella, Spain},
  month		= apr,
  abstract	= {We contrast two approaches to optimizing the Common Lisp
		  typecase macro expansion. The first approach is based on
		  heuristics intended to estimate run time performance of
		  certain type checks involving Common Lisp type specifiers.
		  The technique may, depending on code size, exhaustively
		  search the space of permutations of the type checks, intent
		  on finding the optimal order. With the second technique, we
		  represent a typecase form as a type specifier,
		  encapsulating the side-effecting non-Boolean parts so as to
		  appear compatible with the Common Lisp type algebra
		  operators. The encapsulated expressions are specially
		  handled so that the Common Lisp type algebra functions
		  preserve them, and we can unwrap them after a process of
		  Boolean reduction into efficient Common Lisp code,
		  maintaining the appropriate side effects but eliminating
		  unnecessary type checks. Both approaches allow us to
		  identify unreachable code, test for exhaustiveness of the
		  clauses and eliminate type checks which are calculated to
		  be redundant. }
}