Хочу добавить в ЯОС юнионы. Соответственно, вопрос, как их организовать? Понятно, что они должны быть безопасными. Первая идея была такая:
## Код:
```
тип объ = объединение(з1,з2);
тип з1 = запись (объ) перем а: цел32 кон;
тип з2 = запись (объ) перем а: цел64 кон;
```

Компилятор сначала разбирает тип "объ", запоминает, что это объединение, но не трогает список из его "аргументов". Получается просто запись с нулём полей. Далее от разбирает
типы з1 и з2 (они являются потомками типа "объ" и содержат, соответственно, поле а, но разного типа). Далее
компилятор возвращается к типу объ и определяет ему запас места, который не входит в состав потомков записи, но до которых всегда дополняется экземпляр объ. Запас определяется как максимальный размер из размеров з1 и з2, т.е. в объ всегда фактически поместится любой допустимый элемент объединения.

Далее в основном весь доступ происходит через обычные механизмы Оберона (т.е. WITH/просейТип и охрану типов), единственное, что пока неясно - это защита от подмены значения объединения в ситуации, когда кто-то уже
пользуется им.

Например, пусть уОбъ = укль на объ. Тогда Можно создать новый экземпляр объ на куче, заполнить его записью з1 и записать куда-нибудь в какую-нибудь переменную. Но потом внезапно делается присваивание уОбъ^ := экземпляр_з2 - и всё, система сломана.

Самое простое - это запретить такое присваивание, но кажется, что таким образом работать не будет - при всяческих обменах с Си, для которых, собственно и нужны такие объединения, наверняка принято переиспользовать экземпляры объединений, чтобы не выделять память при каждом вызове.