A function that is declared as pure can have no side effects.
For example, pure functions:
cannot
call impure functions
cannot use global variables or dereference pointers,
because the compiler assumes that the function does not access memory,
except stack memory
must return the same value each time when called
twice with the same parameters.