Re[3]: Cpp-Object
От: srggal Украина  
Дата: 19.05.06 11:46
Оценка:
Здравствуйте, _nn_, Вы писали:

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


S>>Быть может managed C++ спасёт Отца русской демократии ?

S>>(просто предположение)

__>Тогда уже C#


Я, в принципе к тому клоню

Но Вы же сами написали:

Но что делать если надо на С++

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Cpp-Object
От: _nn_  
Дата: 19.05.06 11:56
Оценка:
Здравствуйте, srggal, Вы писали:

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


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


S>>>Быть может managed C++ спасёт Отца русской демократии ?

S>>>(просто предположение)

__>>Тогда уже C#


S>Я, в принципе к тому клоню


S>Но Вы же сами написали:

S>

S>Но что делать если надо на С++


Вы предложили MC++, я говорю, что лучше уже C#.
Но пока надо С++ обычный
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[5]: Cpp-Object
От: olexandr Новороссия http://demotivation.me/images/20140818/lxz0l278b9ep.jpg
Дата: 19.05.06 15:10
Оценка:
Здравствуйте, _nn_, Вы писали:

__>>>Почему нельзя определить семантику передачи аргументов ?

G>>Гм... ее из сигнатуры функции почти всегда видно. Разве нет? отрабатывайте стиль.
__>void f(int& i);
__>Это out или in-out аргумент ?

Это in-out.

void f(const int& i);
Это in.


__>Без документации нельзя узнать.


По прототипу?


__>>>Почему нужно делать разного рода извращения, чтобы работать с примитивными типами ?

G>>Ну у каждого свои склонности. Кто то только через извращения проблемы решать может.
__>А как вы решаете эти проблемы:
__>[c]
__>template<typename T>
__>size_t f(T const& t)
__>{
__> return t.size();
__>}

__>f(1); // не работает.


...skip...

В таком случае можно полностью отказаться от встроенных типов.


__>>>Почему нельзя написать код так, чтобы он работал для всего ?

G>>Угу, в отдельно взятых 2 тысячах строк кода. Для того, чтобы ваш подход работал для всех, он должен стать стандартом. А предпосылок для этого в мотивации как то маловато. Скажу более — эта библиотека будет даже вредна для неокрепших умов.
__>А мне кажется наоборот.
__>Намного проще знать, что все типы это классы, чем вспоминать, что иногда есть примитвные типы, которые нужно передавать по значению, а не по ссылке.

Согласен, если вынести всю работу с примитивными типами в отдельную библиотеку оберток над ними, то может так и будет. А зачем? Нет, ну понятно что вроде как повышается уровень абстракции, но лично я не могу представить себе как это можно будет применить в огромном количестве сопровождаемого кода.

А для нового кода часто используется принцип "чем меньше кода тем он лучше". Если можно использовать просто int или вместо этого создать класс Int производный от Object и следить чтобы ни кто int не использовал, то 99.9% имхо не сильно задумываясь будут использовать int.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Некроссплатформенность маловероятна (c) Sheridan
...трава никак не влияет, разве что срывает покровы барьеров... (с) мыщъх
Re[4]: Cpp-Object
От: olexandr Новороссия http://demotivation.me/images/20140818/lxz0l278b9ep.jpg
Дата: 19.05.06 15:10
Оценка:
Здравствуйте, _nn_, Вы писали:

__>>>>
void f(out_int32 i)
V>>>    ^^^^^^^^^^^
__>>>>{
__>>>> i = 1;
__>>>>}

V>>>как это интересно возвращает результат?

GN>>Очевидно out_int32 — ссылка.


GN>>Хотя как тогда обозначается ссылка на константу?

GN>>И наличие 2х разных синтаксисов — для ссылок на POD и не-POD типы ИМХО произведёт кашу.
__>Наоборот, нужен один синтаксис на все.

__>Тут есть несколько вариантов:

__>1.
__>
__>void f(out<int32> i);
__>void f(out<myclass> m);
__>


__>2.

__>
__>void f(out_int32 i);
__>void f(out_myclass m);
__>


__>Насчет ссылки и ссылки на константу можно добавить: ref и cref:

__>1.
__>
__>int32 i;
__>ref<int32> j(i);
__>


__>2.

__>
__>int32 i;
__>ref_int32 j(i);
__>


А, добавить in/out/ref/ptr/... классы для каждого типа? И не забыть в функциях для каждого out объекта распределить память, даже если значение в него в случае ошибки мы помещать не будем. Для in-ot/ref наверное надо освободить и распределить память? CORBA получится?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Некроссплатформенность маловероятна (c) Sheridan
...трава никак не влияет, разве что срывает покровы барьеров... (с) мыщъх
Re[6]: Cpp-Object
От: Pavel Chikulaev Россия  
Дата: 19.05.06 15:34
Оценка:
Здравствуйте, olexandr, Вы писали:

__>>Без документации нельзя узнать.


O>По прототипу?

Что делает эта функция?
int * f(int *);


И что делать с обоими указателями? Удалять или нет?
Re[3]: Cpp-Object
От: Аноним  
Дата: 19.05.06 16:45
Оценка:
Вам не нравится синтаксис С++? Пишите на Java.
А то, что вы предлагаете — всего лишь уродство.
Это мое имхо.

Кстати, есть где-то пример с дефайнами на тему преведа. Может так будем программировать?

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

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


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


__>>>Одна из проблем C++ в том, что существуют так называемые примитивные типы.

__>>>Стандарное решением было ввести специализацию для примитивных типов и для остальных типов.

__>>>Для решения этих и других проблем был создан проект C++ Object.


__>>>Основные цели проекта:

__>>>
  • Создание иерархие типов. (например int32 <- value_type <- object).
    __>>>
  • Встроенная сериализация каждого типа.
    __>>>Дальнейшие цели будут добавленны мере развития библиотеки.

    G>>Зачем? Жабой заболели?

    __>Вы про Java ?
    G>>Мотивация ни в чем не убедила, кроме как в том что время свободное у вас есть.
    __>Мотивация в том, что хочется писать нормальный код.


    __>Зачем нужно писать & и * если можно без них.

    __>Почему нельзя определить семантику передачи аргументов ?
    __>Почему нужно делать разного рода извращения, чтобы работать с примитивными типами ?
    __>Почему нельзя написать код так, чтобы он работал для всего ?

    __>Из-за того, что небыло представленно решение этих и других проблем придумали обходные решения, вместо того, чтобы решить саму проблему.
  • Re[7]: Cpp-Object
    От: Centaur Россия  
    Дата: 19.05.06 16:49
    Оценка: 1 (1)
    Здравствуйте, Pavel Chikulaev, Вы писали:

    int * f(int *);


    PC>И что делать с обоими указателями? Удалять или нет?


    Если это C++, а не C, то тут довольно понятно.
    Если бы функция хотела, чтобы мы отдали ей int во владение, она бы принимала auto_ptr<int>. Раз оно не так, мы должны его убить сами. Напротив, если бы функция хотела вернуть нам int, чтобы мы его потом удалили, она бы вернула его через auto_ptr<int>. Это не так, значит, вернутый указатель не наш, и удалять его не нам
    Re[3]: Cpp-Object
    От: Аноним  
    Дата: 19.05.06 16:53
    Оценка:
    __>Это из-за кривого дизайна С++
    __>Можно в макрос обернуть, тогда наследование автоматически будет.

    Я лежу! мля...
    напиши свой язык! поглядим, что получится...
    кривой дизайн... исправитель нашелся... уморил...
    Re[7]: Cpp-Object
    От: Аноним  
    Дата: 19.05.06 16:54
    Оценка: -2 :)
    __>Но что делать если надо на С++

    выпей йаду!
    Re[3]: Cpp-Object
    От: Vain Россия google.ru
    Дата: 19.05.06 17:45
    Оценка:
    Здравствуйте, gear nuke, Вы писали:

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


    __>>>
    void f(out_int32 i)
    V>>    ^^^^^^^^^^^
    __>>>{
    __>>> i = 1;
    __>>>}

    V>>как это интересно возвращает результат?

    GN>Очевидно out_int32 — ссылка.

    ну лучше уж обернуть int в int_class и написать как
    void f(_out int_class& i) или void f(OUT int_class& i) — как в МС более-менее понятно что.

    GN>Хотя как тогда обозначается ссылка на константу?

    GN>И наличие 2х разных синтаксисов — для ссылок на POD и не-POD типы ИМХО произведёт кашу.
    ага, какая уже имеется в MSVC2005 в переписанных макрософтом хидерах сишной библиотеки и не только :P
    [In theory there is no difference between theory and practice. In
    practice there is.]
    [Даю очевидные ответы на риторические вопросы]
    Re[5]: Cpp-Object
    От: remark Россия http://www.1024cores.net/
    Дата: 19.05.06 17:59
    Оценка:
    Здравствуйте, _nn_, Вы писали:

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


    __>>>Это из-за кривого дизайна С++


    L_L>>Поясните, пожалуйста.


    __>Например я хочу функцию, которая будет принимать любой тип.

    __>На данный момент мне надо писать шаблонную функцию, а так можно заменить на нешаблонную.

    А в чём проблема? (с шаблонной функцией)



    1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
    Re[4]: Cpp-Object
    От: igna Россия  
    Дата: 19.05.06 18:11
    Оценка:
    Здравствуйте, Аноним, Вы писали:

    А>.............

    А>................................................
    А>.....................................................

    Что означает 599 справа от вашего имени?
    Re[5]: Cpp-Object
    От: MuTPu4  
    Дата: 19.05.06 23:24
    Оценка:
    Здравствуйте, _nn_, Вы писали:

    __>Например я хочу функцию, которая будет принимать любой тип.

    __>На данный момент мне надо писать шаблонную функцию, а так можно заменить на нешаблонную.
    void f( void * );

    Re[6]: Cpp-Object
    От: Воронков Василий Россия  
    Дата: 19.05.06 23:35
    Оценка:
    Здравствуйте, MuTPu4, Вы писали:

    MTP>
    MTP>void f( void * );
    MTP>

    MTP>

    Это уже не любой тип.
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    Re: Cpp-Object
    От: MaximE Великобритания  
    Дата: 20.05.06 06:09
    Оценка:
    _nn_ wrote:

    > Одна из проблем C++ в том, что существуют так называемые примитивные типы.


    В чем же конкретно с ними проблема?

    --
    Maxim Yegorushkin
    Posted via RSDN NNTP Server 2.0
    Re[5]: [off] anonim id
    От: gear nuke  
    Дата: 20.05.06 07:26
    Оценка:
    Здравствуйте, igna, Вы писали:

    I>Что означает 599 справа от вашего имени?


    Идентефикатор Анонимов

    Теперь видно, что Re[3]: Cpp-Object
    Автор:
    Дата: 19.05.06
    и Re[7]: Cpp-Object
    Автор:
    Дата: 19.05.06
    написаны одним человеком, а Re[7]: Cpp-Object
    Автор:
    Дата: 19.05.06
    — другим. (хотя верить этим цифрам на 100% нельзя)
    People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
    Re[7]: Cpp-Object
    От: MuTPu4  
    Дата: 20.05.06 08:03
    Оценка:
    Здравствуйте, Воронков Василий, Вы писали:

    ВВ>Это уже не любой тип.

    То есть все проблемы от того, что я не могу передать в функцию с такой сомнительной сигнатурой rvalue или о чем идет речь?

    P.S. Вообще, было бы интересно посмотерть на реализацию функции, "которая будет принимать любой тип".
    Re[5]: Cpp-Object
    От: _nn_  
    Дата: 20.05.06 14:16
    Оценка:
    Здравствуйте, olexandr, Вы писали:

    O>А, добавить in/out/ref/ptr/... классы для каждого типа? И не забыть в функциях для каждого out объекта распределить память, даже если значение в него в случае ошибки мы помещать не будем. Для in-ot/ref наверное надо освободить и распределить память? CORBA получится?


    Никаких лишнийх выделения памяти нет.
    2 следущие функции равнозначны:
    void f(in<int> i) { cout << i; }
    void f(int i) { cout << i; }
    ... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
    http://rsdn.nemerleweb.com
    http://nemerleweb.com
    Re[6]: Cpp-Object
    От: _nn_  
    Дата: 20.05.06 14:20
    Оценка:
    Здравствуйте, remark, Вы писали:

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


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


    __>>>>Это из-за кривого дизайна С++


    L_L>>>Поясните, пожалуйста.


    __>>Например я хочу функцию, которая будет принимать любой тип.

    __>>На данный момент мне надо писать шаблонную функцию, а так можно заменить на нешаблонную.

    R>А в чём проблема? (с шаблонной функцией)


    Ее не сделать виртуальной.
    Нельзя вызывает ее из dll.

    R>
    http://rsdn.nemerleweb.com
    http://nemerleweb.com
    Re: C++ Object продолжение
    От: _nn_  
    Дата: 20.05.06 14:54
    Оценка:
    Спасибо всем за комментарии.

    Итак, что будет в библиотеке:
    1. Возможность рефлексия для любого типа (требуется определение структуры типа).
    2. Возможность использовать рефлексию как во времени компиляции, так и во времени выполнения.
    3. Сериализация и десериализация за счет рефлексии.
    4. Унифицированная передача аргументов.

    Требования:
    1. Минимум оверхеда.
    2. При использовании рефлексии времени компиляции код должен приближаться к прямому обращению с объектом.

    Примеры:

    1. Рефлексия:
  • Во времени выполнения:
    object o;
    o.invoke("f", 1); // o.f(1);

  • Во времени компиляции:
    object o;
    o.invoke<f_tag>(1); // o.f(1);

  • object — Некий аналог boost::any с поддержкой рефлексии:
    a x;
    object o(x);
    
    o.invoke<f_tag>(1); // x.f(1);
    
    a z = object_cast<a>(o);


    2. Унифицированная передача аргументов:
  • in:
    void f(in<int> x); // <=> void f(int x);

  • out:
    void f(out<int> x); // <=> void f(int& x);

  • inout:
    void f(inout<int> x); // <=> void f(int& x);

  • ref:
    void f(out<int> x) // <=> void f(int& x);
    {
     ref<int> y(x); // int& y(x);
    }

  • cref:
    void f(in<int> x) // <=> void f(int x);
    {
     cref<int> y(x); // int const& y(x);
    }


    Код выше дан в качестве примера, это не окончательный вид.
  • http://rsdn.nemerleweb.com
    http://nemerleweb.com
    Подождите ...
    Wait...
    Пока на собственное сообщение не было ответов, его можно удалить.