To simplify shared-memory concurrent programming, languages have started to offer core support for high-level communications primitives, in the form of message passing though channels, in addition to lower-level synchronisation primitives. Yet, a growing body of evidence suggests that channel-based programming abstractions also have their issues. The Discourje project aims to help programmers cope with channels and concurrency bugs in Clojure programs, based on dynamic analysis. The idea is that programmers write not only implementations of communication protocols in their Clojure programs, but also specifications. Discourje then offers a run-time verification library to ensure that channel actions in implementations are safe relative to specifications. The aim of this paper is to provide a comprehensive overview of the current state of Discourje, including case studies, theoretical foundations, and practical aspects.

, ,
doi.org/10.1007/s10009-022-00674-y
International Journal on Software Tools for Technology Transfer
Centrum Wiskunde & Informatica, Amsterdam (CWI), The Netherlands

Hamers, R., Horlings, E., & Jongmans, S. (2022). The Discourje project: run-time verification of communication protocols in Clojure. International Journal on Software Tools for Technology Transfer, 24, 757–782. doi:10.1007/s10009-022-00674-y