io.on («соединение», & hellip;) против io.sockets.on («соединение», & hellip;)

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

Интерпретация включает в себя отслеживание трех вещей:

1) Состояние, а именно, переменные и ссылочные ячейки памяти в куче и стеке.

2) Операции над этим состоянием - а именно, каждая строка кода в вашей программе

3) Окружающая среда, в которой выполняется данная операция, а именно проекция состояния на операцию.

Интерпретатор запускается в первой строке кода в программе, вычисляет его среду, запускает строку в этой среде и фиксирует ее влияние на состояние программы. Затем он следует за потоком управления программой для выполнения следующей строки кода и повторяет процесс до завершения программы.

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

. Это структура, в которой определена задача определения области видимости. Теперь к следующей части наших опций.

  • Как разработчик интерпретатора вы могли бы упростить свою задачу, сделав среду как можно ближе к состоянию программы. Соответственно, среда строки кода будет просто определяться средой предыдущей строки кода с эффектами применяемой к ней операции, независимо от того, была ли предыдущая строка назначением, вызовом функции, возвратом от функции, или структура управления, такая как цикл while.

Это суть динамического охвата, в котором среда, в которой работает любой код, связана с состоянием программы, как определено ее выполнением context.

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

Другими словами, с помощью Lexical Scope среда, которую видит любой код, привязана к состоянию, связанной с областью, определенной явно на языке, например блоком или функция.

30
задан Srinath 17 June 2014 в 14:50
поделиться