Vlad писал(а):
Если "учебные тексты" позволяют "иметь модули прямо в тексте и там их компилировать и проч", то научить их компилировать в файлы с определенными именами ничего не стоит. Зачем тянуть это в язык?
Видите ли, какое дело… Есть понятие "сущность" в языке программирования (в данном случае, в Обероне). Она называется модуль. Она основополагающая в этом языке. Есть понятие "файл". Это понятие не языка, а ОС. Как только осуществляется совмещение (отождествление) этих понятий, возникают элементарные проблемы, связанные с совмещением логического и физического представления сущности. Они слипаются. Одно понятие становится перегруженным (файл), другое приобретает чужие свойства, которые к нему не имеют отношения (модуль).
В программировании можно работать на уровне конкретных ячеек памяти, но предпочитают все же использовать другую сущность -– переменную (variable). Поименованную в рамках языка, а не физического представления (точного адреса). При этом за соответствием логического и физического представления следит соответствующий механизм (например, линкующий загрузчик), который позволяет осуществлять контроль и обеспечивать "свободное скольжение" логического представления по физическому.
Теперь посмотрим варианты возможного отображения логического представления (модуля) на физическое (файл).
1. В одном файле может быть несколько модулей (пример: один электронный документ с несколькими блоками исходных текстов модулей – при использовании концепции активных документов каждый из этих модулей может тут же быть скомпилирован и запущен).
2. Модуль может находиться в нескольких файлах (так на самом деле и происходит: несколько интерфейсов, несколько реализаций).
3. Модуль может находиться и не в файле (а в поле БД; не только по технологическим соображениям, но и если в данной ОС это является основной формой представления долговременной информации, тогда как файл – вспомогательной формой).
Если модуль совмещается с файлом (да еще без указания своего имени), то любые манипуляции на уровне файловой системы автоматически затрагивают проектные вопросы: стоит переименовать файл, и это уже другой модуль (сменили ячейку памяти – и уже другая переменная). В Модуле-2 ошибки подобного плана всплывали элементарно (компилятор использовал стратегию поиска файла, чье имя формировалось очевидным образом по имени модуля, но несовпадение имени файла и имени модуля свидетельствовало о недосмотре разработчика – это дополнительный важный контроль, особенно полезный в крупных промышленных проектах).
А теперь подумаем, чего мы добьемся, исключив строку MODULE имя_модуля. Мы сэкономили на ерунде, получив взамен много ненужных проблем. И ради чего?