Вот тут утилитка (только для Visual Studio) которая собиарет информацию о классах.
Затускать в $(OutDir) (которых если ничего не менять обычно две Debug и Release) уже после того как проект собран
Выводит кучу информации, так что лучше сразу делать редирект в файл. (например так Serialization.exe > metadata.txt)
Насколько я понял (гы-гы) выводит информацию только об используемых (но не объявленных) классах. Так что если класс объявлен, но не используется его в выводе скорее всего не будет.
Меня интересуют
Глючность Баг-репорты приветствуются
Скорость (в виде [объём исходников в мегабайтах]/[скорость работы в секундах] и [количество UDT]/[скорость работы в секундах]).
Может ли кто-либо создать что-либо аналогичное по параметрам (Объём информации/скорость работы) для CGG/MinGW?
27.01.05 07:44: Перенесено модератором из 'C/C++' — Павел Кузнецов
Здравствуйте, adontz, Вы писали:
A>Меня интересуют A> A>
Глючность Баг-репорты приветствуются A>
Скорость (в виде [объём исходников в мегабайтах]/[скорость работы в секундах] и [количество UDT]/[скорость работы в секундах]). A>
Может ли кто-либо создать что-либо аналогичное по параметрам (Объём информации/скорость работы) для CGG/MinGW? A>
1. Глючность высока.
// ppp.cpp : Defines the entry point for the console application.
//#include"stdafx.h"class A
{
public:
A()
{
_tprintf(_T("A\n"));
a = b = c = 0;
}
int a,b,c;
};
class B : public A
{
public:
B() : A()
{
_tprintf(_T("B\n"));
}
int d;
};
template <class T>
class Foo
{
public:
Foo()
{
_tprintf(_T("X\n"));
}
T z;
};
int _tmain(int argc, _TCHAR* argv[])
{
A a;
B b;
Foo<A> foo1;
Foo<B> foo2;
return 0;
}
Результат:
312 User defined types (UDT) found
User Defined Type [A::a::b::c::a::b::c::a::b::c::a::b::c] of kind [class]
{
DATA [a] of type [signed int] of kind [field] with access [public]
DATA [b] of type [signed int] of kind [field] with access [public]
DATA [c] of type [signed int] of kind [field] with access [public]
DATA [a] of type [signed int] of kind [field] with access [public]
DATA [b] of type [signed int] of kind [field] with access [public]
DATA [c] of type [signed int] of kind [field] with access [public]
DATA [a] of type [signed int] of kind [field] with access [public]
DATA [b] of type [signed int] of kind [field] with access [public]
DATA [c] of type [signed int] of kind [field] with access [public]
DATA [a] of type [signed int] of kind [field] with access [public]
DATA [b] of type [signed int] of kind [field] with access [public]
DATA [c] of type [signed int] of kind [field] with access [public]
}
User Defined Type [B::d::d::d::d] of kind [class]
{
DATA [d] of type [signed int] of kind [field] with access [public]
DATA [d] of type [signed int] of kind [field] with access [public]
DATA [d] of type [signed int] of kind [field] with access [public]
DATA [d] of type [signed int] of kind [field] with access [public]
}
User Defined Type [Foo<A>::z::z::z::z] of kind [class]
{
DATA [z] of type [A] of kind [field] with access [public]
DATA [z] of type [A] of kind [field] with access [public]
DATA [z] of type [A] of kind [field] with access [public]
DATA [z] of type [A] of kind [field] with access [public]
}
User Defined Type [Foo<B>::z::z::z::z] of kind [class]
{
DATA [z] of type [B] of kind [field] with access [public]
DATA [z] of type [B] of kind [field] with access [public]
DATA [z] of type [B] of kind [field] with access [public]
DATA [z] of type [B] of kind [field] with access [public]
}
User Defined Type [wlib::helper_lock] of kind [class]
{
[NO ENUM]
DATA [m_lock] of type [] of kind [field] with access [private]
DATA [m_bCondition] of type [bool] of kind [field] with access [private]
FUNCTION [helper_lock] of kind [method] with access [public]
FUNCTION [~helper_lock] of kind [method] with access [public]
FUNCTION [condition] of kind [method] with access [public]
FUNCTION [iterate] of kind [method] with access [public]
FUNCTION [__vecDelDtor] of kind [method] with access [public]
[NO UDT]
}
__vecDelDtor — здесь выглядит странно, хотя всем понято что это такое
m_lock — имеет тип Mutex&, почему он не определяется ? или это by design
а вообще задумка чудесная. если потом в исходниках появится, то с радостью воспользуюсь для своих нужд
зы. про скорость. на процессере P-M 1400 1.5 метра исходников он пережевал за время 00:00:00.941
Re[2]: Проект сериализации - 2 [просьба высказаться]
Здравствуйте, Dmitry A. Sinyagin, Вы писали:
DAS>required files not found
fixed.
DAS>__vecDelDtor — здесь выглядит странно, хотя всем понято что это такое
Могу выкидывать функции начинающиеся на два подчерка Как-то стабильно отделять функции сгенерированные компилятором от определённых пользователем пока не удаётся.
DAS>m_lock — имеет тип Mutex&, почему он не определяется ? или это by design
Это глюк Исправил. Теперь указатели и ссылки, а так же модификаторы const и volatile определяются правильно. Если тип ссылка или указатель после имени добавляется & или * соотетственно. Модификаторы const и volatile добавляются до имени типа.
DAS>а вообще задумка чудесная. если потом в исходниках появится, то с радостью воспользуюсь для своих нужд
Вообще конечно появиться. Я просто с лицензированием пока не определился. С одной стороны не хочу ограничивать коммерческое использование, с другой хочу надёжно защитить авторское право. Понятно что в текущих 30Кб особо защищать нечего, но я думаю заниматься автогенерацией исходников содержащих код сериализации и возможно структуры с метаинформацией. Думаю сделать так же стандартный вывод в XML для удобного подключения внешних утилит.
Кроме того неявно используемые элементы (value_type, iterator, rebind) не обрабатываются (опять таки потому что основная цель — сериализация).
DAS>зы. про скорость. на процессере P-M 1400 1.5 метра исходников он пережевал за время 00:00:00.941
Меньше секунды? Чудесно!
Здравствуйте, yxiie, Вы писали:
Y>никакого вывода не было вообще. Y>компилер: Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.00.9466 for 80x86 (VC 7.0)
У меня 13.00.9466 но я не уврене, что это причём-то
Вообще-то программа чисто уникодная, может у тебя 98й?
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, yxiie, Вы писали:
Y>>никакого вывода не было вообще. Y>>компилер: Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.00.9466 for 80x86 (VC 7.0)
A>У меня 13.00.9466 но я не уврене, что это причём-то A>Вообще-то программа чисто уникодная, может у тебя 98й?
У меня то же самое. WinXP SP2
... << RSDN@Home 1.1.4 beta 3 rev. 241>> ... <<Winamp is playing "Kimiko Itoh — 04 River of Crystals">> ...
Здравствуйте, adontz, Вы писали:
A>Вот тут утилитка (только для Visual Studio) которая собиарет информацию о классах. A>Затускать в $(OutDir) (которых если ничего не менять обычно две Debug и Release) уже после того как проект собран
Работает
Осталось отфильтровать 99.999% типов из pdb и все будет путем
Насколько я понял ее принцип работы похож на tracewpp из Platform Sdk.
те через DIA получаем все содержимое pdb.
Вопрос по интерфейсу утилиты: надо спрашивать какой pdb брать тк если в проекте несколько модулей и они все кладут свои бинарники и pdb в один каталог (например "bin") то что?
на счет проекта в целом.
Взгляните на 44ю презентацию на КРИ 2004
там для проблемы большого количества данных и модификации схемы использован достаточно специфичный подход. Схема на внешнем языке тк данные важнее чем код.
Имхо возможность автоматического наката схемы после изменений очень важна и
если можно получить автоматизированным образом утилиту преобразования между версиями это
перевешивает недодстатки хранения двух объявлений или внешнюю схему данных.
И еще. всегда нужен путь для тех кто может "сделать все сам" а не черный ящик.
wbr
Re[3]: Проект сериализации - 2 [просьба высказаться]
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, yxiie, Вы писали:
Y>>никакого вывода не было вообще. Y>>компилер: Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.00.9466 for 80x86 (VC 7.0)
A>У меня 13.00.9466 но я не уврене, что это причём-то A>Вообще-то программа чисто уникодная, может у тебя 98й?
— и в Debug и в Release такой же результат
может у меня какие-то необходимые опции в проекте не включены? какие хоть оно файлы обрабатывает?
A>что у тебя в папке A>C:\Program Files\Microsoft Visual Studio .NET 2003\Visual Studio SDKs ?
у меня только DIA SDK и у меня не 2003 как я уже писал, а 2002 (7.0)
... << RSDN@Home 1.1.3 stable >>
Re[6]: Проект сериализации - 2 [просьба высказаться]
Здравствуйте, SleepyDrago, Вы писали:
SD>Осталось отфильтровать 99.999% типов из pdb и все будет путем
Это тоже будет проходить автоматически. Например далем так
#define DECLARE_SERIALIZABLE enum {__serializable};
class A
{
DECLARE_SERIALIZABLE
}
И потом автоматически отсеиваем классы у которых есть enum с именем __serializable. Всё просто. Можно напридумывать разные такие нейтральные (не меняющие поведение классов) маркеры для генерации разных вещей по уже имеющейся информации о классе.
SD>Насколько я понял ее принцип работы похож на tracewpp из Platform Sdk. SD>те через DIA получаем все содержимое pdb.
Да.
SD>Вопрос по интерфейсу утилиты: надо спрашивать какой pdb брать тк если в проекте несколько модулей и они все кладут свои бинарники и pdb в один каталог (например "bin") то что?
Это только первая версия. На самом деле программе будет скармливаться файл проекта (*.vcproj) и она уже возьмёт только нужные файлы. Кстати намечается VS Add-in который будет подправлять свойства проекта необходимые для работы утилиты.
SD>Взгляните на 44ю презентацию на КРИ 2004 SD>там для проблемы большого количества данных и модификации схемы использован достаточно специфичный подход. Схема на внешнем языке тк данные важнее чем код.
Моя основная цель это сократить объём кодирования. Ввод внешнего языка и вообще какого-либо ручного описания чего-либо не подразумевается
SD>Имхо возможность автоматического наката схемы после изменений очень важна и если можно получить автоматизированным образом утилиту преобразования между версиями это перевешивает недодстатки хранения двух объявлений или внешнюю схему данных.
Я собирался не данные для работы с кодом генерировать, а сам код. Так быстрее будет работать и проще использовать. Тем более в контексте Си++, где есть перегруженные функции.
SD>И еще. всегда нужен путь для тех кто может "сделать все сам" а не черный ящик.
Безусловно. Более того, я хочу сделать аналогичную вешь для gcc, если получится конечно. Будут модули сбора информации и модули генерации чего-то там по этой информации. Как это организовать всё я пока не очень придумал.
Здравствуйте, yxiie, Вы писали:
Y>новая версия выдает: Y>...:::ERROR:::... Y>FILE: .\serialization_metainfo_read.cpp Y>LINE: 14 Y>HRESULT -2147221164 Y>надеюсь это хоть чем-то тебе поможет.
Думаю всё ясно. Вот эта строка
if (FAILED(hResult = CDiaDataSource.CoCreateInstance(CLSID_DiaSource))) throw METAINFO_EXCEPTION;
Судя по всему с VS 7.0 Идёт не таже самая версия, что с VS 7.1 — GUIDы не совпадают. Буду думать (может есть символьное имя ProgID )