Может ли компилятор автоматически определять чистые функции без информации о типе чистоты?

Итак, я спорю с моим другом, который утверждает, что компилятор, такой как GCC, может автоматически определять чистую функцию без какой-либо информации о типе. Я сомневаюсь, что.

Такие языки, как D или Haskell, имеют чистую систему типов, и программист явно определяет, какая функция является чистой, а какая нет. Чистая функция не имеет побочных эффектов и поэтому может быть очень легко распараллелена.

Итак, вопрос: все это необходимо или нет? Может ли компилятор определить чистоту без какой-либо мета-информации или информации о типе, просто предположив, что все, что выполняет ввод-вывод или автоматически обращается к глобальным переменным, не является чистым?

38
задан ehird 6 January 2012 в 16:50
поделиться