Concurrency and computation: Practice and experience