Ева уходит только одна глобальная область видимости и одна локальная область видимости.

Добро пожаловать в третью часть моей серии VI, посвященной Еве, захватывающему и увлекательному новому языку программирования.

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

Если мы приостанавливаем типичную программу в отладчике, довольно ошеломляюще видеть все неясные маленькие пулы состояний, хранящиеся в памяти:

  1. Область, локальная для текущей функции или блока
  2. Цепочка замыканий, хранящая локальные переменные для всех блоков кода, в которые вложен текущий блок.
  3. Дополнительные цепочки замыканий, по одной для каждой функции, к которой мы можем получить доступ из нашей текущей области видимости.

Вот простой пример:

Посмотрите на все небольшие пулы состояний, которые существуют, когда мы дойдем до строки 14:

  1. bWithScopeChain и value являются локальными для g
  2. fVar на один уровень выше по цепочке, часть Closure (f)
  3. aVar нигде в цепочке областей видимости g, но ее значение 1 все еще живо и хорошо в памяти, потому что в настоящее время оно находится в цепочке областей видимости bWithScopeChain

Лексическая область видимости кажется хорошим способом делать что-то, когда вы пишете код f. Но когда вы запустили f() и теперь что-то работает не так, лексическая область видимости внезапно превращается в кошмар, потому что нет возможности использовать любое состояние f из командная строка. Что ты можешь сделать?

Мы оба знаем, что вы, вероятно, начнете нервничать, если будете console.log действовать. Если вы не предпочитаете использовать отладчик для пошагового выполнения вашей программы, что не менее удобно, чем использование Google Планета Земля для визуализации реки Миссисипи ... при максимальном увеличении.

Есть выход из этой неразберихи. В случае с Евой нам нужно иметь дело только с двумя прицелами:

  • Локальная область действия
    Каждый блок кода Eve может иметь свои собственные локальные переменные.
  • Глобальная область действия
    Любое состояние, которое сохраняется от одного временного шага к другому, должно существовать в некоторой базе данных, и любая часть программы может запрашивать любую базу данных.

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

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

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

Следующая запись:
IV. Smalltalk и белковое программирование

Хакерский полдень - это то, с чего хакеры начинают свои дни. Мы часть семьи @AMI. Сейчас мы принимаем заявки и рады обсуждать рекламные и спонсорские возможности.

Если вам понравился этот рассказ, мы рекомендуем прочитать наши Последние технические истории и Современные технические истории. До следующего раза не воспринимайте реалии мира как должное!