Здравствуйте, Sergey, Вы писали:
S>Я не в курсе, что такое типичный проект — как-то ни разу не писал код для S>типичных проектов, все сплошь какая-то конкретика попадается. В одном S>конкретном случае таким образом около 5% памяти набегало. По быстродействию S>трудно без профилирования оценить, но инициализация таблиц виртуальных S>функций (которые часто нафиг не нужны) тоже не бесплатная.
5% от чего? От общего объема съеденной процессом памяти?
Hello, Дарней!
You wrote on Thu, 23 Dec 2004 10:53:20 GMT:
S>> Я не в курсе, что такое типичный проект — как-то ни разу не писал код S>> для типичных проектов, все сплошь какая-то конкретика попадается. В S>> одном конкретном случае таким образом около 5% памяти набегало. По S>> быстродействию трудно без профилирования оценить, но инициализация S>> таблиц виртуальных функций (которые часто нафиг не нужны) тоже не S>> бесплатная.
Д> 5% от чего? От общего объема съеденной процессом памяти?
От выделенной в хипе памяти. А какая разница, сколько процентов? Главное,
что на такую совершенно бесполезную в данном конкретном случае вещь, как
возможность удалять MyCoolSomethingDrawer через указатель на Rectangle, не
тратится ни байта памяти и ни такта процессора.
With best regards, Sergey.
Posted via RSDN NNTP Server 1.9 delta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>Я, кстати, уже предлагал сделать коммунальный сборник цитат. Это никого не вдохновило. Пришлось ограничиться локальным rsdn-citata.txt
СОздай топик в обсуждении сайта. Если там появится достаточно материала нет никаких проблем оформить ввиде статьи.
Здравствуйте, Sergey, Вы писали:
S>От выделенной в хипе памяти. А какая разница, сколько процентов? Главное, S>что на такую совершенно бесполезную в данном конкретном случае вещь, как S>возможность удалять MyCoolSomethingDrawer через указатель на Rectangle, не S>тратится ни байта памяти и ни такта процессора.
Это значит, что по сравнению с общии затратами памяти эта цифра будет еще меньше.
А разница в том, что вместо глупой и ненужной возни с деструкторами можно было заняться оптимизацией алгоритмов и сэкономить не 5, а 30 процентов, например.
S>>Виртуальный деструктор — напрасный перерасход памяти.
Д>Как ты думаешь — сколько процентов памяти ты сэкономишь в типичном проекте таким образом?
Как ты думаешь, насколько важны эти проценты памяти для embedded-систем?
Да почему же все, кто ругает С++ за невиртуальные по умолчанию деструторы, за битовые поля, отсутсвие солидной рантайм-поддержки и пр. забывают о том, что проекты бывают не только для десктопа с установленным Windows?
Hello, Дарней!
You wrote on Thu, 23 Dec 2004 11:19:48 GMT:
S>> От выделенной в хипе памяти. А какая разница, сколько процентов? S>> Главное, что на такую совершенно бесполезную в данном конкретном случае S>> вещь, как возможность удалять MyCoolSomethingDrawer через указатель на S>> Rectangle, не тратится ни байта памяти и ни такта процессора.
Д> Это значит, что по сравнению с общии затратами памяти эта цифра будет Д> еще меньше.
Ну и что? Ну будет 4.5%, а не 5, какая разница?
Д> А разница в том, что вместо глупой и ненужной возни с деструкторами
Гы Возни с деструкторами там как раз вообще нет (ни глупой, ни ненужной),
равно как нет и runtime-полиморфизма, как нет и нетривиального деструктора у
Rectangle. Все это в данном конкретном случае просто не нужно.
Д> можно было заняться оптимизацией алгоритмов и сэкономить не 5, а 30 Д> процентов, например.
Невозможно. Все соптимизировано так, что дальше некуда. Любая попытка
сэкономить пару байт на объект приведет к неприлично большим потерям по
быстродействию и наоборот.
With best regards, Sergey.
Posted via RSDN NNTP Server 1.9 delta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Hello, Alxndr!
You wrote on Thu, 23 Dec 2004 11:24:48 GMT:
Д>> Как ты думаешь — сколько процентов памяти ты сэкономишь в типичном Д>> проекте таким образом?
A> Как ты думаешь, насколько важны эти проценты памяти для embedded-систем?
A> Да почему же все, кто ругает С++ за невиртуальные по умолчанию A> деструторы, за битовые поля, отсутсвие солидной рантайм-поддержки и пр. A> забывают о том, что проекты бывают не только для десктопа с A> установленным Windows?
У меня там, кстати, совсем не embedded, а вовсе даже под винду. Только вот у
винды память тоже ой как быстро кончается — 2.5 Гб еще выделишь, а вот уже
2.8 — фигушки. Особенно приятно, когда работает себе программа, работает,
часа три к ряду работает, а потом раз — Облом Петрович, нема памяти больше.
А все из-за того, что кто-то соломку на километр вокруг себя разложил, чтоб,
значит, падать при случае совсем не больно было.
With best regards, Sergey.
Posted via RSDN NNTP Server 1.9 delta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, AndrewVK, Вы писали:
ЗХ>>Я, кстати, уже предлагал сделать коммунальный сборник цитат. Это никого не вдохновило. Пришлось ограничиться локальным rsdn-citata.txt
AVK>СОздай топик в обсуждении сайта. Если там появится достаточно материала нет никаких проблем оформить ввиде статьи.
Вариант. Но у меня их (цитатей) уже многовато для одного сообщения — поскольку есть несколько очень объемистых.
Буду думать.
Здравствуйте, Alxndr, Вы писали:
A>Да почему же все, кто ругает С++ за невиртуальные по умолчанию деструторы, за битовые поля, отсутсвие солидной рантайм-поддержки и пр. забывают о том, что проекты бывают не только для десктопа с установленным Windows?
Потому что embedded — это далеко не мэйнстрим. Там и на ассемблере часто пишут — так что, всем на ассемблер что ли возвращаться?
Здравствуйте, Sergey, Вы писали:
S>Невозможно. Все соптимизировано так, что дальше некуда. Любая попытка S>сэкономить пару байт на объект приведет к неприлично большим потерям по S>быстродействию и наоборот.
Значит, нужно думать, как экономить на количестве объектов. Хотя это тоже от задачи зависит.
Да и вообще, вычислительные задачи — это достаточно редкое явление.
Здравствуйте, AndrewVK, Вы писали:
AVK>Здравствуйте, jazzer, Вы писали:
J>>Последние лет 8 я работаю только в команде. J>>Такие вещи в реальной жизни случаются очень редко.
AVK>Вот тебе описание изменений свежевышедшего subversion AVK>
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>Здравствуйте, AndrewVK, Вы писали: ЗХ>Вариант. Но у меня их (цитатей) уже многовато для одного сообщения — поскольку есть несколько очень объемистых.
Зачем для одного. В корневом сообщении опишешь свою затею, а каждая цитата по одному сообщению внутри ветки.
Здравствуйте, Дарней, Вы писали:
Д>Здравствуйте, jazzer, Вы писали:
J>>Для опенсорсного проекта нужен очень грамотный ПМ, который сможет разбираться во всех присылаемых патчах и коммитах, отсеивать некачественное, по возможности исправлять, и т.д.
Д>Для закрытого проекта он нужен ничуть не меньше. Чтобы общаться с заказчиком, который никогда не знает сам, что ему нужно. Чтобы перепроектировать программу, когда заказчику вместо кофемолки вдруг понадобится газонокосилка. Чтобы объяснять разработчикам, что объяснения типа "но у меня же это работает!" еще не доказывают, что гнилой код не надо переписывать.
Во-первых, эта проблема лежит не в плоскости языка.
Надо набирать нормальных разработчиков и устраивать взаимный code review.
ПМ должен заниматься управлением, общением с заказчиком, а не залезанием в код, который пишут его программисты.
Кстати, аргумент "а на java можно набирать кого угодно, потому что язык проще" не работает: мои знакомые ПМы имеют много проблем с такими программистами на java, которые умудряются писать на этому суперязыке редкостную ахинею. Да, прога не падает в корку по access violation, но зато она тормозит, жрет море памяти и вылетает по NullPointerException.
J>>что ты называешь "действительно сложным"?
Д>Программу, которая не является очередной системой для автоматизации какого-нибудь третьего заборостроительного завода.
Ты считаешь проектирование систему автоматизации простой задачей? Ну-ну
То, что задача типовая, не является ее упрощением, если ты пишешь ее с нуля.
А вот спроектировать нечто универсальное типа 1С или SAP R/3 — даже ты такую задачу простой не назовешь.
J>>Еще раз. Случаи внесения изменений, когда требуется "продумывать код", возникают один раз из ста.
Д>Еще раз. В программы не только вносят изменения, их перед этим еще и пишут с нуля.
Мне вот очень не нравится, когда в процессе обсуждения происходит подмена понятий. Мы начали обсуждение с бага, который можно внести очень редко, и его можно избежать при помощи анализа, который, очевидно, займет больше времени, чем отсутствие анализа. А теперь вдруг выясняется, что мы попутно обсуждаем программы, написанные с нуля.
ОК. Я не считаю, что для программ, написанных с нуля, время проектирования для разных языков различается в разы. А при грамотном проектировании реализация будет очевидной и предсказуемой по срокам.
J>>Мне язык не мешает. И большинству тут присутствующих — тоже.
Д>Достаточно заглянуть в форум по С++, чтобы убедиться, что большинству он таки мешает.
Хорошо, сойдемся на том, что я — исключение, и именно мне он и не мешает.
Д>А если заглянуть в код какого-нибудь проекта, так и вовсе волосы дыбом встают. Порой просто диву даешься, как же оно вообще работает. Если твой проект не такой — значит, это очень редкое исключение.
Есть море сишного кода, вообще без классов и ГЦ, на котором построены сложнейшие системы.
А в сишном коде еще тяжелее разбираться — и ничего, все живы пока.
Если помните, вц6 шла под лозунгом "we use it to write it" (за точность цитаты не ручаюсь, но смысл в том, что студия написана на С/С++).
J>>Не согласен. С++, как тут было сказано много раз, поддерживает множество парадигм программирования. И на ООП с динамической типизацией, вируальностями и фабриками свет клином не сошелся. Посмотри на STL — там сплошь наследование без виртуальностей.
Д>где, например?
например, функторы, биндеры, итераторы.
Вообще, виртуальные деструкторы встречаются только в RTTI, исключениях и потоках.
J>>Здесь же разговаривают люди, которые уже знают китайский, вовсю им пользуются и зарабатывают им деньги, так что обсуждать с ними этот вопрос абсурдно.
Д>Я подозревал, что в конце концов наше обсуждение выродится в утверждения вида "а если не понимаешь С++, то вообще ты сам дурак" Д>Очень неприятно, что так и произошло.
Как-то ты неправильно читаешь между строк. Я такого не говорил и в виду не имел.
Я имел в виду лишь то, что сказал.
Если я УЖЕ что-то знаю, то вести разговор со МНОЙ о том, как МНЕ это сложно изучить — бессмысленно, потому что я УЖЕ обладаю этими знаниями, а не собираюсь их получить, а ты пытаешься меня от этого отговорить.
Если же речь о том, что неофиту сложнее изучить С++, чем java — для этого есть соседняя ветка, но на всякий случай скажу, что я с этим утверждением согласен — сложнее.
J>>Я знаю достаточно идиом, чтобы быстро и легко писать безопасный код.
Д>Все так думают, пока не приходит пора копнуть на пару метров от того места, где они привыкли копать.
Ну, значит, я знаю, где копать, чтобы не напороться на высоковольтный кабель.
Тоже скилл полезный.
Hello, Дарней!
You wrote on Thu, 23 Dec 2004 11:42:59 GMT:
S>> Невозможно. Все соптимизировано так, что дальше некуда. Любая попытка S>> сэкономить пару байт на объект приведет к неприлично большим потерям по S>> быстродействию и наоборот.
Д> Значит, нужно думать, как экономить на количестве объектов.
Нет, выбор был в другом — либо не использовать объекты вовсе и работать с
массивами координат и прочими атрибутами несуществующих объектов именно как
с массивами, либо не использовать только ненужные в конкретном случае
фичи ООП и работать с массивами объектов известного в компил-тайме типа. Ежу
понятно, что второе удобнее.
Д> Хотя это тоже от задачи зависит. Да и вообще, вычислительные задачи - Д> это достаточно редкое явление.
Это не вычислительная задача — просто отображалка некоего графа. Или,
например, очень большой таблицы (а вот ее я сдуру написал без объектов).
Кстати, отображалку таблиц пришлось писать всего лишь из-за того, что IE 4.5
(давно дело было) HTML-таблицу размером всего-то 1000x1000 ячеек открывал
около получаса, выжирая около гига памяти. Зато все насквозь объектно и
полиморфно. Потом, правда, это дело пофиксили без особого ущерба для
объектности
Да даже в текстовом редакторе, который упоминается в "паттернах" GOF (там,
насколько я помню, по объекту на символ текста), и то имеет смысл избегать
лишний раз использования виртуальных функций. Тем более там, где эта
виртуальность нафиг не упала.
With best regards, Sergey.
Posted via RSDN NNTP Server 1.9 delta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Здравствуйте, Дарней, Вы писали:
Д>Здравствуйте, Alxndr, Вы писали:
A>>Да почему же все, кто ругает С++ за невиртуальные по умолчанию деструторы, за битовые поля, отсутсвие солидной рантайм-поддержки и пр. забывают о том, что проекты бывают не только для десктопа с установленным Windows?
Д>Потому что embedded — это далеко не мэйнстрим.
Ок, то есть ты предлагаешь мне, который пишет под embedded, использовать везде виртуальные деструкторы только потому, что в своем мейнстриме ты можешь чего-то там напортачить?
В том-то и дело, что если под мейнстримом ты понимаешь дестоп с виндами да плюс некритичные к ресупсам приложнения, то писать можно на чем угодно: VB, C#, Delphi и пр.
С++ — язык с нулевыми издержками, "чем не пользуюсь, за то не плачу". Это один из ИМХО основных принципов языка, существенно отличающих его от вышеперечисленных мной, в результате чего его можно использовать везде и на всем. Ты предлагаешь от этого принципа отписаться. Вместо этого я предлагаю тебе пользоваться языковыми средствами для того, чтобы соорудить себе такие ограничения в дизайне, которые ты считаешь нужными.
Д>Там и на ассемблере часто пишут — так что, всем на ассемблер что ли возвращаться?
Здравствуйте, AndrewVK, Вы писали:
J>>Последние лет 8 я работаю только в команде. J>>Такие вещи в реальной жизни случаются очень редко. AVK>Вот тебе описание изменений свежевышедшего subversion
[skip]
AVK>Притом у меня есть основания полагать что люди, пишушие его, имеют очень неплохой уровень.
SVN написан на pure C (около 800 файлов). Только COM и Java-binding содержат чуть-чуть C++ (~20 файлов). Статистика по версии 1.0.9.
Да, классы они эмулируют, но это — чистейший C, со всеми, свойственными ему проблемами.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, Дарней, Вы писали:
Д>Здравствуйте, Sergey, Вы писали:
S>>Невозможно. Все соптимизировано так, что дальше некуда. Любая попытка S>>сэкономить пару байт на объект приведет к неприлично большим потерям по S>>быстродействию и наоборот.
Д>Значит, нужно думать, как экономить на количестве объектов. Хотя это тоже от задачи зависит. Д>Да и вообще, вычислительные задачи — это достаточно редкое явление.
Дорогой мой, разносчиков пиццы гораздо больше, чем программистов. Если ты занимаешься натягиванием формочек на базы данных, то это вовсе не значит, что ничего другого в мире программирования нет.
Здравствуйте, Шахтер, Вы писали:
Ш> Если ты занимаешься натягиванием формочек на базы данных, то это вовсе не значит, что ничего другого в мире программирования нет.
Этим я давно уже не занимаюсь, продвинутый ты наш.
Здравствуйте, Sergey, Вы писали:
S>Кстати, отображалку таблиц пришлось писать всего лишь из-за того, что IE 4.5 S>(давно дело было) HTML-таблицу размером всего-то 1000x1000 ячеек открывал S>около получаса, выжирая около гига памяти. Зато все насквозь объектно и S>полиморфно. Потом, правда, это дело пофиксили без особого ущерба для S>объектности
А ты никогда не задумывался, каким образом они это сделали?
Если бы вместо борьбы с виртуальными деструкторами ты читал книгу "банды четырех" повнимательнее, то нашел бы там паттерн Flyweight, который позволил бы уменьшить издержки памяти не на 5%, а в разы.
Но это, конечно же, не наш путь