Проект Visual Generator
От: adontz Грузия http://adontz.wordpress.com/
Дата: 07.07.05 19:26
Оценка: 51 (6) -1 :))) :)))
Просьба модератору и любителям автомодерирования НЕ переносить данное сообщение по крайней мере какое-то время (пара дней), чтобы его увидело максимальное количество народа.

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

--------------------------------
Проект Visual Generator
--------------------------------

--------------------------------
Ограничения
--------------------------------
Язык: Си++
Компилятор: Microsoft Visual C++ 7.1 (и 8.0 когда будет релиз)
Среда разработки: Microsoft Visual Studio

Если это вам не подходит, смело ставьте мне минус и не читайте дальше. Хотя нет, минус лучше не ставьте

--------------------------------
Введение
--------------------------------
Итак, что это и зачем нужно? Начну издалека.
Последнее время слышно всё больше упрёков в адрес Си++ со стороны людей использующих другие языки программирования. Несмотря на то, что некоторые упрёки можно смело проигнорировать, есть такие, которые заставляются задуматься. Вот всё то, что заставило задуматься меня
  1. Возможность использовать конструкции языка Си, делающие код менее надёжным.
  2. Отсутствие поддерживаемых языком свойств и событий.
  3. Отсутствие стандартной библиотеки для создания пользовательского интерфейса.
  4. Отсутствие средств сериализации.
  5. Отсутствие метапрограммирования и их замена малопонятными и трудноотлаживаемыми конструкциями из шаблонов и макросов.
  6. Отсутсвие СОМ Interop
Практически любой программист на Си++ скажет на всё это – “ну и что”? Как избавиться от наследия Си или добавить метапрограммирование? Это ведь значит менять язык…
Не всё так безнадёжно. У любой проблемы есть решения…

--------------------------------
Некоторые факты
--------------------------------
  • Для нормальной работы Си++ кода достаточно поддерживать механизм обработки исключений, RTTI и операторы new/delete.
  • Любой компилятор Microsoft (даже компиляторы управляемых языков), в том числе и Си++ компилятор, при компиляции создаёт PDB (Program DataBase) файл. В этом файле есть помимо прочего вся информация обо всех использовавшихся типах.
  • IDE Visual Studio предоставляет много информации об иерархии классов в отдельно взятом файле ещё до компиляции.
  • Можно использовать кодогенератор для обработки информации полученной из PDB файла и от VS IDE.

    --------------------------------
    Решение проблемы №1
    --------------------------------
    Решение простое как топор . Просто надо избавится от CRT. Никто конечно не сможет запретить писать процедурно, но malloc и fopen умрут как категория. По большому счёту разве они ещё кому-то нужны? Реализовать же CRT полностью поддерживающую Си++ код не составляет большой проблемы. Фактически единственная не решённая пока мною задача это symbol demangling (undecoration), но и то больше от нехватки времени, чем из-за объективных проблем. Более того, хотелось бы перекрыть и прямой доступ к WinAPI и вообще к любому C-API. Это работа скорее объёмная, чем сложная. Да и не так страшен чёрт как его малюют. Современные заголовочные файлы Windows Platform SDK минимум на треть состоят из уже устаревших описаний.

    --------------------------------
    Решение проблемы №2
    --------------------------------
    Давайте рассмотрим одну из популярных реализаций свойств
    class propABC_type
    {
    public:
        parent_type * _parent()
        {
            return (parent_type *)(((long)this) - ((long)&((( parent_type *)0)->propABC)));
        }
    
        template <typename _type_value>
        propABC_type & operator = (_type_value _value)
        {
            _parent()->propABC_put(_value);
            return *this;
        }
        operator prop_type()
        {
            return _parent()->propABC_get();
        }
    } propABC;

    Данный класс, часто оформляют в ввиде макроса.
    #define PROPERTY(PARENT_CLASS, PROPERTY_NAME, PROPERTY_TYPE, FUNCTION_GET, FUNCTION_PUT) \
    class PROPERTY_NAME##_type \
    { \
    public: \
        PARENT_CLASS * _parent() \
        { \
            return (PARENT_CLASS *)(((long)this) - ((long)&(((PARENT_CLASS *)0)->PROPERTY_NAME))); \
        } \
    
        template <typename _type_value> \
        PROPERTY_NAME##_type & operator = (_type_value dataInit) \
        { \
            _parent()->FUNCTION_PUT(dataInit); \
            return *this; \
        } \
        operator PROPERTY_TYPE() \
        {
            return _parent()->FUNCTION_GET(); \
        } \
    } PROPERTY_NAME;

    Он создаёт нечто, что ведёт себя как свойство с именем PROPERTY_NAME и типом PROPERTY_TYPE. Однако у него и всех ему подобных классов есть серьёзные недостатки:
    1. Описание и функциональность свойства размазаны по классу и двум функциям.
    2. Синтаксис не удобный и не понятный. Описывая своство надо указать класс-контейнер.
    Что же делать? По идее такой синтаксис
    property(int, my_prop)
    {
        get
        {
            return _internal_variable;
        }
    
        set
        {
            _internal_variable = value;
        }
    }

    хотя конечно и не идеален, но гораздо предпочительнее. Но указанных данных компилятору просто мало чтобы создать работоспособный код. Компилятору да, а нам? С помошью кодогенератора использование такого (или подобного) синтаксиса может стать реальностью.
    Аналогично и события можно реализовать удобно и эффективно.
    --------------------------------
    Решение проблемы №3
    --------------------------------
    Имея механизм событий и свойств можно реализовать очень прозрачную GUI библиотеку. А кодогенераторы позволят избавится от явной подписки на события
    Например так
    class MyWindow : public Window
    {
        bool OnMove(const message<MOVE> & msg)
        {
            return false;
        }
    }

    Код подписки OnMove на сообщение MOVE будет сгенерирован автоматически. Кроме того есть идея создания библиотеки элементов управления с расширяемых извне наподобие Office CommandBars.

    --------------------------------
    Решение проблемы №4
    --------------------------------
    Что нужно чтобы сериализовать структуру A с помошью кодогенератора?
    Нужно написать
    struct A
    {
    serializable;
    int x;
    int y;
    }
    собственно всё Особенности записи данной структуры в файл можно настраивать и в design time, хотя стандартные схемы скорее всего будут устраивать в 99% случаев.

    --------------------------------
    Решение проблемы №5
    --------------------------------
    Я уже говорил про кодогенераторы?

    --------------------------------
    Решение проблемы №6
    --------------------------------
    Именно Interop а не Support.
    Итак, что надо? Проблем как таковых две. Во-первых, неудобно использовать IDispatch. Invoke это не очень удобно. Во-вторых, написание СОМ серверов всегда жёстко завязано на аттрибуты ATL или мучительно из-за необходимости использования IDL. Что же делать?
    Я думаю ничто не мешает генерировать класс-обёртку (на лету или по запросу) для dispatch_ptr<IInterface>.
    Что касается создания СОМ серверов тут тут всегда было два камня перткновения. Реализация методов AddRef/Release для коклассов и DllGetClassObject (да и самого class object). И та и другая проблема с лёгкостью решаются кодогенератором.

    --------------------------------
    Как всё это будет выглядеть
    --------------------------------
    Всё это будет выглядеть как Visual Studio Add-in, который по ходу дела будет сам генерировать и добавлять в проект нужные файлы.

    --------------------------------
    Если вы дочитали до конца
    --------------------------------
    И хотите послать меня в boost, etc то остановитесь и подумайте — я заранее понимал что эти идеи не могли понравится всем подряд. Если вы хотите покритиковать по мелочи, то помните что это всего лишь идея, а не продукт который я вам пытаюсь продать. Стоит ли цеплятся? Хотите упрекнуть меня в том что я привязываю межплатформенный язык Си++ к далеко не самому хорошему компилятору? Это мой выбор, тут уж ничего не поделать.Переубеждать меня бессмысленно

    Но если вы разделяете мои взгляды, если у вас тоже есть какое-то наработки которыми вы хотите поделится, то добро пожаловать.

    11.07.05 23:26: Перенесено модератором из 'C/C++' — Павел Кузнецов
  • A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[7]: Проект Visual Generator
    От: c-smile Канада http://terrainformatica.com
    Дата: 09.07.05 03:32
    Оценка: +2 :))) :)))
    Здравствуйте, Шахтер, Вы писали:

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


    C>>adontz wrote:


    >>> C>Ээээ... А в чем проблема? Я сейчас использую Hoard

    >>> C>(http://www.hoard.org) — он прозрачно заменяет malloc/free и new/delete.
    >>> Нет, я не говорю, что это в принципе невозможно. Я говорю о другом
    >>> вместо того чтобы скачивать и настраивать десяток-другой расширений
    >>> C++, не лучше ли сделать C++ Run-Time которая будет всё это
    >>> поддерживать и ещё много чего другого.

    C>>90% того, что мне надо — есть в boost. Остальное давно скачано.


    C>>Написать аллокатор лучше Hoard'а, контейнеры лучше чем в STLPort'е вам

    C>>все равно не получится.
    А привязка к компилятору — вообще убивает весь
    C>>смысл затеи. Использовали тогда бы уж лучше GCCXML.

    Ш>Отучаемся говорить за других.


    Так их, дядько Шахтер.
    Еще можно говорить "убей в себе раба!"
    Re: Проект Visual Generator
    От: MaximE Великобритания  
    Дата: 08.07.05 10:53
    Оценка: 30 (1) +1 :)
    adontz wrote:

    > --------------------------------

    > Решение проблемы №1
    > --------------------------------
    > Решение простое как топор . Просто надо избавится от CRT. Никто конечно не сможет запретить писать процедурно, но malloc и fopen умрут как категория. По большому счёту разве они ещё кому-то нужны? Реализовать же CRT полностью поддерживающую Си++ код не составляет большой проблемы. Фактически единственная не решённая пока мною задача это symbol demangling (undecoration), но и то больше от нехватки времени, чем из-за объективных проблем. Более того, хотелось бы перекрыть и прямой доступ к WinAPI и вообще к любому C-API. Это работа скорее объёмная, чем сложная. Да и не так страшен чёрт как его малюют. Современные заголовочные файлы Windows Platform SDK минимум на треть состоят из уже устаревших описаний.

    Шутник вы, однако, батенька ))

    --
    Maxim Yegorushkin
    Posted via RSDN NNTP Server 1.9
    Re[5]: Проект Visual Generator
    От: Cyberax Марс  
    Дата: 08.07.05 13:51
    Оценка: 1 (1) +1 -1
    adontz wrote:

    > C>Ээээ... А в чем проблема? Я сейчас использую Hoard

    > C>(http://www.hoard.org) — он прозрачно заменяет malloc/free и new/delete.
    > Нет, я не говорю, что это в принципе невозможно. Я говорю о другом
    > вместо того чтобы скачивать и настраивать десяток-другой расширений
    > C++, не лучше ли сделать C++ Run-Time которая будет всё это
    > поддерживать и ещё много чего другого.

    90% того, что мне надо — есть в boost. Остальное давно скачано.

    Написать аллокатор лучше Hoard'а, контейнеры лучше чем в STLPort'е вам
    все равно не получится. А привязка к компилятору — вообще убивает весь
    смысл затеи. Использовали тогда бы уж лучше GCCXML.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[6]: Проект Visual Generator
    От: Шахтер Интернет  
    Дата: 09.07.05 02:17
    Оценка: +2 :)
    Здравствуйте, Cyberax, Вы писали:

    C>adontz wrote:


    >> C>Ээээ... А в чем проблема? Я сейчас использую Hoard

    >> C>(http://www.hoard.org) — он прозрачно заменяет malloc/free и new/delete.
    >> Нет, я не говорю, что это в принципе невозможно. Я говорю о другом
    >> вместо того чтобы скачивать и настраивать десяток-другой расширений
    >> C++, не лучше ли сделать C++ Run-Time которая будет всё это
    >> поддерживать и ещё много чего другого.

    C>90% того, что мне надо — есть в boost. Остальное давно скачано.


    C>Написать аллокатор лучше Hoard'а, контейнеры лучше чем в STLPort'е вам

    C>все равно не получится.
    А привязка к компилятору — вообще убивает весь
    C>смысл затеи. Использовали тогда бы уж лучше GCCXML.

    Отучаемся говорить за других.

    C>--

    C>С уважением,
    C> Alex Besogonov (alexy@izh.com)
    В XXI век с CCore.
    Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
    Re[9]: Проект Visual Generator
    От: c-smile Канада http://terrainformatica.com
    Дата: 09.07.05 03:27
    Оценка: 13 (1) :)
    Здравствуйте, SchweinDeBurg, Вы писали:

    SDB>Здравствуйте, c-smile, Вы писали:


    CS>>Также оказалаcь полезной "фича" MSPACES в аллокаторе Doug Lea


    SDB>А скажи мне, брат Smile — в MFC-шных приложениях она будет так же "полезна"?


    Скажу тебе брат Schwein как на духу — хрен его знает.

    В моем случае мне нужно было локализовать аллокации пассивных
    объектов DOMa (struct) внутри одной сущности — некоего document.
    И чтобы потом не заморачиваться с удалением оных я удалял весь
    memory pool скопом. Писался крутой Word Processor. К тому же фрагментация
    памяти и все такое.

    На конкретных задачах можно получить выигрыш, иногда немалый.
    Короче, memory allocators штука индивидуальная. В Harmonia
    например весь HTML DOM аллоцируется в одном массиве путем дописывания
    в конец. Такой вот аллокатор для бедных. Там это можно так как
    динамическое изменение сценарием пока не предусмотретно.

    Надеюсь что помог чем
    Re[7]: Проект Visual Generator
    От: SchweinDeBurg Россия https://zarezky.spb.ru/
    Дата: 08.07.05 21:25
    Оценка: +1 :)
    Здравствуйте, adontz, Вы писали:

    A>Есть вещи которых не хватает в обоих языках.


    [offtop]
    И нам всегда нужно много и сразу...
    (с) Рыбин
    [/offtop]
    [ posted via RSDN@Home 1.1.4 beta 7 r501, accompanied by Аквариум — Не Могу Оторвать Глаз От Тебя ]
    - Искренне ваш, Поросенок Пафнутий
    Re[15]: Проект Visual Generator
    От: Павел Кузнецов  
    Дата: 09.07.05 15:00
    Оценка: +2
    Здравствуйте, adontz, Вы писали:

    A>
    A>  ______________________
    A> / Version 1 \ Version 2 \
    A>|                         |
    A>| [x] width               |
    A>| [x] height              |
    A>| [_] area                |
    A>|                         |
    A>---------------------------
    
    A>  ______________________
    A> / Version 1 / Version 2 \
    A>|                         |
    A>| [x] width               |
    A>| [x] height              |
    A>| [x] area                |
    A>|                         |
    A>---------------------------
    A>


    Гм, что-то я не до конца понял идею... Как будет представлена ситуация, когда разница не в наличии/отсутствии некоторого поля в разных версиях, а в разной логике его записи, скажем, в версии 16 поле пишется как uint16, и отсчитывается от 1, а в версии 17 -- как uint32, и отсчитывается от 0? Как быть, если от некоторого прочитанного значения зависит логика разбора остальных? Как предполагается выражать возможность сериализации одного класса в разные форматы? Что делать, если в двух разных ветках системы контроля версий были внесены две разные версии под номером 17, как их сливать, если редактирование осуществляется графическим редактором?..
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[3]: Проект Visual Generator
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 12.07.05 12:46
    Оценка: +1 :)
    Здравствуйте, adontz, Вы писали:

    A>Я небуду тебе отвечать словами (всё равно это выльется в 34 страницы бесполезных споров), я лучше суну тебе под нос готовый проект


    Отличное решение. Зайти на этот форум через 10 лет? Или свисниш когда будет готово?
    ... << RSDN@Home 1.1.4 beta 7 rev. 466>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[9]: Проект Visual Generator
    От: Юнусов Булат Россия  
    Дата: 09.07.05 22:07
    Оценка: 39 (1)
    Здравствуйте, adontz, Вы писали:

    A>Что касается System.Runtime.Serialization, то тут начинаются подводные камни. Во-первых, класс непомеченный аттрибутом [Serializable] использовать нельзя. Я это воспринимаю как недостаток, тем более что Xml-сериализация без него работает, значит в принципе без специального аттрибута можно обойтись. Дальнейшее ИМХО просто архитектурная ошибка, которую легко обойти, то менее ошибкой она от этого не становится. Дело было так. У меня был контейнер для некоторых элементов, которые надо было не только хранить, но и отображать. Ну я реализовал некоторые необходимые интерфейсы и подключил мой контейнер как DataSource для DevExpress.TreeList. Всё замечательно отображалось, TreeList как и положено подписался на событие ListChanged и реагировал на все изменения. Дальше самое интересное — я хочу записать свой контейнер в файл, а мне говорят, что DevExpress.TreeList is not serializable. Оно мне надо было? Пришлось создавать ещё одну копию списка на события которой никто не подписан) только для того, чтобы записать её в файл, так как помечать событие аттрибутом NonSerialized нельзя. Ладно лишний расход памяти, но что если мне надо сериализовать вместе со структурой некоторые из подписчиков? Система показывает себя в этом случае не гибкой. ИМХО, если уж ввели атрибут Serializable, то надо было классы без этого аттрибута просто пропускать, а не генерировать ошибки.


    Как это нельзя? — это делать нужно и делается сплошь и рядом — только несколько другим путем
        [Serializable]
        public class OperandCollection : CollectionBase, IBindingList
        {
            [NonSerialized] 
            private ListChangedEventHandler listChangedHandler;
    
            public event ListChangedEventHandler ListChanged
            {
                add { listChangedHandler += value; }
                remove { listChangedHandler -= value; }
            }

    Гуевых подписчиков серилизовать — идея вредная — отдашь ты например коллекцию по ремотингу — придется тащить и все потроха девекса? (или чего там юзается) Это ж никуда не годится.
    Re[5]: Проект Visual Generator
    От: Cyberax Марс  
    Дата: 08.07.05 18:54
    Оценка: 22 (1)
    SchweinDeBurg wrote:

    > C>Я сейчас использую Hoard

    > C>(http://www.hoard.org) — он прозрачно заменяет malloc/free и new/delete.
    > А можно чуточку комментариев?..

    Это такой крутой аллокатор для многотредовых приложений, с огромной
    кучей оптимизаций, с неблокирующим malloc/free и т.п.. Очень часто в
    разы быстрее стандартных аллокаторов.

    > Хотелось бы услышать что-то такое "человеческое", "личностное"...

    > Скажем, с VC 7.*0* эта штука дружит?

    Даже с VC6 дружит, он прозрачно заменяет CRTшные вызовы. В коде просто
    надо вставить:
    #if defined(USE_HOARD)
    #pragma comment(lib, "libhoard.lib")
    #endif


    Как вариант, можно даже с помощью Detours даже без изменений исходников
    использовать.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[3]: Проект Visual Generator
    От: Cyberax Марс  
    Дата: 08.07.05 13:28
    Оценка: 11 (1)
    adontz wrote:

    > ME>Шутник вы, однако, батенька ))

    > Почему шутник? У меня уже есть работающая C++ Run-Time котора ятолько
    > demangling не делает, а всё остальное делает.
    > К тому же подумай сам какой кайф, если стандартные new/delete удут
    > использовать скажем QuickHeap.

    Ээээ... А в чем проблема? Я сейчас использую Hoard
    (http://www.hoard.org) — он прозрачно заменяет malloc/free и new/delete.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re: Проект Visual Generator
    От: 0xDEADBEEF Ниоткуда  
    Дата: 13.07.05 11:51
    Оценка: 10 (1)
    Здравствуйте, adontz, Вы писали:

    A>--------------------------------

    A>Ограничения
    A>--------------------------------
    A>Язык: Си++
    A>Компилятор: Microsoft Visual C++ 7.1 (и 8.0 когда будет релиз)
    A>Среда разработки: Microsoft Visual Studio
    ...Жесткая привязка к компилятору и платформе. Некошерно.


    A>--------------------------------

    A>Введение
    A>--------------------------------
    A>

      A>
    1. Возможность использовать конструкции языка Си, делающие код менее надёжным.
      Низзя. Как правило С++ный код активно использует сишные библиотеки. Legacy и не очень.
      Примеры: zlib, libpng, expat, pcre и прочая. Так что FILE* malloc и memcpy будут жить вне зависимости от.

      Впрочем, никто тебе не запрещает воспользоваться "#pragma deprecated" чтобы заанноить "любителя старины" до самых печенок.

      A>
    2. Отсутствие поддерживаемых языком свойств и событий.
      Что по поводу __declspec(property) а также __event и __hook?
      Если уж мы определились с компилятором, а на ISO C++ нам ложить с прибором, то не использовать возможности компилятора на полную катушку есть глупость великая.

      A>
    3. Отсутствие стандартной библиотеки для создания пользовательского интерфейса.
      MFC? WTL? QT, наконец?
      Опять-таки: мы определились с компилятором. Он существует только под Windows. Ergo, любую гуёвую для них библиотеку мы спокойно можем обьявлять "стандартной" и не изобретать велосипед о пяти колесах.

      A>
    4. Отсутствие средств сериализации.
      Согласен.

      A>
    5. Отсутствие метапрограммирования и их замена малопонятными и трудноотлаживаемыми конструкциями из шаблонов и макросов.
      Согласен, но. Метапрограммирование как правило окупается только в повторно используемом коде.
      В коде конечного приложения, заточенного под решение конкретной задачи, потребность в нем минимальна.

      A>
    6. Отсутсвие СОМ Interop
      #import? __interface?

      A>

    Резюме: Если опираться только на MSVC, то проект по большому счету не имеет смысла — почти все из перечисленного поддерживается. Если же на MSVC не опираться, то какой-то смысл прослеживается, но без четко сформулированных задач проекта, он выглядит как куча достаточно несерьезных "хотелось бы".
    __________
    16.There is no cause so right that one cannot find a fool following it.
    Re[2]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 08.07.05 11:22
    Оценка: +1
    Здравствуйте, MaximE, Вы писали:

    ME>Шутник вы, однако, батенька ))


    Почему шутник? У меня уже есть работающая C++ Run-Time котора ятолько demangling не делает, а всё остальное делает.
    К тому же подумай сам какой кайф, если стандартные new/delete удут использовать скажем QuickHeap.

    Не прочувствовал ты, не прочувствовал...
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[3]: Проект Visual Generator
    От: Tom Россия http://www.RSDN.ru
    Дата: 08.07.05 11:58
    Оценка: :)
    A>Не прочувствовал ты, не прочувствовал...

    -Вас Гондурас не беспокоит?
    -Не чеши, и не будет беспокоить

    ... << RSDN@Home 1.1.4 beta 4 rev. 303>>
    Народная мудрось
    всем все никому ничего(с).
    Re[9]: Проект Visual Generator
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 08.07.05 15:38
    Оценка: +1
    Здравствуйте, adontz, Вы писали:

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


    A>>>Во-вторых, GCCXML крайне нестабильная вешь.

    E>>Так может лучше GCCXML помочь?

    A>Плохая идея.


    Не многим хуже чем Проект Visual Generator
    Автор: adontz
    Дата: 07.07.05


    A> Разбирать PDBшки и Code DOM это гораздо быстрее, потому что нет необходимости дважды делать синтаксический разбор кода. Кода, который GCCXML часто просто не понимает.


    Я так понимаю, что в случае GCCXML тебе придется разбирать не код, а XML после работы gccxml.

    A>Зачем усложнять задачу и писать (дописывать) компилятор, когда можно использовать возможность расширения уже существующего.


    Существующего только на одной платформе, я бы дополнил. А с учетом того, что у Microsoft большой уклон в .Net и C++/CLI, то может статся, что нормальный C++ продолжит существовать на Unix-ах. Где существующим как раз является GCC.
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[11]: Проект Visual Generator
    От: Cyberax Марс  
    Дата: 08.07.05 18:47
    Оценка: +1
    adontz wrote:

    > Можно структуру

    >
    >struct
    >{
    > int x;
    > int y;
    >}
    >
    >
    > считывать из файла где y записан раньше x. И так далее. В принципе
    > ничто не мешает делать и вычисляемые поля. Чтобы скажем для
    > прямоугольника width и height читать из файла, а area считать на лету,
    > но только для версии 1, потому что в версии 2 area записан. Для
    > кодогенератора пара пустяков, без него решение превращается в кучу
    > малоструктурированного кода в котором легко ошибится.

    Это все без особых проблем делается существующими средствами С++.
    Кодогенерация помогла бы кое-где, но она далеко не критична.
    struct MyStruct{int x,y;};
    template<class Archive> void serialize(Archive &ar,MyStruct 
    &str,unsigned version)
    {
        ar&y&x;
    };


    Для версии 2:
    struct MyStruct{int x,y,area;};
    template<> version_tag<MyStruct> {enum version=2;};
    
    template<class Archive> void serialize(Archive &ar,MyStruct 
    &str,unsigned version)
    {
        ar&y&x;
        if (version==2)
           ar&area;
    };

    Вот и все (#include'ы бустовских исходников пропущены для краткости).

    Причем все будет работать, если x и y — это тоже структуры (для которых
    определена сериализация). То есть единственное место, где нужна
    генерация кода — это создание метода serialize, а это уже совсем некритично.

    > E>Существующего только на одной платформе, я бы дополнил. А с учетом

    > того, что у Microsoft большой уклон в .Net и C++/CLI, то может статся,
    > что нормальный C++ продолжит существовать на Unix-ах. Где существующим
    > как раз является GCC.
    > Ну я не думаю, что Unmanaged C++ Compiler будет убит в обозримом
    > будущем. С другой стороны, что мешает иметь VC++ только как основной
    > компилятор? Ведь можно все эти сгенерированные файлы потом чем угодно
    > перекомпилировать — проблем нет.

    А __attribute__'ы GCCшные он понимает? А export templates из Como/ICC?

    > Разработчики Mozilla AFAIK используют в качестве основного компилятора

    > именно VC.

    Нет, они используют MinGW и хотят переползти на IntelC++.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[5]: Проект Visual Generator
    От: Павел Кузнецов  
    Дата: 08.07.05 19:34
    Оценка: +1
    adontz,

    > Я сам сейчас пишу на C#, и у этого языка есть свои большие достоинства, но нет много такого что есть в Си++. Суть в том, что если поднатужится, то Си++ можно дотянуть до C#.


    Если я правильно понимаю, речь идет о Reflection и т.п. Но это не есть свойства C#, это возможности платформы. Соответственно, почему бы, если хочется получить эти возможности, сохранив возможности C++, не попробовать C++/CLI, именно для этого и предназначенный?..
    Posted via RSDN NNTP Server 2.0 beta
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[14]: Проект Visual Generator
    От: Cyberax Марс  
    Дата: 08.07.05 21:26
    Оценка: +1
    eao197 wrote:

    > C>Угу, обожаю лэйауты! Я на Swing'е в Java пишу код с лэйаутами для

    > C>интерфейса _быстрее_, чем дельфисты кидают контролы на формочки
    > C>(сравнивали).
    > Не, имхо, в Qt, особенно в паре с Qt Designer, layout-ы удобнее будут.
    > Хотя Swing-овых я уже года четыре как не брал в руки

    Жаль что у Qt лицензия — GPL, иначе бы использовал его во всех проектах.
    Коммерческие лицензии больно уж дорогие у них.

    В Swing'е главным оказалось подобрать лучший набор лэйаутов и изучить их
    особенности — после этого программирование интерфейсов даже стало
    интересным.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[18]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 09.07.05 17:48
    Оценка: +1
    Здравствуйте, Шахтер, Вы писали:

    Ш>Делись. Я заинтересован в точном знании как реализована поддержка обработки исключений в VC++. У меня есть некоторые планы подкрутить это дело.


    Давно уже поделился http://www.rsdn.ru/Forum/Message.aspx?mid=1206489&amp;only=1
    Автор: adontz
    Дата: 05.06.05
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[11]: Проект Visual Generator
    От: Cyberax Марс  
    Дата: 09.07.05 21:01
    Оценка: +1
    adontz wrote:

    > C>Есть Boost.Serialization

    > C>(http://boost.org/libs/serialization/doc/index.html). Вот ее design
    > goals:
    > Угу. Явная сериализация базового класса,

    По-другому не получается красиво, это у них проскакивало в списке
    рассылки. Да и не такая уж это большая проблема — добавить одну строчку
    в метод serialize.

    > ручная версионность это всё пол-беды.


    К сожалению, автоматическое версирование (как в архивах MFC, например)
    на практике выливается только в то, что версируются только добавления
    полей. Для более других случаев приходится писать код руками.

    > Беда это, например, потеря контроля целостности данных. Вот как с

    > помошью boost.serialization делается такое:
    > Есть параллелипипед заданный тремя векторами с началами в одной точке
    > (4 точки, 12 координат). В процессе его использования нужны координаты
    > всех 8 вершин и объём.


    > Считать их каждый раз накладно,, значит они тоже хранятся и

    > вычисляются по мере изменения исходных данных, но в файл не
    > записываются. Как мне их пересчитать после сериализации? В методе
    >
    >template<class Archive>
    >void serialize(Archive & ar, const unsigned int version)
    >
    > ?

    Можно и в нем, у архивов есть метод bool is_loading(). Кроме того, для
    классов можно сделать serialization hook'и, которые будут вызываться при
    загрузке/сохранении объектов (удобно для валидации загружаемых данных,
    например).

    > C>При этом ее реально удобно использовать _и_ расширять. Единственное

    > чем бы помог кодогенератор — это для перечисления полей структуры и
    > для разворачивания атрибутов.
    > Нет, ты не прав. Кодогенератор может не только перечислять поля, но и
    > вызывать методы. Мне например кажется более разумным считать
    > вычисляемые поля не в методе load, а в методе on_after_load который бы
    > вызывался если он есть.

    Кто мешает добавить его в boost.serialization? Тем более, что это уже
    сделано.

    Все равно не вижу целей, которые оправдывали бы замену CRT.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re: Проект Visual Generator
    От: VladD2 Российская Империя www.nemerle.org
    Дата: 12.07.05 02:05
    Оценка: +1
    Здравствуйте, adontz, Вы писали:

    Я знаю два более простых способа решить твои задачи.

    1. Используй для написания программ MC++/C++/CLI и из полученных метаданных генерируй нэйтивный код. Реализовать чтение формата дотнетных сборок и темболее генерацию такой кучи кода будет не просто. Но есе же хоть рельно. То что ты описал не захотела поднимать даже МС.
    2. Используй C# или MC++ и не морочь людям голуву. Если нужно будет оптимизаций на уровне машинных команд, то воспользуешся тем же МС++ и прагмой заставляющей его генерировать нэйтив-код.

    А то что ты написал — это утопия про волшебный костыль которая сделает из С++ серебренную пулю.
    ... << RSDN@Home 1.1.4 beta 7 rev. 466>>
    Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
    Re[2]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 12.07.05 10:07
    Оценка: :)
    Здравствуйте, VladD2, Вы писали:

    VD>А то что ты написал — это утопия про волшебный костыль которая сделает из С++ серебренную пулю.


    Я небуду тебе отвечать словами (всё равно это выльется в 34 страницы бесполезных споров), я лучше суну тебе под нос готовый проект
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re: Проект Visual Generator
    От: Аноним  
    Дата: 08.07.05 07:34
    Оценка:
    Здравствуйте, adontz, Вы писали:

    Айда, давайте замутим кодогенератор
    Re: Проект Visual Generator
    От: Antikrot  
    Дата: 08.07.05 08:01
    Оценка:
    Здравствуйте, adontz, Вы писали:

    A> возможно (голубая мечта) формация команды, для работы над проектом

    Поменяй цвет , и я готов присоединиться к команде...

    A>--------------------------------

    A>Проект Visual Generator
    A>--------------------------------
    Написал бы, что будет основным назначением данного проекта... судя по названию, примочка для рисования гуев, или я не прав?

    A>Компилятор: Microsoft Visual C++ 7.1 (и 8.0 когда будет релиз)

    А чем вызвано данное ограничение? Или MSVS не позволяет больше добавлять к себе другие компиляторы?
    Re: Проект Visual Generator
    От: kirban Россия  
    Дата: 08.07.05 08:12
    Оценка:
    Здравствуйте, adontz, Вы писали:

    A>

      A>
    1. Возможность использовать конструкции языка Си, делающие код менее надёжным.
      A>
    2. Отсутствие поддерживаемых языком свойств и событий.
      A>
    3. Отсутствие стандартной библиотеки для создания пользовательского интерфейса.
      A>
    4. Отсутствие средств сериализации.
      A>
    5. Отсутствие метапрограммирования и их замена малопонятными и трудноотлаживаемыми конструкциями из шаблонов и макросов.
      A>
    6. Отсутсвие СОМ Interop
      A>

    А почему нельзя использовать управляемые расширения и платформу .NET? Все эти проблемы там решаются.
    Re[2]: Проект Visual Generator
    От: KHeLeKRoN Россия  
    Дата: 08.07.05 08:58
    Оценка:
    Здравствуйте, Antikrot, Вы писали:

    {}
    A>>Компилятор: Microsoft Visual C++ 7.1 (и 8.0 когда будет релиз)
    A>А чем вызвано данное ограничение? Или MSVS не позволяет больше добавлять к себе другие компиляторы?
    BTW а как их добавлять?
    And solder won't keep me together (c)
    Re[3]: Проект Visual Generator
    От: Antikrot  
    Дата: 08.07.05 09:27
    Оценка:
    Здравствуйте, KHeLeKRoN, Вы писали:

    KHL>BTW а как их добавлять?

    Через ж..у Примерно как icl это делает.
    Re[4]: Проект Visual Generator
    От: KHeLeKRoN Россия  
    Дата: 08.07.05 09:30
    Оценка:
    Здравствуйте, Antikrot, Вы писали:

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


    KHL>>BTW а как их добавлять?

    A>Через ж..у Примерно как icl это делает.
    Можно чуть подробнее? Че такое ICL?
    And solder won't keep me together (c)
    Re[5]: Проект Visual Generator
    От: Аноним  
    Дата: 08.07.05 09:43
    Оценка:
    Здравствуйте, KHeLeKRoN, Вы писали:

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


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


    KHL>>>BTW а как их добавлять?

    A>>Через ж..у Примерно как icl это делает.
    KHL>Можно чуть подробнее? Че такое ICL?

    intel (?)
    Re[6]: Проект Visual Generator
    От: KHeLeKRoN Россия  
    Дата: 08.07.05 09:46
    Оценка:
    Здравствуйте, Аноним, Вы писали:

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


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


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


    KHL>>>>BTW а как их добавлять?

    A>>>Через ж..у Примерно как icl это делает.
    KHL>>Можно чуть подробнее? Че такое ICL?

    А>intel (?)

    А как это делает ICL?
    And solder won't keep me together (c)
    Re[2]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 08.07.05 10:25
    Оценка:
    Здравствуйте, Antikrot, Вы писали:

    A>>Компилятор: Microsoft Visual C++ 7.1 (и 8.0 когда будет релиз)

    A>А чем вызвано данное ограничение? Или MSVS не позволяет больше добавлять к себе другие компиляторы?

    Позволяет, но зачем писать свой компилятор, когда можно не писать?
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[2]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 08.07.05 10:26
    Оценка:
    Здравствуйте, kirban, Вы писали:

    K>А почему нельзя использовать управляемые расширения и платформу .NET? Все эти проблемы там решаются.


    Идея в отм, что как разе НЕ использовать .Net
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[7]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 08.07.05 10:40
    Оценка:
    Здравствуйте, KHeLeKRoN, Вы писали:

    KHL>А как это делает ICL?


    Идём на www.vsipdev.com и скачиваем VSIP SDK
    Потом устанавливаем VSIP SDK и в проектах находим Others\Extensibility\Language Package
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[3]: Проект Visual Generator
    От: kirban Россия  
    Дата: 08.07.05 11:05
    Оценка:
    Здравствуйте, adontz, Вы писали:

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


    K>>А почему нельзя использовать управляемые расширения и платформу .NET? Все эти проблемы там решаются.


    A>Идея в отм, что как разе НЕ использовать .Net


    То есть написать свой собственный? Я конечно понимаю что велосипедо-строитель сидит в каждом программисте , но мне кажется что все равно придется смотреть в сторону .NET. Уж больно активно microsoft его проталкивает, по крайней мере сейчас.

    PS: Вобще мне интересен этот проект, и могу помочь если надо по мере возможности/знаний
    PSPS: Я не являюсь фанатом .NET, я сторонник решать задачу с использованием тех технологий/языков, с которыми решение будет проще и быстрее
    Re[4]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 08.07.05 11:19
    Оценка:
    Здравствуйте, kirban, Вы писали:

    A>>Идея в отм, что как разе НЕ использовать .Net

    K>То есть написать свой собственный?

    Нет. На самом деле .Net тоже не панацея. Та сериализация и та GUI библиотека о которых я думаю .Net даже и не снилась. А остальное единоразовая работа. Это GUI библиотеку можно улучшать, а свойства они либо есть либо нет

    K>PS: Вобще мне интересен этот проект, и могу помочь если надо по мере возможности/знаний

    K>PSPS: Я не являюсь фанатом .NET, я сторонник решать задачу с использованием тех технологий/языков, с которыми решение будет проще и быстрее

    Я сам сейчас пишу на C#, и у этого языка есть свои большие достоинства, но нет много такого что есть в Си++. Суть в том, что если поднатужится, то Си++ можно дотянуть до C#. Можно решать и обратную задачу, улучшать C#. Вот R#'пщики этим и заняты.
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[3]: Проект Visual Generator
    От: Antikrot  
    Дата: 08.07.05 11:56
    Оценка:
    Здравствуйте, adontz, Вы писали:

    A>>>Компилятор: Microsoft Visual C++ 7.1 (и 8.0 когда будет релиз)

    A>>А чем вызвано данное ограничение? Или MSVS не позволяет больше добавлять к себе другие компиляторы?
    A>Позволяет, но зачем писать свой компилятор, когда можно не писать?
    Не, компилятор я писать конечно не собираюсь
    Просто интересно, привязка к MSVS понятна — VS Add-in, но причем здесь привязка на компилятор? Или у тебя есть какие хитрые идеи, завязанные на ms extensions к с++?
    В любом случае, не откажусь поучаствовать в вело-гуи-строении , хоть к моей работе это никаким боком не относится.
    Re[4]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 08.07.05 12:06
    Оценка:
    Здравствуйте, Antikrot, Вы писали:

    A>Не, компилятор я писать конечно не собираюсь

    A>Просто интересно, привязка к MSVS понятна — VS Add-in, но причем здесь привязка на компилятор? Или у тебя есть какие хитрые идеи, завязанные на ms extensions к с++?

    Просто кодогенератор должен откуда-то получать информацию. В VC++ это сделать очень просто. Есть куча информации и документрированное API для её получения.

    A>В любом случае, не откажусь поучаствовать в вело-гуи-строении , хоть к моей работе это никаким боком не относится.


    Эт хорошо
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[4]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 08.07.05 13:46
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Ээээ... А в чем проблема? Я сейчас использую Hoard

    C>(http://www.hoard.org) — он прозрачно заменяет malloc/free и new/delete.

    Нет, я не говорю, что это в принципе невозможно. Я говорю о другом вместо того чтобы скачивать и настраивать десяток-другой расширений C++, не лучше ли сделать C++ Run-Time которая будет всё это поддерживать и ещё много чего другого.
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[6]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 08.07.05 14:06
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>90% того, что мне надо — есть в boost. Остальное давно скачано.

    C>Написать аллокатор лучше Hoard'а, контейнеры лучше чем в STLPort'е вам
    C>все равно не получится. А привязка к компилятору — вообще убивает весь
    C>смысл затеи. Использовали тогда бы уж лучше GCCXML.

    Во-первых я и не предлагал писать свои контейнеры. Во-вторых, GCCXML крайне нестабильная вешь.
    В-третьих, те задачи которые я хочу решить без кодогенератора или поддержки со стороны компилятора решить просто нельзя.
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[6]: Проект Visual Generator
    От: Antikrot  
    Дата: 08.07.05 14:09
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>90% того, что мне надо — есть в boost

    про boost adontz уже сказал... "И хотите послать меня в boost, etc то остановитесь и подумайте"

    C>Написать аллокатор лучше Hoard'а, контейнеры лучше чем в STLPort'е вам

    C>все равно не получится.
    Да причем тут лучше. Зато свое, оно, понимаешь, всегда теплей и приятней...
    Кстати, можешь добавить "gui лучше чем mfc/vcl/qt/vxwidgets/etc... — на выбор"

    C>смысл затеи. Использовали тогда бы уж лучше GCCXML.

    А как он с visual studio соотносится? идея же я так понимаю под винды писать.
    Re[7]: Проект Visual Generator
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 08.07.05 14:21
    Оценка:
    Здравствуйте, adontz, Вы писали:

    A>Во-вторых, GCCXML крайне нестабильная вешь.


    Так может лучше GCCXML помочь?
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[8]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 08.07.05 15:30
    Оценка:
    Здравствуйте, eao197, Вы писали:

    A>>Во-вторых, GCCXML крайне нестабильная вешь.

    E>Так может лучше GCCXML помочь?

    Плохая идея. Разбирать PDBшки и Code DOM это гораздо быстрее, потому что нет необходимости дважды делать синтаксический разбор кода. Кода, который GCCXML часто просто не понимает.
    Зачем усложнять задачу и писать (дописывать) компилятор, когда можно использовать возможность расширения уже существующего.
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[9]: Проект Visual Generator
    От: Cyberax Марс  
    Дата: 08.07.05 15:58
    Оценка:
    adontz wrote:

    > Плохая идея. Разбирать PDBшки и Code DOM это гораздо быстрее, потому

    > что нет необходимости дважды делать синтаксический разбор кода. Кода,
    > который GCCXML часто просто не понимает.
    > Зачем усложнять задачу и писать (дописывать) компилятор, когда можно
    > использовать возможность расширения уже существующего.

    А зачем делать очередную некроссплатформенную поделку, заточенную только
    под Студию?

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[10]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 08.07.05 16:01
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>А зачем делать очередную некроссплатформенную поделку, заточенную только под Студию?


    Потому что это мой выбор и переубеждать меня бессмысленно
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[10]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 08.07.05 16:08
    Оценка:
    Здравствуйте, eao197, Вы писали:

    A>>Плохая идея.

    E>Не многим хуже чем Проект Visual Generator
    Автор: adontz
    Дата: 07.07.05


    Во-первых скорость. Основной хинт это то, что скорость компиляции если и возрастает, то незначительно.

    A>> Разбирать PDBшки и Code DOM это гораздо быстрее, потому что нет необходимости дважды делать синтаксический разбор кода. Кода, который GCCXML часто просто не понимает.

    E>Я так понимаю, что в случае GCCXML тебе придется разбирать не код, а XML после работы gccxml.

    Да, но тогда код разбирается компилятором, а потом ещё раз разбирается GCCXML. В результате скорость компиляции падает где-то в два раза. Чего ради?
    Потом VG это не просто stand-alone утилитка. Это вcтраиваемость в VS. Не просто создание и генерирование файлов, но и правка проектов, чтобы эти файлы адекватно обрабатывались.
    Для GUI библиотеки однозначно нужен Forms Designer. Такая простая вешь как автоматическая расстановка порядка табуляции до сих пор нигде не автоматизированна, хотя правила (сверху вниз, слева направо (для азиатов справа налево)) просты. Далее скажем локализация. Покажи мне редактор, который умеет экспортировать все строки и импортировать их, чтобы отдать переводчику txt файл и потом его импортировать. Нету такого.
    Если в русской версии диалога есть кнопка которой нет в английской, то понять это можно только запустив программу. Я хочу, чтобы на уровне редактора кнопка, будучи однажды созданой была во всех языковых версиях, но возможно имела разный текст и координаты.
    Элементы управления обычно предлагается расставлять либо на глаз, либо по сетке. Тоже глупость, нужно ни то, ни другое, нужно делать вокруг элемента управления рамочку (для groupbox ещё и внутри) и не давать приближатся ближе чем эта рамочка. Дальше тоже не стоит, значит рамочка должна быть липучей.

    Для сериализации некоторый нужен Format Designer.
    Простая задача котору мне задали. Есть структура vector< pair<int,int> > Если файл имеет версию 2, то счтитывать оба компонента pair, файл версии 1 содержит только второй компонент, а первому присваивать 0. Как просто сделать две разметки для разных версий и читать вроде archive.deserialize<1>(variable) или archive.deserialize<2>(variable)
    Можно структуру
    struct
    {
     int x;
     int y;
    }

    считывать из файла где y записан раньше x. И так далее. В принципе ничто не мешает делать и вычисляемые поля. Чтобы скажем для прямоугольника width и height читать из файла, а area считать на лету, но только для версии 1, потому что в версии 2 area записан. Для кодогенератора пара пустяков, без него решение превращается в кучу малоструктурированного кода в котором легко ошибится.

    E>Существующего только на одной платформе, я бы дополнил. А с учетом того, что у Microsoft большой уклон в .Net и C++/CLI, то может статся, что нормальный C++ продолжит существовать на Unix-ах. Где существующим как раз является GCC.


    Ну я не думаю, что Unmanaged C++ Compiler будет убит в обозримом будущем. С другой стороны, что мешает иметь VC++ только как основной компилятор? Ведь можно все эти сгенерированные файлы потом чем угодно перекомпилировать — проблем нет. Разработчики Mozilla AFAIK используют в качестве основного компилятора именно VC.
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[4]: Проект Visual Generator
    От: SchweinDeBurg Россия https://zarezky.spb.ru/
    Дата: 08.07.05 18:24
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Я сейчас использую Hoard

    C>(http://www.hoard.org) — он прозрачно заменяет malloc/free и new/delete.

    А можно чуточку комментариев?.. Хотелось бы услышать что-то такое "человеческое", "личностное"... Скажем, с VC 7.0 эта штука дружит?
    [ posted via RSDN@Home 1.1.4 beta 7 r501, accompanied by Аквариум — Белая ]
    - Искренне ваш, Поросенок Пафнутий
    Re[7]: Проект Visual Generator
    От: Cyberax Марс  
    Дата: 08.07.05 18:35
    Оценка:
    adontz wrote:

    > C>90% того, что мне надо — есть в boost. Остальное давно скачано.

    > C>Написать аллокатор лучше Hoard'а, контейнеры лучше чем в STLPort'е вам
    > C>все равно не получится. А привязка к компилятору — вообще убивает весь
    > C>смысл затеи. Использовали тогда бы уж лучше GCCXML.
    > Во-первых я и не предлагал писать свои контейнеры. Во-вторых, GCCXML
    > крайне нестабильная вешь.

    Ну так стабилизируйте его. Хотя какая-то польза от вас тогда будет...

    > В-третьих, те задачи которые я хочу решить без кодогенератора или

    > поддержки со стороны компилятора решить просто нельзя.

    Ну так делайте кодогенератор на основе GCCXML.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[7]: Проект Visual Generator
    От: Cyberax Марс  
    Дата: 08.07.05 18:36
    Оценка:
    Antikrot wrote:

    > C>смысл затеи. Использовали тогда бы уж лучше GCCXML.

    > А как он с visual studio соотносится? идея же я так понимаю под винды
    > писать.

    Нормально, в нем даже есть поддержка расширений MSовского компилятора
    (всякие __declspec'и).

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[11]: Проект Visual Generator
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 08.07.05 20:27
    Оценка:
    Здравствуйте, adontz

    Если говорить серьезно, то больше всего меня смущает глобальность такого замысла. Буч, по-моему, сказал: "Любая большая работающая система неизбежно получается путем эволюции маленькой работающей системы". Так вот, за полгода моего активного участия в форумах RSDN это уже второй твой громкий прожект с замахом на глобальность. Но при этом хотелось бы увидеть маленький работающий фрагмент всего этого дела, который бы смог эволюционировать со временем в то, что ты описал.

    Ну а если брать отдельные части, то здесь так же есть масса возражений. По поводу замены C-шной RTL очень здорово высказался MaximE: Re: Проект Visual Generator
    Автор: MaximE
    Дата: 08.07.05
    . Здесь уж не добавишь, ни убавишь.

    Ну а я позволю себе дать несколько банальных комментариев.

    A>Для GUI библиотеки однозначно нужен Forms Designer. Такая простая вешь как автоматическая расстановка порядка табуляции до сих пор нигде не автоматизированна, хотя правила (сверху вниз, слева направо (для азиатов справа налево)) просты. Далее скажем локализация. Покажи мне редактор, который умеет экспортировать все строки и импортировать их, чтобы отдать переводчику txt файл и потом его импортировать. Нету такого.

    A>Если в русской версии диалога есть кнопка которой нет в английской, то понять это можно только запустив программу. Я хочу, чтобы на уровне редактора кнопка, будучи однажды созданой была во всех языковых версиях, но возможно имела разный текст и координаты.
    A>Элементы управления обычно предлагается расставлять либо на глаз, либо по сетке. Тоже глупость, нужно ни то, ни другое, нужно делать вокруг элемента управления рамочку (для groupbox ещё и внутри) и не давать приближатся ближе чем эта рамочка. Дальше тоже не стоит, значит рамочка должна быть липучей.

    Сдается мне, что ты не сталкивался с такой штукой, как Qt. Там и проблема локализации давно решена, промышленным причем способом, даже редактор специальный был -- Qt Linguist. А уж как там классно все с расположением контролов все сделано, layout-ы всякие, size-политики. А уж контролы spacer-ы чего стоят! MFC и Visual Studio просто отдыхают.

    A>Для сериализации некоторый нужен Format Designer.

    A>Простая задача котору мне задали. Есть структура vector< pair<int,int> > Если файл имеет версию 2, то счтитывать оба компонента pair, файл версии 1 содержит только второй компонент, а первому присваивать 0. Как просто сделать две разметки для разных версий и читать вроде archive.deserialize<1>(variable) или archive.deserialize<2>(variable)
    A>Можно структуру
    A>
    A>struct
    A>{
    A> int x;
    A> int y;
    A>}
    A>

    A>считывать из файла где y записан раньше x. И так далее. В принципе ничто не мешает делать и вычисляемые поля. Чтобы скажем для прямоугольника width и height читать из файла, а area считать на лету, но только для версии 1, потому что в версии 2 area записан. Для кодогенератора пара пустяков, без него решение превращается в кучу малоструктурированного кода в котором легко ошибится.

    Мой скромный опыт в разработке средств сериализации и поверхностное знакомство с Asn1 подсказывает мне, что в таких случаях самое главное -- это идея. Важен механизм, которым ты будешь связывать значения атрибутов с их сериализованными представлениями (особенно, если потребуется поддерживать разные форматы). А уже как ты этому механизму скажешь, какие именно атрибуты подлежат сериализации -- это уже даже не второй вопрос. И помощь со стороны транслятора C++ здесь нужна будет только для получения списка атрибутов. А уже написание кодогенератора для выбранного механизма с трансляцией C++ текста совсем никак не связана.
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[12]: Проект Visual Generator
    От: Cyberax Марс  
    Дата: 08.07.05 20:51
    Оценка:
    eao197 wrote:

    > Сдается мне, что ты не сталкивался с такой штукой, как Qt. Там и

    > проблема локализации давно решена, промышленным причем способом, даже
    > редактор специальный был -- Qt Linguist. А уж как там классно все с
    > расположением контролов все сделано, layout-ы всякие, size-политики. А
    > уж контролы spacer-ы чего стоят! MFC и Visual Studio просто отдыхают.

    Угу, обожаю лэйауты! Я на Swing'е в Java пишу код с лэйаутами для
    интерфейса _быстрее_, чем дельфисты кидают контролы на формочки
    (сравнивали).

    К сожалению, так пока и не нашел нормальной С++ной GUIшной либы, которая
    имела бы такие же возможности. QT почти все нужное умеет, но все же
    чуть-чуть не дотягивает.

    Пытался писать свои велосипеды для WTL — они работают, но хочется
    чего-нибудь получше еще сделать. Только вот времени все нет...

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[12]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 08.07.05 20:52
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Это все без особых проблем делается существующими средствами С++.

    C>Кодогенерация помогла бы кое-где, но она далеко не критична.
    C>
    C>struct MyStruct{int x,y;};
    C>template<class Archive> void serialize(Archive &ar,MyStruct 
    C>&str,unsigned version)
    C>{
    C>    ar&y&x;
    C>};
    C>

    C>Для версии 2:
    C>
    C>struct MyStruct{int x,y,area;};
    C>template<> version_tag<MyStruct> {enum version=2;};
    
    C>template<class Archive> void serialize(Archive &ar,MyStruct 
    C>&str,unsigned version)
    C>{
    C>    ar&y&x;
    C>    if (version==2)
    C>       ar&area;
    C>};
    C>


    Чудестно, теперь представь, что у тебя 39 полей и 17 версий.

    C>А __attribute__'ы GCCшные он понимает? А export templates из Como/ICC?


    Нет, а зачем?


    C>Нет, они используют MinGW и хотят переползти на IntelC++.


    IntelC++ писался с расчётом на совместимость с VC++.
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[8]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 08.07.05 20:53
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Ну так стабилизируйте его.


    Я не хочу писать синтаксический парсер. Я хочу использовать уже готовый.

    C>Хотя какая-то польза от вас тогда будет...


    Ну-ну, не хами.

    C>Ну так делайте кодогенератор на основе GCCXML.


    Я делаю не только кодогенератор.
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[6]: Проект Visual Generator
    От: SchweinDeBurg Россия https://zarezky.spb.ru/
    Дата: 08.07.05 20:53
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Как вариант, можно даже с помощью Detours даже без изменений исходников

    C>использовать.

    Исходники поменять — не проблема. "Уголовное дело — это вам не брюки не с рантом, уголовное дело шьется в пять секунд..." (с) Довлатов. Искренне — овчинка того стоит? Я имею ввиду — в "маленьком" и "среднем" десктопном приложении (если уж совсем нахальничать — сходите на http://zarezky.spb.ru/projects.html и просто прикидочно выскажетесь относительно целесообразности).
    [ posted via RSDN@Home 1.1.4 beta 7 r501, accompanied by Аквариум — Zoom Zoom Zoom ]
    - Искренне ваш, Поросенок Пафнутий
    Re[6]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 08.07.05 20:54
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Если я правильно понимаю, речь идет о Reflection и т.п. Но это не есть свойства C#, это возможности платформы. Соответственно, почему бы, если хочется получить эти возможности, сохранив возможности C++, не попробовать C++/CLI, именно для этого и предназначенный?..


    Есть вещи которых не хватает в обоих языках.
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[13]: Проект Visual Generator
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 08.07.05 20:58
    Оценка:
    Здравствуйте, adontz, Вы писали:

    A>Чудестно, теперь представь, что у тебя 39 полей и 17 версий.


    Допустим. И что ты предлагаешь с этим делать?
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[13]: Проект Visual Generator
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 08.07.05 21:00
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>eao197 wrote:


    >> Сдается мне, что ты не сталкивался с такой штукой, как Qt. Там и

    >> проблема локализации давно решена, промышленным причем способом, даже
    >> редактор специальный был -- Qt Linguist. А уж как там классно все с
    >> расположением контролов все сделано, layout-ы всякие, size-политики. А
    >> уж контролы spacer-ы чего стоят! MFC и Visual Studio просто отдыхают.

    C>Угу, обожаю лэйауты! Я на Swing'е в Java пишу код с лэйаутами для

    C>интерфейса _быстрее_, чем дельфисты кидают контролы на формочки
    C>(сравнивали).

    Не, имхо, в Qt, особенно в паре с Qt Designer, layout-ы удобнее будут. Хотя Swing-овых я уже года четыре как не брал в руки
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[12]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 08.07.05 21:02
    Оценка:
    Здравствуйте, eao197, Вы писали:

    E>Если говорить серьезно, то больше всего меня смущает глобальность такого замысла.


    потому я и не хочу это делать один.

    E>Буч, по-моему, сказал: "Любая большая работающая система неизбежно получается путем эволюции маленькой работающей системы". Так вот, за полгода моего активного участия в форумах RSDN это уже второй твой громкий прожект с замахом на глобальность. Но при этом хотелось бы увидеть маленький работающий фрагмент всего этого дела, который бы смог эволюционировать со временем в то, что ты описал.


    Я могу прямо сейчас дать тебе полностью работающую С++ Run-Time написанную с нуля (ну за исключением memmove и тому подобных вещей). Кроме того я практически полностью (за исключением некоторых классов-политик) реализовал строковый класс поддерживающий Unicode 4.1.
    Как база на которую можно достраивать ИМХО не плохо. Ну ввод-вывод не то чем можно гордится.

    E>Сдается мне, что ты не сталкивался с такой штукой, как Qt. Там и проблема локализации давно решена, промышленным причем способом, даже редактор специальный был -- Qt Linguist. А уж как там классно все с расположением контролов все сделано, layout-ы всякие, size-политики. А уж контролы spacer-ы чего стоят! MFC и Visual Studio просто отдыхают.


    Насколько я видел Qt-приложения (может плохо видел?) они выглядят для Windows достаточно инородно.

    E>Мой скромный опыт в разработке средств сериализации и поверхностное знакомство с Asn1 подсказывает мне, что в таких случаях самое главное -- это идея. Важен механизм, которым ты будешь связывать значения атрибутов с их сериализованными представлениями (особенно, если потребуется поддерживать разные форматы).


    Идея как раз в том, что именно Format Designer и будет определять это. Любой выбор кого-то не удовлетворит. В идеале я хочу сделать так, чтобы любой формат файла после некоторого времени проведённом за Format Designer можно было просто десериализовать с свои структуры — эффективность не последний фактор.
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[13]: Проект Visual Generator
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 08.07.05 21:09
    Оценка:
    Здравствуйте, adontz, Вы писали:

    E>>Буч, по-моему, сказал: "Любая большая работающая система неизбежно получается путем эволюции маленькой работающей системы". Так вот, за полгода моего активного участия в форумах RSDN это уже второй твой громкий прожект с замахом на глобальность. Но при этом хотелось бы увидеть маленький работающий фрагмент всего этого дела, который бы смог эволюционировать со временем в то, что ты описал.


    A>Я могу прямо сейчас дать тебе полностью работающую С++ Run-Time написанную с нуля (ну за исключением memmove и тому подобных вещей). Кроме того я практически полностью (за исключением некоторых классов-политик) реализовал строковый класс поддерживающий Unicode 4.1.

    A>Как база на которую можно достраивать ИМХО не плохо. Ну ввод-вывод не то чем можно гордится.

    А с какими стандартами она соотносится?
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[13]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 08.07.05 21:14
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>К сожалению, так пока и не нашел нормальной С++ной GUIшной либы, которая

    C>имела бы такие же возможности. QT почти все нужное умеет, но все же
    C>чуть-чуть не дотягивает.

    Так может поможешь писать GUI библиотеку, а не будешь всё хаять ?
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[14]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 08.07.05 21:21
    Оценка:
    Здравствуйте, eao197, Вы писали:

    A>>Я могу прямо сейчас дать тебе полностью работающую С++ Run-Time написанную с нуля (ну за исключением memmove и тому подобных вещей). Кроме того я практически полностью (за исключением некоторых классов-политик) реализовал строковый класс поддерживающий Unicode 4.1.

    A>>Как база на которую можно достраивать ИМХО не плохо. Ну ввод-вывод не то чем можно гордится.

    E>А с какими стандартами она соотносится?


    Кто? Run-Time? На реализацию Run-Time нет стандарта. Есть стандарт на некоторый набор функциональности который должен поддерживаться. Я из него выкинул всё, что касается Си. Остались new/delete, RTTI, exceptions. В RTTI не доделан type_info::name() потому что способ декорирования имён компилятором VC нигде не документирован, хотя и есть пара статей с изысканиями + исходники WINE, которые впрочем тоже не полностью реализуют задачу. Но немного поработав над этим вопросом я пришёл к выводу, что задача вполне разрешима — бывали и посложнее.
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[7]: Проект Visual Generator
    От: Cyberax Марс  
    Дата: 08.07.05 21:23
    Оценка:
    SchweinDeBurg wrote:

    > C>Как вариант, можно даже с помощью Detours даже без изменений исходников

    > C>использовать.
    > Исходники поменять — не проблема. "Уголовное дело — это вам не брюки
    > не с рантом, уголовное дело шьется в пять секунд..." (с) Довлатов.
    > Искренне — овчинка того ст*о*ит? Я имею ввиду — в "маленьком" и
    > "среднем" десктопном приложении (если уж совсем нахальничать — сходите
    > на http://zarezky.spb.ru/projects.html и просто прикидочно выскажетесь
    > относительно целесообразности).

    Hoard имеет смысл использовать, если приложение многопоточное — выигрыш
    будет заметен на глаз. Для одного потока лучше использовать malloc от
    Dough Lea.

    Сказать про ваши проекты — сложно. Проще скачать Hoard и посмотреть что
    получится. Выигрыш будет, скорее всего, но может быть очень небольшим.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[8]: Проект Visual Generator
    От: SchweinDeBurg Россия https://zarezky.spb.ru/
    Дата: 08.07.05 21:28
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Hoard имеет смысл использовать, если приложение многопоточное


    ОК, я приму к сведению.

    C>Сказать про ваши проекты — сложно.


    У меня MT наличествует, но в малом количестве. В любом случае — еще раз спасибо за ссылку, буду экспериментировать.
    [ posted via RSDN@Home 1.1.4 beta 7 r501, accompanied by Аквариум — Сувлехим Такац ]
    - Искренне ваш, Поросенок Пафнутий
    Re[14]: Проект Visual Generator
    От: Cyberax Марс  
    Дата: 08.07.05 21:28
    Оценка:
    adontz wrote:

    > C>К сожалению, так пока и не нашел нормальной С++ной GUIшной либы,

    > которая
    > C>имела бы такие же возможности. QT почти все нужное умеет, но все же
    > C>чуть-чуть не дотягивает.
    > Так может поможешь писать GUI библиотеку, а не будешь всё хаять ?

    Я не буду писать код для OpenSource, привязанный к одной платформе —
    неинтересно это.

    Я регулярно присматриваюсь к разным фреймворкам типа WxWidgets — все ищу
    какой бы из них взять за основу для своей либы. Так что может
    когда-нибудь и напишу.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[7]: Проект Visual Generator
    От: c-smile Канада http://terrainformatica.com
    Дата: 08.07.05 21:40
    Оценка:
    Здравствуйте, SchweinDeBurg, Вы писали:

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


    C>>Как вариант, можно даже с помощью Detours даже без изменений исходников

    C>>использовать.

    SDB>Исходники поменять — не проблема. "Уголовное дело — это вам не брюки не с рантом, уголовное дело шьется в пять секунд..." (с) Довлатов. Искренне — овчинка того стоит? Я имею ввиду — в "маленьком" и "среднем" десктопном приложении (если уж совсем нахальничать — сходите на http://zarezky.spb.ru/projects.html и просто прикидочно выскажетесь относительно целесообразности).


    Fast memory allocator for multithreaded applications:
    http://www.garret.ru/~knizhnik/threadalloc/readme.html

    Также оказалаcь полезной "фича" MSPACES в аллокаторе Doug Lea
    для имплементации конструкций типа memory pool:

    class document 
    {
      memory_pool mp;
      void* alloc( size_t sz ) { return mp.alloc(sz); }
    }
    Re[13]: Проект Visual Generator
    От: Cyberax Марс  
    Дата: 08.07.05 21:41
    Оценка:
    adontz wrote:

    >

    >C>struct MyStruct{int x,y,area;};
    >C>template<> version_tag<MyStruct> {enum version=2;};
    >
    >C>template<class Archive> void serialize(Archive &ar,MyStruct
    >C>&str,unsigned version)
    >C>{
    >C> ar&y&x;
    >C> if (version==2)
    >C> ar&area;
    >C>};
    >C>
    >
    > Чудестно, теперь представь, что у тебя 39 полей и 17 версий.

    Ну будет 17 if'ов стоять (точнее в этом случае будет switch)? Ничего
    страшного.

    Тем более что необходимость поддерживать обратную совместимость на 17
    версий назад для объектов с 40 полями — это уже что-то слегка странное.

    Кстати, а как в этом случае генерация кода поможет?

    > C>А __attribute__'ы GCCшные он понимает? А export templates из Como/ICC?

    > Нет, а зачем?

    Если я потом захочу код с помощью GCC скомпилить.

    > C>Нет, они используют MinGW и хотят переползти на IntelC++.

    > IntelC++ писался с расчётом на совместимость с VC++.

    "В теории практика не отличается от теории, но на практике — отличается".

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[8]: Проект Visual Generator
    От: SchweinDeBurg Россия https://zarezky.spb.ru/
    Дата: 08.07.05 21:45
    Оценка:
    Здравствуйте, c-smile, Вы писали:

    CS>Также оказалаcь полезной "фича" MSPACES в аллокаторе Doug Lea


    А скажи мне, брат Smile — в MFC-шных приложениях она будет так же "полезна"?
    [ posted via RSDN@Home 1.1.4 beta 7 r501, accompanied by Аквариум — С Утра Шёл Снег ]
    - Искренне ваш, Поросенок Пафнутий
    Re[14]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 08.07.05 21:58
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Ну будет 17 if'ов стоять (точнее в этом случае будет switch)? Ничего

    C>страшного.

    C>Тем более что необходимость поддерживать обратную совместимость на 17

    C>версий назад для объектов с 40 полями — это уже что-то слегка странное.

    C>Кстати, а как в этом случае генерация кода поможет?


    Генерация кода сама по себе не поможет, потожет Format Designer. Выберешь скажем в списке версию с которой хочешь работать и будешь перемещать поля вверх-вниз указывая их порядок следования, а checkbox'ами их наличие.
    Просто и понятно. Всегда можно увидеть какие поля в какой версии есть, а в какой нету. Значительно меньше вероятность ошибки, легче её исправить.
    То есть продолжая пример с прямугольником у теюя будет приблизительно такая картина
      ______________________
     / Version 1 \ Version 2 \
    |                         |
    | [x] width               |
    | [x] height              |
    | [_] area                |
    |                         |
    ---------------------------
    
      ______________________
     / Version 1 / Version 2 \
    |                         |
    | [x] width               |
    | [x] height              |
    | [x] area                |
    |                         |
    ---------------------------
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[15]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 08.07.05 21:59
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Я не буду писать код для OpenSource, привязанный к одной платформе — неинтересно это.


    А мне зачем мешаешь?
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re: Проект Visual Generator
    От: Adopt  
    Дата: 08.07.05 23:04
    Оценка:
    Здравствуйте, adontz, Вы писали:

    Обясните не знаящему
    что такое demangling ?
    ... << RSDN@Home 1.1.4 stable rev. 510>>
    Re[2]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 08.07.05 23:19
    Оценка:
    Здравствуйте, Adopt, Вы писали:

    A>что такое demangling ?

    A>

    Пусть есть перегруженая функция f
    int f(int);
    void f(float);
    char * f(my_type);

    так как компономщик ничего не знает о перегрузке функций, то компилятор не может использовать имя f, нужно три разных имени. Обычно в этих целях имя f снабжают преффиксами и суффиксами, например
    int@f@int@
    void@f@float@
    char@@f@my_class@

    такие имена уже уникальны. Их называют декорированными (mangled, decorated). demangling это процеду получения по такому декорированному имени прототипа функции.

    Аналогичная операция существует и для типов. Получить декорированное имя типа очень просто это typeid(type).raw_name()
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[14]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 08.07.05 23:37
    Оценка:
    Здравствуйте, eao197, Вы писали:

    E>Допустим. И что ты предлагаешь с этим делать?

    http://www.rsdn.ru/Forum/Message.aspx?mid=1263896&amp;only=1
    Автор: adontz
    Дата: 09.07.05
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[15]: Проект Visual Generator
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 09.07.05 05:12
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>eao197 wrote:


    >> C>Угу, обожаю лэйауты! Я на Swing'е в Java пишу код с лэйаутами для

    >> C>интерфейса _быстрее_, чем дельфисты кидают контролы на формочки
    >> C>(сравнивали).
    >> Не, имхо, в Qt, особенно в паре с Qt Designer, layout-ы удобнее будут.
    >> Хотя Swing-овых я уже года четыре как не брал в руки

    C>Жаль что у Qt лицензия — GPL, иначе бы использовал его во всех проектах.

    C>Коммерческие лицензии больно уж дорогие у них.

    Угу.
    А на 4.0 еще дороже.
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[14]: Проект Visual Generator
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 09.07.05 05:12
    Оценка:
    Здравствуйте, adontz, Вы писали:

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


    C>>К сожалению, так пока и не нашел нормальной С++ной GUIшной либы, которая

    C>>имела бы такие же возможности. QT почти все нужное умеет, но все же
    C>>чуть-чуть не дотягивает.

    A>Так может поможешь писать GUI библиотеку, а не будешь всё хаять ?


    Вот здесь: http://www.geocities.com/SiliconValley/Vista/7184/guitool.html
    перечисленна масса OpenSource GUI библиотек (есть даже специально под Windows заточенные). Почему бы тебе, вместо создания еще одной, не присоединится к разработке одной из них. Вот у FLTK никак релиз второй версии не выйдет, почему бы не помочь?
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[15]: Проект Visual Generator
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 09.07.05 05:12
    Оценка:
    Здравствуйте, adontz, Вы писали:

    A>>>Я могу прямо сейчас дать тебе полностью работающую С++ Run-Time написанную с нуля (ну за исключением memmove и тому подобных вещей). Кроме того я практически полностью (за исключением некоторых классов-политик) реализовал строковый класс поддерживающий Unicode 4.1.


    E>>А с какими стандартами она соотносится?


    A>Кто? Run-Time? На реализацию Run-Time нет стандарта. Есть стандарт на некоторый набор функциональности который должен поддерживаться. Я из него выкинул всё, что касается Си.


    Т.е. написанные для ANSI C и ANSI C++ программы, использующие strlen, strcat, memmove, memcpy и иже с ними, тихоничко идут лесом?
    А оно нам надо? Если я перестану заботится об уже написанном мной C/C++ коде, то мне проще будет уйти в Java/C#, а лучше в Smalltalk/Python/Ruby, чем на доморощенный, урезанный, привязанный к VC диалект C++.

    A> Остались new/delete, RTTI, exceptions. В RTTI не доделан type_info::name() потому что способ декорирования имён компилятором VC нигде не документирован, хотя и есть пара статей с изысканиями + исходники WINE, которые впрочем тоже не полностью реализуют задачу. Но немного поработав над этим вопросом я пришёл к выводу, что задача вполне разрешима — бывали и посложнее.


    Например?
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[15]: Проект Visual Generator
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 09.07.05 08:42
    Оценка:
    Здравствуйте, adontz, Вы писали:

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


    E>>Допустим. И что ты предлагаешь с этим делать?

    A>http://www.rsdn.ru/Forum/Message.aspx?mid=1263896&amp;only=1
    Автор: adontz
    Дата: 09.07.05


    Ну, во-первых, там нет предожений о том, как будет организованна сериализация/десериализации.
    И, во-вторых, можешь нарисовать картинку, как должен выглядеть FormatDesigner для случая 40-ка полей и 17-ти версий?
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[16]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 09.07.05 10:03
    Оценка:
    Здравствуйте, eao197, Вы писали:

    E>Т.е. написанные для ANSI C и ANSI C++ программы, использующие strlen, strcat, memmove, memcpy и иже с ними, тихоничко идут лесом?

    E>А оно нам надо? Если я перестану заботится об уже написанном мной C/C++ коде, то мне проще будет уйти в Java/C#, а лучше в Smalltalk/Python/Ruby, чем на доморощенный, урезанный, привязанный к VC диалект C++.

    Нет, почему, их можно прилинковать. Ты же не используешь исходники Borland C++ Builder пропахшие VCL в VC++ напрямую, но можешь создать DLL'ку. Здесь тоже самое, только ситуация немного лучше. Можно прилинковывать не только DLL, но и LIB файлы, потому что компилятор фактически один. Старый код выкидывать не объязательно.

    A>> Остались new/delete, RTTI, exceptions. В RTTI не доделан type_info::name() потому что способ декорирования имён компилятором VC нигде не документирован, хотя и есть пара статей с изысканиями + исходники WINE, которые впрочем тоже не полностью реализуют задачу. Но немного поработав над этим вопросом я пришёл к выводу, что задача вполне разрешима — бывали и посложнее.


    E>Например?


    Например реализовать поддержку Си++/SEH исключений оказалось очень сложно, фактически задача свелась с дизассемблированию и разбору ассемблерного кода и нагенерированных компилятором структур данных, не все поля которых как выяснилось используются. Фактически в Интернете не оказалось ни одного нормального описания как это всё работает, знаменитая статья на codeproject полная лажа, а статья Matt Pietrek больше касалась SEH. Правда я на этой задаче получил большой опыт. Честно говоря мне в какой-то момент казалось, что я вообще никогда не закончу. 2 раза всё бросал и начинал заново, но в конце концов добил. Система потом тестировалась на множестве разных случаев и ведёт себя в точности как родная.
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[15]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 09.07.05 10:07
    Оценка:
    Здравствуйте, eao197, Вы писали:

    E>Вот здесь: http://www.geocities.com/SiliconValley/Vista/7184/guitool.html

    E>перечисленна масса OpenSource GUI библиотек (есть даже специально под Windows заточенные). Почему бы тебе, вместо создания еще одной, не присоединится к разработке одной из них. Вот у FLTK никак релиз второй версии не выйдет, почему бы не помочь?

    У меня есть идеи, которые не реализовать без кодогенерации. Например не нужны message maps или event subscribing.
    Вместо кода вида
    class Window : public WindowBase
    {
     public:
      void OnSize(SIZE sizeOld, SIZE sizeNew);
    }
    BEGIN_MESSAGE_MAP(Window)
    ON_MESSAGE(SIZE, OnSize)
    END_MESSAGE_MAP

    Будет
    class Window : public WindowBase
    {
     public:
      void OnSize(const message_data<SIZE> & msgdata);
    }

    Такое без генератора просто не возможно.
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[16]: Проект Visual Generator
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 09.07.05 10:14
    Оценка:
    Здравствуйте, adontz, Вы писали:

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


    E>>Вот здесь: http://www.geocities.com/SiliconValley/Vista/7184/guitool.html

    E>>перечисленна масса OpenSource GUI библиотек (есть даже специально под Windows заточенные). Почему бы тебе, вместо создания еще одной, не присоединится к разработке одной из них. Вот у FLTK никак релиз второй версии не выйдет, почему бы не помочь?

    A>Будет

    A>
    A>class Window : public WindowBase
    A>{
    A> public:
    A>  void OnSize(const message_data<SIZE> & msgdata);
    A>}
    A>

    A>Такое без генератора просто не возможно.

    Пока вопрос генератора оставим в стороне. Что для данного случая будет в message_data<SIZE>?
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[16]: Проект Visual Generator
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 09.07.05 10:21
    Оценка:
    Здравствуйте, adontz, Вы писали:

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


    E>>Вот здесь: http://www.geocities.com/SiliconValley/Vista/7184/guitool.html

    E>>перечисленна масса OpenSource GUI библиотек (есть даже специально под Windows заточенные). Почему бы тебе, вместо создания еще одной, не присоединится к разработке одной из них. Вот у FLTK никак релиз второй версии не выйдет, почему бы не помочь?

    A>У меня есть идеи, которые не реализовать без кодогенерации. Например не нужны message maps или event subscribing.


    Ну хорошо, сделаешь ты возможность указывать обработчики сообщений без message maps (кстати в той же Qt он уже есть). Ну а дальше что? В написании GUI прописывание message maps (event subscribing) занимает совершенно мизерный процент времени. Ну выиграешь ты этот процент, а дальше? Откуда брать остальной функционал? А ведь в других библиотеках он уже есть.

    Может лучше скрестить какую-нибудь готовую GUI библиотеку с gccxml для того чтобы message maps не руками прописывать, а автоматом генерить? Тогда и сам от лишней работы избавишься, и какому-нибудь сущестующему GUI проекту поможешь.
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[15]: Проект Visual Generator
    От: Cyberax Марс  
    Дата: 09.07.05 12:32
    Оценка:
    adontz wrote:

    > Генерация кода сама по себе не поможет, потожет Format Designer.

    > Выберешь скажем в списке версию с которой хочешь работать и будешь
    > перемещать поля вверх-вниз указывая их порядок следования, а
    > checkbox'ами их наличие.

    Так он еще и графический будет? Нет, такого счастья точно не надо.
    Кстати, почему вы думаете, что при выборе галочек в формочках сложнее
    ошибиться, особенно если их будет 40 штук?

    Мы работали с одной OR-mapping системой на Java, где отображение
    задавалось именно так — с помощью красивого графического редактора. При
    первой же возможности мы заменили эту систему на Hibernate
    (http://www.hibernate.org), в которой для задания отображения
    используется нормальный человеческий XML-файл.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[17]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 09.07.05 12:35
    Оценка:
    Здравствуйте, eao197, Вы писали:

    E>Пока вопрос генератора оставим в стороне. Что для данного случая будет в message_data<SIZE>?


    Ну например старый и новый размер. Что-то специфичное для сообщения.
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[7]: Проект Visual Generator
    От: Cyberax Марс  
    Дата: 09.07.05 12:37
    Оценка:
    Шахтер wrote:

    > C>*Написать аллокатор лучше Hoard'а, контейнеры лучше чем в STLPort'е

    > вам **
    > C>все равно не получится.* А привязка к компилятору — вообще убивает весь
    > C>смысл затеи. Использовали тогда бы уж лучше GCCXML.
    > Отучаемся говорить за других.

    В тот же Hoard вложено несколько человеко-лет труда (в том числе на
    исследования). Сделать лучше — конечно можно, но это потребует
    сопоставимого времени.

    Для конкретных частных случаев можно написать более крутой аллокатор, но
    для общего — вряд ли.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[16]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 09.07.05 12:37
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Так он еще и графический будет? Нет, такого счастья точно не надо.

    C>Кстати, почему вы думаете, что при выборе галочек в формочках сложнее
    C>ошибиться, особенно если их будет 40 штук?

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

    C>Мы работали с одной OR-mapping системой на Java, где отображение

    C>задавалось именно так — с помощью красивого графического редактора. При
    C>первой же возможности мы заменили эту систему на Hibernate
    C>(http://www.hibernate.org), в которой для задания отображения
    C>используется нормальный человеческий XML-файл.

    Что мешает настроки Format Designer хранить в XML?

    Почему ты вечно придумываешь несуществующие проблемы?
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[18]: Проект Visual Generator
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 09.07.05 12:38
    Оценка:
    Здравствуйте, adontz, Вы писали:

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


    E>>Пока вопрос генератора оставим в стороне. Что для данного случая будет в message_data<SIZE>?


    A>Ну например старый и новый размер. Что-то специфичное для сообщения.


    Ну и чем куча таких специализаций message_data будет лучше методов с конкретными прототипами, настройка на которые происходит автоматически в message_map?
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[17]: Проект Visual Generator
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 09.07.05 12:40
    Оценка:
    Здравствуйте, adontz, Вы писали:

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


    C>>Так он еще и графический будет? Нет, такого счастья точно не надо.

    C>>Кстати, почему вы думаете, что при выборе галочек в формочках сложнее
    C>>ошибиться, особенно если их будет 40 штук?

    A>Ошибится так же просто, но вот визуально найти оишбку гораздо проще.


    На 17-ти закладках с 40-ка чекбоксами на каждой! Ой-ли?
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[18]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 09.07.05 12:43
    Оценка:
    Здравствуйте, eao197, Вы писали:

    A>>Ошибится так же просто, но вот визуально найти оишбку гораздо проще.

    E>На 17-ти закладках с 40-ка чекбоксами на каждой! Ой-ли?

    В XML проще?
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[16]: Проект Visual Generator
    От: Cyberax Марс  
    Дата: 09.07.05 12:44
    Оценка:
    adontz wrote:

    > Будет

    >
    >class Window : public WindowBase
    >{
    > public:
    > void OnSize(const message_data<SIZE> & msgdata);
    >}
    >
    > Такое без генератора просто не возможно.

    А это еще хуже — появляются "магические" имена функций, назначение
    которых непонятно без знания фич оконной библиотеки. Что-то типа:
    class Window : public WindowBase
    {
     public:
        [msg_handler:WM_SIZE] void OnSize(const message_data<SIZE> & msgdata);
    }

    Будет намного лучше (и без проблем делается с помощью GCCXML).

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[19]: Проект Visual Generator
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 09.07.05 12:55
    Оценка:
    Здравствуйте, adontz, Вы писали:

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


    A>>>Ошибится так же просто, но вот визуально найти оишбку гораздо проще.

    E>>На 17-ти закладках с 40-ка чекбоксами на каждой! Ой-ли?

    A>В XML проще?


    В распечатанном виде -- почему бы и нет.
    Но, главное, по XML можно автиматическими верификаторами пройтись.

    Кстати, а о каких типах ошибок ты говоришь?
    А то может мы каждый о своем спорить собрались?
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[17]: Проект Visual Generator
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 09.07.05 12:55
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>adontz wrote:


    >> Будет

    >>
    >>class Window : public WindowBase
    >>{
    >> public:
    >> void OnSize(const message_data<SIZE> & msgdata);
    >>}
    >>
    >> Такое без генератора просто не возможно.

    C>Что-то типа:

    C>
    C>class Window : public WindowBase
    C>{
    C> public:
    C>    [msg_handler:WM_SIZE] void OnSize(const message_data<SIZE> & msgdata);
    C>}
    C>

    C>Будет намного лучше (и без проблем делается с помощью GCCXML).

    Нет, намного лучше будет, если описание:
    class Window : public WindowBase
    {
    public:
        [msg_handler:WM_SIZE:OnSize]
    };

    супер-мега-тулом будет преобразовано в:
    class Window : public WindowBase
    {
    public:
        [msg_handler:WM_SIZE:OnSize]
        void    OnSize( unsigned int cx, unsigned int cy );
    };
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[17]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 09.07.05 12:56
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>А это еще хуже — появляются "магические" имена функций, назначение

    C>которых непонятно без знания фич оконной библиотеки. Что-то типа:

    Ну кто тебе сказал такую глупость? Почему ты вечно выдумываешь лишние проблемы? Функция с любыи именем имеющая прототип void (*)(const message_data<SIZE> & msgdata) будет обработчиком события SIZE. Никакие специальные имена тут не нужны.
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[20]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 09.07.05 12:59
    Оценка:
    Здравствуйте, eao197, Вы писали:

    E>Кстати, а о каких типах ошибок ты говоришь? А то может мы каждый о своем спорить собрались?


    Ну например читается внешний формат файла (например GIF). Читаешь документацию по ходу чтения добавляешь поля. Уй, неправильно прочлось? Открываешь designer и смотришь где напортачил.
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[21]: Проект Visual Generator
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 09.07.05 13:08
    Оценка:
    Здравствуйте, adontz, Вы писали:

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


    E>>Кстати, а о каких типах ошибок ты говоришь? А то может мы каждый о своем спорить собрались?


    A>Ну например читается внешний формат файла (например GIF). Читаешь документацию по ходу чтения добавляешь поля.


    Все, стоп. FormatDesigner, который позволяет визуально строить парсинг произвольных форматов данных, это сильно. Я бы даже сказал, из области фантастики. Дальше мне уже рассуждать не интересно. Вот если он будет готов, то я с удовольствием на него посмотрю.
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[17]: Проект Visual Generator
    От: Cyberax Марс  
    Дата: 09.07.05 14:34
    Оценка:
    adontz wrote:

    > C>Так он еще и графический будет? Нет, такого счастья точно не надо.

    > C>Кстати, почему вы думаете, что при выборе галочек в формочках сложнее
    > C>ошибиться, особенно если их будет 40 штук?
    > Ошибится так же просто, но вот визуально найти оишбку гораздо проще.

    Ничуть, особенно в списках по 40 элементов — просто глазами сложно будет
    найти, что галочка square_mean_mass проставлена в 16 версии, а должна
    быть в 12.

    В коде этому помогают комментарии.

    > C>Мы работали с одной OR-mapping системой на Java, где отображение

    > C>задавалось именно так — с помощью красивого графического редактора. При
    > C>первой же возможности мы заменили эту систему на Hibernate
    > C>(http://www.hibernate.org), в которой для задания отображения
    > C>используется нормальный человеческий XML-файл.
    > Что мешает настроки Format Designer хранить в XML?

    Если формат хранения будет человеческим, то тогда скорее всего
    Format Designer через некоторое время выкинут на помойку.

    > Почему ты вечно придумываешь несуществующие проблемы?


    Ну а ты — вечно ненужные решения.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[19]: Проект Visual Generator
    От: Cyberax Марс  
    Дата: 09.07.05 14:35
    Оценка:
    adontz wrote:

    > A>>Ошибится так же просто, но вот визуально найти оишбку гораздо проще.

    > E>На 17-ти закладках с 40-ка чекбоксами на каждой! Ой-ли?
    > В XML проще?

    Проще всего непосредственно в коде.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[18]: Проект Visual Generator
    От: Cyberax Марс  
    Дата: 09.07.05 14:40
    Оценка:
    eao197 wrote:

    > Нет, намного лучше будет, если описание:

    >
    >class Window : public WindowBase
    >{
    >public:
    > [msg_handler:WM_SIZE:OnSize]
    >};
    >
    >
    > супер-мега-тулом будет преобразовано в:
    >
    >class Window : public WindowBase
    >{
    >public:
    > [msg_handler:WM_SIZE:OnSize]
    > void OnSize( unsigned int cx, unsigned int cy );
    >};
    >
    >
    Нет, неудобно. Как мне тело метода тогда писать?
    class Window : public WindowBase
    {
    public:
        [msg_handler:WM_SIZE:OnSize]
        {
           //Какие там у параметров имена????
        }
    };


    Хотя у меня сейчас нечто подобное: я набираю hawsize (handler wm_size) и
    мне VAssist вставляет нужное тело функции. Правда не добавляет в карту
    сообщений, но и тут можно при желании что-нибудь придумать.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[18]: Проект Visual Generator
    От: Cyberax Марс  
    Дата: 09.07.05 14:44
    Оценка:
    adontz wrote:

    > C>А это еще хуже — появляются "магические" имена функций, назначение

    > C>которых непонятно без знания фич оконной библиотеки. Что-то типа:
    > Ну кто тебе сказал такую глупость? Почему ты вечно выдумываешь лишние
    > проблемы? Функция с любыи именем имеющая прототип void (*)(const
    > message_data<SIZE> & msgdata) будет обработчиком события SIZE. Никакие
    > специальные имена тут не нужны.

    А это еще хуже — а если у меня будут две функции с такой сигнатурой? Я
    так очень часто делаю — одна функция для "внутреннего употребления", а
    другая — для диспетчера событий.

    Да и построение карты хэндлеров — совершенно не та задача, для которой
    нужно городить новую сложную систему. Что-нибудь типа Javadoc'а +
    XDoclet'а, адаптированных для С++, подошло бы гораздо лучше.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[21]: Проект Visual Generator
    От: Cyberax Марс  
    Дата: 09.07.05 14:51
    Оценка:
    adontz wrote:

    > E>Кстати, а о каких типах ошибок ты говоришь? А то может мы каждый о

    > своем спорить собрались?
    > Ну например читается внешний формат файла (например GIF). Читаешь
    > документацию по ходу чтения добавляешь поля. Уй, неправильно прочлось?
    > Открываешь designer и смотришь где напортачил.

    А зачем здесь версирование? Что-то перестало работать — запускаем свой
    любимый SCC, ищем версию где все работало (скорее всего предидущая
    ревизия), делаем diff с текущей рабочей копией, смотрим что изменилось с
    прошлого коммита.

    Более того, в IDEA для этого есть специальная внутренняя mini-SCC,
    которая прозрачно сохраняет историю для примерно 100 изменений. Добавить
    такую фичу в MSVC было бы совсем неплохо.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[19]: Проект Visual Generator
    От: eao197 Беларусь http://eao197.blogspot.com
    Дата: 09.07.05 15:43
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Нет, неудобно. Как мне тело метода тогда писать?

    C>
    C>class Window : public WindowBase
    C>{
    C>public:
    C>    [msg_handler:WM_SIZE:OnSize]
    C>    {
    C>       //Какие там у параметров имена????
                // А названия параметров жестко зашиты в системе :)
    C>    }
            // Или так:
            [msg_handler:WM_SIZE:OnSize(cx,height)]
            {
                ...
            }
    C>};
    C>
    ... << RSDN@Home 1.1.4 stable rev. 510>>


    SObjectizer: <микро>Агентно-ориентированное программирование на C++.
    Re[8]: Проект Visual Generator
    От: Шахтер Интернет  
    Дата: 09.07.05 17:15
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Шахтер wrote:


    >> C>*Написать аллокатор лучше Hoard'а, контейнеры лучше чем в STLPort'е

    >> вам **
    >> C>все равно не получится.* А привязка к компилятору — вообще убивает весь
    >> C>смысл затеи. Использовали тогда бы уж лучше GCCXML.
    >> Отучаемся говорить за других.

    C>В тот же Hoard вложено несколько человеко-лет труда (в том числе на

    C>исследования). Сделать лучше — конечно можно, но это потребует
    C>сопоставимого времени.

    C>Для конкретных частных случаев можно написать более крутой аллокатор, но

    C>для общего — вряд ли.

    C>--

    C>С уважением,
    C> Alex Besogonov (alexy@izh.com)

    Ну, во-первых, прежде рекламировать какую-нибудь вещь, сдедует разобраться, где реальные достижения, а где рекламма.

    Во-вторых, что бы сделать что-то лучше не обязательно начинать всё с нуля. Можно взять уже существующее решение и улучшить его в одном или другом направлении.
    Это не требует нескольких человеко-лет.

    По поводу horad а. НЕ могу ничего сказать по поводу алгоритмов -- это требует углублённого исследования, но вот по поводу качества програмной реализации -- вот один из фрагментов. Мне он не внушает энтузиазма. Явный abuse наследования. Здесь нужно было агреггировать. Вместо reinterpret_cast нужен static_cast. Нет защиты от неверного размера. Ну и т.д. Код явно нуждается в некотором улучшении.

    template <class SuperHeap>
    class FreelistHeap : public SuperHeap {
    public:
      
      inline FreelistHeap (void)
        : myFreeList (NULL)
        {}
    
      inline ~FreelistHeap (void)
        {
    #if 0
          // Delete everything on the free list.
          void * ptr = myFreeList;
          while (ptr != NULL) {
        // assert (nObjects > 0);
        assert (ptr != NULL);
        void * oldptr = ptr;
        ptr = (void *) ((freeObject *) ptr)->next;
        SuperHeap::free (oldptr);
          }
    #endif
        }
    
      inline void * malloc (const size_t sz) {
        // Check the free list first.
        void * ptr = myFreeList;
        if (ptr == NULL) {
          ptr = SuperHeap::malloc (sz);
        } else {
          myFreeList = myFreeList->next;
        }
        return ptr;
      }
      
      inline void free (void * ptr) {
        // Add this object to the free list.
        assert (ptr != NULL);
        (reinterpret_cast<freeObject *>(ptr))->next = myFreeList;
        myFreeList = reinterpret_cast<freeObject *>(ptr);
      }
    
      inline void clear (void) {
        myFreeList = NULL;
        SuperHeap::clear();
      }
    
    private:
    
      /// The linked list pointer we embed in the freed objects.
      class freeObject {
      public:
        freeObject * next;
      };
    
      /// The head of the linked list of freed objects.
      freeObject * myFreeList;
    
    };
    В XXI век с CCore.
    Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
    Re[17]: Проект Visual Generator
    От: Шахтер Интернет  
    Дата: 09.07.05 17:21
    Оценка:
    Здравствуйте, adontz, Вы писали:

    A>Например реализовать поддержку Си++/SEH исключений оказалось очень сложно, фактически задача свелась с дизассемблированию и разбору ассемблерного кода и нагенерированных компилятором структур данных, не все поля которых как выяснилось используются. Фактически в Интернете не оказалось ни одного нормального описания как это всё работает, знаменитая статья на codeproject полная лажа, а статья Matt Pietrek больше касалась SEH. Правда я на этой задаче получил большой опыт. Честно говоря мне в какой-то момент казалось, что я вообще никогда не закончу. 2 раза всё бросал и начинал заново, но в конце концов добил. Система потом тестировалась на множестве разных случаев и ведёт себя в точности как родная.


    Делись. Я заинтересован в точном знании как реализована поддержка обработки исключений в VC++. У меня есть некоторые планы подкрутить это дело.
    В XXI век с CCore.
    Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
    Re[9]: Проект Visual Generator
    От: Cyberax Марс  
    Дата: 09.07.05 17:38
    Оценка:
    Шахтер wrote:

    > Во-вторых, что бы сделать что-то лучше не обязательно начинать всё с

    > нуля. Можно взять уже существующее решение и улучшить его в одном или
    > другом направлении.

    Даже это достаточно сложно — тот же Hoard почти полностью переписывали
    (кажется) дважды, чтобы добавить новые оптимизации. И это учитывая, что
    исследования по стрегиям реализации динамического распределения уже лет
    50 идут.

    > Это не требует нескольких человеко-лет.


    Запросто может потребовать, особенно для того, чтобы обогнать тщательно
    оптимизированные реализации.

    > По поводу horad а. НЕ могу ничего сказать по поводу алгоритмов -- это

    > требует углублённого исследования, но вот по поводу качества
    > програмной реализации -- вот один из фрагментов. Мне он не внушает
    > энтузиазма. Явный abuse наследования.

    С наследованием тут все OK — используется трюк с EBO (Empty Base
    Optimization) для организации политик.

    > Здесь нужно было агреггировать. Вместо reinterpret_cast нужен

    > static_cast. Нет защиты от неверного размера. Ну и т.д. Код явно
    > нуждается в некотором улучшении.

    C защитой от неправильного размера:
    * @warning This is for one "size class" only. (хотя assert все равно
    бы не помешал)

    static_cast не поможет — прелбразование идет из void*.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[16]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 09.07.05 18:03
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    ПК>Гм, что-то я не до конца понял идею... Как будет представлена ситуация, когда разница не в наличии/отсутствии некоторого поля в разных версиях, а в разной логике его записи, скажем, в версии 16 поле пишется как uint16, и отсчитывается от 1, а в версии 17 -- как uint32, и отсчитывается от 0? Как быть, если от некоторого прочитанного значения зависит логика разбора остальных? Как предполагается выражать возможность сериализации одного класса в разные форматы? Что делать, если в двух разных ветках системы контроля версий были внесены две разные версии под номером 17, как их сливать, если редактирование осуществляется графическим редактором?..


    В теории всё это должно быть возможно. На практике я как подумаю, какой у всего этого будет интерфейс — плохо делается.
    Думаю оптимальный вариант это для постых вещей, таких как источник поля (поток данных, вычисляемое), его тип(int16, uint32) делать интерфейс. Для логических же выражений (считать Y записей A если X больше восьми) и формул для вычисляемых значений сделать editbox куда будут вставлять непоследсвенно код (скажем (X > 8) ? Y : 0). (ну может ещё визард какой сделать).
    В принципе кодогенератору должно быть плевать — основная проблема интерфейс.
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[7]: Проект Visual Generator
    От: Павел Кузнецов  
    Дата: 09.07.05 18:08
    Оценка:
    Здравствуйте, adontz, Вы писали:

    ПК>> Если я правильно понимаю, речь идет о Reflection и т.п. Но это не есть свойства C#, это возможности платформы. Соответственно, почему бы, если хочется получить эти возможности, сохранив возможности C++, не попробовать C++/CLI, именно для этого и предназначенный?..


    A> Есть вещи которых не хватает в обоих языках.


    А именно?..
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[10]: Проект Visual Generator
    От: Павел Кузнецов  
    Дата: 09.07.05 18:25
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>static_cast не поможет — прелбразование идет из void*.


    static_cast замечательно работает при преобразованиях из void* в T*.
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[11]: Проект Visual Generator
    От: Cyberax Марс  
    Дата: 09.07.05 18:50
    Оценка:
    Павел Кузнецов wrote:

    > C>static_cast не поможет — прелбразование идет из void*.

    > static_cast замечательно работает при преобразованиях из void* в T*.

    Я имею в виду, что он не поможет избавиться от ошибок, и выбор типа
    каста — просто вопрос стиля.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[8]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 09.07.05 18:53
    Оценка:
    Здравствуйте, Павел Кузнецов, Вы писали:

    A>> Есть вещи которых не хватает в обоих языках.

    ПК>А именно?..

    Например сериализация.
    В Си++ её просто нету. Каждый в меру своих способнойстей что-то пишет или использует, но ничего универсального просто нет. Каждый подход подразумевает те или иные ограничения либо на формат хранения данных, либо на сериализуемые структуры.
    В C# всё несколько сложнее. Там аж две независимые сериализации System.Runtime.Serialization и System.Xml.Serialization. Казалось бы хорошо — я тоже когда-то радовался. На самом деле всё плохо.
    Xml-сериализация как нетрудно догадатся умеет писать только в XML. Весьма негибка по своей структуре для чтения большинства внешних форматов она не подходит (я её не смог использовать даже для внутреннего, придуманного мной же).
    Что касается System.Runtime.Serialization, то тут начинаются подводные камни. Во-первых, класс непомеченный аттрибутом [Serializable] использовать нельзя. Я это воспринимаю как недостаток, тем более что Xml-сериализация без него работает, значит в принципе без специального аттрибута можно обойтись. Дальнейшее ИМХО просто архитектурная ошибка, которую легко обойти, то менее ошибкой она от этого не становится. Дело было так. У меня был контейнер для некоторых элементов, которые надо было не только хранить, но и отображать. Ну я реализовал некоторые необходимые интерфейсы и подключил мой контейнер как DataSource для DevExpress.TreeList. Всё замечательно отображалось, TreeList как и положено подписался на событие ListChanged и реагировал на все изменения. Дальше самое интересное — я хочу записать свой контейнер в файл, а мне говорят, что DevExpress.TreeList is not serializable. Оно мне надо было? Пришлось создавать ещё одну копию списка на события которой никто не подписан) только для того, чтобы записать её в файл, так как помечать событие аттрибутом NonSerialized нельзя. Ладно лишний расход памяти, но что если мне надо сериализовать вместе со структурой некоторые из подписчиков? Система показывает себя в этом случае не гибкой. ИМХО, если уж ввели атрибут Serializable, то надо было классы без этого аттрибута просто пропускать, а не генерировать ошибки.
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[9]: Проект Visual Generator
    От: Cyberax Марс  
    Дата: 09.07.05 19:15
    Оценка:
    adontz wrote:

    > A>> Есть вещи которых не хватает в обоих языках.

    > ПК>А именно?..
    > Например сериализация.

    Мимо.

    > В Си++ её просто нету. Каждый в меру своих способнойстей что-то пишет

    > или использует, но ничего универсального просто нет. Каждый подход
    > подразумевает те или иные ограничения либо на формат хранения данных,
    > либо на сериализуемые структуры.

    Есть Boost.Serialization
    (http://boost.org/libs/serialization/doc/index.html). Вот ее design goals:

    1. Code portability — depend only on ANSI C++ facilities.
    2. Code economy — exploit features of C++ such as RTTI, templates,
    and multiple inheritance, etc. where appropriate to make code
    shorter and simpler to use.
    3. Independent versioning for each class definition. That is, when a
    class definition changed, older files can still be imported to the
    new version of the class.
    4. Deep pointer save and restore. That is, save and restore of
    pointers saves and restores the data pointed to.
    5. Proper restoration of pointers to shared data.
    6. Serialization of STL containers and other commonly used templates.
    7. Data Portability — Streams of bytes created on one platform should
    be readable on any other.
    8. Orthogonal specification of class serialization and archive
    format. That is, any file format should be able to store
    serialization of any arbitrary set of C++ data structures without
    having to alter the serialization of any class.
    9. Non-intrusive. Permit serialization to be applied to unaltered
    classes. That is, don't require that classes to be serialized be
    derived from a specific base class or implement specified member
    functions. This is necessary to easily permit serialization to be
    applied to classes from class libraries that we cannot or don't
    want to have to alter.
    10. The *archive* interface must be simple enough to easily permit
    creation of a new type of archive.
    11. The *archive* interface must be rich enough to permit the creation
    of an *archive* that presents serialized data as XML in a useful
    manner.

    При этом ее реально удобно использовать _и_ расширять. Единственное чем
    бы помог кодогенератор — это для перечисления полей структуры и для
    разворачивания атрибутов.

    > Ладно лишний расход памяти, но что если мне надо сериализовать вместе

    > со структурой *некоторые* из подписчиков? Система показывает себя в
    > этом случае не гибкой. ИМХО, если уж ввели атрибут Serializable, то
    > надо было классы без этого аттрибута просто пропускать, а не
    > генерировать ошибки.

    В Java есть ключевое слово transient, означающее, что данное поле
    сериализовать не надо.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[10]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 09.07.05 19:51
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Есть Boost.Serialization

    C>(http://boost.org/libs/serialization/doc/index.html). Вот ее design goals:

    Угу. Явная сериализация базового класса, ручная версионность это всё пол-беды.
    Беда это, например, потеря контроля целостности данных. Вот как с помошью boost.serialization делается такое:
    Есть параллелипипед заданный тремя векторами с началами в одной точке (4 точки, 12 координат). В процессе его использования нужны координаты всех 8 вершин и объём. Считать их каждый раз накладно,, значит они тоже хранятся и вычисляются по мере изменения исходных данных, но в файл не записываются. Как мне их пересчитать после сериализации? В методе
    template<class Archive>
    void serialize(Archive & ar, const unsigned int version)

    ?
    Но он не только для считывания, но и для записи. Значит в методе
    template<class Archive>
    void load(Archive & ar, const unsigned int version)

    ?
    Но это значит, что мало того что надо объявить ещё метод save, так надо потом ещё и постоянно держать методы в save и load в синхронном состоянии. На тех примерах что в Tutorial всё выглядит замечательно, стоит подсунуть чуть более сложный класс и опять всё надо делать руками и все эти способы сокращения объёма кодирования перестают работать.

    C>При этом ее реально удобно использовать _и_ расширять. Единственное чем бы помог кодогенератор — это для перечисления полей структуры и для разворачивания атрибутов.


    Нет, ты не прав. Кодогенератор может не только перечислять поля, но и вызывать методы. Мне например кажется более разумным считать вычисляемые поля не в методе load, а в методе on_after_load который бы вызывался если он есть. Более того, я хочу ещё и on_before_save чтобы привести данные к каноническому виду (например отсортировать или сдвинуть идентификаторы, чтобы использовались от 0 до N без просветов или перегенерировать GUIDы, да мало ли что) перед записью. Отдельный метод уместнее, тем более уместно чтобы не я его явно вызывал, а это делали за меня.

    C>В Java есть ключевое слово transient, означающее, что данное поле сериализовать не надо.


    А в .Net есть атрибут NonSerialized, но в событиям его применять нельзя.
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[12]: Проект Visual Generator
    От: Шахтер Интернет  
    Дата: 09.07.05 20:22
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Павел Кузнецов wrote:


    >> C>static_cast не поможет — прелбразование идет из void*.

    >> static_cast замечательно работает при преобразованиях из void* в T*.

    C>Я имею в виду, что он не поможет избавиться от ошибок, и выбор типа

    C>каста — просто вопрос стиля.

    C>--

    C>С уважением,
    C> Alex Besogonov (alexy@izh.com)

    В данном случае это не стиль.
    static_cast -- легальный каст в языке, в данном случае для получения типизированоого указателя из нетипизированного.
    reinterpret_cast -- платформенно-зависимый хак.
    Это вопрос о выражении характера операции в коде.
    static_cast указываает при чтении кода, что всё нормально.
    Условно говоря -- желтый маркер.
    reinterpret_cast -- осторожно, платформенно-зависимый хак.
    Красный маркер.
    В XXI век с CCore.
    Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
    Re[10]: Проект Visual Generator
    От: Шахтер Интернет  
    Дата: 09.07.05 20:35
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Шахтер wrote:


    >> Во-вторых, что бы сделать что-то лучше не обязательно начинать всё с

    >> нуля. Можно взять уже существующее решение и улучшить его в одном или
    >> другом направлении.

    C>Даже это достаточно сложно — тот же Hoard почти полностью переписывали

    C>(кажется) дважды, чтобы добавить новые оптимизации. И это учитывая, что
    C>исследования по стрегиям реализации динамического распределения уже лет
    C>50 идут.

    >> Это не требует нескольких человеко-лет.


    C>Запросто может потребовать, особенно для того, чтобы обогнать тщательно

    C>оптимизированные реализации.

    >> По поводу horad а. НЕ могу ничего сказать по поводу алгоритмов -- это

    >> требует углублённого исследования, но вот по поводу качества
    >> програмной реализации -- вот один из фрагментов. Мне он не внушает
    >> энтузиазма. Явный abuse наследования.

    C>С наследованием тут все OK — используется трюк с EBO (Empty Base

    C>Optimization) для организации политик.

    При чем здесь empty base optimization?

    У нас получается два класса, производный и базовый. Публичное наследование.
    Оба класса содержат методы с одинаковой сигнатурой, но с разной семантикой.
    Для чего, спрашивается? Правильный ответ -- нафиг не нужно и даже вредно.
    Базовый класс надо сделать членом.

    >> Здесь нужно было агреггировать. Вместо reinterpret_cast нужен

    >> static_cast. Нет защиты от неверного размера. Ну и т.д. Код явно
    >> нуждается в некотором улучшении.

    C>C защитой от неправильного размера:

    C> * @warning This is for one "size class" only. (хотя assert все равно
    C>бы не помешал)

    Здесь не assert нужен. Вместо того, чтобы отлавливать ошибки в run-time е, их надо не допускать в compile-time.
    В данном случае -- раз аллокируемый размер предопределён, не нужно его вообще как параметр передавать.
    Сделай его параметром шаблона. Кроме того, нужна проверка, что этот размер не меньше, чем sizeof (freeObject).

    C>static_cast не поможет — прелбразование идет из void*.


    Кстати говоря, в данном примере каст вообще не нужен -- placement new будет в самый раз.

    C>--

    C>С уважением,
    C> Alex Besogonov (alexy@izh.com)
    В XXI век с CCore.
    Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
    Re[19]: Проект Visual Generator
    От: Шахтер Интернет  
    Дата: 09.07.05 20:41
    Оценка:
    Здравствуйте, adontz, Вы писали:

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


    Ш>>Делись. Я заинтересован в точном знании как реализована поддержка обработки исключений в VC++. У меня есть некоторые планы подкрутить это дело.


    A>Давно уже поделился http://www.rsdn.ru/Forum/Message.aspx?mid=1206489&amp;only=1
    Автор: adontz
    Дата: 05.06.05


    Скачал, щаз буду парсить.
    В XXI век с CCore.
    Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
    Re[20]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 09.07.05 20:50
    Оценка:
    Здравствуйте, Шахтер, Вы писали:

    A>>Давно уже поделился http://www.rsdn.ru/Forum/Message.aspx?mid=1206489&amp;only=1
    Автор: adontz
    Дата: 05.06.05

    Ш>Скачал, щаз буду парсить.

    Будут вопросы — пиши. В принципе интересно что именно ты хочешь подкрутить, может я тебе сразу скажу, что этого делать нельзя
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[12]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 09.07.05 21:04
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Все равно не вижу целей, которые оправдывали бы замену CRT.


    А это раздельные проекты. Одно с другим не связано. Вполне возможно, что кодогенератор будет генерировать вполне портируемый код никак не завязанный на какие-либо библиотеки.
    А ты думал я CRT меняю, что кодогенератор использовать? Ты ещё раз ошибся
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[11]: Проект Visual Generator
    От: Cyberax Марс  
    Дата: 09.07.05 21:08
    Оценка:
    Шахтер wrote:

    > C>С наследованием тут все OK — используется трюк с EBO (Empty Base

    > C>Optimization) для организации политик.
    > При чем здесь empty base optimization?

    При том, что базовый класс может быть stateless, а включение его членом
    потребует 1 байта памяти (минимум). Кроме того, базовый класс может быть
    некопируемым, тогда его надо было бы хранить как ссылку, а это будет
    оверхед.

    > У нас получается два класса, производный и базовый. Публичное

    > наследование.
    > Оба класса содержат методы с одинаковой сигнатурой, но с разной
    > семантикой.
    > Для чего, спрашивается?

    Чтобы сделать прозрачные политики. Смотри у Александреску в flex_string,
    например.

    > Правильный ответ -- нафиг не нужно и даже вредно.

    > Базовый класс надо сделать членом.

    В данном случае — нет.

    > C>C защитой от неправильного размера:

    > C> * @warning This is for one "size class" only. (хотя assert все равно
    > C>бы не помешал)
    > Здесь не assert нужен. Вместо того, чтобы отлавливать ошибки в
    > run-time е, их надо не допускать в compile-time.
    > В данном случае -- раз аллокируемый размер предопределён, не нужно его
    > вообще как параметр передавать.
    > Сделай его параметром шаблона. Кроме того, нужна проверка, что этот
    > размер не меньше, чем sizeof (freeObject).

    Да, об этом они не подумали.

    > C>static_cast не поможет — прелбразование идет из void*.

    > Кстати говоря, в данном примере каст вообще не нужен -- placement new
    > будет в самый раз.

    Кстати да, в своей библиотеке контейнеров я его использую, а тут как-то
    об этом не подумал.

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[12]: Проект Visual Generator
    От: Шахтер Интернет  
    Дата: 09.07.05 21:19
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Шахтер wrote:


    >> C>С наследованием тут все OK — используется трюк с EBO (Empty Base

    >> C>Optimization) для организации политик.
    >> При чем здесь empty base optimization?

    C>При том, что базовый класс может быть stateless, а включение его членом

    C>потребует 1 байта памяти (минимум).

    Оптимизировать размер данного класса не имеет смысла -- объектов этого класса будет несколько штук в программе.

    C>Кроме того, базовый класс может быть

    C>некопируемым,

    Кстати -- копирование для даного класса должно быть запрещено. Это просто баг в этом коде.

    С> тогда его надо было бы хранить как ссылку,


    Зачем? Не нужно. Кстати, подобъекты базового класса не хранятся как ссылки.

    С> а это будет

    C>оверхед.

    >> У нас получается два класса, производный и базовый. Публичное

    >> наследование.
    >> Оба класса содержат методы с одинаковой сигнатурой, но с разной
    >> семантикой.
    >> Для чего, спрашивается?

    C>Чтобы сделать прозрачные политики.


    ???

    С>Смотри у Александреску в flex_string,

    C>например.

    >> Правильный ответ -- нафиг не нужно и даже вредно.

    >> Базовый класс надо сделать членом.

    C>В данном случае — нет.


    >> C>C защитой от неправильного размера:

    >> C> * @warning This is for one "size class" only. (хотя assert все равно
    >> C>бы не помешал)
    >> Здесь не assert нужен. Вместо того, чтобы отлавливать ошибки в
    >> run-time е, их надо не допускать в compile-time.
    >> В данном случае -- раз аллокируемый размер предопределён, не нужно его
    >> вообще как параметр передавать.
    >> Сделай его параметром шаблона. Кроме того, нужна проверка, что этот
    >> размер не меньше, чем sizeof (freeObject).

    C>Да, об этом они не подумали.


    >> C>static_cast не поможет — прелбразование идет из void*.

    >> Кстати говоря, в данном примере каст вообще не нужен -- placement new
    >> будет в самый раз.

    C>Кстати да, в своей библиотеке контейнеров я его использую, а тут как-то

    C>об этом не подумал.

    C>--

    C>С уважением,
    C> Alex Besogonov (alexy@izh.com)
    В XXI век с CCore.
    Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
    Re[10]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 09.07.05 22:37
    Оценка:
    Здравствуйте, Юнусов Булат, Вы писали:

    [NonSerialized] public event ListChangedEventHandler ListChanged;

    error CS0592: Attribute 'NonSerialized' is not valid on this declaration type. It is valid on 'field' declarations only.


    ЮБ>Гуевых подписчиков серилизовать — идея вредная — отдашь ты например коллекцию по ремотингу — придется тащить и все потроха девекса? (или чего там юзается) Это ж никуда не годится.


    Вот и я о том же — никуда не годится.
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[11]: Проект Visual Generator
    От: Юнусов Булат Россия  
    Дата: 09.07.05 22:52
    Оценка:
    Здравствуйте, adontz, Вы писали:


    A>
    A>[NonSerialized] public event ListChangedEventHandler ListChanged;
    A>

    A>error CS0592: Attribute 'NonSerialized' is not valid on this declaration type. It is valid on 'field' declarations only.


    Дык — в моем варианте оно на делегат навешивается.
    Re[12]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 09.07.05 23:08
    Оценка:
    Здравствуйте, Юнусов Булат, Вы писали:

    ЮБ>Дык — в моем варианте оно на делегат навешивается.


    Я вынужден реализовывать интерфейс — менять ничего не могу.
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[13]: Проект Visual Generator
    От: Юнусов Булат Россия  
    Дата: 09.07.05 23:27
    Оценка:
    Здравствуйте, adontz, Вы писали:

    A>Я вынужден реализовывать интерфейс — менять ничего не могу.


    Можешь — это просто другой способ реализации.
    Видимо как раз для таких целей, ну может еще для отслеживания подписки — отписки.
    Re[14]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 09.07.05 23:30
    Оценка:
    Здравствуйте, Юнусов Булат, Вы писали:

    ЮБ>Можешь — это просто другой способ реализации.


    Я попытался, он мне посыпал Not Implemented. Я завтра MSDN почитаю на эту тему. Как это event можно на delegate заменить, так чтобы event считался реализованным.
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[15]: Проект Visual Generator
    От: Юнусов Булат Россия  
    Дата: 10.07.05 00:03
    Оценка:
    Здравствуйте, adontz, Вы писали:

    A>Я попытался, он мне посыпал Not Implemented. Я завтра MSDN почитаю на эту тему. Как это event можно на delegate заменить, так чтобы event считался реализованным.


    http://msdn.microsoft.com/library/default.asp?url=/library/en-us/csref/html/vclrfeventpg.asp
    Re[10]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 10.07.05 00:47
    Оценка:
    Здравствуйте, Юнусов Булат, Вы писали:

    ЮБ>Как это нельзя? — это делать нужно и делается сплошь и рядом — только несколько другим путем


    О! Получилось Спасибо! Только способо больше на заплатку похож
    В любом случае сериализовать часть подписчиков всё равно нельзя.
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re: Проект Visual Generator
    От: execve  
    Дата: 10.07.05 04:38
    Оценка:
    Здравствуйте, adontz, Вы писали:

    A>malloc и fopen умрут как категория. По большому счёту разве они ещё кому-то нужны?


    Ещё как нужны.
    Re[2]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 10.07.05 09:49
    Оценка:
    Здравствуйте, execve, Вы писали:

    A>>malloc и fopen умрут как категория. По большому счёту разве они ещё кому-то нужны?

    E>Ещё как нужны.

    При программировании на Си++? Значит вы один из тех, кому я хочу дать по рукам
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[3]: Проект Visual Generator
    От: Cyberax Марс  
    Дата: 10.07.05 10:40
    Оценка:
    adontz wrote:

    > A>>malloc и fopen умрут как категория. По большому счёту разве они ещё

    > кому-то нужны?
    > E>Ещё как нужны.
    > При программировании на Си++? Значит вы один из тех, кому я хочу дать
    > по рукам

    А вы предлагаете работать с файлами при помощи этих &^#%$#&^%$ С++ных
    потоков? Ну уж нет, ни за что.

    Файловые потоки в С++ — самая отстойно спроектированная часть. Не
    верите? Тогда "вопрос на засыпку": как открыть файл с unicode'ным именем
    с помощью потоков?

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[4]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 10.07.05 11:11
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>А вы предлагаете работать с файлами при помощи этих &^#%$#&^%$ С++ных потоков? Ну уж нет, ни за что.

    C>Файловые потоки в С++ — самая отстойно спроектированная часть. Не верите? Тогда "вопрос на засыпку": как открыть файл с unicode'ным именем с помощью потоков?

    Согласен — стандартные потоки полный отстой, много чего просто нету (например чёткого разделения на random access и forward only потоки). Давно пользуюсь своими. Но любой поток лучше fopen. А использование malloc в Си++ коде это то за что надо нещадно убивать Потому что потом приходят .Net'овцы и говорят — вот у вас в Си++ память течёт. А я сижу и думаю с чего бы? А оказывается это и не Си++ вовсе, а так... Си
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[5]: Проект Visual Generator
    От: Cyberax Марс  
    Дата: 10.07.05 11:45
    Оценка:
    adontz wrote:

    > C>А вы предлагаете работать с файлами при помощи этих &^#%$#&^%$

    > С++ных потоков? Ну уж нет, ни за что.
    > C>Файловые потоки в С++ — самая отстойно спроектированная часть. Не
    > верите? Тогда "вопрос на засыпку": как открыть файл с unicode'ным
    > именем с помощью потоков?
    > Согласен — стандартные потоки полный отстой, много чего просто нету
    > (например чёткого разделения на random access и forward only потоки).
    > Давно пользуюсь своими.

    Мне свои лень писать.

    > Но любой поток лучше fopen.


    Чем? Для бинарного ввода-вывода не особо важно что использовать: fwrite
    или stream.write. Закрытие файлов у меня делается автоматически
    (использую shared_ptr с перегруженным deleter'ом).

    Для текстового вывода ничего удобнее fprintf'а пока еще не придумали
    (плевать даже на его типонебезопасность), вот для чтения данных fscanf
    уже не так удобен.

    > А использование malloc в Си++ коде это то за что надо нещадно убивать

    > Потому что потом приходят .Net'овцы и говорят — вот у вас в Си++
    > память течёт. А я сижу и думаю с чего бы? А оказывается это и не Си++
    > вовсе, а так... Си

    А чем malloc принципиально от new отличается для POD-типов?

    --
    С уважением,
    Alex Besogonov (alexy@izh.com)
    Posted via RSDN NNTP Server 1.9
    Sapienti sat!
    Re[5]: Проект Visual Generator
    От: execve  
    Дата: 10.07.05 15:21
    Оценка:
    Здравствуйте, adontz, Вы писали:

    A>Давно пользуюсь своими. Но любой поток лучше fopen.


    А что у Вас, извиняюсь, внутри этих потоков?
    CreateFile/(Read|Write)File?
    Re[3]: Проект Visual Generator
    От: execve  
    Дата: 10.07.05 15:38
    Оценка:
    Здравствуйте, adontz, Вы писали:

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


    A>>>malloc и fopen умрут как категория. По большому счёту разве они ещё кому-то нужны?

    E>>Ещё как нужны.

    A>При программировании на Си++? Значит вы один из тех, кому я хочу дать по рукам


    Попробуй.
    Только сначала покажи в стандартной библиотеке C++ аналог vprintf и ещё кучи других функций из libc.
    Или хотя бы возможность получить FILE* из std::fstream. Или создать std::fstream из FILE*.

    Только не надо рассказывать, что это никому (т.е. тебе) не нужно.
    Re: От модератора
    От: Павел Кузнецов  
    Дата: 10.07.05 19:19
    Оценка:
    Ветка Metaprogramming et al
    Автор:
    Дата: 09.07.05
    перенесена в форум "Философия программирования".
    Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
    Re[6]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 11.07.05 11:06
    Оценка:
    Здравствуйте, Cyberax, Вы писали:

    C>Мне свои лень писать.


    Правильно, я их тебе напишу

    C>Чем? Для бинарного ввода-вывода не особо важно что использовать: fwrite

    C>или stream.write. Закрытие файлов у меня делается автоматически
    C>(использую shared_ptr с перегруженным deleter'ом).

    Плохо. Поток это не только файлы. Это и пайпы и сокеты и просто кусок памяти. Универсальности при использовании fopen нету. Если у меня есть код который пишет BMP файл в поток, то передать BMP файл пос ети для меня не проблема, просто подсовываю другой поток. Хочу шифрование или сжатие? Делаю прокси-поток в который когда пишешь, он данные шифрует и пишет в другой поток. В fopen всей этой гибкости нету.

    C>Для текстового вывода ничего удобнее fprintf'а пока еще не придумали (плевать даже на его типонебезопасность)


    Опять ошибка. В библиотечке которой я поделился с шахтёром у класса строки есть метод Format аналогичный по синтаксису .Net-оскому. ИМХО
    string.Format("You have used {0} megabytes of {1} aviable", 5, 17);

    лучше чем
    string.Print("You have used %d megabytes of %d aviable", 5, 17);

    И дело даже не в типобезопасности, хотя она очень важна и не в возможности повторного использования параметров, а в расшиямости. Я могу передать методу Format любой класс для которого функция _result<string> string_format(const MyType &) определена. Никакой printf не предоставляет таких возможностей.

    C>А чем malloc принципиально от new отличается для POD-типов?


    Принципиального отличия нету, но и голый new использовать тоже преступление.
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[6]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 11.07.05 11:10
    Оценка:
    Здравствуйте, execve, Вы писали:

    E>А что у Вас, извиняюсь, внутри этих потоков?

    E>CreateFile/(Read|Write)File?

    Не только. Может быть и connect если речь о сокетах. А сделать memory mapped files потоком очень важно, но увы средствами стандартной библиотеки никак.
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[4]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 11.07.05 11:18
    Оценка:
    Здравствуйте, execve, Вы писали:

    E>Только сначала покажи в стандартной библиотеке C++ аналог vprintf и ещё кучи других функций из libc.


    по этому поводу я уже ответил
    По класс string и метод Format
    Автор: adontz
    Дата: 11.07.05


    E>Или хотя бы возможность получить FILE* из std::fstream. Или создать std::fstream из FILE*.


    Собственно а зачем?
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[4]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 12.07.05 12:47
    Оценка:
    Здравствуйте, VladD2, Вы писали:

    VD>Отличное решение. Зайти на этот форум через 10 лет? Или свисниш когда будет готово?


    Свистну, не волнуйся
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[2]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 13.07.05 17:24
    Оценка:
    Здравствуйте, 0xDEADBEEF, Вы писали:

    A>>Среда разработки: Microsoft Visual Studio

    DEA>...Жесткая привязка к компилятору и платформе. Некошерно.

    Это скорее простой способ всё автоматизировать, чем использование особенностей компилятора.

    DEA>Впрочем, никто тебе не запрещает воспользоваться "#pragma deprecated" чтобы заанноить "любителя старины" до самых печенок.


    Эти библиотеки могут компоноватся с стандартной CRT. Ркчь идёт только о новом коде.

    DEA>Что по поводу __declspec(property) а также __event и __hook?


    __declspec(property) не использует неявные приведения типов. Например если свойство принимает какой-то COleString и передаётся BSTR, то вызывать конструктор COleString придётся вручную. В результате больше хлопот, чем пользы.

    __event и __hook это здорово, но этого мало, чтобы прозрачно связывать свойства. Например когда я пишу obj1.prop1.bind(obj2.prop2) я хочу чтобы prop1 подписывалось на событие prop2.OnChange и изменяло свой значение соответственно. Причём чтобы это событие (так же как скажем, OnDestroy и проч.) было частью ствойства.

    DEA>Если уж мы определились с компилятором, а на ISO C++ нам ложить с прибором, то не использовать возможности компилятора на полную катушку есть глупость великая.


    Как раз на компилятор мне вообще прлевать. Мне куда важнее была среда разработки, где определённую последовательность операций можно легко автоматизировать. В принципе я нежу причин, почему не сделать тоже самое для GCC, но всё то что для MSVC хорошо документированно в GCC практически тайна, разгадывать которую можно по исходникам.

    DEA>Согласен, но. Метапрограммирование как правило окупается только в повторно используемом коде.

    DEA>В коде конечного приложения, заточенного под решение конкретной задачи, потребность в нем минимальна.

    A>>
  • Отсутсвие СОМ Interop
    DEA>#import? __interface?

    Это для использования. А для создания объектов?
  • A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[3]: Проект Visual Generator
    От: 0xDEADBEEF Ниоткуда  
    Дата: 14.07.05 12:26
    Оценка:
    Здравствуйте, adontz, Вы писали:

    A>>>Среда разработки: Microsoft Visual Studio

    DEA>>...Жесткая привязка к компилятору и платформе. Некошерно.
    A>Это скорее простой способ всё автоматизировать, чем использование особенностей компилятора.

    DEA>>Впрочем, никто тебе не запрещает воспользоваться "#pragma deprecated" чтобы заанноить "любителя старины" до самых печенок.


    A>Эти библиотеки могут компоноватся с стандартной CRT. Ркчь идёт только о новом коде.

    Проблема не в компоновке, а в том, как эту библиотеку юзать. Ведь она-то Сишная. Следовательно, проблемы очистки ее ресурсов никуда не денутся т.е. если я вызвал CreateSomething, то должен озаботиться вызвом DestroySomething. Та же проблема что и с malloc/free и fopen/fclose — вид сбоку.

    Единственное вменяемое решение здесь — предоставить SmartHandle (Handle — это все что нуждается в уничтожении, но не память) в чем-то аналогичный SmartPtr. Причем этот SmartHandle должен поддерживать достаточно широкий набор моделей владения, чтобы не повторилась история с std::auto_ptr

    DEA>>Что по поводу __declspec(property) а также __event и __hook?

    A>__declspec(property) не использует неявные приведения типов.
    Прискорбно. Но, по крайней мере, это единственный способ добавить пропертя без оверхеда по размеру класса.
    Что же касается реализации пропертей которую ты приводил (афаик это самая лучшая реализация), то она обладает прегадостным свойством — генерирует оверхед 1 байт на пропертю. В принципе, не так уж и много, но если пропертей несколько десятков... Жаба душит.

    Тем более, что любая реализация пропертей потребует вторжения в определение класса — хотя бы для того чтобы пропертю эту добавить. Немногим программистам это понравится.

    Лично я бы от них отказался.

    A>__event и __hook это здорово, но этого мало, чтобы прозрачно связывать свойства. Например когда я пишу obj1.prop1.bind(obj2.prop2) я хочу чтобы prop1 подписывалось на событие prop2.OnChange и изменяло свой значение соответственно. Причём чтобы это событие (так же как скажем, OnDestroy и проч.) было частью ствойства.


    Еще неплохо бы их приспособить для варки кофе, уборки в квартире и танцев живота
    Впрочем, какие бы еще навороты не потребовались, это дело выливается в одно и тоже — ручная реализация пропертей и, как следствие, вышеописанные проблемы, если не больше.

    DEA>>Если уж мы определились с компилятором, а на ISO C++ нам ложить с прибором, то не использовать возможности компилятора на полную катушку есть глупость великая.


    A>Как раз на компилятор мне вообще прлевать. Мне куда важнее была среда разработки, где определённую последовательность операций можно легко автоматизировать.

    Лично я бы не полагался на парсинг C++ предоставляемый студией. Он весьма глюкав.

    A>В принципе я нежу причин, почему не сделать тоже самое для GCC, но всё то что для MSVC хорошо документированно в GCC практически тайна, разгадывать которую можно по исходникам.


    GCC достаточно плотно следует стандарту. Особенно последние несколько лет. Все девиации (а их не так уж и много) описаны в сопроводительной документации. Если есть место куда ее можно выложить на RSDN в .CHM — давай выложу. Будет полезно и тебе и другим.

    Впрочем, существуют еще Borland, Metrowerks, Comeau, aCC и прочая. Если делать, то делать надо без привязки к какому бы ни было диалекту. Следовательно — стандарт — настольная книга.

    A>>>
  • Отсутсвие СОМ Interop
    DEA>>#import? __interface?
    A>Это для использования. А для создания объектов?
    __interface В смысле Attributed ATL. Средств для создания COM-обьектов — вагон и маленькая тележка груженая по самые борта.

    ЗЫ. Еще _очень_ хотелось бы увидеть детальный список задач который данный "Visual Generator" призван решить...
  • __________
    16.There is no cause so right that one cannot find a fool following it.
    Re[4]: Проект Visual Generator
    От: adontz Грузия http://adontz.wordpress.com/
    Дата: 14.07.05 12:38
    Оценка:
    Здравствуйте, 0xDEADBEEF, Вы писали:

    A>>Эти библиотеки могут компоноватся с стандартной CRT. Ркчь идёт только о новом коде.

    DEA>Проблема не в компоновке, а в том, как эту библиотеку юзать. Ведь она-то Сишная. Следовательно, проблемы очистки ее ресурсов никуда не денутся т.е. если я вызвал CreateSomething, то должен озаботиться вызвом DestroySomething. Та же проблема что и с malloc/free и fopen/fclose — вид сбоку.

    Эту проблему никто никогда не уберёт. Библиотеку надо будет просто переписать на Си++. Другое дело, что давать по рукам при написании нового кода ИМХО надо. Большинство тех, кто думает, что пишет на Си++, на самом деле пишут на смеси Си++ и Си.

    DEA>Прискорбно. Но, по крайней мере, это единственный способ добавить пропертя без оверхеда по размеру класса.

    DEA>Что же касается реализации пропертей которую ты приводил (афаик это самая лучшая реализация), то она обладает прегадостным свойством — генерирует оверхед 1 байт на пропертю. В принципе, не так уж и много, но если пропертей несколько десятков... Жаба душит.

    Вот — постараюсь сделать так, чтобы не было этого 1 байта

    DEA>Тем более, что любая реализация пропертей потребует вторжения в определение класса — хотя бы для того чтобы пропертю эту добавить. Немногим программистам это понравится.


    Ну а куда от этого деватся?

    DEA>Лично я бы не полагался на парсинг C++ предоставляемый студией. Он весьма глюкав.


    В 7.1? Да ну...

    DEA>GCC достаточно плотно следует стандарту. Особенно последние несколько лет. Все девиации (а их не так уж и много) описаны в сопроводительной документации. Если есть место куда ее можно выложить на RSDN в .CHM — давай выложу. Будет полезно и тебе и другим.


    ОК, как насчёт этого?
    http://www.rsdn.ru/Forum/Message.aspx?mid=1271651&amp;only=1
    Автор: adontz
    Дата: 13.07.05


    DEA>Впрочем, существуют еще Borland, Metrowerks, Comeau, aCC и прочая. Если делать, то делать надо без привязки к какому бы ни было диалекту. Следовательно — стандарт — настольная книга.


    Дело не в компиляторе, а в том насколько его можно использовать в сторонних целях.

    DEA>__interface В смысле Attributed ATL.


    А ну да, это как раз самый что ни на есть Си++

    DEA>ЗЫ. Еще _очень_ хотелось бы увидеть детальный список задач который данный "Visual Generator" призван решить...


    Уменьшить объём ручного кодирования
    A journey of a thousand miles must begin with a single step © Lau Tsu
    Re[11]: Проект Visual Generator
    От: Юнусов Булат Россия  
    Дата: 08.09.05 12:50
    Оценка:
    Здравствуйте, adontz, Вы писали:

    Для второго фреймворка еще один способ нашелся.
        [field: NonSerialized]
        public event ListChangedEventHandler ListChanged;
    Re[12]: Проект Visual Generator
    От: Юнусов Булат Россия  
    Дата: 08.09.05 13:16
    Оценка:
    Здравствуйте, Юнусов Булат, Вы писали:

    ЮБ>Для второго фреймворка еще один способ нашелся.

    ЮБ>
    ЮБ>    [field: NonSerialized]
    ЮБ>    public event ListChangedEventHandler ListChanged;
    ЮБ>


    В 1.1 фреймворке тоже работает.
     
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.