> А что если ввести в ЯП (например КП, Оберон) функции с исключительно локальными переменными?
На уровне языка вводить не оязательно, такое просто детектируется автоматически.
> Для константных выражений становится доступна рекурсия, выполнением которой занимается компилятор.
Циклы и рекурсия усложняют реализацию такой оптимизации. Надо как-то гарантировать отсутствие бесконечных циклов перед вычислением.
Сходу такие гарантии можно дать разве что для цикла for-each, с некоторыми ограничениями для for, а как быть с общим случаем - хз.
> Правда, в таких функциях нужно применять модифицированный синтаксис: предложения (statement) IF/CASE должны всегда иметь альетнативную ветку и стать выражениями (expression).
Ветвь else не надо делать обязательной. Для case можно как раз сделать проверки в компилтайме.
Expression-синтаксис для IF можно добавить разве что для удобства, так-то он не особо нужен.
Тернарный оператор вроде был уже в Oberon-V.