Каковы преимущества динамического обзора?

27
задан JasonMArcher 4 May 2015 в 05:40
поделиться

5 ответов

Как все остальное, Динамический Обзор является просто инструментом. Используемый хорошо это может сделать определенные задачи легче. Используемый плохо это может представить ошибки и головные боли.

я могу, конечно, видеть некоторое использование для него. Можно избавить от необходимости передавать переменные некоторым функциям.

, Например, я мог бы настроить дисплей в начале программы, и каждая графическая операция просто принимает этот дисплей.

, Если я хочу настроить окно в том дисплее, тогда я могу 'добавить', что окно к переменному стеку, который иначе определяет дисплей и любые графические операции, выполненные, в то время как в этом состоянии перейдет к окну, а не дисплею в целом.

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

-Adam

35
ответ дан Adam Davis 28 November 2019 в 04:30
поделиться

Основной риск с динамическим контекстом является непреднамеренными последствиями. Динамический обзор заставляет объем следовать за стеком этапа выполнения, что означает, что набор символов в объеме намного больше и совсем не очевиден при любом использовании символа. Динамично ограниченные по объему переменные много похожи на глобальные переменные, только может быть больше чем одна версия каждой переменной только с последним видимым определением, скрыв все другие.

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

  • обработка исключений - самый верхний блок выгоды является тем, который является "в объеме", когда исключение происходит
  • безопасность-.NET, основанная на коде безопасность принимает решения о доступности определенных привилегированных API на основе того, что код назвал им.

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

15
ответ дан Barry Kelly 28 November 2019 в 04:30
поделиться

Динамический обзор полезен на некоторых проблемно-ориентированных языках. В частности, это может быть handly на языках таблицы стилей. Мой опыт от язык таблицы стилей GNU TeXmacs .

В этом дисплее языка параметры хранятся в динамично ограниченных по объему переменных. Те переменные влияют на рендеринг каждого атома в их объеме, включая атомы, которые производятся функциями, вызванными в объеме.

Динамический обзор в TeXmacs также используется, среди прочего, для маркировки перекрестных ссылок. Привязки, используемые для перекрестных ссылок, получают свою маркировку от их среды. Например, привязка, включенная в блок формулы, будет использовать число формулы в качестве маркировки вместо числа раздела для привязки, расположенной после формулы.

Задумываются о нем, переменные среды Unix являются также динамично ограниченными по объему переменными. Хотя внутренние объемы не могут изменить значение переменных во внешних объемах.

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

8
ответ дан Community 28 November 2019 в 04:30
поделиться

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

Очевидно, что динамическое определение объема делает определенные предположения относительно характеристик времени выполнения сайт вызова для данной функции, которая не может быть гарантирована во время компиляции (или разработки). Опять же, следуя примеру современного (Java) компонента инфраструктуры, если вы создадите экземпляр такого класса вне контролируемой (среды выполнения) контейнера, вполне возможно, что класс не сможет функционировать, поскольку его требуемые зависимости не будут инициализированы (иначе говоря, введены).

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

Внедрение зависимостей является базовым средством достижения этого. Динамическое определение объема - это уровень языка.

Внедрение зависимостей является базовым средством достижения этого. Динамическое определение объема - это уровень языка.

6
ответ дан 28 November 2019 в 04:30
поделиться

Dynamically scoped variables are a powerful, but also sometimes unintuive and dangerous tool.

Imagine you want to have thread specific global variables, i.e. every thread has its own set of global variables. This can easily be done with dynamic scope. Just change the references to this variables at thread initialization.

Or think about exceptions: they are dynamically scoped in most languages. If you had to build an exceptions system from scratch, you could easily do that with dynamically scoped variables.

1
ответ дан 28 November 2019 в 04:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: