У Си (не С++) есть очень приятная особенность: если ты видишь что в юните нет инклюда #include <stdlib.h>, то и память там никто в куче (скорее всего! ибо манипуляция адресами как хочешь не запрещена) не выделяет.
В Обероне же когда смотришь на модуль не ясно использует он динамическую память (NEW) или же нет. А это иногда бывает важно. Например пишешь ты некий сервер, причем пишешь так, чтобы он работал гарантированно без сборщика мусора (и сборщик мусора для этого отключаешь возможно даже) - все либо на стеке, либо глобально. И используешь стороннюю либу, которой из самых общих соображений нет причин использовать динамическую память. А тут бац, в одном модуле внезапно кто-то использует. И все. Либо тормоза, либо память кончится.
Или же скажем программирование под мелкоконтроллеры - памяти там скажем 512 Байт (а может быть конечно и 8 Кб). Ясно что динамическая память и тем более сборщик мусора там противопоказан. Но, тем не менее, иногда хочется повторно использовать там хорошо зарекомендовавшие себя модули с больших систем. И неплохо бы изначально убедиться что они не используют динамическую память.
Я тут вижу три варианта решения проблемы:
1) Модификация языка, такая, что для использования NEW было необходимо скажем импортировать модуль MemManager.
2) Решение на уровне компилятора - при специальном ключике компилятора он отрубит сборщик мусора и динамическую память вообще, и на NEW будет ругаться плохими словами.
3) Сторонняя тулза которая прошерстит исходники даденых модулей и скажет если вдруг кто-то динамической памятью там пользуется (хм. можно просто сделать grep * NEW).
При выборе варианта, видимо, не следует смотреть на обратную совместимость с существующими компиляторами и исходниками на Обероне.