Re[11]: CLI/C++
От: IT Россия linq2db.com
Дата: 03.01.04 07:36
Оценка: 109 (9)
Здравствуйте, WolfHound, Вы писали:

WH> Хоть бы 3 минуты подумал почему это сделано. См ниже.


При чём тут сделано? Что сделано, то сделано. Ты бы хоть на секунду задумался почему это ИМЕННО ТАК сделано, и хотя бы на две, как можно сделать иначе.

WH>Есть нативный класс SomeNativeClass создаем объект этого класса при помощи gcnew SomeNativeClass если следовать твоей логике то указатель на SomeNativeClass ВСЕГДА должен быть нативным и тот прокси который создавал gcnew должен быть проигнорирован те сразуже после создания объекта не остается ни одной живой ГЦ ссылки те даже если на объект будут продолжать ссылатся ГЦ об этом не узнает ни когда и убет обект при первой же сборке мусора не смотря на то что бъект все еще нужен.


Это всё мелочи реализации. Создание объекта и его привязка к прокси свободно может контролировать компилятор. Например в шарпе никто не знает и не ведает о боксинге, тем не менее он на каждом шагу. В MC++ есть пин-указатели, которые также контролируются компилятором. Ничего страшного, все живы и здоровы.

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


Ты не понял главного. Не надо new и gcnew. Надо только один new и всё.

WH>Уверен если немного покопатся можно еще много чего раскопать. К томуже в таком виде в котором это есть сейчас сразу видно где ГЦ, а где надо ручками следить.


Вот это меня и настораживает. Поздравляю, господа, перед вами первый в мире язык поддерживающий одновременно две модели памяти! Заводите студентов, щас мы им это быстренько на пальцах растолкуем, а потом посадим писать программы.

WH>[понты и наезды поскипаны]


О! Воспитание не прошло даром

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

WH>Если ты подумал что я тебя не понял то ты заблуждаешься. У нас есть куча объектов на которых стоит ОДИН(иногда больше но это большая редкость) комп с нашим 7х24 софтом.

Всего один? Слабак!

WH>А то что ты считаешь что я не могу додуматься до тонких клиентов это ИМХО вобще на гране оскорбления.


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

IT>>Расширяемый компилятор, AOP во всей красе, может ещё чего.

WH>Поставлю вопрос по другому что там будет такого чего не будет в C++/CLI?

Я тебе попробую ответить по-другому и немножко не на твой вопрос.

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

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

.NET привнёс ещё один элемент — атрибуты. К сожелению это мощнейшее средство находится пока в самом зародыше. А идея могла бы быть революционной, сдеалай MS ещё один маленький шажочек. А именно — дайте воможность расширять компилятор своими средствами и дополнять генерацию кода после его компиляции.

Например, наследование реализации:

class MyClass : IActivatable
{
    // ...
}


Не надо даже объявлять соответсвующие методы, компилятор всё что надо достроит сам. Конечно, тоже самое можно сделать и в C++ при помощи шаблонов и наследования. Но как насчёт разнородных классов? Правильно, множественное наследование! Ты хорошо знаешь этому цену? А так?

class MyClass : IActivatable, ISavable
{
    // ...
}


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

Ну а с этим уж совсем тоска:

class MyClass : IActivatable, ISavable, IEditable
{
    int    ID          { get; }
    string Description { get; set; }
}


Здесь я не просто хочу от компилятора добавления соответсвующих методов интерфейса, но так же реализации свойств. Да не просто так, а что бы свойства только возвращали int и string, а внутренне были представлены классами EditableInt32 и EditabelString.

А теперь я хочу, чтобы метод save открывал транзакцию и закрывал её, если не произошло никаких исключений:

[Transaction(Required)]
void Save()
{
    // ...
}


И сохранял лог, если произошло исключение неизвестного типа:

[LogException]
[Transaction(Required)]
void Save()
{
    // ...
}


Ну и проверку входных параметров делал:

[LogException]
[Transaction(Required)]
void Save([NotNull] object p)
{
    // ...
}


И эту проверку тоже не сохранял в логе:

[LogException]
[ExcludeFromLog(typeof(NullParameterException))]
[Transaction(Required)]
void Save([NotNull] object p)
{
    // ...
}


А вообще для написания Data Access Layer мне практически достаточно состыковать сигнатуры метода класса и сохранённой процедуры. Так в чём проблема:

[DataAccess]
class MyCustomerDataAccess
{
    void InsertCustomer (int ID, string Name);
    void UpdateCustomer (int ID, string Name);
    void GetCustomerByID(int ID);
}


Готово. Ах да, забыл, Name может быть null, но только при изменении:

[DataAccess]
class MyCustomerDataAccess
{
    void InsertCustomer (int ID, string Name);
    void UpdateCustomer (int ID, [Nullable] string Name);
    void GetCustomerByID(int ID);
}


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

[BusinessLayer]
class MyCustomerManager
{
    [Validate]
    void InsertCustomer(Customer c)
    {
        // ...
    }
        
    [Validate]
    void UpdateCustomer(Customer c)
    {
        // ...
    }

    void GetCustomerByID(int ID)
    {
        // ...
    }
}


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

Ко всему прочему, Александреску учил тебя правильному использованию комбинации наследования и шаблонов. В результате, некоторые на форуме (одного я точно знаю ) говорят, что ты можешь творить с этим чудеса. А теперь представь, что у тебя появилось ещё одно измерение — вся информация о типах и полный контроль над генерацией кода. Сумеешь этим распорядиться?

IT>>Ровно столько на сколько у него хватит энтузизизма

WH>Промышленного качаства компилятор это штука ооочень не простая... энтузизизма ооочень много надо.

Видишь ли в чём дело. Первый персональный компьютер был сделан умельцами в гараже. VB писался на коленках двумя студентами в самолёте. Кто знает, кем и где будет написан язык программирования намбер ван начинающегося столетия
Если нам не помогут, то мы тоже никого не пощадим.
Re[15]: CLI/C++
От: IT Россия linq2db.com
Дата: 04.01.04 05:10
Оценка: 29 (3) +3 :)
Здравствуйте, alexkro, Вы писали:

IT>>Не понял, что за гон! Ты меня ни с кем случайно не спутал? Может покажешь где это я уговоривал всех ничего не менять и писать на MC++?


A>


Понятно. Другого я и не ожидал. Тем не менее позволю себе прокоментировать твоё гневное сообщение, дабы дать пищу для размышления другим.

A>Где-ж ты был то?


Код писал, .NET изучал, сайт делал. Где мне ещё быть-то.

A>Еще не поздно вносить свои предложения в ECMA.


Может ты мне референс дашь?

A>А если серьезно, ты подумал, как можно сделать иначе — подумай еще, и еще, и код попиши, и опять подумай. За тот год, что managed extensions существуют, уже много чего передумано, перепробованно, накоплен большой опыт, который одному тебе не воспроизвести, как не старайся.


Детский сад, ей богу. Кем перепробовно, тобой, ты что ли копилка большого опыта? Windows Registry тоже большая копилка опыта, только почему-то его изобретатель сейчас за чашкой кофе признаётся друзьям, что это было большой ошибкой. Да и последние разработки MS это подтверждают, в .NET Registry не используется. Тоже будет и с этим опытом. Я знаю как принимаются решения деятелями от MS не по наслышке. Сам сейчас занят разгребанием дерьма, наваленного умниками из соседнего кубика с бэджиками MS. Так что не надо про большой опыт. Если эти гуси вам тоже рапортуют, то хреновый это опыт, копеешный. Пойдите в производство, туда где действительно люди куют софт, а не там где ваши драные архитекторы протирают штаны на митингах, и посмотрите что людям надо и что говорит их опыт.

A>Много предложений было, и ты бы о них знал, если хоть немного интересовался предметом.


Я бы интересовался, да только не имею привычки подглядвать в замочные скважены. А открытых дверей с призывом принять участие в дискуссиях по поводу доводки C++ я что-то нигде ни год, ни полтора года назад не видел.

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


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

A>Удивительно, что ты не видишь недостатков managed extensions.


Что значит не вижу? Из-за этих недостатков я перешёл на C# и перевёл на него всю разработку в департменте.

A>В большинстве случаев твое мнение: давайте оставим все как есть.


Можешь показать где я выражал такое мнение? Конкретно. А пока это остаётся ничем не обоснованным обвинением ака клеветой.

A>Это и неприятие handles и gcnew.


Опять же, что значит неприятие? Я должен пасть на колени и целовать тапочки архитекторам это придумавшим? Handles & gcnew — это вторая модель памяти в языке. С точки зрения перспектив языка — это самоубийство. Ты пробвал когда нибудь объяснить студенту первого курса что такое адресная арифметика? Пробовал? А десяти студентам пробовал? А сотне? А вот теперь задумайся над тем, что большая часть современных инженеров с трудом представляют что это такое и им это реально нафиг не надо в повседневной работе. Они фактически кодируют бизнес правила, либо рисуют интерфейс. Указатели, ссылки, GC им даром не дались. И ещё больше это не надо их менеджерам, которым нужен рабочий код, их даже не волнует найс он или не найс, если он работает, то этого достаточно. И также им не важно кто это написал, крутой русский программер на C++ за 100k/y или два индуса на VB за $35k/y каждый. Их даже больше устроит второй вариант, т.к. он дешевле и быстрее.

Современная индустрия разработки ПО уже давно перестала быть чем-то сверхестественным. Код пишут малограмотные (по десяти-двадцатилетним меркам) инженеры и успех давно уже зависит не от них, а от правильного и грамотного менеджмента, который выберет более дешёвые, более простые и в результате более эффективные средства. C++/CLI в нынешнем виде в этом ряду не стоит. И боюсь, что обычное рекламное давление MS здесь тоже слобо поможет.

A> Действительно, нужно пописать хотя бы какое-то количество кода и на managed extensions и на C++/CLI, чтобы увидеть разницу.


Вот только не надо пальцев, пожалуйста, устал я уже от них в этом топике.

A>Если ты перековал свой mindset на C# и код на C++ давно не пишешь, пользы C++ community от тебя никакой.


Я его всё ещё кую. Между прочим под надзором архитекторов в том числе и из MS. А что касается моей пользы, так C++ комьюнити, по крайней мере русской, от меня всё равно никуда не деться Если, конечно, MS не придушит C++ своими собственными руками, что у неё пока совсем не плохо получается.

A>И последнее C++/CLI делается, чтобы люди под .NET на C++ писали. From scratch, full time.


Вот в этом я сильно сомневаюсь. То что по сравнению с MC++ шаг сделан огромный спору нет. Шаблоны + дженерики это просто фантастика. Свойства (наконец-то), объявление ref, value и enum типов, всё это не вызывает нареканий. Но handles!!! Ну, боже мой, ну неужели так трудно понять, что сейчас язык конкурирует уже не только со старым необъекто-ориентированным VB, не только с Java, но с новым VB.NET, который ведёт за собой армию VB-девелоперов, и с C#, который, с одной стороны является основным языком тех кто раньше писал на C++, с другой заточен и продвигается как основной язык .NET. При чём у обоих этих языков исользуемая модель памяти практически никак не фигурирует в языковых конструкциях. Ну только unsafe режим в C#, который практически никем не используется и очень грамотно отделён синтаксическими конструкциями и даже опциями компилятора. И ты хочешь сказать что C++ с его указателями, а теперь ещё и хандлерами сможет составить здесь достойную конкуренцию? Особенно from scratch? Не смешите мои тапочки. Я бы как архитектов ни в жизнь не рекомендовал бы моему мэнеджеру C++/CLI как базовый язык разработки. Особенно, если в моём тиме есть китайцы или индусы. Максимум, что я мог бы для тебя сделать, это не запретить его использовать в подходяших местах.

A>А не просто, чтобы legacy код переносить; это уже пройденный этап. Поэтому и требования к языку другие.


Жаль только что не додумали самую малость.

A>PS: Я не буду тебе рассказывать, как на удивление удачно C++/CLI bindings вписываются в общую C++ картину.


Ну почему же? Распиши. Если уж взялся нести просвящение в массы, то не останавливайся. Расскажи нам почему пришлось вводить хандлеры и как всё остальное вписывается в C++. В качестве слушателей перед тобой практически весь продвинутый программистский рунет Если потянешь статью, не проблема, она будет в ближайшем номере RSDN Mag, единственного на сегодняшний день отечественного журнала для девелоперов.

Я не шучу и не прикалываюсь. Вперёд! Если нужна будет помощь, я отложу все дела и буду в твоём полном распоряжении.

A> Как C++/CLI уже сейчас позитивно влияет на ISO C++ Standard. А мог бы, но ты пребпочитаешь этого не видеть и не слышать.


Ну что за манера ведения беседы? Да, я действительно много распинаюсь о недостатках плюсов, кричу об их устарелости и безделии комитета. Но сам подумай, стал бы я это делать если бы мне была безразлична судьба языка, на котором я пишу ещё с Zortech C++ и с первой версии Turbo C++? Уже наверное лет 12 будет. К сожалению, кроме критики существующих попыток реанимировать мой любимый язык программирования я пока ничего сделать не могу А так хотелось бы В частности, хотелось бы посмотреть в глаза тому, кто придумал хандлеры
Если нам не помогут, то мы тоже никого не пощадим.
Re[7]: CLI/C++
От: IT Россия linq2db.com
Дата: 01.01.04 21:42
Оценка: 14 (1) +1 -2 :)
Здравствуйте, WolfHound, Вы писали:

IT>>Так зачем тебе тогда C++/CLI?

WH>Для будущих проектов

Понятно. А пока довольствуемся презентациями

IT>>И вообще, переходи на C#, как минимум в два раза быстрее получится

WH>Чем на C++/CLI? Сильно сомневаюсь.

Не сомневайся. Быстрее как минимум на год

WH>Это где? Ах да ты про SomeType^ и SomeType*? Если да то это не одно и тоже. Первый вариант это совсем не С++ указатель это больше похоже на смартпоинтер что-то типа gc_ptr<SomeType> только вынесено на уровень языка. Надеюсь не надо обьяснять что С++ указатель в отличии от смартпоинтера является итератором произвольного доступа (для смартпоинтеров это не имеет смысла).


Это всё твои домыслы. Это та же ссылка, только в хипе GC. По большому счёту это и есть вся разница. Тем не менее я как программист должен постоянно помнить в какой куче был создан объект и использовать разные козябры. При этом компилятор и без меня лучше знает что к чему. В общем, чушь. Лишний элемент, делающий из C++ динозавра типа PL/1.

IT>>Ой-ой-ой! А ты знаешь что я могу на шарпе сделать?

WH>Мне извесны возможности шарпа. Крайне не удобный язык. Средств для повторного использования кода по сравнения с С++ почти нет. Скоро появятся генерики это конечно уже коечто но подключения реализации всеравно не будет.

Ты на шарпе сколько строчек написал? Хотя бы один более менее серьёзный проект сделал? Вот сначала сделай, а потом скажешь какой язык крайне не удобный.

IT>>Все твои шаблоны по сравнению с эмитом и атрибутами — это детский сад.

WH>Ага и чтобы это работало на Win95 с 4М памяти(я конечно слегка утрировал но тачки с Win98 и 16М у наших клиентов пока не редкость начальство обещает боротся но это требует времени)... Надеюсь ты не думал что такие тачки уже совсем вымерли... Это еще что... у меня прорва ресурсов... наши соседи на асме пишут... байты считают...

Так а зачем тебе тогда C++/CLI? Он тебе тоже не поможет. У тебя прямой путь в веб-интерфейс, там ресурсов много не надо и даже такой металлолом работать будет.

IT>>А если Влад напишет R#, то я ваще молчу.

WH> Безумству храбрых... Только мне почемуто кажется что MS C++/CLI раньше выпустит. И наворотов в C++/CLI будет мнОго больше.

Что там будет понятно. Все навороты описаны в презентации.

WH>>>И я ни чего уродливого в этих нововведениях (судя по презентации) не заметил. Про МС++ я тоже самое сказать не могу.

IT>>Да ну? А конструкции типа __gc, __box и т.п. тебя не коробят? Хотя видимо после прочтения Александреску уже мало что поможет
WH>Еще раз MC++ != C++/CLI гды ты в C++/CLI видел __gc, __box...? Ы?

Выделенное разве не твоё?

WH>>>ЗЫ Дык как на счет того чтобы на МС++ примерчик повторить? Там в оригинале на C++/CLI всего 7 строк. Ы?

IT>> А ты сам то сможешь? Говорят ты такое можешь делать...
WH>Ты от ответа не уходи. Не я считаю что MC++ == C++/CLI.

А кто тебе сказал что я так считаю? Я считаю, что лучше использовать то, что уже есть и вполне прилично работает, а не ждать годами новых фич от MS.
Хотя, каждому своё
Если нам не помогут, то мы тоже никого не пощадим.
Re[12]: CLI/C++
От: alexkro  
Дата: 03.01.04 23:26
Оценка: 9 (2) :))
Здравствуйте, IT, Вы писали:

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


WH>> Хоть бы 3 минуты подумал почему это сделано. См ниже.


IT>При чём тут сделано? Что сделано, то сделано. Ты бы хоть на секунду задумался почему это ИМЕННО ТАК сделано, и хотя бы на две, как можно сделать иначе.


Где-ж ты был то? Еще не поздно вносить свои предложения в ECMA. А если серьезно, ты подумал, как можно сделать иначе — подумай еще, и еще, и код попиши, и опять подумай. За тот год, что managed extensions существуют, уже много чего передумано, перепробованно, накоплен большой опыт, который одному тебе не воспроизвести, как не старайся. Много предложений было, и ты бы о них знал, если хоть немного интересовался предметом. В том числе и то, что ты говоришь уже было сказанно, дезайнеры языка уже рассмотрели эту точку зрения и признали ее неприемлимой.

Удивительно, что ты не видишь недостатков managed extensions. В большинстве случаев твое мнение: давайте оставим все как есть. Это и неприятие handles и gcnew. Действительно, нужно пописать хотя бы какое-то количество кода и на managed extensions и на C++/CLI, чтобы увидеть разницу. Если ты перековал свой mindset на C# и код на C++ давно не пишешь, пользы C++ community от тебя никакой.

И последнее C++/CLI делается, чтобы люди под .NET на C++ писали. From scratch, full time. А не просто, чтобы legacy код переносить; это уже пройденный этап. Поэтому и требования к языку другие.

PS: Я не буду тебе рассказывать, как на удивление удачно C++/CLI bindings вписываются в общую C++ картину. Как C++/CLI уже сейчас позитивно влияет на ISO C++ Standard. А мог бы, но ты пребпочитаешь этого не видеть и не слышать.
Re[5]: CLI/C++
От: WolfHound  
Дата: 01.01.04 14:05
Оценка: 5 (1) :))
Здравствуйте, alexkro, Вы писали:

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

По сравнению с чем если с С++ то не думаю.
A>Ведь C++ — это язык с copy semantics (объекты предпочтительно передаются по значению, отсюда swap идиома, и т.д.), а .NET с его GC предпологает move semantics (все по ссылке).
Хм. У меня в программе на С++ очень много ссылочных объектов.
A>Это то, что для меня прежде всего отличало C++ от C#, например.
А по мне главное преймущество С++ перед шарпом это возможность без гемороя сделать детерминированое разрушение объектов.
A>Так как на C++/CLI еще никто ничего существенного не писал, остается только предпологать какое влияние это на него окажет.
Ни на что ссылочные объекты не повлияют. Ибо в нормальных С++ программах всеравно почти ни что не копируется.
A>Хотя возможность создавать объекты reference типов на стеке, несомненно, радует.
Нет такой возможности. Это всеголишь небольшой трюк разработчиков. На стеке создается лишь объект который дергает Dispose.
Это просто болие удобная запись такой конструкции.
C++/CLI
MessageQueue source( "server\\sourceQueue" );

C#
using( MessageQueue source = new MessageQueue( "server\\sourceQueue" ) )

Но! Это еще семечки.
C++/CLI
ref class some_class
{
    MessageQueue source;
    some(String^ path)
        :source(path)
    {}
};

C#
class some_class
    :IDisposable
{
    MessageQueue source;
    some(String path)
    {
        source=new MessageQueue(path);
    }
    void Dispose()
    {
        source->Dispose();
    }
};


Про шаблоны я вобще молчу... И не надо мне про генерики я знаю на что они способны. Да и будут они в C++/CLI.
... << RSDN@Home 1.1 beta 2 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[16]: CLI/C++
От: alexkro  
Дата: 04.01.04 09:20
Оценка: -3
Здравствуйте, IT, Вы писали:

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


A>>


IT>Понятно. Другого я и не ожидал. Тем не менее позволю себе прокоментировать твоё гневное сообщение, дабы дать пищу для размышления другим.


Не нужно приписывать мне свои эмоции. Я себе подобного рода несдержанные постинги не позволяю.

На остальное отвечать не вижу смысла.
Re[17]: CLI/C++
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.01.04 04:15
Оценка: +3
Здравствуйте, alexkro, Вы писали:

A>На остальное отвечать не вижу смысла.


А зря. Что же касается не сдержанности, то твой снобизм ее и вызвал.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: CLI/C++
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 11.01.04 12:45
Оценка: +3
Здравствуйте, WolfHound, Вы писали:

WH>Что случатся если оба интерфейса захотят реализовать пустые проперти про своему?


Ошибка компиляции.

WH>Как видишь данный код мало отличается от того что ты предлагаешь

WH>[ccode]

Честно говоря выглядит ужасно
... << RSDN@Home 1.1.2 beta 3 (mobile station) >>
AVK Blog
Re[14]: CLI/C++
От: Шахтер Интернет  
Дата: 10.01.04 19:37
Оценка: 1 (1) :)
Здравствуйте, IT, Вы писали:

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


IT>>>Например в шарпе никто не знает и не ведает о боксинге, тем не менее он на каждом шагу.

WH>>В шарпе другая сениматика языка. Там нет адресной арифметики, а из С++ ее не убрать.

IT>Боюсь что в 98% современных приложений адресная арифметика может пригодится только для прохождения интервью на работу при решении задачки типа переливания строки из пустого в порожнее.


Современные приложения далеко не ограничиваются тем, чем вы занимаетесь.

IT>Настоящие же индейцы во всю используют смарт-поинтеры и бьют по рукам любого в тиме, кто использует голые указатели. И очень этим гордятся.


Я, как настоящий истребитель индеёцев, бью по рукам всех в тиме, у кого ручонки тянуться к stl boost loki и.т.п. лабуде.

IT>Вообще же указатели в C++ — это дремучее наследие C, ничего больше.


Указатели -- один из краеугольных камней C/C++. Тот, кто не умеет ими пользоваться, просто не владеет основами языка, таким людям надо выбирать себе языки попроще, C#, например.

IT> А этому языку уже лет сорок наверное. Ещё во времена C++ люди писали программы скальпелем на перфокартах и это было круто. А во времена молодости C нормальным было программирование регистров процессора с помощью тумблеров на панели управления вычислительного устройства. К сожалению, сейчас уже не те объёмы задач и совсем другие требования к качеству софта и срокам разработки. А как известно, свойства продукта не могут превышать больше чем на порядок свойства того средства, на котором этот продукт сделан. Т.е. хочешь C++? Получите лики. У тебя в распоряжении только CRTL? Потрать время на написание своего доморощенного фреймворка.


Как показывает опыт, попытка избавиться от ликов с помощью технологических приёмов, не только приводит к чудовищной потере производительности, но и не избавляет от самих ликов.
Точно так же, использование готового оконного фреймворка позволяет более или менее быстро и беспроблемно сделать оболочку, соотвествующую идеологии этого фреймворка, но не более того.
Попробуйте, в качестве упражнения, сделать хороший текстовый редактирующий элемент, такого же класса или лучше, как в студии. Если я правильно понял, Янус использует Scintillе-у? А что, свой было влом сделать?

Тут надо понимать одну вещь. Человеческий мозг -- гораздо более мощное орудие, чем любой компилятор. Поэтому попытка избавиться от необходимости думать, спихивая свою работу тупой машине, контрпродуктивна. Это прокатывает только для определённых классов задач, где можно ограничиться несложным комбинированием простых рецептов. Это то, что можно условно назвать Макдональдс. У Джоела об этом хорошо было написано. Но существование Макдональдсов нисколько не отменяет существование дорогих и качественных ресторанов, где работают не повара, окончившие 21-дневные курсы, а истинные мастера своего дела. Кстати, куда вы водите свою любимую женщину? Неужели в Макдональдс?

По существу дискуссии.

Насколько я понимаю, MC++ был скороделкой, его вполне можно при этом использовать. Что будет с выходом новой версии C++/CLI и как оно будет выглядеть -- ещё вилами на воде писано. Мне кажеться, лучше дождаться релиза, а тогда и обсуждать, что удачно, что нет.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[11]: CLI/C++
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.01.04 04:15
Оценка: :))
Здравствуйте, WolfHound, Вы писали:

IT>>Расширяемый компилятор, AOP во всей красе, может ещё чего.

WH>Поставлю вопрос по другому что там будет такого чего не будет в C++/CLI?

Запись добровольцев...
Автор: VladD2
Дата: 23.12.03

Метапрограммирование (к топику о новом языке)
Автор: AndrewVK
Дата: 16.12.03

А не залудить ли нам свой язык для дотнета?
Автор: VladD2
Дата: 08.12.03


В общем, через неделю другую (как разгребем дела с журналами) начту мутить. Так что присоеденяйся и С++ тебе покажется детской игрушкой.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: CLI/C++
От: IT Россия linq2db.com
Дата: 09.01.04 05:40
Оценка: :))
Здравствуйте, WolfHound, Вы писали:

IT>>Например в шарпе никто не знает и не ведает о боксинге, тем не менее он на каждом шагу.

WH>В шарпе другая сениматика языка. Там нет адресной арифметики, а из С++ ее не убрать.

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

Вообще же указатели в C++ — это дремучее наследие C, ничего больше. А этому языку уже лет сорок наверное. Ещё во времена C++ люди писали программы скальпелем на перфокартах и это было круто. А во времена молодости C нормальным было программирование регистров процессора с помощью тумблеров на панели управления вычислительного устройства. К сожалению, сейчас уже не те объёмы задач и совсем другие требования к качеству софта и срокам разработки. А как известно, свойства продукта не могут превышать больше чем на порядок свойства того средства, на котором этот продукт сделан. Т.е. хочешь C++? Получите лики. У тебя в распоряжении только CRTL? Потрать время на написание своего доморощенного фреймворка.

WH>Если убрать хендлы то либо убираем адресную арифметику либо делаем явный боксинг. Ибо они пересекаются.


Там где они явно пересекаются я согласен исользовать что-то и явно. Понимабельность кода от этого только выиграет.

IT>>В MC++ есть пин-указатели, которые также контролируются компилятором. Ничего страшного, все живы и здоровы.

WH>И кто на нем (МС++) активно пишет? Проблема в том что если из пин указателя преобразовать в обычный (а именно для этого и сделаны пин указатели) обратное преобразование не возможно, а пути легаси кода не исповедимы. Да и в любом случае его придется держать пин указатель пока легаси код указатель колбасит.

Легаси не легаси — это понятие временное. Ты либо один раз поработаешь над переносом библиотеки, либо будешь писать всё с нуля. Писать одновременно и в новом и в старом моделях ты долго не будешь, только во время переходного периода. Но тем не менее, handles прибиты гвоздями в язык и их уже оттуда не вырубишь топором. Т.е. все будущие поколения разработчиков будут с недоумением спрашивать, а зачем в языке ещё какие-то '*' и '&'? И ты будешь объяснять своим потомкам

— Ну понимаешь, внучок, была когда-то в C++ такая штука как нативные указатели...
— Какие кто?
— Ну такие поинтеры на объекты...
— Объекты знаю, а поинтеры это что?
— Ну это объекты перед которыми стоит '*'...
— А...

И т.д.

IT>>Ты не понял главного. Не надо new и gcnew. Надо только один new и всё.

WH>Да все я понял. Проблема в том что есть легаси код...(чтоб он провилился) А если писать все в новои стиле то можно к черту все хендлы выкинуть... Но...

То-то и оно. Вот тут alex говорил про кодинг фром скрач. Ну чушь это полная. Раз я пишу фром скрач, то нахрен мне одновременно '*' и '^' Переходный период в жизни каждого C++ девелопера мог бы быть не более нескольких месяцев. Но не тут то было. MS нам запланировал его до пенсии.

IT>>Вот это меня и настораживает. Поздравляю, господа, перед вами первый в мире язык поддерживающий одновременно две модели памяти! Заводите студентов, щас мы им это быстренько на пальцах растолкуем, а потом посадим писать программы.

WH>А две модели памяти будут в любом случае. Просто с хендлами они явно разделены, а без них ГЦ объекты будут очень сильно походить на не ГЦ объекты.

Да и фиг с ними. Пусть они походят на что угодно, лишь бы C++ походил на C++.

IT>>AOP проповедует (если я его правильно понимаю) вынесение всего служебного кода из собственно кода. И использование для такого кода исключительно декларативных средств языка. Под служебным кодом может пониматься всё, что так или иначе выполняется исключительно для обеспечения поддержки функциональности, но не сама функциональность. Т.е. в идеале код должен содержать чистый сироп из бизнес-логики. Все остальные вспомогательные составляющие кода должны быть отжаты и вынесены в декларативную часть.

WH>Вау! Это же 2 в одном серебряная пуля + TProgrammer...

Дык. Я уже почти живу во всём этом счастье. Объём кода заметно сокращён. Но страшно не хватает поиска ошибок во время компиляции, страдает отладка и приходится писать много абстрактных классов.

IT>>Не надо даже объявлять соответсвующие методы, компилятор всё что надо достроит сам.

WH>А ну точно круто и какую из энного колличеста имеплементаций брать?

Какая больше подходит. Решит это компилятор, который будет натренирован тобой.

IT>>Только множественное наследование. Либо... компилятор может легко справиться и с этой задачей, сгенерировав необходимые методы, основываясь на исчерпывающей инфеормации о типах. И при этом вполне обойтись без усложнения структуры VMT.

WH>Такого понятия как VMT если мне не изменяет скалероз в стандарте нет.

В стандарте может и нет, а вот в жизни есть.

WH>Следовательно это компиляторо зависимая фича. Следовательно при описании шаблона реализации можно его пометить компилиторо-зависимым атрибутом как встраиваемый. Пример


Компиляторо-зависимые фичи — это ещё один бред, придуманный создателями языка. Причём скорее всего это сделано из-за элементарной нехватки времени и попытки сделать язык совместимым со всеми существующими тогда платформами. Но ведь всё равно фигово получилось. Делали язык программирования на века, а пришёл юникод и всё похерил. Оказалось что C++ под него просто не приспособлен, потому-что в своё время может опять же не хватило времени, может просто поленились, но строковый тип в язык не ввели. Вот и получите.

[скип]

Ты знаешь, я с твоим кодом даже разбираться не стал. Я тебе дал три строчки кода, ты же мне нарисовал кисель из пяти шаблонных классов да ещё приплёл туда макросы и какой-то левый mixin

IT>>Здесь я не просто хочу от компилятора добавления соответсвующих методов интерфейса, но так же реализации свойств. Да не просто так, а что бы свойства только возвращали int и string, а внутренне были представлены классами EditableInt32 и EditabelString.

WH>И от куда компилятор об этом узнает? Уж не из факта неследования от IEditable ли? А если бедет интерфейс ISuperEditable?

Ну сам подумай, откуда он может это узнать? Откуда ты ему скажешь, оттуда он и узнает. Можно из моего интерфейса, можно из твоего. Они между прочим, совсем не обязаны быть связанными между собой наследованием или чем-то ещё, но вполне оба могут выполнять нужные функции. Можно прикрутить атрибуты, можно наследование. Всё сгодится. Если будет возможность во время компиляции почитать метадату и обработать её средствами превышающими возможности используемого языка, то возможности самого языка от этого только возрастут, за счёт заимствования этой мощи у этих же средств. Типа такая рекурсия, ну ты понял

IT>>А теперь я хочу, чтобы метод save открывал транзакцию и закрывал её, если не произошло никаких исключений:

WH>Как у тебя все просто... Что за транзакция? А ели Save пишет в две базы данных, в фаил и отправляет письмо?

А тебе что именно надо?

IT>>И сохранял лог, если произошло исключение неизвестного типа:

WH>Пред и пост условия... старо как мир вот только почемуто языки с ними не прижились. Хотя иногда может быть удобно.

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

А всё что надо — это лишь позволить мне расширять компилятор. И я буду учить его что и как делать прямо во время разработки проекта, сокращая время, объём кода и время девелопмента за счёт таких вещей как. Представим, что мне понадобилось сделать логгинг вызовов всех паблик методов бизнес-лэйера в тот момент, когда проэкт уже фигачит полным ходом и количество срочек кода уже измеряется сотнями тысяч. Для этого мне нужно будет научит компилятор соответствующим образом обрабатывать все паблик методы классов помеченных атрибутом, либо наследованных от одного предка и всего лишь один раз пересобрать весь проект. Ты сможешь так со своими шаблонами?

IT>>А вообще для написания Data Access Layer мне практически достаточно состыковать сигнатуры метода класса и сохранённой процедуры. Так в чём проблема:

WH>Опять. С какой базой? Через какого провайдера?

Ну сам подумай, есть тысяча способов.

IT>>Готово. Ах да, забыл, Name может быть null, но только при изменении:

WH>А где сказано что в InsertCustomer должно быть не null?

Тебе уже не к чему придраться?

WH>Реализуйте а там видно будет. Но мучают меня смутные сомненья что не все так безоблачно как ты рисуешь.


Естественно, за все удовольствия надо платить.
Если нам не помогут, то мы тоже никого не пощадим.
Re[16]: CLI/C++
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 11.01.04 11:15
Оценка: :))
Здравствуйте, IT, Вы писали:

IT>Причём потеря производительности в этом случае будет напрямую зависить только от диаметра кривизны рук разработчика.


Обычно инженеры употребляют термин "радиус кривизны"
... << RSDN@Home 1.1.2 beta 3 (mobile station) >>
AVK Blog
Re[3]: CLI/C++
От: ioni Россия  
Дата: 08.01.04 20:24
Оценка: 20 (1)
Здравствуйте, WolfHound, Вы писали:

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

кстати драфт стандарта
можно найти здесь
http://blogs.gotdotnet.com/branbray/

или прямая ссылка
http://download.microsoft.com/download/9/9/c/99c65bcd-ac66-482e-8dc1-0e14cd1670cd/C++%20CLI%20Candidate%20Base%20Draft.pdf
Re[3]: CLI/C++
От: IT Россия linq2db.com
Дата: 31.12.03 07:27
Оценка: +1
Здравствуйте, WolfHound, Вы писали:

2IT: Ну и где твой МС++ после этого?

Мой MC++ установлен на моей машине и я им пользуюсь когда мне это необходимо. А вот где твой C++/CLI? В бете видби? И выйдет в свет не раньше чем через год? Ну-ну. Пока можешь развлекаться разглядыванием презентаций

Кстати, насчёт нововведений. Видимо доработать C++ и при этом не изуродовать его, так у них и неполучилось. А жаль.
Если нам не помогут, то мы тоже никого не пощадим.
Re[10]: CLI/C++
От: WolfHound  
Дата: 02.01.04 20:00
Оценка: +1
Здравствуйте, IT, Вы писали:

IT>Нейтив объект нельзя создать в GC-хипе, это понятно и без презентации. В GC-хипе создаётся проксик. Тоже самое и с GC-объектами. Они создаются только в GC-хипе, а на стеке для них опять же создаётся только прокси. При этом прокси лишь управляют временем жизни объекта, но никак не влияют не его тип. Соответственно информация о том в каком хипе создан объект может быть однозначно получена из его типа. А раз так, то зачем вводить дополнительные языковые конструкции. Для того лишь что-бы отделять прокси от ссылок? Ну тут, во первых, я бы с лёгкостью пожертвовал такой возможностью (создание прокси для GC-объектов на стеке при этом всё равно синтаксически остаётся возможным) ради упрощения языка. А во-вторых, ту же самую возможность можно было бы добавить путём введения дополнительных встроенных типов аля gc_ptr<>. Сейчас же получается, что возможность, которая не нужна в 99% случаев будет заставлять тебя помнить о ней и использовать её постоянно.

Хоть бы 3 минуты подумал почему это сделано. См ниже.
IT>Возможно, есть более глубокие причины, почему сделано именно так, но пока я не могу найти вразумительного ответа.
А то.
Есть нативный класс SomeNativeClass создаем объект этого класса при помощи gcnew SomeNativeClass если следовать твоей логике то указатель на SomeNativeClass ВСЕГДА должен быть нативным и тот прокси который создавал gcnew должен быть проигнорирован те сразуже после создания объекта не остается ни одной живой ГЦ ссылки те даже если на объект будут продолжать ссылатся ГЦ об этом не узнает ни когда и убет обект при первой же сборке мусора не смотря на то что бъект все еще нужен.
Для ГЦ классов созлданных с помощью new таже фигня указатель на нативный прокси будет утерян без возвратно сразуже после создвния объекта и ГЦ всегда будет видеть покрайней мере одну живую ссылку (ту что в потеряной проксе).
Продолжая следовать твоей логие приходим к выводу что gcnew стал вреден ибо прокси всеравно всегда игнорируются, а проигнорированые прокси как показано выше очень большие грабли следовательно к чертям gcnew пусть компилятор сам разбирается что есть где...
Итого:
Это как я понял тебе не нужно
Semantically, a C++ program can create object of any type T in any storage location:
    On the native heap:    T* t1 = new T;
        As usual, pointers (*) are stable, even during GC
        As usual, failure to explicitly call delete will leak
    On the gc heap:        T^ t2 = gcnew T;
        Handles (^) are object references (to whole objects)
        Calling delete is optional: "Destroy now, or finalize later."
И это мелочи
Native pointers (*) and handles (^):
^ is like *, except ^ points to a whole object on the gc heap, 
can’t be ordered, and can’t be cast to void* (or integral type) and back. (There is no void^.)
И это тудаже
Boxing is implicit and strongly typed:
    int^ i = 42;    // strongly typed boxed value
    Object^ o = i;    // usual derived-to-base conversions ok

Unboxing is explicit:
Dereferencing a V^ indicates the value inside the box, and this syntax is also used for unboxing:
    int k = *i;    // unboxing to take a copy
    int% i2 = *i;    // refer into the box (no copy)
    swap( *i, k );    // swap contents of box with stack variable
                // (no copy, modifies the contents of box)

Да к стати а как в твоей системе создать int в ГЦ хипе и отправить его в шарп? Ы?
А что делать в этом случае
int* i;
int j[40]={};
if(rand()%2)
{
    i=j;
}
else
{
    i=<какимто образом создаем в ГЦ хипе>int(243);
}
...i+12...

Давать ошибку ибо для объекта в ГЦ хипе это не имеет смысла или молча выполнять адресную арифметику?

Уверен если немного покопатся можно еще много чего раскопать. К томуже в таком виде в котором это есть сейчас сразу видно где ГЦ, а где надо ручками следить.

[понты и наезды поскипаны]

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

Если ты подумал что я тебя не понял то ты заблуждаешься. У нас есть куча объектов на которых стоит ОДИН(иногда больше но это большая редкость) комп с нашим 7х24 софтом.
А то что ты считаешь что я не могу додуматься до тонких клиентов это ИМХО вобще на гране оскорбления.

IT>Расширяемый компилятор, AOP во всей красе, может ещё чего.

Поставлю вопрос по другому что там будет такого чего не будет в C++/CLI?

IT>Ровно столько на сколько у него хватит энтузизизма

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

IT>Бета — это не релиз. Ни один вменяемый мэнеджер не станет делать проект на бете.

Проект нет. А вот прототип в фоновом режиме для освоения новой технологии очень даже можно начать и к релизу получить кучу опыта из серии что хорошо, а что геморой. И изходя из этого проектировать.(В принципе проектировать можно начать еще до релиза)
... << RSDN@Home 1.1 beta 2 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[13]: CLI/C++
От: IT Россия linq2db.com
Дата: 04.01.04 01:25
Оценка: -1
Здравствуйте, alexkro, Вы писали:

Удалено избыточное цитирование


A>Удивительно, что ты не видишь недостатков managed extensions. В большинстве случаев твое мнение: давайте оставим все как есть. Это и неприятие handles и gcnew. Действительно, нужно пописать хотя бы какое-то количество кода и на managed extensions и на C++/CLI, чтобы увидеть разницу. Если ты перековал свой mindset на C# и код на C++ давно не пишешь, пользы C++ community от тебя никакой.


Не понял, что за гон! Ты меня ни с кем случайно не спутал? Может покажешь где это я уговоривал всех ничего не менять и писать на MC++?
Если нам не помогут, то мы тоже никого не пощадим.
Re[12]: CLI/C++
От: WolfHound  
Дата: 06.01.04 15:54
Оценка: :)
Здравствуйте, IT, Вы писали:

IT>Это всё мелочи реализации. Создание объекта и его привязка к прокси свободно может контролировать компилятор.

IT>Например в шарпе никто не знает и не ведает о боксинге, тем не менее он на каждом шагу.
В шарпе другая сениматика языка. Там нет адресной арифметики, а из С++ ее не убрать.
Если убрать хендлы то либо убираем адресную арифметику либо делаем явный боксинг. Ибо они пересекаются.
IT>В MC++ есть пин-указатели, которые также контролируются компилятором. Ничего страшного, все живы и здоровы.
И кто на нем (МС++) активно пишет? Проблема в том что если из пин указателя преобразовать в обычный (а именно для этого и сделаны пин указатели) обратное преобразование не возможно, а пути легаси кода не исповедимы. Да и в любом случае его придется держать пин указатель пока легаси код указатель колбасит.

IT>Ты не понял главного. Не надо new и gcnew. Надо только один new и всё.

Да все я понял. Проблема в том что есть легаси код...(чтоб он провилился) А если писать все в новои стиле то можно к черту все хендлы выкинуть... Но...

IT>Вот это меня и настораживает. Поздравляю, господа, перед вами первый в мире язык поддерживающий одновременно две модели памяти! Заводите студентов, щас мы им это быстренько на пальцах растолкуем, а потом посадим писать программы.

А две модели памяти будут в любом случае. Просто с хендлами они явно разделены, а без них ГЦ объекты будут очень сильно походить на не ГЦ объекты.

IT>Всего один? Слабак!

Я перевоспитался. Спасибо. А вот тебя похоже тоже надо немного повоспитывать.

IT>AOP проповедует (если я его правильно понимаю) вынесение всего служебного кода из собственно кода. И использование для такого кода исключительно декларативных средств языка. Под служебным кодом может пониматься всё, что так или иначе выполняется исключительно для обеспечения поддержки функциональности, но не сама функциональность. Т.е. в идеале код должен содержать чистый сироп из бизнес-логики. Все остальные вспомогательные составляющие кода должны быть отжаты и вынесены в декларативную часть.

Вау! Это же 2 в одном серебряная пуля + TProgrammer...

IT>На сегодняшний день в нашем арсенале наиболее используемых средств имеются наследование, как способ реализации базовой функциональности, и шаблоны, как способ подстановки готовой функциональности.


IT>.NET привнёс ещё один элемент — атрибуты. К сожелению это мощнейшее средство находится пока в самом зародыше. А идея могла бы быть революционной, сдеалай MS ещё один маленький шажочек. А именно — дайте воможность расширять компилятор своими средствами и дополнять генерацию кода после его компиляции.

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

IT>Например, наследование реализации:

хъ
IT>Не надо даже объявлять соответсвующие методы, компилятор всё что надо достроит сам.
А ну точно круто и какую из энного колличеста имеплементаций брать?
IT>Конечно, тоже самое можно сделать и в C++ при помощи шаблонов и наследования. Но как насчёт разнородных классов? Правильно, множественное наследование! Ты хорошо знаешь этому цену? А так?
хъ
IT>Только множественное наследование. Либо... компилятор может легко справиться и с этой задачей, сгенерировав необходимые методы, основываясь на исчерпывающей инфеормации о типах. И при этом вполне обойтись без усложнения структуры VMT.
Такого понятия как VMT если мне не изменяет скалероз в стандарте нет. Следовательно это компиляторо зависимая фича. Следовательно при описании шаблона реализации можно его пометить компилиторо-зависимым атрибутом как встраиваемый. Пример
#if   defined(__MY_COOL_COMPILER)
#define mixin __declspec(built_in) struct 
#elif defined(__HIS_COOL_COMPILER)
#define mixin __built_in struct 
#else
#define mixin struct 
#endif

#define mixin_impl()\
self_type* self()\
{\
    return static_cast<self_type*>(this);\
}\
const self_type* self()const\
{\
    return static_cast<const self_type*>(this);\
}\
//end mixin_impl

template<class self_type>
mixin IActivatableImpl
    :IActivatable
{
    mixin_impl()
};

template<class self_type>
mixin ISavableImpl
    :ISavable
{
    mixin_impl()
};

struct MyClass
    :IActivatableImpl<MyClass>
    ,ISavableImpl<MyClass>
{
};

А интерфейсы ИМХО давно пора в С++ стандарт внести.

IT>Ну а с этим уж совсем тоска:

хъ
IT>Здесь я не просто хочу от компилятора добавления соответсвующих методов интерфейса, но так же реализации свойств. Да не просто так, а что бы свойства только возвращали int и string, а внутренне были представлены классами EditableInt32 и EditabelString.
И от куда компилятор об этом узнает? Уж не из факта неследования от IEditable ли? А если бедет интерфейс ISuperEditable?

IT>А теперь я хочу, чтобы метод save открывал транзакцию и закрывал её, если не произошло никаких исключений:

Как у тебя все просто... Что за транзакция? А ели Save пишет в две базы данных, в фаил и отправляет письмо?

IT>И сохранял лог, если произошло исключение неизвестного типа:

Пред и пост условия... старо как мир вот только почемуто языки с ними не прижились. Хотя иногда может быть удобно.

IT>Ну и проверку входных параметров делал:

Круто
А атрибут на возвращаемое значение как повесть.

IT>А вообще для написания Data Access Layer мне практически достаточно состыковать сигнатуры метода класса и сохранённой процедуры. Так в чём проблема:

Опять. С какой базой? Через какого провайдера?
IT>Готово. Ах да, забыл, Name может быть null, но только при изменении:
А где сказано что в InsertCustomer должно быть не null?
IT>Может и бизнес слой также упростить. Например, даже при наличии имплементации соответсвующих методов добавить в них что-то своё. Ну например вызов метода валидации обрабатываемого класса:
Пред/пост условия. Не ново хоть и выглядит симпотично.
В следующем стандатре С++ можно будет делать так
template<class T>
struct Validator
{
    Validator(T* _this)
        :this_(_this)
    {
        save_state();
    }
    ~Validator()
    {
        if(забыл как зовут функцию сгнализирующею об исключении||!is_valid())
        {
            rollback();
        }
    }
private:
    T* this_;
    //...
};
Validator<T> Validate(T* _this)
{
    return Validator<T>(_this);//RVO Optimization
}
...
    void InsertCustomer(Customer c)
    {
        auto Validate(this);
                //...
    }


IT>В результате, мы получим код, содержащий только чистую бизнеслогику. Совершенно свободный от лишних проверок и вызовов, легко читаемый и сопровождаемый. Всю рутину, которую может сделать компилятор будет делать компилятор. Нужно будет только научить его это делать.

Реализуйте а там видно будет. Но мучают меня смутные сомненья что не все так безоблачно как ты рисуешь.

IT>Ко всему прочему, Александреску учил тебя правильному использованию комбинации наследования и шаблонов. В результате, некоторые на форуме (одного я точно знаю ) говорят, что ты можешь творить с этим чудеса. А теперь представь, что у тебя появилось ещё одно измерение — вся информация о типах и полный контроль над генерацией кода. Сумеешь этим распорядиться?

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

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

Так. Все. Завтра сажаем тебя за этот компьютер, даем в руки тот самый васик и заставляем тебя переписывать на нем RSDN.
... << RSDN@Home 1.1 beta 2 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[17]: CLI/C++
От: IT Россия linq2db.com
Дата: 10.01.04 22:43
Оценка: +1
Здравствуйте, mihailik, Вы писали:

IT>>строим такой метод, по всем правилам освобождая в нём мемберы с IDisposable. Вот код
Автор: IT
Дата: 15.08.02
, который использует рефлекшин, всё что нужно сделать — это перенести это в генератор, который будет вызван компилятором. На эмите такие вещи делаются на раз.


M>А порядок освобождения? А блокировки? А исключения? Для IDisposable такая самодеятельность не прокатит.


Порядок освобождения и блокировки можно так же контролировать атрибутами. Обработка исключений — какая проблема? По спецификации Dispose не должен выбрасывать никаких исключений. Да и в клинических случаях никто не запрещает написать Dispose самостоятельно. Но вот 90% спокойно можно имплементировать единообразно.

M>Ну да, то есть для каждого интерфейса нужно писать расширение. Тогда понятно. Тоже вариант, только такое себе. Как-то не очень вдохновляет


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

M>По моим очень дилетантским прикидкам, метапрограммирование компиляторов это вопрос, которому нужна серьёзная теоретическая проработка. Ну уровне какой-нибудь докторской диссертации или круче. Народной инициативой тут, никак не обойдёшься.


Да это сколько угодно, хоть обпрорабатывайся, проработка никогда не помешает. Только любая теория без практических исследований так теорией и остаётся.
Если нам не помогут, то мы тоже никого не пощадим.
Re[15]: CLI/C++
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.01.04 18:05
Оценка: +1
Здравствуйте, Шахтер, Вы писали:

Ш>Тут надо понимать одну вещь. Человеческий мозг -- гораздо более мощное орудие, чем любой компилятор. Поэтому попытка избавиться от необходимости думать, спихивая свою работу тупой машине, контрпродуктивна. Это прокатывает только для определённых классов задач, где можно ограничиться несложным комбинированием простых рецептов. Это то, что можно условно назвать Макдональдс. У Джоела об этом хорошо было написано. Но существование Макдональдсов нисколько не отменяет существование дорогих и качественных ресторанов, где работают не повара, окончившие 21-дневные курсы, а истинные мастера своего дела. Кстати, куда вы водите свою любимую женщину? Неужели в Макдональдс?


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

Что же касается мозга, то его возможности ограничены. И всю рутинну нужно сваливать на компьютеры. Они собственно для этого и созданы. А мозг должен весь свой потенциал выкладывать там где компьютеры бессильны. Изнаешь, что? Я пока не вижу ситуации при которой для мозга не будет серьезной нагрузки в следствии того, что все задачи переложены на компьютер.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: CLI/C++
От: Lloyd Россия  
Дата: 12.01.04 13:12
Оценка: +1
Здравствуйте, VladD2, Вы писали:

L>>С++ чем не пример.


VD>Тем что лажа. Посмотри на описание OpenC++ — сам все поймешь.


После такого заявления даже смотреть не буду.
... << RSDN@Home 1.1.2 beta 1 >>
Re[21]: CLI/C++
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.01.04 13:43
Оценка: -1
Здравствуйте, Lloyd, Вы писали:

VD>>Тем что лажа. Посмотри на описание OpenC++ — сам все поймешь.


L>После такого заявления даже смотреть не буду.


Правильно, лишнее это. Так проще заявлять, что в С++ все есть.

Да нельзя все же обижать религиозные чувства.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: CLI/C++
От: Lloyd Россия  
Дата: 12.01.04 14:03
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Правильно, лишнее это. Так проще заявлять, что в С++ все есть.


VD>Да нельзя все же обижать религиозные чувства.


Это типа наезд что-ли?
Я на C++ не работал, не работаю и работать не буду.
Но не потому что C++ сакс и маздай, а потому что есть более интересные вещи на этом свете.
Но это ни в коей мере не умаляет достоинства языка.

А по-поводу OpenC++. Ты можешь назвать хоть один широко-распространенный продукт, написанный на нем?
... << RSDN@Home 1.1.2 beta 1 >>
Re[17]: CLI/C++
От: _wqwa США  
Дата: 12.01.04 14:13
Оценка: :)
Здравствуйте, AndrewVK, Вы писали:

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


IT>>Причём потеря производительности в этом случае будет напрямую зависить только от диаметра кривизны рук разработчика.


AVK>Обычно инженеры употребляют термин "радиус кривизны"

Когда речь идет о руках, принято говорить "диаметр", т.к. руки -- две, радиусы их кривизны могут быть разными, и самму двух радиусов условно называется диаметром
... << RSDN@Home 1.1.0 stable >>
Кто здесь?!
Re[18]: CLI/C++
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 12.01.04 14:34
Оценка: :)
Здравствуйте, _wqwa, Вы писали:

AVK>>Обычно инженеры употребляют термин "радиус кривизны"

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

Не двух радиусов, а удвоенный радиус.

D=2R
... << RSDN@Home 1.1.2 beta 2 >>
AVK Blog
Re[25]: CLI/C++
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.01.04 21:02
Оценка: +1
Здравствуйте, mihailik, Вы писали:

M>Правда, код выслать не могу, потерялся при поломке винта. Там, правда, работы было на пятнадцать копеек. Если будешь подкалывать я его заново наваляю


Подкалывать не буду. Он никому ненужен.
... << RSDN@Home 1.1.2 beta 3 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: CLI/C++
От: Воронков Василий Россия  
Дата: 19.02.04 09:38
Оценка: +1
Здравствуйте, AndrewVK, Вы писали:

Ш>>Попробуйте, в качестве упражнения, сделать хороший текстовый редактирующий элемент, такого же класса или лучше, как в студии. Если я правильно понял, Янус использует Scintillе-у? А что, свой было влом сделать?


AVK>Зачем?


Зачем в принципе-то понятно. А вот делать редактор лучше чем в студии "в качестве упражнения" это ж каким маньяком надо быть?
CLI/C++
От: Аноним  
Дата: 30.12.03 23:34
Оценка:
Добрый день!

У меня возник простой вопрос: КОГДА ВЫЙДЕТ CLI/C++,
то есть это будет реализовано в новой версии студии?
И в каком году, в каком месяце можно ждать его появления....

Спасибо — С новым годом

10.01.04 12:52: Перенесено модератором из '.NET' — TK
Re: CLI/C++
От: IT Россия linq2db.com
Дата: 31.12.03 00:22
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>У меня возник простой вопрос: КОГДА ВЫЙДЕТ CLI/C++,

А>то есть это будет реализовано в новой версии студии?
А>И в каком году, в каком месяце можно ждать его появления....

Manager C++ существует уже почти два года — Управляемый C++
Автор(ы): Игорь Ткачёв
Дата: 05.02.2002
До сих пор трудно ответить на вопрос, что такое .Net. Эта статья, являясь введением в Managed Extensions for C++ (MC++), содержит описание ряда смелых экспериментов советских ученых, наконец-то позволяющих понять, что же такое .Net вообще, и место MC++ в нем, в частности.
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: CLI/C++
От: WolfHound  
Дата: 31.12.03 06:12
Оценка:
Здравствуйте, IT, Вы писали:

IT>Manager C++ существует уже почти два года — Управляемый C++
Автор(ы): Игорь Ткачёв
Дата: 05.02.2002
До сих пор трудно ответить на вопрос, что такое .Net. Эта статья, являясь введением в Managed Extensions for C++ (MC++), содержит описание ряда смелых экспериментов советских ученых, наконец-то позволяющих понять, что же такое .Net вообще, и место MC++ в нем, в частности.

Сравнил...
Пример из презентации.

2IT: Поврори на МС++...
void Transfer() 
{
    MessageQueue    source( "server\\sourceQueue" );
    String^ qname = (String^)source.Receive().Body;
    MessageQueue    dest1( "server\\" + qname ),
                      dest2( "backup\\" + qname );
    Message^ message = source.Receive();
    dest1.Send( message );
    dest2.Send( message );
}


Minimal C# equivalent:
void Transfer() 
{  
    using( MessageQueue source = new MessageQueue( "server\\sourceQueue" ) ) 
    {
        String qname = (String)source.Receive().Body;
        using( MessageQueue    dest1 = new MessageQueue( "server\\" + qname ),
                                dest2 = new MessageQueue( "backup\\" + qname ) ) 
        {
            Message message = source.Receive();
            dest1.Send( message );
            dest2.Send( message );
        }
    }
}


Minimal VB/Java equivalent (in C# syntax):
void Transfer() 
{
    MessageQueue    source = null, 
                    dest1 = null, 
                    dest2 = null;
    try 
    {
        source = new MessageQueue( "server\\sourceQueue" );
        String qname = (String)source.Receive().Body;
        dest1 = new MessageQueue( "server\\" + qname );
        dest2 = new MessageQueue( "backup\\" + qname );
        Message message = source.Receive();
        dest1.Send( message );
        dest2.Send( message );
    }
    finally 
    {
        if( dest2 != null ) 
        { 
            dest2.Dispose(); 
        }
        if( dest1 != null ) 
        { 
            dest1.Dispose(); 
        }
        if( source != null ) 
        { 
            source.Dispose(); 
        }
    }
}


ЗЫ По слухам в бетте Видби должен быть немного не доделаный C++/CLI
ЗЗЫ Презентация для тех кто еще не видел. (1,414,656 bytes)
ЗЗЗЫ Of course, any type can be templated:
    template<class T>
    ref class ARefTemplate { /*…*/ };    // ok
2IT: Ну и где твой МС++ после этого?
...
ЗЗЗЗЫ Продолжать можно долго. Короче MC++ рядом с C++/CLI не стояло.
... << RSDN@Home 1.1 beta 2 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[4]: CLI/C++
От: alexkro  
Дата: 31.12.03 21:07
Оценка:
Здравствуйте, IT, Вы писали:

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


IT>2IT: Ну и где твой МС++ после этого?


IT> Мой MC++ установлен на моей машине и я им пользуюсь когда мне это необходимо. А вот где твой C++/CLI? В бете видби? И выйдет в свет не раньше чем через год?


Release должен быть в конце 2004. А beta — в начале.

> Ну-ну. Пока можешь развлекаться разглядыванием презентаций


IT>Кстати, насчёт нововведений. Видимо доработать C++ и при этом не изуродовать его, так у них и неполучилось. А жаль.


В смысле? Где это он изуродован?

Меня больше волнует будет ли ощутимое различие в стиле программирования. Ведь C++ — это язык с copy semantics (объекты предпочтительно передаются по значению, отсюда swap идиома, и т.д.), а .NET с его GC предпологает move semantics (все по ссылке). Это то, что для меня прежде всего отличало C++ от C#, например. Так как на C++/CLI еще никто ничего существенного не писал, остается только предпологать какое влияние это на него окажет. Хотя возможность создавать объекты reference типов на стеке, несомненно, радует.
Re[4]: CLI/C++
От: WolfHound  
Дата: 31.12.03 21:24
Оценка:
Здравствуйте, IT, Вы писали:

IT> Мой MC++ установлен на моей машине и я им пользуюсь когда мне это необходимо. А вот где твой C++/CLI? В бете видби? И выйдет в свет не раньше чем через год? Ну-ну. Пока можешь развлекаться разглядыванием презентаций

Я пока буду писать на С++ всеравно текущий проект еще черти сколько времени писать будем.

IT>Кстати, насчёт нововведений. Видимо доработать C++ и при этом не изуродовать его, так у них и неполучилось. А жаль.

И что же они изуродовали? Ты знаешь что мой основной язык С++, ты знаешь что я на нам могу сделать... И я ни чего уродливого в этих нововведениях (судя по презентации) не заметил. Про МС++ я тоже самое сказать не могу.

ЗЫ Дык как на счет того чтобы на МС++ примерчик повторить? Там в оригинале на C++/CLI всего 7 строк. Ы?
... << RSDN@Home 1.1 beta 2 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[5]: CLI/C++
От: IT Россия linq2db.com
Дата: 31.12.03 23:33
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Я пока буду писать на С++ всеравно текущий проект еще черти сколько времени писать будем.


Так зачем тебе тогда C++/CLI?
И вообще, переходи на C#, как минимум в два раза быстрее получится

IT>>Кстати, насчёт нововведений. Видимо доработать C++ и при этом не изуродовать его, так у них и неполучилось. А жаль.

WH>И что же они изуродовали?

Ты находишь что два синтаксических элемента для определения одной программной сущности это найс?

WH>Ты знаешь что мой основной язык С++, ты знаешь что я на нам могу сделать...


Ой-ой-ой! А ты знаешь что я могу на шарпе сделать? Все твои шаблоны по сравнению с эмитом и атрибутами — это детский сад. А если Влад напишет R#, то я ваще молчу.

WH>И я ни чего уродливого в этих нововведениях (судя по презентации) не заметил. Про МС++ я тоже самое сказать не могу.


Да ну? А конструкции типа __gc, __box и т.п. тебя не коробят? Хотя видимо после прочтения Александреску уже мало что поможет

WH>ЗЫ Дык как на счет того чтобы на МС++ примерчик повторить? Там в оригинале на C++/CLI всего 7 строк. Ы?


А ты сам то сможешь? Говорят ты такое можешь делать...
Если нам не помогут, то мы тоже никого не пощадим.
Re[6]: CLI/C++
От: WolfHound  
Дата: 01.01.04 10:54
Оценка:
Здравствуйте, IT, Вы писали:

IT>Так зачем тебе тогда C++/CLI?

Для будущих проектов
IT>И вообще, переходи на C#, как минимум в два раза быстрее получится
Чем на C++/CLI? Сильно сомневаюсь.

WH>>И что же они изуродовали?

IT>Ты находишь что два синтаксических элемента для определения одной программной сущности это найс?
Это где? Ах да ты про SomeType^ и SomeType*? Если да то это не одно и тоже. Первый вариант это совсем не С++ указатель это больше похоже на смартпоинтер что-то типа gc_ptr<SomeType> только вынесено на уровень языка. Надеюсь не надо обьяснять что С++ указатель в отличии от смартпоинтера является итератором произвольного доступа (для смартпоинтеров это не имеет смысла).

IT>Ой-ой-ой! А ты знаешь что я могу на шарпе сделать?

Мне извесны возможности шарпа. Крайне не удобный язык. Средств для повторного использования кода по сравнения с С++ почти нет. Скоро появятся генерики это конечно уже коечто но подключения реализации всеравно не будет.
IT>Все твои шаблоны по сравнению с эмитом и атрибутами — это детский сад.
Ага и чтобы это работало на Win95 с 4М памяти(я конечно слегка утрировал но тачки с Win98 и 16М у наших клиентов пока не редкость начальство обещает боротся но это требует времени)... Надеюсь ты не думал что такие тачки уже совсем вымерли... Это еще что... у меня прорва ресурсов... наши соседи на асме пишут... байты считают...
IT>А если Влад напишет R#, то я ваще молчу.
Безумству храбрых... Только мне почемуто кажется что MS C++/CLI раньше выпустит. И наворотов в C++/CLI будет мнОго больше.

WH>>И я ни чего уродливого в этих нововведениях (судя по презентации) не заметил. Про МС++ я тоже самое сказать не могу.

IT>Да ну? А конструкции типа __gc, __box и т.п. тебя не коробят? Хотя видимо после прочтения Александреску уже мало что поможет
Еще раз MC++ != C++/CLI гды ты в C++/CLI видел __gc, __box...? Ы?
И насколько я понял Саттера, Александреску принимает участие в разработке C++/CLI в качастве консультанта. Смотрит за тем чтобы C++/CLI был максимально в стиле С++.

WH>>ЗЫ Дык как на счет того чтобы на МС++ примерчик повторить? Там в оригинале на C++/CLI всего 7 строк. Ы?

IT> А ты сам то сможешь? Говорят ты такое можешь делать...
Ты от ответа не уходи. Не я считаю что MC++ == C++/CLI.
... << RSDN@Home 1.1 beta 2 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[6]: CLI/C++
От: alexkro  
Дата: 01.01.04 20:48
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


A>>Хотя возможность создавать объекты reference типов на стеке, несомненно, радует.

WH>Нет такой возможности. Это всеголишь небольшой трюк разработчиков. На стеке создается лишь объект который дергает Dispose.

В языке есть. А как это реализуется это уже совсем другой вопрос.
Re[8]: CLI/C++
От: WolfHound  
Дата: 02.01.04 13:20
Оценка:
Здравствуйте, IT, Вы писали:

WH>>Чем на C++/CLI? Сильно сомневаюсь.

IT>Не сомневайся. Быстрее как минимум на год
Судя по презентции код на C++/CLI короче чем на шарпе дык с какого ты взял целый год тормозов на C++/CLI?
Короче в чем C++/CLI уступает шарпу. Только не надо размытых фраз типа шарп проще. Давай конкретно.

IT>Это всё твои домыслы. Это та же ссылка, только в хипе GC. По большому счёту это и есть вся разница. Тем не менее я как программист должен постоянно помнить в какой куче был создан объект и использовать разные козябры. При этом компилятор и без меня лучше знает что к чему. В общем, чушь. Лишний элемент, делающий из C++ динозавра типа PL/1.

Ты вобще презентушку смотрел? Компилятор не может знать где создан объект исходя из его типа (ибо new и gcnew) ибо натив обьект можно создать в ГЦ хипе и ГЦ объект в натив хипе.
Надеюсь не надо обьяснять в чем разница между натив указателем и ГЦ ссылкой.

IT>Ты на шарпе сколько строчек написал? Хотя бы один более менее серьёзный проект сделал? Вот сначала сделай, а потом скажешь какой язык крайне не удобный.

Около 20К строк. Знаю что не много но для того чтобы получить представление об языке ИМХО достаточно.

WH>>Ага и чтобы это работало на Win95 с 4М памяти(я конечно слегка утрировал но тачки с Win98 и 16М у наших клиентов пока не редкость начальство обещает боротся но это требует времени)... Надеюсь ты не думал что такие тачки уже совсем вымерли... Это еще что... у меня прорва ресурсов... наши соседи на асме пишут... байты считают...

IT>Так а зачем тебе тогда C++/CLI? Он тебе тоже не поможет. У тебя прямой путь в веб-интерфейс, там ресурсов много не надо и даже такой металлолом работать будет.
См выделеное. А с интерфейсом проблем нет. Его очень не плохо в дебилдере рисуют.
А что касается C++/CLI то у меня кроме интерфейса столько делать надо что Короче в следующем проекте фреймворк, рефлекшен, емит, генерики, шаблоны и препроцессор будут задействованы на всю катушку(не или почти на всю).

WH>> Безумству храбрых... Только мне почемуто кажется что MS C++/CLI раньше выпустит. И наворотов в C++/CLI будет мнОго больше.

IT>Что там будет понятно. Все навороты описаны в презентации.
И что мало? Что такое революционное собирается сделать Влад? И сможет ли он сделать компилятор промышленного качества? А сколько займет это времени? А бета Видби будет в мае.
... << RSDN@Home 1.1 beta 2 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[9]: CLI/C++
От: IT Россия linq2db.com
Дата: 02.01.04 15:56
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>>>Чем на C++/CLI? Сильно сомневаюсь.

IT>>Не сомневайся. Быстрее как минимум на год
WH>Судя по презентции код на C++/CLI короче чем на шарпе дык с какого ты взял целый год тормозов на C++/CLI?

С такого, что релиз C++/CLI будет только через год

WH>Короче в чем C++/CLI уступает шарпу. Только не надо размытых фраз типа шарп проще. Давай конкретно.


См. выше.

WH>Ты вобще презентушку смотрел? Компилятор не может знать где создан объект исходя из его типа (ибо new и gcnew) ибо натив обьект можно создать в ГЦ хипе и ГЦ объект в натив хипе.


Нейтив объект нельзя создать в GC-хипе, это понятно и без презентации. В GC-хипе создаётся проксик. Тоже самое и с GC-объектами. Они создаются только в GC-хипе, а на стеке для них опять же создаётся только прокси. При этом прокси лишь управляют временем жизни объекта, но никак не влияют не его тип. Соответственно информация о том в каком хипе создан объект может быть однозначно получена из его типа. А раз так, то зачем вводить дополнительные языковые конструкции. Для того лишь что-бы отделять прокси от ссылок? Ну тут, во первых, я бы с лёгкостью пожертвовал такой возможностью (создание прокси для GC-объектов на стеке при этом всё равно синтаксически остаётся возможным) ради упрощения языка. А во-вторых, ту же самую возможность можно было бы добавить путём введения дополнительных встроенных типов аля gc_ptr<>. Сейчас же получается, что возможность, которая не нужна в 99% случаев будет заставлять тебя помнить о ней и использовать её постоянно.

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

WH>Надеюсь не надо обьяснять в чем разница между натив указателем и ГЦ ссылкой.


Чем-то тебе полюбилась выделенная фраза, раз ты её используешь в каждом посте. Надеюсь не надо объяснять, что кидание понтов — это не лучший способ ведения беседы, особенно, демонстрируя при этом не полное понимание предмета

IT>>Ты на шарпе сколько строчек написал? Хотя бы один более менее серьёзный проект сделал? Вот сначала сделай, а потом скажешь какой язык крайне не удобный.

WH>Около 20К строк. Знаю что не много но для того чтобы получить представление об языке ИМХО достаточно.

И после этого ты утвержаешь, что разработка на C++ круче? Значит ты не делал больших проектов на C++

WH>См выделеное. А с интерфейсом проблем нет. Его очень не плохо в дебилдере рисуют.


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

WH>А что касается C++/CLI то у меня кроме интерфейса столько делать надо что Короче в следующем проекте фреймворк, рефлекшен, емит, генерики, шаблоны и препроцессор будут задействованы на всю катушку(не или почти на всю).


Понятно. Из одной крайности в другую.

IT>>Что там будет понятно. Все навороты описаны в презентации.

WH>И что мало? Что такое революционное собирается сделать Влад?

Расширяемый компилятор, AOP во всей красе, может ещё чего.

WH>И сможет ли он сделать компилятор промышленного качества?




WH>А сколько займет это времени?


Ровно столько на сколько у него хватит энтузизизма

WH>А бета Видби будет в мае.


Бета — это не релиз. Ни один вменяемый мэнеджер не станет делать проект на бете.
Если нам не помогут, то мы тоже никого не пощадим.
Re[14]: CLI/C++
От: alexkro  
Дата: 04.01.04 01:49
Оценка:
Здравствуйте, IT, Вы писали:

Удалено избыточное цитирование



IT>Не понял, что за гон! Ты меня ни с кем случайно не спутал? Может покажешь где это я уговоривал всех ничего не менять и писать на MC++?


Re[17]: CLI/C++
От: mikа Stock#
Дата: 04.01.04 11:17
Оценка:
Здравствуйте, alexkro, Вы писали:

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


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


A>>>


IT>>Понятно. Другого я и не ожидал. Тем не менее позволю себе прокоментировать твоё гневное сообщение, дабы дать пищу для размышления другим.


A>Не нужно приписывать мне свои эмоции. Я себе подобного рода несдержанные постинги не позволяю.


A>На остальное отвечать не вижу смысла.


Эмоции эмоциями, а тебе дело пишут. Ответь хоть что-нить на них, а обижаться стоит в другом месте. moderator@rsdn.ru
Re[9]: CLI/C++
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.01.04 04:15
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Судя по презентции код на C++/CLI короче чем на шарпе дык с какого ты взял целый год тормозов на C++/CLI?


Вообще-то он про то, что раньше чем через год это чудо не появится.

WH>Короче в чем C++/CLI уступает шарпу. Только не надо размытых фраз типа шарп проще. Давай конкретно.


Да все очень просто. Все кто написал хоть мало-мальски серьезное приложение на Шарпе и С++ скажут тебе, что разница в скорости с которой можно получить работающее приложение. В С++ наворотить ошибок куда проще чем сделать что-либо путное. Отсюда требуется куда более акуратное и качественное программирование. Плюс скорость компиляции и отладки.

Хотя о чем я?... У тебя же ошибок не бывает, а пишишь ты со скоростью пулемета. Но не все же такие гении?
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: CLI/C++
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.01.04 18:04
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>
WH>#if   defined(__MY_COOL_COMPILER)
WH>#define mixin __declspec(built_in) struct 
WH>#elif defined(__HIS_COOL_COMPILER)
WH>#define mixin __built_in struct 
...
WH>


Тебе самому это не страшно читать?

WH>А интерфейсы ИМХО давно пора в С++ стандарт внести.


Вот только комитет и страуструп считают иначе.

WH>И от куда компилятор об этом узнает? Уж не из факта неследования от IEditable ли? А если бедет интерфейс ISuperEditable?


Ты не понял главного. Вся нужная информация задается декларативно. Просто весь обвязочный код выносится из рабочего и достраивается компилятором (вернее его расширениями) во время компиляции (вернее на первых стадиях).

Это нечто вроде шаблонов, но намного более гибких. Ты можешь просто перестраивать код, а не мытариться в рамках одной концепции.

IT>>И сохранял лог, если произошло исключение неизвестного типа:

WH>Пред и пост условия... старо как мир вот только почемуто языки с ними не прижились. Хотя иногда может быть удобно.

Проблема в том, что таких языков по сути и небыло, т.е. те что были не выдерживали критики по базовым вопросам.

WH>Круто

WH>А атрибут на возвращаемое значение как повесть.

Хреново ты Шарп знаешь.
[return: NotNull]
object Test()
{
  ...
     // Здесь будет ошибка при компиляции или в рантайме если 
     // при компиляции невозможно определить что возвратит функция.
  return null;
}


WH>Опять. С какой базой? Через какого провайдера?


Ну, с той что задана в глобальном атрибуте, например.

WH>В следующем стандатре С++ можно будет делать так


Что с того толку? Все равно море ручного кодирования. Причем везде и всегда. Плюс глюки от примитивных ошибок и нечитаемый код.....

WH>Реализуйте а там видно будет.


Обязательно.

WH> Но мучают меня смутные сомненья что не все так безоблачно как ты рисуешь.


Кто бы спорил.

WH>Он учил меня не комбинации наследования и шаблонов(хотя и этому тоже), а получению информации о типах в время компиляции и генерации на ее основе кода.


Лучше бы он почитал про OpenC++. Глядишь весь этот огород и не стал бы городить.

WH> Чем я давно и с толстым удовольствиет пользуюсь. И еще надеюсь что в следуещей версии С++ можно будет получить больше информации.


Это примитив и детские игры. Серьезных вещей так не добиться. Все будет громоздко и неполноценно.

WH>Так. Все. Завтра сажаем тебя за этот компьютер, даем в руки тот самый васик и заставляем тебя переписывать на нем RSDN.


Он уже на Шарпе.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: CLI/C++
От: orangy Россия
Дата: 06.01.04 18:16
Оценка:
Здравствуйте, IT, Вы писали:

Не вдаваясь в полемику рекомендую почитать блог Саттера, если конечно еще не...
... << RSDN@Home 1.1.2 beta 2 >>
"Develop with pleasure!"
Re[14]: CLI/C++
От: Lloyd Россия  
Дата: 06.01.04 18:39
Оценка:
Здравствуйте, VladD2, Вы писали:

WH>>А атрибут на возвращаемое значение как повесть.


VD>Хреново ты Шарп знаешь.

VD>
VD>[return: NotNull]
VD>object Test()
VD>{
VD>  ...
VD>     // Здесь будет ошибка при компиляции или в рантайме если 
VD>     // при компиляции невозможно определить что возвратит функция.
VD>  return null;
VD>}
VD>


Ты не понял. Он на значение хотел.
... << RSDN@Home 1.1.2 beta 1 >>
Re[15]: CLI/C++
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.01.04 19:41
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Ты не понял. Он на значение хотел.


А какой в этом смысл? Атрибуты — это метаданные, а не данные. У значения могут быть просто свои свойства. Ну, а с классом можно и атрибут ассоциировать.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: CLI/C++
От: Аноним  
Дата: 08.01.04 17:17
Оценка:
Ребят, да вы что обалдели?

Парень спросил про дату выхода CLI/C++. IT ему ответил, (пусть даже не точно, не так это важно). Тут WolfHound уведел парня, пишушего на C#, который что-то сказал про C++. И вместо того, чтобы поправить дату WolfHound'а понесло...

На мой взгляд весь комизм в том, что примеры С и С# оба по 6 строчек (если в C# не считать открывающих и закрывающих скобок).

Но WolfHound так ретиво ратует за краткость, что не поленился нафигарить чесяток огромных постов. Мля, где логика?
Re[13]: CLI/C++
От: IT Россия linq2db.com
Дата: 09.01.04 05:55
Оценка:
Здравствуйте, orangy, Вы писали:

O>Не вдаваясь в полемику рекомендую почитать блог Саттера, если конечно еще не...


Спасибо за ссылочку. Собственно вот ответ на мой вопрос. И как я и ожидал, ничего вразумительного. Только словестная шелуха о заботе о пользователе Видете ли я буду в полном недоумении, когда буду смотреть на код и думать "А в какой же это куче создан этот объект"?
Если нам не помогут, то мы тоже никого не пощадим.
Re: CLI/C++
От: bt  
Дата: 09.01.04 12:56
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Добрый день!


А>У меня возник простой вопрос: КОГДА ВЫЙДЕТ CLI/C++,

А>то есть это будет реализовано в новой версии студии?
А>И в каком году, в каком месяце можно ждать его появления....

А>Спасибо — С новым годом


После прочтения драфта у меня сложилось впечатление, что программирование на CLI/C++ под .Net
сродни удалению гланд через .... автогеном.
Re[14]: CLI/C++
От: mihailik Украина  
Дата: 09.01.04 16:39
Оценка:
IT>>>Не надо даже объявлять соответсвующие методы, компилятор всё что надо достроит сам.
WH>>А ну точно круто и какую из энного колличеста имеплементаций брать?

IT>Какая больше подходит. Решит это компилятор, который будет натренирован тобой.


Выглядит полным бредом, или я недопонял

Ну-ка побудь на месте компилятора и подбери чего-нибудь подходящего на IDisposable. И как это "тренировать" я что-то совсем недорубаю.
... << RSDN@Home 1.1.0 stable >>
Re[15]: CLI/C++
От: IT Россия linq2db.com
Дата: 09.01.04 18:46
Оценка:
Здравствуйте, mihailik, Вы писали:

IT>>Какая больше подходит. Решит это компилятор, который будет натренирован тобой.


M>Выглядит полным бредом, или я недопонял




M>Ну-ка побудь на месте компилятора и подбери чего-нибудь подходящего на IDisposable.


Вот кстати, тоже хороший пример. Всё элементарно. Смотрим, есть ли у нас мемберы нашего класса, которые имплементируют IDisposable. Если есть и программист сам не определил Dispose в классе, то строим такой метод, по всем правилам освобождая в нём мемберы с IDisposable. Вот код
Автор: IT
Дата: 15.08.02
, который использует рефлекшин, всё что нужно сделать — это перенести это в генератор, который будет вызван компилятором. На эмите такие вещи делаются на раз.

M>И как это "тренировать" я что-то совсем недорубаю.


После того как компилятор распарсил код и создал дерево объектов и кода у себя в памяти, он должен вызвать моё расширение, которое сможет проанализировать и при надобности изменить это дерево. Затем возможно ещё раз синтаксический анализ и генерация исполняемого кода. Что-то подобное сделано в XC# (ссылочка где-то здесь пробегала). Основная проблема, как я понимаю, это именно взаимодействие компилятора и расширений. Если это не закладывать в компилятор с самого начала, то шансов на успех практически никаких.

Второй вариант — это что-то типа препроцессора. Перед тем как вызвать стандартный компилятор код отдаётся такому препроцессору, который самостоятельно осуществляет парсинг и добавляет в код недостающую реализацию. Затем изменённый код отдаётся стандартному компилятору.
Если нам не помогут, то мы тоже никого не пощадим.
Re[2]: CLI/C++
От: lkj www.7-zip.org
Дата: 09.01.04 21:54
Оценка:
Здравствуйте, IT, Вы писали:

IT>Manager C++ существует уже почти два года — Управляемый C++
Автор(ы): Игорь Ткачёв
Дата: 05.02.2002
До сих пор трудно ответить на вопрос, что такое .Net. Эта статья, являясь введением в Managed Extensions for C++ (MC++), содержит описание ряда смелых экспериментов советских ученых, наконец-то позволяющих понять, что же такое .Net вообще, и место MC++ в нем, в частности.


Попробовал скомпилировать C++ проект для .NET (MSVС++ 7.1) и заметил, что вызов виртуальной функции выполняется примерно 700 тактов.
Можно это как-нибудь ускорить?
Re[16]: CLI/C++
От: mihailik Украина  
Дата: 10.01.04 09:31
Оценка:
IT>строим такой метод, по всем правилам освобождая в нём мемберы с IDisposable. Вот код
Автор: IT
Дата: 15.08.02
, который использует рефлекшин, всё что нужно сделать — это перенести это в генератор, который будет вызван компилятором. На эмите такие вещи делаются на раз.


А порядок освобождения? А блокировки? А исключения? Для IDisposable такая самодеятельность не прокатит.

M>>И как это "тренировать" я что-то совсем недорубаю.


IT>После того как компилятор распарсил код и создал дерево объектов и кода у себя в памяти, он должен вызвать моё расширение, которое сможет проанализировать и при надобности изменить это дерево.


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

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


По моим очень дилетантским прикидкам, метапрограммирование компиляторов это вопрос, которому нужна серьёзная теоретическая проработка. Ну уровне какой-нибудь докторской диссертации или круче. Народной инициативой тут, никак не обойдёшься.
... << RSDN@Home 1.1.0 stable >>
Re[15]: CLI/C++
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 10.01.04 20:17
Оценка:
Здравствуйте, Шахтер, Вы писали:

Ш>Попробуйте, в качестве упражнения, сделать хороший текстовый редактирующий элемент, такого же класса или лучше, как в студии. Если я правильно понял, Янус использует Scintillе-у? А что, свой было влом сделать?


Зачем?
... << RSDN@Home 1.1.2 beta 2 (mobile station) >>
AVK Blog
Re[16]: CLI/C++
От: Шахтер Интернет  
Дата: 10.01.04 21:26
Оценка:
Здравствуйте, AndrewVK, Вы писали:

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


Ш>>Попробуйте, в качестве упражнения, сделать хороший текстовый редактирующий элемент, такого же класса или лучше, как в студии. Если я правильно понял, Янус использует Scintillе-у? А что, свой было влом сделать?


AVK>Зачем?


Не понял вопроса. Зачем что? Сделать хороший редактирующий элемент в качестве упражнения? Для того, чтобы понять всё нищету фреймворков. Для интереса, посмотрите сорцы Scintille-ы. Любой апологет хорошего стиля программирования, смартпойнтеров и.т.п. умрёт на месте, увидев те простыни членов в классах, которые там есть. Если же вы имеете ввиду, зачем свой редактирующий элемент для Януса, ну, например, для виртуального пространства, которое я так люблю и для многих других хороших вещей, которые в Scintille отсутсвуют. Между прочим, отсутствие хорошего компонента редактирования, причем хорошо написанного -- большой пробел Открытых Сырков.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[17]: CLI/C++
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 10.01.04 22:03
Оценка:
Здравствуйте, Шахтер, Вы писали:

Ш>>>Попробуйте, в качестве упражнения, сделать хороший текстовый редактирующий элемент, такого же класса или лучше, как в студии. Если я правильно понял, Янус использует Scintillе-у? А что, свой было влом сделать?


AVK>>Зачем?


Ш>Не понял вопроса. Зачем что?


Переписывать сцинтиллу.

Ш>Сделать хороший редактирующий элемент в качестве упражнения?


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

Ш> Для интереса, посмотрите сорцы Scintille-ы.


Я их видел и даже запускал под отладкой.

Ш> Любой апологет хорошего стиля программирования, смартпойнтеров и.т.п. умрёт на месте, увидев те простыни членов в классах, которые там есть.


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

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


Чего это?

Ш> и для многих других хороших вещей, которые в Scintille отсутсвуют.


ПОка что все запросы она покрывает с лихвой.

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


Закрытых тоже.
... << RSDN@Home 1.1.2 beta 2 (mobile station) >>
AVK Blog
Re[15]: CLI/C++
От: IT Россия linq2db.com
Дата: 11.01.04 05:10
Оценка:
Здравствуйте, Шахтер, Вы писали:

IT>>Боюсь что в 98% современных приложений адресная арифметика может пригодится только для прохождения интервью на работу при решении задачки типа переливания строки из пустого в порожнее.


Ш>Современные приложения далеко не ограничиваются тем, чем вы занимаетесь.


К сожалению, всё это многообразие сосредоточено в пяти процентах от общего числа задач, стоящих перед программистами. Остальные 95% это автоматизация той или иной деятельности, которая автоматизируется чем не попадя, начиная от 1C и заканчивая ассемблером.

IT>>Настоящие же индейцы во всю используют смарт-поинтеры и бьют по рукам любого в тиме, кто использует голые указатели. И очень этим гордятся.


Ш>Я, как настоящий истребитель индеёцев, бью по рукам всех в тиме, у кого ручонки тянуться к stl boost loki и.т.п. лабуде.


Я хоть и не любитель stl'ев, но всяческие крайности тоже не уважаю, unless при этом приводятся вполне весомые аргументы, которые я предпочетаю услышать как настоящий истребитель истребителей индейцев

IT>>Вообще же указатели в C++ — это дремучее наследие C, ничего больше.


Ш>Указатели -- один из краеугольных камней C/C++. Тот, кто не умеет ими пользоваться, просто не владеет основами языка, таким людям надо выбирать себе языки попроще, C#, например.


Представь себе, люди пишут вполне достойный код на C++ и при этом не используют указателей. Что касается C, да, там это камень... краеугольный. Понимание механизмов адресной арифметики само по себе весьма полезно, кто бы спорил, 10 лет назад это было даже обязательным, чтобы называться программистом. Но сегодня знание того, что "short *p; p++;" смещает указатель на 2 байта, а "short **p; p++;" на 4, слабо тебе поможет при разработке системы класса предприятия. Здесь нужно знать побольше, причём на много.

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


Да ну? Если не устраивает autoptr, то аналогичный смарт поинтер пишеться за пол часа на коленке. Причём потеря производительности в этом случае будет напрямую зависить только от диаметра кривизны рук разработчика.

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

Ш>Попробуйте, в качестве упражнения, сделать хороший текстовый редактирующий элемент, такого же класса или лучше, как в студии. Если я правильно понял, Янус использует Scintillе-у? А что, свой было влом сделать?

Если мне понадобится хороший тесктовый редактирующий элемент, то я его куплю (open source проекты не в счёт). Будет на много дешевле и быстрее. Писать я его буду только как разработчик библиотеки компонентов.

Ш>Тут надо понимать одну вещь. Человеческий мозг -- гораздо более мощное орудие, чем любой компилятор. Поэтому попытка избавиться от необходимости думать, спихивая свою работу тупой машине, контрпродуктивна.


Человек ещё и хороший бегун, но что-то мало кому приходит в голову бегать на работу каждый день по 10-50 километров. Почему-то люди предпочитают ездить на автобусах, метро и прочих тупых автомобилях.

Ш>Это прокатывает только для определённых классов задач, где можно ограничиться несложным комбинированием простых рецептов. Это то, что можно условно назвать Макдональдс. У Джоела об этом хорошо было написано. Но существование Макдональдсов нисколько не отменяет существование дорогих и качественных ресторанов, где работают не повара, окончившие 21-дневные курсы, а истинные мастера своего дела. Кстати, куда вы водите свою любимую женщину? Неужели в Макдональдс?


Насколько мне известно в некоторых столицах мира Макдональдс — это элитный ресторан

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

Ш>Насколько я понимаю, MC++ был скороделкой, его вполне можно при этом использовать. Что будет с выходом новой версии C++/CLI и как оно будет выглядеть -- ещё вилами на воде писано. Мне кажеться, лучше дождаться релиза, а тогда и обсуждать, что удачно, что нет.


Согласен. Но что-то мне подсказывает, что handles в нём так и останутся
Если нам не помогут, то мы тоже никого не пощадим.
Re[14]: CLI/C++
От: WolfHound  
Дата: 11.01.04 10:39
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Тебе самому это не страшно читать?

Нет. Это стандартная практика при создании кросс-компиляторных библиотек.

VD>Ты не понял главного. Вся нужная информация задается декларативно. Просто весь обвязочный код выносится из рабочего и достраивается компилятором (вернее его расширениями) во время компиляции (вернее на первых стадиях).

Нет это ты не понял.
class MyClass 
    :IEditable
    ,ISuperEditable
{
    int    ID          { get; }
    string Description { get; set; }
}

Что случатся если оба интерфейса захотят реализовать пустые проперти про своему?

VD>Это нечто вроде шаблонов, но намного более гибких. Ты можешь просто перестраивать код, а не мытариться в рамках одной концепции.

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

WH>>Опять. С какой базой? Через какого провайдера?

VD>Ну, с той что задана в глобальном атрибуте, например.
К какому из десятка серверов в сети цепляться? К какой базе в сервере?
Короче допустим провайдер известен это ADO.NET. Надо подцепиться к серверу [конфиг его знает] на компе [конфиг его знает] к базе [конфиг ее знает] и что-то сделать с таблицей CoolTable ессно это должна быть транзакция.

VD>Что с того толку? Все равно море ручного кодирования. Причем везде и всегда. Плюс глюки от примитивных ошибок и нечитаемый код.....

Влад не обобщай свои проблемы на всех. ATL+stl+boost+20К кода(в основном для того чтобы интерфейс ATL привести к человеческому виду) и получается такой код
Как видишь данный код мало отличается от того что ты предлагаешь
STDMETHODIMP CSRCOMM_OPCGroup::SetDatatypes
(/* [in] */                        DWORD dwCount
,/* [size_is][in] */            OPCHANDLE *phServer
,/* [size_is][in] */            VARTYPE *pRequestedDatatypes
,/* [size_is][size_is][out] */    HRESULT **ppErrors
)
try
{
    scoped_lock(this);//Декларируем что данный метод надо синхронизировать
    
    com_check        (owner_, E_FAIL);//Декларируем проверки
    com_check_arg    (dwCount>0);//Эта кидает E_INVALIDARG
    com_check_ptr    (phServer);//Эти E_POINTER
    com_check_ptr    (pRequestedDatatypes);
    com_check_ptr    (ppErrors);

    com_auto_arr<HRESULT>    hr(dwCount);//Елси память не выделена то вылетит E_OUTOFMEMORY
    HRESULT res=S_OK;//Дальше чистая логика
    for(DWORD i=0;i<dwCount;++i)
    {
        if(ref_t<CSRCOMM_OPCGroupItem> item=get_item(phServer[i]))
        {
            if(FAILED(item->set_type(pRequestedDatatypes[i])))
                hr[i]=OPC_E_BADTYPE;
            else
                hr[i]=S_OK;
        }
        else
            hr[i]=OPC_E_INVALIDHANDLE;
        if(FAILED(hr[i]))
            res=S_FALSE;
    }
    //До этой строчки код полностью exception safe
    //А дальше им просто взяться не откуда
    *ppErrors    =hr.detach();
    return res;
}
com_catch_all()//Тут ловим исключения _com_error, достаем из него HRESULT и возвращаем

Ну повесишь ты проверки на параметры, а синхронизацию на функцию и что изменится? Проверки переместятся из тела функции в ее описание.

VD>Лучше бы он почитал про OpenC++. Глядишь весь этот огород и не стал бы городить.

Ну что я могу сказать. Не нравится, не ешь.
А что касается OpenC++ то на кой мне сдалася еще один препроцессор? А отлаживать я как это буду?
... << RSDN@Home 1.1 beta 2 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[14]: CLI/C++
От: WolfHound  
Дата: 11.01.04 10:39
Оценка:
Здравствуйте, IT, Вы писали:

IT>Боюсь что в 98% современных приложений адресная арифметика может пригодится только для прохождения интервью на работу при решении задачки типа переливания строки из пустого в порожнее. Настоящие же индейцы во всю используют смарт-поинтеры и бьют по рукам любого в тиме, кто использует голые указатели. И очень этим гордятся.

А я спорю? Сам всех про рукам бью если вижу указатель без смартпоинтера.

IT>Какая больше подходит. Решит это компилятор, который будет натренирован тобой.

А! Ну-ну.

IT>>>Здесь я не просто хочу от компилятора добавления соответсвующих методов интерфейса, но так же реализации свойств. Да не просто так, а что бы свойства только возвращали int и string, а внутренне были представлены классами EditableInt32 и EditabelString.

WH>>И от куда компилятор об этом узнает? Уж не из факта неследования от IEditable ли? А если бедет интерфейс ISuperEditable?
IT>Ну сам подумай, откуда он может это узнать? Откуда ты ему скажешь, оттуда он и узнает. Можно из моего интерфейса, можно из твоего. Они между прочим, совсем не обязаны быть связанными между собой наследованием или чем-то ещё, но вполне оба могут выполнять нужные функции. Можно прикрутить атрибуты, можно наследование. Всё сгодится. Если будет возможность во время компиляции почитать метадату и обработать её средствами превышающими возможности используемого языка, то возможности самого языка от этого только возрастут, за счёт заимствования этой мощи у этих же средств. Типа такая рекурсия, ну ты понял
Я только одного не понял что будет если оба интерфейса захотят реализовать не реализованые протерти?

Ой чую что у народа с этой игрушкой непоняток будет не меньше чем с С++. Они будут другими но их будет не меньше.

ЗЫ МемориЛик: Злое, мифическое существо по словам дотнетчиков обитающие в каждой программе на С++.
... << RSDN@Home 1.1 beta 2 >>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[15]: CLI/C++
От: Хитрик Денис Россия RSDN
Дата: 11.01.04 11:09
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Я только одного не понял что будет если оба интерфейса захотят реализовать не реализованые протерти?


Стоит ошибку компиляции выдать, имхо, если разработчик не позаботился заранее...
Правила нашего с вами форума.
Как правильно задавать вопросы. © 2001 by Eric S. Raymond; перевод: © 2002 Валерий Кравчук.
Re[18]: CLI/C++
От: Шахтер Интернет  
Дата: 11.01.04 17:48
Оценка:
Здравствуйте, AndrewVK, Вы писали:

Ш>> Любой апологет хорошего стиля программирования, смартпойнтеров и.т.п. умрёт на месте, увидев те простыни членов в классах, которые там есть.


AVK>Ну и что в этом хорошего? Вот оказалось к примеру что сцинтилла не юникодная, а чтобы переделать ее на уникод надо перелопатить гору кода. ВОт тебе и результат криворукости.


Я не говорю, что это хорошо. Тем более стимул сделать по своему и хорошо. И дать образец хорошего программирования.

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


AVK>Чего это?


Возможность перемещать курсор вдоль строки в любую позицию.

Ш>> и для многих других хороших вещей, которые в Scintille отсутсвуют.


AVK>ПОка что все запросы она покрывает с лихвой.


Не покрывает. Код писать на ней очень неудобно. Там какие-то проблемы с отступами появляются. Я пишу код в студии, а потом copy/past ом переношу в Янус. Не очень удобно.

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


AVK>Закрытых тоже.


Ага.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[15]: CLI/C++
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.01.04 18:05
Оценка:
Здравствуйте, WolfHound, Вы писали:

VD>>Тебе самому это не страшно читать?

WH>Нет. Это стандартная практика при создании кросс-компиляторных библиотек.

Ну, тогда какие могут быть вопросы.

VD>>Лучше бы он почитал про OpenC++. Глядишь весь этот огород и не стал бы городить.

WH>Ну что я могу сказать. Не нравится, не ешь.

Не ем. И другим советую не совать в ром что попало.

WH>А что касается OpenC++ то на кой мне сдалася еще один препроцессор? А отлаживать я как это буду?


Насклько я понимаю он генерирует С++-код. Ты не умеешь отлаживать С++ кода? Или ты прос сам герератор? Герератор отлаживают разработчики.

А вот отлаживать шаблоны бывает ой как не просто. Их даже писать менее удбно чем обычный код. Ведь редактор не знает ничего о параметрах типа и стало быть все комплит-ворды и т.п. идут лесом.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: CLI/C++
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.01.04 18:05
Оценка:
Здравствуйте, mihailik, Вы писали:

IT>>После того как компилятор распарсил код и создал дерево объектов и кода у себя в памяти, он должен вызвать моё расширение, которое сможет проанализировать и при надобности изменить это дерево.


M>Ну да, то есть для каждого интерфейса нужно писать расширение.


Они получаются универсальными. Это нечто вроде шаблонов в XSLT. Ты пишешь преобразование и применяешь его где нужно.

M> Тогда понятно. Тоже вариант, только такое себе. Как-то не очень вдохновляет


А альтернатива есть?

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


M>По моим очень дилетантским прикидкам, метапрограммирование компиляторов это вопрос, которому нужна серьёзная теоретическая проработка. Ну уровне какой-нибудь докторской диссертации или круче. Народной инициативой тут, никак не обойдёшься.


А я еще ни разу не видел чтобы в жизнь нкую идею воплтил доктор. Обычно они теорию толкают, а реализацию делают простые смертные (инженеры, программисты). Теоритически все уже довольно ясно. Есть даже некоторые реализации (OpenC++, например). Так что...
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: CLI/C++
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.01.04 18:05
Оценка:
Здравствуйте, Шахтер, Вы писали:

Ш>Не понял вопроса. Зачем что? Сделать хороший редактирующий элемент в качестве упражнения? Для того, чтобы понять всё нищету фреймворков. Для интереса, посмотрите сорцы Scintille-ы. Любой апологет хорошего стиля программирования, смартпойнтеров и.т.п. умрёт на месте, увидев те простыни членов в классах, которые там есть.


Я писал свой контрол (для КОМ-а) редактирующий код. Он был менее крут нежели Сентила, но тем не менее проблем с кривостью кода не испытывал. Все было по-максимуму безопастно и прилично.

И вообще, как кривость одной реализации может доказывать неверность всего класса или неприенимость чего либо? Ну, должна же быть логика в рассуждениях?

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


Это уже реализовано в Сентиле.

Ш> и для многих других хороших вещей, которые в Scintille отсутсвуют.


А может проще их туда добавить?

Ты представляешь себе объем кода который нужно написать чтобы получить приличный редактор?

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


А причем тут это? Мы что апологеты Открытых Сурков?
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: CLI/C++
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.01.04 18:06
Оценка:
Здравствуйте, IT, Вы писали:

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


IT>Да ну? Если не устраивает autoptr, то аналогичный смарт поинтер пишеться за пол часа на коленке. Причём потеря производительности в этом случае будет напрямую зависить только от диаметра кривизны рук разработчика.


Проблема только в том, что не всегда все можно заменить в самрт-поинтры, да и самрт-поинтры могут пересекаясь давать странные результаты. Но единственым способом избежать ликов в большом приложении написанных на С++, это создать автоматизированную систему их обнаружения. Мы по крайней мере именно так сделали. А вот на Шарпе даже добиться лика трудновато.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: CLI/C++
От: Шахтер Интернет  
Дата: 11.01.04 18:25
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Осталось только доказать, что человеческий мозг, программирование и инфраструктура общественного питания подчиняются одинаковым законам и аналогии между ними являются прямыми (уместными). А пока это, извини, демагогия. Не удивлюсь, если ответом на этот послание кто-нибудь сделает еще одну некоррекнтную аналогию.


Ну, считай демагогией.

VD>Что же касается мозга, то его возможности ограничены.


Осмелюсь заметить, что возможности компьютера ещё более ограничены.

VD>И всю рутинну нужно сваливать на компьютеры. Они собственно для этого и созданы.


Правильно.

VD>А мозг должен весь свой потенциал выкладывать там где компьютеры бессильны. Изнаешь, что? Я пока не вижу ситуации при которой для мозга не будет серьезной нагрузки в следствии того, что все задачи переложены на компьютер.


И это правильно.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[18]: CLI/C++
От: Шахтер Интернет  
Дата: 11.01.04 18:25
Оценка:
Здравствуйте, VladD2, Вы писали:

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


VD>Это уже реализовано в Сентиле.


Да ну? Что то никак не получается зайти курсором за конец строки.

Ш>> и для многих других хороших вещей, которые в Scintille отсутсвуют.


VD>А может проще их туда добавить?


VD>Ты представляешь себе объем кода который нужно написать чтобы получить приличный редактор?


Да, хорошо представляю.

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


VD>А причем тут это? Мы что апологеты Открытых Сурков?


Существует проблема. Есть задача, которую хотелось бы иметь решённой. Грубо говоря, есть спрос на рынке. Именно потому, что её решение достаточно дорогое в смысле требуемых усилий. А с другой стороны, есть, скажем, редактор студии. Он меня вполне удовлетворяет. А вставить его в своё приложение я не могу. И вы в Янус не можете.
... << RSDN@Home 1.1.0 stable >>
В XXI век с CCore.
Копай Нео, копай -- летать научишься. © Matrix. Парадоксы
Re[19]: CLI/C++
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.01.04 20:12
Оценка:
Здравствуйте, Шахтер, Вы писали:

Ш>Да ну? Что то никак не получается зайти курсором за конец строки.


Это насраивается. По крайней мере я вроде читал в фича-листе.

Ш>Да, хорошо представляю.


Значит не очень, раз такие вещи говоришь.

Ш>Существует проблема.


Только в твоей голове.

Ш> Есть задача, которую хотелось бы иметь решённой.


Только тебе.

Ш> Грубо говоря, есть спрос на рынке.


Спрос удовлетворен.

Ш> Именно потому, что её решение достаточно дорогое в смысле требуемых усилий.


Глупость и полная алогичность. Спрос никак не может определять дороговизну и сложность производства.

Ш> А с другой стороны, есть, скажем, редактор студии. Он меня вполне удовлетворяет. А вставить его в своё приложение я не могу. И вы в Янус не можете.


И? Нам более чем достаточно Синтилы.

В общем, я так и не понял причем тут синтила. Ты про сабж то не забыл?
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: CLI/C++
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.01.04 20:12
Оценка:
Здравствуйте, Шахтер, Вы писали:

Ш>Я не говорю, что это хорошо. Тем более стимул сделать по своему и хорошо. И дать образец хорошего программирования.


Все же ты плохо представляешь объем работ. Такие вещи в качестве примера не делаются.

Ш>Не покрывает. Код писать на ней очень неудобно. Там какие-то проблемы с отступами появляются. Я пишу код в студии, а потом copy/past ом переношу в Янус. Не очень удобно.


И какие же проблемы?
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: CLI/C++
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.01.04 20:12
Оценка:
Здравствуйте, Шахтер, Вы писали:

VD>>Что же касается мозга, то его возможности ограничены.


Ш>Осмелюсь заметить, что возможности компьютера ещё более ограничены.


Они не "ещё более ограничены", они другие. Причем компьютерные возможности — это всегда вопрос денег и времени. А вот возможности человеческого мозга ограничены принципиальными особенностями. И взваливать на них работу которою им можно не делать прото бессмысленно.

VD>>И всю рутинну нужно сваливать на компьютеры. Они собственно для этого и созданы.


Ш>Правильно.


А к чему ты призываешь? Прочитай свои слова еще раз. Может ты хотел сказать нечто другое?

VD>>А мозг должен весь свой потенциал выкладывать там где компьютеры бессильны. Изнаешь, что? Я пока не вижу ситуации при которой для мозга не будет серьезной нагрузки в следствии того, что все задачи переложены на компьютер.


Ш>И это правильно.


Ну, тогда не понятно как может быть правильно это:

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


Ведь это напрямую противоричит моим словам. Всю работу которую можно спихнуть на компьютер — нужно на него спихивать. Отсюда и компиляторы должны быть интелектуальнее, и языки более простыми и информативными.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: CLI/C++
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 11.01.04 20:25
Оценка:
Здравствуйте, Шахтер, Вы писали:

AVK>>Ну и что в этом хорошего? Вот оказалось к примеру что сцинтилла не юникодная, а чтобы переделать ее на уникод надо перелопатить гору кода. ВОт тебе и результат криворукости.


Ш>Я не говорю, что это хорошо. Тем более стимул сделать по своему и хорошо.


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

Ш>И дать образец хорошего программирования.


Денег за образец заплатишь?

AVK>>Чего это?


Ш>Возможность перемещать курсор вдоль строки в любую позицию.


В янусе без надобности.

AVK>>ПОка что все запросы она покрывает с лихвой.


Ш>Не покрывает. Код писать на ней очень неудобно.


А янус и не предназначен для написания кода.
... << RSDN@Home 1.1.2 beta 3 (mobile station) >>
AVK Blog
Re[20]: CLI/C++
От: Sinclair Россия https://github.com/evilguest/
Дата: 11.01.04 21:41
Оценка:
Здравствуйте, VladD2, Вы писали:
VD>И какие же проблемы?
Да известная проблема с тем, что сцинтилла думает, что таб=2 спейса, и еще имеет наглость при автоинденте делать смарт таб. А эксплорер (каковой, собсно, используется в качестве основного браузера результата) думает, что таб=4 спейса. И мы имеем WYSINWYG. Единственный способ — готовить текст там, где либо нет такого умного автоиндентирования, либо таб=4 спейса. А потом пейстить в жанусь.
... << RSDN@Home 1.1.2 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[21]: CLI/C++
От: VladD2 Российская Империя www.nemerle.org
Дата: 11.01.04 22:42
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Да известная проблема с тем, что сцинтилла думает, что таб=2 спейса, и еще имеет наглость при автоинденте делать смарт таб.


А ты уверен, что это Синтила? Может это просто у нас не сделана настройка? Не думаю, что синтила не имеет подобной настройки.

S> А эксплорер (каковой, собсно, используется в качестве основного браузера результата) думает, что таб=4 спейса.


А тут вообще нужно бы в пробелы заменять, как на сайте в статьях (если не ошибаюсь).

S> И мы имеем WYSINWYG. Единственный способ — готовить текст там, где либо нет такого умного автоиндентирования, либо таб=4 спейса. А потом пейстить в жанусь.


Ну, или писать все в одном месте (в той же Синтиле). Тогда индент будет одинаковым.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: CLI/C++
От: Sinclair Россия https://github.com/evilguest/
Дата: 12.01.04 00:11
Оценка:
Здравствуйте, VladD2, Вы писали:

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


S>>Да известная проблема с тем, что сцинтилла думает, что таб=2 спейса, и еще имеет наглость при автоинденте делать смарт таб.


VD>А ты уверен, что это Синтила? Может это просто у нас не сделана настройка? Не думаю, что синтила не имеет подобной настройки.

Неа, не уверен. Скорее всего, нет какой-то настройки.
VD>А тут вообще нужно бы в пробелы заменять, как на сайте в статьях (если не ошибаюсь).
Мысль сия не лишена.

VD>Ну, или писать все в одном месте (в той же Синтиле). Тогда индент будет одинаковым.

НЕТ! Не будет одинакового индента. Re[8]: tab при вводе сообщений. Хочу фичу
Автор: Sinclair
Дата: 28.12.03
... << RSDN@Home 1.1.2 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[23]: CLI/C++
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 12.01.04 07:13
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Неа, не уверен. Скорее всего, нет какой-то настройки.


Есть такая настройка.
... << RSDN@Home 1.1.2 beta 2 >>
AVK Blog
Re[24]: CLI/C++
От: Sinclair Россия https://github.com/evilguest/
Дата: 12.01.04 08:15
Оценка:
Здравствуйте, AndrewVK, Вы писали:
AVK>Есть такая настройка.
Я имел в виду что она не воспользовата.
... << RSDN@Home 1.1.2 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[24]: CLI/C++
От: Sinclair Россия https://github.com/evilguest/
Дата: 12.01.04 08:16
Оценка:
Здравствуйте, AndrewVK, Вы писали:
AVK>Есть такая настройка.
Я имел в виду что она не воспользовата.
... << RSDN@Home 1.1.2 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: CLI/C++
От: Lloyd Россия  
Дата: 12.01.04 08:56
Оценка:
Здравствуйте, lkj, Вы писали:

lkj>Попробовал скомпилировать C++ проект для .NET (MSVС++ 7.1) и заметил, что вызов виртуальной функции выполняется примерно 700 тактов.

lkj>Можно это как-нибудь ускорить?

Какой вызов? Первый?
... << RSDN@Home 1.1.2 beta 1 >>
Re[15]: CLI/C++
От: Lloyd Россия  
Дата: 12.01.04 09:12
Оценка:
Здравствуйте, Шахтер, Вы писали:

Ш>Тут надо понимать одну вещь. Человеческий мозг -- гораздо более мощное орудие, чем любой компилятор. Поэтому попытка избавиться от необходимости думать, спихивая свою работу тупой машине, контрпродуктивна.


Если уж приводить аналогию с человеческим мозгом, то не следует забывать того, что мозг тоже "спихивает" свою работу "тупой машине" (рефлексы, моторика, подсознание, интуиция и т.д.).
... << RSDN@Home 1.1.2 beta 1 >>
Re[18]: CLI/C++
От: Lloyd Россия  
Дата: 12.01.04 09:20
Оценка:
Здравствуйте, VladD2, Вы писали:

M>>По моим очень дилетантским прикидкам, метапрограммирование компиляторов это вопрос, которому нужна серьёзная теоретическая проработка. Ну уровне какой-нибудь докторской диссертации или круче. Народной инициативой тут, никак не обойдёшься.


VD>А я еще ни разу не видел чтобы в жизнь нкую идею воплтил доктор. Обычно они теорию толкают, а реализацию делают простые смертные (инженеры, программисты). Теоритически все уже довольно ясно. Есть даже некоторые реализации (OpenC++, например). Так что...


С++ чем не пример.
... << RSDN@Home 1.1.2 beta 1 >>
Re[18]: CLI/C++
От: is  
Дата: 12.01.04 11:27
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А я еще ни разу не видел чтобы в жизнь нкую идею воплтил доктор.


Дык вроде C with classes Страуструпом реализован. Или он тогда ещё не был доктором и писал как раз для своего диссера?
Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius — and a lot of courage — to move in the opposite direction. -- Albert Einstein
Re[4]: CLI/C++
От: lkj www.7-zip.org
Дата: 12.01.04 11:53
Оценка:
Здравствуйте, Lloyd, Вы писали:

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


lkj>>Попробовал скомпилировать C++ проект для .NET (MSVС++ 7.1) и заметил, что вызов виртуальной функции выполняется примерно 700 тактов.

lkj>>Можно это как-нибудь ускорить?

L>Какой вызов? Первый?


Нет. Делаю в цикле:

struct I1 { virtual int f1(int t) = 0; };
struct C1: public I1 { virtual int f1(int t) { return t; } };

int g1(I1 *i1)
{
int s = 0;
for (int i = 0; i < 10000000; i++)
s += i1->f1(i);
return s;
}

int main()
{
C1 c1;
return g1(&c1);
}

Выполняется раз в 100 медленнее варианта на чистом C++ или на C#.
Re[5]: CLI/C++
От: Lloyd Россия  
Дата: 12.01.04 12:32
Оценка:
Здравствуйте, lkj, Вы писали:

lkj>Выполняется раз в 100 медленнее варианта на чистом C++ или на C#.


И где здесь замеры? Или ты и вермя загрузки программы сюда плюсуешь?
... << RSDN@Home 1.1.2 beta 1 >>
Re[6]: CLI/C++
От: lkj www.7-zip.org
Дата: 12.01.04 12:40
Оценка:
Здравствуйте, Lloyd, Вы писали:

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


lkj>>Выполняется раз в 100 медленнее варианта на чистом C++ или на C#.


L>И где здесь замеры? Или ты и вермя загрузки программы сюда плюсуешь?


Замеры внешней программой.
Исполняется 7 секунд на 1 GHz CPU.
на обычном C++ исполняется за сотые доли.
Re[7]: CLI/C++
От: Lloyd Россия  
Дата: 12.01.04 12:43
Оценка:
Здравствуйте, lkj, Вы писали:

lkj>Замеры внешней программой.

lkj>Исполняется 7 секунд на 1 GHz CPU.
lkj>на обычном C++ исполняется за сотые доли.

Некорректный замер. Ты измерил не скорость управляемого кода, а скорость загрузки рантайма. Вынеси замер в код тогда и сравнивай.
... << RSDN@Home 1.1.2 beta 1 >>
Re[8]: CLI/C++
От: lkj www.7-zip.org
Дата: 12.01.04 12:53
Оценка:
Здравствуйте, Lloyd, Вы писали:

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


lkj>>Замеры внешней программой.

lkj>>Исполняется 7 секунд на 1 GHz CPU.
lkj>>на обычном C++ исполняется за сотые доли.

L>Некорректный замер. Ты измерил не скорость управляемого кода, а скорость загрузки рантайма. Вынеси замер в код тогда и сравнивай.


Итераций много. Накладные расходы не должны влиять.
В чем некорректность?
Как быстро могут выполняться вызовы виртуальных функций в программе на С++ для .NET?
И почему мой пример работает так медленно?
Re[19]: CLI/C++
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.01.04 13:04
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>С++ чем не пример.


Тем что лажа. Посмотри на описание OpenC++ — сам все поймешь.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: CLI/C++
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.01.04 13:04
Оценка:
Здравствуйте, is, Вы писали:


is>Дык вроде C with classes Страуструпом реализован. Или он тогда ещё не был доктором и писал как раз для своего диссера?


Он С++ реализовал, а не C with classes, да и то как препроцессор к С.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: CLI/C++
От: Lloyd Россия  
Дата: 12.01.04 13:11
Оценка:
Здравствуйте, lkj, Вы писали:

L>>Некорректный замер. Ты измерил не скорость управляемого кода, а скорость загрузки рантайма. Вынеси замер в код тогда и сравнивай.


lkj>Итераций много. Накладные расходы не должны влиять.

lkj>В чем некорректность?
lkj>Как быстро могут выполняться вызовы виртуальных функций в программе на С++ для .NET?
lkj>И почему мой пример работает так медленно?

Во-первых большой оверхед на загрузке нетовского рантайма.
Во-вторых первый вызов подпрограммы в управляемом коде приводит к компиляции.
В-третьих не факт, что компилятор в C++ не заменил прямой f1 вызов на прямой (не виртуальный). Он видит, что наследников больше нет и вправе это сделать. Если сделал, то кроме того мог еще и заинлайнить этот вызов, а заодно и вызов g1. Тогда и получаем, что имеем программу типа int s = 0; for (int i = 0; i < 10000000; i++)s += i; В принцыпе этот цикл можно развернуть. А развернув, обнаруживаем, что результат можно свести к int s = <что-то там>; Тут он обнаруживает, что s никто не ипользует и выбрасывает его нафик. Так что в итоге пришли к тому, что оптимизатором тело main-а может быть сведено на нет. Т.о. получаем, что ты сравниваешь время загрузки операционной системой ничего не делающей программы и время работы .net-программы.
... << RSDN@Home 1.1.2 beta 1 >>
Re[10]: CLI/C++
От: lkj www.7-zip.org
Дата: 12.01.04 14:06
Оценка:
Здравствуйте, Lloyd, Вы писали:

lkj>>Итераций много. Накладные расходы не должны влиять.

lkj>>В чем некорректность?
lkj>>Как быстро могут выполняться вызовы виртуальных функций в программе на С++ для .NET?
lkj>>И почему мой пример работает так медленно?

L>Во-первых большой оверхед на загрузке нетовского рантайма.

L>Во-вторых первый вызов подпрограммы в управляемом коде приводит к компиляции.
L>В-третьих не факт, что компилятор в C++ не заменил прямой f1 вызов на прямой (не виртуальный). Он видит, что наследников больше нет и вправе это сделать. Если сделал, то кроме того мог еще и заинлайнить этот вызов, а заодно и вызов g1. Тогда и получаем, что имеем программу типа int s = 0; for (int i = 0; i < 10000000; i++)s += i; В принцыпе этот цикл можно развернуть. А развернув, обнаруживаем, что результат можно свести к int s = <что-то там>; Тут он обнаруживает, что s никто не ипользует и выбрасывает его нафик. Так что в итоге пришли к тому, что оптимизатором тело main-а может быть сведено на нет. Т.о. получаем, что ты сравниваешь время загрузки операционной системой ничего не делающей программы и время работы .net-программы.

Ты меня за дилетанта принимаешь? Тогда посмотри ссылку на website.
Вопрос не на пустом месте возник.
Можно ли сделать программу на C++.NET 7.1 с большим количеством вызовов виртуальных функций, для которой вызов виртуальной функции выполняется быстрее 100 тактов CPU в среднем?
Re[11]: CLI/C++
От: Lloyd Россия  
Дата: 12.01.04 14:22
Оценка:
Здравствуйте, lkj, Вы писали:

lkj>Ты меня за дилетанта принимаешь? Тогда посмотри ссылку на website.

lkj>Вопрос не на пустом месте возник.
lkj>Можно ли сделать программу на C++.NET 7.1 с большим количеством вызовов виртуальных функций, для которой вызов виртуальной функции выполняется быстрее 100 тактов CPU в среднем?

using System;

namespace VirtualTest
{
    public interface IDo
    {
        void Do();
    }

    public class Do: IDo
    {
        #region IDo Members
        void IDo.Do()
        {
            Console.WriteLine();
        }
        #endregion
    }
    /// <summary>
    /// Summary description for Class1.
    /// </summary>
    class Class1
    {
        [STAThread]
        static void Main(string[] args)
        {
            IDo @do = new Do();
            @do.Do();
        }
    }
}



            @do.Do();
00000023  mov         ecx,edi 
00000025  mov         eax,dword ptr [ecx] 
00000027  mov         eax,dword ptr [eax+0Ch] 
0000002a  mov         eax,dword ptr [eax+00000094h] 
00000030  call        dword ptr [eax]


Где здесь 100 тактов?
... << RSDN@Home 1.1.2 beta 1 >>
Re[12]: CLI/C++
От: lkj www.7-zip.org
Дата: 12.01.04 14:43
Оценка:
Здравствуйте, Lloyd, Вы писали:

lkj>>Можно ли сделать программу на C++.NET 7.1 с большим количеством вызовов виртуальных функций, для которой вызов виртуальной функции выполняется быстрее 100 тактов CPU в среднем?


L>
L>            @do.Do();
L>00000023  mov         ecx,edi 
L>00000025  mov         eax,dword ptr [ecx] 
L>00000027  mov         eax,dword ptr [eax+0Ch] 
L>0000002a  mov         eax,dword ptr [eax+00000094h] 
L>00000030  call        dword ptr [eax] 
L>


L>Где здесь 100 тактов?


А где здесь C++?
Re[23]: CLI/C++
От: VladD2 Российская Империя www.nemerle.org
Дата: 12.01.04 14:57
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>А по-поводу OpenC++. Ты можешь назвать хоть один широко-распространенный продукт, написанный на нем?


Гугль спасет отца русской демократии.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: CLI/C++
От: Lloyd Россия  
Дата: 12.01.04 14:58
Оценка:
Здравствуйте, lkj, Вы писали:

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


lkj>>>Можно ли сделать программу на C++.NET 7.1 с большим количеством вызовов виртуальных функций, для которой вызов виртуальной функции выполняется быстрее 100 тактов CPU в среднем?


L>>
L>>            @do.Do();
L>>00000023  mov         ecx,edi 
L>>00000025  mov         eax,dword ptr [ecx] 
L>>00000027  mov         eax,dword ptr [eax+0Ch] 
L>>0000002a  mov         eax,dword ptr [eax+00000094h] 
L>>00000030  call        dword ptr [eax] 
L>>


L>>Где здесь 100 тактов?


lkj>А где здесь C++?


Это C#.
... << RSDN@Home 1.1.2 beta 1 >>
Re[14]: CLI/C++
От: lkj www.7-zip.org
Дата: 12.01.04 16:22
Оценка:
Здравствуйте, Lloyd, Вы писали:

lkj>>>>Можно ли сделать программу на C++.NET 7.1 с большим количеством вызовов виртуальных функций, для которой вызов виртуальной функции выполняется быстрее 100 тактов CPU в среднем?


L>Это C#.


Я не спрашивал про C#.
Я спрашивал про C++ для .NET
Re[15]: CLI/C++
От: Lloyd Россия  
Дата: 12.01.04 17:04
Оценка:
Здравствуйте, lkj, Вы писали:

lkj>Я не спрашивал про C#.

lkj>Я спрашивал про C++ для .NET

Я конечно в C++ не силен, но все же:

// This is the main project file for VC++ application project 
// generated using an Application Wizard.

#include "stdafx.h"

#using <mscorlib.dll>

using namespace System;

public __gc __interface IDo
{
    void Do();
};

public __gc class DoClass: public IDo
{
public:
    void Do()
    {
        Console::WriteLine();
    }
};

int _tmain()
{
    IDo* _do = new DoClass();
    _do->Do();
    return 0;
}


Ты не поверишь:

    _do->Do();
00000020  mov         ecx,edi 
00000022  mov         eax,dword ptr [ecx] 
00000024  mov         eax,dword ptr [eax+0Ch] 
00000027  mov         eax,dword ptr [eax+00000094h] 
0000002d  call        dword ptr [eax]


Где 100 тактов?

... << RSDN@Home 1.1.2 beta 1 >>
Re[16]: CLI/C++
От: lkj www.7-zip.org
Дата: 12.01.04 19:18
Оценка:
Здравствуйте, Lloyd, Вы писали:

L>Я конечно в C++ не силен, но все же:


Да. Такой код работает быстро.
Но можно ли заставить обычный C++ код (без этих __gc __interface) работать быстро в варианте для .NET?
Хочу проверить скорость С++ -> IL -> x86 для существующего проекта без какой-либо переделки кода.
Re[17]: CLI/C++
От: alexkro  
Дата: 13.01.04 05:30
Оценка:
Здравствуйте, lkj, Вы писали:

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


L>>Я конечно в C++ не силен, но все же:


lkj>Да. Такой код работает быстро.

lkj>Но можно ли заставить обычный C++ код (без этих __gc __interface) работать быстро в варианте для .NET?
lkj>Хочу проверить скорость С++ -> IL -> x86 для существующего проекта без какой-либо переделки кода.

А почему бы тебе самому не проанализировать свой пример, как это сделал Lloyd для C# & MC++?
Re[18]: CLI/C++
От: mihailik Украина  
Дата: 13.01.04 09:21
Оценка:
IT>Порядок освобождения и блокировки можно так же контролировать атрибутами.

Боюсь, это будет слишком неявно. Другими словами, порядок будет неочевиден при прочтении, что приведёт к ошибкам.

Опять же, есть поля, которые нужно освобождать, а есть ссылки на всяких там Parent.


IT> Обработка исключений — какая проблема? По спецификации Dispose не должен выбрасывать никаких исключений.


Ой, ну это уж точно вряд ли. Ты, наверное с Finalize перепутал.

Как ты думаешь, если я перед завершением using FileStream дискетку из дисковода вытащу. Будет исключение


IT> Да и в клинических случаях никто не запрещает написать Dispose самостоятельно. Но вот 90% спокойно можно имплементировать единообразно.


Для Dispose скорее 40%. И вообще, это будет тот же ужастный стиль C. Чтобы написать просто и кратко нужно будет из мозгов котлету сделать.

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


M>>Ну да, то есть для каждого интерфейса нужно писать расширение. Тогда понятно. Тоже вариант, только такое себе. Как-то не очень вдохновляет


IT>Для интерфейсов, атрибутов и для их комбинаций. Так же как в ATL реализовано что-то подобное для многих интерфейсов COM. Например, можно недельку посидеть и покрыть практически все задачи связанные с маппингом, при этом заметно выиграв в производительности, т.к. сегодня подавляющее число занимающихся этим библиотек реализует это через рефлекшин.


Ты имеешь ввиду маппинг, генерируемый в compile-time? А разве Reflection + Reflection.Emit не решает то же самое проще и надёжнее?
... << RSDN@Home 1.1.0 stable >>
Re[18]: CLI/C++
От: lkj www.7-zip.org
Дата: 13.01.04 14:02
Оценка:
Здравствуйте, alexkro, Вы писали:

lkj>>Да. Такой код работает быстро.

lkj>>Но можно ли заставить обычный C++ код (без этих __gc __interface) работать быстро в варианте для .NET?
lkj>>Хочу проверить скорость С++ -> IL -> x86 для существующего проекта без какой-либо переделки кода.

A>А почему бы тебе самому не проанализировать свой пример, как это сделал Lloyd для C# & MC++?


Не умею. С++.NET раньше не использовал. Поэтому и пишу на форум.
Re[19]: CLI/C++
От: IT Россия linq2db.com
Дата: 13.01.04 15:26
Оценка:
Здравствуйте, mihailik, Вы писали:

M>Боюсь, это будет слишком неявно. Другими словами, порядок будет неочевиден при прочтении, что приведёт к ошибкам.

M>Опять же, есть поля, которые нужно освобождать, а есть ссылки на всяких там Parent.

Я же говорю, в особо клинических случаях никто не запрещает писать реализацию в ручну.

IT>> Обработка исключений — какая проблема? По спецификации Dispose не должен выбрасывать никаких исключений.


M>Ой, ну это уж точно вряд ли. Ты, наверное с Finalize перепутал.


Не перепутал.

namespace System {
    // IDisposable is an attempt at helping to solve problems with deterministic
    // finalization.  The GC of course doesn't leave any way to deterministically
    // know when a finalizer will run.  This forces classes that hold onto OS
    // resources or some sort of important state (such as a FileStream or a 
    // network connection) to provide a Close or Dispose method so users can 
    // run clean up code deterministically.  We have formalized this into an 
    // interface with one method.  Classes may privately implement IDisposable and
    // provide a Close method instead, if that name is by far the expected name
    // for objects in that domain (ie, you don't Dispose of a FileStream, you Close
    // it).
    //
    // This interface could be theoretically used as a marker by a compiler to 
    // ensure a disposable object has been cleaned up along all code paths if it's 
    // been allocated in that method, though in practice any compiler that 
    // draconian may tick off any number of people.  Perhaps an external tool (like
    // like Purify or BoundsChecker) could do this.  Instead, C# has added a using 
    // clause, which will generate a try/finally statement where the resource 
    // passed into the using clause will always have it's Dispose method called.  
    // Syntax is using(FileStream fs = ...) { .. };
    //
    // Dispose should meet the following conditions:
    // 1) Be safely callable multiple times
    // 2) Release any resources associated with the instance
    // 3) Call the base class's Dispose method, if necessary
    // 4) Suppress finalization of this class to help the GC by reducing the
    //    number of objects on the finalization queue.
    // 5) Dispose shouldn't generally throw exceptions, except for very serious 
    //    errors that are particularly unexpected. (ie, OutOfMemoryException)  
    //    Ideally, nothing should go wrong with your object by calling Dispose.
    //
    // If possible, a class should define a finalizer that calls Dispose.
    // However, in many situations, this is impractical.  For instance, take the
    // classic example of a Stream and a StreamWriter (which has an internal 
    // buffer of data to write to the Stream).  If both objects are collected 
    // before Close or Dispose has been called on either, then the GC may run the
    // finalizer for the Stream first, before the StreamWriter.  At that point, any
    // data buffered by the StreamWriter cannot be written to the Stream.  In this
    // case, it doesn't make much sense to provide a finalizer on the StreamWriter
    // since you cannot solve this problem correctly.  
    /// <include file='doc\IDisposable.uex' path='docs/doc[@for="IDisposable"]/*' />
    public interface IDisposable {
        /// <include file='doc\IDisposable.uex' path='docs/doc[@for="IDisposable.Dispose"]/*' />
        void Dispose();
    }
}


M>Как ты думаешь, если я перед завершением using FileStream дискетку из дисковода вытащу. Будет исключение


Попробуй сам и посмотри что будет. В чём проблема.

IT>> Да и в клинических случаях никто не запрещает написать Dispose самостоятельно. Но вот 90% спокойно можно имплементировать единообразно.


M>Для Dispose скорее 40%. И вообще, это будет тот же ужастный стиль C. Чтобы написать просто и кратко нужно будет из мозгов котлету сделать.


Такое ощущение, что ты только Dispose и программируешь. Я что-то не замечал, чтобы эта задача так часто возникала. Бывает иногда, бывает даже, что нужно освобождать несколько объектов. Но если в них самих Dispose написан корректно, то особой проблемы с порядком освобождения не возникает.

IT>>Для интерфейсов, атрибутов и для их комбинаций. Так же как в ATL реализовано что-то подобное для многих интерфейсов COM. Например, можно недельку посидеть и покрыть практически все задачи связанные с маппингом, при этом заметно выиграв в производительности, т.к. сегодня подавляющее число занимающихся этим библиотек реализует это через рефлекшин.


M>Ты имеешь ввиду маппинг, генерируемый в compile-time? А разве Reflection + Reflection.Emit не решает то же самое проще и надёжнее?


Решает, но не проще.
Если нам не помогут, то мы тоже никого не пощадим.
Re[18]: CLI/C++
От: alexkro  
Дата: 13.01.04 19:20
Оценка:
Здравствуйте, IT, Вы писали:

IT>Обработка исключений — какая проблема? По спецификации Dispose не должен выбрасывать никаких исключений.


Мне интересно посмотреть на эту спецификацию. MSDN говорит, что может выбросить. Собственно, мне тоже хотелось бы, чтобы не выбрасывал, но пока все, что я встречал говорит об обратном.
Re[19]: CLI/C++
От: mikа Stock#
Дата: 13.01.04 19:44
Оценка:
Здравствуйте, lkj, Вы писали:

lkj>Не умею. С++.NET раньше не использовал. Поэтому и пишу на форум.


Ты не в этот форум пишешь. Тебе надо в http://rsdn.ru/forum/?group=dotnet.
Re[20]: CLI/C++
От: is  
Дата: 13.01.04 23:22
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Он С++ реализовал, а не C with classes, да и то как препроцессор к С.


Он реализовал препроцессор Cpre (в октябре 1979), который использовался в одном реальном и нескольких экспериментальных проектах. В составе этих проектов была "первая библиотека на С++, которая поддерживала многозадачное программирование с применением сопрограмм". "Язык, подаваемый на вход препроцессора, получил название "C with Classes"".

Any intelligent fool can make things bigger, more complex, and more violent. It takes a touch of genius — and a lot of courage — to move in the opposite direction. -- Albert Einstein
Re[19]: CLI/C++
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.01.04 23:50
Оценка:
Здравствуйте, mihailik, Вы писали:

M>Боюсь, это будет слишком неявно. Другими словами, порядок будет неочевиден при прочтении, что приведёт к ошибкам.


M>Опять же, есть поля, которые нужно освобождать, а есть ссылки на всяких там Parent.


Тут нужно подумать, что больше напрягает программиста, а стало быть приводит к большему количеству ошибок. Явный контроль ресурсов или борьба с неявным контролем. Думаю, что первое более утамительно. К тому же зависимости можно и отследить. Как минимум выдать варнинг, мол у вас циклическое освобождение ресурсов.

Кстати, ссылки на парента обычно помечены как не сериализуемые. Можно это дело анализировать.


M>Как ты думаешь, если я перед завершением using FileStream дискетку из дисковода вытащу. Будет исключение


А черт его знает. Реальное закрытие хэндла происходит внутри ЦЛР, но сдается мне что вряд ли. Хотя все может быть.

M>Для Dispose скорее 40%. И вообще, это будет тот же ужастный стиль C. Чтобы написать просто и кратко нужно будет из мозгов котлету сделать.


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

M>Где можно "имплементировать единообразно", где нужно "написать самостоятельно" — иэвечный вопрос этих бедняг сишников.


Да нет таких вопросов. Есть другой вопрос "Нужно ли делать руками то, что можно не делать?". И тут я целиком согласен с плюсовиками. Чем меньше пишешь руками, тем надежнее.

M>Ты имеешь ввиду маппинг, генерируемый в compile-time? А разве Reflection + Reflection.Emit не решает то же самое проще и надёжнее?


А ты пробовал? Ну, тогда попробуй. Поймешь насколько это "проще". И насколько "надежнее" получается. К тому, же сама генерация отнимает время. А так все в компайл-тайме.
... << RSDN@Home 1.1.2 beta 1 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: CLI/C++
От: IT Россия linq2db.com
Дата: 14.01.04 03:01
Оценка:
Здравствуйте, alexkro, Вы писали:

IT>>Обработка исключений — какая проблема? По спецификации Dispose не должен выбрасывать никаких исключений.


A>Мне интересно посмотреть на эту спецификацию. MSDN говорит, что может выбросить. Собственно, мне тоже хотелось бы, чтобы не выбрасывал, но пока все, что я встречал говорит об обратном.


Ну может насчёт спецификации я и загнул, но что-то на эту тему Рихтер поучал и в Роторе есть полный текст того, что про это думает MS.
Если нам не помогут, то мы тоже никого не пощадим.
Re[20]: CLI/C++
От: mihailik Украина  
Дата: 14.01.04 16:04
Оценка:
M>>Ты имеешь ввиду маппинг, генерируемый в compile-time? А разве Reflection + Reflection.Emit не решает то же самое проще и надёжнее?

VD>А ты пробовал? Ну, тогда попробуй.


ОК. Ты пробовал я вижу.

Сравни, пожалуйста маппинг, который ты генерировал в compile-time с маппингом, который ты генерировал на Reflection.Emit.


VD>Поймешь насколько это "проще". И насколько "надежнее" получается. К тому, же сама генерация отнимает время. А так все в компайл-тайме.


Rsdn.Framework.Data критикуешь? Странное место ты для этого выбрал
... << RSDN@Home 1.1.0 stable >>
Re[20]: CLI/C++
От: mihailik Украина  
Дата: 14.01.04 16:04
Оценка:
M>>Опять же, есть поля, которые нужно освобождать, а есть ссылки на всяких там Parent.

IT>Я же говорю, в особо клинических случаях никто не запрещает писать реализацию в ручну.


Это нормальный случай, не клинический.




IT>>> Обработка исключений — какая проблема? По спецификации Dispose не должен выбрасывать никаких исключений.


M>>Ой, ну это уж точно вряд ли. Ты, наверное с Finalize перепутал.


IT>Не перепутал.


Ну ты невнимательно читаешь. В тексте не жёсткий запрет и даже явно говорится, что некоторые исключения возможны. Кроме того, это совсем не спецификация.


M>>Как ты думаешь, если я перед завершением using FileStream дискетку из дисковода вытащу. Будет исключение


IT>Попробуй сам и посмотри что будет. В чём проблема.


Какая проблема?


M>>Для Dispose скорее 40%. И вообще, это будет тот же ужастный стиль C. Чтобы написать просто и кратко нужно будет из мозгов котлету сделать.


IT>Такое ощущение, что ты только Dispose и программируешь. Я что-то не замечал, чтобы эта задача так часто возникала. Бывает иногда, бывает даже, что нужно освобождать несколько объектов. Но если в них самих Dispose написан корректно, то особой проблемы с порядком освобождения не возникает.


Вот именно! Согласен на все сто.

Программирование Dispose задача редкая, но нужно её делать внимательно. Именно поэтому это лучше сделать аккуратно руками, чем полагаться на догадки компилятора.

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


M>>Ты имеешь ввиду маппинг, генерируемый в compile-time? А разве Reflection + Reflection.Emit не решает то же самое проще и надёжнее?


IT>Решает, но не проще.


Не проще для кого? Для конечного пользователя вроде намного проще.
... << RSDN@Home 1.1.0 stable >>
Re[21]: CLI/C++
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.01.04 17:33
Оценка:
Здравствуйте, mihailik, Вы писали:

M>ОК. Ты пробовал я вижу.


Именно.

M>Сравни, пожалуйста маппинг, который ты генерировал в compile-time с маппингом, который ты генерировал на Reflection.Emit.


Генерация на Emit так и не закончилась. Задолбался угадывать, что за ошибку я допустил. А генерация кода никаких проблем не вызывает.

VD>>Поймешь насколько это "проще". И насколько "надежнее" получается. К тому, же сама генерация отнимает время. А так все в компайл-тайме.


M>Rsdn.Framework.Data критикуешь? Странное место ты для этого выбрал


Каким боком тут Data? Там вся сериализация на рефлекшоне и без генерации кода вообще.
... << RSDN@Home 1.1.2 beta 3 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: CLI/C++
От: IT Россия linq2db.com
Дата: 15.01.04 01:20
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Каким боком тут Data? Там вся сериализация на рефлекшоне и без генерации кода вообще.


Там генерации выше крыши.
Если нам не помогут, то мы тоже никого не пощадим.
Re[22]: CLI/C++
От: mihailik Украина  
Дата: 15.01.04 08:35
Оценка:
M>>Сравни, пожалуйста маппинг, который ты генерировал в compile-time с маппингом, который ты генерировал на Reflection.Emit.

VD>Генерация на Emit так и не закончилась. Задолбался угадывать, что за ошибку я допустил. А генерация кода никаких проблем не вызывает.


Emit успешно используется многими людьми. Проблема, очевидно, в тебе а не в Emit'е
... << RSDN@Home 1.1.0 stable >>
Re[23]: CLI/C++
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.01.04 22:43
Оценка:
Здравствуйте, mihailik, Вы писали:

M>Emit успешно используется многими людьми. Проблема, очевидно, в тебе а не в Emit'е


Ну, то что я ламер, это понятно. Не ясно что же остальные то при комунизмен не живут? Или у вас там уже к тому близко?
... << RSDN@Home 1.1.2 beta 3 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[23]: CLI/C++
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.01.04 01:04
Оценка:
Здравствуйте, IT, Вы писали:

VD>>Каким боком тут Data? Там вся сериализация на рефлекшоне и без генерации кода вообще.


IT>Там генерации выше крыши.


Тыкни пальзем... где?
... << RSDN@Home 1.1.2 beta 3 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: CLI/C++
От: IT Россия linq2db.com
Дата: 16.01.04 01:37
Оценка:
Здравствуйте, VladD2, Вы писали:

IT>>Там генерации выше крыши.


VD>Тыкни пальзем... где?


Генерацией заменены самые медленные вещи рефлекшина — Activator.CreateInstance и SetValue/GetValue полей и свойств. Ну и специальная фича последней версии полностью построенная на генерации — абстрактные классы
Автор: IT
Дата: 01.12.03
, позволяет добиться практически декларативного объявления бизнес объекта.
Если нам не помогут, то мы тоже никого не пощадим.
Re[25]: CLI/C++
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.01.04 14:48
Оценка:
Здравствуйте, IT, Вы писали:

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


IT>>>Там генерации выше крыши.


VD>>Тыкни пальзем... где?


IT>Генерацией заменены самые медленные вещи рефлекшина — Activator.CreateInstance


Думаю, на счет Activator.CreateInstance ты можешь ошибаться. По крайней мере CreateInstance массивов работает со скоростью звука.

IT> и SetValue/GetValue полей и свойств. Ну и специальная фича последней версии полностью построенная на генерации — абстрактные классы
Автор: IT
Дата: 01.12.03
, позволяет добиться практически декларативного объявления бизнес объекта.


Так вы о рсдн.дате. Ясно. А я то думал о стандартной. Тогда ясно.
... << RSDN@Home 1.1.2 beta 3 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[26]: CLI/C++
От: IT Россия linq2db.com
Дата: 16.01.04 15:06
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Думаю, на счет Activator.CreateInstance ты можешь ошибаться.


Малость притормаживает. Но это можно будет решить шаблонами.
Если нам не помогут, то мы тоже никого не пощадим.
Re[24]: CLI/C++
От: mihailik Украина  
Дата: 16.01.04 16:37
Оценка:
M>>Emit успешно используется многими людьми. Проблема, очевидно, в тебе а не в Emit'е

VD>Ну, то что я ламер, это понятно. Не ясно что же остальные то при комунизмен не живут? Или у вас там уже к тому близко?


А ты не путаешь электрификацию всей страны с истинным коммунизмом?


Лично я делал на Emit'е обработчики WM-сообщений. Типа того, что ты там в форуме WinForms советовал на Hashtable.

Правда, код выслать не могу, потерялся при поломке винта. Там, правда, работы было на пятнадцать копеек. Если будешь подкалывать я его заново наваляю
... << RSDN@Home 1.1.0 stable >>
Re[25]: CLI/C++
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 18.01.04 19:24
Оценка:
Здравствуйте, mihailik, Вы писали:

M>Лично я делал на Emit'е обработчики WM-сообщений. Типа того, что ты там в форуме WinForms советовал на Hashtable.


Да братец, это та самая premature optimization, которой пугают маленьких детей. Обработка гуевых сообщений это последнее что нужно оптимайзить, особенно супротив хештаблицы.

Вобще Влад прав, генерация сразу в IL-код крайне немасштабируема в плане развития. В свое время нам пришлось отказаться от генерации проксей через Emit, потому что добавление новых фич съедало огромное количество времени.
... << RSDN@Home 1.1.2 beta 3 (Win32NT 5.1.2600.0) >>
AVK Blog
Re[26]: CLI/C++
От: mihailik Украина  
Дата: 19.01.04 15:27
Оценка:
AVK>Да братец, это та самая premature optimization, которой пугают маленьких детей. Обработка гуевых сообщений это последнее что нужно оптимайзить, особенно супротив хештаблицы.

Согласен на 100%. Это был сугубо исследовательский проект.


AVK>Вобще Влад прав, генерация сразу в IL-код крайне немасштабируема в плане развития. В свое время нам пришлось отказаться от генерации проксей через Emit, потому что добавление новых фич съедало огромное количество времени.


Я понимаю так. Emit однозначно нужен там, где производительность может дать хорошую отдачу. Слово же "масштабирование" в этом контексте очень туманно.
... << RSDN@Home 1.1.0 stable >>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.