Re[39]: Чем становится C++?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 26.12.04 20:56
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Ага, есть. Только наследоваться от них нельзя.


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

ПК> Кстати, интересно, а можно ли в C# передавать эти структуры в функции по ссылке, так чтобы их можно было в функциях модифицировать (соответственно, боксинг не подходит)?


Да.
... << RSDN@Home 1.1.4 beta 3 rev. 268>>
AVK Blog
Re[24]: Чем становится C++?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 26.12.04 21:30
Оценка:
Здравствуйте, AndrewVK, Вы писали:

A>>Зато были проблемы с неуникодностью Scintilla,

AVK>Написанной на C++

Managed C++!

A>> с IE неосвобождающим память...

AVK>Написанным на С или С++, точно не знаю.

Дело ведь не в том, что он ресурсы совсем не освобождает, дело в том, что там освобождение отложено до луших времён, говоря проще имеет место некоторый garbage collector.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[20]: Чем становится C++?
От: adontz Грузия http://adontz.wordpress.com/
Дата: 26.12.04 21:34
Оценка:
Здравствуйте, VladD2, Вы писали:

A>>Один и тот же способ проблемы решения сбоев.

VD>Ничего похожего. Отлов битой памяти и проверки четности чтения — это совсем разные вещи.

Я тебе про другое. Есть два способа повышения надёжности.
Первый это сделать систему изначально высоконадёжную.
Второй это сделать систему средней надёжности и оснастить её механизмом восстановления после сбоев.
Второй путь ИМХО перспективнее.

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

VD>В основном придуманные.

Отсутсвие кроссплатформенности. Янус не ахти какое большое приложение, а даже если МОНО воспроизведёт весь .Net Framework 1.1 фиг он скомпилируется под линуксом. С чего бы это?

A>>Зато он есть и на Маках.

VD>А вот Маки мне фиолетовы. К тому же на Маках есть Моно и Ява.

Зато маки не фиолетовы куче дизайнеров и типографов.

A>> Тебе не говорили, что PC-версия не является основной?

VD>Нет. Говорили обратное. Вот уже 5 лет как Адобе основными версиями считает Виндвс-версии. И знаешь почему? Потому что основные продажи под Виндовс.

Первый раз о таком слышу.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[36]: Чем становится C++?
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.12.04 21:38
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

>> Если бы мы говорили о каком-нибудь С, Хаскле, Клосе и т.п., то возможно ОО-дизайн действительно был бы не причем. Но в языке который авторами назван ОО <...>


ПК>Это утверждение не соответствует действительности. Авторами язык C++ назван поддерживающим много парадигм, в том числе и ООП. В частности, у Страуструпа даже статья специальная есть, Why C++ isn't just an Object-Oriented Programming Language.


Ну, то есть ФП в нем поддреживаться так же как ООП? Или язык не является ООЯ?

ПК>Как минимум, прочитать статью, на которую дана ссылка чуть выше.


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

ЗЫ

Кстати, цитата из абстракта статьи:
C++ directly supports a variety of programming styles.
И при попытке поиска слова paradigm — 0 вхождений. Все же у товарища совести хватает называть вещи своими именами.

В общем, если С++ многопорадигмный, то Шарп вообще просто супер многопорадигмный. Уж в нем хотя бы не нужно извращаться, чтобы получить породию на ФП. Жаль только как и С++ он не сильно оптимизирован на функциональный стиль. Так банальная двойная рекурсия ставит в тупик большинство компиляторов.

ЗЫЫ

И опять же разговор не о том. Проблема не в том, что С++ что-то там не поддерживает. Проблема в том, что реальные программисты прикрываясь разумными в общем-то словами о поддержке разных стилей забивают на дизайн и лепят горбатого объясняя это красивыми словами.
... << RSDN@Home 1.1.4 beta 3 rev. 267>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: Чем становится C++?
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.12.04 21:38
Оценка:
Здравствуйте, AndrewVK, Вы писали:

A>> с IE неосвобождающим память...


AVK>Написанным на С или С++, точно не знаю.


С там вроде бы быть не должно.
... << RSDN@Home 1.1.4 beta 3 rev. 267>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[39]: Чем становится C++?
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.12.04 21:50
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Кстати, интересно, а можно ли в C# передавать эти структуры в функции по ссылке, так чтобы их можно было в функциях модифицировать (соответственно, боксинг не подходит)?


Пашь, мне кажется поря познакомиться с "врагом" в лицо. Ну, что тебе стоит? Освой... язык ведь очень простой. А то развеивать твои подозрения право как-то неохота.
... << RSDN@Home 1.1.4 beta 3 rev. 267>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: Чем становится C++?
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.12.04 21:50
Оценка:
Здравствуйте, adontz, Вы писали:

A>Managed C++!


Обычном. И обернуто потом.
... << RSDN@Home 1.1.4 beta 3 rev. 267>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: Чем становится C++?
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.12.04 21:50
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Влад, ты не сильно удивишься, если я скажу что IDEA написана на swing?


Сильно.
... << RSDN@Home 1.1.4 beta 3 rev. 267>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: Чем становится C++?
От: alexeiz  
Дата: 26.12.04 22:35
Оценка: 29 (4)
Здравствуйте, VladD2, Вы писали:

VD>То что у дотнетных процессов при создании занимается сразу по нескольку мег памяти — это ровным счетом ничего не значит. То что мы наблюдаем — это не реальная память, а виртуальная и так называемый ворксет. Можешь провести вот такой простенький эксперемент:

VD>
...
VD>

VD>после второго нажатия объем памяти приложения станет около 540 кил.

Если не секрет, не поделишься, откуда ноги у этих сказок про working set растут? Не в том смысле, что working set — это все сказки, а в том, что "дерни за SetProcessWorkingSetSize — working set уменьшится, и наступит счастье". Я уже не раз встречал подобное заблуждение, очень распостраненное на рсдн'е.

Если действительно интересует, что делает данная функция, смотрим help. Самое важное, что мы там видим, это определение понятия working set:

The working set of a process is the set of memory pages currently visible to the process in physical RAM memory. These pages are resident and available for an application to use without triggering a page fault. The minimum and maximum working set sizes affect the virtual memory paging behavior of a process.


Собственно, отсюда уже понятно, что делает SetProcessWorkingSetSize, вызванная с параметрами, как у тебя в примере. Эта функция просто отправляет наибольшее количество страниц в page file. Со всеми вытекающими, естественно. Не думаю, что ты из этого получишь какую-либо выгоду, а ущерб, как мы видим, на лицо.

Параметр показываемый TaskManager'ом, который тебя должен интересовать, это virtual memory. И это будет набор memory pages, доступных для процесса (вне зависимости от их расположения в памяти или в page file). Как ты понимаешь virtual memory нельзя "уменьшить" такими трюками вроде SetWorkingSetSize. Вся память, которую, твой процесс затребовал, она вся здесь и никуда от нее не деться.

Но все-таки virtual memory — это слишком грубый параметр. На самом деле, имеет смысл поделить его на три части: private, shared & sharable. Private — это память, которая принадлежит твоему процессу и не с кем не разделяется (например, выделения с помощью VirtualAlloc попадают в эту категорию). Shared — это память разделяемая между процессами. Обычно это код и разделяемые данные из DLL, которые ты только читаешь. Sharable — это память, которая потенциально может разделяться, но в текущий момент ни один процесс кроме твоего в ней не заинтересован.

Теперь нам ясно, какой параметр нам нужно стараться уменьшать. Это, во-первых, private memory. Из managed кода, это значит, что нужно меньше выделять самому и меньше использовать всякие фичи, которые любят выделять/писать в память. Еще неплохо пользоваться NGEN'ом, чтобы избавиться от необходимости JIT'а, который динамически создает код, весь попадающий в private категорию.

Далее идет sharable. Sharable звучит вроде неплохо, но если ни с кем больше эта память не разделяется, то она для нас as good as private. Что это значит для managed кода — reflection. Metadata, которая читается из твоей assembly в 99% случаях больше никому кроме тебя не нужна. Если еще учесть, что она обычно очень разреженная, то вполне возможно, что чтение метадаты для каждого нового класса приведет к page fault.

Чтобы увидеть, где у тебя в процессе эти private, shared & sharable, нужно использовать vadump.
Re[32]: Чем становится C++?
От: prVovik Россия  
Дата: 26.12.04 23:35
Оценка: 1 (1) +3
Здравствуйте, VladD2, Вы писали:

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


A>>Не вижу преимуществ С применительно к данному случаю


VD>Дык если С++ испоьзовать как С, то конечно разницы нет. А елси начать использовать ООП и выкрутасы на шаблонах, то объем сжираемой памяти точно увеличится.

В том то и вся фишка, что не увеличится, а, возможно, даже уменьшится. При наличии нормального компилятора, конечно.
... << RSDN@Home 1.1.4 @@subversion >>
лэт ми спик фром май харт
Re[37]: Чем становится C++?
От: Павел Кузнецов  
Дата: 27.12.04 00:17
Оценка:
VladD2,

> ПК> Авторами язык C++ назван поддерживающим много парадигм, в том числе и ООП. В частности, у Страуструпа даже статья специальная есть, Why C++ isn't just an Object-Oriented Programming Language.


> Ну, то есть ФП в нем поддреживаться так же как ООП? Или язык не является ООЯ?


Все-таки, похоже, не прочитал...

Constraints-based, logic programming, functional programming, and various forms of concurrent programming are examples of good and useful styles of programming not supported by C++.

Posted via RSDN NNTP Server 1.9 delta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[40]: Чем становится C++?
От: Павел Кузнецов  
Дата: 27.12.04 01:03
Оценка:
VladD2,

> ПК> Кстати, интересно, а можно ли в C# передавать эти структуры в функции по ссылке, так чтобы их можно было в функциях модифицировать (соответственно, боксинг не подходит)?


> Пашь, мне кажется поря познакомиться с "врагом" в лицо. Ну, что тебе стоит? Освой... язык ведь очень простой. А то развеивать твои подозрения право как-то неохота.


В смысле, "развеивать подозрения"? Простого ответа "да"/"нет" в данном случае вполне достаточно Пока что у меня к C# интерес исключительно академический, соответственно, особенно тратить время на упражнения с ним не хочется. Недавно чуть было не познакомился поближе с VB.Net, решив установить DotNetNuke, но после некоторых мучений переключился на drupal, с которым пока проблем заметно меньше. В итоге, похоже, поближе познакомлюсь с PHP
Posted via RSDN NNTP Server 1.9 delta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[33]: Чем становится C++?
От: Дарней Россия  
Дата: 27.12.04 04:53
Оценка:
Здравствуйте, prVovik, Вы писали:

V>В том то и вся фишка, что не увеличится, а, возможно, даже уменьшится. При наличии нормального компилятора, конечно.


то есть — если использовать std::istream вместо ручного разбора данных, то это будет работать быстрее и отнимать меньше памяти?
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[34]: Чем становится C++?
От: Павел Кузнецов  
Дата: 27.12.04 05:29
Оценка: :))
Дарней,

> V> В том то и вся фишка, что не увеличится, а, возможно, даже уменьшится. При наличии нормального компилятора, конечно.


> то есть — если использовать std::istream вместо ручного разбора данных, то это будет работать быстрее и отнимать меньше памяти?


Нет. Но это не означает, что нельзя было сделать по-другому.
Posted via RSDN NNTP Server 1.9 delta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[40]: Чем становится C++?
От: Sergey Россия  
Дата: 27.12.04 08:09
Оценка:
Hello, Дарней!
You wrote on Sat, 25 Dec 2004 10:23:08 GMT:

S>> Это ты не подумавши сказал Какие такие накладные расходы для

S>> объектов, лежащих в векторе? Заметь — не указателей на объекты, а
S>> именно объектов? И, собственно, с чего спич начался — на кой черт
S>> объектам в этом случае виртуальные деструкторы?

Д> Есть еще куча разных вариантов с MMF, на которые тоже прекрасно ложится

Д> "приспособленец".

Хоть один кроссплатформенный среди них есть?

Д> Которые снимут ограничение на общий объем данных, и которые будут

Д> работать поэффективнее, чем твой вариант.

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

Д> Надо было просто думать об

Д> оптимизации алгоритма, а не крохоборством заниматься.
Еще раз, для тех кто в танке — нечего там оптимизировать.

Д> А вообще -

Д> кажется, мы отклонились от темы. Если у твоего класса закрыт деструктор
Д> и наследование от него не предусматривается в принципе,

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

With best regards, Sergey.
Posted via RSDN NNTP Server 1.9 delta
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[34]: Чем становится C++?
От: slegkapjan  
Дата: 27.12.04 08:30
Оценка:
Д>то есть — если использовать std::istream вместо ручного разбора данных, то это будет работать быстрее и отнимать меньше памяти?
N.B. Вообще, потоковая система STL написана из рук вон плохо. Даже при чтении одного байта через istream::get() вызвается огромное количество (в том числе и виртуальных функций), что приводит к очень большой потере производительности. В этом смысле, <stdio.h> и FILE* практически идеальное решение. Единственное, что лично меня не устраивает в FILE * -- это отсутствие возможности подключать эту библиотеку к своим потокам, поэтому, например, если нужно дать возможность программе считывать данные из сжатого файла как из обычного, приходится переходить на свою доморощенную потоковую библиотеку.
Re[30]: Чем становится C++?
От: jazzer Россия Skype: enerjazzer
Дата: 27.12.04 08:34
Оценка:
Здравствуйте, Дарней, Вы писали:

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


Д>JИли мы отсеем программера на С++ потому, что у него знаний больше?


Д>Потому что он больше денег требует :) При этом, при одинаковой производительности труда. (нет, я говорю не про скорость написания кода. Я говорю про скорость приближения к результату)


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

J>>Или это не так?


Д>Прочитай внимательно и поймешь, что не так.

Перечитал. Не понял. :)

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


Д>Дьявол, как всегда, в деталях. В данном случае — в цене.


см. выше

J>>Опыт автоматизации заборостроительного совсем не обязательно поможет при автоматизации сваезабивательного. :)


Д>Значит, хреновый это опыт.


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

J>>Далее, тот, кто вносит изменения в уже написанный код, действует по аналогии, т.е. если в коде удаляется объект, он его тоже удалит, если не удаляется — он его удалять не будет. А если и решит, что удалять надо или, наоборот, нужно убрать удаление, он в своем решении будет исходить опять же из известной политики владения, иначе можно легко посадить обсуждаемый баг или создать утечку.


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


То же самое в java, и так же надо следить. Память — это не единственный ресурс, за использованием которого нужно следить. Хорошо, что есть языки, которые позволяют программисту забыть о конкретно памяти, но все остальное все равно остается и это "остальное" тоже нужно проектировать и проверять.
К слову, С++ позволяет автоматизировать и то, и другое путем использования принципа RAII.
Т.е. большинство программистов С++, которых я знаю, не видят большой разницы в выделении памяти и открытии соединения с базой — и то, и другое без надобности держать не стоит, и то, и другое освобождать дважды — ошибка, так что и в том, и в другом случае политику владения ресурсом надо продумывать, документировать и следить за ее исполнением.

J>>Ты утверждаешь, что для java-приложений не бывает нескольких лет отладки?


Д>оптимизации — возможно. отладки — крайне маловероятно.

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

J>>Вот оно и есть — приведение к ссылке на базовый тип. Очевидно, с тем же успехом можно было бы применить и указатель на базовый тип.


Д>Ключевое слово здесь — "ссылка". А за указатель в таком месте надо нещадно бить по рукам.

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

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


Д>99% в какой области? ;) Можно например сказать, что "знание русского языка" подразумевает знание нескольких матов и умение правильно ответить на вопрос "ты меня уважаешь"? :))


Совершенно верное замечание. Взять, к примеру, стройку :) Там нужны как раз специфические навыки общения :)

Я к тому, что очень мало есть реальных промышленных проектов, где бы использовался, скажем, буст, метапрограммирование и т.п.
А на том подмножестве С++, который реально широко используется (ближайший пример — MFC), писать быстро и без ошибок совершенно несложно.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[20]: Чем становится C++?
От: jazzer Россия Skype: enerjazzer
Дата: 27.12.04 08:38
Оценка:
Здравствуйте, VladD2, Вы писали:

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


J>>И? Какое это отношение имеет к обсуждаемой проблеме?

J>>По-моему, ты перечислил меморилики. Или я не так понял?

VD>Точно! Никакого. Лики и глюки делают ламеры. А мы то круть яцоподбная! Уря товарищи! :)


Вроде из команды, а раздуваешь флейм.
нехорошо.
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[41]: Чем становится C++?
От: Дарней Россия  
Дата: 27.12.04 08:45
Оценка:
Здравствуйте, Sergey, Вы писали:

S>Хоть один кроссплатформенный среди них есть?


Вероятно, все остальное в твоей проге сплошь и насквозь кросс-платформенное.

S>Когда я писал конкретно тот код, актуальна была поддержка Win98. MMF там

S>работает настолько замечательно, что хоть вешайся.

Любопытная информация. Откуда дровишки?

S>Еще раз, для тех кто в танке — нечего там оптимизировать.


чушь. Идеальных программ в природе не бывает, как и идеальных программистов.

S>Я, кажется, ясно написал — protected деструктор. Если ты считаешь, что от

S>такого класса нельзя наследоваться, то о чем я тут с тобой вообще говорю...

Если ты не в состоянии четко и недвусмысленно описать свой случай — значит, и правда говорить не о чем.
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[25]: Чем становится C++?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 27.12.04 08:50
Оценка:
Здравствуйте, adontz, Вы писали:

A>>>Зато были проблемы с неуникодностью Scintilla,

AVK>>Написанной на C++

A>Managed C++!


С чего ты взял? Нет конечно. Обычный С++.
... << RSDN@Home 1.1.4 beta 3 rev. 268>>
AVK Blog
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.