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.