Проект сериализации - 2 [просьба высказаться]
От: adontz Грузия http://adontz.wordpress.com/
Дата: 08.01.05 14:15
Оценка: 14 (3) +1
Вот тут утилитка (только для Visual Studio) которая собиарет информацию о классах.
Затускать в $(OutDir) (которых если ничего не менять обычно две Debug и Release) уже после того как проект собран
Выводит кучу информации, так что лучше сразу делать редирект в файл. (например так Serialization.exe > metadata.txt)
Насколько я понял (гы-гы) выводит информацию только об используемых (но не объявленных) классах. Так что если класс объявлен, но не используется его в выводе скорее всего не будет.

Меня интересуют
  1. Глючность Баг-репорты приветствуются
  2. Скорость (в виде [объём исходников в мегабайтах]/[скорость работы в секундах] и [количество UDT]/[скорость работы в секундах]).
  3. Может ли кто-либо создать что-либо аналогичное по параметрам (Объём информации/скорость работы) для CGG/MinGW?


27.01.05 07:44: Перенесено модератором из 'C/C++' — Павел Кузнецов
A journey of a thousand miles must begin with a single step © Lau Tsu
Re: Проект сериализации - 2 [просьба высказаться]
От: adontz Грузия http://adontz.wordpress.com/
Дата: 08.01.05 14:22
Оценка:
Здравствуйте, adontz, Вы писали:

А сам файл я забыл
http://www.rsdn.ru/File/2053/Serialization.rar
A journey of a thousand miles must begin with a single step © Lau Tsu
Re: Проект сериализации - 2 [просьба высказаться]
От: uw  
Дата: 08.01.05 14:46
Оценка: 30 (1)
Здравствуйте, adontz, Вы писали:

A>Меня интересуют

A>

    A>
  1. Глючность Баг-репорты приветствуются
    A>
  2. Скорость (в виде [объём исходников в мегабайтах]/[скорость работы в секундах] и [количество UDT]/[скорость работы в секундах]).
    A>
  3. Может ли кто-либо создать что-либо аналогичное по параметрам (Объём информации/скорость работы) для 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]
}


3. Да уже есть что-то подобное.
Re[2]: Проект сериализации - 2 [просьба высказаться]
От: adontz Грузия http://adontz.wordpress.com/
Дата: 08.01.05 18:08
Оценка:
Здравствуйте, uw, Вы писали:

uw>1. Глючность высока.


Спасибо! Исправил. URL тот-же
A journey of a thousand miles must begin with a single step © Lau Tsu
Re: Проект сериализации - 2 [просьба высказаться]
От: Dmitry A. Sinyagin www.astawireless.com
Дата: 08.01.05 18:30
Оценка: 30 (1)
для начала:

required files not found


дальше:

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

и вообще сам класс из себя представляет вот что
class helper_lock{
public:
    helper_lock(Mutex& locker) : m_lock(locker){
        m_lock.lock();
    }
    ~helper_lock(){
        m_lock.unlock();
    }
    
    bool condition() { return m_bCondition; }
    void iterate() { m_bCondition = false; }
private:
    Mutex&    m_lock;
    bool m_bCondition;
};


а вообще задумка чудесная. если потом в исходниках появится, то с радостью воспользуюсь для своих нужд
зы. про скорость. на процессере P-M 1400 1.5 метра исходников он пережевал за время 00:00:00.941
Re[2]: Проект сериализации - 2 [просьба высказаться]
От: adontz Грузия http://adontz.wordpress.com/
Дата: 08.01.05 18:59
Оценка:
Здравствуйте, 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

Меньше секунды? Чудесно!
A journey of a thousand miles must begin with a single step © Lau Tsu
Re: Проект сериализации - 2 [просьба высказаться]
От: yxiie Украина www.enkord.com
Дата: 08.01.05 19:21
Оценка:
Здравствуйте, adontz, Вы писали:

...

Runtime error!

Program:...Debug\Serialization.exe

This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.


никакого вывода не было вообще.
компилер: Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.00.9466 for 80x86 (VC 7.0)
... << RSDN@Home 1.1.3 stable >>
Re[2]: Проект сериализации - 2 [просьба высказаться]
От: adontz Грузия http://adontz.wordpress.com/
Дата: 08.01.05 19:24
Оценка:
Здравствуйте, yxiie, Вы писали:

Y>никакого вывода не было вообще.

Y>компилер: Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 13.00.9466 for 80x86 (VC 7.0)

У меня 13.00.9466 но я не уврене, что это причём-то
Вообще-то программа чисто уникодная, может у тебя 98й?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[3]: Проект сериализации - 2 [просьба высказаться]
От: Mamut Швеция http://dmitriid.com
Дата: 08.01.05 19:30
Оценка:
Здравствуйте, 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">> ...


dmitriid.comGitHubLinkedIn
Re[4]: Проект сериализации - 2 [просьба высказаться]
От: adontz Грузия http://adontz.wordpress.com/
Дата: 08.01.05 19:43
Оценка:
Здравствуйте, Mamut, Вы писали:

M>У меня то же самое. WinXP SP2


что у тебя в папке
C:\Program Files\Microsoft Visual Studio .NET 2003\Visual Studio SDKs ?
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[5]: Проект сериализации - 2 [просьба высказаться]
От: Mamut Швеция http://dmitriid.com
Дата: 08.01.05 19:51
Оценка:
A>что у тебя в папке
A>C:\Program Files\Microsoft Visual Studio .NET 2003\Visual Studio SDKs ?

Нужен именно 2003?

А так — DIA SDK и Visual Studio Analyzer SDK
... << RSDN@Home 1.1.4 beta 3 rev. 241>> ... <<Winamp is playing "Mary Black — Carolina Rua">> ...


dmitriid.comGitHubLinkedIn
Re: Проект сериализации - 2 [просьба высказаться]
От: SleepyDrago Украина  
Дата: 08.01.05 21:00
Оценка: +1
Здравствуйте, 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 [просьба высказаться]
От: yxiie Украина www.enkord.com
Дата: 08.01.05 21:15
Оценка:
Здравствуйте, 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й?

XP Professional SP1

вот только что попробовал на этом — и в 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 [просьба высказаться]
От: adontz Грузия http://adontz.wordpress.com/
Дата: 08.01.05 22:33
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Нужен именно 2003?


Понятия не имею Но у меня 2003 и всё работает.

M>А так — DIA SDK и Visual Studio Analyzer SDK


ОК, всё что надо.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[4]: Проект сериализации - 2 [просьба высказаться]
От: adontz Грузия http://adontz.wordpress.com/
Дата: 08.01.05 22:35
Оценка:
Здравствуйте, yxiie, Вы писали:

Y>вот только что попробовал на этом — и в Debug и в Release такой же результат

Y>может у меня какие-то необходимые опции в проекте не включены? какие хоть оно файлы обрабатывает?

Обрабатывает *.PDB У тебя должно быть их два ProjectName.pdb и vc70.pdb

Y>у меня только DIA SDK и у меня не 2003 как я уже писал, а 2002 (7.0)


У меня хедер называется dia2.h уж не номер ли версии в названии?

Перешли мне херед из папки DIA SDK
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[2]: Проект сериализации - 2 [просьба высказаться]
От: adontz Грузия http://adontz.wordpress.com/
Дата: 08.01.05 22:56
Оценка:
Здравствуйте, 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, если получится конечно. Будут модули сбора информации и модули генерации чего-то там по этой информации. Как это организовать всё я пока не очень придумал.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re: Проект сериализации - 2 [просьба высказаться]
От: adontz Грузия http://adontz.wordpress.com/
Дата: 08.01.05 22:57
Оценка:
Здравствуйте, adontz, Вы писали:

Обновил программу http://www.rsdn.ru/File/2053/Serialization.rar

Должна теперь не падать, а выдавать нормальные сообщения об ошибках.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[5]: Проект сериализации - 2 [просьба высказаться]
От: yxiie Украина www.enkord.com
Дата: 08.01.05 23:07
Оценка:
Здравствуйте, adontz, Вы писали:

A>Обрабатывает *.PDB У тебя должно быть их два ProjectName.pdb и vc70.pdb


есть

Y>>у меня только DIA SDK и у меня не 2003 как я уже писал, а 2002 (7.0)

A>У меня хедер называется dia2.h уж не номер ли версии в названии?

тоже есть

A>Перешли мне херед из папки DIA SDK


куда переслать?

новая версия выдает:
...:::ERROR:::...
FILE: .\serialization_metainfo_read.cpp
LINE: 14
HRESULT -2147221164

надеюсь это хоть чем-то тебе поможет.
... << RSDN@Home 1.1.3 stable >>
Re[6]: Проект сериализации - 2 [просьба высказаться]
От: adontz Грузия http://adontz.wordpress.com/
Дата: 08.01.05 23:15
Оценка:
Здравствуйте, 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 )
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[6]: Проект сериализации - 2 [просьба высказаться]
От: adontz Грузия http://adontz.wordpress.com/
Дата: 08.01.05 23:31
Оценка:
Здравствуйте, yxiie, Вы писали:

A>>Перешли мне херед из папки DIA SDK

Y>куда переслать?

Cкажи-ка чему у тебя равено значение поля CLSID в ключе HKEY_CLASSES_ROOT\MSDIA?
У меня {e60afbee-502d-46ae-858f-8272a09bd707}

Работает ли пример dia2dump из DIA SDK?

Там в папке bin есть DLLка. Напусти на неё regsrv32, может просто не зарегистрирована?
A journey of a thousand miles must begin with a single step © Lau Tsu