SCOOP: Language extensions and compiler optimizations for task-based programming models