OberonCore
https://forum.oberoncore.ru/

MODeL
https://forum.oberoncore.ru/viewtopic.php?f=6&t=702
Страница 1 из 1

Автор:  Сергей Губанов [ Среда, 24 Октябрь, 2007 16:25 ]
Заголовок сообщения:  MODeL

Я сейчас на работе создаю язык описания объектов сообщений (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.

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

И мой начальник мне ABSTRACT запретил. Вот сижу теперь и горюю... :cry: :cry: :cry:

Автор:  Илья Ермаков [ Среда, 24 Октябрь, 2007 16:30 ]
Заголовок сообщения:  Re: MODeL

Интересно.
У меня ребята похожей вещью занимались последний месяц - сваяли сетевую шину сообщений для ББ.
Вообще, сообщения "рулят" - убеждаюсь дальше-больше :-)

Автор:  Штирлиц [ Среда, 24 Октябрь, 2007 17:04 ]
Заголовок сообщения:  Re: MODeL

Илья Ермаков писал(а):
Интересно.
У меня ребята похожей вещью занимались последний месяц - сваяли сетевую шину сообщений для ББ.
Вообще, сообщения "рулят" - убеждаюсь дальше-больше :-)


А в новый дистрибутив она войдет?

Автор:  Trurl [ Среда, 24 Октябрь, 2007 17:20 ]
Заголовок сообщения:  Re: MODeL

Что-то мне это напоминает...

Автор:  Илья Ермаков [ Среда, 24 Октябрь, 2007 17:36 ]
Заголовок сообщения:  Re: MODeL

Штирлиц писал(а):
А в новый дистрибутив она войдет?

Опубликована будет, но в составе чего - не знаю. Надо будет ещё разбираться, что с чем и как войдёт :-)
Пока условно отнесена к Abf.

Автор:  Trurl [ Среда, 24 Октябрь, 2007 21:50 ]
Заголовок сообщения:  Re: MODeL

Вот нашел ftp://ftp.parc.xerox.com/pub/ilu/2.0b1/ ... l_toc.html

Автор:  Info21 [ Четверг, 25 Октябрь, 2007 08:44 ]
Заголовок сообщения:  Re: MODeL

Илья Ермаков писал(а):
Вообще, сообщения "рулят" - убеждаюсь дальше-больше :-)


я тоже, причем совершенно на другом материале :-)

Автор:  Сергей Губанов [ Четверг, 25 Октябрь, 2007 10:48 ]
Заголовок сообщения:  Re: MODeL

Trurl писал(а):

Спасибо!

Автор:  Сергей Губанов [ Понедельник, 17 Декабрь, 2007 12:41 ]
Заголовок сообщения:  Re: MODeL

Сергей Губанов писал(а):
ABSTRACT запретил


Прогресс. Сишники всё же согласились, что атрибут ABSTRACT необходим, добавили.

Теперь думаем над следующим атрибутом (названия пока не придумали, так что буду пока писать "XXX")

MyRecord = XXX RECORD ... END;

На записи объявленные с атрибутом "XXX" нельзя делать POINTER TO (нельзя передавать их по ссылке на их папу), т.е. они всегда используются явно, "невиртуально".

Осталось придумать подходящее слово вместо XXX. Может ANTIPOINTER или NONREF :D

Автор:  Александр Ильин [ Понедельник, 17 Декабрь, 2007 15:27 ]
Заголовок сообщения:  Re: MODeL

Сергей Губанов писал(а):
MyRecord = XXX RECORD ... END;
Осталось придумать подходящее слово вместо XXX. Может ANTIPOINTER или NONREF :D

Предлагаю MATERIAL или NOPTR : )

Автор:  Geniepro [ Понедельник, 17 Декабрь, 2007 19:13 ]
Заголовок сообщения:  Re: MODeL

Сергей Губанов писал(а):
Осталось придумать подходящее слово вместо XXX. Может ANTIPOINTER или NONREF :D
Чем XXX лучше XXL :о))
А если как антоним к ABSTRACT, то может CONCRETE?

Автор:  Сергей Губанов [ Вторник, 18 Декабрь, 2007 10:35 ]
Заголовок сообщения:  Re: MODeL

Мы сошлись на PRIME.

Прайм-записи сериализуются/десериализуются без фабрики -- непосредственно, и используются только для внедрения внутрь других записей (агрегирование) или иных контейнеров (массивов, списков и т.п.) по значению. На прайм-записи запрещается объявлять указатели и они, как следствие, с целью оптимизации, не могут иметь виртуальных функций.

Автор:  Info21 [ Вторник, 18 Декабрь, 2007 10:53 ]
Заголовок сообщения:  Re: MODeL

Сергей Губанов писал(а):
Прогресс. Сишники всё же согласились ...


... гнутся шведы ...

Автор:  Сергей Губанов [ Вторник, 18 Декабрь, 2007 12:04 ]
Заголовок сообщения:  Re: MODeL

Сергей Губанов писал(а):
Мы сошлись на PRIME.

Уже передумали на PLAIN.

info21 писал(а):
... гнутся шведы ...

Они уже даже были согласны ещё и на EXTENSIBLE, но пока реальной потребности в нём не возникло.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/