Functions can be memoized, procedures cannot. This means that you cannot use anything from mathematical logic for compiler optimizations or program checking/linting or verification. It basically means that you go from at least the possibility of proving something about your operating system/compiler/distributed system correct to it being impossible to prove the most trivial things.