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 запретил. Вот сижу теперь и горюю... |
Автор: | Илья Ермаков [ Среда, 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 |
Автор: | Александр Ильин [ Понедельник, 17 Декабрь, 2007 15:27 ] |
Заголовок сообщения: | Re: MODeL |
Сергей Губанов писал(а): MyRecord = XXX RECORD ... END; Осталось придумать подходящее слово вместо XXX. Может ANTIPOINTER или NONREF Предлагаю MATERIAL или NOPTR : ) |
Автор: | Geniepro [ Понедельник, 17 Декабрь, 2007 19:13 ] |
Заголовок сообщения: | Re: MODeL |
Сергей Губанов писал(а): Осталось придумать подходящее слово вместо XXX. Может ANTIPOINTER или NONREF Чем 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/ |