Здравствуйте, Cyberax, Вы писали:
C>Найти твою цитату про память, которая сейчас очень дешовая?
C>Увеличение размера символа в два раза плохо скажется только на
Хе-хе. Это только в таких кривых недопроектированных сисьемах как Java или .Net увеличение символа в два раза на всём скажется плохо В нормальной системе (ST) строка может быть такой, какая нужна для хранения букв — одно, 2-х, 4-х байтовой.
Здравствуйте, VladD2, Вы писали:
FR>>Я что-то похоже пропустил, покажи пожалуйста где это они слили?
VD>У тебя поиск неработает?
Работает, но по нему только выходит только то что С++ уступает N только в compile time, а в run time наоборот
N уступает C++, так что слово слили здесь неуместно.
Re[3]: Tcl как обоснование ненужности поддержки компонентнос
Здравствуйте, VladD2, Вы писали:
FR>>Классно, так извратить название темы. Влад тебе уже пора в политику идти.
VD>Скажи спосибо себе. Ты попер обсуждать tcl там где он был вообще не приший рукав.
Надо же немного разнобразить пейзаж
Re[34]: Tcl как обоснование ненужности поддержки компонентно
Здравствуйте, IT, Вы писали:
IT>Всё вместе это говорит о необходимости подобных фич. Но, в принципе, как говорит Влад, можно продолжать жрать кактус и доказывать, что это единственно правильный путь.
Кактусы приносят человеку весьма разнообразную пользу. Многие виды доставляют съедобные и некоторые — даже довольно вкусные плоды. Под тропиками ягоды Cereus triangularis, имеющие величину кулака, предпочитаются даже всяким другим фруктам, поэтому это растение часто возделывается. Также славятся своими весьма сладкими ягодами Cereus giganteus и Cereus Thurberi, растущие в Мексике, Техасе и Аризоне. В некоторых местностях Мексики обильно разводят Cereus pruinosus. Почти каждая хижина в этих местах окружена зарослями этого кактуса, называемого также Cereus edulis. В южной Европе (в Италии, Испании, Португалии) и в особенности в Сицилии плоды Opuntia Ficus Indica — индийской смоковницы — составляют главную пищу бедных классов народа. Сок этих плодов (индийской фиги) имеет свойство окрашивать мочу в красный цвет, не причиняя, однако, никакого вреда для здоровья; только неумеренное употребление этих плодов вызывает холеровидные заболевания. В Мексике сладко-кислые и ароматичные стебли некоторых видов Echinocactus употребляются как компот. Мясистые, богатые водою ветви Opuntia даются в Техасе и Мексике скоту для утоления жажды, для этой же цели служат стебли Echinocactus, в особенности в сухое время года.
Мне особенно понравилось про неумеренное потребеление
Re[28]: Tcl как обоснование ненужности поддержки компонентно
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, alexeiz, Вы писали:
A>>Можно поговорить о практической полезности этой фичи в C++. Вот ты как её использовал, например?
IT>Началось всё с #import. Там без свойств никак. Поначалу было странно, потом привык, понравилось. Подсмотрел реализацию и начал в своём коде использовать.
Конечно, #import можно делать и без генерации свойств и получать на выходе get/put функции. Но если хочешь свойства, то, наверное, раширение языка (__declspec(property)) было необходимо, потому что все идеи реализовать свойства для C++ средствами стандартного C++ имеют space overhead. А это для описания COM интерфейсов не приемлимо.
Один из распостранённых методов эмулировать свойства такой:
#define DECLARE_PROP_CLASS( aclass ) typedef aclass __this_class__
#define ALL_P( type ,name )\
class prop_func_##name; \
friend class prop_func_##name; \
class prop_func_##name{public: \
__this_class__& MyClass() \
{ char* p = (char*)this - offsetof(__this_class__,name) ; \
return *((__this_class__*)p) ; \
} \
operator type(){return MyClass().Get##name();} \
type operator =(type val){MyClass().Put##name(val);return val;} \
} name
#define GET_P( type ,name )\
class prop_func_##name; \
friend class prop_func_##name; \
class prop_func_##name{public: \
__this_class__& MyClass() \
{ char* p = (char*)this - offsetof(__this_class__,name) ; \
return *((__this_class__*)p) ; \
} \
operator type(){return MyClass().Get##name();} \
} name
#define PUT_P( type ,name )\
class prop_func_##name; \
friend class prop_func_##name; \
class prop_func_##name{public: \
__this_class__& MyClass() \
{ char* p = (char*)this - offsetof(__this_class__,name) ; \
return *((__this_class__*)p) ; \
} \
type operator =(type val){MyClass().Put##name(val);return val;} \
} name
// exampleclass Person {
DECLARE_PROP_CLASS(Person);
public:
ALL_P(int, Age); // get/set property
// empty object takes 1 byteprivate:
int GetAge() const {
return age_;
}
void PutAge(int v) {
age_ = v;
}
private:
int age_;
};
int main() {
Person p;
p.Age = 44; // worksint a = p.Age;
cout << p.Age; // doesn't work
cout << (int) p.Age; // works
cout << sizeof(Person); // == 8 (1 byte + alignment + sizeof(int))
}
Но несмотря на (некоторую) трудность в описании свойств средствами языка в C++ свойства навряд ли будут включены. Основная причина, как мне кажется, что они там просто не прижились, и использование свойств не является распостранённой практикой в C++, в отличие от компонентно-ориентированных языков (VB, C#, Delphi, и в Java бы ввели, если бы Sun не упёрся рогом), где свойства очень даже прижились, и широко используются.
VD>Если ты еще поглядишь на то как они время измеряют, что тестируют, и узнашь, что там и алгоритмы разные, то поймешь, что это все развод и лам.
Угу, еще и запускать не умеют некторые вещи
VD>Эту ссылку здесь уже сто раз обсасывали, но ее даюет и дают. Перемеренный первый попавшийся тест (Аккерман) показал, что тот же Немерел задвинул VC в лучем виде. А у них на Моно и в добавок с измерением джит комплияции и инициализации рантайма получается совсем по другому.
Нет не задвинул. У меня VC (с правильными ключиками) быстрее.
Re: [Benchmark] Еще раз про Аккерман на разных языках
АХ>Итак какие можно сделать выводы: АХ> Компиляторы умеющие раскручивать хвостовую рекурсию выигрывают в этом тесте. АХ> Очевидно, это сделали MS C++, Nemerle и GCC.
C++ еще умеет агрессивный инлайнинг, если например в VC добавить
#pragma inline_recursion(on) то будет примерно в два раза быстрее.
Re[51]: Синтаксический сахар или C++ vs. Nemerle :)
Andrei N.Sobchuck wrote: > Хе-хе. Это только в таких кривых недопроектированных сисьемах как Java > или .Net увеличение символа в два раза на всём скажется плохо В > нормальной системе (ST) строка может быть такой, какая нужна для > хранения букв — одно, 2-х, 4-х байтовой.
В С++ тоже
typedef std::basic_string<char> ansi_string;
typedef std::basic_string<unsigned short> ucs2_string;
typedef std::basic_string<unsigned int> utf32_string;
typedef std::basic_string<bool> strange_string; //И такое возможно :)
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[30]: Tcl как обоснование ненужности поддержки компонентно
Здравствуйте, VladD2, Вы писали:
VD>Лямбда — это возможность создать анонимный метод. А чтобы на нее можно былопередать ссылку нужен функциональный стиль. Вот делегат это их разновидность. Не лучшее решение, на самом деле, но уж точно лучше его отсуствия или указателей на члены в С++.
boost::function отлично выполняет эту функцию.
void foo(int);
void bar(char);
struct functor : std::unary_function<int, void> {...};
struct someclass { void foo(int); };
function<void (int)> f;
// straight forward call
f = &foo;
f(1); // -> foo(1)
// parameter types don't have to match
f = &bar;
f(2); // -> bar(2)
// lambda tricks
f = (cout << _1);
f(10); // -> cout << 10
// functors
f = functor();
f(10); // -> functor().operator(10);
// member functions
someclass var;
f = (&var ->* &someclass::foo);
f(10); // -> var.foo(10)
Re[27]: Tcl как обоснование ненужности поддержки компонентно
Здравствуйте, VladD2, Вы писали:
K>>Стандарты то они конечно стандарты... но то что ты перечистил... ты почему-то видимо свято уверен, что жизни за пределами Windows не существует
VD>Батенька, ды вы совсем дальше своего носа не видите. (с) Дотнет давно в виде Моно живет под Линуксом. Ява на таком количестве платформ, что С++ позавидует. Тут дело в том, что лично нам эти платформы просто не нужны. Ну, не занимаемся мы дешевым хостингом, где Линукс король песочнецы.
Сынок, хостингом я тоже не занимаюсь... ни дорогим, ни дешёвым
А под Solaris или HP-UX Mono есть?
VladD2, задачи бывают разные... не только хостинг... и не только под винды... я очень удивлюсь если ты с этим не согласишся
Проект в котором в настояшее время я участвую, живет на Win, Linux, Sun, HP, AIX. При разработке используеться С++, TCL, Java...
Вот обьясни мне как тот же .NET, например, ярым сторонником которого ты являешься, поможет мне в решении/выполнении требований клиентов на данных платформах и заменит все вышеуказанные языки/средства. Я вообще не являюсь "поклонником" какого либо языка или платформы, но допустим мне очень захотелось расстаться с "застарелыми привычками и фобиями" и я решил перейти на .NET
В принципе я совершенно не против даже использовать какую-нибудь такую штуку... это сильно упростило бы мне жисть, не факт что клиентам, но мне наверное... но...
На каких платформах доступна полная функциональнось .NET? ... Сегодня?
PS. VD>Ява на таком количестве платформ, что С++ позавидует.
Ну и конечно VM для этих платформ, написаны на самой же Java... или на нативном ассемблере?... или неужели на NET?
VD>Тут дело в том, что лично нам эти платформы просто не нужны.
Ключевое слово выделено. В том то все и дело.
Но это совершенно не значит что всем не нужны.
Будем дальше разговаривать о "носах" и "зрении" ...
... или может какнить консруктивно пообсуждаем? Если конечно ты это умеешь делать
Re[32]: Tcl как обоснование ненужности поддержки компонентно
VladD2 wrote: > C>Свойства — это не более чем простенький синтаксический сахар. > Да, тысячу раз да! Почти все конструкции современных ЯП — это > синтаксический сахар.
Далеко не все.
> Иначе нельзя было бы писать на Лисп-е или > ассемблере. Всем кто хочет и дальше жрать кактус даже не закусывая > сахаром мой большой привет. Только не нащдо пропагандировать нищету и > убожество. ОК?
На Лиспе как раз сахаром при желании можно обожраться по полной.
> C> Причем сахар с солью (как взять ссылку на свойство?). > Ты еще ссылку на конструктор возьми или на пространство имен.
Понимаешь, свойство выглядит и ведет себя как член класса. На член
класса я могу взять ссылку (в С++).
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[30]: Tcl как обоснование ненужности поддержки компонентно
IT wrote: > ГВ>Есть ещё raw (кажется, не помню на вскидку модификатор). Прекрасно > импортирует COM-интерфейсы без пропертей. > #import мне понравился больше. Поддержка свойсв + обработка ошибок с > человеческим лицом.
#import — это решение аля-MS. Правильное С++ное решение — это Comet, он
тоже генерирует обложки по TLB, причем обходится без свойств и __uuidof.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[32]: Tcl как обоснование ненужности поддержки компонентно
IT wrote: >> > Т.е. ты решаешь за меня нужны мне свойсва или не нужны? > C>Ну должен же кто-то решать? > Я за себя уж как-нибудь сам.
В С++ с этим просто — плюешь на стандартную строку и используешь вместо
нее свою любимую. Какие проблемы?
> C>Свойства — это не более чем простенький синтаксический сахар. Причем > сахар с солью (как взять ссылку на свойство?). > Зачем тебе ссылка на свойство?
Для передачи в качестве out-параметра, например.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[32]: Tcl как обоснование ненужности поддержки компонентно
Здравствуйте, IT, Вы писали:
K>>PS. Решение абстрактых проблем это конечно интересно и увлекательно... только за решения таких проблем платят исключительно абстрактные деньги... котороый можно потратить на все что угодно... чисто абстрактно конечно
IT>Практика, друг мой, только практика, циничная практика.
Дык, я к практике и пытаюсь разговор повернуть... Ибо практика ни в какую теорию типа "это хорошо, а это отстой" не укладываеться совершено.
Вот давай практический пример: ты упомянул, что при выполнении своих конрактов, ты говоришь "эта лопата подходит, а эта нет".
Но ты никак не упомянул ДЛЯ ЧЕГО подходит.
Я совершенно с тобой согласен, что для каждого инструмента, есть свой тип работ, что удобно делать лопатой, то не удобно экскаватором и наоборот соответственно.
Раз уж мы в "философии" до давай филосовствовать... чуть шире чем просто "о языках" ибо они не ввакуме живут
Разве твой выбор вегда зависит только от того, что "тебе удобнее"?
Вот тебе допустим удобнее под Win и на .NET... а у клиента все под Solaris и на С++... история началась не с появления .NET... и сушествует масса систем, которые появились задолго до рождения .NET и продолжают успешно развиваться и поддерживаться...
И ты хочешь сказать что ты прийдешь и так авторитетно заявишь "мол, выбрасывайте все, будем ставить Win c .NETом" ?
Я конечно могу ошибаться, но что-то мне подсказывает, что ты не будешь этого делать... ты либо откажешься совсем, либо будешь таки делать на С++... тут конечно все от возможного дохода зависит
Есть ещё другой момент...
Ну нет возможности использовать .NET. Хорошо... можно взять Java... но вот проблема... есть подобная программа у конкурента и она работает на порядок быстрее, чем твоя написанная на Java... Это может конечно не сильный аргумент, например. можно сказать, что для пользователя без разницы выполняеться операция за 2 секуды или за 1... а если это минуты... или часы?
... более того, решение о покупке, если это не "CD Ejector", принимает не пользователь, а его начальство, а вот тут уже для убеждения идут в ход все аргументы, какие только возможно...
Ты конечно можешь сказать клиенту "обновите железо", но клиенту совершенно непонятно, зачем если он может этого не делать и купить у конкурента... особенно если речь идет, не о одном компе... ты либо уйдешь и оставишь клиента конкуренту... либо возьмешь в руки С++...
Дык к чему я это... а это я к тому, что выбор инструмента (языка) далеко не всегда зависит исключительно от "желания, фобий и привычек" разработчика...
А просто брать и сравнивать "на каком языке удобней форму накатать"... ну я даж незнаю, че сказать... хотя, надо отдать должное, очень увлекательно читать такую "философскую дискусию"
Re[33]: Tcl как обоснование ненужности поддержки компонентно
Здравствуйте, Cyberax, Вы писали:
C>В С++ с этим просто — плюешь на стандартную строку и используешь вместо C>нее свою любимую. Какие проблемы?
В .NET с этим тоже просто. Но либо для такого шага были серьезные причины, либо ты идиот.
>> Зачем тебе ссылка на свойство? C>Для передачи в качестве out-параметра, например.
В Nemerle с этим кстати проблем нет. Только вместо out параметра нужно передавать функцию-setter.
using Nemerle.Utility;
[Record]
class PropTest
{
[Accessor(flags = WantSetter)]
private mutable n : int;
}
def changeProp(setter : int->void)
{
setter(10)
}
def p = PropTest(4);
changeProp(x.set_N);
В C# с этим чуть сложнее, но можно создать делегат по имени. Или использовать reflection.
Re[34]: Tcl как обоснование ненужности поддержки компонентно
Vermicious Knid wrote: > C>В С++ с этим просто — плюешь на стандартную строку и используешь вместо > C>нее свою любимую. Какие проблемы? > В .NET с этим тоже просто.
Агащаз. Как, например, со своими строками использовать регэкспы?
> Но либо для такого шага были серьезные причины, либо ты идиот.
Я уже привел пример с UTF-32.
> C>Для передачи в качестве out-параметра, например. > В Nemerle с этим кстати проблем нет. Только вместо out параметра нужно > передавать функцию-setter.
И как его передавать функциям, которые требуют out-параметр (и находятся
в скомпиленом коде)?
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[33]: Tcl как обоснование ненужности поддержки компонентно
Здравствуйте, Cyberax, Вы писали:
C>В С++ с этим просто — плюешь на стандартную строку и используешь вместо нее свою любимую. Какие проблемы?
Почему тебе не приходит в голову переопределять в C++, например, тип double?
>> Зачем тебе ссылка на свойство? C>Для передачи в качестве out-параметра, например.
out-параметр — это серьёзный звоночек, говоряший о кривизне архитектуры.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.