Я сейчас на работе создаю язык описания объектов сообщений (Message Object Definition Language = MODeL) и пишу для него транслятор в C++, C#,... Потребность в языке MODeL возникла в связи с тем, что у нас есть несколько программ общающихся друг с другом по сети с помощью сообщений и
1) нужно формальное описание типов сообщений просто чтобы в них не запутаться;
2) нужен кодогенератор позволяющий по формальному описанию сгенерировать текст на языке C++, C#,... вместе с сериализаторами (экстернализерами, сериализерами, и прочими функциями), причём так чтоб программы написанные на разных языках (C++, C#, ...) могли общаться с помощью одних и тех же объектов сообщений.

Можно было бы использовать ASN, но он на столько громоздок, что никто не захотел в нём всерьёз разбираться. Вот я и предложил как бы изобретённый мной язык MODeL (а на самом деле просто украденую часть Оберона в которой описываются типы). Местные сишники долго думали (сильно спорили против "END"), но в результате согласились. Описание MODeL сейчас занимает 5 страниц, так что по сравнению с ASN он абсолютно вне конкуренции (там ~600 страниц).

Вот пример текста на языке MODeL:
## Код:
```
DOCUMENT VoipMessages;

   IMPORT DefaultSettings;

   VoipMessage = RECORD
      callId: STRING("n/a");
      confId: STRING("n/a");
      id: STRING
   END;

   VoipRegistrationUpdate = RECORD (VoipMessage)
      proto: STRING;
      nameList: LIST OF VoipRegistrationName;
      addresses: VoipAddresses;
      contacts: VoipAlias;
      maxRegTime: INT32(0);
      active: INT32(-1);
      isNatUser: BOOLEAN(FALSE), VERSION(31..*);
      registrarName: STRING(""), VERSION(31..*)
   END;

   SETTINGS (DefaultSettings)
      rootMessageType = "VoipMessage";
      
      LANGUAGE ("C++");
         namespace = "mvoip"
      END
   END;

END VoipMessages.
```

На прошлой неделе я реализовал раздельную компиляцию, а сегодня попытался было протолкнутьABSTRACTRECORD.
Не вышло. Сишники по поводу ABSTRACT сказали, что
> -- Цитата:
> Увы, мы пользуемся старым, кривым C++... И поэтому не хотим при написании компонента A что-то запрещать написателю компонента B...
И мой начальник мне ABSTRACT запретил. Вот сижу теперь и горюю...