LINUX.ORG.RU

История изменений

Исправление 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, но не для новичка.