一句话:提出 Actris 2.0,将异步会话类型协议与并发分离逻辑结合,支持子协议,并用 Coq/Iris 验证消息传递并发程序。
消息传递常用于实现并发程序,但真实系统常同时使用高阶函数、可变状态、共享内存并发与锁,给功能正确性证明带来挑战。Actris 将现代并发分离逻辑与基于会话类型的一等协议机制结合,用于推理这些范式混合的程序。该文在 POPL'20 会议版基础上大幅扩展,提出 Actris 2.0,引入基于会话类型子类型的子协议概念,提升通道端点组合灵活性,并充分利用消息传递的异步语义。作者用 Iris 框架建立协议机制的模型证明其可靠性,并在 Coq 中机械化全部理论、自定义策略与示例,包括基于通道的归并排序、负载均衡 mapper 及 map-reduce 变体,表明其抽象层次适中且规范简洁。
Message passing is a useful abstraction for implementing concurrent programs. For real-world systems, however, it is often combined with other programming and concurrency paradigms, such as higher-order functions, mutable state, shared-memory concurrency, and locks. We present Actris: a logic for proving functional correctness of programs that use a combination of the aforementioned features. Actris combines the power of modern concurrent separation logics with a first-class protocol mechanism -- based on session types -- for reasoning about message passing in the presence of other concurrency paradigms. We show that Actris provides a suitable level of abstraction by proving functional correctness of a variety of examples, including a channel-based merge sort, a channel-based load-balancing mapper, and a variant of the map-reduce model, using concise specifications. While Actris was already presented in a conference paper (POPL'20), this paper expands the prior presentation significantly. Moreover, it extends Actris to Actris 2.0 with a notion of subprotocols -- based on session-type subtyping -- that permits additional flexibility when composing channel endpoints, and that takes full advantage of the asynchronous semantics of message passing in Actris. Soundness of Actris 2.0 is proven using a model of its protocol mechanism in the Iris framework. We have mechanised the theory of Actris, together with custom tactics, as well as all examples in the paper, in the Coq proof assistant.
@article{paperbot1695,
title = {Actris 2.0: Asynchronous Session-Type Based Reasoning in Separation Logic},
author = {Jonas Kastberg Hinrichsen and Jesper Bengtson and Robbert Krebbers},
journal = {Logical Methods in Computer Science},
volume = {Volume 18, Issue 2},
year = {2022},
doi = {10.46298/lmcs-18(2:16)2022}
}