Начну с цитаты.> -- N.Wirth in Oberon-2 Report - 9.1 Assignments писал(а):
> If an expression  of type  is assigned to a variable  of type , the following happens:1. if  and  are record types, only those fields of  are assigned which also belong to  (); the dynamic type of  must be the same as the static type of  and is not changed by the assignment;Другими словами, если у нас есть следующий код:## Код:
```
TYPE
   Tv = RECORD x: INTEGER END;
   Te = RECORD (Tv) y: INTEGER END;
VAR
   v: Tv;
   e: Te;
BEGIN
   v := e;
```
, то в результате должно бытьv.x=e.x, а значениеe.yв присваивании не участвует и должно быть проигнорировано благодаряprojection. Здесь у нас типTeбыл шире, чемTv, то есть присваивали большее меньшему и лишнее игнорировали. Рассмотрим теперь обратную ситуацию:## Код:
```
TYPE
   Te = RECORD x: INTEGER END;
   Tv = RECORD (Te) y: INTEGER END;
VAR
   v: Tv;
   e: Te;
BEGIN
   v := e;
```
Теперь расширенному типу присваивается базовый (большему меньший). В результате, как и в первом случае, должно бытьv.x=e.x, а благодаряprojectionзначениеv.yдолжно остаться неизменным.

Другими словами, в обоих вариантах объявления типов должны быть легальны оба присваивания:## Код:
```
v := e; e := v;
```

Правильно ли я понимаю механизм проекции в присваивании?

Что имеем на практике?
XDS допускает только первый вариант присваивания, а на второй ругается "incompatible types".
BlackBox 1.5 и 1.6 запрещают ОБА ПРИСВАИВАНИЯ!## Код:
```
MODULE PrivTestProjection;

   PROCEDURE Do* ();
      TYPE
         Base = EXTENSIBLE RECORD x: INTEGER END;
         Ext  = RECORD (Base) y: INTEGER END;
      VAR
         base: Base;
         ext : Ext;
   BEGIN
      base := ext; (* incompatible assignment *)
      ext := base; (* incompatible assignment *)
   END Do;

END PrivTestProjection.
```
В сообщении о Компонентном Паскале вообще удалено упоминание о проекции, там просто написано:> -- Component Pascal Language Report - 9.1 Assignments писал(а):
> 1. if Tv and Te are record types, all fields of that type are assigned., без объяснения, динамические или статические типы имеются в виду, а в Приложении А написано, что для совместимости по присваиванию типы должны совпадать.

Кто может объяснить, почему убрали "projection" из КП?