MFC: is dead или еще нет?

Тема в разделе "WASM.HEAP", создана пользователем HH9, 19 июн 2008.

  1. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    шаблоны никак не влияют на ран-тайм выполнение, ибо "разбираются" на стадии компиляции, а не в ран-тайме.
    а про минимум объектных фокусов хотел бы заметить, то что тогда вы предлагаете от С++ оставить?
     
  2. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    _basmp_
    Прошлый твой(давай на ты?) пост показался мне разумным, поэтому процитировал, а в этом ты опять всё в кучу свалил, поэтому я постараюсь кратко и по делу :)

    Я не понял в пользу чего или кого этот довод, ты бы лучше почитал какие цели перед собой ставит .NET, это платформа для разработки прикладного ПО и Web-service под Windows. Хватит уже уводить разговор в сторону ".NET vs всё, что в мире прекрасного осталось". То, что программы под .NET не кроссплатформенны я и без тебя знаю, только разговор совсем не об этом.

    Слушай, как надоели твои пустые слова "жутко тормозят" и "ужасно громоздки". Откуда я знаю почему у тебя что-то жутко тормозило? Я не телепат. Давай сюда конкретный код и замеры.

    Я вполне понимаю, что выполнение любого managed code связано с накладными расходами. Если сравнить алгоритм на C# или Java с оптимизированным алгоритмом на ассемблере, конечно первый будет медленнее. Поэтому написание высокопроиводительных систем на C# может придти в голову только сумасшедшему. Это как раз случай, когда инструмент применяется не по назначению.

    Кол-во процессоров не имеет значение. Тормозящие детали выясняются в процессе профилирования.
    Ознакомся с понятием "преждевременная оптимизация". По статистике, 80% времени исполняются 4% кода программы, вот их, при необходимости, и надо оптимизировать.

    Порог человеческого восприятия составляет ~100мс.
    Пример преждевременной оптимизации: существует алгоритм, который используется в программе, допустим, раз в 10 сек. Твой вариант выполняется за 1мс, а мой за 100мс. Пользователь этого НЕ заметит. При этом на написание и оптимизацию ты потратил 2 часа, а я 20 минут. Да, ты написал более оптимизированный код, но эта оптимизация никому ненужна, ты зря потратил время. Я своё время ценю.

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

    Мне бы никогда в голову не пришло переписывать алгоритм с С++ на С ради производительности. Это бессмысленно. Я переписываю, чтобы была возможность скомпилировать его под GPU.
    За # я не ратую, тебе опять почудилось.

    С++ не тормознутее, с чего бы это. Шаблоны не тормозят программу, этот механизм называется template instantiation, читай стандарт и основы.

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

    Тебе сколько лет? Ты мне напоминаешь меня в возрасте 16. У меня тогда было только "белое" и "чёрное". Вот и у тебя сейчас так же, если пихать так всё, а не пихать так ничего. А самому попробовать и оценить видимо лень.

    Я не называл C# новым. Хватит приписывать мне то, чего я не говорил.

    Ещё раз, где я утверждал, что перечисленные мной преимущества managed code отсутствует везде, кроме C#? Я перечислил преимущества managed code в общем. От того, что они присутствуют в .NET они не теряют своих достоинств.

    В общем мне всё ясно. Я бы посоветовал ещё раз прочесть #51.
    Ты так и не понял, что не существует единственного инструмента/языка/платформы, которые бы позволяли решать любую задачу одинаково эффективно. Ты наверное не знаешь, но сегодня на рынке скорость выполнения и уж тем более размер являются далеко не единственными и даже не самыми главными критериями оценки качества ПО.

    Удачи.
     
  3. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.242
    мда..... довольно милый спор:))))))))
    W4FhLF
    а при чём тут это??? гую как таковую никто не оптимайзит. оптимайзят рабочую часть проги. при этом современные прогеры опшибочно полагают, что на оптимайз забить можно, ибо много ресурсов - на самом деле есть куча задач, особенно научных, где сразу понимаешь, что всё это железо черепашки - ниндзя в ооооочень замедленной прокрутки:))))) c другой стороны я согласен с тобой, что тупо оптимайзить ПО - это всё для теоретиков идеалистов: дорога ложка к обеду, а оптимайз суровый отодвигает эту ложку в будущий век:)) именно поэтому я и говорю, что в системы автооптимайза кода будут вкладываться большие средства, ибо ручками это делать экономически невыгодно. кстати, очень меня смешит гарбадж коллектор, ведь, сцука делает то, что может сделать препроцесор кода один раз:)))
    _basmp_
    борьба за жисть - это обычный вид деятельности и жаловаться тут никому не приходиться, к тому же современная цивилизация не делает человека счастливым, подменяя всё суррогатами. Мир - абсолютно сбалансированная система, т. ч. получить можете всё, что захотите, только нужно осознавать цену своих "хочу", а то потом обида посетит, ибо она высока:)) а БГ, на мой взгляд, нормальный, умный чел вопреки тиражируемым стереотипам:)))))
     
  4. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    UbIvItS
    а у нас уже code preprocessor начал заниматься сборкой мусора? O_o далеко пойдете.
     
  5. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.242
    varnie
    тебе что-то не нравиться:)))))??? последнее обращение к переменной в коде и является временем её официальной смерти:derisive:
     
  6. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    UbIvItS
    жги исчо. каким образом ты на уровне препроцессинга будешь управлять жизнью объектов (которых еще не существует). где ты видел препроцессоры в ран-тайме??
    короче, бред.
     
  7. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.242
    varnie
    а для чего нужен код проги???:))))))) или точка создания объекта записана не в коде, а где-то в астрале:))))))??????????
     
  8. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    UbIvItS, то о чём ты говоришь невозможно реализовать в compile-time. В GC это реализовано посредством подсчёта ссылок на объект. Ты не можешь заранее сказать сколько переменных ссылаются на один обект в любой момент выполнения программы. Для этого тебе пришлось бы на этапе компиляции просчитывать все возможные сценарии выполнения программы.
     
  9. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    varnie
    шаблоны могут приводить к неоптимальным решениям. Компилер не все и не всегда может соптимизировать верно.
    Тут конкретно сказать трудно. По месту в дебугере смотреть надоть. В простых случаях - все терпимо. А при достаточно развитом шалонировании/наследовании/обилии классов итд может привести к удивительному разрастанию кода (во всяком случае это наблюдалось пару проектов назад в сторонней либе).

    Источник - дебугер (те искать тараканов просматривая избраные места в нем). По языку стандарты читал уже не помню когда всвязи с их малой практической полезностью относительно конкретных компилеров. (это больше к претензиям W4FhLF-а)

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

    W4FhLF
    Ну вот и снова к нашей скучной беседе слегка о # и не слегка о моих недостатках и ваших достоинствах. Сразу и немного отвлекаясь хочу выразить вам свою зависть по поводу вашего шикарного ника. Вы тоже новые ники из старых паролей образуете?
    Энто вы как хотите. А я можно продолжу на вы? Вас обращение к вам на 'вы', надеюсь, не очень тяготит?
    В пользу того, что все коммерчески-выгодные и перспективные технологии в независимости от их сложности и правовой защищенности незамедлительно сдуваются конкурентами. Примеров валом. Учитывая, что клоны или полуклоны у # за > 7 лет даже и не пытались появиться можно однозначно утверждать, что технологии .нет аналитиками крупных фирм не признаны стоящими.
    Да читал, читал. Ну и что? Что тут нового или не существовавшего под вынь к моменту зарождения .нет? То, что от МС? Или то, что рекламой заваливают все кто на собственных мыслях личное ценное время cэкономил?
    Во первых на .нет разговор сосредоточили вы, перекрутив в посте #48 мое заявление о ВБ и .нет. Обратите внимание, я не писал конкретно о С# или F#. Общим в ВБ и .нет является именно п-код базированость и несовместимый между версиями глюкавый и раздутый рантайм. А конкретные языки.. Мы ведь на форуме асма или где? Чем так важен фроненд? Ну а оценить что-либо можно только в сравнении с альтернативами. Есть, конечно, пакеты значительно хуже .нет, но.. Или вы предпочитаете сравнивать только с откровенным отстоем?
    П-код изначально был задуман именно как средство дешевого обеспечения кроссплатформености. Без нее это копание земли вилкой.
    Как надоели ваши тупые наезды без оснований и какие-то требования. Вы верно путаете меня со своим подчиненным. Если это так, то куда за зарплатой приходить? А насчет конкретных примеров, то ничего особо специального, в сети все есть. Нужна какая не самая маленькая прога имеющая аналог в маш коде. Удаляете рантаймы .нет со своей машины. Качаете по гпрс прогу, качаете рантайм к ней. Смотрите во что у вас скачка влетит. Сравниваете скорость аналогов. И делаете выводы какие вам хочется.
    Всвязи с тем, что не существует обоснованых отличий managed code от п-кода я прелгаю удалить слово managed code как синоним введеный исключительно в спекулятивно-рекламных целях и лишенный специфичного смысла. А сравнивать п-код при условии жит компиляции стоит с кодом С, С++ или Пас, по желанию. Скажем, жит компилер из АСК дает вполне приличный код. Кроме того, написание высокопроизводительного многопоточного кода в п-код + жит системах вполне возможно. Даже непонятно какие тут проблемы. Вот только С# - действительно не годится ибо захотели они сильно всего с соответствующими результатами.
    Все больше и больше прихожу к мнению, что вы по роду деятельности в основном менеджер. Скажем, руководитель небольшой группы вчерашних студентов. Безусловно подающий большие надежды. Вобще-же на стадии подготовки можно только предполагать с достаточным допуском, а определять минимумы точно можно только после появления продукта, тк основные тараканы вылазят на стадии отладки (имеется в виду, что пути решения были выбраны на стадии планирования и с этим проблем нет) или у вас все работает как запланировано сразу (если, конечно, вы пишете сами)? И вот визуальное наблюдение за отладочными сообщениями в позволяет часто с первого захода выявить неудачный код именно в важном функционале.
    Тогда в чем вы меня так пытаетесь убедить? И слово 'опять'. Когда мне 'почудилось' в первый раз? Или это просто такой повышающий самомнение оборот речи?
    Дебугер в руки, бумажки на самокрутки, а как это называется для дела неважно.
    'Сынком' я вас не называл. Не нужно мне помогать с придумыванием слов, обычно я и сам с этим неплохо справляюсь. А прогрессорство - типичный признак молодости (25-27 лет - молодежь). С возрастом все люди абсолютно становятся консерваторами. Это свойство памяти. Новое почему-то не помнится.
    А вам?
    Вот уж не помню что я делал в 16 лет.. Вроде ботанел над книжками, а вот лет после 20 о широком карьерном шляхе начал мечтать, громкие и важные фразы учить чтобы в разговорах потом употреблять для повышения своей значимости. Будущее показало, что 90% из всех этих лозунгов - красивые, но малообоснованые слова. Несмотря на кажущуюся логичность.
    Об чем вы? Об #? Я пробовал ее. И вы пробовали. И уже заметили, что для дела она не годится, а только для вида (окошек-кнопочек) и пальцезагибательства (мода).
    ? (Учитывая что говорим мы в основном о #. А ну да еще о моих недостатках и ваших достоинствах.. - Они новые?)
    Это достоинства п-кода вообще (хоть и не во всех реализациях и реализации по качеству отличаются). .нет как обычная виртуальная машина само-собой их разделяет. Зачем это выделять? Или это реклама для школьников? Достаточно сказать, что .нет - виртуалка качеством слегка выше среднего. Этого достаточно.
    Это вы о создании технологий? В случае МС уместнее было-бы сказать 'уворовывается' и затем под именем 'очередная панацея от изобретательного МС' навязывается для решения как типичных, так и нетипичных задач. Абы только покупали.
    Не совсем понял на основании чего делается вывод о моей привержености одному инструменту/языку/платформе. Вы не путаете меня, случайно, ни с кем из ваших знакомых?
    Вы сказку про неважную скорость своим заказчикам по обработке данных скажите. То-то они обрадуются. Размер в определенных пределах и случаях - не важен. Но уж точно не в проектах, когда загрузка или подгрузка частей идет по сетке. Или вы только про бухгалтерский ширпотреб пишете? (О а есть еще всякие девайсы, но о них предлагаю замять, ибо это уже будут не посты а цельные романы)

    Это только один из алгоритмов. Самый простой.

    UbIvItS
    Хитрый (есть такое слово) != умный.

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

    По теме топика
    http://rsdn.ru/Forum/group/usability.aspx
    Поглядите там, поспрашивайте. Очень интересные проекты всплывают.
     
  10. W4FhLF

    W4FhLF New Member

    Публикаций:
    0
    Регистрация:
    3 дек 2006
    Сообщения:
    1.050
    _basmp_, забавный ты персонаж, до троля тебе осталось чуть-чуть, только вежливость и напущенная воспитанность по-началу вызывают желание тебе что-то объяснить. Стандарты не читаешь, за новыми технологиями не следишь, работаешь на компьютере 11 летней давности, делаешь категоричные заявления о судьбе и пригодности популярных платформ. Извини, я не могу воспринимать это всё всерьёз :) Не нашли мы общего языка.
     
  11. KingT

    KingT Member

    Публикаций:
    0
    Регистрация:
    12 янв 2006
    Сообщения:
    208
    Скажите а под .Net пишут обязательно на C# или можно использовать C++?.
    Я с этой штукой не знаком совершенно.Насколько я понимаю .Net это набор готовых компонент для интерфейса,которые можно сразу использовать,а критичные к времени участки кода писать на C++.

    Да кстате помоему офис был целиком написан на MFC...
     
  12. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.242
    W4FhLF
    насчёт невозможно - это неверно, но, правда, при большом кол-ве ветвлений просчёт всех возможных комбинаций, и впрямь, слишком "тяжёл". всё же можно использовать более лучшие подходы чем СМ - можно юзать сборщик статистики использования памяти для дальнейшего достраивания кода в целях оптимайза рэма.
     
  13. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.242
    _basmp_
    да, вы правы - могут быть случаи, когда есть ссылки, но текущий расклад исполнения кода уже делает часть переменных/объектов фактически мёртвыми.
     
  14. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    UbIvItS
    что значит достраивание кода и какой такой _оптимайз_ ты собрался делать?
     
  15. r90

    r90 New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2005
    Сообщения:
    898
    Есть ситуации в которых сборка мусора -- единственный выход. Например, когда разные потоки используют один ресурс -- когда его освобождать надо? В простых ситуациях, можно обойтись счётчиком ссылок. В сложных, может понадобиться реализовывать полноценную сборку мусора. Хотя на практике, я не сталкивался с ситуацией, когда нельзя было выкрутиться счётчиком ссылок.
    Но даже если счётчик ссылок -- это уже не препроцессор. Препроцессор, может это дело спрятать от программиста, но всё равно будет генериться код типа:
    Код (Text):
    1. if (!--ptr->ref_count)
    2.     free (ptr);
    В случае же многих потоков, ещё неплохо было бы залочить этот самый ptr, чтобы между if и free никто не втесался.

    Какой такой препроцессор? Всё runtime.
     
  16. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.242
    varnie
    при прохождении определённой цепочки ветвлений часть переменных теряет на себя все ссылки - их можно зачистить.
    r90
    ты сам и ответил на свой вопрос: препроцессор должен внедрить в код строки, кои будут зачищать переменные/объекты, когда они уже не нужны. тоесть автоматом в коде на каждый объект создаётся счётчик и коды его инкрементации/декрементации. когда счётчик имеет значение>0, он может быть (ин/де)крементирован - иначе объект маздай.
     
  17. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    UbIvItS
    окей, а вдруг я сделаю:
    Код (Text):
    1. void g(int *p){
    2.     int *q = p;
    3.     //...
    4.     delete p;
    5. }
    6. void f(){
    7.     int *pInt = new int();
    8.     //...
    9.     g(p);
    10.     delete pInt;
    11. }
    как твой препроцессор распознает что:
    1. в ф-ции g() delete q; делать не надо
    2. в ф-ции f() delete pInt; делать не надо
    3. в ф-ции g() delete p; не является ошибкой
    4. в ф-ции f() delete pInt; приведет к ошибке
    ?
    у тебя все в куче -- и препроцессор, и эмулятор, и виртуальная машина. осталось посмотреть на такое чудо природы:) если покажешь - буду признателен.
     
  18. wsd

    wsd New Member

    Публикаций:
    0
    Регистрация:
    8 авг 2007
    Сообщения:
    2.824
    Давайте тему прикроем?
    а кому это интересно - просто помониторят предложения о работе :)
    а то тут дело кажется в сторону камасутры движется :)))
     
  19. UbIvItS

    UbIvItS Well-Known Member

    Публикаций:
    0
    Регистрация:
    5 янв 2007
    Сообщения:
    6.242
    varnie
    ты здесь путаешь корневой объект и ссылку на него: c ссылкой ты работаешь сам и она используется автоматикой только для подсчёта ссылок на объект.
    ты делаешь ту же ошибку - создаётся два объекта: переменая инт и указатель на инт - *pInt. с *pInt ты опять же работаешь сам. в частности может быть строчка в твоём коде pInt++; и тогда ссылка уплывает. впрочем, давай отметим одну вещь, ты полез в с/с++ и анализатор там будет выглядеть куда сложней, ибо есть арифметика указателей и отсутствие ссылок на объект вовсе не значит, что его можно прибить в отличие от джавика
    не могу согласиться: я говорю, что препроцессор внедряет в код строчки для удаления ненужных объектов - при чём тут виртуалка и эмуль???
     
  20. varnie

    varnie New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2005
    Сообщения:
    1.785
    UbIvItS
    я понимаю, что ты мыслишь в "плоскости Ява", но все же:
    ссылка и указатель - вещи разные.
    ошибки я не делаю.
    выделяется 4 байта памяти, указатель на которые помещается в переменную pInt (объект класса int, если хочешь). никаких других объектов нет.
    каким образом он эти операции будет производить? ты не удосужился это пояснить, а пока что фантазиями расплескиваешься (не в обиду).
    а если мне не надо ничего "внедрять"? (ибо я сам забочусь об корректном освобождении памяти, закрытии дескрипторов, освобождении ресурсов итд). мне попросить твой мега-препроцессор пойти лесом и не мешать мне?
    пойми, что без ран-тайма невозможно определить когда освобождать ресурсы, занятые тем или иным объектом.
    ты хочешь сказать, что в Sun и MS дураки работают, раз решили обойти стороной твою идею с "умным препроцессором", и разработать виртуальные машины?
    wsd
    +1