Applying Pi: Towards a Basis for Concurrent Imperative Programming Martin Odersky Proc. ACM SIGPLAN Workshop on State in Programming Languages, January 1995 Most programming languages in use today have some way to express concurrent execution of processes -- either in the language itself or by means of a library. This paper proposes a formal basis for reasoning about such languages. We study an extension of asynchronous pi-calculus where names can be returned from processes. We show that with this simple extension an extensive range of functional, state-based and control-based programming constructs can be expressed by concise macro expansions, similar to Church-encodings in lambda calculus.