Source: https://www.tfd.chalmers.se/~hani/kurser/OS_CFD_2015/highLevelProgramming.pdf