В описании языка Oberon-07 написано следующее:
9.1. Assignments
The assignment serves to replace the current value of a variable by a new value specified by an
expression. The assignment operator is written as ":=" and pronounced as becomes.
assignment  =  designator ":=" expression.
The type of the expression must be the same as that of the designator. The following exceptions
hold:
1. The constant NIL can be assigned to variables of any pointer or procedure type.
2. Arrays must have the same element type, and the length of the destination array must not be
less than the length of the source array.
3. Strings can be assigned to any array of characters, provided the string is not longer than the
array.
4. In the case of records, the type of the destination must be an extension of the type of the
source.
Насколько я понимаю, в пункте 4 говорится о том, что переменная в левой части присваивания должна быть расширением переменной, которая находится в правой части присваивания. Да при этом не все поля будут заполняться. Это присваивание возникло взамен стандартной процедуры COPY.

> -- Цитата:
> Насколько я понимаю, язык Oberon-07 в этой части не отличается от Oberon-2.
По крайней мере из описания языка следует, что Oberon-07 отличается от Oberon-2.
Про projection написано в описании языка Oberon-2, но не написано в Oberon-07.
С массивами тоже расхождение, например:
## Код:
```
MODULE Mod;

  TYPE T = RECORD a, b: INTEGER END;

  VAR m1: ARRAY 5 OF T;
    m2: ARRAY 10 OF T;

BEGIN
  m2 := m1; (* В оберон-07 должно компилироваться, а в оберон-2 нет *)
END Mod.
```
