Проект сериализации - 3 (аттрибуты)
От: adontz Грузия http://adontz.wordpress.com/
Дата: 16.01.05 13:14
Оценка:
Я тут разбирался с аттрибутами и натолкнулся на упоминание attribute provider
Как я понял это некоторое расширение компилятора, которое работает ДО препроцессора и позволяет внедрять свой код в классы на основе аттрибутов.

Такая запись
[serializable, metainfo]
class A
 {
  public:
   int x;
   float y;
 }
будет, например, преобразована (ну если написать соответсвующий attribute provider) в
class A
 {
  public:
   int x;
   float y;
  public:
   void _serialize_in(archive & arch)
    {
     arch.in("x", x);
     arch.in("y", y);
    }
   void _serialize_out(archive & arch)
    {
     arch.out("x", x);
     arch.out("y", y);
    }
   static metainfo & _metainfo()
    {
     static metainfo = {
      {"int", "x", FIELD_OFFSET(A, x)},
      {"float", "y", FIELD_OFFSET(A, y)}};
     return metainfo;
    }
 }

Номера строк для отладки при этом не сбиваются. Можно так же генерировать статические функции.
Знаю так же, что Vc7\bin\atlprov.dll это есть провайдер для ATL, а больше ничего не знаю. Документации по написанию Attribute Provider я не откопал.
Вот и думаю — браться ли за это?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re: Проект сериализации - 3 (аттрибуты)
От: Dmitry A. Sinyagin www.astawireless.com
Дата: 16.01.05 16:57
Оценка: 20 (1)
A>Документации по написанию Attribute Provider я не откопал.
A>Вот и думаю — браться ли за это?
имхо не стоит. MS не предоставляет возможностей для написания собственного attribute provider'a, т.к. текущие провайдеры плотно привязаны ко внутренностям компилятора. они уже много лет обещают переписать всю эту систему нормально, чтобы провайдер можно было написать не обладая исходниками компилятора, но судя по всему так никогда и не возьмутся (если я не ошибаюсь они еще в 2002 году говорили что мол "в следующем релизе, или через один")...
хотя возможно в VS2005 ситуация изменилась, не знаю, возможности посмотреть на неё нет
Re: Проект сериализации - 3 (аттрибуты)
От: SleepyDrago Украина  
Дата: 17.01.05 06:13
Оценка: 20 (1) +1
Здравствуйте, adontz, Вы писали:

A>Я тут разбирался с аттрибутами и натолкнулся на упоминание attribute provider

A>Как я понял это некоторое расширение компилятора, которое работает ДО препроцессора и позволяет внедрять свой код в классы на основе аттрибутов.

A>Такая запись

A>
A>[serializable, metainfo]
A>class A
A> {
A>  public:
A>   int x;
A>   float y;
A> }
A>
будет, например, преобразована (ну если написать соответсвующий attribute provider) в

A>Вот и думаю — браться ли за это?

Имхо Microsoft Specific C++ is evil. Все расширения языка которые они намутили изза своей кривизны
конеченостей делают код непортабельным.
Недавно прочуствовал на себе __try __catch так и не реализован в mingw GCC

Все то же самое можно получить еще 3мя путями так что я предпочту любой из них.
может все дело в том что я и ATL не люблю ?
wbr
Re: Проект сериализации - 3 (аттрибуты)
От: Виталий Россия  
Дата: 17.01.05 10:50
Оценка: 20 (1)
Здравствуйте, adontz, Вы писали:

A>Я тут разбирался с аттрибутами и натолкнулся на упоминание attribute provider

A>Как я понял это некоторое расширение компилятора, которое работает ДО препроцессора и позволяет внедрять свой код в классы на основе аттрибутов.

Не стоит, имхо, с атрибутами заморачиваться. Просто по тому, что эта технология еще не доделана, то есть не для публичного использования.

Вот — http://groups-beta.google.com/group/microsoft.public.dotnet.languages.vc/msg/3c07abcb240db03e?oe= сообщение одного из разработчиков.
Re[2]: : Проект сериализации - 3 (аттрибуты)
От: ssm Россия  
Дата: 17.01.05 10:59
Оценка:
Здравствуйте, SleepyDrago, Вы писали:

SD>что я и ATL не люблю ?


я сам не люблю, пишу и плачу
но что делать, альтернативы то нет
Re[2]: Проект сериализации - 3 (аттрибуты)
От: adontz Грузия http://adontz.wordpress.com/
Дата: 17.01.05 11:58
Оценка:
Здравствуйте, Виталий, Вы писали:

В>Вот — http://groups-beta.google.com/group/microsoft.public.dotnet.languages.vc/msg/3c07abcb240db03e?oe= сообщение одного из разработчиков.


Печально
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[2]: Проект сериализации - 3 (аттрибуты)
От: adontz Грузия http://adontz.wordpress.com/
Дата: 17.01.05 12:07
Оценка:
Здравствуйте, SleepyDrago, Вы писали:

SD>Имхо Microsoft Specific C++ is evil. Все расширения языка которые они намутили изза своей кривизны

SD>конеченостей делают код непортабельным.

А я себе и не представляю портабельный Code Injection Тем более, что под винду mainstream компилятор всё таки MSVC и дело не представляется совсем уж бесполезным. А embedded IDL как ни крути удобнее отдельного файла.

SD>Все то же самое можно получить еще 3мя путями так что я предпочту любой из них.


Перечислишь хоть какие-то? А то число 3 вызывает у меня впечатление необразованности.

SD>может все дело в том что я и ATL не люблю ?


А кто любит? Хотя аттрибуты предоставляемые именно ATLProvider ИМХО вполне можно заменить на другие конструкции с аналогичной функциональностью.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[3]: : Проект сериализации - 3 (аттрибуты)
От: adontz Грузия http://adontz.wordpress.com/
Дата: 17.01.05 12:08
Оценка:
Здравствуйте, ssm, Вы писали:

ssm>но что делать, альтернативы то нет


Что нам стоит....
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[4]: : Проект сериализации - 3 (аттрибуты)
От: ssm Россия  
Дата: 17.01.05 12:25
Оценка:
Здравствуйте, adontz, Вы писали:

A>Что нам стоит....


...свой глюкосамокат настроить
Re[3]: : Проект сериализации - 3 (аттрибуты)
От: Виталий Россия  
Дата: 17.01.05 15:50
Оценка: 13 (2)
Здравствуйте, ssm, Вы писали:

ssm>Здравствуйте, SleepyDrago, Вы писали:


SD>>что я и ATL не люблю ?


ssm>я сам не люблю, пишу и плачу

ssm>но что делать, альтернативы то нет
Есть, по крайней мере именно так позиционируется — http://www.lambdasoft.dk/comet/index.htm
Re[4]: : Проект сериализации - 3 (аттрибуты)
От: ssm Россия  
Дата: 17.01.05 17:22
Оценка:
Здравствуйте, Виталий, Вы писали:


ssm>>но что делать, альтернативы то нет


В>Есть, по крайней мере именно так позиционируется — http://www.lambdasoft.dk/comet/index.htm


интерестно! может кто-то поделится опытом использования?
Re[3]: Проект сериализации - 3 (аттрибуты)
От: SleepyDrago Украина  
Дата: 17.01.05 18:08
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, SleepyDrago, Вы писали:


SD>>Имхо Microsoft Specific C++ is evil. Все расширения языка которые они намутили изза своей кривизны

SD>>конеченостей делают код непортабельным.

A>А я себе и не представляю портабельный Code Injection Тем более, что под винду mainstream компилятор всё таки MSVC и дело не представляется совсем уж бесполезным. А embedded IDL как ни крути удобнее отдельного файла.


SD>>Все то же самое можно получить еще 3мя путями так что я предпочту любой из них.


A>Перечислишь хоть какие-то? А то число 3 вызывает у меня впечатление необразованности.


Имхо я и не надеюсь на magic tool который сам догадается как надо сериализовать мои данные
Мне нужно чтобы он :
а) работал надежно
б) не был тормозом всей системы
в) допускал ручное управление в аварийном режиме

вот

а насчет code injection и прочей "красоты" мое имхо все это от лукавого
самый простой способ из 3х это написать ручками.
После того как я пришел к выводу,
что время набора текста программы это копейки по сравнению со всем остальным
я нашел триальный вижуал ассист и перестал напрягаться на эту тему.
Если есть текстуальные повторы то тут рулят локальные макросы.
А на самый интересный случай можно попробовать замутить предка с typelist'ом в качестве аргумента ...
{ кстати стало интересно замутить — а то еще для typelist не видел практической пользы }

В общем there are many ways to skin a cat

Кстати раз номера строк в отладчике не съезжают то какие номера имеют строки в теле injected кода и как там брякнуться?

wbr
Re[4]: Проект сериализации - 3 (аттрибуты)
От: adontz Грузия http://adontz.wordpress.com/
Дата: 17.01.05 20:11
Оценка:
Здравствуйте, SleepyDrago, Вы писали:

SD>а) работал надежно

+1
SD>б) не был тормозом всей системы
+1
SD>в) допускал ручное управление в аварийном режиме
+1

SD>а насчет code injection и прочей "красоты" мое имхо все это от лукавого


SD>самый простой способ из 3х это написать ручками.

SD>После того как я пришел к выводу, что время набора текста программы это копейки по сравнению со всем остальным я нашел триальный вижуал ассист и перестал напрягаться на эту тему.
Если есть текстуальные повторы то тут рулят локальные макросы.
А на самый интересный случай можно попробовать замутить предка с typelist'ом в качестве аргумента ...
SD>{ кстати стало интересно замутить — а то еще для typelist не видел практической пользы }

А это кстати было бы круто генерировать QueryInterface на основе TypeList'а...

SD>Кстати раз номера строк в отладчике не съезжают то какие номера имеют строки в теле injected кода и как там брякнуться?


Они видны только в окне Diassembly и отлаживать их кроме как оттуда никак не выйдет.
Но если очень хочеться, то указав компилятору опцию /Fx можно получить файл после применения аттрибутов (генерируется в отдельный файл, в отличие от показа preprocessed source нормальной компиляции не мешает).
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[5]: Проект сериализации - 3 (аттрибуты)
От: SleepyDrago Украина  
Дата: 18.01.05 07:04
Оценка:
Здравствуйте, adontz, Вы писали:

SD>>а) работал надежно

A>+1
SD>>б) не был тормозом всей системы
A>+1
SD>>в) допускал ручное управление в аварийном режиме
A>+1




A>Они видны только в окне Diassembly и отлаживать их кроме как оттуда никак не выйдет.

A>Но если очень хочеться, то указав компилятору опцию /Fx можно получить файл после применения аттрибутов (генерируется в отдельный файл, в отличие от показа preprocessed source нормальной компиляции не мешает).




Имхо я за явный и наглядный способ. Чтобы глядя на класс не надо было долго вспоминать откуда там функции serialize_in и тп и почему оно там падает А то через пару лет и среди ночи ...

Ведь не ломает же писать boost::noncopyable ?

wbr