Строгий язык программирования
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Строгий язык программирования — это язык программирования только строгие функции , который позволяет пользователю определять (функции, параметры которых должны быть полностью вычислены перед их вызовом). Нестрогий язык программирования позволяет пользователю определять нестрогие функции и, следовательно, может допускать отложенное вычисление . В большинстве нестрогих языков нестрогость распространяется и на конструкторы данных .
Описание [ править ]
Строгий язык программирования — это язык программирования , в котором используется парадигма строгого программирования только строгие функции , позволяющая пользователю определять (функции, параметры которых должны быть полностью оценены перед их вызовом). Нестрогий язык программирования позволяет пользователю определять нестрогие функции и, следовательно, может допускать отложенное вычисление . [1]
Нестрогость имеет несколько недостатков, которые препятствуют широкому распространению: [ нужна ссылка ]
- Из-за неопределенности относительно того, будут ли вычисляться выражения и когда, нестрогие языки обычно должны быть чисто функциональными, чтобы быть полезными.
- Все широко используемые аппаратные архитектуры оптимизированы для строгих языков, поэтому лучшие компиляторы для нестрогих языков создают более медленный код, чем лучшие компиляторы для строгих языков.
- Пространственную сложность нестрогих программ трудно понять и предсказать.
- Во многих строгих языках некоторые преимущества нестрогих функций можно получить за счет использования макросов или переходников .
Строгие языки программирования часто ассоциируются с нетерпеливым вычислением , а нестрогие языки — с ленивым вычислением , но и другие стратегии оценивания . в каждом случае возможны [ нужна ссылка ] Термины «язык энергичного программирования» и «язык ленивого программирования» часто используются как синонимы «язык строгого программирования» и «язык нестрогого программирования» соответственно. [ нужна ссылка ]
Примеры [ править ]
Почти все языки программирования являются строгими. широко используемые сегодня [ нужна ссылка ] Примеры включают C# , Java , Perl (все версии, т.е. до версии 5 и версии 7), Python , [2] Ruby , Common Lisp и ML . Некоторые строгие языки программирования включают в себя функции, имитирующие лень. [ нужны разъяснения ] В Raku (ранее известном как Perl 6) есть ленивые списки, [3] В Python есть функции генератора, [4] а Julia предоставляет систему макросов для создания нестрогих функций, [5] как и Схема .
Примерами нестрогих языков являются Haskell , R , Miranda и Clean . [6]
Расширение [ править ]
В большинстве нестрогих языков нестрогость распространяется и на конструкторы данных . концептуально бесконечными структурами данных (такими как список всех простых чисел Это позволяет манипулировать ) так же, как и обычными конечными структурами данных. Это также позволяет использовать очень большие, но конечные структуры данных, такие как полное дерево игры в шахматы .
Цитаты [ править ]
- ^ Скотт 2006 , с. 541.
- ^ Лотт, Стивен (2015). Функциональное программирование на Python . Бирмингем, Великобритания: Packt Publishing. п. 35. ISBN 978-1-78439-699-2 .
Python фокусируется на строгой оценке
- ^ «Программирование Raku/ленивые списки и каналы — Wikibooks, открытые книги для открытого мира» . ru.wikibooks.org . Проверено 9 февраля 2021 г.
- ^ Лотт, Стивен (2015). Функциональное программирование на Python . Бирмингем, Великобритания: Packt Publishing. п. 35. ISBN 978-1-78439-699-2 .
функция-генератор нестрогая. [...] мы можем использовать функции генератора для создания ленивых вычислений.
- ^ Иннес, Майк Дж. (06 февраля 2021 г.), MikeInnes/Lazy.jl , получено 9 февраля 2021 г.
- ^ Cluet & Hull 1998 , стр. 25–26.
Ссылки [ править ]
- Скотт, Майкл Ли (2006) [1999], Макфадден, Нейт; и др. (ред.), Прагматика языков программирования , вып. 2, опубликовано Дениз Пенроуз (2 nd ред.), Сан-Франциско: Морган Кауфманн, ISBN 9780126339512 , OCLC 551774322 , получено 21 ноября 2014 г.
- Клюэ, Софи; Халл, Рик; и др., ред. (1998) [1997], Языки программирования баз данных , Конспекты лекций по информатике, вып. 1369, Берлин; Гейдельберг: Springer, ISBN 9783540648239 , ISSN 0302-9743 , OCLC 873553545 , получено 21 ноября 2014 г.