Строгий язык программирования — это язык программирования , который позволяет пользователю определять только строгие функции (функции, параметры которых должны быть полностью вычислены до того, как они могут быть вызваны). Нестрогий язык программирования позволяет пользователю определять нестрогие функции и, следовательно, может допускать ленивую оценку . В большинстве нестрогих языков нестрогость распространяется на конструкторы данных .
Строгий язык программирования — это язык программирования , который использует строгую парадигму программирования , позволяя пользователю определять только строгие функции (функции, параметры которых должны быть полностью оценены, прежде чем они могут быть вызваны). Нестрогий язык программирования позволяет пользователю определять нестрогие функции и, следовательно, может допускать ленивую оценку . [1]
Нестрогость имеет ряд недостатков, которые помешали ее широкому распространению: [ необходима ссылка ]
Строгие языки программирования часто ассоциируются с энергичной оценкой , а нестрогие языки — с ленивой оценкой , но в каждом случае возможны и другие стратегии оценки . [ требуется ссылка ] Термины «энергичный язык программирования» и «ленивый язык программирования» часто используются как синонимы для «строгого языка программирования» и «нестрогого языка программирования» соответственно. [ требуется ссылка ]
Почти все языки программирования , которые сегодня широко используются, являются строгими. [ требуется ссылка ] Примерами служат C# , Java , Perl (все версии, т. е. до версии 5 и версии 7), Python , [2] Ruby , Common Lisp и ML . Некоторые строгие языки программирования включают функции, имитирующие ленивость. [ требуется пояснение ] Raku (ранее известный как Perl 6) имеет ленивые списки, [3] Python имеет функции-генераторы, [4] а Julia предоставляет систему макросов для создания нестрогих функций, [5] как и Scheme .
Примерами нестрогих языков являются Haskell , R , Miranda и Clean . [6]
В большинстве нестрогих языков нестрогость распространяется на конструкторы данных . Это позволяет манипулировать концептуально бесконечными структурами данных (такими как список всех простых чисел ) так же, как и обычными конечными структурами данных. Это также позволяет использовать очень большие, но конечные структуры данных, такие как полное игровое дерево шахмат .
Python фокусируется на строгой оценке
функция генератора не является строгой. [...] мы можем использовать функции генератора для создания ленивых вычислений.