История изменений
Исправление theNamelessOne, (текущая версия) :
Disclaimer: сужу из того, что нагуглил сам, так что где-то могу ошибаться.
Чем отличается поверхностное связывание (shallow) от глубокого (deep).
С точки зрения пользователя они ничем не отличаются, это всего лишь два разных способа реализовать динамическое связывание.
При поверхностном связывании значение переменной хранится в самом символе (точнее, в его value-ячейке). То есть получение текущего значения переменной константно. При повторном связывании (rebinding) новое значение записывается в value-ячейку символа, старое значение сохраняется в стеке и восстанавливается, когда связывание покидает область видимости.
При глубоком же связывании значение переменной хранится в некотором стеке пар (association list), при этом поиск значения может занять некоторое время.
Вот демонстрация «на пальцах»: https://gist.github.com/wasabiz/3774210.
Очень хотелось бы услышать простое объяснение для новичка, если это возможно.
ИМХО, это должно быть интересно для разработчика своей реализации Lisp, но не для новичка.
Исходная версия theNamelessOne, :
Disclaimer: сужу из того, что нагуглил сам, так что где-то могу ошибаться.
Чем отличается поверхностное связывание (shallow) от глубокого (deep).
С точки зрения пользователя они ничем не отличаются, это всего лишь два разных способа реализовать динамическое связывание.
При поверхностном связывании значение переменной хранится в самом символе (точнее, в его value-ячейке). То есть получение текущего значения переменной константно. При повторном связывании (rebinding) новое значение записывается в value-ячейку символа, старое значение сохраняется в стеке и восстанавливается, когда связывание покидает область видимости.
При глубоком же связывании значение переменной хранится в некотором стеке пар (association list), при этом поиск значения может занять некоторое время
Вот демонстрация «на пальцах»: https://gist.github.com/wasabiz/3774210.
Очень хотелось бы услышать простое объяснение для новичка, если это возможно.
ИМХО, это должно быть интересно для разработчика своей реализации Lisp, но не для новичка.