Что-то, в целом, какие-то необычные, что ли, "объединения" вырисовываются...
> -- budden писал(а):
> Так можно, но нужно тогда отлеживать все ссылки глобально, чтобы можно было убедиться, что в этом месте нет каких-то копий ссылки на эту же запись, через которую ничего не подозревающие бедолаги получат доступ к старым полям.
А если ещё и правила сформулировать на манер адовского SPARK насчёт выявления и запрета "модифицирующих" алиасов на объекты, то в итоге отнюдь не компактным репорт о языке окажется... А, главное, нужно уметь, как SPARK...

Имхо, "приземленный" вариант -- ограниченные "разделяемые" поля по месту, указанные выше, без какого-то managed или только untagged. Это альтернативные представления одних и тех же данных, которые должны быть доступны одновременно. Аналогичные правила должны быть и для директивы аля absolutе для "биндинга" переменных и параметров процедур. Остальные "объединения" должны быть под защитой типа или под "тегом" в рамках стандартных структурных типов.
Среди Оберонов впечатлила идея переосмысления Паскалевских вариантных записей в виде "процедурно-параметрического полиморфизма":
https://forum.oberoncore.ru/viewtopic.php?f=155&t=6656&start=80#p113659
http://www.softcraft.ru/ppp/

Я не в курсе конкретики в реализации оригинального проекта, но предположительно можно даже на стеке объявлять/переопределять "вариантные" объекты в случае локальных типов (объявляемых с LOCAL -- расширение типов только в границах модуля-владельца и его модулей-расширений), на манер вариантных записей в Ada с дискриминантами.
Модель типов универсальная, гибкая (видится потенциал и для "дженериков"). Если не ошибаюсь, изначально проект развивался как расширение Оберона 2, но затем произошла трансформация в собственный диалект (O2M) -- было убрано исходное "расширение" типов-записей, т.к. функционал пересекается. А в случае с А2 модель типов пересекается ещё и с object (хотя здесь терм можно рассматривать лишь как алиас для объявления указателя на запись), и с enum, однако...