Не нашёл лучшего места, чем тут, чтобы зафиксировать концептуальный примерчик. Задача: необходимо рассылать уведомления по шине (здесь считаем, что это статическая RECORD без полей), зная только имя типа уведомления в виде цепочки символов.


## Код:
```
MODULE TestMeta;

(**
   project   = "TestMeta"
   organization   = ""
   contributors   = ""
   version   = "System/Rsrc/About"
   copyright   = "Kuzmitskiy Ivan Alexandrovich"
   license   = "Docu/BB-License"
   purpose   = "Лабораторный образец, демонстрирующий один из способов создания переменной, тип который задан цепочкой символов"
   changes   = "
   - 20120106, kia, автогенерация заголовка
"
   issues   = ""
**)

   IMPORT
      Log := StdLog, Meta;

   TYPE
      Message* = ABSTRACT RECORD END;
      PMessage* = POINTER TO Message;
      NotifyMsg* = RECORD (Message) END;
      NotifyMsg1* = RECORD (Message) END;
      NotifyMsg2* = RECORD (Message) END;

   PROCEDURE Handle (VAR msg: Message);
   BEGIN
      WITH msg: NotifyMsg DO
         Log.String('TestMeta, обработка NotifyMsg'); Log.Ln
      | msg: NotifyMsg1 DO
         Log.String('TestMeta, обработка NotifyMsg1'); Log.Ln
      | msg: NotifyMsg2 DO
         Log.String('TestMeta, обработка NotifyMsg2'); Log.Ln
      ELSE
      END
   END Handle;

   PROCEDURE Do* (s: ARRAY OF CHAR);
      VAR this: Meta.Item; x: ANYPTR; pn: PMessage; n: NotifyMsg;
   BEGIN
      Meta.LookupPath(s, this);
      IF this.Valid() THEN
         x := this.New(); ASSERT(x # NIL, 60);
         Handle(x(PMessage))
      ELSE
         Log.String('TestMeta: Тип не найден!'); Log.Ln;
      END;
   END Do;

END TestMeta.

^Q"TestMeta.Do('')"
^Q"TestMeta.Do('TestMeta.NotifyMsg')"
^Q"TestMeta.Do('TestMeta.NotifyMsg1')"
^Q"TestMeta.Do('TestMeta.NotifyMsg2')"
```
