|Topic:||Exceptions and Concurrency in a Portable Assembly Language|
|Date:||Tuesday, January 22, 2002|
|Place:||Gould-Simpson, Room 701|
Many compilers have been written that translate high-level languages to C. This technique eases portability, but C makes it difficult to provide efficient implementations of some features of modern languages, e.g., proper tail calls, accurate garbage collection, efficient exception dispatch, and lightweight threads. C-- is a language designed expressly to act as a compiler-target language, and to approach the ease of generating C while approaching the performance of custom code generators.
We designed mechanisms that enable C-- to express the four best known techniques for implementing exceptions, all within a single, uniform framework. These mechanisms include annotations on call sites, variations on procedure returns, and weak continuations that do not outlive their contexts of origin. Our approach clarifies the design space of exception-handling techniques, and it allows a single optimizer to handle a variety of implementation techniques.
We are in the process of designing mechanisms that should enable C-- to support the best techniques for implementing concurrency. The problems are harder, and in contrast to the exceptions work, this design is not yet mature. The talk will present only the mechanisms needed to manage multiple stacks at low cost.
Our ultimate goal is to allow a source-language compiler the freedom to choose policies and cost models for exception handling and concurrency, while encapsulating the architecture-dependent mechanisms and their optimization in an implementation of C-- that can be used by compilers for many source languages.