> -- Comdiv писал(а):
> Не совсем так, такой необходимости нет. Дело в другом - в языке была сделана попытка сделать недопустимыми бессмысленные проверки, которые всегда имеют одно и то же значение. В большинстве случаев для записей проверка имеет смысл только для ссылок, поставляющие данные извне, которые неявным образом задаются VAR и IN -параметрами. Отсутствие возможности проверки типа для разыменованного указателя - это побочный эффект такого ограничения и его можно считать упущением языка, так как здесь она тоже осмысленна. Это некритично, так как в таких случаях всегда можно проверить тип по указателю, не прибегая к разыменованию, хотя и может потребоваться объявить именованный указатель на соответствующую запись, если он не был предоставлен с самого начала.Это, скорее, для раздела

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

## Код:
```
MODULE TestExt;
IMPORT Log;
TYPE
   bas=EXTENSIBLE RECORD
            a:INTEGER;
         END;
   ras=RECORD(bas)
         b:REAL;
         END;
VAR
   c:bas;
   d:ras;
PROCEDURE Test (VAR x:bas);
BEGIN
   IF x IS ras THEN
                     Log.String("Расширенный тип");
                     Log.Ln;
   ELSE
            Log.String("Базовый тип");
            Log.Ln;
   END;
END Test;
BEGIN
   Test(c);
   Test(d);
END TestExt.
```


Я скорее думаю, что реализация оператора IS (и оператора WITH) не подразумевает прямое использование разыменованного указателя (динамического типа) как статического типа записи, поэтому требуется отдельная процедура, где разыменованный указатель (с помощью идентификатора VAR или IN) приводится к статическому типу записи. Вот цитата из книги Раизера и Вирта (в гуглопереводе):

Правило типа для параметров VAR смягчено: тип фактических параметров может быть расширением типа формального параметра VAR.