Форум: "Прочее";
Текущий архив: 2007.12.09;
Скачать: [xml.tar.bz2];
ВнизОбъясните пожалуйста дельфисту, что такое шаблоны в Си? Найти похожие ветки
← →
Alkid © (2007-11-07 10:23) [160]
> Код, приведенный в ссылке [130] ужасен. Причем как С#, так
> и C++. Я уж не говорю, что на моем ноуте в release версии
> C# обставил C++. Даже, пардон, не в 10 раз.
Что конкретно там тестировалось? Код из [130]?
А методику можешь рассказать?
Просто разные исследования авторитетно заявляют разные вещи, от превосходства кода С# над С++ на порядок по скорости выполнения до наоборот.
← →
Юрий Зотов © (2007-11-07 10:37) [161]> Alkid © (07.11.07 10:20) [159]
Ошибся человек. Посчитал, что речь идет о визуальных контейнерах.
:о)
← →
Alkid © (2007-11-07 10:43) [162]
> Ошибся человек. Посчитал, что речь идет о визуальных контейнерах.
А может не ошибся. Может он стандартно для хранения списка строк в своём проекте использует TListView или TMemo :)
← →
Юрий Зотов © (2007-11-07 10:57) [163]> Alkid © (07.11.07 10:43) [162]
А че? Отличные контейнеры.
:о)
============
И кто скажет, что это девочка, пусть первым бросит в меня камень.
(с) Ося Б.
← →
boa_kaa © (2007-11-07 12:03) [164]
> homm © (07.11.07 09:55) [158]
Я сказал релиз - значит релиз.
> Alkid © (07.11.07 10:23) [160]
Просто откомпилировал и запустил то, что дано по ссылке. Кстати, сейчас проверил на работе. То же самое:
Результаты:
C++: 2046 ms
C#: 0,002sec. = 2 ms
Могу скриншоты показать.
Я ни на грош не верю полученным результатам. Ибо там сравниваются не языки, а реализации контейнеров. Сравниваются криво. Код адиетский. Нет, чтобы просто создать 2 двумерных массива и перемножить...
Если будет сегодня время, тоже померяю их этими... ;)
← →
Ega23 © (2007-11-07 12:10) [165]
> Юрий Зотов © (07.11.07 10:57) [163]
>
> > Alkid © (07.11.07 10:43) [162]
>
> А че? Отличные контейнеры.
> :о)
Шутки-шутками, но
http://delphimaster.net/view/2-1193740709/
← →
homm © (2007-11-07 12:20) [166]> [164] boa_kaa © (07.11.07 12:03)
> Просто откомпилировал и запустил то, что дано по ссылке.
Начнем с того, что в [130] нет ссылок ;) Если ты имел ввимду ссылку из [131], то я ее тоже тестировал, у меня получилась разница в 8 раз не в пользу СиДиез в релизе, и раз в 10 медленее в дебаге.
← →
boa_kaa © (2007-11-07 12:50) [167]
> homm © (07.11.07 12:20) [166]
> Начнем с того, что в [130] нет ссылок ;)
Промахнулся :)
> у меня получилась разница в 8 раз не в пользу СиДиез в релизе,
> и раз в 10 медленее в дебаге
Этим результатам я поверю больше. Если ты посмотришь бегло код, то поймешь почему.
Я реализовывал один и тот же алгоритм триангуляции Делоне на Delphi, C# и C++. Разница была, но незначительная (примерно 20% отклонения, C++ впереди). Я отношу ее на тот факт, что добиться полного соответствия в коде невозможно. К примеру, на C++ можно создать класс без new, а в C# и Delphi приходится использовать для этого структуры, что часто просто неудобно. Зато процесс разработки на C# несравнимо легче, чем даже в Delphi.
← →
homm © (2007-11-07 12:53) [168]> [167] boa_kaa © (07.11.07 12:50)
> Я реализовывал один и тот же алгоритм триангуляции Делоне
> на Delphi, C# и C++.
А можно выложить куданить? Мне бы дома было бы интересно помотреть. Или на мыло в анкете.
← →
Alkid © (2007-11-07 13:02) [169]
> Шутки-шутками, но
> http://delphimaster.net/view/2-1193740709/
Да я это внутренне и поминал, когда писал :)
А для студенческих поделок это вообще - классика.
← →
boa_kaa © (2007-11-07 13:37) [170]
> А можно выложить куданить? Мне бы дома было бы интересно
> помотреть. Или на мыло в анкете.
Можно. Но уже не сегодня. 2 кода нашел (Delphi и C#). Не могу найти от C++ (все в старых архивах).
Протестровал еще раз:
C#: 0.7 сек. для 1000 точек.
Delphi: 0.5 сек. для тех же 1000 точек.
Алгоритм там тоже старый, инкрементный сложности O(n2).
Как найду остальное - вышлю
← →
Lamer@fools.ua © (2007-11-07 13:42) [171]>>Mystic © (01.11.07 16:37) [80]
>Это мне показал cordbg.exe. Скомпилировано в релизе.
1.
Если не студией, а "csc.exe", то главное "/optimize+".
2.(cordbg) m JitOptimizations 1
?
3.
FYI,
System.Runtime.InteropServices.Marshal.SizeOf(typeof(System.Drawing.Color)) = 24
← →
Lamer@fools.ua © (2007-11-07 13:50) [172]>>Lamer@fools.ua © (07.11.07 13:42) [171]
P.S.
Если же смотреть дизассемблер в VS, то стОит иметь в виду опции:
* Debugging | Suppress JIT optimization on module load (Managed Only)
* Debugging | Enable Just My Code
← →
Lamer@fools.ua © (2007-11-07 13:53) [173]Прочитал http://rsdn.ru/forum/Message.aspx?mid=2544936
Похоже, всё сложнее :-)
← →
pasha_golub © (2007-11-07 14:15) [174]
> vpbar © (01.11.07 14:05) [29]
>
> Alkid © (01.11.07 13:58) [27]
> Для таких случаев можно симулировать :)
> http://www.delphikingdom.com/asp/viewitem.asp?catalogid=744
> и ww.delphikingdom.com/asp/viewitem.asp?catalogid=453 есть
> статья получше. Но ссылку не помню.
>
Ребяты. А там пусто. Не могу я скачать Tems_Pub.zip
Други, киньте мне на мыло шоли pasha_golub (at) yahoo.com - попробовать хоцца. А то действительно запаривает контейнеры рисовать :)
← →
Фрейм (2007-11-08 02:33) [175]
> Alkid © (07.11.07 10:20) [159]
> Не, ну я конечно каких-то тонкостей Дельфи и VCL не знаю,
> но не надо меня полным ослом считать :) Фреймы я знаю и
> активно их использовал.
> Вот только не прикину, как фреймы относятся к теме данного
> топика.
> Можешь поясните?
Я хочу просто понять в чём проблема с написанием этих контейнеров, и поискать её решение без использования шаблонов.
Можно хотя бы пример того кода который вы по многу раз писали?
← →
Джо © (2007-11-08 04:41) [176]> [175] Фрейм (08.11.07 02:33)
>
> > Alkid © (07.11.07 10:20) [159]
> > Не, ну я конечно каких-то тонкостей Дельфи и VCL не знаю,
>
> > но не надо меня полным ослом считать :) Фреймы я знаю
> и
> > активно их использовал.
> > Вот только не прикину, как фреймы относятся к теме данного
>
> > топика.
> > Можешь поясните?
>
>
> Я хочу просто понять в чём проблема с написанием этих контейнеров,
> и поискать её решение без использования шаблонов.
>
> Можно хотя бы пример того кода который вы по многу раз писали?
Это, юноша, нужно было с самого начала спрашивать, причем — я полагаю — до безаппеляционных идиотских постов с советами.
← →
Alkid © (2007-11-08 12:26) [177]
> Я хочу просто понять в чём проблема с написанием этих контейнеров,
> и поискать её решение без использования шаблонов.
>
> Можно хотя бы пример того кода который вы по многу раз писали?
Очень просто : есть свои классы, надо под них забацать контейнеры.
Например, есть некий TMyClass. Можно его коллекции хранить тремя способами:
1. Использовать TObjectList. Проблема в том, что этот подход не типобезопасен, т.е. в контейнер по ошибке может быть положено нечто левое. Да и при взятии элемента приходится каждый раз писать:myClassRef := TMyClass(Container[index]);
либо:myClassRef := Container[index] as TMyClass;
При том, что и так жить можно, меня это в целом не устраивает.
2. Содзать один универсальный контейнер (TSafeTypedObjectList), в котором проверка типов производится в Run-Time с использованием RTTI.
Уже лучше, чем первый вариант, но:
1. Низкая производительность операции добавления эелмента.
2. Обшибуки ловятся в Run-Time.
3. Явное приведение типов при взятии элемента остаётся
3. Создавать специализированные контейнеры (TMyClassList), в которых самому определять все методы (Add, Remove, Get, и проч.) с использованием своего типа. Тут всё замечательно: статическая проверка типов на этапе компиляции, нет ненужных накладных расходов и нет приведений типов. Но приходится писать однобразный и на 90% повторяющийся код, различающийся только именами типов. Вот тут шаблоны и нужны - они позволяют делать статически типизированные контейнеры для заданных классов (т.е. получить все их преимущества) без необходимости прерписывать кучу почти одинакового кода вручную (т.е. устраняя главный их недостаток).
И при чём тут фреймы?
← →
Фрейм (2007-11-09 02:06) [178]
> Alkid © (08.11.07 12:26) [177]
> Но приходится писать однобразный и на 90% повторяющийся
> код, различающийся только именами типов.
А просто скопировать код и автозамену сделать нельзя? И если можно, то разве это долго?
← →
celades © (2007-11-09 09:25) [179]
> А просто скопировать код и автозамену сделать нельзя? И
> если можно, то разве это долго?
>
это не долго, это глупо.
← →
Alkid © (2007-11-09 10:26) [180]
> А просто скопировать код и автозамену сделать нельзя? И
> если можно, то разве это долго?
Можно но если всякое дублирование кода есть зло, то дублирование кода путём Copy/Paste есть зло в квадрате. Вообще-то, это азы правильного проектирования программ.
← →
Mystic © (2007-11-09 12:44) [181]> Alkid © (09.11.07 10:26) [180]
Слишком категорично. Какие проблемы возникают при Copy/Paste? (a) копирование ошибок (b) сложности с последующим внесением изменений. Соответственно, когда код отлажен или тривиален, а также самодостаточен (изменения в него не планируются), то Copy/Paste вполне допустимое решение. Например,
function Iif(Condition: boolean; TrueValue, FalseValue: Integer): Integer;
begin
if Condition then Result := TrueValue else Result := FalseValue
end;
Ну и далее по мере необходимости
function Iif(Condition: boolean; TrueValue, FalseValue: string): string;
function Iif(Condition: boolean; TrueValue, FalseValue: TMyObject): TMyObject;
function Iif(Condition: boolean; TrueValue, FalseValue: WideString): WideString;
В данном случае от Copy/Paste опасности нет, разве только некоторым педантам будет действовать на нервы.
С другой стороны, человек, твердо уверовавший в то, что Copy/Paste зло, и пытающийся всеми силами от него избавится, имхо, иногда приносит даже больший вред, чем человек, делающий Copy/Paste. Иногда код только выглядит похожим образом, хотя алгоритмы разные. И когда человек пытается их объединить, то... потом в этом коде сам черт ногу сломит: метод обрастает флагами, в особо тяжких случаях используется полиморфизм, внесение изменений (которое обычно вносится только в один вариант) приводит к еще большему разбуханию кода, ...
Например, если если библиотека для игр, я все-таки предпочту, чтобы для каждой фигуры был отдельный не связанный с другими фигурами класс. Когда конь я китайских шахматах будет наследоваться от коня в обычных шахматах, пушка будет наследоваться от ладьи, лалья от пики в сеги... Один класс для короля, золотого и серебрянного генералов... Это надо пресекать на корню!
← →
_Слоник (2007-11-09 13:00) [182]про производительность шарпа и оптимизацию (ссылка на исходную статью + обсуждение (особенно интересны последние комменты))
http://forum.vingrad.ru/forum/topic-180722/view-all.html
← →
Alkid © (2007-11-09 14:28) [183]
> Mystic © (09.11.07 12:44) [181]
Конечно, все "принципы", которые применяются при программировании имеют свою область действия и не должны применяться бездумно. Однако недопущение дублирования кода - это весьма "сильное" по моим понятиям правило.
Конечно, если код тривиален, отлажен и не будет меняться, то его можно и тиражировать. Вот только 100% уверенности в этом быть не может. Мы не знаем будущего. А занимаясь копипастом мы на будущее себе подкладываем мину, если всё-таки окажется, что в коде есть ошибка или возникнет необходимость его модифицировать. Т.е. сужаем возможную свободу действий.
Касаемо вреда от особых умников, пытающихся избавиться от дублирующего кода флагами и полиморфизмом: конечно всё можно сделать через задницу. А можно и по-нормальному.
По поводу описанной библиотеки игр - это вообще бредовая ситуация, не имеющая ничего общего с удалением дублирующегося кода, а лишь иллюстрирующая, что гипотетический проектировщик просто ничерта не смыслит в ОО-проектировании.
← →
Джо © (2007-11-09 14:30) [184]Вот как-раз на днях избавился от кучи «лишнего» кода (на 70% дублирующегося по разным юнитам) с помощью полиморфизма.
Теперь вот сижу и гадаю — через Ж это было или не через Ж.
:)
← →
Alkid © (2007-11-09 14:33) [185]
> Вот как-раз на днях избавился от кучи «лишнего» кода (на
> 70% дублирующегося по разным юнитам) с помощью полиморфизма.
>
> Теперь вот сижу и гадаю — через Ж это было или не через
> Ж.
> :)
:), ну, если у тебя остался "code smell" значит через Ж. :)
← →
Джо © (2007-11-09 14:48) [186]> [185] Alkid © (09.11.07 14:33)
>
> > Вот как-раз на днях избавился от кучи «лишнего» кода (на
>
> > 70% дублирующегося по разным юнитам) с помощью полиморфизма.
> >
> > Теперь вот сижу и гадаю — через Ж это было или не через
>
> > Ж.
> > :)
>
> :), ну, если у тебя остался "code smell" значит через Ж.
> :)
Вроде уже два дня как не пахнет. :) Сегодня уже даже на дальнейшую работу пошло, до рефакторинга это было немыслимо.
← →
Alkid © (2007-11-09 16:00) [187]
> Вроде уже два дня как не пахнет. :) Сегодня уже даже на
> дальнейшую работу пошло, до рефакторинга это было немыслимо.
Мда, а мне щас приходится с таким кодом, что от его "code smell" надо зажимать нос, рот, глаза и уши. Собственно по-этому я сейчас готов пришибить чем-нибудь тяжёлым любого, кто будет меня убеждать, что "дублирование кода, это вообщем-то и неплохо" :)
← →
umbra © (2007-11-10 02:16) [188]копипаст по ученому называется "editor inheritance" :)
← →
Джо © (2007-11-10 02:28) [189]> [188] umbra © (10.11.07 02:16)
> копипаст по ученому называется "editor inheritance" :)
Вот буржуи! До чего додумались :-D
Страницы: 1 2 3 4 5 вся ветка
Форум: "Прочее";
Текущий архив: 2007.12.09;
Скачать: [xml.tar.bz2];
Память: 0.8 MB
Время: 0.073 c