A Radical Approach to Application Development / Радикальный подход к разработке приложений: 2.3 Myth 3: Dynamic Binding is Bad

Английский оригинал Перевод на русский

Сожалеем, но текст оригинала доступен только зарегистрированным пользователям.

Pico Lisp использует простую реализацию динамического поверхностного связывания. Содержимое ячейки, хранящей значение символа, сохраняется при входе в лямбда-выражение или окружение связывания, и затем устанавливается новое значение. При возврате, оригинальное значение восстанавливается. В результате, текущее значение символа определяется динамически по истории и состоянию выполнения, а не по статическим проверкам лексической среды.

SauleSaulite 16.04.13 в 11:55

0

Возможно, для интерпретируемой системы это самая простая и быстрая стратегия. Для просмотра значения ячейки не требуется никаких поисков (требуется только доступ к значению ячейки) и все символы (локальные или глобальные) обрабатываются одинаково.С другой стороны, компилятор может выдавать более эффективный код для лексического связывания, таким образом, скомпилированный код на Lisp обычно все усложняет из-за поддержки нескольких типов стратегий связывания.

SauleSaulite 18.04.13 в 02:49

0

Динамическое связывание - это очень мощный механизм. Получить доступ к текущему значению можно из любого места, сама переменная и ее значение - это всегда физически существующие "реальные вещи", а не то что "кажутся" ( как в случае с лексическим связыванием, и в какой-то степени с использованием транзитных символов в Pico Lisp (смотри ниже)).

SauleSaulite 18.04.13 в 02:58

0

К сожалению, большие возможности невозможны без больших рисков. Программист должен быть хорошо знаком с основными принципами, чтобы использовать их преимущества и избежать ловушек. Однако, пока мы будем придерживаться соглашений, рекомендованных Pico Lisp, риски будут минимальны.

SauleSaulite 18.04.13 в 03:02

0

Два типа ситуаций, когда результаты вычислений, задействующих динамическое связывание могут выйти из под контроля программиста:
символ связан с собой, и мы пытаемся изменить значение символа;
проблема фунарга (функционального аргумента), когда значение символа динамически изменяется сквозным кодом, который невидим в окружении текущего исходного кода.
Таких ситуаций можно избежать используя транзитные символы

mmamkin 18.04.13 в 16:33

0

Транзитные символы - это символы в Pico Lisp, которые выглядят, как строки (и часто используются в качестве строк), и которые лишь временно интернированы на время выполнения одного файла с исходным кодом (или только его части). Таким образом, они обладают лексическими возможностями, сопоставимыми со статическими идентификаторами в программах на языке C, только их поведение полностью динамическое, потому что они представляют собой нормальные символы во всех остальных отношениях.

SauleSaulite 19.04.13 в 03:55

0

Итак, правила просты: всякий раз, когда функция должна изменить значение переданной ей переменной или вычислить результат переданного выражения Lisp (прямо или косвенно), параметры этой функции должны быть записаны с помощью транзитных символов. Практический опыт показывает, что такие случаи редки в процессах высокоуровневой разработки программного обеспечения и имеют место в основном во вспомогательных библиотеках и системных инструментах.

SauleSaulite 18.04.13 в 12:19

0
Минутку...