Строгий язык программирования - Strict programming language

А строгий язык программирования это язык программирования где используется строгий парадигма программирования, позволяя только строгие функции (функции, параметры которых должны быть полностью оценены, прежде чем они могут быть вызваны), которые должны быть определены пользователем. А нестрогий язык программирования позволяет пользователю определять нестрогие функции и, следовательно, может разрешить ленивая оценка.[1]

Примеры

Почти все языки программирования в обиходе сегодня строгие. Примеры включают C #, Ява (до Java 8), Perl (до версии 5), Python, Рубин, Common Lisp, и ML. Примеры для нестрогих языков: Haskell, Миранда, и Чистый.[2]Языки, чьи обычные функции являются строгими, но которые обеспечивают система макросов для создания нестрогих функций включают C, C ++, и Схема.

Объяснение

В большинстве нестрогих языков нестрогость распространяется на конструкторы данных. Это позволяет концептуально бесконечные структуры данных (например, список всех простые числа ), с которыми можно работать так же, как с обычными конечными структурами данных. Это также позволяет использовать очень большие, но конечные структуры данных, такие как полные игровое дерево из шахматы.

У нестрогости есть несколько недостатков, которые препятствуют широкому распространению:

  • Из-за неопределенности относительно того, будут ли выражения оцениваться и когда, нестрогие языки обычно должны быть чисто функциональный быть полезным.
  • Все аппаратные архитектуры в общем случае оптимизированы для строгих языков, поэтому лучшие компиляторы для нестрогих языков производят более медленный код, чем лучшие компиляторы для строгих языков.
  • Космическая сложность нестрогих программ сложно понять и спрогнозировать.

Строгие языки программирования часто ассоциируются с жадная оценка, и нестрогие языки с ленивая оценка, но другие стратегии оценки возможны в каждом случае. Термины «энергичный язык программирования» и «ленивый язык программирования» часто используются как синонимы для «строгого языка программирования» и «нестрогого языка программирования» соответственно.

Во многих строгих языках некоторые преимущества нестрогих функций могут быть получены за счет использования макросы или же thunks.

Цитаты

  1. ^ Скотт 2006, п. 541.
  2. ^ Cluet & Hull 1998 С. 25–26.

Рекомендации

  • Скотт, Майкл Ли (2006) [1999], Макфадден, Нейт; и другие. (ред.), Прагматика языка программирования, Том 2, Издатель Дениз Пенроуз (2nd ред.), Сан-Франциско: Морган Кауфманн, ISBN  9780126339512, OCLC  551774322, получено 21 ноября 2014
  • Cluet, Софи; Халл, Рик; и др., ред. (1998) [1997], Языки программирования баз данных, Конспект лекций по информатике, том 1369, Берлин; Гейдельберг: Springer, ISBN  9783540648239, ISSN  0302-9743, OCLC  873553545, получено 21 ноября 2014