A Radical Approach to Application Development / Радикальный подход к разработке приложений: 2.3 Myth 3: Dynamic Binding is Bad
| Английский оригинал | Перевод на русский | |
|---|---|---|
Сожалеем, но текст оригинала доступен только зарегистрированным пользователям. |
Pico Lisp использует простую реализацию динамического поверхностного связывания. Содержимое ячейки, хранящей значение символа, сохраняется при входе в лямбда-выражение или окружение связывания, и затем устанавливается новое значение. При возврате, оригинальное значение восстанавливается. В результате, текущее значение символа определяется динамически по истории и состоянию выполнения, а не по статическим проверкам лексической среды. SauleSaulite 16.04.13 в 11:55 |
|
|
Возможно, для интерпретируемой системы это самая простая и быстрая стратегия. Для просмотра значения ячейки не требуется никаких поисков (требуется только доступ к значению ячейки) и все символы (локальные или глобальные) обрабатываются одинаково.С другой стороны, компилятор может выдавать более эффективный код для лексического связывания, таким образом, скомпилированный код на Lisp обычно все усложняет из-за поддержки нескольких типов стратегий связывания. SauleSaulite 18.04.13 в 02:49 |
||
|
Динамическое связывание - это очень мощный механизм. Получить доступ к текущему значению можно из любого места, сама переменная и ее значение - это всегда физически существующие "реальные вещи", а не то что "кажутся" ( как в случае с лексическим связыванием, и в какой-то степени с использованием транзитных символов в Pico Lisp (смотри ниже)). SauleSaulite 18.04.13 в 02:58 |
||
|
К сожалению, большие возможности невозможны без больших рисков. Программист должен быть хорошо знаком с основными принципами, чтобы использовать их преимущества и избежать ловушек. Однако, пока мы будем придерживаться соглашений, рекомендованных Pico Lisp, риски будут минимальны. SauleSaulite 18.04.13 в 03:02 |
||
|
Два типа ситуаций, когда результаты вычислений, задействующих динамическое связывание могут выйти из под контроля программиста: mmamkin 18.04.13 в 16:33 |
||
|
Транзитные символы - это символы в Pico Lisp, которые выглядят, как строки (и часто используются в качестве строк), и которые лишь временно интернированы на время выполнения одного файла с исходным кодом (или только его части). Таким образом, они обладают лексическими возможностями, сопоставимыми со статическими идентификаторами в программах на языке C, только их поведение полностью динамическое, потому что они представляют собой нормальные символы во всех остальных отношениях. SauleSaulite 19.04.13 в 03:55 |
||
|
Итак, правила просты: всякий раз, когда функция должна изменить значение переданной ей переменной или вычислить результат переданного выражения Lisp (прямо или косвенно), параметры этой функции должны быть записаны с помощью транзитных символов. Практический опыт показывает, что такие случаи редки в процессах высокоуровневой разработки программного обеспечения и имеют место в основном во вспомогательных библиотеках и системных инструментах. SauleSaulite 18.04.13 в 12:19 |
