Из-за волны критики для использования Глобального Вара в моем сообщении Java я хочу использовать язык без глобального Вара. Одно предложение на ответ, спасибо.
Если вам не нужны глобальные переменные, тогда не используйте их. Я не понимаю, почему поиск языка, который их не поддерживает, может принести какую-то пользу. Вы имеете дело с вопросом области видимости. Сделайте так, чтобы ваши переменные существовали в минимально возможной области видимости, и все будет в порядке. Не существует языка, который не имел бы глобальной области видимости.
Ну, я читал, что Graal - это функциональный язык программирования без переменных, так что я думаю, что это можно сделать.
Я считаю, что Эйфель не использует глобальные переменные, но это не является серьезным критерием
использовать язык или нет.
Если вы хотите избежать побочных эффектов, вы можете использовать один из чистых функциональных языков программирования, таких как haskell (или erlang или ...), в которых есть только константы. Но будьте готовы к совершенно другому виду программирования по сравнению с императивным стилем программирования.
Я не уверен, что вы буквально имеете в виду отсутствие глобальных переменных (значения, которые меняются), или если вы также хотите исключить глобальные константы (значения, которые не меняются). Haskell - один из таких языков, в котором нет глобальных переменных, но есть глобальные константы (по сути, в форме функций без параметров). В Haskell, если вы хотите имитировать глобальное состояние, вы должны передать свои «глобальные» переменные в каждую вызываемую функцию. Лучшее описание доступно на HaskellWiki .
В Java (и подобных ООП-языках) нет действительно глобальных переменных, все переменные привязаны к экземпляру или классу. Но я думаю, что вы также хотите отменить "симулированные" глобальные переменные (публичные поля, доступ к которым возможен только извне). Я не думаю, что какой-либо из популярных языков не позволяет этого, но более необычные языковые концепции могут иметь способы избежать таких вещей.