MobilityReadingGroup

π-calculus, Session Types research at Imperial College

Fencing off Go: Liveness and Safety for Channel-based Programming
Julien LANGE, Nicholas NG, Bernardo TONINHO, Nobuko YOSHIDA
44th ACM SIGPLAN Symposium on Principles of Programming Languages (POPL 2017). p. 748 - 761

Go is a production-level statically typed programming language whose design features explicit message-passing primitives and lightweight threads, enabling (and encouraging) programmers to develop concurrent systems where components interact through communication more so than by lock-based shared memory concurrency. Go can only detect global deadlocks at runtime, but provides no compile-time protection against all too common communication mismatches or partial deadlocks.

This work develops a static verification framework for liveness and safety in Go programs, able to detect communication errors and partial deadlocks in a general class of realistic concurrent programs, including those with dynamic channel creation, unbounded thread creation and recursion. Our approach infers from a Go program a faithful representation of its communication patterns as a behavioural type. By checking a syntactic restriction on channel usage, dubbed fencing, we ensure that programs are made up of finitely many different communication patterns that may be repeated infinitely many times. This restriction allows us to implement a decision procedure for liveness and safety in types which in turn statically ensures liveness and safety in Go programs. We have implemented a type inference and decision procedures in a tool-chain and tested it against publicly available Go programs.

Update (27/2/2017): The camer-ready version on ACM DL was updated.

Update (17/2/2017): Errata for readers who have read earlier versions of the paper.

Please see this revised version of the paper previously appeared at POPL 2017, and the full version, complete with an appendix.

@inproceedings{LNTY2017,
  author = {Julien Lange and Nicholas Ng and Bernardo Toninho and Nobuko Yoshida},
  title = {{Fencing off Go: Liveness and Safety for Channel-based Programming}},
  booktitle = {44th ACM SIGPLAN Symposium on Principles of Programming Languages},
  pages = {748--761},
  publisher = {ACM},
  year = 2017
}
@inproceedings{LNTY2017,
  author = {Julien Lange and Nicholas Ng and Bernardo Toninho and Nobuko Yoshida},
  title = {{Fencing off Go: Liveness and Safety for Channel-based Programming}},
  booktitle = {44th ACM SIGPLAN Symposium on Principles of Programming Languages},
  pages = {748--761},
  publisher = {ACM},
  doi = "10.1145/3009837.3009847",
  year = 2017
}