一句话:提出基于回调/控制反转的嵌入式会话类型实现,使应用代码内在类型化、无法破坏线性性,并扩展到分支、递归、多通道等。
会话类型的可靠实现通常依赖线性类型,因为通道在每次操作后类型都会变化。已有嵌入式实现要么用复杂类型构造静态保证线性,要么用运行时检查近似线性。本文提出一种受控制反转启发的语言嵌入式会话类型实现:所有应用代码按构造即内在会话类型化,无法破坏线性性;线性性证明被封装在小型库中,只需在构建库时一次性完成。该设计可扩展到分支、递归、多通道、高阶会话以及上下文无关会话;多通道扩展还能按构造保证无死锁。工作由类型检查通过的 Agda 代码完整支撑。
All formalizations of session types rely on linear types for soundness as session-typed communication channels must change their type at every operation. Embedded language implementations of session types follow suit. They either rely on clever typing constructions to guarantee linearity statically, or on run-time checks that approximate linearity. We present a new language-embedded implementation of session types, which is inspired by the inversion-of-control design principle. With our approach, all application programs are intrinsically session-typed and unable to break linearity by construction. Our design relies on a tiny encapsulated library, for which linearity remains a proof obligation that can be discharged once and for all when the library is built. We demonstrate that our proposed design extends to a wide range of features of session type systems: branching, recursion, multichannel and higher-order sessions, as well as context-free sessions. The multichannel extension provides an embedded implementation of session types which guarantees deadlock freedom by construction. The development reported in this paper is fully backed by type-checked Agda code.