Describir: Principles of concurrent and distributed programming /