1

Тема: Метаклассы и выражения класса

Похоже, что в синтаксисе Кантора есть дырка. sad

В Канторе есть так называемые выражения класса, реализующие метакласс. Пример:

public class Meta;

public class Executor of
  public Body = Meta;
end;

Свойство Executor.Body описано через выражение класса:

  • В описании отсутствует ключевое слово class, то есть это свойство, а не класс.

  • В правой части отсутствует ключевое слово new, то есть свойство возвращает не экземпляр, а сам класс Meta как метакласс.

Соответствующий пример на Delphi
type
  TMeta = class;               // предварительное описание
  TMetaClass = class of TMeta; // метакласс

  TMeta = class
  end;

  TExecutor = class
  public
    function Body: TMetaClass; virtual;
  end;

function TExecutor.Body: TMetaClass;
begin
  Result := TMeta;
end;

Зацените разницу в объеме кода на Канторе и Delphi. wink

Получается, что в примере на Канторе через вывод типа выводится не только тип как таковой, но и сущность типа -- метакласс. А как теперь описать абстрактное свойство, возвращающее метакласс? Правой части у него не будет, выводить не из чего.

Раньше мне казалось, что невозможность описать метакласс кроме как через выражение класса является следствием объектов первого класса и принятой в Канторе концепции раскрытия обобщения null, что должно было подтвердиться структурой объектного кода. Не подтверждается. Прикидываю структуру кода и вижу, что абстрактное свойство, возвращающее метакласс, ложится в концепцию естественным образом. Для меня это признак, что нужно пересматривать концепцию.

Короче, нужна конструкция, позволяющая описать функцию-метакласс, процедуру с параметром-метаклассом и переменную, храняющую метакласс. Предлагайте. У вас есть возможность повлиять на Кантор.