Ленивое связывание: различия между версиями
(Новая страница: «'''Ленивое связывание''' - приём в программировании, подразумевающий установление связи м...») |
|||
Строка 1: | Строка 1: | ||
− | '''Ленивое связывание''' - приём в программировании, подразумевающий установление связи между переменной, функцией или иной именованной сущностью и её значением в последний момент, только тогда, когда использование этого значения становится непосредственно необходимым. | + | '''Ленивое связывание''' - приём в программировании, подразумевающий [[Связывание (программирование)|установление связи]] между [[Переменная|переменной]], [[Функция|функцией]] или иной [[Именованные объекты в программирование|именованной сущностью]] и её [[Значение (программирование)|значением]] в последний момент, только тогда, когда использование этого значения становится непосредственно необходимым. До этого момента все манипуляции [[Компилятор|компилятора]] и/или [[Среда выполнения программы|среды выполнения]] с подлежащей, в дальнейшем, связыванию сущностью, осуществляются как с целостным объектом, без учёта его значения. |
− | Как правило, это подразумевает, что связывание происходит в момент выполнения программы, а не в период компиляции. | + | Как правило, всё это подразумевает, что связывание происходит в момент [[Выполнение программы|выполнения программы]], а не в период компиляции<ref>Это, впрочем, не обязательно, т.к. связывание может потребоваться при использовании [[Макрогенерация (программирование)|макрогенерации]] во время [[Компиляция (программирование)|компиляции]].</ref>. |
+ | |||
+ | Ленивое и [[динамическое связывание]] являются достаточно схожими понятиями, но, всё же, различаются. В отличие от по-настоящему ленивого, динамическое связывание может быть осуществлено средой выполнения ПО на этапе выполнения программы, но существенно до реальной необходимости использования связанных с именованными объектами значений. Например, при входе в область видимости какой-то функции, среда выполнения могла бы проинициализировать все объявляемые в ней локальные переменные значениями, и это связывание будет динамическим. | ||
+ | |||
+ | Но ленивым оно не будет, так как, возможно, некоторые из этих переменных не будут использованы при конкретной отработке этой функции (а, может быть, и вообще никогда). | ||
+ | |||
+ | == Значение == | ||
+ | Ленивое связывание - это довольно удобная и мощная концепция, но, как и все подобные механизмы, она требует от программиста серьёзной дисциплины ума. Увеличивая выразительную мощность кода, в общем случае она снижает его обозримость и, в ряде ситуаций, может провоцировать крайне неочевидные ошибки. | ||
== Примечания == | == Примечания == | ||
[[Категория:Механизмы языков программирования]] | [[Категория:Механизмы языков программирования]] |
Версия от 02:39, 23 сентября 2023
Ленивое связывание - приём в программировании, подразумевающий установление связи между переменной, функцией или иной именованной сущностью и её значением в последний момент, только тогда, когда использование этого значения становится непосредственно необходимым. До этого момента все манипуляции компилятора и/или среды выполнения с подлежащей, в дальнейшем, связыванию сущностью, осуществляются как с целостным объектом, без учёта его значения.
Как правило, всё это подразумевает, что связывание происходит в момент выполнения программы, а не в период компиляции[1].
Ленивое и динамическое связывание являются достаточно схожими понятиями, но, всё же, различаются. В отличие от по-настоящему ленивого, динамическое связывание может быть осуществлено средой выполнения ПО на этапе выполнения программы, но существенно до реальной необходимости использования связанных с именованными объектами значений. Например, при входе в область видимости какой-то функции, среда выполнения могла бы проинициализировать все объявляемые в ней локальные переменные значениями, и это связывание будет динамическим.
Но ленивым оно не будет, так как, возможно, некоторые из этих переменных не будут использованы при конкретной отработке этой функции (а, может быть, и вообще никогда).
Значение
Ленивое связывание - это довольно удобная и мощная концепция, но, как и все подобные механизмы, она требует от программиста серьёзной дисциплины ума. Увеличивая выразительную мощность кода, в общем случае она снижает его обозримость и, в ряде ситуаций, может провоцировать крайне неочевидные ошибки.
Примечания
- ↑ Это, впрочем, не обязательно, т.к. связывание может потребоваться при использовании макрогенерации во время компиляции.