@InProceedings{shao98:callcc, author = {Zhong Shao and Valery Trifonov}, title = {Type-directed Continuation Allocation}, booktitle = {Second International Workshop on Types in Compilation} publisher = {Springer-Verlag}, series = {Lecture Notes in Computer Science}, volume = {1473}, pages = {116-135}, year = 1998, address = {Kyoto, Japan}, month = {March}, abstract = { Suppose we translate two different source languages, $L_1$ and $L_2$, into the same intermediate language; can they safely interoperate in the same address space and under the same runtime system? If $L_1$ supports first-class continuations (call/cc) and $L_2$ does not, can $L_2$ programs call arbitrary $L_1$ functions? Would the fact of possibly calling $L_1$ impose restrictions on the implementation strategy of $L_2$? Can we compile $L_1$ functions that do not invoke call/cc using more efficient techniques borrowed from the $L_2$ implementation? Our view is that the implementation of a common intermediate language ought to support the so-called \emph{pay-as-you-go efficiency}: first-order monomorphic functions should be compiled as efficiently as in C and assembly languages, even though they may be passed to arbitrary polymorphic functions that support advanced control primitives (e.g.~call/cc). In this paper we present a typed intermediate language with effect and resource annotations, ensuring the safety of inter-language calls while allowing the compiler to choose continuation allocation strategies.} }