Строгий язык программирования
В данной статье поднимается несколько вопросов. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Строгий язык программирования — это язык программирования , который позволяет пользователю определять только строгие функции (функции, параметры которых должны быть полностью вычислены перед их вызовом). позволяет Нестрогий язык программирования пользователю определять нестрогие функции и, следовательно, может допускать отложенное вычисление . В большинстве нестрогих языков нестрогость распространяется и на конструкторы данных .
Описание [ править ]
Строгий язык программирования — это язык программирования , в котором используется парадигма строгого программирования , позволяющая пользователю определять только строгие функции (функции, параметры которых должны быть полностью оценены перед их вызовом). Нестрогий язык программирования позволяет пользователю определять нестрогие функции и, следовательно, может допускать отложенное вычисление . [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 г.