Re[50]: Синтаксический сахар или C++ vs. Nemerle :)
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 05.06.06 07:24
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Найти твою цитату про память, которая сейчас очень дешовая?


C>Увеличение размера символа в два раза плохо скажется только на


Хе-хе. Это только в таких кривых недопроектированных сисьемах как Java или .Net увеличение символа в два раза на всём скажется плохо В нормальной системе (ST) строка может быть такой, какая нужна для хранения букв — одно, 2-х, 4-х байтовой.
http://www.smalltalk.ru | << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[30]: Tcl как обоснование ненужности поддержки компонентно
От: FR  
Дата: 05.06.06 07:48
Оценка: +1
Здравствуйте, VladD2, Вы писали:

FR>>Я что-то похоже пропустил, покажи пожалуйста где это они слили?


VD>У тебя поиск неработает?


Работает, но по нему только выходит только то что С++ уступает N только в compile time, а в run time наоборот
N уступает C++, так что слово слили здесь неуместно.
Re[3]: Tcl как обоснование ненужности поддержки компонентнос
От: FR  
Дата: 05.06.06 07:48
Оценка:
Здравствуйте, VladD2, Вы писали:

FR>>Классно, так извратить название темы. Влад тебе уже пора в политику идти.


VD>Скажи спосибо себе. Ты попер обсуждать tcl там где он был вообще не приший рукав.


Надо же немного разнобразить пейзаж
Re[34]: Tcl как обоснование ненужности поддержки компонентно
От: FR  
Дата: 05.06.06 07:48
Оценка: -1
Здравствуйте, VladD2, Вы писали:

C>>А еще есть языки, обходящиеся без типов вообще. И что?


VD>Совсем? Назови хоть один.


Forth
Re[34]: Tcl как обоснование ненужности поддержки компонентно
От: FR  
Дата: 05.06.06 07:52
Оценка: 17 (2) :)))
Здравствуйте, IT, Вы писали:

IT>Всё вместе это говорит о необходимости подобных фич. Но, в принципе, как говорит Влад, можно продолжать жрать кактус и доказывать, что это единственно правильный путь.


Кактусы приносят человеку весьма разнообразную пользу. Многие виды доставляют съедобные и некоторые — даже довольно вкусные плоды. Под тропиками ягоды Cereus triangularis, имеющие величину кулака, предпочитаются даже всяким другим фруктам, поэтому это растение часто возделывается. Также славятся своими весьма сладкими ягодами Cereus giganteus и Cereus Thurberi, растущие в Мексике, Техасе и Аризоне. В некоторых местностях Мексики обильно разводят Cereus pruinosus. Почти каждая хижина в этих местах окружена зарослями этого кактуса, называемого также Cereus edulis. В южной Европе (в Италии, Испании, Португалии) и в особенности в Сицилии плоды Opuntia Ficus Indica — индийской смоковницы — составляют главную пищу бедных классов народа. Сок этих плодов (индийской фиги) имеет свойство окрашивать мочу в красный цвет, не причиняя, однако, никакого вреда для здоровья; только неумеренное употребление этих плодов вызывает холеровидные заболевания. В Мексике сладко-кислые и ароматичные стебли некоторых видов Echinocactus употребляются как компот. Мясистые, богатые водою ветви Opuntia даются в Техасе и Мексике скоту для утоления жажды, для этой же цели служат стебли Echinocactus, в особенности в сухое время года.


Мне особенно понравилось про неумеренное потребеление
Re[28]: Tcl как обоснование ненужности поддержки компонентно
От: alexeiz  
Дата: 05.06.06 07:57
Оценка:
Здравствуйте, 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

// example
class Person {
    DECLARE_PROP_CLASS(Person);

public:
    ALL_P(int, Age);  // get/set property
                      // empty object takes 1 byte

private:
    int GetAge() const {
        return age_;
    }

    void PutAge(int v) {
        age_ = v;
    }

private:
    int age_;
};

int main() {
    Person p;
    p.Age = 44;  // works
    int 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 не упёрся рогом), где свойства очень даже прижились, и широко используются.
Re[3]: О языках для численных расчетах.
От: FR  
Дата: 05.06.06 08:09
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Если ты еще поглядишь на то как они время измеряют, что тестируют, и узнашь, что там и алгоритмы разные, то поймешь, что это все развод и лам.


Угу, еще и запускать не умеют некторые вещи

VD>Эту ссылку здесь уже сто раз обсасывали, но ее даюет и дают. Перемеренный первый попавшийся тест (Аккерман) показал, что тот же Немерел задвинул VC в лучем виде. А у них на Моно и в добавок с измерением джит комплияции и инициализации рантайма получается совсем по другому.


Нет не задвинул. У меня VC (с правильными ключиками) быстрее.
Re: [Benchmark] Еще раз про Аккерман на разных языках
От: FR  
Дата: 05.06.06 08:09
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:


АХ>Итак какие можно сделать выводы:

АХ> Компиляторы умеющие раскручивать хвостовую рекурсию выигрывают в этом тесте.
АХ> Очевидно, это сделали MS C++, Nemerle и GCC.

C++ еще умеет агрессивный инлайнинг, если например в VC добавить
#pragma inline_recursion(on) то будет примерно в два раза быстрее.
Re[51]: Синтаксический сахар или C++ vs. Nemerle :)
От: Cyberax Марс  
Дата: 05.06.06 08:09
Оценка: 3 (1)
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 как обоснование ненужности поддержки компонентно
От: alexeiz  
Дата: 05.06.06 08:10
Оценка:
Здравствуйте, 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 как обоснование ненужности поддержки компонентно
От: Left2 Украина  
Дата: 05.06.06 08:12
Оценка:
VD>Сори, приведи подобные кривые мапинги для Явы, плиз.

Отвечу в твоём же духе — а как я тебе буду приводить эти мэппинги для языка которого я не знаю и вжисть на нём двух строчек не написал?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[27]: Tcl как обоснование ненужности поддержки компонентно
От: Left2 Украина  
Дата: 05.06.06 08:12
Оценка: 19 (2)
A>Я с Symbian'ом не знаком. Интересно узнать, что именно.

Вот очень хорошая статья на эту тему
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[32]: Tcl как обоснование ненужности поддержки компонентно
От: kedik  
Дата: 05.06.06 08:30
Оценка:
Здравствуйте, 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 как обоснование ненужности поддержки компонентно
От: Cyberax Марс  
Дата: 05.06.06 08:58
Оценка:
VladD2 wrote:
> C>Свойства — это не более чем простенький синтаксический сахар.
> Да, тысячу раз да! Почти все конструкции современных ЯП — это
> синтаксический сахар.
Далеко не все.

> Иначе нельзя было бы писать на Лисп-е или

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

> C> Причем сахар с солью (как взять ссылку на свойство?).

> Ты еще ссылку на конструктор возьми или на пространство имен.
Понимаешь, свойство выглядит и ведет себя как член класса. На член
класса я могу взять ссылку (в С++).
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[30]: Tcl как обоснование ненужности поддержки компонентно
От: Cyberax Марс  
Дата: 05.06.06 09:34
Оценка: +1
IT wrote:
> ГВ>Есть ещё raw (кажется, не помню на вскидку модификатор). Прекрасно
> импортирует COM-интерфейсы без пропертей.
> #import мне понравился больше. Поддержка свойсв + обработка ошибок с
> человеческим лицом.
#import — это решение аля-MS. Правильное С++ное решение — это Comet, он
тоже генерирует обложки по TLB, причем обходится без свойств и __uuidof.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[32]: Tcl как обоснование ненужности поддержки компонентно
От: Cyberax Марс  
Дата: 05.06.06 09:37
Оценка:
IT wrote:
>> > Т.е. ты решаешь за меня нужны мне свойсва или не нужны?
> C>Ну должен же кто-то решать?
> Я за себя уж как-нибудь сам.
В С++ с этим просто — плюешь на стандартную строку и используешь вместо
нее свою любимую. Какие проблемы?

> C>Свойства — это не более чем простенький синтаксический сахар. Причем

> сахар с солью (как взять ссылку на свойство?).
> Зачем тебе ссылка на свойство?
Для передачи в качестве out-параметра, например.
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[32]: Tcl как обоснование ненужности поддержки компонентно
От: kedik  
Дата: 05.06.06 10:05
Оценка: +1
Здравствуйте, IT, Вы писали:

K>>PS. Решение абстрактых проблем это конечно интересно и увлекательно... только за решения таких проблем платят исключительно абстрактные деньги... котороый можно потратить на все что угодно... чисто абстрактно конечно


IT>Практика, друг мой, только практика, циничная практика.


Дык, я к практике и пытаюсь разговор повернуть... Ибо практика ни в какую теорию типа "это хорошо, а это отстой" не укладываеться совершено.

Вот давай практический пример: ты упомянул, что при выполнении своих конрактов, ты говоришь "эта лопата подходит, а эта нет".
Но ты никак не упомянул ДЛЯ ЧЕГО подходит.
Я совершенно с тобой согласен, что для каждого инструмента, есть свой тип работ, что удобно делать лопатой, то не удобно экскаватором и наоборот соответственно.

Раз уж мы в "философии" до давай филосовствовать... чуть шире чем просто "о языках" ибо они не ввакуме живут

Разве твой выбор вегда зависит только от того, что "тебе удобнее"?
Вот тебе допустим удобнее под Win и на .NET... а у клиента все под Solaris и на С++... история началась не с появления .NET... и сушествует масса систем, которые появились задолго до рождения .NET и продолжают успешно развиваться и поддерживаться...

И ты хочешь сказать что ты прийдешь и так авторитетно заявишь "мол, выбрасывайте все, будем ставить Win c .NETом" ?
Я конечно могу ошибаться, но что-то мне подсказывает, что ты не будешь этого делать... ты либо откажешься совсем, либо будешь таки делать на С++... тут конечно все от возможного дохода зависит

Есть ещё другой момент...
Ну нет возможности использовать .NET. Хорошо... можно взять Java... но вот проблема... есть подобная программа у конкурента и она работает на порядок быстрее, чем твоя написанная на Java... Это может конечно не сильный аргумент, например. можно сказать, что для пользователя без разницы выполняеться операция за 2 секуды или за 1... а если это минуты... или часы?
... более того, решение о покупке, если это не "CD Ejector", принимает не пользователь, а его начальство, а вот тут уже для убеждения идут в ход все аргументы, какие только возможно...
Ты конечно можешь сказать клиенту "обновите железо", но клиенту совершенно непонятно, зачем если он может этого не делать и купить у конкурента... особенно если речь идет, не о одном компе... ты либо уйдешь и оставишь клиента конкуренту... либо возьмешь в руки С++...

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

А просто брать и сравнивать "на каком языке удобней форму накатать"... ну я даж незнаю, че сказать... хотя, надо отдать должное, очень увлекательно читать такую "философскую дискусию"
Re[33]: Tcl как обоснование ненужности поддержки компонентно
От: Vermicious Knid  
Дата: 05.06.06 10:11
Оценка: 51 (2)
Здравствуйте, 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 как обоснование ненужности поддержки компонентно
От: Cyberax Марс  
Дата: 05.06.06 11:19
Оценка:
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 как обоснование ненужности поддержки компонентно
От: IT Россия linq2db.com
Дата: 05.06.06 13:01
Оценка: +1
Здравствуйте, Cyberax, Вы писали:

C>В С++ с этим просто — плюешь на стандартную строку и используешь вместо нее свою любимую. Какие проблемы?


Почему тебе не приходит в голову переопределять в C++, например, тип double?

>> Зачем тебе ссылка на свойство?

C>Для передачи в качестве out-параметра, например.

out-параметр — это серьёзный звоночек, говоряший о кривизне архитектуры.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.