В контексте языка FunC эти три варианта определяют концепцию чистой функции.
Чистая функция - это функция, которая:
A) ** Считывает только значения, переданные** ему в качестве параметров, и не обращается ни к какому внешнему состоянию. Это означает, что его выходные данные определяются исключительно входными параметрами.
B) ** Может считывать значения вне параметров функции, но его вывод по-прежнему зависит только от значений, переданных ему в качестве параметров. ** Он не полагается ни на какое внешнее состояние или глобальные данные.
C) Может ** считывать значения вне параметров функции ** , но его выходные данные должны быть независимыми от каких-либо глобальных данных. Это означает, что он не должен использовать какие-либо глобальные переменные или данные или зависеть от них.
Эти определения чистой функции помогают гарантировать, что выходные данные функции предсказуемы и непротиворечивы, что облегчает их понимание, тестирование и отладку.
Практически: а) присутствует модификатор "нечистый" - гарантирует правильное поведение б) отсутствует модификатор "нечистый" - компилятор функции будет делать странные вещи, например, удалять некоторый код без вашего разрешения.
Это автоматически удалит вызов функции в двух случаях: a) функция ничего не возвращает: () fun() { }
б) функция возвращает что-то, но это что-то ничему не присваивается:
(int) fun() { return 5; }
...
int a = fun(); ;; fun is called
fun(); ;; fun call is removed"