Здравствуйте, _nn_, Вы писали:
__>Здравствуйте, srggal, Вы писали:
S>>Быть может managed C++ спасёт Отца русской демократии ? S>>(просто предположение)
__>Тогда уже C#
Здравствуйте, srggal, Вы писали:
S>Здравствуйте, _nn_, Вы писали:
__>>Здравствуйте, srggal, Вы писали:
S>>>Быть может managed C++ спасёт Отца русской демократии ? S>>>(просто предположение)
__>>Тогда уже C#
S>Я, в принципе к тому клоню
S>Но Вы же сами написали: S>
S>Но что делать если надо на С++
Вы предложили MC++, я говорю, что лучше уже C#.
Но пока надо С++ обычный
Здравствуйте, _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
...трава никак не влияет, разве что срывает покровы барьеров... (с) мыщъх
V>>>как это интересно возвращает результат?
GN>>Очевидно out_int32 — ссылка.
GN>>Хотя как тогда обозначается ссылка на константу? GN>>И наличие 2х разных синтаксисов — для ссылок на POD и не-POD типы ИМХО произведёт кашу. __>Наоборот, нужен один синтаксис на все.
__>Тут есть несколько вариантов: __>1. __>
__>Насчет ссылки и ссылки на константу можно добавить: 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
...трава никак не влияет, разве что срывает покровы барьеров... (с) мыщъх
Здравствуйте, 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>>Мотивация ни в чем не убедила, кроме как в том что время свободное у вас есть. __>Мотивация в том, что хочется писать нормальный код.
__>Зачем нужно писать & и * если можно без них. __>Почему нельзя определить семантику передачи аргументов ? __>Почему нужно делать разного рода извращения, чтобы работать с примитивными типами ? __>Почему нельзя написать код так, чтобы он работал для всего ?
__>Из-за того, что небыло представленно решение этих и других проблем придумали обходные решения, вместо того, чтобы решить саму проблему.
PC>И что делать с обоими указателями? Удалять или нет?
Если это C++, а не C, то тут довольно понятно.
Если бы функция хотела, чтобы мы отдали ей int во владение, она бы принимала auto_ptr<int>. Раз оно не так, мы должны его убить сами. Напротив, если бы функция хотела вернуть нам int, чтобы мы его потом удалили, она бы вернула его через auto_ptr<int>. Это не так, значит, вернутый указатель не наш, и удалять его не нам
Re[3]: Cpp-Object
От:
Аноним
Дата:
19.05.06 16:53
Оценка:
__>Это из-за кривого дизайна С++ __>Можно в макрос обернуть, тогда наследование автоматически будет.
Я лежу! мля...
напиши свой язык! поглядим, что получится...
кривой дизайн... исправитель нашелся... уморил...
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.]
[Даю очевидные ответы на риторические вопросы]
Здравствуйте, _nn_, Вы писали:
__>Здравствуйте, Lorenzo_LAMAS, Вы писали:
__>>>Это из-за кривого дизайна С++
L_L>>Поясните, пожалуйста.
__>Например я хочу функцию, которая будет принимать любой тип. __>На данный момент мне надо писать шаблонную функцию, а так можно заменить на нешаблонную.
Здравствуйте, _nn_, Вы писали:
__>Например я хочу функцию, которая будет принимать любой тип. __>На данный момент мне надо писать шаблонную функцию, а так можно заменить на нешаблонную.
— другим. (хотя верить этим цифрам на 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
Здравствуйте, Воронков Василий, Вы писали:
ВВ>Это уже не любой тип.
То есть все проблемы от того, что я не могу передать в функцию с такой сомнительной сигнатурой rvalue или о чем идет речь?
P.S. Вообще, было бы интересно посмотерть на реализацию функции, "которая будет принимать любой тип".
Здравствуйте, olexandr, Вы писали:
O>А, добавить in/out/ref/ptr/... классы для каждого типа? И не забыть в функциях для каждого out объекта распределить память, даже если значение в него в случае ошибки мы помещать не будем. Для in-ot/ref наверное надо освободить и распределить память? CORBA получится?
Никаких лишнийх выделения памяти нет.
2 следущие функции равнозначны:
Здравствуйте, remark, Вы писали:
R>Здравствуйте, _nn_, Вы писали:
__>>Здравствуйте, Lorenzo_LAMAS, Вы писали:
__>>>>Это из-за кривого дизайна С++
L_L>>>Поясните, пожалуйста.
__>>Например я хочу функцию, которая будет принимать любой тип. __>>На данный момент мне надо писать шаблонную функцию, а так можно заменить на нешаблонную.
R>А в чём проблема? (с шаблонной функцией)
Ее не сделать виртуальной.
Нельзя вызывает ее из dll.
R>
Итак, что будет в библиотеке:
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);