> -- Peter Almazov писал(а):
> в каких случаях разработчик модуля должен использовать этот атрибут?Как сказал Сергей Губанов, использование атрибута носит рекомендательный характер. Необходимость использования задаётся семантикой, которую разработчики языка - понятное дело - не знают.

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

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

Примерно то же  самое сказал и Сергей Губанов, но я посчитал, что стоит развить идею и не дать понять неправильно : ).