Здравствуйте. Я программист-любитель. Прочитав доступную здесь и в интернете литературу, я сделал такую краткую сводку особенностей языков Никлауса Вирта. Прошу оценить правильность или ошибочность моих выводов. Я по образованию не программист, поэтому за неправильность терминологии заранее извиняюсь.

Модула-2

Запись:
Не должна быть нулевой (не содержащей полей), поскольку не расширяема. Оператор WITH используется для короткого доступа к полям записи;
Процедура:
Параметр-переменная (с идентификатором VAR) не может быть выражением или константой.
В качестве результата процедуры-функции не могут выступать: запись, массив, поддиапазон, перечисления, множество. Иначе надо использовать процедуру с параметром-переменной (с идентификатором VAR). Поскольку указатель имеет целочисленный тип, он может быть аргументом процедуры и результатом процедуры-функции.

Оберон, Оберон-2

Запись:
Может быть нулевой (не содержать полей), поскольку расширяема и может экспортироваться. Базовой записи можно присвоить значение расширенной, но не наоборот. Указатель расширенной записи может быть присвоен указателю базовой записи и наоборот.

Процедура:
Если объявление процедуры содержит параметр-приёмник, процедура рассматривается как связанная с типом. Связь выражается типом приёмника в заголовке объявления процедуры. Приёмник может быть или записью в виде параметра-переменной (с идентификатором VAR), или указателем в виде параметра-значения.
Если процедура связана с базовой записью, то она неявно связана с любым расширением базовой записи. Однако другая процедура с тем же самым именем, что и исходная, которая явно связана с расширением базовой записи, перекрывает исходную процедуру и рассматривается как её переопределение. Формальные параметры обеих процедур должны совпадать. Если к вызову переопределённой процедуры добавить ^, то вызывается исходная процедура.

Проверка типа оператором IS проверяет, что указатель р указывает на конкретную запись или её расширения, или запись является конкретным типом или его расширениями. Он обеспечивает доступ к полям этого типа записи, включая поля базовой записи, если указанный тип записи является расширением базовой записи.
Локальный охранник (оператор WITH) используется для проверки того, что запись является конкретным типом записи и используется для доступа только к полям этого типа. Если запись является расширением базовой записи, поля базовой записи будут недоступны.
Как правило, проверка типа и локальный охранник используются совместно - проверка типа проверяет базовую запись, а локальный охранник - конкретный тип расширения базовой записи.

Компонентный Паскаль

Запись:
Атрибут ABSTRACT соответствует нулевой записи в Обероне (не содержит полей). Нельзя создать экземпляр такой записи, но можно её расширить и экспортировать.
Атрибут LIMITED соответствует обычной записи в Обероне, которая может расширяться, но не может экспортироваться.
Атрибут EXTENSIBLE соответствует обычной записи в Обероне, которая может расширяться и экспортироваться.
Запись без атрибутов соответствует обычной записи в Обероне, которая может экспортироваться, но не может расширяться.
В качестве базового типа может быть использован указатель.

Процедура:
Идентификатор IN говорит о том, что эта переменная служит только для ввода данных и не может быть изменена в процедуре. Идентификатор IN допускается только для записей и массивов. Константы нельзя помечать идентификатором IN.
Идентификатор OUT говорит о том, что эта переменная служит только для вывода результата и её значение в начале процедуры не определено.
Идентификатор VAR говорит о том, что эта переменная может модифицироваться в процедуре и хранить полученный результат.
Процедуры, cвязанные с типами и возвращающие указатель, могут быть переопределены таким образом, чтобы возвращать указатель на расширенный тип и быть связанной с расширенным типом.
Для процедур, связанных с типами:
Атрибут NEW используется для вновь создаваемых для данной записи процедур (имя процедуры должно быть уникальным для базовой записи и её расширений).
Атрибут ABSTRACT используется для записей с атрибутом ABSTRACT и в расширенной записи перед использованием процедура должна быть переопределена, поскольку в базовой записи процедура пустая.
Атрибут EXTENSIBLE используется для указания, что эта процедура может быть переопределена и используется для записей с атрибутами ABSTRACT или EXTENSIBLE.
Атрибут EMPTY используется для указания, что процедура является пустой. В отличие от процедуры с идентификатором ABSTRACT, при расширении записи с такой процедурой её не надо переопределять (или переопределять в случае необходимости). Она используется для записей с атрибутами ABSTRACT или EXTENSIBLE. Если она не переопределялась, то её вызов не даёт никакого эффекта. Процедуры с атрибутом EMPTY не могут быть процедурами-функциями и не могут иметь OUT параметров.
Отсутствие атрибутов говорит о том, что процедура не может переопределяться и используется в записи без атрибутов.