Source: https://www.langages.ch/blog/wp-content/uploads/2009-revue-montheron-2.pdf