> -- GameHunter писал(а):
> Хотя, при объявлении типа массив неудобство всё-таки сохраняется.
Да, неудобство есть. Есть и другие неудобства, например, следующая процедура возвращает номер дня недели, соответствующий указанной дате:
## Код:
```
PROCEDURE DayOfWeek* (IN d: Date): INTEGER;
```

Если возвращаемое значение = 0, то это понедельник (как у нас) или воскресенье (как у них)? Надо сравнивать с константой Monday либо Sunday.  Вопрос: где объявлены нужные константы? В этом же модуле? Не обязательно. Надо искать, рыть документацию. Это во-первых.

А во-вторых, никто не помешает этот результат сравнить с любой другой целочисленной константой, например, Sundae (десерт такой). Представьте, что мы пишем программу, которая помогает составить меню для ресторанчика на неделю, и возможные блюда мы объявили в виде констант. Как видите, опечатка не так уж невозможна, а компилятор промолчит, спокойно сравнивая десерт с днем недели.

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

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