Concurrency and computation: practice and experience