В другой ветке форума я высказал мысль, что вот бы отказаться от object scope в А2. В ответ:
viewtopic.php?f=22&t=6634&p=112500#p112495
> -- Sergej Durmanov писал(а):
> Чтобы быть честным, и оберонов нужно выкинуть и module scope, ,существенно услодняющий понимание и т.д и т.п

Если я правильно понял Сергея, речь о том, что доступ к глобальным переменным должен быть явным. Я нередко об этом думаю, и мне интересно, что скажут коллеги.

Почему бы не распространить общее правило и не использовать имя модуля для доступа к локальным переменным:
## Код:
```
MODULE M;
   VAR i, j: INTEGER;

   PROCEDURE P;
      VAR i: INTEGER;
   BEGIN i := M.i; i := j (* X undeclared identifier *)
   END P;
END M.
```


Напрашивается тогда и вопрос о том, не потребовать ли квалификации имен переменных из "окружающих" процедур:
## Код:
```
PROCEDURE Q;
   VAR i: INTEGER;

   PROCEDURE P;
      VAR i: INTEGER;
   BEGIN i := Q.i
   END P;
END Q;
```

Почему бы и нет?

Хотя лично я решил этот последний вопрос для себя иначе: отказом от вложенных процедур. Лично в своих текстах я отказался от их использования. Почему? Когда читаю чужие тексты и нахожу вложенные процедуры, неизменно чувствую, что возрастает напряжение. В душе, не в электрической сети ). И беспокойство и неприязнь. Возможно, потому что в этой ситуации нужно в уме держать три области видимости, а это как раз и требует напряжения; и часто вложенные процедуры - это на несколько страниц, и "границы" самой внешней того и гляди проскочишь прокруткой - это беспокойство. Но для меня это вопрос стиля, я вообще избегаю процедур, которые в один экран не помещаются.

Кажется, в каком-то из последних Оберонов Вирт так сделал.


Что скажете, коллеги?