Asynchronous activation and result retrieving
Moving computation to data
Transparent handling of failures and disconnections
Exploitation of massive parallelism
Interpreted code running on heterogeneous platforms