шаблоны никак не влияют на ран-тайм выполнение, ибо "разбираются" на стадии компиляции, а не в ран-тайме. а про минимум объектных фокусов хотел бы заметить, то что тогда вы предлагаете от С++ оставить?
_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. Ты так и не понял, что не существует единственного инструмента/языка/платформы, которые бы позволяли решать любую задачу одинаково эффективно. Ты наверное не знаешь, но сегодня на рынке скорость выполнения и уж тем более размер являются далеко не единственными и даже не самыми главными критериями оценки качества ПО. Удачи.
мда..... довольно милый спор))))))) W4FhLF а при чём тут это??? гую как таковую никто не оптимайзит. оптимайзят рабочую часть проги. при этом современные прогеры опшибочно полагают, что на оптимайз забить можно, ибо много ресурсов - на самом деле есть куча задач, особенно научных, где сразу понимаешь, что всё это железо черепашки - ниндзя в ооооочень замедленной прокрутки)))) c другой стороны я согласен с тобой, что тупо оптимайзить ПО - это всё для теоретиков идеалистов: дорога ложка к обеду, а оптимайз суровый отодвигает эту ложку в будущий век) именно поэтому я и говорю, что в системы автооптимайза кода будут вкладываться большие средства, ибо ручками это делать экономически невыгодно. кстати, очень меня смешит гарбадж коллектор, ведь, сцука делает то, что может сделать препроцесор кода один раз)) _basmp_ борьба за жисть - это обычный вид деятельности и жаловаться тут никому не приходиться, к тому же современная цивилизация не делает человека счастливым, подменяя всё суррогатами. Мир - абсолютно сбалансированная система, т. ч. получить можете всё, что захотите, только нужно осознавать цену своих "хочу", а то потом обида посетит, ибо она высока) а БГ, на мой взгляд, нормальный, умный чел вопреки тиражируемым стереотипам))))
varnie тебе что-то не нравиться))))??? последнее обращение к переменной в коде и является временем её официальной смерти
UbIvItS жги исчо. каким образом ты на уровне препроцессинга будешь управлять жизнью объектов (которых еще не существует). где ты видел препроцессоры в ран-тайме?? короче, бред.
varnie а для чего нужен код проги???)))))) или точка создания объекта записана не в коде, а где-то в астрале)))))??????????
UbIvItS, то о чём ты говоришь невозможно реализовать в compile-time. В GC это реализовано посредством подсчёта ссылок на объект. Ты не можешь заранее сказать сколько переменных ссылаются на один обект в любой момент выполнения программы. Для этого тебе пришлось бы на этапе компиляции просчитывать все возможные сценарии выполнения программы.
varnie шаблоны могут приводить к неоптимальным решениям. Компилер не все и не всегда может соптимизировать верно. Тут конкретно сказать трудно. По месту в дебугере смотреть надоть. В простых случаях - все терпимо. А при достаточно развитом шалонировании/наследовании/обилии классов итд может привести к удивительному разрастанию кода (во всяком случае это наблюдалось пару проектов назад в сторонней либе). Источник - дебугер (те искать тараканов просматривая избраные места в нем). По языку стандарты читал уже не помню когда всвязи с их малой практической полезностью относительно конкретных компилеров. (это больше к претензиям W4FhLF-а) Предвидя возможные вопросы сразу пишу, что открытых проектов на ++ щас нет, а в архиве моем черт ногу сломит. Если тема эта будет интересовать и в дальнейшем, постараюсь предоставить примеры в будущем. W4FhLF Ну вот и снова к нашей скучной беседе слегка о # и не слегка о моих недостатках и ваших достоинствах. Сразу и немного отвлекаясь хочу выразить вам свою зависть по поводу вашего шикарного ника. Вы тоже новые ники из старых паролей образуете? Энто вы как хотите. А я можно продолжу на вы? Вас обращение к вам на 'вы', надеюсь, не очень тяготит? В пользу того, что все коммерчески-выгодные и перспективные технологии в независимости от их сложности и правовой защищенности незамедлительно сдуваются конкурентами. Примеров валом. Учитывая, что клоны или полуклоны у # за > 7 лет даже и не пытались появиться можно однозначно утверждать, что технологии .нет аналитиками крупных фирм не признаны стоящими. Да читал, читал. Ну и что? Что тут нового или не существовавшего под вынь к моменту зарождения .нет? То, что от МС? Или то, что рекламой заваливают все кто на собственных мыслях личное ценное время cэкономил? Во первых на .нет разговор сосредоточили вы, перекрутив в посте #48 мое заявление о ВБ и .нет. Обратите внимание, я не писал конкретно о С# или F#. Общим в ВБ и .нет является именно п-код базированость и несовместимый между версиями глюкавый и раздутый рантайм. А конкретные языки.. Мы ведь на форуме асма или где? Чем так важен фроненд? Ну а оценить что-либо можно только в сравнении с альтернативами. Есть, конечно, пакеты значительно хуже .нет, но.. Или вы предпочитаете сравнивать только с откровенным отстоем? П-код изначально был задуман именно как средство дешевого обеспечения кроссплатформености. Без нее это копание земли вилкой. Как надоели ваши тупые наезды без оснований и какие-то требования. Вы верно путаете меня со своим подчиненным. Если это так, то куда за зарплатой приходить? А насчет конкретных примеров, то ничего особо специального, в сети все есть. Нужна какая не самая маленькая прога имеющая аналог в маш коде. Удаляете рантаймы .нет со своей машины. Качаете по гпрс прогу, качаете рантайм к ней. Смотрите во что у вас скачка влетит. Сравниваете скорость аналогов. И делаете выводы какие вам хочется. Всвязи с тем, что не существует обоснованых отличий managed code от п-кода я прелгаю удалить слово managed code как синоним введеный исключительно в спекулятивно-рекламных целях и лишенный специфичного смысла. А сравнивать п-код при условии жит компиляции стоит с кодом С, С++ или Пас, по желанию. Скажем, жит компилер из АСК дает вполне приличный код. Кроме того, написание высокопроизводительного многопоточного кода в п-код + жит системах вполне возможно. Даже непонятно какие тут проблемы. Вот только С# - действительно не годится ибо захотели они сильно всего с соответствующими результатами. Все больше и больше прихожу к мнению, что вы по роду деятельности в основном менеджер. Скажем, руководитель небольшой группы вчерашних студентов. Безусловно подающий большие надежды. Вобще-же на стадии подготовки можно только предполагать с достаточным допуском, а определять минимумы точно можно только после появления продукта, тк основные тараканы вылазят на стадии отладки (имеется в виду, что пути решения были выбраны на стадии планирования и с этим проблем нет) или у вас все работает как запланировано сразу (если, конечно, вы пишете сами)? И вот визуальное наблюдение за отладочными сообщениями в позволяет часто с первого захода выявить неудачный код именно в важном функционале. Тогда в чем вы меня так пытаетесь убедить? И слово 'опять'. Когда мне 'почудилось' в первый раз? Или это просто такой повышающий самомнение оборот речи? Дебугер в руки, бумажки на самокрутки, а как это называется для дела неважно. 'Сынком' я вас не называл. Не нужно мне помогать с придумыванием слов, обычно я и сам с этим неплохо справляюсь. А прогрессорство - типичный признак молодости (25-27 лет - молодежь). С возрастом все люди абсолютно становятся консерваторами. Это свойство памяти. Новое почему-то не помнится. А вам? Вот уж не помню что я делал в 16 лет.. Вроде ботанел над книжками, а вот лет после 20 о широком карьерном шляхе начал мечтать, громкие и важные фразы учить чтобы в разговорах потом употреблять для повышения своей значимости. Будущее показало, что 90% из всех этих лозунгов - красивые, но малообоснованые слова. Несмотря на кажущуюся логичность. Об чем вы? Об #? Я пробовал ее. И вы пробовали. И уже заметили, что для дела она не годится, а только для вида (окошек-кнопочек) и пальцезагибательства (мода). ? (Учитывая что говорим мы в основном о #. А ну да еще о моих недостатках и ваших достоинствах.. - Они новые?) Это достоинства п-кода вообще (хоть и не во всех реализациях и реализации по качеству отличаются). .нет как обычная виртуальная машина само-собой их разделяет. Зачем это выделять? Или это реклама для школьников? Достаточно сказать, что .нет - виртуалка качеством слегка выше среднего. Этого достаточно. Это вы о создании технологий? В случае МС уместнее было-бы сказать 'уворовывается' и затем под именем 'очередная панацея от изобретательного МС' навязывается для решения как типичных, так и нетипичных задач. Абы только покупали. Не совсем понял на основании чего делается вывод о моей привержености одному инструменту/языку/платформе. Вы не путаете меня, случайно, ни с кем из ваших знакомых? Вы сказку про неважную скорость своим заказчикам по обработке данных скажите. То-то они обрадуются. Размер в определенных пределах и случаях - не важен. Но уж точно не в проектах, когда загрузка или подгрузка частей идет по сетке. Или вы только про бухгалтерский ширпотреб пишете? (О а есть еще всякие девайсы, но о них предлагаю замять, ибо это уже будут не посты а цельные романы) Это только один из алгоритмов. Самый простой. UbIvItS Хитрый (есть такое слово) != умный. Использование грамотного ГЦ в ряде случаев позволяет значительно ускорить выполнение программы. По теме топика http://rsdn.ru/Forum/group/usability.aspx Поглядите там, поспрашивайте. Очень интересные проекты всплывают.
_basmp_, забавный ты персонаж, до троля тебе осталось чуть-чуть, только вежливость и напущенная воспитанность по-началу вызывают желание тебе что-то объяснить. Стандарты не читаешь, за новыми технологиями не следишь, работаешь на компьютере 11 летней давности, делаешь категоричные заявления о судьбе и пригодности популярных платформ. Извини, я не могу воспринимать это всё всерьёз Не нашли мы общего языка.
Скажите а под .Net пишут обязательно на C# или можно использовать C++?. Я с этой штукой не знаком совершенно.Насколько я понимаю .Net это набор готовых компонент для интерфейса,которые можно сразу использовать,а критичные к времени участки кода писать на C++. Да кстате помоему офис был целиком написан на MFC...
W4FhLF насчёт невозможно - это неверно, но, правда, при большом кол-ве ветвлений просчёт всех возможных комбинаций, и впрямь, слишком "тяжёл". всё же можно использовать более лучшие подходы чем СМ - можно юзать сборщик статистики использования памяти для дальнейшего достраивания кода в целях оптимайза рэма.
_basmp_ да, вы правы - могут быть случаи, когда есть ссылки, но текущий расклад исполнения кода уже делает часть переменных/объектов фактически мёртвыми.
Есть ситуации в которых сборка мусора -- единственный выход. Например, когда разные потоки используют один ресурс -- когда его освобождать надо? В простых ситуациях, можно обойтись счётчиком ссылок. В сложных, может понадобиться реализовывать полноценную сборку мусора. Хотя на практике, я не сталкивался с ситуацией, когда нельзя было выкрутиться счётчиком ссылок. Но даже если счётчик ссылок -- это уже не препроцессор. Препроцессор, может это дело спрятать от программиста, но всё равно будет генериться код типа: Код (Text): if (!--ptr->ref_count) free (ptr); В случае же многих потоков, ещё неплохо было бы залочить этот самый ptr, чтобы между if и free никто не втесался. Какой такой препроцессор? Всё runtime.
varnie при прохождении определённой цепочки ветвлений часть переменных теряет на себя все ссылки - их можно зачистить. r90 ты сам и ответил на свой вопрос: препроцессор должен внедрить в код строки, кои будут зачищать переменные/объекты, когда они уже не нужны. тоесть автоматом в коде на каждый объект создаётся счётчик и коды его инкрементации/декрементации. когда счётчик имеет значение>0, он может быть (ин/де)крементирован - иначе объект маздай.
UbIvItS окей, а вдруг я сделаю: Код (Text): void g(int *p){ int *q = p; //... delete p; } void f(){ int *pInt = new int(); //... g(p); delete pInt; } как твой препроцессор распознает что: 1. в ф-ции g() delete q; делать не надо 2. в ф-ции f() delete pInt; делать не надо 3. в ф-ции g() delete p; не является ошибкой 4. в ф-ции f() delete pInt; приведет к ошибке ? у тебя все в куче -- и препроцессор, и эмулятор, и виртуальная машина. осталось посмотреть на такое чудо природы если покажешь - буду признателен.
Давайте тему прикроем? а кому это интересно - просто помониторят предложения о работе а то тут дело кажется в сторону камасутры движется ))
varnie ты здесь путаешь корневой объект и ссылку на него: c ссылкой ты работаешь сам и она используется автоматикой только для подсчёта ссылок на объект. ты делаешь ту же ошибку - создаётся два объекта: переменая инт и указатель на инт - *pInt. с *pInt ты опять же работаешь сам. в частности может быть строчка в твоём коде pInt++; и тогда ссылка уплывает. впрочем, давай отметим одну вещь, ты полез в с/с++ и анализатор там будет выглядеть куда сложней, ибо есть арифметика указателей и отсутствие ссылок на объект вовсе не значит, что его можно прибить в отличие от джавика не могу согласиться: я говорю, что препроцессор внедряет в код строчки для удаления ненужных объектов - при чём тут виртуалка и эмуль???
UbIvItS я понимаю, что ты мыслишь в "плоскости Ява", но все же: ссылка и указатель - вещи разные. ошибки я не делаю. выделяется 4 байта памяти, указатель на которые помещается в переменную pInt (объект класса int, если хочешь). никаких других объектов нет. каким образом он эти операции будет производить? ты не удосужился это пояснить, а пока что фантазиями расплескиваешься (не в обиду). а если мне не надо ничего "внедрять"? (ибо я сам забочусь об корректном освобождении памяти, закрытии дескрипторов, освобождении ресурсов итд). мне попросить твой мега-препроцессор пойти лесом и не мешать мне? пойми, что без ран-тайма невозможно определить когда освобождать ресурсы, занятые тем или иным объектом. ты хочешь сказать, что в Sun и MS дураки работают, раз решили обойти стороной твою идею с "умным препроцессором", и разработать виртуальные машины? wsd +1