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