Работа - с чего начать: С++ или С#? в избранное  новое    подписка   модер. 
От: niellune 
Дата: 15.03.09 06:56
Здравствуйте! Нужен ваш совет))
Дело в том что мне нравится язык C++ и меня интересует есть ли сейчас возможность устроиться куда-нибудь на начальную позицию?
В каких областях сейчас применяется C++?

Может легче сначала пойти на С#, а потом перейти на С++ или сразу искать вакансии С++
Просто мне кажется, что объем знаний С++ требуется гораздо больший, а хочется работать и набираться опыта..

У меня есть опыт работы на php, причем не только web, а еще что-то вроде создания системы документооборота)
Но php мне уже мало и он мне порядком надоел, хочется развиваться дальше.

18.03.09 16:41: Перенесено из 'О работе'
Re: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: niellune 
Дата: 15.03.09 07:00
P.S. зарплата не особо критична
Re[2]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: dotidot 
Дата: 15.03.09 07:34
Оценка: +1 -20
Здравствуйте, niellune, Вы писали:

советую забыть про с++. На нем сейчас пишут почти только игрушки/драйверы за редкими исключениями. Обычно за вакансией с++ dev будет скрываться поддержка легаси проекта такого качества исполнения, что php сказкой покажется. А в геймдеве в хорошие времена денег не было для разработчиков, а сейчас вообще всё плохо думаю. Помню мне в начале 2007го года в геймдев конторе предлагали 17тр, а в других местах от 45и.

А вообще всё сложно(кризис), думаю надо сначала вообще найти живые вакансии, а потом уже решать. Успехов.
Re: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: astral_marine 
Дата: 15.03.09 08:08
Оценка: +3 -2 :)
Главное что бы работа нравилась, а язык — второстепенен.

C++ используется больше для системных задач и задач, требующих большей эффективности, межплатформенного программирования. А так же теми, кто не любят привычку Microsoft сливать в унитаз свои новые технологии.
C# больше как формошлепка под венду для работы с БД.

Нет смысла изучать C# что бы потом перейти на С++, тем более, что новых проектов на С++ дофига.
Знаний для работы под С++ надо больше, но это изучается один раз в жизни. Много библиотек уже существуют по 10-20 лет и до сих пор актуальны. А самой CRT уже лет 40.
Возможно, С# проще, но надо будет каждые несколько лет выкидывать старые знания, и изучать новую приблуду от Microsoft (WinForms и WPF).

PHP — это рабочая лошадка веб-программиста, если не нравится разрабатывать дизайн сайтов, то не имеет смысла его трогать.
Re: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: BulatZiganshin 
Дата: 15.03.09 08:23
Оценка: +1
Здравствуйте, niellune, Вы писали:

N>Дело в том что мне нравится язык C++


почему он тебе нравится? то, что он красиво выглядит на бумаге, не гарантирует, что тебе понравится на нём программировать реальные большие задачи
FreeArcлучший архиватор в мире
Re[3]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: shrecher 
Дата: 15.03.09 09:31
Оценка:1 (1) +2 -2
Здравствуйте, dotidot, Вы писали:

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


D>советую забыть про с++. На нем сейчас пишут почти только игрушки/драйверы за редкими исключениями.


Хмм, да? А как на счет этих:
MSOffice12, Microsoft Silverlight, Windows7, Vista, QT, WinRar, Adobe (Photoshop and Co), QuickTimePlayer, Notepad++. Дофига потребительских прог на C++, помоему, гораздо больше чем на C#. Для разработчика это очень рискованно связываться с C#, т.к. требуется тащить .net runtime и привяжешь себя к Виндам.
Re[4]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: BulatZiganshin 
Дата: 15.03.09 09:59
Оценка: +5 -6 :))
Здравствуйте, shrecher, Вы писали:

S>MSOffice12, Microsoft Silverlight, Windows7, Vista,


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

S>Дофига потребительских прог на C++


массовые коробочные продукты действительно лучше написать на C++ — хоть время разработки в несколько раз выше, зато они требуют меньше памяти и работают быстрее. вот только где у нас в стране разрабатывают такие прогшраммы — с миллионами продаж? таких мест раз-два и обчёлся, добавь к этому массу legacy C++ программистов и ты получишь, что порог вхождения в эту область слишком высок, а к тому времени, когда человек станет квалифицированным C++ девелопером, потребность в них и вовсе исчезнет. словом, это всё равно что идти учиться на кучера в эпоху первых трамваев
FreeArcлучший архиватор в мире
Re[5]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: shrecher 
Дата: 15.03.09 10:18
Здравствуйте, BulatZiganshin, Вы писали:

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


S>>MSOffice12, Microsoft Silverlight, Windows7, Vista,


BZ>мне это напомнило один школьный конкурс. две команды по очереди называли маттермины, выигрывала та, которая назовёт последний. и мы нашли золотую жилу — треугольник, четырёхугольник, пятиугольник...


Это был ответ на неверное утверждение: "cоветую забыть про с++. На нем сейчас пишут почти только игрушки/драйверы за редкими исключениями. "


BZ>массовые коробочные продукты действительно лучше написать на C++

BZ>когда человек станет квалифицированным C++ девелопером, потребность в них и вовсе исчезнет.

Эти твои утверждения протеворечивы. Тут только одно из двух: либо престанут разрабатывать на C++, что мало вероятно, т.к. очень много продуктов на нем, тогда да — c++ таланты исчезнут; либо, что более вероятно, продолжат разработку и развитие продуктов на C++, и тогда без людей не обойтись.

BZ>вот только где у нас в стране разрабатывают такие прогшраммы — с миллионами продаж?

Это где "у нас в стране". В России? Я не знаю, т.к. давно там не был, но в мире полно компаний с миллионами продаж.
Re[4]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Dog 
Дата: 15.03.09 12:13
Оценка: +1 :))
D>>советую забыть про с++. На нем сейчас пишут почти только игрушки/драйверы за редкими исключениями.
S>Хмм, да? А как на счет этих:
S>MSOffice12, Microsoft Silverlight, Windows7, Vista, QT, WinRar, Adobe (Photoshop and Co), QuickTimePlayer, Notepad++.
Дада, его сразу возьмут писать Windows7

S> Дофига потребительских прог на C++, помоему, гораздо больше чем на C#. Для разработчика это очень рискованно связываться с C#, т.к. требуется тащить .net runtime и привяжешь себя к Виндам.

А иначе есть вы можете заразиться линуксом, а там и до opensource недалеко. И войдёт у вас в привычку работать бесплатно

зы. niellune, C#. У вас хоть будет возможность не выбрасывать ваш прошлый опыт + переосмыслить ваши старые проекты.
... << RSDN@Home 1.2.0 alpha 4 rev. 1138>>
Re: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: JazzzMaster 
Дата: 15.03.09 13:00
Здравствуйте, niellune, Вы писали:

N>Здравствуйте! Нужен ваш совет))


N>Может легче сначала пойти на С#, а потом перейти на С++


Это самообман! "Оттуда" не возвращаются
... << RSDN@Home 1.2.0 alpha 4 rev. 1138>>
Re[2]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 15.03.09 13:20
Оценка:1 (1) +2 -1 :))) :)))
Здравствуйте, JazzzMaster, Вы писали:

N>>Может легче сначала пойти на С#, а потом перейти на С++


JM>Это самообман! "Оттуда" не возвращаются


Происходит практически необратимая деградация...
Re[5]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 15.03.09 14:36
Здравствуйте, BulatZiganshin, Вы писали:

BZ>массовые коробочные продукты действительно лучше написать на C++ — хоть время разработки в несколько раз выше,


Дежурный вопрос: откуда дровишки?

BZ>зато они требуют меньше памяти и работают быстрее. вот только где у нас в стране разрабатывают такие прогшраммы — с миллионами продаж? таких мест раз-два и обчёлся, добавь к этому массу legacy C++ программистов и ты получишь, что порог вхождения в эту область слишком высок,


"Порог вхождения в эту область" ничем не отличается от порога вхождения в любую другую область программирования с устоявшимися традициями, community и т.п. Это совершенно не означает, например, что эти традиции необходимо блюсти по любому поводу. Просто по любому вопросу ты сможешь найти массу подчас противоречивых мнений, решений и т.п. И кстати, "legacy C++ программисты", это что за звери такие? Это те, которые буста шугаются?

BZ>а к тому времени, когда человек станет квалифицированным C++ девелопером, потребность в них и вовсе исчезнет. словом, это всё равно что идти учиться на кучера в эпоху первых трамваев


Что-то маловато стереотипов на квадратный сантиметр. Надо больше.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[2]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 15.03.09 14:50
Оценка: -6 :))) :)
Здравствуйте, astral_marine, Вы писали:

_>Главное что бы работа нравилась, а язык — второстепенен.


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

Про слив понравилось! Посмотрим как ты напишешь программу на C++ с графическим интерфейсом, но независимую от платформы.

_>C# больше как формошлепка под венду для работы с БД.

Это такая тема реферата?

_>Нет смысла изучать C# что бы потом перейти на С++, тем более, что новых проектов на С++ дофига.

Нет смысла изучать C++ что бы потом перейти на С#, тем более, что новых проектов на С# дофига.

_>Знаний для работы под С++ надо больше, но это изучается один раз в жизни. Много библиотек уже существуют по 10-20 лет и до сих пор актуальны. А самой CRT уже лет 40.

Вот те раз. Оказывается на C++ ничего нового за 10-20 лет не придумали? Ну ващеееее

_>Возможно, С# проще, но надо будет каждые несколько лет выкидывать старые знания, и изучать новую приблуду от Microsoft (WinForms и WPF).

Слушай не смеши народ, а. "Опыт не пропьешь"
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[4]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 15.03.09 14:55
Оценка: +1 -1 :))) :))
Здравствуйте, shrecher, Вы писали:

S>Для разработчика это очень рискованно связываться с C#, т.к. требуется тащить .net runtime и привяжешь себя к Виндам.

Вот-вот! Только представь, каждый день на работу и обратно таскать эти два тяжелых чемоданчика с .net runtime. Там по 20 кг в каждом! Порог вхождения очень высок
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[2]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: kochetkov.vladimirvkochetkov.blogspot.com
Дата: 15.03.09 15:01
Оценка: :)
Здравствуйте, astral_marine, Вы писали:

_>Знаний для работы под С++ надо больше, но это изучается один раз в жизни.


Гениальная фраза. А можешь дать пример знаний, которые необходимо получать дважды, трижды и т.д?
Re[3]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 15.03.09 15:04
Оценка: +1
Здравствуйте, MxKazan, Вы писали:

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

MK> Про слив понравилось! Посмотрим как ты напишешь программу на C++ с графическим интерфейсом, но независимую от платформы.

You can choose any color while the color is black, тьфу, while the platform is Windows.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[3]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: shrecher 
Дата: 15.03.09 15:07
Оценка: +2
Здравствуйте, kochetkov.vladimir, Вы писали:

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


_>>Знаний для работы под С++ надо больше, но это изучается один раз в жизни.


KV>Гениальная фраза. А можешь дать пример знаний, которые необходимо получать дважды, трижды и т.д?


Вероятно, имеется ввиду, что Microsoft непререрывно "улучшает" платформу .net. Постоянно нужно что-то доучивать или переучивать, а это отвлекает от конечной задачи.
Re[3]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 15.03.09 15:12
Оценка:1 (1) +1
Здравствуйте, MxKazan, Вы писали:

_>>Знаний для работы под С++ надо больше, но это изучается один раз в жизни. Много библиотек уже существуют по 10-20 лет и до сих пор актуальны. А самой CRT уже лет 40.

MK>Вот те раз. Оказывается на C++ ничего нового за 10-20 лет не придумали? Ну ващеееее

C++ всего-то 20 лет от роду, CRT благополучно унаследована от C. И, например, "сокеты", которым уже около 30, до сих пор живее всех живых. Ещё и WCF переживут.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[4]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 15.03.09 15:16
Здравствуйте, shrecher, Вы писали:

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

_>>>Знаний для работы под С++ надо больше, но это изучается один раз в жизни.
KV>>Гениальная фраза. А можешь дать пример знаний, которые необходимо получать дважды, трижды и т.д?
S>Вероятно, имеется ввиду, что Microsoft непререрывно "улучшает" платформу .net. Постоянно нужно что-то доучивать или переучивать, а это отвлекает от конечной задачи.
Какие только претензии к .Net я не встречал, но чтобы раздражало улучшение платформы, такого еще не было
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[5]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: shrecher 
Дата: 15.03.09 15:21
Оценка: +2
Здравствуйте, MxKazan, Вы писали:

S>>Вероятно, имеется ввиду, что Microsoft непререрывно "улучшает" платформу .net. Постоянно нужно что-то доучивать или переучивать, а это отвлекает от конечной задачи.

MK>Какие только претензии к .Net я не встречал, но чтобы раздражало улучшение платформы, такого еще не было

Заметь, "улучшает" в кавычках. Почему нельзя было сделать один раз, хорошо, и не заниматься переделками и так называемыми улучшениями? Где гарантия, что следующие 2-3 года не выдет новая версия радикально изменяющая предыдущие? Ведь MS — монополист и может навязывать любые условия.
Re[4]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 15.03.09 15:27
Здравствуйте, Геннадий Васильев, Вы писали:

MK>>Вот те раз. Оказывается на C++ ничего нового за 10-20 лет не придумали? Ну ващеееее

ГВ>C++ всего-то 20 лет от роду, CRT благополучно унаследована от C. И, например, "сокеты", которым уже около 30, до сих пор живее всех живых. Ещё и WCF переживут.
Ну, спасибо за информацию. Только это никак не отменяет ошибочности заявления, что для разработки на С++ сейчас достаточно знаний 10-20 летней давности. Разве что это сугубо вычислительные задачи — сортировочки там, графобродилки... Ну и "сокеты", конечно
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[5]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 15.03.09 15:40
Здравствуйте, MxKazan, Вы писали:

ГВ>>C++ всего-то 20 лет от роду, CRT благополучно унаследована от C. И, например, "сокеты", которым уже около 30, до сих пор живее всех живых. Ещё и WCF переживут.

MK>Ну, спасибо за информацию. Только это никак не отменяет ошибочности заявления, что для разработки на С++ сейчас достаточно знаний 10-20 летней давности. Разве что это сугубо вычислительные задачи — сортировочки там, графобродилки... Ну и "сокеты", конечно

Что ж это за "новые знания", которые вдруг появились? Надеюсь, лямбда-исчисление, которому уже за полтинник, ты к таковым не относишь?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[6]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 15.03.09 15:42
Здравствуйте, shrecher, Вы писали:

S>Заметь, "улучшает" в кавычках. Почему нельзя было сделать один раз, хорошо, и не заниматься переделками и так называемыми улучшениями?

Да ё-мае, вообще не понимаю, чего нельзя было сразу с появленияем ПК сделать его идеальным раз и навсегда.


S>Где гарантия, что следующие 2-3 года не выдет новая версия радикально изменяющая предыдущие? Ведь MS — монополист и может навязывать любые условия.

Ну ты же не переживаешь, например, что Intel радикальным образом изменит набор инструкций своих процессоров. И с появлением тех же MMX и SSE их тоже приходилось осваивать. И чего? Любая версия .Net поддерживает предыдующие. Изменения делаются в новой версии.
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[6]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 15.03.09 15:48
Здравствуйте, Геннадий Васильев, Вы писали:

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


ГВ>>>C++ всего-то 20 лет от роду, CRT благополучно унаследована от C. И, например, "сокеты", которым уже около 30, до сих пор живее всех живых. Ещё и WCF переживут.

MK>>Ну, спасибо за информацию. Только это никак не отменяет ошибочности заявления, что для разработки на С++ сейчас достаточно знаний 10-20 летней давности. Разве что это сугубо вычислительные задачи — сортировочки там, графобродилки... Ну и "сокеты", конечно
ГВ>Что ж это за "новые знания", которые вдруг появились? Надеюсь, лямбда-исчисление, которому уже за полтинник, ты к таковым не относишь?
Ты прав. Нет таких знаний. Ничего нового в разработке ПО за 10-20 лет не изменилось. Ровным счетом, Н И Ч Е Г О...
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[7]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: shrecher 
Дата: 15.03.09 15:54
Оценка: +1 :)
Здравствуйте, MxKazan, Вы писали:

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


S>>Заметь, "улучшает" в кавычках. Почему нельзя было сделать один раз, хорошо, и не заниматься переделками и так называемыми улучшениями?

MK>Да ё-мае, вообще не понимаю, чего нельзя было сразу с появленияем ПК сделать его идеальным раз и навсегда.
MK>

В контекте этого топика, как раз C++ стандарт сделан очень удачно и существует без изменений.

S>>Где гарантия, что следующие 2-3 года не выдет новая версия радикально изменяющая предыдущие? Ведь MS — монополист и может навязывать любые условия.

MK>Ну ты же не переживаешь, например, что Intel радикальным образом изменит набор инструкций своих процессоров.

У Intel-a была такая попытка — Itanium64. Так был послан далеко и надолго, вернулись на Amd64.

MK>И с появлением тех же MMX и SSE их тоже приходилось осваивать. И чего? Любая версия .Net поддерживает предыдующие. Изменения делаются в новой версии.


Ха, ошибочное мнение. Так или иначе, с выходом новой версии, чтобы продуктивно работать, к примеру поддержка, выход обновлений и пр, требуется переход на последнюю версию. Весь маркетинг и пропаганда этого торгового гиганта MS упорно работают на продвижение последний версий.
Re: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: minorlogic 
Дата: 15.03.09 16:09
Оценка: +4
Я бы выбрал прикладную область которой хочется заниматься , а потом бы искал подходящий инструмент.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[7]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 15.03.09 16:10
Оценка: +1
Здравствуйте, MxKazan, Вы писали:

MK>Ты прав. Нет таких знаний. Ничего нового в разработке ПО за 10-20 лет не изменилось. Ровным счетом, Н И Ч Е Г О...


О! Слышу слова не мальчика, но мужа.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[3]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: ononim 
Дата: 15.03.09 16:11
Оценка: +2
_>>Главное что бы работа нравилась, а язык — второстепенен.
_>>C++ используется больше для системных задач и задач, требующих большей эффективности, межплатформенного программирования. А так же теми, кто не любят привычку Microsoft сливать в унитаз свои новые технологии.
MK> Про слив понравилось! Посмотрим как ты напишешь программу на C++ с графическим интерфейсом, но независимую от платформы.
Возьмет wxWidgets или Qt и напишет. А как вы напишете на C# что нить под мак?
Как много веселых ребят, и все делают велосипед...
Re[5]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: alsemmhttp://sourceforge.net/projects/ferry
Дата: 15.03.09 16:11
Здравствуйте, MxKazan, Вы писали:

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


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

_>>>>Знаний для работы под С++ надо больше, но это изучается один раз в жизни.
KV>>>Гениальная фраза. А можешь дать пример знаний, которые необходимо получать дважды, трижды и т.д?
S>>Вероятно, имеется ввиду, что Microsoft непререрывно "улучшает" платформу .net. Постоянно нужно что-то доучивать или переучивать, а это отвлекает от конечной задачи.
MK>Какие только претензии к .Net я не встречал, но чтобы раздражало улучшение платформы, такого еще не было
VB улучшали непрерывно до того, что его скоро не будет. Почему с C# должно быть по другому через 10-20 лет?

Алексей
Re[8]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 15.03.09 16:16
Здравствуйте, shrecher, Вы писали:

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


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


S>>>Заметь, "улучшает" в кавычках. Почему нельзя было сделать один раз, хорошо, и не заниматься переделками и так называемыми улучшениями?

MK>>Да ё-мае, вообще не понимаю, чего нельзя было сразу с появленияем ПК сделать его идеальным раз и навсегда.
S>В контекте этого топика, как раз C++ стандарт сделан очень удачно и существует без изменений.
Для чего нужен C++0x, ума не приложу...

S>>>Где гарантия, что следующие 2-3 года не выдет новая версия радикально изменяющая предыдущие? Ведь MS — монополист и может навязывать любые условия.

MK>>Ну ты же не переживаешь, например, что Intel радикальным образом изменит набор инструкций своих процессоров.
S>У Intel-a была такая попытка — Itanium64. Так был послан далеко и надолго, вернулись на Amd64.
Вот и отлично. И это только учит Микрософт не совершать такое же ошибки.

MK>>И с появлением тех же MMX и SSE их тоже приходилось осваивать. И чего? Любая версия .Net поддерживает предыдующие. Изменения делаются в новой версии.

S>Ха, ошибочное мнение. Так или иначе, с выходом новой версии, чтобы продуктивно работать, к примеру поддержка, выход обновлений и пр, требуется переход на последнюю версию. Весь маркетинг и пропаганда этого торгового гиганта MS упорно работают на продвижение последний версий.
Так было и будет с любым продуктом. Тем не менее, никто не обязывает тебя переходить на новую версию.
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[6]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 15.03.09 16:19
Оценка: :)
Здравствуйте, alsemm, Вы писали:

MK>>Какие только претензии к .Net я не встречал, но чтобы раздражало улучшение платформы, такого еще не было

A>VB улучшали непрерывно до того, что его скоро не будет. Почему с C# должно быть по другому через 10-20 лет?
Сначала Дворкин меня задалбывал этим предсказаниями чего там будет через 10-20 лет, теперь вот ты
Живи С++ и наслаждайся.

A>Алексей

Марат
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[4]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: kochetkov.vladimirvkochetkov.blogspot.com
Дата: 15.03.09 16:20
Здравствуйте, shrecher, Вы писали:

S>Здравствуйте, kochetkov.vladimir, Вы писали:


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


_>>>Знаний для работы под С++ надо больше, но это изучается один раз в жизни.


KV>>Гениальная фраза. А можешь дать пример знаний, которые необходимо получать дважды, трижды и т.д?


S>Вероятно, имеется ввиду, что Microsoft непререрывно "улучшает" платформу .net. Постоянно нужно что-то доучивать или переучивать, а это отвлекает от конечной задачи.


Не, ну если у программера появляется непреодолимое желание впихнуть в проект все новоиспеченные фишки от MS, как только они появляются в виде CTP, то тогда оно конечно да. Что мешает использовать в проекте заранее оговоренный набор технологий/библиотек и т.п?
Re[4]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 15.03.09 16:24
Здравствуйте, ononim, Вы писали:

_>>>Главное что бы работа нравилась, а язык — второстепенен.

_>>>C++ используется больше для системных задач и задач, требующих большей эффективности, межплатформенного программирования. А так же теми, кто не любят привычку Microsoft сливать в унитаз свои новые технологии.
MK>> Про слив понравилось! Посмотрим как ты напишешь программу на C++ с графическим интерфейсом, но независимую от платформы.
O>Возьмет wxWidgets или Qt и напишет. А как вы напишете на C# что нить под мак?
Я так понимаю, сами wsWidgets или Qt от операционки никак не зависят. А Qt Software самая святая
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[5]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 15.03.09 16:27
Оценка: :))
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>Не, ну если у программера появляется непреодолимое желание впихнуть в проект все новоиспеченные фишки от MS, как только они появляются в виде CTP, то тогда оно конечно да. Что мешает использовать в проекте заранее оговоренный набор технологий/библиотек и т.п?

Щас пойдут стандартные мантры: маркетинг, домохозяйки, бла-бла-бла...
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Alexander G 
Дата: 15.03.09 16:27
Оценка:1 (1) +1 :)
Здравствуйте, niellune, Вы писали:

N>Может легче сначала пойти на С#, а потом перейти на С++ или сразу искать вакансии С++


Сначала пойди на С#, а потом даже не думай переходить на С++.
Re[5]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: ononim 
Дата: 15.03.09 16:33
_>>>>Главное что бы работа нравилась, а язык — второстепенен.
_>>>>C++ используется больше для системных задач и задач, требующих большей эффективности, межплатформенного программирования. А так же теми, кто не любят привычку Microsoft сливать в унитаз свои новые технологии.
MK>>> Про слив понравилось! Посмотрим как ты напишешь программу на C++ с графическим интерфейсом, но независимую от платформы.
O>>Возьмет wxWidgets или Qt и напишет. А как вы напишете на C# что нить под мак?
MK>Я так понимаю, сами wsWidgets или Qt от операционки никак не зависят.
Они есть под распространенные операционки, причем не только под винду.

MK>Я А Qt Software самая святая

Ой насмешили Нету такого — Qt Software. Есть лишь библиотека Qt, написанная Trolltech.
Как много веселых ребят, и все делают велосипед...
Re: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: _Vasilyev 
Дата: 15.03.09 16:35
Оценка: +2 :))
Здравствуйте, niellune, Вы писали:

Отвечу за себя

N>В каких областях сейчас применяется C++?

Математические задачи

N>Может легче сначала пойти на С#, а потом перейти на С++ или сразу искать вакансии С++

Я пишу и на C# и на C++. Проекты на C# и на C++ — "две большие разницы". То, что делается на C++, на C# в принципе нельзя реализовать. Однако, некоторые задачи намного легче и красивее реализовать на C#.

N>Просто мне кажется, что объем знаний С++ требуется гораздо больший, а хочется работать и набираться опыта..

Знания/опыт требуются в обоих случаях, специфика у них разная.

N>У меня есть опыт работы на php, причем не только web, а еще что-то вроде создания системы документооборота)

N>Но php мне уже мало и он мне порядком надоел, хочется развиваться дальше.

По C++ : Не слушайте тех, кто пытается его похоронить, глупости это все субъективные. Съездите на конференцию "Параллельные вычисления"(можете заглянуть на parallel.ru), там мужики и не знают наверное, что есть языки другие, кроме C++.
Re[6]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 15.03.09 16:38
Оценка: :)
Здравствуйте, ononim, Вы писали:

MK>>>> Про слив понравилось! Посмотрим как ты напишешь программу на C++ с графическим интерфейсом, но независимую от платформы.

O>>>Возьмет wxWidgets или Qt и напишет. А как вы напишете на C# что нить под мак?
MK>>Я так понимаю, сами wsWidgets или Qt от операционки никак не зависят.
O>Они есть под распространенные операционки, причем не только под винду.
Ну и что? Специально же уточнил — "сами". Внутри они точно также зависят от операционки. От ОС не зависят только те, кто юзают Qt, но не сама Qt.

MK>>Я А Qt Software самая святая

O>Ой насмешили Нету такого — Qt Software. Есть лишь библиотека Qt, написанная Trolltech.
Люблю доставлять людям радость
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[7]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: ononim 
Дата: 15.03.09 16:43
MK>>>>> Про слив понравилось! Посмотрим как ты напишешь программу на C++ с графическим интерфейсом, но независимую от платформы.
O>>>>Возьмет wxWidgets или Qt и напишет. А как вы напишете на C# что нить под мак?
MK>>>Я так понимаю, сами wsWidgets или Qt от операционки никак не зависят.
O>>Они есть под распространенные операционки, причем не только под винду.
MK>Ну и что? Специально же уточнил — "сами". Внутри они точно также зависят от операционки. От ОС не зависят только те, кто юзают Qt, но не сама Qt.
Ну и что что зависят? Какая разница это программеру который пишет код под библиотеку а не операционку? .Net в текущей инкорнации сам по себе тоже не более чем надстройка над Win32 API
Как много веселых ребят, и все делают велосипед...
Re[9]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 15.03.09 16:45
Здравствуйте, MxKazan, Вы писали:

MK>>>Да ё-мае, вообще не понимаю, чего нельзя было сразу с появленияем ПК сделать его идеальным раз и навсегда.

S>>В контекте этого топика, как раз C++ стандарт сделан очень удачно и существует без изменений.
MK>Для чего нужен C++0x, ума не приложу...

В сравнении с частотой изменений C# это почти что "постоянный".
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[7]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 15.03.09 16:49
Оценка: +1
Здравствуйте, MxKazan, Вы писали:

MK>Ну и что? Специально же уточнил — "сами". Внутри они точно также зависят от операционки. От ОС не зависят только те, кто юзают Qt, но не сама Qt.


И чем это не ответ на вопрос:

как ты напишешь программу на C++ с графическим интерфейсом, но независимую от платформы

?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[8]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 15.03.09 16:58
Здравствуйте, ononim, Вы писали:

MK>>>>Я так понимаю, сами wsWidgets или Qt от операционки никак не зависят.

O>>>Они есть под распространенные операционки, причем не только под винду.
MK>>Ну и что? Специально же уточнил — "сами". Внутри они точно также зависят от операционки. От ОС не зависят только те, кто юзают Qt, но не сама Qt.
O>Ну и что что зависят? Какая разница это программеру который пишет код под библиотеку а не операционку? .Net в текущей инкорнации сам по себе тоже не более чем надстройка над Win32 API
А про .Net я ничего обратного и не говорил. Это меня пытаются убедить в меганезависимости, а не я. Хотя по правде, WPF уже не надстройка над WinAPI.
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[7]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: kochetkov.vladimirvkochetkov.blogspot.com
Дата: 15.03.09 17:05
Здравствуйте, MxKazan, Вы писали:

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


MK>>>Какие только претензии к .Net я не встречал, но чтобы раздражало улучшение платформы, такого еще не было

A>>VB улучшали непрерывно до того, что его скоро не будет. Почему с C# должно быть по другому через 10-20 лет?
MK>Сначала Дворкин меня задалбывал этим предсказаниями чего там будет через 10-20 лет, теперь вот ты

Не-не-не, он в конце-концов сдался и написал, что "конца С# не будет и никуда он не денется" Re: Сишарпкапец наступает
Автор: Pavel Dvorkin
Дата: 10.03.09
Re[8]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 15.03.09 17:05
Здравствуйте, Геннадий Васильев, Вы писали:

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

MK>>Ну и что? Специально же уточнил — "сами". Внутри они точно также зависят от операционки. От ОС не зависят только те, кто юзают Qt, но не сама Qt.
ГВ>И чем это не ответ на вопрос: как ты напишешь программу на C++ с графическим интерфейсом, но независимую от платформы?
А тем, что она все-равно зависима.
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[9]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 15.03.09 17:13
Здравствуйте, MxKazan, Вы писали:

MK>>>Ну и что? Специально же уточнил — "сами". Внутри они точно также зависят от операционки. От ОС не зависят только те, кто юзают Qt, но не сама Qt.

ГВ>>И чем это не ответ на вопрос: как ты напишешь программу на C++ с графическим интерфейсом, но независимую от платформы?
MK>А тем, что она все-равно зависима.

Начинаем спор о словах. Что такое "платформа"? Традиционное понимание — это что-то масштаба операционной системы. В этом смысле Qt предоставляет вполне приличную переносимость, в отличие от.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[8]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Antikrot 
Дата: 15.03.09 17:14
Здравствуйте, shrecher, Вы писали:

MK>>Ну ты же не переживаешь, например, что Intel радикальным образом изменит набор инструкций своих процессоров.

S>У Intel-a была такая попытка — Itanium64. Так был послан далеко и надолго, вернулись на Amd64.
вернулись? ты вообще в курсе какой из этих наборов когда появился?
Re[7]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Roman Odaisky 
Дата: 15.03.09 17:17
Оценка: :)))
Здравствуйте, MxKazan, Вы писали:

MK>>>Я А Qt Software самая святая :))

O>>Ой насмешили :) Нету такого — Qt Software. Есть лишь библиотека Qt, написанная Trolltech.
MK>Люблю доставлять людям радость :)

А я садист: http://www.qtsoftware.com/

>:->
status=sent (delivered to file: /dev/null)
Re[2]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Antikrot 
Дата: 15.03.09 17:17
Здравствуйте, _Vasilyev, Вы писали:

_V>По C++ : Не слушайте тех, кто пытается его похоронить, глупости это все субъективные. Съездите на конференцию "Параллельные вычисления"(можете заглянуть на parallel.ru), там мужики и не знают наверное, что есть языки другие, кроме C++.

сам ездил? C и Fortran, плюсы в ж..е.
Re[9]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: ononim 
Дата: 15.03.09 17:21
Оценка: +1
ГВ>>Здравствуйте, MxKazan, Вы писали:
MK>>>Ну и что? Специально же уточнил — "сами". Внутри они точно также зависят от операционки. От ОС не зависят только те, кто юзают Qt, но не сама Qt.
ГВ>>И чем это не ответ на вопрос: как ты напишешь программу на C++ с графическим интерфейсом, но независимую от платформы?
MK>А тем, что она все-равно зависима.
Зависима лишь библиотека и бинарник. А не исходный код вашей программы. А зависимость библиотек никого не беспокоит точно так же никого не беспокоит то что под каждую платформу надо качать отдельный бинарник. В этом смысле потуги некоторых создать реально железо-независимые на уровне бинарников платформы выглядят сражением донкихота с мельницами. Эффектно, но нах.. никому не нужно.
Как много веселых ребят, и все делают велосипед...
Re[10]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 15.03.09 17:27
Оценка: +1
Здравствуйте, ononim, Вы писали:

O>А зависимость библиотек никого не беспокоит [...]


Особенно, если учесть статическую линковку.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[7]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: alsemmhttp://sourceforge.net/projects/ferry
Дата: 15.03.09 17:33
Здравствуйте, MxKazan, Вы писали:

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


MK>>>Какие только претензии к .Net я не встречал, но чтобы раздражало улучшение платформы, такого еще не было

A>>VB улучшали непрерывно до того, что его скоро не будет. Почему с C# должно быть по другому через 10-20 лет?
MK>Сначала Дворкин меня задалбывал этим предсказаниями чего там будет через 10-20 лет, теперь вот ты
Я тебе вопрос задал простой — почему C# не повторит путь VB? Можешь ответить спокойно?

MK>Живи С++ и наслаждайся.

Без твоих советов разберусь.

A>>Алексей

MK>Марат
Re[10]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 15.03.09 17:36
Оценка: -1 :))
Здравствуйте, Геннадий Васильев, Вы писали:

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

MK>>>>Ну и что? Специально же уточнил — "сами". Внутри они точно также зависят от операционки. От ОС не зависят только те, кто юзают Qt, но не сама Qt.
ГВ>>>И чем это не ответ на вопрос: как ты напишешь программу на C++ с графическим интерфейсом, но независимую от платформы?
MK>>А тем, что она все-равно зависима.
ГВ>Начинаем спор о словах. Что такое "платформа"? Традиционное понимание — это что-то масштаба операционной системы. В этом смысле Qt предоставляет вполне приличную переносимость, в отличие от.
И тем не менее мы приходим к тому, что ваша "независимая" Qt'шная прога так или иначе, но зависит от библиотек и от API ОС. Реши производитель операционки радикально что-то поменять, вся ваша платформонезависимость полетит к чертям, пока та же Qt не будет доведена до поддержки нового API. Так вот тоже самое и с утверждениями про зависимость .Net от MS.
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[3]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Vetal_cahttp://vetal.ca
Дата: 15.03.09 18:08
Оценка: :)
Здравствуйте, dotidot, Вы писали:

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


D> Помню мне в начале 2007го года в геймдев конторе предлагали 17тр, а в других местах от 45и.


В геймдеве мало предлагают тем, кто приходит и говорит:

"Дяденька, возьмите меня поработать в вашу поднебесную распрекрасную контору. Ну если не тестером, то хоть уборщицей возьмите!!!"
Re[11]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 15.03.09 18:18
Здравствуйте, MxKazan, Вы писали:

ГВ>>Начинаем спор о словах. Что такое "платформа"? Традиционное понимание — это что-то масштаба операционной системы. В этом смысле Qt предоставляет вполне приличную переносимость, в отличие от.

MK>И тем не менее мы приходим к тому, что ваша "независимая" Qt'шная прога так или иначе, но зависит от библиотек и от API ОС. Реши производитель операционки радикально что-то поменять, вся ваша платформонезависимость полетит к чертям, пока та же Qt не будет доведена до поддержки нового API. Так вот тоже самое и с утверждениями про зависимость .Net от MS.

Что-то ничего не понял. Куда она полетит? Кто на ком стоял? Ты спрашивал про платформонезависмую программу с GUI на C++. Тебе ответили, что Qt вполне изолирует программу на C++ от особенностей ОС (на уровне исходников). Прямой зависимости "нашей проги" от API ОС в таком случае нет, всё сводится к тому, будет ли работать Qt-шный бинарник с новой версией ОС. А это уже вопросы к производителям ОС — поддержат они обратную совместимость с бинарниками, скомпилированными для предыдущих версий или нет. Обычная практика — поддерживать (справедлива и для Unix, и для Windows, да и вообще, операционки пишут не для того, чтобы с каждой новой версией выкидывать весь старый софт).

Рассуждать о том, что вдруг, гипотетически, вся ОС возьмёт и изменится до полной несовместимости с прежним софтом не вижу никакого смысла, вот когда изменится, там и будем поглядеть.

С .Net та же история и те же принципиальные ограничения. Притом, обрати внимание, Mono реализует дотнетовские API с некоторым запозданием. Как раз иллюстрация к твоим словам.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[3]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 15.03.09 18:23
Оценка: +1
Здравствуйте, MxKazan, Вы писали:

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

MK> Про слив понравилось! Посмотрим как ты напишешь программу на C++ с графическим интерфейсом, но независимую от платформы.

Я тебя порадую — программы с единым графическим интерфейсом, под разные платформы (причём платформы могут различаться сильнее чем Win и Mac) пишут практически исключительно на С++
Это игры.

А для другого софта, особенно коробочного — задачи написать единый интерфейс вообще не должно стоять. ИМХО.
Re[9]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: shrecher 
Дата: 15.03.09 18:40
Оценка: :)
Здравствуйте, Antikrot, Вы писали:

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


MK>>>Ну ты же не переживаешь, например, что Intel радикальным образом изменит набор инструкций своих процессоров.

S>>У Intel-a была такая попытка — Itanium64. Так был послан далеко и надолго, вернулись на Amd64.
A>вернулись? ты вообще в курсе какой из этих наборов когда появился?


Что касается дат, то IA64 появился раньше, чем AMD64
Попытались сделать Itanium2 (IA-64), со своей системой команд, но ничего толкового невышло из-за компилятора.

"The Itanium approach was supposed to be so terrific—until it turned out that the wished-for compilers were basically impossible to write" [1].
http://en.wikipedia.org/wiki/IA-64


The first AMD64-based processor, the Opteron, was released in April 2003.
http://en.wikipedia.org/wiki/X86-64

"вернулись на Amd64" означает, что IA64 со своей уникальной системой команд потрепел полный фиаско, и вернулись на старый х86, который просто был расширен до 64 бит.

удачи, тебе, антрикот -- ха ха.
Re[12]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 15.03.09 18:49
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Что-то ничего не понял. Куда она полетит? Кто на ком стоял? Ты спрашивал про платформонезависмую программу с GUI на C++.

Заметь, я ничего не спрашивал.

ГВ>Рассуждать о том, что вдруг, гипотетически, вся ОС возьмёт и изменится до полной несовместимости с прежним софтом не вижу никакого смысла, вот когда изменится, там и будем поглядеть.

ГВ>С .Net та же история и те же принципиальные ограничения. Притом, обрати внимание, Mono реализует дотнетовские API с некоторым запозданием. Как раз иллюстрация к твоим словам.
Именно этого я и добивался. Спасибо
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[3]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: StandAlone 
Дата: 15.03.09 19:28
Оценка:18 (3) +3 :))) :))) :))) :))) :)
Здравствуйте, NikeByNike, Вы писали:

NBN>Происходит практически необратимая деградация...


Истинны слова твои, о Мастер!
После того, как ступил я на тёмную сторону силы кодирования и прельстился сладким речам демона Garbage Collector,
утратил мой мозг способность практически полностью вкуривать вот в этот феерический ПЦ:

  GUID GUID_StudentStruct = __uuidof(StudentStruct);
  HRESULT hr;

  ATLTRACE("Содержание присланного массива.\n");
  TraceSafeArray(*student);

  CComPtr<IRecordInfo> spRecInfo;
  hr = GetRecordInfoFromGuids(LIBID_RecInf1Lib, 1, 0, 0, 
    GUID_StudentStruct, &spRecInfo);
  if(FAILED(hr))
    return hr;
  const iLBound = 2, iUBound = 10;
  LPSAFEARRAY psaStudent = SafeArrayCreateVectorEx(VT_RECORD, iLBound, 
    iUBound - iLBound + 1, spRecInfo);
  if(!psaStudent)
    return E_FAIL;
  StudentStruct * pStudentStruct = NULL;
  hr = SafeArrayAccessData(psaStudent, (void**)&pStudentStruct);
  if(FAILED(hr))
    return hr;

  USES_CONVERSION;
  TCHAR szBuff[100];
  for(int i = 0, i2 = iLBound; i <= iUBound - iLBound; i++, i2++)
  {
    wsprintf(szBuff, _T("Имя %d"), i2);
    // Работаем со структурой, как будто она родная, C++-ая.
    pStudentStruct[i].name = SysAllocString(T2OLE(szBuff));
  }
  hr = SafeArrayUnaccessData(psaStudent);
  if(FAILED(hr))
    return hr;

  SafeArrayDestroy(*student);
  *student = psaStudent;
  ATLTRACE("Содержание возвращаемого массива. \n");
  TraceSafeArray(*student);
  return S_OK;

,
который на C# укладывается в десяток императивных строк или пару лямбд...
Рыдаю и посыпаю главу выдранными волосьями.
Нет мне обратного пути к plswczwtfomfgstr ((
Re[6]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 15.03.09 19:28
Оценка: +3
Здравствуйте, shrecher, Вы писали:

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


S>>>Вероятно, имеется ввиду, что Microsoft непререрывно "улучшает" платформу .net. Постоянно нужно что-то доучивать или переучивать, а это отвлекает от конечной задачи.

MK>>Какие только претензии к .Net я не встречал, но чтобы раздражало улучшение платформы, такого еще не было

S>Заметь, "улучшает" в кавычках. Почему нельзя было сделать один раз, хорошо, и не заниматься переделками и так называемыми улучшениями? Где гарантия, что следующие 2-3 года не выдет новая версия радикально изменяющая предыдущие? Ведь MS — монополист и может навязывать любые условия.


А вы сразу пишете гововые программы без глюков?
А ядра линуксов не штапмуются как блины последние 20 лет?
Вообще любой продукт (не только касаемо компов) делается один раз и навсегда?

Надеюсь вы поймете всю глупость утверждения "сделать один раз, хорошо, и не заниматься переделками и так называемыми улучшениями".

И даже несмотря на все рассказы о "стабильности" С++ (хотя это уже признак деградации), постоянно выходят новые версии библиотек типа Qt, Boost и прочих, а тут еще следующий стандарт C++ на подходе.
Re[8]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 15.03.09 19:34
Оценка:1 (1) +1
Здравствуйте, shrecher, Вы писали:

S>В контекте этого топика, как раз C++ стандарт сделан очень удачно и существует без изменений.

Ага, конечно. Особенно удачно сделаны шаблоны (привет > >)и отсутствие вывода типов.
Также очень удачно сделано delete и delete [].

Кроме того стандарт С++ полностью никто не поддерживает, наверное потому что очень удачный этот стандарт.
Re[3]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: StandAlone 
Дата: 15.03.09 19:34
Оценка: +2 :))) :))
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>Гениальная фраза. А можешь дать пример знаний, которые необходимо получать дважды, трижды и т.д?


Полагаю, имелось в виду, что для изучения C++ как раз жизнь и понадобится..
Re[4]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 15.03.09 19:35
Оценка: +1
Здравствуйте, ononim, Вы писали:

_>>>Главное что бы работа нравилась, а язык — второстепенен.

_>>>C++ используется больше для системных задач и задач, требующих большей эффективности, межплатформенного программирования. А так же теми, кто не любят привычку Microsoft сливать в унитаз свои новые технологии.
MK>> Про слив понравилось! Посмотрим как ты напишешь программу на C++ с графическим интерфейсом, но независимую от платформы.
O>Возьмет wxWidgets или Qt и напишет. А как вы напишете на C# что нить под мак?

Mono
Re[8]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: mrTwister 
Дата: 15.03.09 19:37
Здравствуйте, alsemm, Вы писали:


A>Я тебе вопрос задал простой — почему C# не повторит путь VB? Можешь ответить спокойно?


Во-первых, о каком пути VB идет речь? О том, что он помирает? Ну дак и С++ не вечен и в конце-концов тоже "повторит путь VB"
Во-вторых, С# стандартизован.
Re[10]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 15.03.09 19:43
Оценка: :)
Здравствуйте, Геннадий Васильев, Вы писали:

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


MK>>>>Да ё-мае, вообще не понимаю, чего нельзя было сразу с появленияем ПК сделать его идеальным раз и навсегда.

S>>>В контекте этого топика, как раз C++ стандарт сделан очень удачно и существует без изменений.
MK>>Для чего нужен C++0x, ума не приложу...

ГВ>В сравнении с частотой изменений C# это почти что "постоянный".


C# за первые 7 лет своей жизни изменился аж два раза.
Причем второе изменение было только расширением и сохраняло обратную совместимость как по исходникам, так и по бинарникам.

При этом C++ как язык меняется с каждо версией компилятора от Intel\Microsoft\gcc.
Re[4]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Niemand 
Дата: 15.03.09 19:43
Здравствуйте, NikeByNike, Вы писали:

NBN>практически исключительно


непереводимая игра слов (с)
Основная проблема цитат в Интернете заключается в сложности проверки их подлинности. М.В. Ломоносов
Re[4]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 15.03.09 19:51
Оценка: +1
Здравствуйте, StandAlone, Вы писали:

NBN>>Происходит практически необратимая деградация...


SA>Истинны слова твои, о Мастер!

SA>После того, как ступил я на тёмную сторону силы кодирования и прельстился сладким речам демона Garbage Collector,
Я не понял, ты что думаешь что в С++ нет GC?

SA>утратил мой мозг способность практически полностью вкуривать вот в этот феерический ПЦ:


SA>
SA>  GUID GUID_StudentStruct = __uuidof(StudentStruct);
SA>  HRESULT hr;
SA>  return S_OK;
SA>

Мы тут вроде обсуждаем С++ и C# А эта портянка написана индусом на мракобесном С.

SA>Рыдаю и посыпаю главу выдранными волосьями.

SA>Нет мне обратного пути к plswczwtfomfgstr ((

Как тут уже верно замечали — выбор языка определяется задачами. Я вот уже пару раз изучал шарп — но так и не нашёл куда его применить в своих задачах Реально смог применить только один раз — для прототипа.
Re[8]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Ovl 
Дата: 15.03.09 19:52
S>Ха, ошибочное мнение. Так или иначе, с выходом новой версии, чтобы продуктивно работать, к примеру поддержка, выход обновлений и пр, требуется переход на последнюю версию.

ничего подобного
Re[5]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 15.03.09 19:53
Здравствуйте, Niemand, Вы писали:

NBN>>практически исключительно


N>непереводимая игра слов (с)


Рассказать, чем теория от практики отличается?
Re[8]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 15.03.09 19:54
Здравствуйте, alsemm, Вы писали:

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


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


MK>>>>Какие только претензии к .Net я не встречал, но чтобы раздражало улучшение платформы, такого еще не было

A>>>VB улучшали непрерывно до того, что его скоро не будет. Почему с C# должно быть по другому через 10-20 лет?
MK>>Сначала Дворкин меня задалбывал этим предсказаниями чего там будет через 10-20 лет, теперь вот ты
A>Я тебе вопрос задал простой — почему C# не повторит путь VB? Можешь ответить спокойно?
Я отвечу.
Уже не повторил.
VB появился в 1991, закончил развиваться в 1998, окончательно умер в 2001 с выходом VB.NET (достойная альтернатива кстати).
C# и .NET появились в 2002 году, то есть по сценарию VB можно ожижать выход последней версии в 2009, но учитывая планы майкрософта по развитию языка(-ов) и платформы в течение трех лет никакой смерти не планируется, даже стагнации на горизонте не видно.
MS очень много денег уже вбухала в .NET и еще немало вбухивает в развитие, и это при том что эта платформа 100% бесплатна.
Re[6]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Niemand 
Дата: 15.03.09 20:00
Оценка: :)
Здравствуйте, NikeByNike, Вы писали:

NBN>Рассказать, чем теория от практики отличается?


да я не при делах в вашем холиворе, мне фраза понравилась
Основная проблема цитат в Интернете заключается в сложности проверки их подлинности. М.В. Ломоносов
Re[5]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: kochetkov.vladimirvkochetkov.blogspot.com
Дата: 15.03.09 20:01
Оценка: :)
Здравствуйте, NikeByNike, Вы писали:

NBN>Я вот уже пару раз изучал шарп


Вы что, сговорились
Автор: kochetkov.vladimir
Дата: 15.03.09
, что-ли?
Re[6]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 15.03.09 20:09
Здравствуйте, kochetkov.vladimir, Вы писали:

NBN>>Я вот уже пару раз изучал шарп


KV>Вы что, сговорились
Автор: kochetkov.vladimir
Дата: 15.03.09
, что-ли?


Да я целую кучу языков забыл, если потребуется ими воспользоваться — придётся изучать заново. Вот сейчас всё хочу питон вспомнить
Re[11]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 15.03.09 20:10
Здравствуйте, MxKazan, Вы писали:

MK>Здравствуйте, Геннадий Васильев, Вы писали:


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

MK>>>>>Ну и что? Специально же уточнил — "сами". Внутри они точно также зависят от операционки. От ОС не зависят только те, кто юзают Qt, но не сама Qt.
ГВ>>>>И чем это не ответ на вопрос: как ты напишешь программу на C++ с графическим интерфейсом, но независимую от платформы?
MK>>>А тем, что она все-равно зависима.
ГВ>>Начинаем спор о словах. Что такое "платформа"? Традиционное понимание — это что-то масштаба операционной системы. В этом смысле Qt предоставляет вполне приличную переносимость, в отличие от.
MK>И тем не менее мы приходим к тому, что ваша "независимая" Qt'шная прога так или иначе, но зависит от библиотек и от API ОС. Реши производитель операционки радикально что-то поменять, вся ваша платформонезависимость полетит к чертям, пока та же Qt не будет доведена до поддержки нового API. Так вот тоже самое и с утверждениями про зависимость .Net от MS.
Re[12]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 15.03.09 20:14
Оценка:1 (1)
Здравствуйте, MxKazan, Вы писали:

MK>Здравствуйте, Геннадий Васильев, Вы писали:


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

MK>>>>>Ну и что? Специально же уточнил — "сами". Внутри они точно также зависят от операционки. От ОС не зависят только те, кто юзают Qt, но не сама Qt.
ГВ>>>>И чем это не ответ на вопрос: как ты напишешь программу на C++ с графическим интерфейсом, но независимую от платформы?
MK>>>А тем, что она все-равно зависима.
ГВ>>Начинаем спор о словах. Что такое "платформа"? Традиционное понимание — это что-то масштаба операционной системы. В этом смысле Qt предоставляет вполне приличную переносимость, в отличие от.
MK>И тем не менее мы приходим к тому, что ваша "независимая" Qt'шная прога так или иначе, но зависит от библиотек и от API ОС. Реши производитель операционки радикально что-то поменять, вся ваша платформонезависимость полетит к чертям, пока та же Qt не будет доведена до поддержки нового API. Так вот тоже самое и с утверждениями про зависимость .Net от MS.

Да хватит уже кросплатформенностью меряться. Самые кроспалформенные GUI-фреймворки уже давно придуманы это HTML+CSS+Javascript, чуть меньшей кроссплатформенностью обладают Flash и Silverlight. С++ c Qt даже рядом не валялся.
Re[5]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: StandAlone 
Дата: 15.03.09 20:18
Оценка: :))
Здравствуйте, NikeByNike, Вы писали:

NBN>Я не понял, ты что думаешь что в С++ нет GC?

Да в общем-то видел я GC++. У Элджера. Алгоритм Бейкера, итд.
Но на демона он, эта, не тянет. То есть, может и взлетит, но низэнько, низэнько

NBN>Мы тут вроде обсуждаем С++ и C# А эта портянка написана индусом на мракобесном С.

Знал бы ты, кто этот индус и откуда я это скопипастил..
Кстати, не С. Там есть шаблон, да не один!

NBN>Как тут уже верно замечали — выбор языка определяется задачами. Я вот уже пару раз изучал шарп — но так и не нашёл куда его применить в своих задачах Реально смог применить только один раз — для прототипа.

А я вот третий день брожу по улицам и думаю — где бы мне такую задачу найтить, чтобы там С++ непременно понадобился.
Re[6]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 15.03.09 20:27
Оценка:1 (1) +1
Здравствуйте, StandAlone, Вы писали:

NBN>>Я не понял, ты что думаешь что в С++ нет GC?

SA>Да в общем-то видел я GC++. У Элджера. Алгоритм Бейкера, итд.
SA>Но на демона он, эта, не тянет. То есть, может и взлетит, но низэнько, низэнько
Да он реально не очень нужен при соблюдении некоторых правил.

NBN>>Мы тут вроде обсуждаем С++ и C# А эта портянка написана индусом на мракобесном С.

SA>Знал бы ты, кто этот индус и откуда я это скопипастил..
SA>Кстати, не С. Там есть шаблон, да не один!
Тем не менее за такой стиль нужно сразу же гнать, а лучше просто не брать на работу.

NBN>>Как тут уже верно замечали — выбор языка определяется задачами. Я вот уже пару раз изучал шарп — но так и не нашёл куда его применить в своих задачах Реально смог применить только один раз — для прототипа.

SA>А я вот третий день брожу по улицам и думаю — где бы мне такую задачу найтить, чтобы там С++ непременно понадобился.

Игры, ембеддед, миддлеваре, шаровары. Ну и всё что с ними плотно пересекается — например сильно кросплатформенные программы требующие высокого качества исполнения.
Кроме того — части серверных решений требующие перформанса.
Re[13]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 15.03.09 20:40
Оценка: +2 :)
Здравствуйте, gandjustas, Вы писали:

G>Да хватит уже кросплатформенностью меряться. Самые кроспалформенные GUI-фреймворки уже давно придуманы это HTML+CSS+Javascript, чуть меньшей кроссплатформенностью обладают Flash и Silverlight. С++ c Qt даже рядом не валялся.


Ну, если xML — это путь кроссплатформенных GUI, то чем дальше C++/Qt от них, тем оно лучше.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 15.03.09 20:45
Оценка:4 (2) +1 -3 :)
Здравствуйте, niellune, Вы писали:

N>Здравствуйте! Нужен ваш совет))

N>Дело в том что мне нравится язык C++ и меня интересует есть ли сейчас возможность устроиться куда-нибудь на начальную позицию?
N>В каких областях сейчас применяется C++?

N>Может легче сначала пойти на С#, а потом перейти на С++ или сразу искать вакансии С++

N>Просто мне кажется, что объем знаний С++ требуется гораздо больший, а хочется работать и набираться опыта..

N>У меня есть опыт работы на php, причем не только web, а еще что-то вроде создания системы документооборота)

N>Но php мне уже мало и он мне порядком надоел, хочется развиваться дальше.

если хочется именно развиваться, то гораздо лучший выбор это C#:
1)C# сейчас — самый современный язык, который вобрал в себя много хороших качеств императивных, функциональных языков, на подходе еще и динамическая типизация в C#.
2)Платформа .NET, на которой работает C# — это не только десктопные программы, это еще и серверное веб-программирование с очень богатыми возможностями (см ASP.NET), клиентское веб-программирование (см Silverlight), разработка для мобильных устройств (Compact Framework), разработка игр (см XNA), разработка программ для роботов (см Robotics studio), разработка неограниченно масштабируемых программ в "облаке" (см Windows azure), очень простая автоматизация бизнеса (см Sharepoint, Dynamics, VSTA), автоматизация администрирования (Power Shell, MMC), разработка БД (см SQL CLR), простая разработка программ для параллельных вычислений (см Parallel FX), разработка для устройст (.NET Microframework).
3)Кроме того платформа .NET это не только язык C#, это функциональные языки F# и Nemerle, это скриптовые языки с динамической типизацией Python и Ruby. Общая базовая библиотека значительно снижает время обучения языкам, а само обучения разным языкам делает тебя гораздо более хорошим программистом.
4)Зная C# вполне можно писать кросплатформенные приложения с помошью Mono (только десктоп), которые запускаются под Windows, Linux, Mac и iPhone.
Re[2]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 15.03.09 20:53
Оценка: +1 -1
Здравствуйте, gandjustas, Вы писали:

G>разработка для мобильных устройств (Compact Framework), разработка игр (см XNA)

По факту это остаётся в рамках приколов, их доля крайне несущественна.

G>4)Зная C# вполне можно писать кросплатформенные приложения с помошью Mono (только десктоп), которые запускаются под Windows, Linux, Mac и iPhone.

Можно, только не стоит.
Re[7]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 15.03.09 21:04
Оценка: :))
Здравствуйте, NikeByNike, Вы писали:

SA>>А я вот третий день брожу по улицам и думаю — где бы мне такую задачу найтить, чтобы там С++ непременно понадобился.

NBN>Игры
GTA 4 вроде как на XNA сделали.

NBN>ембеддед

эмбед обычно на голом С делают, я пару раз встречался с эмбедом с разными контроллерами, C++ компилеры для них в полном ужасе.

NBN>миддлеваре

это что за зверь такой?

NBN>шаровары

Я так понимаю что на С++ пришут с целью усложнения взлома, реже с целью уменьшения размера.

NBN>Ну и всё что с ними плотно пересекается — например сильно кросплатформенные программы требующие высокого качества исполнения.

Что такое "качество исполнения", как оно с C++ связано?

NBN>Кроме того — части серверных решений требующие перформанса.

А примеры такого есть?
Re[3]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 15.03.09 21:07
Здравствуйте, NikeByNike, Вы писали:

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


G>>разработка для мобильных устройств (Compact Framework), разработка игр (см XNA)

NBN>По факту это остаётся в рамках приколов, их доля крайне несущественна.
С чего вы взяли?
.NET CF плотно держит рынок быизнес-приложений на мобильных устройствах.
На XNA мало пишут только для писюков, на Zune вообще ниче другого не запустишь, для Xbox 360 подавляющее большенство игр на XNA.

G>>4)Зная C# вполне можно писать кросплатформенные приложения с помошью Mono (только десктоп), которые запускаются под Windows, Linux, Mac и iPhone.

NBN>Можно, только не стоит.
Ну вам может и не стоит, а другому может быть интересно.
Re: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: landerhighhttp://www.blinnov.com
Дата: 15.03.09 21:20
Оценка: +1 :))) :)
Здравствуйте, niellune, Вы писали:

Правильно тебе тут советуют (особенно те, кто не в курсе существования операционок не от MS), не ходи в C++, там все очень, очень плохо (с).
Re[8]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 15.03.09 21:30
Оценка: +2
Здравствуйте, gandjustas, Вы писали:

SA>>>А я вот третий день брожу по улицам и думаю — где бы мне такую задачу найтить, чтобы там С++ непременно понадобился.

NBN>>Игры
G>GTA 4 вроде как на XNA сделали.
Маловероятно. Пруфлинк?
Я знаю, что есть на хна игры — но это как правило маленькие казуалки конкретно для хабокса.

NBN>>ембеддед

G>эмбед обычно на голом С делают, я пару раз встречался с эмбедом с разными контроллерами, C++ компилеры для них в полном ужасе.
Эмбеддед разный бывает. Например те же покеты и смарты — где пишут на самом распрекрасном С++ с бустом и прочим.
И к мониторам, холодильникам, кандеям — тоже софт на плюсах пишут (сам участвовал или ходил рядом).

NBN>>миддлеваре

G>это что за зверь такой?
middleware->Google

NBN>>шаровары

G>Я так понимаю что на С++ пришут с целью усложнения взлома, реже с целью уменьшения размера.
Нет. Пишут на С++ чтобы хорошо продавалось. Причём тут взлом — вообще непонятно.

NBN>>Ну и всё что с ними плотно пересекается — например сильно кросплатформенные программы требующие высокого качества исполнения.

G>Что такое "качество исполнения", как оно с C++ связано?
Качественный софт пишется на С++. Остальные решения скорее всего менее качественны.

NBN>>Кроме того — части серверных решений требующие перформанса.

G>А примеры такого есть?
Ну к примеру в одном из холиваров рассказывали про серверные решения для дойчебанка. Ищущий — да обрящет.
Re[4]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 15.03.09 21:35
Оценка: -1
Здравствуйте, gandjustas, Вы писали:

NBN>>По факту это остаётся в рамках приколов, их доля крайне несущественна.

G>С чего вы взяли?
С того что эти проги очень тормозявы.

G>.NET CF плотно держит рынок быизнес-приложений на мобильных устройствах.

Что такое бизнесприложение для покета? Быстронаписанная утилитка для какой-то фирмы?

G>На XNA мало пишут только для писюков, на Zune вообще ниче другого не запустишь, для Xbox 360 подавляющее большенство игр на XNA.

Маленьких казуал.

G>>>4)Зная C# вполне можно писать кросплатформенные приложения с помошью Mono (только десктоп), которые запускаются под Windows, Linux, Mac и iPhone.

NBN>>Можно, только не стоит.
G>Ну вам может и не стоит, а другому может быть интересно.
В том то и дело, что _интересно_. А мы тут делом занимаемся
Re[9]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 15.03.09 22:00
Здравствуйте, NikeByNike, Вы писали:

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


SA>>>>А я вот третий день брожу по улицам и думаю — где бы мне такую задачу найтить, чтобы там С++ непременно понадобился.

NBN>>>Игры
G>>GTA 4 вроде как на XNA сделали.
NBN>Маловероятно. Пруфлинк?
Насчет XNA в PC версии не уверен, но .NET юзает.

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

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

NBN>>>ембеддед

G>>эмбед обычно на голом С делают, я пару раз встречался с эмбедом с разными контроллерами, C++ компилеры для них в полном ужасе.
NBN>Эмбеддед разный бывает. Например те же покеты и смарты — где пишут на самом распрекрасном С++ с бустом и прочим.
NBN>И к мониторам, холодильникам, кандеям — тоже софт на плюсах пишут (сам участвовал или ходил рядом).
Да уж, вам побольше повезло. Все что мне удалось увидеть в ембеде (не считая покеты и смарты) на С++ тормозило страшно по сравнению с голым С.
Насчет покетов и смартов — там большое засилие java.

NBN>>>миддлеваре

G>>это что за зверь такой?
NBN>middleware->Google
Причем тут гугл?

NBN>>>шаровары

G>>Я так понимаю что на С++ пришут с целью усложнения взлома, реже с целью уменьшения размера.
NBN>Нет. Пишут на С++ чтобы хорошо продавалось. Причём тут взлом — вообще непонятно.
А как С++ связан с продажами?

NBN>>>Ну и всё что с ними плотно пересекается — например сильно кросплатформенные программы требующие высокого качества исполнения.

G>>Что такое "качество исполнения", как оно с C++ связано?
NBN>Качественный софт пишется на С++. Остальные решения скорее всего менее качественны.
Что значит качественный?
С++ имеет чуть ли не самый высокий показатель по плотности багов на единицу функционала при разработке.

NBN>>>Кроме того — части серверных решений требующие перформанса.

G>>А примеры такого есть?
NBN>Ну к примеру в одном из холиваров рассказывали про серверные решения для дойчебанка. Ищущий — да обрящет.
Ну единичные решения — вполне может быть, что чтобы массово С++ на серверах — такого сейчас нет, в основном java, по-немногу .NET пробирается.
C++ где-то может быть исплючительно по историческим причинам.
Re[5]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 15.03.09 22:07
Здравствуйте, NikeByNike, Вы писали:

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


NBN>>>По факту это остаётся в рамках приколов, их доля крайне несущественна.

G>>С чего вы взяли?
NBN>С того что эти проги очень тормозявы.
Ну далеко не всегда быстродействие имеет значение.

G>>.NET CF плотно держит рынок быизнес-приложений на мобильных устройствах.

NBN>Что такое бизнесприложение для покета? Быстронаписанная утилитка для какой-то фирмы?
Чаще всего торговля, куча персонала бегает с такими девайсами. Также в ресторанно-гостиничном бизнесе применяется.
Вполне серьезные решения, которые не за неделю пишутся.

G>>На XNA мало пишут только для писюков, на Zune вообще ниче другого не запустишь, для Xbox 360 подавляющее большенство игр на XNA.

NBN>Маленьких казуал.
http://ru.wikipedia.org/wiki/Список_игр_на_Xbox_360
Далеко не все из них маленькие казуалы.

G>>>>4)Зная C# вполне можно писать кросплатформенные приложения с помошью Mono (только десктоп), которые запускаются под Windows, Linux, Mac и iPhone.

NBN>>>Можно, только не стоит.
G>>Ну вам может и не стоит, а другому может быть интересно.
NBN>В том то и дело, что _интересно_. А мы тут делом занимаемся
Вопрос автора топика в чем был?
Он ищет язык для дельнейшего развития, так что ваши предпочтения мало отношения к делу имеют.
Re[10]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 15.03.09 22:19
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>>>GTA 4 вроде как на XNA сделали.

NBN>>Маловероятно. Пруфлинк?
G>Насчет XNA в PC версии не уверен, но .NET юзает.
Может и юзает, но написан без него.

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

G>для хабокса не только кауалки пишут, хабокс имеет неслабое железо и тянет очень хорошие игры.
Ага, и эти игры пишут на плюсах, часто с разным зоопарком разных языков в качестве скриптовых. И пишут их как правило под несколько платформ -> это возможно только на плюсах.

NBN>>Эмбеддед разный бывает. Например те же покеты и смарты — где пишут на самом распрекрасном С++ с бустом и прочим.

NBN>>И к мониторам, холодильникам, кандеям — тоже софт на плюсах пишут (сам участвовал или ходил рядом).
G>Да уж, вам побольше повезло. Все что мне удалось увидеть в ембеде (не считая покеты и смарты) на С++ тормозило страшно по сравнению с голым С.
Каким образом С++ может тормозить в сравнении с С????? Может быть только наоборот, так как С более убогий язык в котором сложнее проводить оптимизацию.

G>Насчет покетов и смартов — там большое засилие java.

Покеты и ява
Засилие явы есть на обычных телефонах — так как для того чтобы под них писать на плюсах нужно быть разработчиком собственно девайсов.
А смарты — там ява конечно есть, но в топах почему-то восновном С++.

G>>>это что за зверь такой?

NBN>>middleware->Google
G>Причем тут гугл?
Если не знаешь термина — смотри гугль.

G>>>Я так понимаю что на С++ пришут с целью усложнения взлома, реже с целью уменьшения размера.

NBN>>Нет. Пишут на С++ чтобы хорошо продавалось. Причём тут взлом — вообще непонятно.
G>А как С++ связан с продажами?
На С++ пишется более качественный для юзера софт — что хорошо сказывается на продажах.

NBN>>Качественный софт пишется на С++. Остальные решения скорее всего менее качественны.

G>Что значит качественный?
G>С++ имеет чуть ли не самый высокий показатель по плотности багов на единицу функционала при разработке.
Во-первых, такие высказывания нужно обосновывать ибо это очевидный бред.
Во-вторых, качественный — значит качественный, софт который легко ставится, имеет нативный интерфейс и тормозит незаметно.
Проблемы программистов или тестировщиков меня мало интересуют. Кроме того — в реальной разработке, доля программирования в общих человекомесяцах обычно незначительна -> влияние языка на срок разработки — тоже.

NBN>>Ну к примеру в одном из холиваров рассказывали про серверные решения для дойчебанка. Ищущий — да обрящет.

G>Ну единичные решения — вполне может быть, что чтобы массово С++ на серверах — такого сейчас нет, в основном java, по-немногу .NET пробирается.
Да не, это тоже единичные решения
G>C++ где-то может быть исплючительно по историческим причинам.
Или по вопросам перфоманса
Re[6]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 15.03.09 22:28
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

NBN>>>>По факту это остаётся в рамках приколов, их доля крайне несущественна.

G>>>С чего вы взяли?
NBN>>С того что эти проги очень тормозявы.
G>Ну далеко не всегда быстродействие имеет значение.
Ну да, естественно. Тем не менее в топах я не нашёл шарповых продуктов.

NBN>>Что такое бизнесприложение для покета? Быстронаписанная утилитка для какой-то фирмы?

G>Чаще всего торговля, куча персонала бегает с такими девайсами. Также в ресторанно-гостиничном бизнесе применяется.
G>Вполне серьезные решения, которые не за неделю пишутся.
Это да, хотя преимущество шарпа в сравнении скажем с HTML/JS не очевидно.

G>>>На XNA мало пишут только для писюков, на Zune вообще ниче другого не запустишь, для Xbox 360 подавляющее большенство игр на XNA.

NBN>>Маленьких казуал.
G>http://ru.wikipedia.org/wiki/Список_игр_на_Xbox_360
G>Далеко не все из них маленькие казуалы.
Да я не говорю, что для хабокса пишут только маленькие казуалки! Наоборот, появление платформ нового поколения вызвало резкий рост уровня разработки игр.
Но большие игры _не_ пишут на ХНЕ, её создавали именно для казуалок и восновном для хабокса.

G>>>Ну вам может и не стоит, а другому может быть интересно.

NBN>>В том то и дело, что _интересно_. А мы тут делом занимаемся
G>Вопрос автора топика в чем был?
G>Он ищет язык для дельнейшего развития, так что ваши предпочтения мало отношения к делу имеют.
Он просто сам не знает чего ищет. Язык программирования — определяется задачей и ничего не мешает знать хоть десяток языков
Есть достаточно много задач, где приоритет С++ — несомненен и зп платятся очень неплохие. Но при этом знание голого С++ тебе ничем не поможет — надо знать и уметь решать задачу — собственно платят то за неё
Re[6]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 15.03.09 22:35
Здравствуйте, gandjustas, Вы писали:

G>>>На XNA мало пишут только для писюков, на Zune вообще ниче другого не запустишь, для Xbox 360 подавляющее большенство игр на XNA.

NBN>>Маленьких казуал.
G>http://ru.wikipedia.org/wiki/Список_игр_на_Xbox_360
G>Далеко не все из них маленькие казуалы.

Смотри внимательно на данные, всё что в графе "Эксклюзив." с пунктом "Нет" — скорее всего (95%) не на шарпе Если игра эксклюзивна значит она _может_ быть и на шарпе — но тоже не факт. Например Splinter Cell — хоть и эксклюзив, но плюсы.
Re[4]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Cyberax 
Дата: 15.03.09 22:40
Здравствуйте, gandjustas, Вы писали:

G>.NET CF плотно держит рынок быизнес-приложений на мобильных устройствах.

Хахаха.

G>На XNA мало пишут только для писюков, на Zune вообще ниче другого не запустишь, для Xbox 360 подавляющее большенство игр на XNA.

Муахахаххахахаха...
Sapienti sat!
Re[6]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Vetal_cahttp://vetal.ca
Дата: 15.03.09 23:49
G>Далеко не все из них маленькие казуалы.

Подавляющее меньшинство игр. Особенно если брать не по количеству игр вообще, а по продаваемости — хлама-то много
Re[13]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 16.03.09 00:24
Здравствуйте, MxKazan, Вы писали:

MK>Здравствуйте, Геннадий Васильев, Вы писали:


ГВ>>Что-то ничего не понял. Куда она полетит? Кто на ком стоял? Ты спрашивал про платформонезависмую программу с GUI на C++.

MK>Заметь, я ничего не спрашивал.

Э-э-э... Значит, это был риторический вопрос.

ГВ>>Рассуждать о том, что вдруг, гипотетически, вся ОС возьмёт и изменится до полной несовместимости с прежним софтом не вижу никакого смысла, вот когда изменится, там и будем поглядеть.

ГВ>>С .Net та же история и те же принципиальные ограничения. Притом, обрати внимание, Mono реализует дотнетовские API с некоторым запозданием. Как раз иллюстрация к твоим словам.
MK>Именно этого я и добивался. Спасибо

Только всё равно не понятно, что ты хотел доказать. Понятно, что любая кроссплатформенная программа остаётся таковой ровно в тех пределах, в которых она поддерживается.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[11]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 16.03.09 00:30
Здравствуйте, gandjustas, Вы писали:

G>C# за первые 7 лет своей жизни изменился аж два раза.

G>Причем второе изменение было только расширением и сохраняло обратную совместимость как по исходникам, так и по бинарникам.
G>При этом C++ как язык меняется с каждо версией компилятора от Intel\Microsoft\gcc.

Меняется не столько сам C++, сколько его реализация. Не одно и то же, однако.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[7]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: shrecher 
Дата: 16.03.09 03:21
Здравствуйте, gandjustas, Вы писали:


G>А вы сразу пишете гововые программы без глюков?


Но я и не претендую на разработку языка программирования для всех случаев жизни.
Re[7]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: ilvi 
Дата: 16.03.09 04:44
Здравствуйте, MxKazan, Вы писали:

MK>Любая версия .Net поддерживает предыдующие.


Может я уже чего не помню, но вот второй фреймворк прямо такки поддерживает первый? Может быть он еще полностью обратно совместимый?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[8]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: mrTwister 
Дата: 16.03.09 04:57
Здравствуйте, ilvi, Вы писали:

I>Может я уже чего не помню, но вот второй фреймворк прямо такки поддерживает первый?


Да

I>Может быть он еще полностью обратно совместимый?


Да
Re[9]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: ilvi 
Дата: 16.03.09 07:04
Здравствуйте, mrTwister, Вы писали:

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


I>>Может я уже чего не помню, но вот второй фреймворк прямо такки поддерживает первый?


T>Да


I>>Может быть он еще полностью обратно совместимый?


T>Да


Значит для програм написанных на первом можно поставить на машину только второй и не ставить первый. Я правильно понял?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hrensgory 
Дата: 16.03.09 07:46
NikeByNike пишет:

> NBN>>миддлеваре

> G>это что за зверь такой?
> middleware->Google
Это какие-то новые веяния. Weblogic чтоль на C++ переписали?

> NBN>>Ну и всё что с ними плотно пересекается — например сильно

> кросплатформенные программы требующие высокого качества исполнения.
> G>Что такое "качество исполнения", как оно с C++ связано?
> Качественный софт пишется на С++. Остальные решения скорее всего менее
> качественны.
Круто. По сути остального можно было и не писать Правда мне неясно
как качество (т.е. в общеупотребительном для индустрии смысле —
соответствие программы исходным требованиям) связано с языком, на
котором она написана. Как человек, писАвший на разных языках — не назвал
бы плюсы здесь фаворитом. Скорее рулит Java/.NET, для вещей требующих
низкоуровневых операций — чистый С.

> NBN>>Кроме того — части серверных решений требующие перформанса.

> G>А примеры такого есть?
> Ну к примеру в одном из холиваров рассказывали про серверные решения для
> дойчебанка. Ищущий — да обрящет.
Есть мнение — это вас кто-то обманул. Don't ask me how I know Хотя
дойчбанк он большой, всякое может быть.

> Делать проекты большие 1000 строк, пользуясь языком С, всёравно что

> строить кирпичный дом пользуясь совочком и бадейкой, для замешивания
> глины и лепки кирпичей.
[В ужасе оглядывается по сторонам] Кстати, "всё равно" — пишется раздельно.

--
WBR,
Serge.
Posted via RSDN NNTP Server 2.1 beta
Re[10]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 16.03.09 07:55
Здравствуйте, hrensgory, Вы писали:

>> NBN>>миддлеваре

>> G>это что за зверь такой?
>> middleware->Google
H>Это какие-то новые веяния. Weblogic чтоль на C++ переписали?
Это значит, что если ты чего-то не знаешь — прежде чем задавать вопросы рекомендуется посмотреть ответ в гугле, скорее всего он там есть.

>> NBN>>Ну и всё что с ними плотно пересекается — например сильно

>> кросплатформенные программы требующие высокого качества исполнения.
>> G>Что такое "качество исполнения", как оно с C++ связано?
>> Качественный софт пишется на С++. Остальные решения скорее всего менее
>> качественны.
H>Круто. По сути остального можно было и не писать Правда мне неясно
H>как качество (т.е. в общеупотребительном для индустрии смысле —
H>соответствие программы исходным требованиям) связано с языком, на
H>котором она написана. Как человек, писАвший на разных языках — не назвал
H>бы плюсы здесь фаворитом. Скорее рулит Java/.NET, для вещей требующих
H>низкоуровневых операций — чистый С.
Качественный софт, это красивый, ставящийся и работающий без проблем софт с незаметными тормозами. При определённом уровне этого софта, по отношению к платформе — качественный софт можно написать только на С++.
С вообще недоязык от которого одни проблемы. Он имеет самое крохотное преимущество перед плюсами — доступность компилера, для совсем уж убитых платформ.

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

>> дойчебанка. Ищущий — да обрящет.
H>Есть мнение — это вас кто-то обманул. Don't ask me how I know Хотя
H>дойчбанк он большой, всякое может быть.
Тем не менее С++ серверных решений достаточно дофига.

>> Делать проекты большие 1000 строк, пользуясь языком С, всёравно что

>> строить кирпичный дом пользуясь совочком и бадейкой, для замешивания
>> глины и лепки кирпичей.
H>[В ужасе оглядывается по сторонам] Кстати, "всё равно" — пишется раздельно.
Мне пофиг, а ты нарушаешь правила форума.
Re[7]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 08:12
Оценка: :)))
Здравствуйте, NikeByNike, Вы писали:

G>>>>Ну вам может и не стоит, а другому может быть интересно.

NBN>>>В том то и дело, что _интересно_. А мы тут делом занимаемся
G>>Вопрос автора топика в чем был?
G>>Он ищет язык для дельнейшего развития, так что ваши предпочтения мало отношения к делу имеют.
NBN>Он просто сам не знает чего ищет. Язык программирования — определяется задачей и ничего не мешает знать хоть десяток языков
C#(.NET) и Java в наше время подходят для подавляющего большенства задач.

NBN>Есть достаточно много задач, где приоритет С++ — несомненен и зп платятся очень неплохие. Но при этом знание голого С++ тебе ничем не поможет — надо знать и уметь решать задачу — собственно платят то за неё

Тогда причем тут C++ ? Большенство задач решаемых на C++ можно решать и на других языках более качественно. Платят то за решение задачи, а не "решение задачи на С++".
Re[8]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 16.03.09 08:20
Оценка: +1 -1 :)
Здравствуйте, gandjustas, Вы писали:

G>>>Он ищет язык для дельнейшего развития, так что ваши предпочтения мало отношения к делу имеют.

NBN>>Он просто сам не знает чего ищет. Язык программирования — определяется задачей и ничего не мешает знать хоть десяток языков
G>C#(.NET) и Java в наше время подходят для подавляющего большенства задач.
Для игр и мобильного мира они не подходят. Совсем. Для миддлеваре — тоже.

NBN>>Есть достаточно много задач, где приоритет С++ — несомненен и зп платятся очень неплохие. Но при этом знание голого С++ тебе ничем не поможет — надо знать и уметь решать задачу — собственно платят то за неё

G>Тогда причем тут C++ ? Большенство задач решаемых на C++ можно решать и на других языках более качественно.
Нельзя. Просто нельзя сделать на яве/шарпе более качественно чем на С++ при прочих равных.

G>Платят то за решение задачи, а не "решение задачи на С++".

Ага, а в задачу входит создание красивого, быстрого и кроссплатформенного кода и софта — это решаемо _только_ на С++. Даже ущербный С с этим не спрвится.
Re[9]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Ovl 
Дата: 16.03.09 08:22
Оценка: +1
NBN>Нельзя. Просто нельзя сделать на яве/шарпе более качественно чем на С++ при прочих равных.

NBN>Ага, а в задачу входит создание красивого, быстрого и кроссплатформенного кода и софта — это решаемо _только_ на С++. Даже ущербный С с этим не спрвится.


вы действительно во все это верите?
Re[9]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 08:28
Оценка: -2 :)
Здравствуйте, NikeByNike, Вы писали:

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


G>>>>Он ищет язык для дельнейшего развития, так что ваши предпочтения мало отношения к делу имеют.

NBN>>>Он просто сам не знает чего ищет. Язык программирования — определяется задачей и ничего не мешает знать хоть десяток языков
G>>C#(.NET) и Java в наше время подходят для подавляющего большенства задач.
NBN>Для игр и мобильного мира они не подходят. Совсем.
Ну можете продолжать в это верить а другие спокойно клепают игры на XNA и приложения для Windows Mobile.

NBN>Для миддлеваре — тоже.

По запросу "middleware" гугль начал рассказывать про веб-сервисы и серверы приложений. Может я что-то пропустил, но когда их начали делать на C++? Обычно java или .NET.

NBN>>>Есть достаточно много задач, где приоритет С++ — несомненен и зп платятся очень неплохие. Но при этом знание голого С++ тебе ничем не поможет — надо знать и уметь решать задачу — собственно платят то за неё

G>>Тогда причем тут C++ ? Большенство задач решаемых на C++ можно решать и на других языках более качественно.
NBN>Нельзя. Просто нельзя сделать на яве/шарпе более качественно чем на С++ при прочих равных.
Ну тогда определение "качества" в студию.
Обычно под качеством кода понимают обратную величину плотности ошибок на единицу функционала, C++ по этому параметру очень далек.
Еслим рассматривать удовлетворение пользователя деленное на затраченное бабло, то managed языки тоже впереди.

G>>Платят то за решение задачи, а не "решение задачи на С++".

NBN>Ага, а в задачу входит создание красивого, быстрого и кроссплатформенного кода и софта — это решаемо _только_ на С++. Даже ущербный С с этим не спрвится.
Это также решаемо на mono, причем с меньшими затратами.
Re[12]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 08:30
Здравствуйте, Геннадий Васильев, Вы писали:

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


G>>C# за первые 7 лет своей жизни изменился аж два раза.

G>>Причем второе изменение было только расширением и сохраняло обратную совместимость как по исходникам, так и по бинарникам.
G>>При этом C++ как язык меняется с каждо версией компилятора от Intel\Microsoft\gcc.

ГВ>Меняется не столько сам C++, сколько его реализация. Не одно и то же, однако.

Ну и в чем различия?
Re[11]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 08:45
Оценка: -1 :)
Здравствуйте, NikeByNike, Вы писали:

NBN>>>Качественный софт пишется на С++. Остальные решения скорее всего менее качественны.

G>>Что значит качественный?
G>>С++ имеет чуть ли не самый высокий показатель по плотности багов на единицу функционала при разработке.
NBN>Во-первых, такие высказывания нужно обосновывать ибо это очевидный бред.
Статистика показывает что плотность ошибок на строку кода от языка не зависит. При этом для реализации како-то функционала на С++ требуется написть когда больше (иногда гораздо больше), поэтому багов на единицу функционала для С++ получается больше.

NBN>Во-вторых, качественный — значит качественный, софт который легко ставится, имеет нативный интерфейс и тормозит незаметно.

Офигеть, то есть пофиг чего софт делает, лишь бы нативный интрефейс и "тормозил незаметно".
Странные у вас предстваления о качестве.
Другие под качеством обычно понимают удовлетворение заказчика(соответсвие требованиям и отсуствие багов) деленное на трудозатраты. По такой метрике С++ тоже далеко не лидер.

NBN>Проблемы программистов или тестировщиков меня мало интересуют. Кроме того — в реальной разработке, доля программирования в общих человекомесяцах обычно незначительна -> влияние языка на срок разработки — тоже.

Что такое "реальная разработка"?
В то разработке с которой я хоть как-то сталкивался доля кодирования+отладки+тестирования гораздо больше 50% была и от трудозатраты языка сильно зависели.
Re[9]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 16.03.09 08:47
Здравствуйте, NikeByNike, Вы писали:

G>>Платят то за решение задачи, а не "решение задачи на С++".

NBN>Ага, а в задачу входит создание красивого, быстрого и кроссплатформенного кода и софта — это решаемо _только_ на С++. Даже ущербный С с этим не спрвится.

Странно читать такое... По-моему, так любой язык не тянущий на себе/с собой груза абстракций, вполне пригоден для этого. Например вот: Lazarus IDE for FreePascal
Re[10]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 16.03.09 08:53
Оценка: +3 :)
Здравствуйте, gandjustas, Вы писали:

NBN>>Для игр и мобильного мира они не подходят. Совсем.

G>Ну можете продолжать в это верить а другие спокойно клепают игры на XNA и приложения для Windows Mobile.
На ХНА клепают казуалки. Она для этого приспособлено — быстро склепать казуалку только для хбокса. Я тут даже спорить не буду.
На CF тоже что-то клепают, тоже спорить не буду.
Но факт в том, что их доля — маленькая и использовать их можно далеко не всегда.
Обрати внимание, что и Spb и Paragon (мировые лидеры в своих нишах) делают практически все продукты нативными.

NBN>>Для миддлеваре — тоже.

G>По запросу "middleware" гугль начал рассказывать про веб-сервисы и серверы приложений. Может я что-то пропустил, но когда их начали делать на C++? Обычно java или .NET.
http://en.wikipedia.org/wiki/Middleware
К миддлеваре относятся всякие движки и самостоятельные программные компоненты. Естественно для веба это как правило вебоспецифично.

G>>>Тогда причем тут C++ ? Большенство задач решаемых на C++ можно решать и на других языках более качественно.

NBN>>Нельзя. Просто нельзя сделать на яве/шарпе более качественно чем на С++ при прочих равных.
G>Ну тогда определение "качества" в студию.
Определение ниже.
G>Обычно под качеством кода понимают обратную величину плотности ошибок на единицу функционала, C++ по этому параметру очень далек.
Бред, это зависит от программиста.
Например при моём стиле (я соблюдаю уйму правил кодингстандарта) программирования мемориликов нет вообще (если они не платформоспецифичны), а логические ошибки — не завият от языка.

G>Еслим рассматривать удовлетворение пользователя деленное на затраченное бабло, то managed языки тоже впереди.

В реальном проекте — нет. Т.е. конечно можно придумать проекты где они зарулят — тут спорить глупо. Но когда разговор заходит о хорошей скорости и кроссплатформенности — С++ практически безальтернативен.
Например, я учавствовал в одном проекте, онлайновый сервис с клиентом средней сложности. Изначально он был сделан на яве. Потом наняли меня, чтобы я перевёл его на С++ и портировал на покеты, симбиан. И, что главное, обеспечил красивый интерфейс. На яве это было сделать невозможно — вылезали за разумные рамки производительности.

G>>>Платят то за решение задачи, а не "решение задачи на С++".

NBN>>Ага, а в задачу входит создание красивого, быстрого и кроссплатформенного кода и софта — это решаемо _только_ на С++. Даже ущербный С с этим не спрвится.
G>Это также решаемо на mono, причем с меньшими затратами.
Это шутка
Re[10]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 16.03.09 09:07
Оценка: +2
Здравствуйте, gandjustas, Вы писали:

G>Ну тогда определение "качества" в студию.

G>Обычно под качеством кода понимают обратную величину плотности ошибок на единицу функционала, C++ по этому параметру очень далек.
G>Еслим рассматривать удовлетворение пользователя деленное на затраченное бабло, то managed языки тоже впереди.

Качество кода и качество продукта вещи несомненно связанные, но неидентичные. Для пользователя качество кода — вещь довольно абстрактная, а вот время отклика, например, куда важнее. Ну и прочие нефункциональные требования. Это если пользователь может выбирать. Если же ему поставили на работе корпоративного монстра на яве, то он будет плакать, но пользоваться. Поэтому, я думаю, управляемые языки пока не очень в разработке коммерческих коробочных продуктов. Я тут себе поставил Paint.Net — думал как замену гимпу использовать. И снес. Я куда легче переношу падения гимпа время от времени, чем постоянную тормознутость перерисовки интерфейса паинтнета ))
Re[12]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 16.03.09 09:08
Здравствуйте, gandjustas, Вы писали:

G>Статистика показывает что плотность ошибок на строку кода от языка не зависит. При этом для реализации како-то функционала на С++ требуется написть когда больше (иногда гораздо больше), поэтому багов на единицу функционала для С++ получается больше.


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

NBN>>Во-вторых, качественный — значит качественный, софт который легко ставится, имеет нативный интерфейс и тормозит незаметно.

G>Офигеть, то есть пофиг чего софт делает, лишь бы нативный интрефейс и "тормозил незаметно".
G>Странные у вас предстваления о качестве.

При аналогичной функциональности, выбор идет в рамках озвученных тезисов. Кстати, в ветке про Avalon, Mamut писал, что отзывчивость Avalon'а лучше чем у "прообраза" (к тому же выглядит для платформ нативным, ну или почти ).
Re[10]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 16.03.09 09:13
Здравствуйте, hattab, Вы писали:

NBN>>Ага, а в задачу входит создание красивого, быстрого и кроссплатформенного кода и софта — это решаемо _только_ на С++. Даже ущербный С с этим не спрвится.


H>Странно читать такое... По-моему, так любой язык не тянущий на себе/с собой груза абстракций, вполне пригоден для этого. Например вот: Lazarus IDE for FreePascal


В абстрактно случае — да. В практическом — где ты возмёшь программистов, где примеры/фрагменты/куски кода и т.п. вещи?
Re[11]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 09:16
Оценка: :)
Здравствуйте, NikeByNike, Вы писали:

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


NBN>>>Для игр и мобильного мира они не подходят. Совсем.

G>>Ну можете продолжать в это верить а другие спокойно клепают игры на XNA и приложения для Windows Mobile.
NBN>На ХНА клепают казуалки. Она для этого приспособлено — быстро склепать казуалку только для хбокса. Я тут даже спорить не буду.
NBN>На CF тоже что-то клепают, тоже спорить не буду.
NBN>Но факт в том, что их доля — маленькая и использовать их можно далеко не всегда.
NBN>Обрати внимание, что и Spb и Paragon (мировые лидеры в своих нишах) делают практически все продукты нативными.

NBN>>>Для миддлеваре — тоже.

G>>По запросу "middleware" гугль начал рассказывать про веб-сервисы и серверы приложений. Может я что-то пропустил, но когда их начали делать на C++? Обычно java или .NET.
NBN>http://en.wikipedia.org/wiki/Middleware
NBN>К миддлеваре относятся всякие движки и самостоятельные программные компоненты. Естественно для веба это как правило вебоспецифично.
Как раз миддлеваре описанные в этой статье на java\.NET делаются.
А про всякие движки и программные компоненты можно поподробнее?
С++ сам по себе не интеропается с другими языками (даже с другой программой на С++), это делается или через нативные средства ОС (DLL, so, COM), которые выражены на языке С, или через абстрактные протоколы, которые вообще говоря от языков реализации не зависят.

G>>>>Тогда причем тут C++ ? Большенство задач решаемых на C++ можно решать и на других языках более качественно.

NBN>>>Нельзя. Просто нельзя сделать на яве/шарпе более качественно чем на С++ при прочих равных.
G>>Ну тогда определение "качества" в студию.
NBN>Определение ниже.
G>>Обычно под качеством кода понимают обратную величину плотности ошибок на единицу функционала, C++ по этому параметру очень далек.
NBN>Бред, это зависит от программиста.
Что зависит от программиста? Определение качества? Ну тогда о чем разговор вести?

NBN>Например при моём стиле (я соблюдаю уйму правил кодингстандарта) программирования мемориликов нет вообще (если они не платформоспецифичны), а логические ошибки — не завият от языка.

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

G>>Еслим рассматривать удовлетворение пользователя деленное на затраченное бабло, то managed языки тоже впереди.

NBN>В реальном проекте — нет. Т.е. конечно можно придумать проекты где они зарулят — тут спорить глупо. Но когда разговор заходит о хорошей скорости и кроссплатформенности — С++ практически безальтернативен.
Каком реальном проекте? Кроссплатформенность далеко не всегда нужна, скорость тоже не всегда является определяющим фактором.
С появлением на рынке нетбуков выяснилась одна интересная вещь — пользователям вполне хватает примерно 15% мощности современного ПК. И если вы пишете для ПК то двухкратная разница в быстродействии может даже остаться незамеченной.

NBN>Например, я учавствовал в одном проекте, онлайновый сервис с клиентом средней сложности. Изначально он был сделан на яве. Потом наняли меня, чтобы я перевёл его на С++ и портировал на покеты, симбиан. И, что главное, обеспечил красивый интерфейс. На яве это было сделать невозможно — вылезали за разумные рамки производительности.

Ниче не понял, если сервис онлайновый, то зачем его портировать на покеты и симбиан?

G>>>>Платят то за решение задачи, а не "решение задачи на С++".

NBN>>>Ага, а в задачу входит создание красивого, быстрого и кроссплатформенного кода и софта — это решаемо _только_ на С++. Даже ущербный С с этим не спрвится.
G>>Это также решаемо на mono, причем с меньшими затратами.
NBN>Это шутка
http://tirania.org/blog/archive/2008/Nov-03.html
Re[11]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hrensgory 
Дата: 16.03.09 09:18
NikeByNike пишет:

>> > NBN>>миддлеваре

>> > G>это что за зверь такой?
>> > middleware->Google
> H>Это какие-то новые веяния. Weblogic чтоль на C++ переписали?
> Это значит, что если ты чего-то не знаешь — прежде чем задавать вопросы
> рекомендуется посмотреть ответ в гугле, скорее всего он там есть.

Здравый совет, воспользуюсь. Вдруг мои познания уже безнадёжно устарели,
всякое бывает.

http://en.wikipedia.org/wiki/Middleware

Middleware is computer software that connects software components or
applications.

... skipped ...

Organizations
----------------------------------------------------------------
IBM, Red Hat, and Oracle Corporation are major vendors providing
middleware software.

И что же написано на C++? WebSphere (IBM), JBoss (RedHat) или OracleAS с
Weblogic (Oracle)?

> Качественный софт, это красивый, ставящийся и работающий без проблем

> софт с незаметными тормозами. При определённом уровне этого софта, по
> отношению к платформе — качественный софт можно написать только на С++.
"... и возмутительнее всего то, что говорите ее безапелляционно и
уверенно" (с)

--
WBR,
Serge.
Posted via RSDN NNTP Server 2.1 beta
Re[12]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 16.03.09 09:20
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

NBN>>>>Качественный софт пишется на С++. Остальные решения скорее всего менее качественны.

G>>>Что значит качественный?
G>>>С++ имеет чуть ли не самый высокий показатель по плотности багов на единицу функционала при разработке.
NBN>>Во-первых, такие высказывания нужно обосновывать ибо это очевидный бред.
G>Статистика показывает что плотность ошибок на строку кода от языка не зависит. При этом для реализации како-то функционала на С++ требуется написть когда больше (иногда гораздо больше), поэтому багов на единицу функционала для С++ получается больше.
Иногда больше, иногда столко же. Зависит от стиля и используемых библиотек. Иногда большая часть кода достаточно безопасна, а опасная (расчёты всякие) на разных языках будет иметь схожий объём.

G>Другие под качеством обычно понимают удовлетворение заказчика(соответсвие требованиям и отсуствие багов) деленное на трудозатраты. По такой метрике С++ тоже далеко не лидер.

Первый тезис — правильный (кроме как про отсуствие багов — они довольно часто допустимы). Второй тезис — совершенно не следует из первого и являетя ложным.

NBN>>Проблемы программистов или тестировщиков меня мало интересуют. Кроме того — в реальной разработке, доля программирования в общих человекомесяцах обычно незначительна -> влияние языка на срок разработки — тоже.

G>Что такое "реальная разработка"?
G>В то разработке с которой я хоть как-то сталкивался доля кодирования+отладки+тестирования гораздо больше 50% была и от трудозатраты языка сильно зависели.
ИМХО это точка зрения программиста.

Вообще — С++ чувствителен к квалификации программиста. Например, у меня на проект с годовым сроком разработки, по результатам финального тестирования не было ни одного меморилика, хотя до конца проекта этих тестирований не проводилось вообще.
Re[13]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 16.03.09 09:23
Оценка: +4
Здравствуйте, hattab, Вы писали:

H>При аналогичной функциональности, выбор идет в рамках озвученных тезисов. Кстати, в ветке про Avalon, Mamut писал, что отзывчивость Avalon'а лучше чем у "прообраза" (к тому же выглядит для платформ нативным, ну или почти ;) ).


Это ни о чем не говорит — ничто не запрещает написать на C++ сколь угодно тормозную программу :)

Вообще, я против C# и .нет вообще ничего не имею, но массовое отсутствие коммерческих коробочных продуктов на управляемых языках настораживает. Это можно трактовать по разному, но факт налицо. Со статистикой не поспоришь :) При этом .нет на рынке уже почти 10 лет, ява — уже более 15. Средств в них вбухано немерянно. При этом, конечно, свои ниши (и немаленькие) у них несомненно есть. Но так получается, что все интересные темы пишутся на C++.

Соответственно, автору топика, выбор зависит от того, чем хотелось бы заниматься. Если "хардкорным" программированием (коробочные продукты, игры, наукоемкие вещи) — то C++. Если бизнес программированием (веб, базы данных и т.п.) — то C#.
Re[13]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 09:25
Оценка: :)
Здравствуйте, hattab, Вы писали:

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


G>>Статистика показывает что плотность ошибок на строку кода от языка не зависит. При этом для реализации како-то функционала на С++ требуется написть когда больше (иногда гораздо больше), поэтому багов на единицу функционала для С++ получается больше.


H>Статистика показывает обратное -- таки зависит. Если это не очередное сотрясание воздуха, а вопрос тебе действительно интересен, рекомендую поискать материалы о том, как родилась Ada, и что стало причиной этого рождения.

Ну во время появления ada (1993 год) вполне могло и зависеть.

NBN>>>Во-вторых, качественный — значит качественный, софт который легко ставится, имеет нативный интерфейс и тормозит незаметно.

G>>Офигеть, то есть пофиг чего софт делает, лишь бы нативный интрефейс и "тормозил незаметно".
G>>Странные у вас предстваления о качестве.

H>При аналогичной функциональности, выбор идет в рамках озвученных тезисов.

Если есть два полностью аналогичных продукта, то да.
Но современные языки позволяют выпустить продукт гораздо раньше и занять рынок до того как конкуренты выпустят чуть более быстрый вариант.
Re[11]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 16.03.09 09:25
Оценка: :)
Здравствуйте, NikeByNike, Вы писали:

H>>Странно читать такое... По-моему, так любой язык не тянущий на себе/с собой груза абстракций, вполне пригоден для этого. Например вот: Lazarus IDE for FreePascal


NBN>В абстрактно случае — да. В практическом — где ты возмёшь программистов, где примеры/фрагменты/куски кода и т.п. вещи?


Вообще, я просто привел пример. Но можно и обсудить Программистов можно набрать из числа дельфистов, коих у нас пол-страны (freepascal практически калька с Delphi, с оговорками ес-но). Код/примеры все на том же сайте, lazarus в исходниках идет. Кстати, есть пример кросс-платформеного софта на freepascal -- Pixel image editor
Re[14]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 16.03.09 09:36
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

H>>Статистика показывает обратное -- таки зависит. Если это не очередное сотрясание воздуха, а вопрос тебе действительно интересен, рекомендую поискать материалы о том, как родилась Ada, и что стало причиной этого рождения.

G>Ну во время появления ada (1993 год) вполне могло и зависеть.

Ты все же поищи материалы, там интересно процесс тестирования описан, и моменты влияющие на количество ошибок. К сожалению, я ссылок дать не могу т.к. у меня это где-то в бумажном варианте лежит.

G>>>Офигеть, то есть пофиг чего софт делает, лишь бы нативный интрефейс и "тормозил незаметно".

G>>>Странные у вас предстваления о качестве.

H>>При аналогичной функциональности, выбор идет в рамках озвученных тезисов.

G>Если есть два полностью аналогичных продукта, то да.

Именно так. Сравнивать неравновесные продукты смысла не имеет, ибо понятно, что функционал на первом месте.

G>Но современные языки позволяют выпустить продукт гораздо раньше и занять рынок до того как конкуренты выпустят чуть более быстрый вариант.


Я таки не хочу флейма, но где же они?
Re[13]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 09:40
Оценка: :))
Здравствуйте, NikeByNike, Вы писали:

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


NBN>Иногда большая часть кода достаточно безопасна, а опасная (расчёты всякие) на разных языках будет иметь схожий объём.

расчсчеты естественно будут иметь схожий объем, почти все языки позволяют писать a+b, только с чего это рассчеты стали опасными?
Это как раз самая безопасная часть программы, они отлично тестируются, нету нетривиального управления состоянием.
Тяжелые рассчеты обычно не подвержены такой изменчивости как другие части программы.

G>>Другие под качеством обычно понимают удовлетворение заказчика(соответсвие требованиям и отсуствие багов) деленное на трудозатраты. По такой метрике С++ тоже далеко не лидер.

NBN>Первый тезис — правильный (кроме как про отсуствие багов — они довольно часто допустимы). Второй тезис — совершенно не следует из первого и являетя ложным.
Почему это? На C++ в среднем надо написать больше кода для получения того же функционала, значит больше трудозатраты, значит увеличивается делитель в формуле, а следовательно уменьшается качество.

NBN>>>Проблемы программистов или тестировщиков меня мало интересуют. Кроме того — в реальной разработке, доля программирования в общих человекомесяцах обычно незначительна -> влияние языка на срок разработки — тоже.

G>>Что такое "реальная разработка"?
G>>В то разработке с которой я хоть как-то сталкивался доля кодирования+отладки+тестирования гораздо больше 50% была и от трудозатраты языка сильно зависели.
NBN>ИМХО это точка зрения программиста.
Причем тут точка зрения?

NBN>Вообще — С++ чувствителен к квалификации программиста. Например, у меня на проект с годовым сроком разработки, по результатам финального тестирования не было ни одного меморилика, хотя до конца проекта этих тестирований не проводилось вообще.

Открою тайну. Любой язык чувствителен к квалификации программиста. Говно написать можнео на чем угодно, толко говно на C++ не запуститься или сразу упадет, а говно на .NET можно спокойно сделать чтобы оно не падало, но все равно не будет делать то что надо.
Re[14]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 16.03.09 09:42
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

H>>При аналогичной функциональности, выбор идет в рамках озвученных тезисов.

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

Яркий пример — микрософт. Пока они пытались написать висту на C#, а потом переписывали ее на C++, эппл отхватил у них приличный кусок рынка. Та же самая история с мобильными устройствами, пока микрософт загоняла разработчиков в светлый управляемый мир, эппл выпустила iphone. Теперь ms в положении догоняющего. При этом в обоих случаях микрософт был практически монополистом — тут шла речь не о захвате рынка, а просто об удержании. Много им C# помог? Т.е. теория — это одно, а практика показывает совсем другое.
Re[14]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 09:45
Оценка: :)
Здравствуйте, COFF, Вы писали:

COF>Вообще, я против C# и .нет вообще ничего не имею, но массовое отсутствие коммерческих коробочных продуктов на управляемых языках настораживает. Это можно трактовать по разному, но факт налицо. Со статистикой не поспоришь При этом .нет на рынке уже почти 10 лет, ява — уже более 15. Средств в них вбухано немерянно. При этом, конечно, свои ниши (и немаленькие) у них несомненно есть. Но так получается, что все интересные темы пишутся на C++.

Коробочный десктопный софт — самая слаборазвивающаяся область разработки. Удерживает сильно существующий codebase.
Я вообще не могу вспомнить что новое появилось для широкого круга пользователей. за последний год.
Re[15]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 16.03.09 10:00
Оценка:1 (1) +3
Здравствуйте, gandjustas, Вы писали:

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


COF>>Вообще, я против C# и .нет вообще ничего не имею, но массовое отсутствие коммерческих коробочных продуктов на управляемых языках настораживает. Это можно трактовать по разному, но факт налицо. Со статистикой не поспоришь :) При этом .нет на рынке уже почти 10 лет, ява — уже более 15. Средств в них вбухано немерянно. При этом, конечно, свои ниши (и немаленькие) у них несомненно есть. Но так получается, что все интересные темы пишутся на C++.

G>Коробочный десктопный софт — самая слаборазвивающаяся область разработки. Удерживает сильно существующий codebase.
G>Я вообще не могу вспомнить что новое появилось для широкого круга пользователей. за последний год.

Codebase — это конечно да. Но 10 лет — это достаточный срок, чтобы переписать весь существующий codebase если это переписываение действительно даст преимущества. Я думаю, дело в другом, с одной стороны, управляемые языки не дают того рекламированного преимущества для действительно больших и сложных проектов. С другой стороны, они дают сильную зависимость от поставщика рантайма плюс немалую вероятность в один прекрасный момент упереться в какое-нибудь ограничение этого самого рантайма с неясной перспективой что делать дальше.
Re[16]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 10:14
Оценка: +2
Здравствуйте, COFF, Вы писали:

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


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


COF>>>Вообще, я против C# и .нет вообще ничего не имею, но массовое отсутствие коммерческих коробочных продуктов на управляемых языках настораживает. Это можно трактовать по разному, но факт налицо. Со статистикой не поспоришь При этом .нет на рынке уже почти 10 лет, ява — уже более 15. Средств в них вбухано немерянно. При этом, конечно, свои ниши (и немаленькие) у них несомненно есть. Но так получается, что все интересные темы пишутся на C++.

G>>Коробочный десктопный софт — самая слаборазвивающаяся область разработки. Удерживает сильно существующий codebase.
G>>Я вообще не могу вспомнить что новое появилось для широкого круга пользователей. за последний год.

COF>Codebase — это конечно да. Но 10 лет — это достаточный срок, чтобы переписать весь существующий codebase если это переписываение действительно даст преимущества.

Дык в том и дело что не даст. Например у вас есть команда разработчиков на С++, готовый софт и 10 лет. Вы 10 лет будете изучать новую платформу, переписывать весь код, отлавливать долго баги (денег оно вам не принесет) или просто выпустите n+1ую (а то и несколько) версию на C++, которая будет продаваться?

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

Еще как дают, вы сильно недооцениваете удерживающий фактор существующего codebase.
Есть большой класс бизнес-приложений, где .NET и Java уже давно прижились и нормально работают.

COF>С другой стороны, они дают сильную зависимость от поставщика рантайма

Для десктопов этот фактор играет роль, для бизнеса — минимальную.
Кроме того даже если Sun откажеться от Java или MS откажется от .NET, ни то ни другое не исчезнет моментально, никто вам не помешает поставить .NET FW или JRE и пользовать программы.

COF>плюс немалую вероятность в один прекрасный момент упереться в какое-нибудь ограничение этого самого рантайма с неясной перспективой что делать дальше.

Для .NET это вообще мелочи, потому что он спокойно интеропается с COM и нативными DLL. Mono кстати тоже умеет так делать.
Для java тоже сущестует JNI.
Re[14]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 16.03.09 10:56
Здравствуйте, COFF, Вы писали:

COF>При этом .нет на рынке уже почти 10 лет

Нормальному .Net совсем не 10 лет и даже не 5. Я говорю про .Net 2.0.
Ну а если скатится до совсем совсем 1-го FW, то и ему 7 лет, ага.

COF>Но так получается, что все интересные темы пишутся на C++.

И конца и края этому нет, ведь всегда можно сказать, что многое из уже написанного, сделано на C++. Значит надо учить С++. А если все учат только С++... И это сладкое слово "хардкор" — не то, что формощлепщик, правда
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[16]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 16.03.09 11:06
Здравствуйте, COFF, Вы писали:

COF>Codebase — это конечно да. Но 10 лет — это достаточный срок, чтобы переписать весь существующий codebase если это переписываение действительно даст преимущества. Я думаю, дело в другом, с одной стороны, управляемые языки не дают того рекламированного преимущества для действительно больших и сложных проектов. С другой стороны, они дают сильную зависимость от поставщика рантайма плюс немалую вероятность в один прекрасный момент упереться в какое-нибудь ограничение этого самого рантайма с неясной перспективой что делать дальше.

Я думал мы уже пришли
Автор: Геннадий Васильев
Дата: 15.03.09
к мнению, что вся эта независимость в случае нативного языка такая же вымышленная. Все эти вероятностные рассуждения о критических изменениях и затыках точно также равносильны и в неуправляемых языках. Разве что там можно похардкорить и глядишь проскочит. Но это же не райт-вэй
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[17]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: sergey2b 
Дата: 16.03.09 11:34
Здравствуйте, gandjustas, Вы писали:

G>Кроме того даже если Sun откажеться от Java или MS откажется от .NET, ни то ни другое не исчезнет моментально, никто вам не помешает поставить .NET FW или JRE и пользовать программы.


Я работал в компании где около 40mb кода на VB6.
Когда MS отказалась от подержки VB6 и Win XP (офциально VB6 в Viste не поддерживаеться) руководство не смотрело на жизнь столь оптимистично как вы.

90% кода отнюдь не формочки и просто так его под VB.NET не втащить.
Re[18]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 12:08
Здравствуйте, sergey2b, Вы писали:

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


G>>Кроме того даже если Sun откажеться от Java или MS откажется от .NET, ни то ни другое не исчезнет моментально, никто вам не помешает поставить .NET FW или JRE и пользовать программы.


S>Я работал в компании где около 40mb кода на VB6.

S>Когда MS отказалась от подержки VB6 и Win XP (офциально VB6 в Viste не поддерживаеться) руководство не смотрело на жизнь столь оптимистично как вы.
И прямо сразу код перестал запускаться?
До сих пор при желании код на vb можно запустить.
Кое-де до сих пор живые сайны на asp (без .NET), написанные на VB есть.

А руководсто я очень понимаю, я бы тоже на из месте расстроился.
Re[19]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: sergey2b 
Дата: 16.03.09 12:40
Здравствуйте, gandjustas, Вы писали:

S>>Я работал в компании где около 40mb кода на VB6.

S>>Когда MS отказалась от подержки VB6 и Win XP (офциально VB6 в Viste не поддерживаеться) руководство не смотрело на жизнь столь оптимистично как вы.
G>И прямо сразу код перестал запускаться?
G>До сих пор при желании код на vb можно запустить.

Код запускаеться, стоимость программы такова что клиент если эта надо будет, будет сидеть на XP еше N лет. Но рано или поздно перестанут делать драйвера для XP да можно будет под VP использовать но понятно что то надо с этим делать.

Но что вы будете делать если MS прекратит саппорт .NET или сделает .NET 10 не совместимым а у вас на руках несколько десятков мегабайт исходников.
Re[7]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 16.03.09 12:41
Здравствуйте, gandjustas, Вы писали:

G>И даже несмотря на все рассказы о "стабильности" С++ (хотя это уже признак деградации), постоянно выходят новые версии библиотек типа Qt, Boost и прочих

А какое отношение QT и Boost имеют к стандарту С++?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[8]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 16.03.09 12:41
Здравствуйте, gandjustas, Вы писали:

NBN>>Игры

G>GTA 4 вроде как на XNA сделали.
Крайне сомнительно. GTA4 на XNA это такой бегемот получится что просто не взлетит.

NBN>>шаровары

G>Я так понимаю что на С++ пришут с целью усложнения взлома, реже с целью уменьшения размера.
Сходи на RSDN Shareware форум — там эта тема иногда подымается.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[10]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 16.03.09 12:41
Здравствуйте, gandjustas, Вы писали:

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


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


SA>>>>>А я вот третий день брожу по улицам и думаю — где бы мне такую задачу найтить, чтобы там С++ непременно понадобился.

NBN>>>>Игры
G>>>GTA 4 вроде как на XNA сделали.
NBN>>Маловероятно. Пруфлинк?
G>Насчет XNA в PC версии не уверен, но .NET юзает.
А что именно юзает? Какой компонент?

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

G>для хабокса не только кауалки пишут, хабокс имеет неслабое железо и тянет очень хорошие игры.
Сколько из них написано на XNA?

NBN>>>>миддлеваре

G>>>это что за зверь такой?
NBN>>middleware->Google
G>Причем тут гугл?
Тебе предлагают найти ответ на вопрос: "миддлеваре. это что за зверь такой?" в гугле.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[10]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 16.03.09 12:41
Здравствуйте, hrensgory, Вы писали:

H>Это какие-то новые веяния. Weblogic чтоль на C++ переписали?

Не, это советуют в гугле значение термина middleware поискать.

H>Есть мнение — это вас кто-то обманул. Don't ask me how I know Хотя

H>дойчбанк он большой, всякое может быть.
Лично участвовал в С++ серверном проекте для унесённого ныне кризисом Lehman Brothers.

H>[В ужасе оглядывается по сторонам] Кстати, "всё равно" — пишется раздельно.

Зануда
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 16.03.09 12:41
Здравствуйте, gandjustas, Вы писали:

G>для Xbox 360 подавляющее большенство игр на XNA.

пруфлинк?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[6]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 16.03.09 12:41
Здравствуйте, gandjustas, Вы писали:

G>http://ru.wikipedia.org/wiki/Список_игр_на_Xbox_360

А где там написано что они на XNA?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[15]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 16.03.09 12:44
Здравствуйте, MxKazan, Вы писали:

COF>>Но так получается, что все интересные темы пишутся на C++.

MK>И конца и края этому нет, ведь всегда можно сказать, что многое из уже написанного, сделано на C++. Значит надо учить С++. А если все учат только С++... И это сладкое слово "хардкор" — не то, что формощлепщик, правда ;)

Правда :) А разве бизнес — не сладкое слово, или уже не сладкое? ;)
Re[16]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 16.03.09 13:26
Здравствуйте, COFF, Вы писали:

COF>Правда А разве бизнес — не сладкое слово, или уже не сладкое?

Да мне и формпошлепщик нравицца
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[15]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 16.03.09 13:55
Оценка: +2
Здравствуйте, MxKazan, Вы писали:

COF>>При этом .нет на рынке уже почти 10 лет

MK>Нормальному .Net совсем не 10 лет и даже не 5. Я говорю про .Net 2.0.
MK>Ну а если скатится до совсем совсем 1-го FW, то и ему 7 лет, ага.

Ну, беты появились года за два до релиза — вот и выходит почти 10 лет. Потом, почему именно 2.0? Где гарантия, что завтра не будешь говорить то же самое про 3.5?

Вообще, я же не против .нет, я против огульного охаивания C++ определенными дот-нетчиками :)
Re[14]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: BulatZiganshin 
Дата: 16.03.09 14:10
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>Ну во время появления ada (1993 год) вполне могло и зависеть.


1979
FreeArcлучший архиватор в мире
Re[12]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: BulatZiganshin 
Дата: 16.03.09 14:12
Оценка: +1
Здравствуйте, hattab, Вы писали:

H>Вообще, я просто привел пример. Но можно и обсудить Программистов можно набрать из числа дельфистов, коих у нас пол-страны (freepascal практически калька с Delphi, с оговорками ес-но). Код/примеры все на том же сайте, lazarus в исходниках идет. Кстати, есть пример кросс-платформеного софта на freepascal -- Pixel image editor


ещё пример — peazip. вообще, vcl в их реализации вполне кроссплатформенна
FreeArcлучший архиватор в мире
Re[15]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: BulatZiganshin 
Дата: 16.03.09 14:14
Оценка: -1 :)
Здравствуйте, COFF, Вы писали:

COF>Яркий пример — микрософт. Пока они пытались написать висту на C#, а потом переписывали ее на C++, эппл отхватил у них приличный кусок рынка.


т.е. на писюки стали ставить макос вместо винды?
FreeArcлучший архиватор в мире
Re[14]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: BulatZiganshin 
Дата: 16.03.09 14:17
Здравствуйте, COFF, Вы писали:

COF>Соответственно, автору топика, выбор зависит от того, чем хотелось бы заниматься. Если "хардкорным" программированием (коробочные продукты, игры, наукоемкие вещи) — то C++. Если бизнес программированием (веб, базы данных и т.п.) — то C#.


наукоёмкие вещи — скорее и наукоёмкие языки понадобятся коробки — напополам, новые продукты лучше делать на C#. в играх порядка половины кода не требует супер-быстродействия, так что опять же все шансы у более современных языков
FreeArcлучший архиватор в мире
Re[15]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 16.03.09 14:22
Здравствуйте, BulatZiganshin, Вы писали:

G>>Ну во время появления ada (1993 год) вполне могло и зависеть.


BZ>1979


1974 — Инициатива МО США. Формирование требований.
1975 — Начало разработки.
1977 — Предложение о создании нового языка.
1983 — Ada становится стандартом ANSI/MIL-STD-1815A-1983

Как по мне, так 1983.
Re[16]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 16.03.09 14:23
Здравствуйте, BulatZiganshin, Вы писали:

BZ>т.е. на писюки стали ставить макос вместо винды? :)


Именно, стали продавать писюки с макос. Называются imac и ibook :) Их доля хотя сравнительно невелика, но постоянно растет. Маки стали продавать в обычных компьютерных магазинах типа Кея в Питере, раньше такого не было.
Re[16]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: BulatZiganshin 
Дата: 16.03.09 14:24
Здравствуйте, COFF, Вы писали:

COF>Codebase — это конечно да. Но 10 лет — это достаточный срок, чтобы переписать весь существующий codebase


какие 10 лет? 10 лет назад была тормозная зачаточная ява без IDE. реально лет 5 назад стало очевидно, что java/c# выгодны в разработке. вот и поищи программы, которые были начаты в последние 5 лет

всякие трейдинг системы — ява/с# обычно. сейчас какой-то проект ibm-sun началмся, связанный с облачными вычислениями — там тоже ява.
FreeArcлучший архиватор в мире
Re[17]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: BulatZiganshin 
Дата: 16.03.09 14:28
Здравствуйте, COFF, Вы писали:

COF>Именно, стали продавать писюки с макос. Называются imac и ibook Их доля хотя сравнительно невелика, но постоянно растет. Маки стали продавать в обычных компьютерных магазинах типа Кея в Питере, раньше такого не было.


и конечно, в этом виноват C#, а не таланты Джобса
FreeArcлучший архиватор в мире
Re[15]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 16.03.09 14:28
Здравствуйте, BulatZiganshin, Вы писали:

BZ>наукоёмкие вещи — скорее и наукоёмкие языки понадобятся :) коробки — напополам, новые продукты лучше делать на C#. в играх порядка половины кода не требует супер-быстродействия, так что опять же все шансы у более современных языков


Я смогу назвать язык более современным чем C++ только если этот язык будет позволять сделать все то же самое что и C++ (в том числе и в плане эффективности), будет позволять сделать что-то, что C++ не позволяет, возможно избавится от косяков C++. Вот это и будет более современный язык. А назвать язык более современным только потому, что там есть сборка мусора я не могу. Это просто другой язык.
Re[17]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 16.03.09 14:31
Оценка: +2
Здравствуйте, BulatZiganshin, Вы писали:

BZ>какие 10 лет? 10 лет назад была тормозная зачаточная ява без IDE. реально лет 5 назад стало очевидно, что java/c# выгодны в разработке. вот и поищи программы, которые были начаты в последние 5 лет


Я где-то в 94 году видел в книге по C++ главу — что такое ява и как скоро она заменит C++ :)
Re[16]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: BulatZiganshin 
Дата: 16.03.09 14:33
Оценка: +1 -1
Здравствуйте, COFF, Вы писали:

BZ>>наукоёмкие вещи — скорее и наукоёмкие языки понадобятся коробки — напополам, новые продукты лучше делать на C#. в играх порядка половины кода не требует супер-быстродействия, так что опять же все шансы у более современных языков


COF>Я смогу назвать язык более современным чем C++ только если этот язык будет позволять сделать все то же самое что и C++ (в том числе и в плане эффективности),


в таком случае языка современней машинных кодов, в твоём понимании так и не появилось. но почему-то люди, включая тебя пишут на языках постарее — асме, c++ том же

COF>будет позволять сделать что-то, что C++ не позволяет, возможно избавится от косяков C++. Вот это и будет более современный язык. А назвать язык более современным только потому, что там есть сборка мусора я не могу. Это просто другой язык.


я в это не вкладываю какое-то идеологическое наполнение, просто мне не нравится термин "управляемые языки", поскольку ВМ я как раз считаю не самым важной в них вещью. мой опыт программирования говорит, что принципиальна как раз GC, поскольку он позволяет не задумываться о выделении и освобождении памяти и тем самым писать алгоритмы в более высокоуровневой манере. представь себе, что ты в док-ве мат. теоремы описываешь "а здесь мы освобождаем значение x, поскольку оно нам не понадобится в дальнейшем ходе док-ва"
FreeArcлучший архиватор в мире
Re[9]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Unhandled_Exception 
Дата: 16.03.09 14:39
Оценка: :)
Здравствуйте, MxKazan, Вы писали:

MK> Хотя по правде, WPF уже не надстройка над WinAPI.


компоненты WPF не используют WinAPI?...
Re[17]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 16.03.09 14:44
Оценка:3 (1) +4
Здравствуйте, BulatZiganshin, Вы писали:

BZ>в таком случае языка современней машинных кодов, в твоём понимании так и не появилось. но почему-то люди, включая тебя пишут на языках постарее — асме, c++ том же :))


Хорошие компиляторы генерируют достаточно неплохой код и то иногда приходится на ассемблере модули использовать

BZ>я в это не вкладываю какое-то идеологическое наполнение, просто мне не нравится термин "управляемые языки", поскольку ВМ я как раз считаю не самым важной в них вещью. мой опыт программирования говорит, что принципиальна как раз GC, поскольку он позволяет не задумываться о выделении и освобождении памяти и тем самым писать алгоритмы в более высокоуровневой манере. представь себе, что ты в док-ве мат. теоремы описываешь "а здесь мы освобождаем значение x, поскольку оно нам не понадобится в дальнейшем ходе док-ва" :)))


Аналогия вещь хорошая, но обоюдоострая. Представь, что все начнут мусор не в урны кидать, а на землю — все равно дворник потом подберет :) Наверное, это будет не очень хорошо. Продуманная стратегия управления ресурсами в C++ позволяет не заботиться о памяти точно в такой же высокоуровневой манере.
Re[18]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 14:58
Оценка: :)
Здравствуйте, COFF, Вы писали:

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


BZ>>в таком случае языка современней машинных кодов, в твоём понимании так и не появилось. но почему-то люди, включая тебя пишут на языках постарее — асме, c++ том же


COF>Хорошие компиляторы генерируют достаточно неплохой код и то иногда приходится на ассемблере модули использовать


BZ>>я в это не вкладываю какое-то идеологическое наполнение, просто мне не нравится термин "управляемые языки", поскольку ВМ я как раз считаю не самым важной в них вещью. мой опыт программирования говорит, что принципиальна как раз GC, поскольку он позволяет не задумываться о выделении и освобождении памяти и тем самым писать алгоритмы в более высокоуровневой манере. представь себе, что ты в док-ве мат. теоремы описываешь "а здесь мы освобождаем значение x, поскольку оно нам не понадобится в дальнейшем ходе док-ва"


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


В такой аналогии нужно больше деталей.
GC не собирает память пока это никому не мешает, как только заполнится первое поколение — сразу же уберет, а то что не успел удбрать — сложит в другое полколение.
Вот так и с дворником — пока мусор никому не мешает, он его убирать не будет, перед тем как кому-то он сможет помешать — сразу же уберет.
Re[10]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 15:00
Здравствуйте, Unhandled_Exception, Вы писали:

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


MK>> Хотя по правде, WPF уже не надстройка над WinAPI.


U_E>компоненты WPF не используют WinAPI?...

Не-а, рни с помощью directx рисуются
Re[19]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 15:06
Оценка: -1
Здравствуйте, gandjustas, Вы писали:

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


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


BZ>>>в таком случае языка современней машинных кодов, в твоём понимании так и не появилось. но почему-то люди, включая тебя пишут на языках постарее — асме, c++ том же


COF>>Хорошие компиляторы генерируют достаточно неплохой код и то иногда приходится на ассемблере модули использовать


BZ>>>я в это не вкладываю какое-то идеологическое наполнение, просто мне не нравится термин "управляемые языки", поскольку ВМ я как раз считаю не самым важной в них вещью. мой опыт программирования говорит, что принципиальна как раз GC, поскольку он позволяет не задумываться о выделении и освобождении памяти и тем самым писать алгоритмы в более высокоуровневой манере. представь себе, что ты в док-ве мат. теоремы описываешь "а здесь мы освобождаем значение x, поскольку оно нам не понадобится в дальнейшем ходе док-ва"


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


G>В такой аналогии нужно больше деталей.

G>GC не собирает память пока это никому не мешает, как только заполнится первое поколение — сразу же уберет, а то что не успел удбрать — сложит в другое полколение.
G>Вот так и с дворником — пока мусор никому не мешает, он его убирать не будет, перед тем как кому-то он сможет помешать — сразу же уберет.

Не закончил мысль.
"Продуманная стратегия управления ресурсами в C++" — в аналогии с дворником означает заставлять каждого человека выкидывать мусор в строго определенном месте, независимо от того насколько это удобно. При этом каждый должен потратить время чтобы выкинуть мусор. В случае с супер-дворником, только один он будет трутить время на выкидывание мусора, причем он суммарно затратит гораздо меньше, чем все люди вместе.

Такая ситуация существует и на практике. Множественные операции выделения-освобождения памяти происходят гораздо бытсрее в коде на .NET, чем в коде на C++.
Re[18]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: BulatZiganshin 
Дата: 16.03.09 15:06
Здравствуйте, COFF, Вы писали:

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


BZ>>в таком случае языка современней машинных кодов, в твоём понимании так и не появилось. но почему-то люди, включая тебя пишут на языках постарее — асме, c++ том же


COF>Хорошие компиляторы генерируют достаточно неплохой код и то иногда приходится на ассемблере модули использовать


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

BZ>>я в это не вкладываю какое-то идеологическое наполнение, просто мне не нравится термин "управляемые языки", поскольку ВМ я как раз считаю не самым важной в них вещью. мой опыт программирования говорит, что принципиальна как раз GC, поскольку он позволяет не задумываться о выделении и освобождении памяти и тем самым писать алгоритмы в более высокоуровневой манере. представь себе, что ты в док-ве мат. теоремы описываешь "а здесь мы освобождаем значение x, поскольку оно нам не понадобится в дальнейшем ходе док-ва"


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


точно. а продуманная структура управления регистрами и явное использование адресов памяти в программе ещё круче, вот только несколько дороговато в разработке. язык — это средство описания алгоритма, а не детального расписывания того, что должен процессор делать каждый из 3 миллиардов циклов в секунду если ты так нацелен контролировать свой процессор, то тебе нужны машкоды и что-нибудь неспекулятивное
FreeArcлучший архиватор в мире
Re[16]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 15:06
Здравствуйте, hattab, Вы писали:

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


G>>>Ну во время появления ada (1993 год) вполне могло и зависеть.


BZ>>1979


H>1974 — Инициатива МО США. Формирование требований.

H>1975 — Начало разработки.
H>1977 — Предложение о создании нового языка.
H>1983 — Ada становится стандартом ANSI/MIL-STD-1815A-1983

H>Как по мне, так 1983.

Ага, это я опечатался.
Re[19]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 16.03.09 15:07
Здравствуйте, gandjustas, Вы писали:

G>В такой аналогии нужно больше деталей.

G>GC не собирает память пока это никому не мешает, как только заполнится первое поколение — сразу же уберет, а то что не успел удбрать — сложит в другое полколение.
G>Вот так и с дворником — пока мусор никому не мешает, он его убирать не будет, перед тем как кому-то он сможет помешать — сразу же уберет.

Так вот дворник сидит и смотрит — вроде пока мусор никому не мешает ходить, можно еще покурить или даже поспать :) А то что людям может быть неприятно, когда мусор на улице валяется так это не дворника дело. С GC ситуация та же — в рамках процесса он может и понимает что мусор может кому-то помешать, а если таких процессов в системе пара десятков?
Re[20]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: BulatZiganshin 
Дата: 16.03.09 15:11
Оценка: +1 -2
Здравствуйте, COFF, Вы писали:

COF>Так вот дворник сидит и смотрит — вроде пока мусор никому не мешает ходить, можно еще покурить или даже поспать А то что людям может быть неприятно, когда мусор на улице валяется так это не дворника дело. С GC ситуация та же — в рамках процесса он может и понимает что мусор может кому-то помешать, а если таких процессов в системе пара десятков?


а ты следишь за всеми процесами в системе и напрягаешься от мусора в памяти?

в языках без gc расход памяти меньше в краткосрочном плане. а вот когда память выделяется, возвращается, снова выделяется — ты получаешь фрагментированную память и ничего с ней не поделаешь. поэтому для таких программ GC выгодней — есть хоть гарантии что расход памяти будет не более чем в три раза выше, нежели реальное использование. в c++ гарантий никаких
FreeArcлучший архиватор в мире
Re[17]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 16.03.09 15:14
Здравствуйте, BulatZiganshin, Вы писали:

BZ>я в это не вкладываю какое-то идеологическое наполнение, просто мне не нравится термин "управляемые языки", поскольку ВМ я как раз считаю не самым важной в них вещью. мой опыт программирования говорит, что принципиальна как раз GC, поскольку он позволяет не задумываться о выделении и освобождении памяти и тем самым писать алгоритмы в более высокоуровневой манере. представь себе, что ты в док-ве мат. теоремы описываешь "а здесь мы освобождаем значение x, поскольку оно нам не понадобится в дальнейшем ходе док-ва"


Я когда пишу на С++ — просто выделяю память, и не занимаюсь её освобожденим — пока в этом нет необходимости.
Мемориликов в годовалом проекте нет, хотя в ходе разработки тестирования на лики не производилось.
Re[18]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: BulatZiganshin 
Дата: 16.03.09 15:16
Здравствуйте, COFF, Вы писали:

BZ>>какие 10 лет? 10 лет назад была тормозная зачаточная ява без IDE. реально лет 5 назад стало очевидно, что java/c# выгодны в разработке. вот и поищи программы, которые были начаты в последние 5 лет


COF>Я где-то в 94 году видел в книге по C++ главу — что такое ява и как скоро она заменит C++


конечно, в книгах по c++ о яве стали писать лет за 10 до её появления почитай книги о яве — наверняка там уже пищут о том, что её заменит лет через 20
FreeArcлучший архиватор в мире
Re[19]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 16.03.09 15:17
Здравствуйте, gandjustas, Вы писали:

G>В такой аналогии нужно больше деталей.

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

G>Вот так и с дворником — пока мусор никому не мешает, он его убирать не будет, перед тем как кому-то он сможет помешать — сразу же уберет.

Ага, особенно это интересно на телефоне, где тебе приходится заниматься колдовством, вместо нормального распределения ограниченного ресурса
Re[21]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: denisko 
Дата: 16.03.09 15:19
Оценка: +1
Здравствуйте, BulatZiganshin, Вы писали:

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


COF>>Так вот дворник сидит и смотрит — вроде пока мусор никому не мешает ходить, можно еще покурить или даже поспать А то что людям может быть неприятно, когда мусор на улице валяется так это не дворника дело. С GC ситуация та же — в рамках процесса он может и понимает что мусор может кому-то помешать, а если таких процессов в системе пара десятков?


BZ>а ты следишь за всеми процесами в системе и напрягаешься от мусора в памяти?


BZ>в языках без gc расход памяти меньше в краткосрочном плане. а вот когда память выделяется, возвращается, снова выделяется — ты получаешь фрагментированную память и ничего с ней не поделаешь. поэтому для таких программ GC выгодней — есть хоть гарантии что расход памяти будет не более чем в три раза выше, нежели реальное использование. в c++ гарантий никаких

Обычно, для однотипных данных, которых много, выделяют тем или иным способ свой уже фрагментированный пул. Это позволяет 1) контролировать тех, кто не отдал память вовремя 2) работать быстро и со строго ограниченным сверху размером выделенной памяти.
Кто сказал, что GC ГАРАНТИРУЕТ выделение памяти не более чем три раза больше чем в данный момент используется системой?
Правда уши менингит!
Re[19]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 16.03.09 15:20
Здравствуйте, BulatZiganshin, Вы писали:

BZ>точно. а продуманная структура управления регистрами и явное использование адресов памяти в программе ещё круче, вот только несколько дороговато в разработке. язык — это средство описания алгоритма, а не детального расписывания того, что должен процессор делать каждый из 3 миллиардов циклов в секунду :) если ты так нацелен контролировать свой процессор, то тебе нужны машкоды и что-нибудь неспекулятивное :)


Язык должен быть в состоянии и описать алгоритм на высоком уровне, и дать возможность распределить регистры если это нужно (а это иногда бывает нужно). Дать возможность использовать сборку мусора, где удобно, или отказаться от нее. Вот это идеал, с моей точки зрения. Сейчас C++ по сравнению с другими распространенными языками наиболее близко подходит к нему, поэтому и популярен. А когда говорят, что ручное распределение памяти вам не нужно, регистры вам не нужны, ваше дело высокоуровнево алгоритмы описывать, то сразу же возникает вопрос, а как тогда эти задачи решать и кто их будет решать? Инопланетяне? :)
Re[21]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 16.03.09 15:20
Здравствуйте, BulatZiganshin, Вы писали:

BZ>в языках без gc расход памяти меньше в краткосрочном плане. а вот когда память выделяется, возвращается, снова выделяется — ты получаешь фрагментированную память и ничего с ней не поделаешь. поэтому для таких программ GC выгодней — есть хоть гарантии что расход памяти будет не более чем в три раза выше, нежели реальное использование. в c++ гарантий никаких


Ага, напоминает известное предложение ставить большие баки на речные суда и заполнять их водой. Типа если натыкаешься на мель — просто сливаешь воду и плывёшь себе дальше
Re[18]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: BulatZiganshin 
Дата: 16.03.09 15:28
Здравствуйте, NikeByNike, Вы писали:

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


BZ>>я в это не вкладываю какое-то идеологическое наполнение, просто мне не нравится термин "управляемые языки", поскольку ВМ я как раз считаю не самым важной в них вещью. мой опыт программирования говорит, что принципиальна как раз GC, поскольку он позволяет не задумываться о выделении и освобождении памяти и тем самым писать алгоритмы в более высокоуровневой манере. представь себе, что ты в док-ве мат. теоремы описываешь "а здесь мы освобождаем значение x, поскольку оно нам не понадобится в дальнейшем ходе док-ва"


NBN>Я когда пишу на С++ — просто выделяю память, и не занимаюсь её освобожденим — пока в этом нет необходимости.

NBN>Мемориликов в годовалом проекте нет, хотя в ходе разработки тестирования на лики не производилось.

на фортране вообще не было распределения памяти, вопрос только в том, в каком стиле при этом приходится программировать и за какими ограничениями следить, чтобы не дай бог не потерять память
FreeArcлучший архиватор в мире
Re[20]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 15:28
Оценка: :)
Здравствуйте, NikeByNike, Вы писали:

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


G>>В такой аналогии нужно больше деталей.

G>>GC не собирает память пока это никому не мешает, как только заполнится первое поколение — сразу же уберет, а то что не успел удбрать — сложит в другое полколение.
NBN>И тут вжииик, и оказывается что у меня на компе мало памяти... Всего гиг. Пока не поставил серьёзное ява приложение не догадывался, что у меня мало памяти.
Сейчас память стоит очень дешево, купить себе пару гигов может позволить каждый.

G>>Вот так и с дворником — пока мусор никому не мешает, он его убирать не будет, перед тем как кому-то он сможет помешать — сразу же уберет.

NBN>Ага, особенно это интересно на телефоне, где тебе приходится заниматься колдовством, вместо нормального распределения ограниченного ресурса
В телефони памяти просто мало, там нельзя писать также как на PC, память будет кончаться независимо от языка.
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: BulatZiganshin 
Дата: 16.03.09 15:30
Оценка: -2
Здравствуйте, NikeByNike, Вы писали:

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


читай внимательно. в языках с gc гарантия — на 3x, можно и меньше. в C++ — гарантий никаких, расход может быть каким угодно прсто потому что память усеяна мелкими дырками
FreeArcлучший архиватор в мире
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 15:30
Здравствуйте, denisko, Вы писали:

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


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


COF>>>Так вот дворник сидит и смотрит — вроде пока мусор никому не мешает ходить, можно еще покурить или даже поспать А то что людям может быть неприятно, когда мусор на улице валяется так это не дворника дело. С GC ситуация та же — в рамках процесса он может и понимает что мусор может кому-то помешать, а если таких процессов в системе пара десятков?


BZ>>а ты следишь за всеми процесами в системе и напрягаешься от мусора в памяти?


BZ>>в языках без gc расход памяти меньше в краткосрочном плане. а вот когда память выделяется, возвращается, снова выделяется — ты получаешь фрагментированную память и ничего с ней не поделаешь. поэтому для таких программ GC выгодней — есть хоть гарантии что расход памяти будет не более чем в три раза выше, нежели реальное использование. в c++ гарантий никаких

D>Обычно, для однотипных данных, которых много, выделяют тем или иным способ свой уже фрагментированный пул. Это позволяет 1) контролировать тех, кто не отдал память вовремя 2) работать быстро и со строго ограниченным сверху размером выделенной памяти.
А некоторые вообще пишут свой GC...

D>Кто сказал, что GC ГАРАНТИРУЕТ выделение памяти не более чем три раза больше чем в данный момент используется системой?

Этого не гарантирует даже аллокатор ОС, в принципе этого не может гарантировать никто.
Re[20]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: BulatZiganshin 
Дата: 16.03.09 15:32
Здравствуйте, COFF, Вы писали:

COF>Язык должен быть в состоянии и описать алгоритм на высоком уровне, и дать возможность распределить регистры если это нужно (а это иногда бывает нужно). Дать возможность использовать сборку мусора, где удобно, или отказаться от нее. Вот это идеал, с моей точки зрения. Сейчас C++ по сравнению с другими распространенными языками наиболее близко подходит к нему, поэтому и популярен. А когда говорят, что ручное распределение памяти вам не нужно, регистры вам не нужны, ваше дело высокоуровнево алгоритмы описывать, то сразу же возникает вопрос, а как тогда эти задачи решать и кто их будет решать? Инопланетяне?


я их и решаю на C++. когда это необходимо. а остальное пишу на хаскеле. учитывая, что >90% кода не нуждается в ассемблерной эффективности, писать всё на С++ — это всё равно что всюду таскать с собой ружьё на случай нападения медведя из ЕР
FreeArcлучший архиватор в мире
Re[20]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: BulatZiganshin 
Дата: 16.03.09 15:35
Здравствуйте, NikeByNike, Вы писали:

NBN>И тут вжииик, и оказывается что у меня на компе мало памяти... Всего гиг. Пока не поставил серьёзное ява приложение не догадывался, что у меня мало памяти.


у меня столько один firefox сейчас жрёт

G>>Вот так и с дворником — пока мусор никому не мешает, он его убирать не будет, перед тем как кому-то он сможет помешать — сразу же уберет.

NBN>Ага, особенно это интересно на телефоне, где тебе приходится заниматься колдовством, вместо нормального распределения ограниченного ресурса

вот на телефоне и занимайся шаманством с памятью на С, в 80-х годах мы как-то умещались в 640 кб
FreeArcлучший архиватор в мире
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: denisko 
Дата: 16.03.09 15:36
Здравствуйте, gandjustas, Вы писали:

G>А некоторые вообще пишут свой GC...

Выделить пулы не требует написания кода практически.


D>>Кто сказал, что GC ГАРАНТИРУЕТ выделение памяти не более чем три раза больше чем в данный момент используется системой?

G>Этого не гарантирует даже аллокатор ОС, в принципе этого не может гарантировать никто.
А два сообщения выше вы написали, что гарантия 3x Врать не ходошо
Правда уши менингит!
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: BulatZiganshin 
Дата: 16.03.09 15:36
Здравствуйте, denisko, Вы писали:

D>Обычно, для однотипных данных, которых много, выделяют тем или иным способ свой уже фрагментированный пул. Это позволяет 1) контролировать тех, кто не отдал память вовремя 2) работать быстро и со строго ограниченным сверху размером выделенной памяти.


ага. когда у тебя 10 библиотек, они вилимо собираются вместе и договариваются об общем пуле

D>Кто сказал, что GC ГАРАНТИРУЕТ выделение памяти не более чем три раза больше чем в данный момент используется системой?


Я!
FreeArcлучший архиватор в мире
Re[20]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 15:37
Здравствуйте, COFF, Вы писали:

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


G>>В такой аналогии нужно больше деталей.

G>>GC не собирает память пока это никому не мешает, как только заполнится первое поколение — сразу же уберет, а то что не успел удбрать — сложит в другое полколение.
G>>Вот так и с дворником — пока мусор никому не мешает, он его убирать не будет, перед тем как кому-то он сможет помешать — сразу же уберет.

COF>Так вот дворник сидит и смотрит — вроде пока мусор никому не мешает ходить, можно еще покурить или даже поспать А то что людям может быть неприятно, когда мусор на улице валяется так это не дворника дело. С GC ситуация та же — в рамках процесса он может и понимает что мусор может кому-то помешать, а если таких процессов в системе пара десятков?

А программа на C++ будет корректировать выделние памяти в зависимости от загруженности компьютера? Конечно нет. И GC не будет.
А если кончится реальная физическая память, то страницы будут вытеснены, а освободившая память отдастся тому кому оно нужно.
Re[21]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 16.03.09 15:40
Оценка: +1
Здравствуйте, BulatZiganshin, Вы писали:

BZ>вот на телефоне и занимайся шаманством с памятью на С, в 80-х годах мы как-то умещались в 640 кб


Сам пиши в машинных кодах.
Re[21]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 16.03.09 15:42
Здравствуйте, gandjustas, Вы писали:

COF>>Так вот дворник сидит и смотрит — вроде пока мусор никому не мешает ходить, можно еще покурить или даже поспать А то что людям может быть неприятно, когда мусор на улице валяется так это не дворника дело. С GC ситуация та же — в рамках процесса он может и понимает что мусор может кому-то помешать, а если таких процессов в системе пара десятков?

G>А программа на C++ будет корректировать выделние памяти в зависимости от загруженности компьютера? Конечно нет. И GC не будет.
G>А если кончится реальная физическая память, то страницы будут вытеснены, а освободившая память отдастся тому кому оно нужно.

И тут можно доставать травку, чтобы картинка на мониторе выглядела более плавной
Re[21]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 16.03.09 15:42
Оценка: +3
Здравствуйте, gandjustas, Вы писали:

G>А программа на C++ будет корректировать выделние памяти в зависимости от загруженности компьютера? Конечно нет. И GC не будет.

G>А если кончится реальная физическая память, то страницы будут вытеснены, а освободившая память отдастся тому кому оно нужно.

Я не хочу вдаваться в детали, можно дискутировать об особенностях выделения памяти с gc или без него сколь угодно долго, но факт налицо — управляемые приложения на десктопе тормозят и жрут память. В теории возможно они хороши, а C++ плох, но практика пока этого не показывает.
Re[21]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 16.03.09 15:44
Оценка: +1 :)
Здравствуйте, gandjustas, Вы писали:

G>А программа на C++ будет корректировать выделние памяти в зависимости от загруженности компьютера? Конечно нет.

При необходимости? Конечно да!

G>И GC не будет.

Потому что не сможет
Re[21]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 16.03.09 15:45
Оценка: +1
Здравствуйте, BulatZiganshin, Вы писали:

BZ>я их и решаю на C++. когда это необходимо. а остальное пишу на хаскеле. учитывая, что >90% кода не нуждается в ассемблерной эффективности, писать всё на С++ — это всё равно что всюду таскать с собой ружьё на случай нападения медведя из ЕР :))


Вообще, изначально вопрос стоял так — стоит ли учить C++ или C#? Я так понимаю, что все-таки C++? ;)
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 16.03.09 15:46
Здравствуйте, BulatZiganshin, Вы писали:

BZ>читай внимательно. в языках с gc гарантия — на 3x, можно и меньше. в C++ — гарантий никаких, расход может быть каким угодно прсто потому что память усеяна мелкими дырками


C++ очень универсальный язык Он позволяет писать так как тебе нужно. В частности обеспечить все гарантии по чему хочешь, чем я, кстати, на днях воспользовался.
Re[20]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 15:49
Оценка: -1 :)
Здравствуйте, COFF, Вы писали:

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


BZ>>точно. а продуманная структура управления регистрами и явное использование адресов памяти в программе ещё круче, вот только несколько дороговато в разработке. язык — это средство описания алгоритма, а не детального расписывания того, что должен процессор делать каждый из 3 миллиардов циклов в секунду если ты так нацелен контролировать свой процессор, то тебе нужны машкоды и что-нибудь неспекулятивное


COF>Язык должен быть в состоянии и описать алгоритм на высоком уровне, и дать возможность распределить регистры если это нужно (а это иногда бывает нужно). Дать возможность использовать сборку мусора, где удобно, или отказаться от нее. Вот это идеал, с моей точки зрения. Сейчас C++ по сравнению с другими распространенными языками наиболее близко подходит к нему, поэтому и популярен. А когда говорят, что ручное распределение памяти вам не нужно, регистры вам не нужны, ваше дело высокоуровнево алгоритмы описывать, то сразу же возникает вопрос, а как тогда эти задачи решать и кто их будет решать? Инопланетяне?


Язык C++ не обладает возможностью описать алгоритм на высоком уровне.
Если не верите, то попробуйте написать алгоритм решения задачи: "вывести на экран все строки текстового файла, в которых более трех слов, отсортированные по алфавиту".
Причем это долно быть не наколеночное решение, а production-quality код, в котором можно без особых услий убрать условие, или сделать вывод только уникальных строк, или вывод строк через одну.
Re[16]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 16.03.09 15:51
Здравствуйте, COFF, Вы писали:

COF>Ну, беты появились года за два до релиза — вот и выходит почти 10 лет.

Ну, отсчитывать от бет неприлично. Не думаешь же ты, что кто-то начинал переводить проекты при бете

COF>Потом, почему именно 2.0? Где гарантия, что завтра не будешь говорить то же самое про 3.5?

Черт. Я знал, что так напишешь

COF>Вообще, я же не против .нет, я против огульного охаивания C++ определенными дот-нетчиками

Вот тут я тебя полностью понимаю. И я тоже против огульного охаивания .Net и его приравнивания к VB.
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 16:08
Оценка: :)
Здравствуйте, COFF, Вы писали:

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


G>>А программа на C++ будет корректировать выделние памяти в зависимости от загруженности компьютера? Конечно нет. И GC не будет.

G>>А если кончится реальная физическая память, то страницы будут вытеснены, а освободившая память отдастся тому кому оно нужно.

COF>Я не хочу вдаваться в детали, можно дискутировать об особенностях выделения памяти с gc или без него сколь угодно долго, но факт налицо — управляемые приложения на десктопе тормозят и жрут память. В теории возможно они хороши, а C++ плох, но практика пока этого не показывает.

Ну покажите примеры программ на десктопе которые тормозят и жрут память?

Я постоянно пользуюсь двумя десктомпными программами на .NET : paint.NET и Windows Live Writer, ни одна из них не тормозит и не жрет память.
Журт панять у меня на компе больше всего в доску неуправляемые браузеры.

Не надо в качестве примера приводить плохо написанные программы на .NET или java, плохо написанных программ на С++ все равно больше.
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 16:10
Здравствуйте, NikeByNike, Вы писали:

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


G>>А программа на C++ будет корректировать выделние памяти в зависимости от загруженности компьютера? Конечно нет.

NBN>При необходимости? Конечно да!
И каким образом?

G>>И GC не будет.

NBN>Потому что не сможет
При необходимости? Конечно сможет, только это не надо никому.

Если память нужна, а её не хватает, то уже надо программу переписывать.
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 16:14
Здравствуйте, COFF, Вы писали:

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


BZ>>я их и решаю на C++. когда это необходимо. а остальное пишу на хаскеле. учитывая, что >90% кода не нуждается в ассемблерной эффективности, писать всё на С++ — это всё равно что всюду таскать с собой ружьё на случай нападения медведя из ЕР


COF>Вообще, изначально вопрос стоял так — стоит ли учить C++ или C#? Я так понимаю, что все-таки C++?


неправльно понимаешь. C++ это для тех кто хочет заниматься "хардкором" в программировании. Это примерно как в "хардкорных" фильмах про то как четыре негра, размером со шкаф, трахают девушку во все мыслимые и немыслимые отверстия, только в программировании.

Изначально вопрос стоял какой язык учить для дальнейшего развития.
Re[21]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MescalitoPeyot 
Дата: 16.03.09 16:15
Здравствуйте, gandjustas, Вы писали:

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


G>Язык C++ не обладает возможностью описать алгоритм на высоком уровне.

G>Если не верите, то попробуйте написать алгоритм решения задачи: "вывести на экран все строки текстового файла, в которых более трех слов, отсортированные по алфавиту".
G>Причем это долно быть не наколеночное решение, а production-quality код, в котором можно без особых услий убрать условие, или сделать вывод только уникальных строк, или вывод строк через одну.

А чем C# на этой задаче лучше?
... << RSDN@Home 1.2.0 alpha 4 rev. 1138>>
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 16:16
Оценка: :)))
Здравствуйте, NikeByNike, Вы писали:

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


BZ>>читай внимательно. в языках с gc гарантия — на 3x, можно и меньше. в C++ — гарантий никаких, расход может быть каким угодно прсто потому что память усеяна мелкими дырками


NBN>C++ очень универсальный язык Он позволяет писать так как тебе нужно. В частности обеспечить все гарантии по чему хочешь, чем я, кстати, на днях воспользовался.

Я вот тут на днях написал на C# библиотеку для работы с конечными автоматами. Она генерирует в рантайме код автомата по описанию, а потом использует его.
На C++ такое получится?
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 16:18
Здравствуйте, MescalitoPeyot, Вы писали:

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


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


G>>Язык C++ не обладает возможностью описать алгоритм на высоком уровне.

G>>Если не верите, то попробуйте написать алгоритм решения задачи: "вывести на экран все строки текстового файла, в которых более трех слов, отсортированные по алфавиту".
G>>Причем это долно быть не наколеночное решение, а production-quality код, в котором можно без особых услий убрать условие, или сделать вывод только уникальных строк, или вывод строк через одну.

MP>А чем C# на этой задаче лучше?

Linq + yield
Можете запостить сюда код решения на C++
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 16.03.09 16:18
Здравствуйте, gandjustas, Вы писали:

G>неправльно понимаешь. C++ это для тех кто хочет заниматься "хардкором" в программировании. Это примерно как в "хардкорных" фильмах про то как четыре негра, размером со шкаф, трахают девушку во все мыслимые и немыслимые отверстия, только в программировании.


У каждого свои ассоциации, уж извини :)
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 16.03.09 16:19
Здравствуйте, gandjustas, Вы писали:

NBN>>C++ очень универсальный язык Он позволяет писать так как тебе нужно. В частности обеспечить все гарантии по чему хочешь, чем я, кстати, на днях воспользовался.

G>Я вот тут на днях написал на C# библиотеку для работы с конечными автоматами. Она генерирует в рантайме код автомата по описанию, а потом использует его.
G>На C++ такое получится?

Я тут на днях написал программку которая сейчас находится топе5 продаж.

P.S.
Я не понял — ты хочешь длинной померяться? Так сразу и говори
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 16.03.09 16:21
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>Не надо в качестве примера приводить плохо написанные программы на .NET или java, плохо написанных программ на С++ все равно больше.


Потому что их несравнимо больше
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 16:36
Здравствуйте, NikeByNike, Вы писали:

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


NBN>>>C++ очень универсальный язык Он позволяет писать так как тебе нужно. В частности обеспечить все гарантии по чему хочешь, чем я, кстати, на днях воспользовался.

G>>Я вот тут на днях написал на C# библиотеку для работы с конечными автоматами. Она генерирует в рантайме код автомата по описанию, а потом использует его.
G>>На C++ такое получится?

NBN>Я тут на днях написал программку которая сейчас находится топе5 продаж.

Продажи к свойствамя языка никакого отношения не имеют.

NBN>P.S.

NBN>Я не понял — ты хочешь длинной померяться? Так сразу и говори
Не хочу меряться, хочу показать что на С++ далеко не все можно сделать с трудозатратами сравнимыми с управляемым языком.
Re: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: x64x64's Site
Дата: 16.03.09 16:38
Оценка: +1
Однозначно C#.
JID: x64j@jabber.ru
Re: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 16.03.09 16:42
Здравствуйте, niellune, Вы писали:

N>Здравствуйте! Нужен ваш совет))

N>Дело в том что мне нравится язык C++ и меня интересует есть ли сейчас возможность устроиться куда-нибудь на начальную позицию?
N>В каких областях сейчас применяется C++?

Везде, куда ни кинь, просто где-то чаще, где-то реже. И положение ещё долго не изменится, хотя история похорон C++ насчитывает едва ли не больше времени, чем история его развиия.

N>Может легче сначала пойти на С#, а потом перейти на С++ или сразу искать вакансии С++

N>Просто мне кажется, что объем знаний С++ требуется гораздо больший, а хочется работать и набираться опыта..

Тут дело вот в чём: на C/C++ так или иначе реализовано практически всё, с чем ты работаешь, от Web-серверов до компиляторов. Но это не означает, что заняв вакансию C++-разработчика тебе понадобится весь тот же багаж знаний, который нужен, скажем, разработчику компилятора. И следовательно, это не означает, что эти самые знания у тебя появятся по ходу работы: работа на С++ тоже может оказаться унылой и монотонной. Больше того, тебе могут запретить использовать даже какие-то аспекты C++ (встречается и такая альтернативная одарённость).

N>У меня есть опыт работы на php, причем не только web, а еще что-то вроде создания системы документооборота)

N>Но php мне уже мало и он мне порядком надоел, хочется развиваться дальше.

Развиваться — куда?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 16.03.09 16:42
Оценка: +2 -2
Здравствуйте, gandjustas, Вы писали:

NBN>>Я тут на днях написал программку которая сейчас находится топе5 продаж.

G>Продажи к свойствамя языка никакого отношения не имеют.
Имеют достаточно прямые. На яве и шарпе нельзя написать качественный продукт удовлетворяющий требованиям

NBN>>Я не понял — ты хочешь длинной померяться? Так сразу и говори

G>Не хочу меряться, хочу показать что на С++ далеко не все можно сделать с трудозатратами сравнимыми с управляемым языком.
Ага, можно сделать очень клёвую, но никому не нужную феньку (не удовлетворяет клиента) — это да
Re[9]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: alsemmhttp://sourceforge.net/projects/ferry
Дата: 16.03.09 16:55
Здравствуйте, NikeByNike, Вы писали:

NBN>Ага, а в задачу входит создание красивого, быстрого и кроссплатформенного кода и софта — это решаемо _только_ на С++. Даже ущербный С с этим не спрвится.

Любая встравиваемая real-life JVM — это только C.
Телефонный софт (OS, стандартные приложения) — только C.

Алексей
Re[20]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 16.03.09 17:00
Оценка: -1
Здравствуйте, gandjustas, Вы писали:

G>>GC не собирает память пока это никому не мешает, как только заполнится первое поколение — сразу же уберет, а то что не успел удбрать — сложит в другое полколение.

G>>Вот так и с дворником — пока мусор никому не мешает, он его убирать не будет, перед тем как кому-то он сможет помешать — сразу же уберет.

Я вчера решил помониторить сборку xmlrpc для .Net (http://www.xml-rpc.net/). В общем, на каждый вызов метода через XML-RPC (метод принимает два параметра и возвращает бинарник на ~200Kb) происходит 3 вызова сборщика мусора (мониторил ProcessExplorer'ом). Я на перформанс даже тестировать не стал...
Re[21]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 16.03.09 17:03
Здравствуйте, BulatZiganshin, Вы писали:

BZ>в языках без gc расход памяти меньше в краткосрочном плане. а вот когда память выделяется, возвращается, снова выделяется — ты получаешь фрагментированную память и ничего с ней не поделаешь. поэтому для таких программ GC выгодней — есть хоть гарантии что расход памяти будет не более чем в три раза выше, нежели реальное использование. в c++ гарантий никаких


Для избавления от фрагментации памяти примеются специальные аллокаторы/менеджеры с пулами. Например в Delphi, c версии 2006 идет FastMM:

Description:
A fast replacement memory manager for CodeGear Delphi Win32 applications that
scales well under multi-threaded usage, is not prone to memory fragmentation,
and supports shared memory without the use of external .DLL files.

Re[18]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: alsemmhttp://sourceforge.net/projects/ferry
Дата: 16.03.09 17:09
Здравствуйте, BulatZiganshin, Вы писали:

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


COF>>Именно, стали продавать писюки с макос. Называются imac и ibook Их доля хотя сравнительно невелика, но постоянно растет. Маки стали продавать в обычных компьютерных магазинах типа Кея в Питере, раньше такого не было.


BZ>и конечно, в этом виноват C#, а не таланты Джобса

Талантами Джобса Apple сидел на PowerPC пока не стало 100% ясно, что если так будет продолжаться, то они совсем рынок потеряют.
Так что талант тут может и не причем, может просто в этот раз M$ слажал.

Алексей
Re[10]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 16.03.09 17:14
Оценка: :)
Здравствуйте, alsemm, Вы писали:

NBN>>Ага, а в задачу входит создание красивого, быстрого и кроссплатформенного кода и софта — это решаемо _только_ на С++. Даже ущербный С с этим не спрвится.

A>Любая встравиваемая real-life JVM — это только C.
A>Телефонный софт (OS, стандартные приложения) — только C.

Это далеко не так, хотя этой нечисти там действительно хватает
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 16.03.09 17:17
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>Ну покажите примеры программ на десктопе которые тормозят и жрут память?


О-о-о! Их есть у меня Это чудо называется Creative Docs .NET. После запуска, без открытого документа, мило кушает 192 метра + виртуалки в районе 180 (по показаниям ProcessExplorer'a). Скорость работы с документом тоже потрясная: при скроллинге сперва прокручиваются линейки, а потом, неспешно, за ними ползет содержимое документа. Терпения хватает только на посмотреть. PM 1.7 512Mb NVidia GeForceFX Go5200.

G>Я постоянно пользуюсь двумя десктомпными программами на .NET : paint.NET и Windows Live Writer, ни одна из них не тормозит и не жрет память.


Эти у меня тоже есть, к слову сказать WLW тормоз порядочный при его-то скромном функционале, а Paint.NET'ом я вообще не пользуюсь
Re[28]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 17:24
Здравствуйте, NikeByNike, Вы писали:

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


NBN>>>Я тут на днях написал программку которая сейчас находится топе5 продаж.

G>>Продажи к свойствамя языка никакого отношения не имеют.
NBN>Имеют достаточно прямые. На яве и шарпе нельзя написать качественный продукт удовлетворяющий требованиям
Черт, а я писал, наверное не так что-то делал.
Re[21]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 17:27
Здравствуйте, hattab, Вы писали:

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


G>>>GC не собирает память пока это никому не мешает, как только заполнится первое поколение — сразу же уберет, а то что не успел удбрать — сложит в другое полколение.

G>>>Вот так и с дворником — пока мусор никому не мешает, он его убирать не будет, перед тем как кому-то он сможет помешать — сразу же уберет.

H>Я вчера решил помониторить сборку xmlrpc для .Net (http://www.xml-rpc.net/). В общем, на каждый вызов метода через XML-RPC (метод принимает два параметра и возвращает бинарник на ~200Kb) происходит 3 вызова сборщика мусора (мониторил ProcessExplorer'ом). Я на перформанс даже тестировать не стал...


Сборка мусора иногда происходит и что?
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 17:31
Здравствуйте, hattab, Вы писали:

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


G>>Ну покажите примеры программ на десктопе которые тормозят и жрут память?


H>О-о-о! Их есть у меня Это чудо называется Creative Docs .NET. После запуска, без открытого документа, мило кушает 192 метра + виртуалки в районе 180 (по показаниям ProcessExplorer'a). Скорость работы с документом тоже потрясная: при скроллинге сперва прокручиваются линейки, а потом, неспешно, за ними ползет содержимое документа. Терпения хватает только на посмотреть. PM 1.7 512Mb NVidia GeForceFX Go5200.


Ну напишите получше на C+ или на вашем любимом Delphi.
Или просто не пользуйтесь тормознутым барахлом.
Re[29]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 16.03.09 17:34
Здравствуйте, gandjustas, Вы писали:

G>>>Продажи к свойствамя языка никакого отношения не имеют.

NBN>>Имеют достаточно прямые. На яве и шарпе нельзя написать качественный продукт удовлетворяющий требованиям
G>Черт, а я писал, наверное не так что-то делал.

Ты всё время забываешь про такую штуку как требования
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 16.03.09 17:37
Оценка:26 (6) :)))
Здравствуйте, gandjustas, Вы писали:
G>>>Если не верите, то попробуйте написать алгоритм решения задачи: "вывести на экран все строки текстового файла, в которых более трех слов, отсортированные по алфавиту".
G>Можете запостить сюда код решения на C++

ifstream inputStream(filePath);
string currentString;
const regex expression("(\\w+)\\s(\\w+)\\s(\\w+)");
multiset<string> matched;
while(getline(inputStream, currentString))
{
  if (regex_search(currentString, expression))
    matched.insert(currentString);
}
copy(matched.begin(), matched.end(), ostream_iterator<string>(cout, "\n"));


немного непонятно что ты в етой задаче нашёл такого "сложноописуемого" на с++
People write code, programming languages don't.
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 16.03.09 17:42
Здравствуйте, gandjustas, Вы писали:

G>>>>Вот так и с дворником — пока мусор никому не мешает, он его убирать не будет, перед тем как кому-то он сможет помешать — сразу же уберет.


H>>Я вчера решил помониторить сборку xmlrpc для .Net (http://www.xml-rpc.net/). В общем, на каждый вызов метода через XML-RPC (метод принимает два параметра и возвращает бинарник на ~200Kb) происходит 3 вызова сборщика мусора (мониторил ProcessExplorer'ом). Я на перформанс даже тестировать не стал...


G>Сборка мусора иногда происходит и что?


3 раза на один вызов это иногда? Несколько последовательных вызовов сразу задирают тактовую частоту с 600 до 1700, при том, что при аналогичных действиях из нативного клиента частота поднимается максимум до 800. Тут нужно пояснить, что вся тяжелая работа (линейный скаллинг картинки) делается в нативном сервере (он запущен локально), клиентская часть лишь формирует запрос и получает ответ т.е. ее работа минимальна.
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 16.03.09 17:43
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>>>Ну покажите примеры программ на десктопе которые тормозят и жрут память?


H>>О-о-о! Их есть у меня Это чудо называется Creative Docs .NET. После запуска, без открытого документа, мило кушает 192 метра + виртуалки в районе 180 (по показаниям ProcessExplorer'a). Скорость работы с документом тоже потрясная: при скроллинге сперва прокручиваются линейки, а потом, неспешно, за ними ползет содержимое документа. Терпения хватает только на посмотреть. PM 1.7 512Mb NVidia GeForceFX Go5200.


G>Ну напишите получше на C+ или на вашем любимом Delphi.


Не нужно обижаться, ты сам примеры просил...

G>Или просто не пользуйтесь тормознутым барахлом.


Я и не пользуюсь
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 16.03.09 17:54
Здравствуйте, hattab, Вы писали:

H>О-о-о! Их есть у меня Это чудо называется Creative Docs .NET. После запуска, без открытого документа, мило кушает 192 метра + виртуалки в районе 180 (по показаниям ProcessExplorer'a). Скорость работы с документом тоже потрясная: при скроллинге сперва прокручиваются линейки, а потом, неспешно, за ними ползет содержимое документа. Терпения хватает только на посмотреть. PM 1.7 512Mb NVidia GeForceFX Go5200.

Creative Docs .Net словно на бете WPF делали — жуткие шрифты какие-то
И всё же там не 192 и даже с открытым документом:
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 17:54
Оценка: :)
Здравствуйте, hattab, Вы писали:

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


G>>>>>Вот так и с дворником — пока мусор никому не мешает, он его убирать не будет, перед тем как кому-то он сможет помешать — сразу же уберет.


H>>>Я вчера решил помониторить сборку xmlrpc для .Net (http://www.xml-rpc.net/). В общем, на каждый вызов метода через XML-RPC (метод принимает два параметра и возвращает бинарник на ~200Kb) происходит 3 вызова сборщика мусора (мониторил ProcessExplorer'ом). Я на перформанс даже тестировать не стал...


G>>Сборка мусора иногда происходит и что?


H>3 раза на один вызов это иногда? Несколько последовательных вызовов сразу задирают тактовую частоту с 600 до 1700, при том, что при аналогичных действиях из нативного клиента частота поднимается максимум до 800. Тут нужно пояснить, что вся тяжелая работа (линейный скаллинг картинки) делается в нативном сервере (он запущен локально), клиентская часть лишь формирует запрос и получает ответ т.е. ее работа минимальна.

Ну так вы померяйте перформанс, а то какие-то пространные размышления ни о чем.
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 17:55
Здравствуйте, NikeByNike, Вы писали:

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


G>>>>Продажи к свойствамя языка никакого отношения не имеют.

NBN>>>Имеют достаточно прямые. На яве и шарпе нельзя написать качественный продукт удовлетворяющий требованиям
G>>Черт, а я писал, наверное не так что-то делал.

NBN>Ты всё время забываешь про такую штуку как требования

Я про требования ни разу не забывал.
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 16.03.09 17:57
Здравствуйте, hattab, Вы писали:

H>3 раза на один вызов это иногда? Несколько последовательных вызовов сразу задирают тактовую частоту с 600 до 1700, при том, что при аналогичных действиях из нативного клиента частота поднимается максимум до 800. Тут нужно пояснить, что вся тяжелая работа (линейный скаллинг картинки) делается в нативном сервере (он запущен локально), клиентская часть лишь формирует запрос и получает ответ т.е. ее работа минимальна.

Ну мало ли что там делает это один вызов. Ты не на число запусков сборщика смотри, а на общий перформанс. При этом я ничего не обещаю, просто хочу сказать, что не стоит так сильно заморачиваться почему происходит вызов GC. В конце концов тот же rpc-xml может это сам явно делать по каким-то своим умозаключениям. У меня вот в WPF'ной проге, окна иной раз не собираются по 10-20 минут. Можно ли быть уверенным, что моя прога в сто раз быстрее твоей?
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 16.03.09 17:58
Здравствуйте, MxKazan, Вы писали:

H>>О-о-о! Их есть у меня Это чудо называется Creative Docs .NET. После запуска, без открытого документа, мило кушает 192 метра + виртуалки в районе 180 (по показаниям ProcessExplorer'a). Скорость работы с документом тоже потрясная: при скроллинге сперва прокручиваются линейки, а потом, неспешно, за ними ползет содержимое документа. Терпения хватает только на посмотреть. PM 1.7 512Mb NVidia GeForceFX Go5200.

MK>Creative Docs .Net словно на бете WPF делали — жуткие шрифты какие-то

Да, глаза он мне все поломал Там на сайте написано, что у них какая-то своя библа, вроде даже с AntiGrain.

MK>И всё же там не 192 и даже с открытым документом:

MK>

У меня отложилось 192, я пробовал, когда его упомянули в теме о продуктах МС.
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 16.03.09 18:05
Здравствуйте, hattab, Вы писали:

H>У меня отложилось 192, я пробовал, когда его упомянули в теме о продуктах МС.

Я, кстати, обратил внимание, что подобное было при первом запуске. Отодрал не 192, около 112 болтался.
Но все последующие запуски держались в районе 70-80 после всяких прокруток и зумов сэмпловых документов.
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 16.03.09 18:06
Здравствуйте, gandjustas, Вы писали:

H>>>>Я вчера решил помониторить сборку xmlrpc для .Net (http://www.xml-rpc.net/). В общем, на каждый вызов метода через XML-RPC (метод принимает два параметра и возвращает бинарник на ~200Kb) происходит 3 вызова сборщика мусора (мониторил ProcessExplorer'ом). Я на перформанс даже тестировать не стал...


G>>>Сборка мусора иногда происходит и что?


H>>3 раза на один вызов это иногда? Несколько последовательных вызовов сразу задирают тактовую частоту с 600 до 1700, при том, что при аналогичных действиях из нативного клиента частота поднимается максимум до 800. Тут нужно пояснить, что вся тяжелая работа (линейный скаллинг картинки) делается в нативном сервере (он запущен локально), клиентская часть лишь формирует запрос и получает ответ т.е. ее работа минимальна.

G>Ну так вы померяйте перформанс, а то какие-то пространные размышления ни о чем.

Чтоб полноценно померить перформанс нужно и сервер под .Net писать, а мне пока есть чем заняться Я же, просто посмотрел на работу клиентской части.
Re[14]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: minorlogic 
Дата: 16.03.09 18:06
Здравствуйте, gandjustas, Вы писали:

G>Почему это? На C++ в среднем надо написать больше кода для получения того же функционала, значит больше трудозатраты, значит увеличивается делитель в формуле, а следовательно уменьшается качество.


Странные мотивы движут вами писать подобный бред.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[20]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: minorlogic 
Дата: 16.03.09 18:06
Оценка: +2 -1
Здравствуйте, gandjustas, Вы писали:

G>Такая ситуация существует и на практике. Множественные операции выделения-освобождения памяти происходят гораздо бытсрее в коде на .NET, чем в коде на C++.


Большая часть "выделения-освобождения памяти" на С++ не затрачивает никаких ресурсов, как может быть быстрее ?
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[21]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 18:09
Оценка: :)
Здравствуйте, minorlogic, Вы писали:

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


G>>Такая ситуация существует и на практике. Множественные операции выделения-освобождения памяти происходят гораздо бытсрее в коде на .NET, чем в коде на C++.


M>Большая часть "выделения-освобождения памяти" на С++ не затрачивает никаких ресурсов, как может быть быстрее ?


Да ну?
Вым наверное стоит изучить как аллокаторы и GC работают.
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: minorlogic 
Дата: 16.03.09 18:14
Оценка: -1
Здравствуйте, gandjustas, Вы писали:

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


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


G>>>Такая ситуация существует и на практике. Множественные операции выделения-освобождения памяти происходят гораздо бытсрее в коде на .NET, чем в коде на C++.


M>>Большая часть "выделения-освобождения памяти" на С++ не затрачивает никаких ресурсов, как может быть быстрее ?

G>
G>Да ну?
G>Вым наверное стоит изучить как аллокаторы и GC работают.

Вы такими фразами или шутите или демонстрируете свое невежество.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: minorlogic 
Дата: 16.03.09 18:16
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

D>>Кто сказал, что GC ГАРАНТИРУЕТ выделение памяти не более чем три раза больше чем в данный момент используется системой?

G>Этого не гарантирует даже аллокатор ОС, в принципе этого не может гарантировать никто.

Рекомендую ознакомиться с алгоритмами алокаторов более подробно .
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 16.03.09 18:17
Здравствуйте, MxKazan, Вы писали:

H>>3 раза на один вызов это иногда? Несколько последовательных вызовов сразу задирают тактовую частоту с 600 до 1700, при том, что при аналогичных действиях из нативного клиента частота поднимается максимум до 800. Тут нужно пояснить, что вся тяжелая работа (линейный скаллинг картинки) делается в нативном сервере (он запущен локально), клиентская часть лишь формирует запрос и получает ответ т.е. ее работа минимальна.


MK>Ну мало ли что там делает это один вызов.


Работа конкретно xmlrpc.net в данном случае это: сериализация двух параметров + имя метода в формат пакета XML-RPC, передача на сервер по HTTP/1.1, получение ответа и его десериализация в объектную модель.

MK>Ты не на число запусков сборщика смотри, а на общий перформанс. При этом я ничего не обещаю, просто хочу сказать, что не стоит так сильно заморачиваться почему происходит вызов GC.


Большое количество вызовов GC это прямой урон перформансу, он же не просто так дергается, он собирает чего-то. К тому же счетчик %Time In GC совсем не нулевой, да еще и на таком коротком отрезке времени (чему я был сильно удивлен). Я сейчас не говорю о каких-то цифрах, я об общем поведении.

MK>В конце концов тот же rpc-xml может это сам явно делать по каким-то своим умозаключениям. У меня вот в WPF'ной проге, окна иной раз не собираются по 10-20 минут. Можно ли быть уверенным, что моя прога в сто раз быстрее твоей?


В коде xmlrpc.net явного вызова GC.Collect нет.
Re[17]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: ameshkov 
Дата: 16.03.09 19:09
Оценка: +1
Здравствуйте, MxKazan, Вы писали:

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


COF>>Вообще, я же не против .нет, я против огульного охаивания C++ определенными дот-нетчиками

MK>Вот тут я тебя полностью понимаю. И я тоже против огульного охаивания .Net и его приравнивания к VB.

Ну раз такая пьянка пошла, я тогда против огульного охаивания VB и приравнивания его к... ну пусть к Дельфям
Re[18]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 16.03.09 19:16
Оценка:1 (1)
Здравствуйте, ameshkov, Вы писали:

A>Ну раз такая пьянка пошла, я тогда против огульного охаивания VB и приравнивания его к... ну пусть к Дельфям

Я тоже. Делфи круче. Ваше здоровье !
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: BulatZiganshin 
Дата: 16.03.09 19:42
Здравствуйте, COFF, Вы писали:

BZ>>я их и решаю на C++. когда это необходимо. а остальное пишу на хаскеле. учитывая, что >90% кода не нуждается в ассемблерной эффективности, писать всё на С++ — это всё равно что всюду таскать с собой ружьё на случай нападения медведя из ЕР


COF>Вообще, изначально вопрос стоял так — стоит ли учить C++ или C#? Я так понимаю, что все-таки C++?


я ему ответил — смотря что делать собираешься. если готов лет 5 ходить в подмастерьях и затем заниматься какими-то узконишевыми вещами — можно рискнуть
FreeArcлучший архиватор в мире
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: BulatZiganshin 
Дата: 16.03.09 19:43
Здравствуйте, NikeByNike, Вы писали:

NBN>C++ очень универсальный язык Он позволяет писать так как тебе нужно. В частности обеспечить все гарантии по чему хочешь, чем я, кстати, на днях воспользовался.


асм ещё универсальней. подумай, почему с 80-х годов им перестали пользоваться
FreeArcлучший архиватор в мире
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: BulatZiganshin 
Дата: 16.03.09 19:47
Оценка: :)
Здравствуйте, hattab, Вы писали:

H>Для избавления от фрагментации памяти примеются специальные аллокаторы/менеджеры с пулами. Например в Delphi, c версии 2006 идет FastMM:

H>

Description:
H> A fast replacement memory manager for CodeGear Delphi Win32 applications that
H> scales well under multi-threaded usage, is not prone to memory fragmentation,
H> and supports shared memory without the use of external .DLL files.


ага. и как можно устранить дефрагментацию памяти, а не просто в description это вписать — не подскажешь?
FreeArcлучший архиватор в мире
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: BulatZiganshin 
Дата: 16.03.09 19:50
Оценка:4 (3) :)
Здравствуйте, Хвост, Вы писали:

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

G>>>>Если не верите, то попробуйте написать алгоритм решения задачи: "вывести на экран все строки текстового файла, в которых более трех слов, отсортированные по алфавиту".
G>>Можете запостить сюда код решения на C++

Х>
Х>ifstream inputStream(filePath);
Х>string currentString;
Х>const regex expression("(\\w+)\\s(\\w+)\\s(\\w+)");
Х>multiset<string> matched;
Х>while(getline(inputStream, currentString))
Х>{
Х>  if (regex_search(currentString, expression))
Х>    matched.insert(currentString);
Х>}
Х>copy(matched.begin(), matched.end(), ostream_iterator<string>(cout, "\n"));
Х>


Х>немного непонятно что ты в етой задаче нашёл такого "сложноописуемого" на с++


сравни с

main = interact (unlines . sort . filter ((>3) . length . words) . lines)
FreeArcлучший архиватор в мире
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: BulatZiganshin 
Дата: 16.03.09 19:51
Оценка: +1
Здравствуйте, MxKazan, Вы писали:

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


H>>3 раза на один вызов это иногда? Несколько последовательных вызовов сразу задирают тактовую частоту с 600 до 1700, при том, что при аналогичных действиях из нативного клиента частота поднимается максимум до 800. Тут нужно пояснить, что вся тяжелая работа (линейный скаллинг картинки) делается в нативном сервере (он запущен локально), клиентская часть лишь формирует запрос и получает ответ т.е. ее работа минимальна.

MK>Ну мало ли что там делает это один вызов. Ты не на число запусков сборщика смотри, а на общий перформанс. При этом я ничего не обещаю, просто хочу сказать, что не стоит так сильно заморачиваться почему происходит вызов GC. В конце концов тот же rpc-xml может это сам явно делать по каким-то своим умозаключениям. У меня вот в WPF'ной проге, окна иной раз не собираются по 10-20 минут. Можно ли быть уверенным, что моя прога в сто раз быстрее твоей?

я не знаю насчёт net, но в ахскеле и по слузам в яве тоже двухпоколенный сборщик мусора. так он делает малую сборку через каждые 256кб выделенной памяти и никому это не мешает. так что ваозможно тут проблема только в прокладке
FreeArcлучший архиватор в мире
Re[21]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: BulatZiganshin 
Дата: 16.03.09 19:53
Здравствуйте, minorlogic, Вы писали:

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


G>>Такая ситуация существует и на практике. Множественные операции выделения-освобождения памяти происходят гораздо бытсрее в коде на .NET, чем в коде на C++.


M>Большая часть "выделения-освобождения памяти" на С++ не затрачивает никаких ресурсов, как может быть быстрее ?


потому, что malloc/free на каждый глобальный объект может быть медленней, чем последовательное выделение памяти и затем gc, который за один раз собирает весь мусор
FreeArcлучший архиватор в мире
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: BulatZiganshin 
Дата: 16.03.09 19:55
Здравствуйте, hattab, Вы писали:

H>Большое количество вызовов GC это прямой урон перформансу, он же не просто так дергается, он собирает чего-то. К тому же счетчик %Time In GC совсем не нулевой, да еще и на таком коротком отрезке времени (чему я был сильно удивлен). Я сейчас не говорю о каких-то цифрах, я об общем поведении.


а причём тут короткий отрезок? малые gc достаточно равномерно по ходу выполнения распределены, если бы большие gc с такой счастотой выделялись, то >90% времени только на них бы уходило
FreeArcлучший архиватор в мире
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 16.03.09 19:57
Здравствуйте, BulatZiganshin, Вы писали:

H>>Для избавления от фрагментации памяти примеются специальные аллокаторы/менеджеры с пулами. Например в Delphi, c версии 2006 идет FastMM:

H>>

Description:
H>> A fast replacement memory manager for CodeGear Delphi Win32 applications that
H>> scales well under multi-threaded usage, is not prone to memory fragmentation,
H>> and supports shared memory without the use of external .DLL files.


BZ>ага. и как можно устранить дефрагментацию памяти, а не просто в description это вписать — не подскажешь?


Собственно, я уже написал -- пулами. В гугле описание работы FastMM можно поискать, если интересно. В дельфийских демках есть приложение Usage Tracker позволяющее отслеживать состояние существующих пулов с оценкой эффективности использования (кстати, модуль трекинга можно подключить к своему софту, при необходимости).
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 16.03.09 20:05
Здравствуйте, BulatZiganshin, Вы писали:

H>>Большое количество вызовов GC это прямой урон перформансу, он же не просто так дергается, он собирает чего-то. К тому же счетчик %Time In GC совсем не нулевой, да еще и на таком коротком отрезке времени (чему я был сильно удивлен). Я сейчас не говорю о каких-то цифрах, я об общем поведении.


BZ>а причём тут короткий отрезок? малые gc достаточно равномерно по ходу выполнения распределены, если бы большие gc с такой счастотой выделялись, то >90% времени только на них бы уходило


Я о коротком отрезке к тому говорю, что МС описывает счетчик %Time In GC не, как среднюю величину за отрезок времени, а с момента последнего цикла GC, коих за кратковременный вызов 3 штуки.
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 20:08
Здравствуйте, minorlogic, Вы писали:

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


D>>>Кто сказал, что GC ГАРАНТИРУЕТ выделение памяти не более чем три раза больше чем в данный момент используется системой?

G>>Этого не гарантирует даже аллокатор ОС, в принципе этого не может гарантировать никто.

M>Рекомендую ознакомиться с алгоритмами алокаторов более подробно.

А с ними достаточно подробно знаком, сам писал аллокаторы на ассемблере и несколько разных для С++
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: BulatZiganshin 
Дата: 16.03.09 20:12
Здравствуйте, hattab, Вы писали:

BZ>>ага. и как можно устранить дефрагментацию памяти, а не просто в description это вписать — не подскажешь?


H>Собственно, я уже написал -- пулами.


это не гарантирует пропадания фрагментации. представь выделение миллиона 7-байтовых ячеек, освобожддение каждой второй из них и затем выделение миллиона 8-байтовых
FreeArcлучший архиватор в мире
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: BulatZiganshin 
Дата: 16.03.09 20:16
Здравствуйте, gandjustas, Вы писали:

D>>>>Кто сказал, что GC ГАРАНТИРУЕТ выделение памяти не более чем три раза больше чем в данный момент используется системой?

G>>>Этого не гарантирует даже аллокатор ОС, в принципе этого не может гарантировать никто.

M>>Рекомендую ознакомиться с алгоритмами алокаторов более подробно.

G>А с ними достаточно подробно знаком, сам писал аллокаторы на ассемблере и несколько разных для С++

вот то-то и оно, что C++ почитай описание GC. ведь это очень просто — если последний большой GC нашёл 10 мб реальных объектов, то следующий GC можно сделать когда общий объём распределённой памяти будет 20 мб или даже 11 мб. это и даёт гарантии
FreeArcлучший архиватор в мире
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 16.03.09 20:33
Здравствуйте, BulatZiganshin, Вы писали:

BZ>сравни с


BZ>main = interact (unlines . sort . filter ((>3) . length . words) . lines)


выглядит неплохо , но к сожалению в мой production это не пролезет
People write code, programming languages don't.
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 20:42
Оценка: :)
Здравствуйте, minorlogic, Вы писали:

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


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


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


G>>>>Такая ситуация существует и на практике. Множественные операции выделения-освобождения памяти происходят гораздо бытсрее в коде на .NET, чем в коде на C++.


M>>>Большая часть "выделения-освобождения памяти" на С++ не затрачивает никаких ресурсов, как может быть быстрее ?

G>>
G>>Да ну?
G>>Вым наверное стоит изучить как аллокаторы и GC работают.

M>Вы такими фразами или шутите или демонстрируете свое невежество.


Маленький ликбез:
1)Стандартный аллокатор поддерживает связный список блоков памяти, выделение нового и освобождение блока вызывает проход по списку, который имеет алгоритмическое время O(n) от количества блоков.
При постоянных выделениях-освобождениях памяти получются очень большие затраты на эту простую операцию.
2)При выделении блока идет небольшой оверхед, который зависит от реализации, 16-32 байта кажись. Исследования исходных кодов программ показывают что средний размер объекта составляет от 32 до 128 байт, при такких размерах оверхед является очень значительным.
3)Выделение памяти таким алгоритмом создет фрагментацию памяти, то есть остаются блоки невыделенной памяти малых размеров.
4)Алгоритм выделения памяти не потокобезопасный, требуется синхронизация.
5)В программах на С++ часто делают свои аллокаторы, которые выделяют память для маленькиз объектов чтобы избежать описанно выше оверхеда как по потребляемой памяти, так и по времени этой операции

Теперь о GC
6)Выделение памяти в .NET происходит очень просто — инкремент указателя. Никаких дополнительных операций не происходитю
7)Оверхед по выделяемой памяти равен 8 байтам на 32-битной платформе (может ошибаюсь немного, лень смотреть)
8)Кроме того что выделение памяти выполняется моментально, эта операция еще и потокобезопасна.
9)такое распределение памяти увелиичивает cache-locality
10)GC собирает мусор не тогжа когда захочется, а при нехватке памяти в нулевом поколении
11)Для нулевого поколения объем памяти — пара сотен КБ, этот кусок очень хорошо ложится в кеш процессора.
12)Единственный критический недостаток GC заключается в том, что он очень плохо работает когда кончается свободная физическая память, сборка мусора во втором поколении заставляет поднимать все страницы памяти из свопа и это может нереально тормозить.
13)Но даже этот недостаток можно побороть. Можно сборку мусора во втором поколении маскировать под каую-либо длительную операцию (например сохранение или открытие файла), а при расчетах использовать рецепт описанный здесь
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 16.03.09 21:12
Оценка: +1
Здравствуйте, BulatZiganshin, Вы писали:

BZ>>>ага. и как можно устранить дефрагментацию памяти, а не просто в description это вписать — не подскажешь?


H>>Собственно, я уже написал -- пулами.


BZ>это не гарантирует пропадания фрагментации. представь выделение миллиона 7-байтовых ячеек, освобожддение каждой второй из них и затем выделение миллиона 8-байтовых


Это слишком просто Пул это блок определенного размера, в котором выделение памяти происходит так же порциями определенного размера: 12, 20, 28, 36, 44 (шаг меняется с увеличением размеров на которые ориентирован пул), есть еще и отдельные пулы для средних и крупных блоков. В твоем примере будут выделяться блоки из первого пула по 12 байт, и ни какой фрагментации. Эффективность использования пулов можно контролировать тем самым трекингом, и в случае необходимости внести коррективы в алгоритм. Надо заметить, что лично мне ни разу не приходилось затачивать алгоритмы под работу менеджера памяти.
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 21:24
Здравствуйте, hattab, Вы писали:

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


BZ>>>>ага. и как можно устранить дефрагментацию памяти, а не просто в description это вписать — не подскажешь?


H>>>Собственно, я уже написал -- пулами.


BZ>>это не гарантирует пропадания фрагментации. представь выделение миллиона 7-байтовых ячеек, освобожддение каждой второй из них и затем выделение миллиона 8-байтовых


H>Это слишком просто Пул это блок определенного размера, в котором выделение памяти происходит так же порциями определенного размера: 12, 20, 28, 36, 44 (шаг меняется с увеличением размеров на которые ориентирован пул), есть еще и отдельные пулы для средних и крупных блоков. В твоем примере будут выделяться блоки из первого пула по 12 байт, и ни какой фрагментации. Эффективность использования пулов можно контролировать тем самым трекингом, и в случае необходимости внести коррективы в алгоритм. Надо заметить, что лично мне ни разу не приходилось затачивать алгоритмы под работу менеджера памяти.


Только общее увеличение потребления памяти получим.
А кто-то еще ругается что .NET много памяти жрет.
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 16.03.09 21:33
Оценка: +2 -1
Здравствуйте, gandjustas, Вы писали:

H>>Это слишком просто Пул это блок определенного размера, в котором выделение памяти происходит так же порциями определенного размера: 12, 20, 28, 36, 44 (шаг меняется с увеличением размеров на которые ориентирован пул), есть еще и отдельные пулы для средних и крупных блоков. В твоем примере будут выделяться блоки из первого пула по 12 байт, и ни какой фрагментации. Эффективность использования пулов можно контролировать тем самым трекингом, и в случае необходимости внести коррективы в алгоритм. Надо заметить, что лично мне ни разу не приходилось затачивать алгоритмы под работу менеджера памяти.


G>Только общее увеличение потребления памяти получим.

G>А кто-то еще ругается что .NET много памяти жрет.

Конечно получим, куда же мы денемся. Только оверхед сильно меньше, чем у .Net . Это я про общий случай, и по реальным приложениям это видно.
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 16.03.09 21:48
Оценка: +1
Здравствуйте, BulatZiganshin, Вы писали:

NBN>>C++ очень универсальный язык Он позволяет писать так как тебе нужно. В частности обеспечить все гарантии по чему хочешь, чем я, кстати, на днях воспользовался.


BZ>асм ещё универсальней. подумай, почему с 80-х годов им перестали пользоваться


Потому что есть не менее эффективный С++, а что?
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 16.03.09 21:51
Здравствуйте, BulatZiganshin, Вы писали:

M>>Большая часть "выделения-освобождения памяти" на С++ не затрачивает никаких ресурсов, как может быть быстрее ?


BZ>потому, что malloc/free на каждый глобальный объект может быть медленней, чем последовательное выделение памяти и затем gc, который за один раз собирает весь мусор


В сумме — может быть и быстрее, у GC есть свои плюсы
Однако сам должен понимать, что управляемых аллокаторов есть свои многочисленные плюсы, в том числе равномерность работы
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: BulatZiganshin 
Дата: 16.03.09 21:59
Здравствуйте, NikeByNike, Вы писали:

NBN>>>C++ очень универсальный язык Он позволяет писать так как тебе нужно. В частности обеспечить все гарантии по чему хочешь, чем я, кстати, на днях воспользовался.


BZ>>асм ещё универсальней. подумай, почему с 80-х годов им перестали пользоваться


NBN>Потому что есть не менее эффективный С++, а что?


не было в 80-х годах ни C++, ни эффективных оптимизирующих компиляторов. тем не менее полчему-то люди обходились пессимизирующими С-компляторами. садись, опять двойка
FreeArcлучший архиватор в мире
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 16.03.09 22:00
Оценка: +1
Здравствуйте, BulatZiganshin, Вы писали:

BZ>вот то-то и оно, что C++ почитай описание GC. ведь это очень просто — если последний большой GC нашёл 10 мб реальных объектов, то следующий GC можно сделать когда общий объём распределённой памяти будет 20 мб или даже 11 мб. это и даёт гарантии


GC не используется в С++ только по причине отсутствия реальной необходимости в нем.
Если сильно приспичит — ничего не мешает использовать GC и в C++, это даже имеет смысл в движках активно работающих с графами.
Я (и не только я) когда-то писал
Автор: NikeByNike
Дата: 19.06.08
свой GC, но забросил — он просто недостаточно востребован.
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 16.03.09 22:11
Здравствуйте, BulatZiganshin, Вы писали:

NBN>>Потому что есть не менее эффективный С++, а что?


BZ>не было в 80-х годах ни C++, ни эффективных оптимизирующих компиляторов. тем не менее полчему-то люди обходились пессимизирующими С-компляторами. садись, опять двойка


Ты сам ответил совсем неполно, а следовательно не верно
Re[28]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 22:23
Здравствуйте, hattab, Вы писали:

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


H>>>Это слишком просто Пул это блок определенного размера, в котором выделение памяти происходит так же порциями определенного размера: 12, 20, 28, 36, 44 (шаг меняется с увеличением размеров на которые ориентирован пул), есть еще и отдельные пулы для средних и крупных блоков. В твоем примере будут выделяться блоки из первого пула по 12 байт, и ни какой фрагментации. Эффективность использования пулов можно контролировать тем самым трекингом, и в случае необходимости внести коррективы в алгоритм. Надо заметить, что лично мне ни разу не приходилось затачивать алгоритмы под работу менеджера памяти.


G>>Только общее увеличение потребления памяти получим.

G>>А кто-то еще ругается что .NET много памяти жрет.

H>Конечно получим, куда же мы денемся. Только оверхед сильно меньше, чем у .Net . Это я про общий случай, и по реальным приложениям это видно.

И по какой причине он станет "сильно меньше"?
Re[29]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 16.03.09 22:39
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

H>>>>Это слишком просто Пул это блок определенного размера, в котором выделение памяти происходит так же порциями определенного размера: 12, 20, 28, 36, 44 (шаг меняется с увеличением размеров на которые ориентирован пул), есть еще и отдельные пулы для средних и крупных блоков. В твоем примере будут выделяться блоки из первого пула по 12 байт, и ни какой фрагментации. Эффективность использования пулов можно контролировать тем самым трекингом, и в случае необходимости внести коррективы в алгоритм. Надо заметить, что лично мне ни разу не приходилось затачивать алгоритмы под работу менеджера памяти.


G>>>Только общее увеличение потребления памяти получим.

G>>>А кто-то еще ругается что .NET много памяти жрет.

H>>Конечно получим, куда же мы денемся. Только оверхед сильно меньше, чем у .Net . Это я про общий случай, и по реальным приложениям это видно.

G>И по какой причине он станет "сильно меньше"?

Ты сейчас о чем говоришь, об общих случаях или о той синтетике с 7-8 байтовыми ячейками? Если о синтетике, то там выделение нафиг не нужно, достаточно динамического массива с размером ячейки в 8 байт. Получим при этом оверхед в 1 байт на ячейку. Если же ты об общих случаях, то тут существующий софт тому доказательство.
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.03.09 22:50
Здравствуйте, hattab, Вы писали:

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


H>>>>>Это слишком просто Пул это блок определенного размера, в котором выделение памяти происходит так же порциями определенного размера: 12, 20, 28, 36, 44 (шаг меняется с увеличением размеров на которые ориентирован пул), есть еще и отдельные пулы для средних и крупных блоков. В твоем примере будут выделяться блоки из первого пула по 12 байт, и ни какой фрагментации. Эффективность использования пулов можно контролировать тем самым трекингом, и в случае необходимости внести коррективы в алгоритм. Надо заметить, что лично мне ни разу не приходилось затачивать алгоритмы под работу менеджера памяти.


G>>>>Только общее увеличение потребления памяти получим.

G>>>>А кто-то еще ругается что .NET много памяти жрет.

H>>>Конечно получим, куда же мы денемся. Только оверхед сильно меньше, чем у .Net . Это я про общий случай, и по реальным приложениям это видно.

G>>И по какой причине он станет "сильно меньше"?

H>Ты сейчас о чем говоришь, об общих случаях или о той синтетике с 7-8 байтовыми ячейками? Если о синтетике, то там выделение нафиг не нужно, достаточно динамического массива с размером ячейки в 8 байт. Получим при этом оверхед в 1 байт на ячейку. Если же ты об общих случаях, то тут существующий софт тому доказательство.


Почитай как работает выделение памяти в .NET. Там нету никакого оверхеда.
Оверхед может возникнуть из-за того что создается больше обеъктов, но это уже зависит от программы, а не от аллокатора.
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: minorlogic 
Дата: 17.03.09 04:59
Понятно , значит незнание.

Задумайтесь почему программы на С++ быстрее с таким плохим аллокатором?
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: minorlogic 
Дата: 17.03.09 05:05
Оценка: -1
Здравствуйте, BulatZiganshin, Вы писали:

BZ>потому, что malloc/free на каждый глобальный объект может быть медленней, чем последовательное выделение памяти и затем gc, который за один раз собирает весь мусор


Даю подсказку
int a = 0;
int b = 3 + a;

Очень память дефрагментирует ? затратит линейное время на на выделение памяти и т.п. ?
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[31]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 17.03.09 06:23
Здравствуйте, gandjustas, Вы писали:

H>>Ты сейчас о чем говоришь, об общих случаях или о той синтетике с 7-8 байтовыми ячейками? Если о синтетике, то там выделение нафиг не нужно, достаточно динамического массива с размером ячейки в 8 байт. Получим при этом оверхед в 1 байт на ячейку. Если же ты об общих случаях, то тут существующий софт тому доказательство.


G>Почитай как работает выделение памяти в .NET. Там нету никакого оверхеда.


Рихтер:

У каждого объекта есть пара таких полей: указатель на
таблицу методов и SyncBlocklndex. В 32-разрядной системе для каждого из них
требуется 32 бита, что увеличивает размер каждого объекта на 8 байтов, а в
64-разрядной системе каждое поле занимает 64 бита, добавляя к каждому объекту
по 16 байт


Это оверхед не аллокатора, а организации данных. Но тем не менее.

G>Оверхед может возникнуть из-за того что создается больше обеъктов, но это уже зависит от программы, а не от аллокатора.


На практике мы видим, что .Net софт потребляет больше нежели нативный со всеми его пулами. Это позволяет говорить о том, что вся инфраструктура управления памятью в .Net имеет больший оверхед нежели в нативном софте.
Re[11]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: alsemmhttp://sourceforge.net/projects/ferry
Дата: 17.03.09 06:29
Здравствуйте, NikeByNike, Вы писали:

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


NBN>>>Ага, а в задачу входит создание красивого, быстрого и кроссплатформенного кода и софта — это решаемо _только_ на С++. Даже ущербный С с этим не спрвится.

A>>Любая встравиваемая real-life JVM — это только C.
A>>Телефонный софт (OS, стандартные приложения) — только C.

NBN>Это далеко не так, хотя этой нечисти там действительно хватает

"Далеко не так" что?
Что JVM написан на C? А на чем их еще писать, если их надо запихивать черте куда, где вменяемого C++ компилятора и не стояло?
Телефонный софт — это как правило море legacy кода, древнего как, даже и не знаю что
Symbian — формально там конечно есть C++, но какой-то он на вид своеобразный.

Алексей
Re[32]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 17.03.09 06:50
Здравствуйте, hattab, Вы писали:

H>Рихтер:

H>У каждого объекта есть пара таких полей: указатель на
H>таблицу методов и SyncBlocklndex. В 32-разрядной системе для каждого из них
H>требуется 32 бита, что увеличивает размер каждого объекта на 8 байтов, а в
H>64-разрядной системе каждое поле занимает 64 бита, добавляя к каждому объекту
H>по 16 байт

H>Это оверхед не аллокатора, а организации данных. Но тем не менее.

Ну без указателя на таблицу виртуальных методов врядли какой ООП язык обходится и в той же Делфи, если мне не изменяет память, функция New неявно по смещению сохраняет еще и объем выделенной памяти.
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[33]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 17.03.09 06:58
Здравствуйте, MxKazan, Вы писали:

H>>Рихтер:

H>>У каждого объекта есть пара таких полей: указатель на
H>>таблицу методов и SyncBlocklndex. В 32-разрядной системе для каждого из них
H>>требуется 32 бита, что увеличивает размер каждого объекта на 8 байтов, а в
H>>64-разрядной системе каждое поле занимает 64 бита, добавляя к каждому объекту
H>>по 16 байт

H>>Это оверхед не аллокатора, а организации данных. Но тем не менее.

MK>Ну без указателя на таблицу виртуальных методов врядли какой ООП язык обходится и в той же Делфи, если мне не изменяет память, функция New неявно по смещению сохраняет еще и объем выделенной памяти.

Я ведь не сказал, что в Delphi нет оверхеда Это была фраза на отсутствие оверхеда в .Net. В Delphi еще можно вспомнить о выравнивании, пусть и отключаемом, которое тоже увеличивает оверхед но положительно влияет на производительность. Но не смотря на все это, мы имеем то о чем я уже написал
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: alsemmhttp://sourceforge.net/projects/ferry
Дата: 17.03.09 08:33
Оценка: +2
Здравствуйте, gandjustas, Вы писали:

G>Маленький ликбез:

G>1)Стандартный аллокатор поддерживает связный список блоков памяти, выделение нового и освобождение блока вызывает проход по списку, который имеет алгоритмическое время O(n) от количества блоков.
G>При постоянных выделениях-освобождениях памяти получются очень большие затраты на эту простую операцию.
G>2)При выделении блока идет небольшой оверхед, который зависит от реализации, 16-32 байта кажись. Исследования исходных кодов программ показывают что средний размер объекта составляет от 32 до 128 байт, при такких размерах оверхед является очень значительным.
G>3)Выделение памяти таким алгоритмом создет фрагментацию памяти, то есть остаются блоки невыделенной памяти малых размеров.
G>4)Алгоритм выделения памяти не потокобезопасный, требуется синхронизация.
G>5)В программах на С++ часто делают свои аллокаторы, которые выделяют память для маленькиз объектов чтобы избежать описанно выше оверхеда как по потребляемой памяти, так и по времени этой операции
Вот именно. В частности аллкоаторы для блоков фиксировааной длины. Я не знаю, как сделать оверхед в таких аллокаторах нулевым, знаю только как сделать, чтобы оверхед был 1бит на блок + ~30байт на страницу. Если условия задачи позволяют, можно еще и компактирование страниц в таких аллокаторах сделать, т.е. перекидывать содержимое блоков между ними так, чтобы минимизировать дефрагментацию и аллокатор держал свободными блоков не более чем на одну страницу.

G>Теперь о GC

G>6)Выделение памяти в .NET происходит очень просто — инкремент указателя. Никаких дополнительных операций не происходитю
Это, если память есть свободная.
G>7)Оверхед по выделяемой памяти равен 8 байтам на 32-битной платформе (может ошибаюсь немного, лень смотреть)
G>8)Кроме того что выделение памяти выполняется моментально, эта операция еще и потокобезопасна.
Конечно потокобезопасно, еще бы. Только потокобезопасность — не бесплатная.

G>9)такое распределение памяти увелиичивает cache-locality

G>10)GC собирает мусор не тогжа когда захочется, а при нехватке памяти в нулевом поколении
G>11)Для нулевого поколения объем памяти — пара сотен КБ, этот кусок очень хорошо ложится в кеш процессора.
G>12)Единственный критический недостаток GC заключается в том, что он очень плохо работает когда кончается свободная физическая память, сборка мусора во втором поколении заставляет поднимать все страницы памяти из свопа и это может нереально тормозить.
Реальный недостаток GC — это его непредсказуемость. Эта сущность не управлется из клиентского кода никак. Она может проснуться когда посчитает нужным. Если бы GC давал равномерную нагрузку на CPU, то никто бы от него не плевался. У идеального GC не должно быть "всплесков" и "провалов" активности, он должен просыпаться через фиксированные промежутки времени и отрабатывать каждый раз фиксированный квант времени, а не "залипать" разгребая образовавшиеся завалы.

G>13)Но даже этот недостаток можно побороть. Можно сборку мусора во втором поколении маскировать под каую-либо длительную операцию (например сохранение или открытие файла), а при расчетах использовать рецепт описанный здесь

Это все ужимки и бег на месте, навроде java.lang.System.gc(), который ничего не гарантирует.

К сожалению, имидж управляемых сред был сильно подпорчен первыми версиями Java. Так что вы тут хоть 1000 аргументов в пользу C# приведите, стереотипы забороть очень тяжело.

Еще одна проблема C# — низкий порого вхождения для новичков. Собственно это не проблема — это вроде как его преимущество, теоретически.
На C++ писать надо аккуратно, чтобы хотя бы как-то работало. В управляемой среде писать дерьмовый код проще — утечки памяти (не все знают что такое WeakReference и зачем они нужны) маскируются мусоросборщиком, никих тебе AV и прочих мерзостей которые заканчиваются crash dump.

Алексей
Re[21]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 17.03.09 08:53
Оценка: +1
Здравствуйте, BulatZiganshin, Вы писали:

BZ>в языках без gc расход памяти меньше в краткосрочном плане. а вот когда память выделяется, возвращается, снова выделяется — ты получаешь фрагментированную память и ничего с ней не поделаешь. поэтому для таких программ GC выгодней — есть хоть гарантии что расход памяти будет не более чем в три раза выше, нежели реальное использование. в c++ гарантий никаких

Написал я как то монитор выделяемой произвольным процессом памяти. Дабы значицца, посмотреть что там да как происходит в закулисье.
И что я только не гонял сей прогой, но пресловутой фрагментации увидеть так и не удалось.
HeapAlloc, который уже давным давно используется вместо говноаллокатора ранних версий CRT, отлично справлялся сам.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[28]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 17.03.09 08:53
Оценка: +1 :))
Здравствуйте, NikeByNike, Вы писали:

NBN>На яве и шарпе нельзя написать качественный продукт удовлетворяющий требованиям

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

ЗЫ: Щас конечно вылезет кто нить из святой кучки апологетов и начнет кричать что у языка Х возможности безграничны, а ограничения несущественны.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 17.03.09 08:53
Здравствуйте, BulatZiganshin, Вы писали:

BZ>это не гарантирует пропадания фрагментации. представь выделение миллиона 7-байтовых ячеек, освобожддение каждой второй из них и затем выделение миллиона 8-байтовых

Напиши сам себе пример и выведи на карту расположение фактически выделенных тебе ячеек.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: alvohttp://www.alvosoft.com/itlife
Дата: 17.03.09 08:59
Здравствуйте, hattab, Вы писали:

...
H>Большое количество вызовов GC это прямой урон перформансу, он же не просто так дергается, он собирает чего-то. К тому же счетчик %Time In GC совсем не нулевой, да еще и на таком коротком отрезке времени (чему я был сильно удивлен). Я сейчас не говорю о каких-то цифрах, я об общем поведении.

MK>>В конце концов тот же rpc-xml может это сам явно делать по каким-то своим умозаключениям. У меня вот в WPF'ной проге, окна иной раз не собираются по 10-20 минут. Можно ли быть уверенным, что моя прога в сто раз быстрее твоей?


H>В коде xmlrpc.net явного вызова GC.Collect нет.


Сборщики бывают нескольких типов. Может у вас параллельный сборщик работает, который в Idle time просто собирает статистику для настоящей сборки мусора, которая, благодаря такой предварительной подготовке работает очень быстро.

ЗЫ: А может и сами компоненты написаны неряшливо...
... << RSDN@Home 1.2.0 alpha 4 rev. 1089>>
Re[12]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 17.03.09 09:38
Здравствуйте, alsemm, Вы писали:

A>Что JVM написан на C? А на чем их еще писать, если их надо запихивать черте куда, где вменяемого C++ компилятора и не стояло?

A>Телефонный софт — это как правило море legacy кода, древнего как, даже и не знаю что
A>Symbian — формально там конечно есть C++, но какой-то он на вид своеобразный.

Я писал под брю и его потомков — WIZE и PDK, там было много старого кода на С и не меньше нового на С++, в частности вся гуйня.
Re[29]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 17.03.09 09:47
Здравствуйте, CreatorCray, Вы писали:

NBN>>На яве и шарпе нельзя написать качественный продукт удовлетворяющий требованиям

CC>Зависит от требований.
Нашим требованиям — создать лучший продукт. Я бы с радостью на шарпе писал, но он, как и ява недостаточно кроссплатформенны и слишком тормозявы на девайсах, для нашей достаточно сложной программы. Каждого из этих факторов достаточно, чтобы от них отказаться в пользу С++.
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: sergey2b 
Дата: 17.03.09 09:55
Здравствуйте, CreatorCray, Вы писали:

CC>Написал я как то монитор выделяемой произвольным процессом памяти. Дабы значицца, посмотреть что там да как происходит в закулисье.

CC>И что я только не гонял сей прогой, но пресловутой фрагментации увидеть так и не удалось.
CC>HeapAlloc, который уже давным давно используется вместо говноаллокатора ранних версий CRT, отлично справлялся сам.

Скажите пожалуйста на каких компиляторах вы тестировали и если это VS начиная с какой версии компилятор/crt нет проблем с фрагментацией.

Спасибо
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 17.03.09 10:05
Оценка:2 (1)
Здравствуйте, sergey2b, Вы писали:

S>Скажите пожалуйста на каких компиляторах вы тестировали и если это VS начиная с какой версии компилятор/crt нет проблем с фрагментацией.


У шестёрки в первых версиях был галимый аллокатор, точно помню...
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 17.03.09 10:35
Оценка: +2
Здравствуйте, NikeByNike, Вы писали:

NBN>>>На яве и шарпе нельзя написать качественный продукт удовлетворяющий требованиям

CC>>Зависит от требований.
NBN>Нашим требованиям — создать лучший продукт. Я бы с радостью на шарпе писал, но он, как и ява недостаточно кроссплатформенны и слишком тормозявы на девайсах, для нашей достаточно сложной программы. Каждого из этих факторов достаточно, чтобы от них отказаться в пользу С++.
Это все понятно. Просто разные проекты — разные требования.
Есть такие проекты с такими требованиями (чаще это не коробочный продукт) в которых С# отлично подходит.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 17.03.09 10:35
Оценка:2 (1)
Здравствуйте, sergey2b, Вы писали:

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


CC>>Написал я как то монитор выделяемой произвольным процессом памяти. Дабы значицца, посмотреть что там да как происходит в закулисье.

CC>>И что я только не гонял сей прогой, но пресловутой фрагментации увидеть так и не удалось.
CC>>HeapAlloc, который уже давным давно используется вместо говноаллокатора ранних версий CRT, отлично справлялся сам.

S>Скажите пожалуйста на каких компиляторах вы тестировали и если это VS начиная с какой версии компилятор/crt нет проблем с фрагментацией.

Сам компилятор не имеет никакого отношения к тому, как в CRT реализованы операции выделения памяти.
Без понятия каким компилером собирались те проги, которые я проверял.

Но уже в MSVC 7.1 в CRT следующее:

int __cdecl _heap_init (int mtflag)
{
    ...
    __active_heap = __heap_select();
    ...
}

int __cdecl __heap_select(void)
{
...
  if ( (_osplatform == VER_PLATFORM_WIN32_NT) && (_winmajor >= 5) )
    return __SYSTEM_HEAP;
...
}

void * __cdecl _heap_alloc_base (size_t size)
{
...
    if ( __active_heap == __V6_HEAP )
    {...}
    else if ( __active_heap == __V5_HEAP )
    {
        ...
        return HeapAlloc( _crtheap, 0, size );
    }
    
  return HeapAlloc(_crtheap, 0, size);
}


Т.е. вся аллокация в ОС начиная от W2k производится через HeapAlloc, который является WinAPI функцией и к С/С++ уже никакого отношения не имеет.
А судя по картам аллокаций, которые я наблюдал на реальных приложениях фрагментации не наблюдается.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[32]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 17.03.09 10:36
Здравствуйте, hattab, Вы писали:

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


H>>>Ты сейчас о чем говоришь, об общих случаях или о той синтетике с 7-8 байтовыми ячейками? Если о синтетике, то там выделение нафиг не нужно, достаточно динамического массива с размером ячейки в 8 байт. Получим при этом оверхед в 1 байт на ячейку. Если же ты об общих случаях, то тут существующий софт тому доказательство.


G>>Почитай как работает выделение памяти в .NET. Там нету никакого оверхеда.


H>Рихтер:

H>

У каждого объекта есть пара таких полей: указатель на
H>таблицу методов и SyncBlocklndex. В 32-разрядной системе для каждого из них
H>требуется 32 бита, что увеличивает размер каждого объекта на 8 байтов, а в
H>64-разрядной системе каждое поле занимает 64 бита, добавляя к каждому объекту
H>по 16 байт


H>Это оверхед не аллокатора, а организации данных. Но тем не менее.

указатель на таблицу виртуальных методов есть почти всегда и в неуправляемых языках, так что реальный оверхед создает SyncBlockIndex, который меньше оверхеда стандартного аллокатора C++.

G>>Оверхед может возникнуть из-за того что создается больше обеъктов, но это уже зависит от программы, а не от аллокатора.

H>На практике мы видим, что .Net софт потребляет больше нежели нативный со всеми его пулами. Это позволяет говорить о том, что вся инфраструктура управления памятью в .Net имеет больший оверхед нежели в нативном софте.
Большее потребление памяти вовсе не означает оверхеда аллокатора или какой-то-там "ифнраструктуры управления памятью".

Это больше зависит от объектной модели. В .NET, как и в java, как и в Delphi(!) все обеъекты создаются в куче, причем учитывая неопределенное время жизни объектов в упрвыляемых языках в среднем объектов получается больше примерно на размер двух поколений GC (это не так много).
В C++ большая часть короткоживущих объектов создается на стеке.
Кроме того для работы аллокаторы .NET необходимы непрерывные куски памяти, а это требует резервирования и выделегния большего объема оперативной памяти, чем реально испольхуется программой (это к тому что не надо верить цифирке в Task Manager).
Причем все эти особенности выделения паяти в .NET только ускоряют работу.

Кроме всего прочего фреймворк постоянно использует возможности, которых просто нету в C++ (метаинформация, культуры и прочее), что потребляет дополнительную память.

Все это создает статическую прибавку к потребляемой памяти и практически не влияет на быстродействие.

Черезмерное потребление памяти программами на .NET — исключительно вина разработчиков.
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: sergey2b 
Дата: 17.03.09 10:50
Здравствуйте, NikeByNike, Вы писали:

S>>Скажите пожалуйста на каких компиляторах вы тестировали и если это VS начиная с какой версии компилятор/crt нет проблем с фрагментацией.


NBN>У шестёрки в первых версиях был галимый аллокатор, точно помню...


Большое спасибо за ответ.

Может вы вкурсе, они его исправили в sp5 or sp6 или нет?
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 17.03.09 11:01
Оценка:1 (1)
Здравствуйте, alsemm, Вы писали:

G>>Теперь о GC

G>>6)Выделение памяти в .NET происходит очень просто — инкремент указателя. Никаких дополнительных операций не происходитю
A>Это, если память есть свободная.
Это всегда так. память перед инкрементом свободная.

G>>8)Кроме того что выделение памяти выполняется моментально, эта операция еще и потокобезопасна.

A>Конечно потокобезопасно, еще бы. Только потокобезопасность — не бесплатная.
Любая потокобезопасноть небесплатная, но пока быстрее intelokcedAdd не существует.

G>>9)такое распределение памяти увелиичивает cache-locality

G>>10)GC собирает мусор не тогжа когда захочется, а при нехватке памяти в нулевом поколении
G>>11)Для нулевого поколения объем памяти — пара сотен КБ, этот кусок очень хорошо ложится в кеш процессора.
G>>12)Единственный критический недостаток GC заключается в том, что он очень плохо работает когда кончается свободная физическая память, сборка мусора во втором поколении заставляет поднимать все страницы памяти из свопа и это может нереально тормозить.
A>Реальный недостаток GC — это его непредсказуемость. Эта сущность не управлется из клиентского кода никак.
Управляется: есть классы GC и GCSettings. только практика показывает что чем больше лезешь в ручное управление GC, тем хуже все работает.

A>Она может проснуться когда посчитает нужным.

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

A>Если бы GC давал равномерную нагрузку на CPU, то никто бы от него не плевался.

Ага, его бы просто не использовали.
Сейчас GC такой что при правльном использовании можно добиться высокого быстродействия, выше чем со всеми стандартными аллокаторами для unmanaged языков, причем без каких-либо трудозатрат. А при неправльном использовании можно просадить производительность в разы.

A>У идеального GC не должно быть "всплесков" и "провалов" активности, он должен просыпаться через фиксированные промежутки времени и отрабатывать каждый раз фиксированный квант времени, а не "залипать" разгребая образовавшиеся завалы.

Странные у вас представления о CG. Кстати описанный вами GC вполне можно сделать на C++, почему до сих пор не применяют?

G>>13)Но даже этот недостаток можно побороть. Можно сборку мусора во втором поколении маскировать под каую-либо длительную операцию (например сохранение или открытие файла), а при расчетах использовать рецепт описанный здесь

A>Это все ужимки и бег на месте, навроде java.lang.System.gc(), который ничего не гарантирует.
Ну тогда единственный правльный путь — писать на ассемблере и выделять память ручками.

A>К сожалению, имидж управляемых сред был сильно подпорчен первыми версиями Java. Так что вы тут хоть 1000 аргументов в пользу C# приведите, стереотипы забороть очень тяжело.

Меня стериотипы не итересуют уже давно. Я тут факты привел.

A>Еще одна проблема C# — низкий порого вхождения для новичков. Собственно это не проблема — это вроде как его преимущество, теоретически.

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

A>На C++ писать надо аккуратно, чтобы хотя бы как-то работало. В управляемой среде писать дерьмовый код проще — утечки памяти (не все знают что такое WeakReference и зачем они нужны) маскируются мусоросборщиком, никих тебе AV и прочих мерзостей которые заканчиваются crash dump.

+1
Re[34]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 17.03.09 11:05
Здравствуйте, hattab, Вы писали:

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


H>>>Рихтер:

H>>>У каждого объекта есть пара таких полей: указатель на
H>>>таблицу методов и SyncBlocklndex. В 32-разрядной системе для каждого из них
H>>>требуется 32 бита, что увеличивает размер каждого объекта на 8 байтов, а в
H>>>64-разрядной системе каждое поле занимает 64 бита, добавляя к каждому объекту
H>>>по 16 байт

H>>>Это оверхед не аллокатора, а организации данных. Но тем не менее.

MK>>Ну без указателя на таблицу виртуальных методов врядли какой ООП язык обходится и в той же Делфи, если мне не изменяет память, функция New неявно по смещению сохраняет еще и объем выделенной памяти.

H>Я ведь не сказал, что в Delphi нет оверхеда Это была фраза на отсутствие оверхеда в .Net. В Delphi еще можно вспомнить о выравнивании, пусть и отключаемом, которое тоже увеличивает оверхед но положительно влияет на производительность. Но не смотря на все это, мы имеем то о чем я уже написал

В Delphi вообще много чего есть, например аналог сборшика мусора, который работает для строк и динамических массивов.
Причем эта фигня глючит при интеропе с DLL.
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 17.03.09 11:07
Здравствуйте, minorlogic, Вы писали:

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


BZ>>потому, что malloc/free на каждый глобальный объект может быть медленней, чем последовательное выделение памяти и затем gc, который за один раз собирает весь мусор


M>Даю подсказку

M>int a = 0;
M>int b = 3 + a;

M>Очень память дефрагментирует ? затратит линейное время на на выделение памяти и т.п. ?


напишите этот же код на Java, .NET, причем буква в букву. работать везде одинаково будет.

У вас как в древней присказке "слышу звон, да не знаю где он".
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 17.03.09 11:07
Здравствуйте, sergey2b, Вы писали:

NBN>>У шестёрки в первых версиях был галимый аллокатор, точно помню...


S>Большое спасибо за ответ.


S>Может вы вкурсе, они его исправили в sp5 or sp6 или нет?


Да. В первых версиях деаллокация работала с линейной скоростью, а к SP5 — уже нет.
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 17.03.09 11:10
Здравствуйте, minorlogic, Вы писали:

M>Понятно , значит незнание.


M>Задумайтесь почему программы на С++ быстрее с таким плохим аллокатором?


С чего вы взяли что программы на C++ всегда быстрее работают?
Я например видел много обратных примеров.
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: sergey2b 
Дата: 17.03.09 11:19
Здравствуйте, CreatorCray, Вы писали:

CC>Т.е. вся аллокация в ОС начиная от W2k производится через HeapAlloc, который является WinAPI функцией и к С/С++ уже никакого отношения не имеет.

CC>А судя по картам аллокаций, которые я наблюдал на реальных приложениях фрагментации не наблюдается.

Большое спасибо за ваш ответ.

Сейчас проверил в vc6 sp5

void * __cdecl _heap_alloc_base (size_t size)
...
if (size == 0)
size = 1;
size = (size + BYTES_PER_PARA — 1) & ~(BYTES_PER_PARA — 1);
return HeapAlloc(_crtheap, 0, size);
}
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 17.03.09 11:48
Оценка: +1
Здравствуйте, sergey2b, Вы писали:

NBN>>У шестёрки в первых версиях был галимый аллокатор, точно помню...

S>Большое спасибо за ответ.
S>Может вы вкурсе, они его исправили в sp5 or sp6 или нет?

Дык свой напиши на HeapAlloc, если сомневаешься в качестве стандартных.
Перекрой глобальные new/delete если на С++
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 17.03.09 11:53
Здравствуйте, alvo, Вы писали:

MK>>>В конце концов тот же rpc-xml может это сам явно делать по каким-то своим умозаключениям. У меня вот в WPF'ной проге, окна иной раз не собираются по 10-20 минут. Можно ли быть уверенным, что моя прога в сто раз быстрее твоей?


H>>В коде xmlrpc.net явного вызова GC.Collect нет.


A>Сборщики бывают нескольких типов. Может у вас параллельный сборщик работает, который в Idle time просто собирает статистику для настоящей сборки мусора, которая, благодаря такой предварительной подготовке работает очень быстро.


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

A>ЗЫ: А может и сами компоненты написаны неряшливо...


Все может быть. Код, как по мне, вообще то неряшлив... Но есть другой пример: запускаем Creative Docs .Net (наверняка подойдет и Paint.Net) и начинаем его мониторить водя мышкой над панелями инструментов. В результате многократные вызовы GC и не нулевой %Time in GC. Важно понимать: я ни в коем разе не хочу этим примером показать какую-то кривизну GC, это просто еще один пример.
Re[33]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 17.03.09 11:54
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

H>>Рихтер:

H>>

У каждого объекта есть пара таких полей: указатель на
H>>таблицу методов и SyncBlocklndex. В 32-разрядной системе для каждого из них
H>>требуется 32 бита, что увеличивает размер каждого объекта на 8 байтов, а в
H>>64-разрядной системе каждое поле занимает 64 бита, добавляя к каждому объекту
H>>по 16 байт


H>>Это оверхед не аллокатора, а организации данных. Но тем не менее.

G>указатель на таблицу виртуальных методов есть почти всегда и в неуправляемых языках, так что реальный оверхед создает SyncBlockIndex, который меньше оверхеда стандартного аллокатора C++.

Аллокатору нужны списки блоков? Нужны. Нужны размеры блоков? Нужны. Эти вещи, используемые любым аллокатором, считать оверхедом нельзя. Считать оверхедом можно большее, нежели было запрошено, выделение памяти, что присутствует в приведенном в качестве примера дельфийском менеджере (но учитывая эффективность пулов, этот оверхед обсуждать смешно).

G>>>Оверхед может возникнуть из-за того что создается больше обеъктов, но это уже зависит от программы, а не от аллокатора.

H>>На практике мы видим, что .Net софт потребляет больше нежели нативный со всеми его пулами. Это позволяет говорить о том, что вся инфраструктура управления памятью в .Net имеет больший оверхед нежели в нативном софте.
G>Большее потребление памяти вовсе не означает оверхеда аллокатора или какой-то-там "ифнраструктуры управления памятью".

Я и не говорю про оверхед аллокатора, я конкретно указал о каком оверхеде идет речь.

G>Это больше зависит от объектной модели. В .NET, как и в java, как и в Delphi(!) все обеъекты создаются в куче, причем учитывая неопределенное время жизни объектов в упрвыляемых языках в среднем объектов получается больше примерно на размер двух поколений GC (это не так много).


Ok. Можем назвать это оверхедом объектной модели .Net, только сути это не изменит -- кушать все равно хочется сильнее К слову сказать, в Delphi я могу, при желании, создать объект и на стеке, только чаще всего необходимости в этом нет.

G>В C++ большая часть короткоживущих объектов создается на стеке.

G>Кроме того для работы аллокаторы .NET необходимы непрерывные куски памяти, а это требует резервирования и выделегния большего объема оперативной памяти, чем реально испольхуется программой (это к тому что не надо верить цифирке в Task Manager).
G>Причем все эти особенности выделения паяти в .NET только ускоряют работу.

Во-первых, я не мониторю TaskManager'ом, а использую ProcessExplorer (там цифирки более другие ) Во-вторых, в Delphi менеджер памяти тоже предварительно создает пулы (в текущей версии в количестве 55(!) штук. Общая эффективность использования пулов для 12000 различных объектов составляет ~95% (это показания трекинга)), но при этом перерасхода памяти не наблюдается. В-третьих, под задачу можно аллокатор поменять (существуют и комммерческие и бесплатные решения).

G>Черезмерное потребление памяти программами на .NET — исключительно вина разработчиков.


Есть .Net софтинка: одна форма с кнопкой и картинкой (PictureBox). При нажатии на кнопку происходит вызов XML-RPC сервера и получение от него картинки 320x200x24 в формате BMP. После запуска клиент занимает 11.1Mb памяти. С каждым нажатием на кнопку потребление памяти растет. Постепенно вырастает до 21.2Mb, и на этой цифре останавливается (ну с мелкими мотыляниями туда-сюда). В аналогичном нативном клиенте потребление не превышает 5Mb. В цем тут вина .Net разработчика (там кода -- одна строка)?
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 17.03.09 11:54
Здравствуйте, gandjustas, Вы писали:

H>>>>Это оверхед не аллокатора, а организации данных. Но тем не менее.

MK>>>Ну без указателя на таблицу виртуальных методов врядли какой ООП язык обходится и в той же Делфи, если мне не изменяет память, функция New неявно по смещению сохраняет еще и объем выделенной памяти.

H>>Я ведь не сказал, что в Delphi нет оверхеда Это была фраза на отсутствие оверхеда в .Net. В Delphi еще можно вспомнить о выравнивании, пусть и отключаемом, которое тоже увеличивает оверхед но положительно влияет на производительность. Но не смотря на все это, мы имеем то о чем я уже написал

G>В Delphi вообще много чего есть, например аналог сборшика мусора, который работает для строк и динамических массивов.

Это далеко не аналог сборщика мусора Это автоматическая расстановка финализирующих блоков

G>Причем эта фигня глючит при интеропе с DLL.


Это сведения из далекого прошлого С 2005/2006 FastMM, используемый по умолчанию, обеспечивает свободный шаринг.
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 17.03.09 11:58
Здравствуйте, sergey2b, Вы писали:

CC>>Т.е. вся аллокация в ОС начиная от W2k производится через HeapAlloc, который является WinAPI функцией и к С/С++ уже никакого отношения не имеет.

CC>>А судя по картам аллокаций, которые я наблюдал на реальных приложениях фрагментации не наблюдается.

S>Большое спасибо за ваш ответ.

Носи на здоровье.
Если не забуду то приволоку завтра тул, который карту строит — поиграешься, посмотришь.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: alsemmhttp://sourceforge.net/projects/ferry
Дата: 17.03.09 12:13
Здравствуйте, gandjustas, Вы писали:

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


G>>>Теперь о GC

G>>>6)Выделение памяти в .NET происходит очень просто — инкремент указателя. Никаких дополнительных операций не происходитю
A>>Это, если память есть свободная.
G>Это всегда так. память перед инкрементом свободная.

G>>>8)Кроме того что выделение памяти выполняется моментально, эта операция еще и потокобезопасна.

A>>Конечно потокобезопасно, еще бы. Только потокобезопасность — не бесплатная.
G>Любая потокобезопасноть небесплатная, но пока быстрее intelokcedAdd не существует.
Что-то мне кажется, что одним intelokcedAdd дело там не ограничивается.

G>>>9)такое распределение памяти увелиичивает cache-locality

G>>>10)GC собирает мусор не тогжа когда захочется, а при нехватке памяти в нулевом поколении
G>>>11)Для нулевого поколения объем памяти — пара сотен КБ, этот кусок очень хорошо ложится в кеш процессора.
G>>>12)Единственный критический недостаток GC заключается в том, что он очень плохо работает когда кончается свободная физическая память, сборка мусора во втором поколении заставляет поднимать все страницы памяти из свопа и это может нереально тормозить.
A>>Реальный недостаток GC — это его непредсказуемость. Эта сущность не управлется из клиентского кода никак.
G>Управляется: есть классы GC и GCSettings. только практика показывает что чем больше лезешь в ручное управление GC, тем хуже все работает.
GCSettings нашел, GC — не нашел. Из того что нашел складывается ощущение, что толку от него, как от поводка для носорога. Да и не должно быть средств для управления нормальным GC, он незаметно для программы должен работать, а не выскакивать как бандит из подворотни

A>>Она может проснуться когда посчитает нужным.

G>Он работает по строгому алгоритму, если вы не будете писать код, который завтавляет срабатывать GC очень часто, то все будет хорошо.
Затачивать код под алгоритм GC? Полагаю, что это одного уровня сложности задача, как и настройка управления памтью в C++ проекте.

A>>Если бы GC давал равномерную нагрузку на CPU, то никто бы от него не плевался.

G>Ага, его бы просто не использовали.
А что есть выбор?

G>Странные у вас представления о CG.

Расскажите как должно быть по вашему.

G>Кстати описанный вами GC вполне можно сделать на C++, почему до сих пор не применяют?

В С++ GC не нужен.

G>>>13)Но даже этот недостаток можно побороть. Можно сборку мусора во втором поколении маскировать под каую-либо длительную операцию (например сохранение или открытие файла), а при расчетах использовать рецепт описанный здесь

A>>Это все ужимки и бег на месте, навроде java.lang.System.gc(), который ничего не гарантирует.
G>Ну тогда единственный правльный путь — писать на ассемблере и выделять память ручками.
Из одну крайности в другую...

A>>К сожалению, имидж управляемых сред был сильно подпорчен первыми версиями Java. Так что вы тут хоть 1000 аргументов в пользу C# приведите, стереотипы забороть очень тяжело.

G>Меня стериотипы не итересуют уже давно.
А зачем тогда, спрашивается, вы в этой ветке так активно участвуете?

A>>Еще одна проблема C# — низкий порого вхождения для новичков. Собственно это не проблема — это вроде как его преимущество, теоретически.

G>Да и практически. Формаклепание и написание говнокода будет востребовано еще очень долго.
Это будет востребовано всегда.

Алексей
Re[13]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: alsemmhttp://sourceforge.net/projects/ferry
Дата: 17.03.09 13:40
Здравствуйте, NikeByNike, Вы писали:

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


A>>Что JVM написан на C? А на чем их еще писать, если их надо запихивать черте куда, где вменяемого C++ компилятора и не стояло?

A>>Телефонный софт — это как правило море legacy кода, древнего как, даже и не знаю что
A>>Symbian — формально там конечно есть C++, но какой-то он на вид своеобразный.

NBN>Я писал под брю и его потомков — WIZE и PDK, там было много старого кода на С и не меньше нового на С++, в частности вся гуйня.

BREW — та еще радость: watch dog timer, ручная многозадачность, сказка, блин

Алексей
Re[14]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 17.03.09 13:48
Оценка: +1 :)
Здравствуйте, alsemm, Вы писали:

NBN>>Я писал под брю и его потомков — WIZE и PDK, там было много старого кода на С и не меньше нового на С++, в частности вся гуйня.

A>BREW — та еще радость: watch dog timer, ручная многозадачность, сказка, блин

Ага, я контужен мобильными платформами — с реальной многозадачностью почти не умею работать
Поэтому мне (противоестественно) нравится симбиан.
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: mrTwister 
Дата: 17.03.09 14:33
Здравствуйте, gandjustas, Вы писали:

G>В Delphi вообще много чего есть, например аналог сборшика мусора, который работает для строк и динамических массивов.

G>Причем эта фигня глючит при интеропе с DLL.

А там разве не подсчет ссылок?
Re[6]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: AndrewVK модератор 
Дата: 17.03.09 15:00
Здравствуйте, shrecher, Вы писали:

S> Где гарантия, что следующие 2-3 года не выдет новая версия радикально изменяющая предыдущие? Ведь MS — монополист и может навязывать любые условия.


Есть такая гарантия. Они за 3 года новую студию не напишут.
... << RSDN@Home 1.2.0 alpha 4 rev. 1138 on Windows Vista 6.1.7000.0>>
Re: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: AndrewVK модератор 
Дата: 17.03.09 15:00
Оценка: +2 :)))
Здравствуйте, niellune, Вы писали:

Хороший топик для потенциальных работодателей. Участников холивара можно смело на должности выше сеньора не брать
... << RSDN@Home 1.2.0 alpha 4 rev. 1138 on Windows Vista 6.1.7000.0>>
Re[34]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 17.03.09 15:25
Здравствуйте, hattab, Вы писали:

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


H>>>Рихтер:

H>>>

У каждого объекта есть пара таких полей: указатель на
H>>>таблицу методов и SyncBlocklndex. В 32-разрядной системе для каждого из них
H>>>требуется 32 бита, что увеличивает размер каждого объекта на 8 байтов, а в
H>>>64-разрядной системе каждое поле занимает 64 бита, добавляя к каждому объекту
H>>>по 16 байт


H>>>Это оверхед не аллокатора, а организации данных. Но тем не менее.

G>>указатель на таблицу виртуальных методов есть почти всегда и в неуправляемых языках, так что реальный оверхед создает SyncBlockIndex, который меньше оверхеда стандартного аллокатора C++.

H>Аллокатору нужны списки блоков? Нужны. Нужны размеры блоков? Нужны. Эти вещи, используемые любым аллокатором, считать оверхедом нельзя. Считать оверхедом можно большее, нежели было запрошено, выделение памяти, что присутствует в приведенном в качестве примера дельфийском менеджере (но учитывая эффективность пулов, этот оверхед обсуждать смешно).

Еще раз, в .NETовском аллокаторе не нужны ни списке блоков, ни размеры. (размеры есть в метаданных)

G>>>>Оверхед может возникнуть из-за того что создается больше обеъктов, но это уже зависит от программы, а не от аллокатора.

H>>>На практике мы видим, что .Net софт потребляет больше нежели нативный со всеми его пулами. Это позволяет говорить о том, что вся инфраструктура управления памятью в .Net имеет больший оверхед нежели в нативном софте.
G>>Большее потребление памяти вовсе не означает оверхеда аллокатора или какой-то-там "ифнраструктуры управления памятью".

H>Я и не говорю про оверхед аллокатора, я конкретно указал о каком оверхеде идет речь.

Только этот оверхед не влияет на производительность.
Вы же не боспокоетесь так исльно из-за лишнего дестяка мегабайт.
Я больше чем уверен что вы спокойное кешируете в памяти множество данных, получаемых извне.

H>К слову сказать, в Delphi я могу, при желании, создать объект и на стеке, только чаще всего необходимости в этом нет.

Каким образом?
Кстати при отсутствии необходимости создавать объекты на стеке многие С++ники часто ргугают другие языки из-за отсуствия такой возможности.

G>>В C++ большая часть короткоживущих объектов создается на стеке.

G>>Кроме того для работы аллокаторы .NET необходимы непрерывные куски памяти, а это требует резервирования и выделегния большего объема оперативной памяти, чем реально испольхуется программой (это к тому что не надо верить цифирке в Task Manager).
G>>Причем все эти особенности выделения паяти в .NET только ускоряют работу.

H>Во-первых, я не мониторю TaskManager'ом, а использую ProcessExplorer (там цифирки более другие )

Другие это какие?
Вообще "объем памяти, занимаемый программой" очень эфимерная величина. Есть workset, есть commited memory, есть reserved memory, причем не один из этих параметров не показывает реальной величины используемой памяти в течение какого-то промежутка времени.

H>Во-вторых, в Delphi менеджер памяти тоже предварительно создает пулы (в текущей версии в количестве 55(!) штук. Общая эффективность использования пулов для 12000 различных объектов составляет ~95% (это показания трекинга)), но при этом перерасхода памяти не наблюдается. В-третьих, под задачу можно аллокатор поменять (существуют и комммерческие и бесплатные решения).

Ага, наши поезда самые поездатые поезда в мире.

G>>Черезмерное потребление памяти программами на .NET — исключительно вина разработчиков.

H>Есть .Net софтинка: одна форма с кнопкой и картинкой (PictureBox). При нажатии на кнопку происходит вызов XML-RPC сервера и получение от него картинки 320x200x24 в формате BMP. После запуска клиент занимает 11.1Mb памяти. С каждым нажатием на кнопку потребление памяти растет. Постепенно вырастает до 21.2Mb, и на этой цифре останавливается (ну с мелкими мотыляниями туда-сюда). В аналогичном нативном клиенте потребление не превышает 5Mb. В цем тут вина .Net разработчика (там кода -- одна строка)?
Нативная программа использует GDI+ для этих целей?
Память там в основном жрет не .NET, а GDI+ (который тоже нативный).
Кроме того перечитайте еще раз мой пост о статическом оверхеде .NET, может тогда поймете почему не стоит сравнивать потребление памяти на программах типа HelloWorld
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 17.03.09 15:25
Здравствуйте, alsemm, Вы писали:

G>>>>8)Кроме того что выделение памяти выполняется моментально, эта операция еще и потокобезопасна.

A>>>Конечно потокобезопасно, еще бы. Только потокобезопасность — не бесплатная.
G>>Любая потокобезопасноть небесплатная, но пока быстрее intelokcedAdd не существует.
A>Что-то мне кажется, что одним intelokcedAdd дело там не ограничивается.
Не вижу причин по которым нельзя ограничиться одним инкрементом.

A>>>Реальный недостаток GC — это его непредсказуемость. Эта сущность не управлется из клиентского кода никак.

G>>Управляется: есть классы GC и GCSettings. только практика показывает что чем больше лезешь в ручное управление GC, тем хуже все работает.
A>GCSettings нашел, GC — не нашел. Из того что нашел складывается ощущение, что толку от него, как от поводка для носорога. Да и не должно быть средств для управления нормальным GC, он незаметно для программы должен работать, а не выскакивать как бандит из подворотни
В предыдущем посте вы обвиняли что нету средств контроля GC, вам показали средства, а теперь говорите что он должен незаметно работать. Вы определитесь уже.

A>>>Она может проснуться когда посчитает нужным.

G>>Он работает по строгому алгоритму, если вы не будете писать код, который завтавляет срабатывать GC очень часто, то все будет хорошо.
A>Затачивать код под алгоритм GC? Полагаю, что это одного уровня сложности задача, как и настройка управления памтью в C++ проекте.
Как раз "затачивать" ничего не надо. Надо просто писать. Работа GC основана не на каких-то предположениях, а на вполне конкретных сатистических (выполняющихся для большенства программ) фактах. Поэтому когда вы пишите программу не сильно задумываясь о распределениипамяти получается лучше всего, а тонкие места можно отловить профайлером.
По моим наблюдениям самые неэффективные программы для .NET пишут именно те кто писал на оптимизированные программы на C++.

A>>>Если бы GC давал равномерную нагрузку на CPU, то никто бы от него не плевался.

G>>Ага, его бы просто не использовали.
A>А что есть выбор?
Вообще говоря да. Вот в этой теме как раз вопрос выбора.

G>>Странные у вас представления о CG.

A>Расскажите как должно быть по вашему.
Меня устраивает так как сейчас есть. И я быб лы очень недоволен если бы работа GC давала постоянный тормозняк.

G>>Кстати описанный вами GC вполне можно сделать на C++, почему до сих пор не применяют?

A>В С++ GC не нужен.
Я много раз видел как пишут аллокаторы, которые по свойствам похожы на GC, значит нужны всетаки.

A>>>К сожалению, имидж управляемых сред был сильно подпорчен первыми версиями Java. Так что вы тут хоть 1000 аргументов в пользу C# приведите, стереотипы забороть очень тяжело.

G>>Меня стериотипы не итересуют уже давно.
A>А зачем тогда, спрашивается, вы в этой ветке так активно участвуете?
Вот и пытаюсь разрушить стериотипы.
Ведь можно написать эффективную программу на Java/.NET, но некоторые почему-то свято верят что можно писать толко на С++.
Re[2]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: BulatZiganshin 
Дата: 17.03.09 15:55
Здравствуйте, AndrewVK, Вы писали:

AVK>Хороший топик для потенциальных работодателей. Участников холивара можно смело на должности выше сеньора не брать


зря написал. теперь последует ещё на 28 страниц холивар о правильных работодателях
FreeArcлучший архиватор в мире
Re[28]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: alsemmhttp://sourceforge.net/projects/ferry
Дата: 17.03.09 16:29
Здравствуйте, gandjustas, Вы писали:

G>В предыдущем посте вы обвиняли что нету средств контроля GC, вам показали средства, а теперь говорите что он должен незаметно работать. Вы определитесь уже.

В этом не противоречия. Либо GC должен быть так хорош, чтобы в не надо было ничего "подкручивать", либо, если, им все-таки можно и нужно управлять должны быть для этого адекватные средства.
...
G>>>Странные у вас представления о CG.
A>>Расскажите как должно быть по вашему.
G>Меня устраивает так как сейчас есть. И я быб лы очень недоволен если бы работа GC давала постоянный тормозняк.
Постоянный предсказуемый тормозняк это лучше чем неожиданный непредсказуемый тормозняк

G>>>Кстати описанный вами GC вполне можно сделать на C++, почему до сих пор не применяют?

A>>В С++ GC не нужен.
G>Я много раз видел как пишут аллокаторы, которые по свойствам похожы на GC, значит нужны всетаки.
...
G>Вот и пытаюсь разрушить стериотипы.
G>Ведь можно написать эффективную программу на Java/.NET, но некоторые почему-то свято верят что можно писать толко на С++.
Живая эффективная программа на Java/.NET быстро порушит стереотипы. Где такую можно посмотреть?

Алексей
Re[29]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 17.03.09 16:51
Оценка: :)
Здравствуйте, alsemm, Вы писали:

G>>>>Странные у вас представления о CG.

A>>>Расскажите как должно быть по вашему.
G>>Меня устраивает так как сейчас есть. И я быб лы очень недоволен если бы работа GC давала постоянный тормозняк.
A>Постоянный предсказуемый тормозняк это лучше чем неожиданный непредсказуемый тормозняк
В том то и дело что в случае .NET тормозняк очень даже предсказуем и легко сделать так чтобы он не мешал.

G>>>>Кстати описанный вами GC вполне можно сделать на C++, почему до сих пор не применяют?

A>>>В С++ GC не нужен.
G>>Я много раз видел как пишут аллокаторы, которые по свойствам похожы на GC, значит нужны всетаки.
A>...
G>>Вот и пытаюсь разрушить стериотипы.
G>>Ведь можно написать эффективную программу на Java/.NET, но некоторые почему-то свято верят что можно писать толко на С++.
A>Живая эффективная программа на Java/.NET быстро порушит стереотипы. Где такую можно посмотреть?

Не порушит, потому что сравнивать не с чем.
Возьмите Paint.NET — на многих задачах работает быстрее фотошопа, но это разные весовые категории.
Можете посмотреть Windows Live Writer, но анлогов вообще нет, Windows Media Center — аналогично.
Autocad 2009 можно сравнить только с предыдущей версией, но бессмысленно это.
Вот еще и студия 2010, которая у меня на виртуалке работает также резво, как студия 2008 на компе.
Re[2]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MescalitoPeyot 
Дата: 17.03.09 16:55
Оценка: :))) :))
Здравствуйте, AndrewVK, Вы писали:

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


AVK>Хороший топик для потенциальных работодателей. Участников холивара можно смело на должности выше сеньора не брать


О, спасибо, пополнит мою коллекцию:
Писали ли вы в резюме "C/C++" через слеш?
Придерживаетесь ли вы code-style ядра виндовс?
Знаете формулу площади круга?
Ваше резюме помещается на одну страницу?
Ваше резюме не помещается на одну страницу?
Разберетесь с фиговиой а-ля // wtf????\ etc. ?
Разберетесь с фиговиной а-ля :> etc. ?
Имеете ли опыт работы в аутсорсе?
Отписывались ли вы на рсдн в форуме "О работе" в топике "Работа — с чего начать: С++ или С#?"
... << RSDN@Home 1.2.0 alpha 4 rev. 1138>>
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 17.03.09 17:10
Оценка:2 (1)
Здравствуйте, CreatorCray, Вы писали:

CC>Если не забуду то приволоку завтра тул, который карту строит — поиграешься, посмотришь.

Тут: http://creatorcray.googlepages.com/MemMon.rar

Гуй в нем делался на скорую руку бо сильно нужны были результаты замеров.
вкратце основные кнопы:
+- — зум
курсорные стрелки + ins/del — перемещение.
В силу особенностей перехвата работает не до абсолютной смерти проги, отключается несколько раньше, но позже завершения main.
Re[13]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 17.03.09 17:49
Здравствуйте, gandjustas, Вы писали:

ГВ>>Меняется не столько сам C++, сколько его реализация. Не одно и то же, однако.

G>Ну и в чем различия?

Скажи пожалуйста, ты правда не понимаешь разницу между стандартом ANSI и реализацией стандарта тем или иным компилятором? Или просто хочешь развести меня на очередной виток объяснения очевидных вещей?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[14]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 17.03.09 17:58
Оценка: -1
Здравствуйте, Геннадий Васильев, Вы писали:

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


ГВ>>>Меняется не столько сам C++, сколько его реализация. Не одно и то же, однако.

G>>Ну и в чем различия?

ГВ>Скажи пожалуйста, ты правда не понимаешь разницу между стандартом ANSI и реализацией стандарта тем или иным компилятором? Или просто хочешь развести меня на очередной виток объяснения очевидных вещей?


Меня не это интересует.
Меня интересует чем отличается "сам язык" (не его стандарт) от реализации этого языка в конкретном компиляторе.

Все программисты на C++ знают что стандартный C++ это далеко не тот C++ на котором пишут программы. Так что в этом контексте "сам язык"?
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: landerhighhttp://www.blinnov.com
Дата: 17.03.09 20:28
Оценка: :)
Здравствуйте, gandjustas, Вы писали:

G>Можете посмотреть Windows Live Writer, но анлогов вообще нет, Windows Media Center — аналогично.


Совершенно верно, аналогов этому, гхм, и правда нет.
Re[15]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 17.03.09 20:33
Здравствуйте, gandjustas, Вы писали:

G>Меня интересует чем отличается "сам язык" (не его стандарт) от реализации этого языка в конкретном компиляторе.


Неправильно ставишь вопрос: "сам язык" от стандарта не отличается. Стандарт (в виде документа) для того и нужен, вообще говоря, чтобы зафиксировать определение языка.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[2]: Ты помнишь, как всё начиналось? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 17.03.09 20:49
Оценка:6 (1) :)
Здравствуйте, AndrewVK,

Август 2002-го!
Автор: RSDNer
Дата: 09.08.02
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[36]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 17.03.09 21:00
Здравствуйте, mrTwister, Вы писали:

T>А там разве не подсчет ссылок?


Он самый.
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 17.03.09 21:00
Здравствуйте, gandjustas, Вы писали:

H>>>>Это оверхед не аллокатора, а организации данных. Но тем не менее.

G>>>указатель на таблицу виртуальных методов есть почти всегда и в неуправляемых языках, так что реальный оверхед создает SyncBlockIndex, который меньше оверхеда стандартного аллокатора C++.

H>>Аллокатору нужны списки блоков? Нужны. Нужны размеры блоков? Нужны. Эти вещи, используемые любым аллокатором, считать оверхедом нельзя. Считать оверхедом можно большее, нежели было запрошено, выделение памяти, что присутствует в приведенном в качестве примера дельфийском менеджере (но учитывая эффективность пулов, этот оверхед обсуждать смешно).

G>Еще раз, в .NETовском аллокаторе не нужны ни списке блоков, ни размеры. (размеры есть в метаданных)

Списки по любому нужны (т.е. GC все равно строит граф всех объектов в поколении). Размеры, и правда можно из метаданных получать, заплатив перформансом

H>>Я и не говорю про оверхед аллокатора, я конкретно указал о каком оверхеде идет речь.

G>Только этот оверхед не влияет на производительность.
G>Вы же не боспокоетесь так исльно из-за лишнего дестяка мегабайт.

Ну, потребление само по себе может и не влиять в определенных ситуациях, зато на производительность не лучшим образом влияет сам GC. Строить граф нужно, кучу упаковывать иногда нужно (а это за собой влечет и модификацию указателей). В общем, чего я, вот тебе цитата из Рихтера:

Как видите, сбор мусора вызывает существенное снижение производительно-
сти — это основной недостаток управляемой кучи.


G>Я больше чем уверен что вы спокойное кешируете в памяти множество данных, получаемых извне.


По требованию алгоритма, но не аллокатора

H>>К слову сказать, в Delphi я могу, при желании, создать объект и на стеке, только чаще всего необходимости в этом нет.

G>Каким образом?

TObject.InitInstance. Только нужно понимать, что объект для подобного использования должен быть специально подготовлен, ибо нет смысла размещать на стеке объект имеющий поля требующие динамического выделения памяти. Но сделать это можно. А с 2005 так вообще можно использовать advanced-records (структуры с методами/свойствами, class-like в общем).

G>Кстати при отсутствии необходимости создавать объекты на стеке многие С++ники часто ргугают другие языки из-за отсуствия такой возможности.


Ну на стеке быстрее, просто...

G>>>В C++ большая часть короткоживущих объектов создается на стеке.

G>>>Кроме того для работы аллокаторы .NET необходимы непрерывные куски памяти, а это требует резервирования и выделегния большего объема оперативной памяти, чем реально испольхуется программой (это к тому что не надо верить цифирке в Task Manager).
G>>>Причем все эти особенности выделения паяти в .NET только ускоряют работу.

H>>Во-первых, я не мониторю TaskManager'ом, а использую ProcessExplorer (там цифирки более другие )

G>Другие это какие?
G>Вообще "объем памяти, занимаемый программой" очень эфимерная величина. Есть workset, есть commited memory, есть reserved memory, причем не один из этих параметров не показывает реальной величины используемой памяти в течение какого-то промежутка времени.

Там есть Private bytes.

H>>Во-вторых, в Delphi менеджер памяти тоже предварительно создает пулы (в текущей версии в количестве 55(!) штук. Общая эффективность использования пулов для 12000 различных объектов составляет ~95% (это показания трекинга)), но при этом перерасхода памяти не наблюдается. В-третьих, под задачу можно аллокатор поменять (существуют и комммерческие и бесплатные решения).

G>Ага, наши поезда самые поездатые поезда в мире.

Большое количество пулов это: 1) Быстрая аллокация т.к. по размеру блока моментально вычисляется "идеальный" пул. 2) В мульти-тредовом софте большое количество пулов снижает вероятность возникновения коллизий на локах. 3) В мульти-треде аллокатор не висит тупо на локе, а если не смог получить доступ к "идеальному пулу" делает три попытки получить блок из следующего (+1, +2, +3) пула, если снова не смог процесс повторяется.

Я описал то, что есть в наличии FastMM используется и в C++ Builder'е кстати

G>>>Черезмерное потребление памяти программами на .NET — исключительно вина разработчиков.

H>>Есть .Net софтинка: одна форма с кнопкой и картинкой (PictureBox). При нажатии на кнопку происходит вызов XML-RPC сервера и получение от него картинки 320x200x24 в формате BMP. После запуска клиент занимает 11.1Mb памяти. С каждым нажатием на кнопку потребление памяти растет. Постепенно вырастает до 21.2Mb, и на этой цифре останавливается (ну с мелкими мотыляниями туда-сюда). В аналогичном нативном клиенте потребление не превышает 5Mb. В цем тут вина .Net разработчика (там кода -- одна строка)?
G>Нативная программа использует GDI+ для этих целей?
G>Память там в основном жрет не .NET, а GDI+ (который тоже нативный).

Не смеши. Не жрет GDI+ столько памяти. Более того, модель использования GDI+ отличается от GDI, требуя ресурсы (кисти и прочее) не накапливать, а создавать по мере необходимости. Я тебе могу выслать бинарник который рисует с использованием GDI+, так у него расход выше 4.1Mb не поднимается.

G>Кроме того перечитайте еще раз мой пост о статическом оверхеде .NET, может тогда поймете почему не стоит сравнивать потребление памяти на программах типа HelloWorld


Это далеко не HelloWorld. Впрочем, сравнивать все равно, что. У .Net, расход на аналогичных вещах выше, такова объективная реальность.
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 17.03.09 21:10
Здравствуйте, gandjustas, Вы писали:

G>Возьмите Paint.NET — на многих задачах работает быстрее фотошопа, но это разные весовые категории.


Дельфовый PhotoFiltre разрывает Paint.NET на куски

G>Можете посмотреть Windows Live Writer, но анлогов вообще нет


Дельфовый BlogJet... Ну ты понял

G>Autocad 2009 можно сравнить только с предыдущей версией, но бессмысленно это.


Особенно если учесть, что там только риббон нуждается в двухсотметровом довесочке
Re[36]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 17.03.09 21:22
Оценка: :)
Здравствуйте, hattab, Вы писали:

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


H>>>>>Это оверхед не аллокатора, а организации данных. Но тем не менее.

G>>>>указатель на таблицу виртуальных методов есть почти всегда и в неуправляемых языках, так что реальный оверхед создает SyncBlockIndex, который меньше оверхеда стандартного аллокатора C++.

H>>>Аллокатору нужны списки блоков? Нужны. Нужны размеры блоков? Нужны. Эти вещи, используемые любым аллокатором, считать оверхедом нельзя. Считать оверхедом можно большее, нежели было запрошено, выделение памяти, что присутствует в приведенном в качестве примера дельфийском менеджере (но учитывая эффективность пулов, этот оверхед обсуждать смешно).

G>>Еще раз, в .NETовском аллокаторе не нужны ни списке блоков, ни размеры. (размеры есть в метаданных)

H>Списки по любому нужны (т.е. GC все равно строит граф всех объектов в поколении).

Вы бы разобрались что скрывается под словами "строит граф", обычный рекурсивный обход без построения динамических структур.
Оверхеда там действительно нет, как бы вам не хотелось обратного.

H>Размеры, и правда можно из метаданных получать, заплатив перформансом

С чего бы? Метаданные то в памяти лежат (это как раз лишние пара метров занимаемой памяти).

H>>>Я и не говорю про оверхед аллокатора, я конкретно указал о каком оверхеде идет речь.

G>>Только этот оверхед не влияет на производительность.
G>>Вы же не боспокоетесь так исльно из-за лишнего дестяка мегабайт.

H>Ну, потребление само по себе может и не влиять в определенных ситуациях, зато на производительность не лучшим образом влияет сам GC. Строить граф нужно, кучу упаковывать иногда нужно (а это за собой влечет и модификацию указателей). В общем, чего я, вот тебе цитата из Рихтера:

H>

Как видите, сбор мусора вызывает существенное снижение производительно-
H>сти — это основной недостаток управляемой кучи.

Только это все может работать быстрее, чем аллокатор на основе списков.

G>>Я больше чем уверен что вы спокойное кешируете в памяти множество данных, получаемых извне.

H>По требованию алгоритма, но не аллокатора
А какая разница?


G>>Кстати при отсутствии необходимости создавать объекты на стеке многие С++ники часто ргугают другие языки из-за отсуствия такой возможности.

H>Ну на стеке быстрее, просто...
Не всегда, размещение объектов на стеке часто приводит к копированию этих объектов когда не надо.
Для выпрямления такой ситуации в C++ есть ссылки — безопасный, но ограниченный в возможностях аналог указателей.

G>>Вообще "объем памяти, занимаемый программой" очень эфимерная величина. Есть workset, есть commited memory, есть reserved memory, причем не один из этих параметров не показывает реальной величины используемой памяти в течение какого-то промежутка времени.

H>Там есть Private bytes.
И че?


G>>>>Черезмерное потребление памяти программами на .NET — исключительно вина разработчиков.

H>>>Есть .Net софтинка: одна форма с кнопкой и картинкой (PictureBox). При нажатии на кнопку происходит вызов XML-RPC сервера и получение от него картинки 320x200x24 в формате BMP. После запуска клиент занимает 11.1Mb памяти. С каждым нажатием на кнопку потребление памяти растет. Постепенно вырастает до 21.2Mb, и на этой цифре останавливается (ну с мелкими мотыляниями туда-сюда). В аналогичном нативном клиенте потребление не превышает 5Mb. В цем тут вина .Net разработчика (там кода -- одна строка)?
G>>Нативная программа использует GDI+ для этих целей?
G>>Память там в основном жрет не .NET, а GDI+ (который тоже нативный).

H>Не смеши. Не жрет GDI+ столько памяти. Более того, модель использования GDI+ отличается от GDI, требуя ресурсы (кисти и прочее) не накапливать, а создавать по мере необходимости. Я тебе могу выслать бинарник который рисует с использованием GDI+, так у него расход выше 4.1Mb не поднимается.

Меня измерения потребляемой памяти на HelloWorld не интересуют.

G>>Кроме того перечитайте еще раз мой пост о статическом оверхеде .NET, может тогда поймете почему не стоит сравнивать потребление памяти на программах типа HelloWorld

H>Это далеко не HelloWorld. Впрочем, сравнивать все равно, что. У .Net, расход на аналогичных вещах выше, такова объективная реальность.
Да как раз не все равно. Ты перечитай еще раз о чем я тебе толкую. .NET поребляет больше памяти на практически константную величину. Истории о том что кто-то запустил программу на .NET и она схавала сразу все свидетельствуют о криворукости автора программы, а не об особенностях работы с памятью в .NET.
Re[31]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 17.03.09 21:45
Оценка: :)
Здравствуйте, hattab, Вы писали:

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


G>>Возьмите Paint.NET — на многих задачах работает быстрее фотошопа, но это разные весовые категории.


H>Дельфовый PhotoFiltre разрывает Paint.NET на куски

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

Нету возможности работы со слоями, нету визуально undo/redo stack. При выделении с помощью magic wand изображение мелькает и начинает тормозить интерфейс, в отличие от Paint.NET

Очень порадовали диалоки без кнопок, которые еще и не дают кликать по вкладкам выдавая мессадж бокс.
Ну и из мелких придирок — нифига не подерживает vista style диалоги.

Дельфовый PhotoFiltre разрывает Paint.NET на куски только во сне.
Хотя памяти от захавал меньше в 2 раз — 20 мб, против 40 для Paint.NET, но с моими двумя гигами мне как-то пофиг.
Скорость работы — одинаковая.

G>>Можете посмотреть Windows Live Writer, но анлогов вообще нет

H>Дельфовый BlogJet... Ну ты понял
Тока он платный, так что сразу в пролете.
Re[37]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 17.03.09 21:56
Здравствуйте, gandjustas, Вы писали:

H>>Списки по любому нужны (т.е. GC все равно строит граф всех объектов в поколении).

G>Вы бы разобрались что скрывается под словами "строит граф", обычный рекурсивный обход без построения динамических структур.
G>Оверхеда там действительно нет, как бы вам не хотелось обратного.

Рихтер с тобой не согласен:

При компиляции IL-кода метода JIT-компилятор создает, помимо машинного
кода, внутреннюю таблицу. Логически каждая строка таблицы указывает диапа-
зон смещений байтов машинных кодов процессора, и адреса корней для каждого
диапазона (или регистра процессора)


Далее:

Начиная работу, сборщик предполагает, что все объекты в куче — мусор. Ина-
че говоря, он предполагает, что ни один из корней приложения не ссылается на
объекты в куче. Затем сборщик проходит по корням, строя граф всех достижи-
мых объектов. Например, он может найти глобальную переменную, указывающую
на объект в куче. На рис. 19-2 показана куча с несколькими объектами, где корни
приложения напрямую ссылаются на объекты А, С, D и F, Все эти объекты стано-
вятся частью графа. При добавлении объекта D сборщик замечает, что этот объект
ссылается на объект Н, добавляет объект Н к графу и продолжает рекурсивный
просмотр всех достижимых объектов.


Далее:

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


H>>Размеры, и правда можно из метаданных получать, заплатив перформансом

G>С чего бы? Метаданные то в памяти лежат (это как раз лишние пара метров занимаемой памяти).

Ты же сам про процессорный кэш упоминал... Забыл?

H>>Ну, потребление само по себе может и не влиять в определенных ситуациях, зато на производительность не лучшим образом влияет сам GC. Строить граф нужно, кучу упаковывать иногда нужно (а это за собой влечет и модификацию указателей). В общем, чего я, вот тебе цитата из Рихтера:

H>>

Как видите, сбор мусора вызывает существенное снижение производительно-
H>>сти — это основной недостаток управляемой кучи
.

G>Только это все может работать быстрее, чем аллокатор на основе списков.

Рихтер не авторит, да?

G>>>Кстати при отсутствии необходимости создавать объекты на стеке многие С++ники часто ргугают другие языки из-за отсуствия такой возможности.

H>>Ну на стеке быстрее, просто...
G>Не всегда, размещение объектов на стеке часто приводит к копированию этих объектов когда не надо.

Я так понимаю, что мы говорим об адекватном использовании...

G>>>Вообще "объем памяти, занимаемый программой" очень эфимерная величина. Есть workset, есть commited memory, есть reserved memory, причем не один из этих параметров не показывает реальной величины используемой памяти в течение какого-то промежутка времени.

H>>Там есть Private bytes.
G>И че?

Это реальный показатель:

Private Bytes represents the amount of private virtual memory a process has allocated and is the value that will rise of a process exhibiting a memory leak bug.


G>>>Нативная программа использует GDI+ для этих целей?

G>>>Память там в основном жрет не .NET, а GDI+ (который тоже нативный).

H>>Не смеши. Не жрет GDI+ столько памяти. Более того, модель использования GDI+ отличается от GDI, требуя ресурсы (кисти и прочее) не накапливать, а создавать по мере необходимости. Я тебе могу выслать бинарник который рисует с использованием GDI+, так у него расход выше 4.1Mb не поднимается.

G>Меня измерения потребляемой памяти на HelloWorld не интересуют.

Т.е. GDI+ реабилитирован?
Re[32]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 17.03.09 22:26
Здравствуйте, gandjustas, Вы писали:

G>>>Возьмите Paint.NET — на многих задачах работает быстрее фотошопа, но это разные весовые категории.


H>>Дельфовый PhotoFiltre разрывает Paint.NET на куски

G>Скачал и поставил себе это.
G>Срзу узнал дельфовую программу. Дофига непонятных непермещаемых тулбаров. Дофига пунктов в меню, даже больше чем у фотошопа.
G>Сам такие интерфейсы ет пять назад плодил.

Так и в Paint.NET тулбары не перемещаемые, во всяком случае у меня в 3.31.

G>Нету возможности работы со слоями, нету визуально undo/redo stack.


У меня версия от 2004 года, тут действительно нет, но есть PhotoFilter Studio, там слои есть.

G>При выделении с помощью magic wand изображение мелькает и начинает тормозить интерфейс, в отличие от Paint.NET


Это ты вероятно с Paint.Net спутал В нем действительно, при выделении (Magic Wand) изображения на картинке 400x647 начинаются тормоза: загрузка CPU в районе 100%, частота подскакивает до своего максимума в 1700MHz. PhotoFiltre при этом спокойно работает на минимуме в 600MHz не нагружая процессор выше 8%.

G>Дельфовый PhotoFiltre разрывает Paint.NET на куски только во сне.

G>Хотя памяти от захавал меньше в 2 раз — 20 мб, против 40 для Paint.NET, но с моими двумя гигами мне как-то пофиг.
G>Скорость работы — одинаковая.

Уж не надо про скорость заливать, PhotoFiltre летает заметно шустрее Paint.NET.

G>>>Можете посмотреть Windows Live Writer, но анлогов вообще нет

H>>Дельфовый BlogJet... Ну ты понял
G>Тока он платный, так что сразу в пролете.

Только он не единственный, этих блогопостилок вообще море, слабо сопоставляющееся со словами об отсутствии аналогов.
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 17.03.09 22:31
Здравствуйте, CreatorCray, Вы писали:

Кроме того, скорость (и cache locality) для HeapAlloc (и соответственно для стандартного аллокатора) сильно повышает следующее:

    ULONG mode = 2;
    HeapSetInformation(GetProcessHeap(),HeapCompatibilityInformation,&mode, sizeof (mode));


Это называется Low Fragmentation Heap http://msdn.microsoft.com/en-us/library/aa366750(VS.85).aspx
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 17.03.09 22:44
Здравствуйте, CreatorCray, Вы писали:

CC>Тут: http://creatorcray.googlepages.com/MemMon.rar


CC>Гуй в нем делался на скорую руку бо сильно нужны были результаты замеров.

CC>вкратце основные кнопы:
CC>+- — зум
CC>курсорные стрелки + ins/del — перемещение.
CC>В силу особенностей перехвата работает не до абсолютной смерти проги, отключается несколько раньше, но позже завершения main.

Чего-то не запустилась у меня Вообще по тихому, ни сообщений, ни записей в евентлоге. Windows XP SP3.
Re[28]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 17.03.09 23:47
Здравствуйте, hattab, Вы писали:

H>Чего-то не запустилась у меня Вообще по тихому, ни сообщений, ни записей в евентлоге. Windows XP SP3.

Небось Athlon?

Собиралась ICC 11 с опцией /QxSSE3. Я то могу вырубить, но там либа используется, которая уже с SSE3 собрана.
Попробую перевыложить.
Re[28]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 17.03.09 23:49
Здравствуйте, CreatorCray, Вы писали:

CC>Кроме того, скорость (и cache locality) для HeapAlloc (и соответственно для стандартного аллокатора) сильно повышает следующее:


CC>
CC>    ULONG mode = 2;
CC>    HeapSetInformation(GetProcessHeap(),HeapCompatibilityInformation,&mode, sizeof (mode));
CC>


CC>Это называется Low Fragmentation Heap http://msdn.microsoft.com/en-us/library/aa366750(VS.85).aspx

Кстати померял ради интереса — на std::map<QWORD,DWORD>.insert 10М уникальных элементов в два раза быстрее с LFH чем без него.
Re[28]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 17.03.09 23:56
Оценка:2 (1)
Здравствуйте, hattab, Вы писали:

H>Чего-то не запустилась у меня Вообще по тихому, ни сообщений, ни записей в евентлоге. Windows XP SP3.

Там просто если ICC считает что твой проц не поддерживает нужные фичи то он делает printf и exit
Прога не консольная, посему в консоль ничего не пишет, а printf этот происходит до winmain.
Выложил собранные без оптимизаций вообще. Вообще удивлён что сей сурс собрался с первой попытки и даже без ворнингов, как никак года три ему наверное, и кинут был на полпути.
У меня самый старый комп что могу найти это P4 820, на нем работало и в первом случае.
Re[38]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 18.03.09 02:58
Оценка: :)
Здравствуйте, hattab, Вы писали:

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


H>>>Списки по любому нужны (т.е. GC все равно строит граф всех объектов в поколении).

G>>Вы бы разобрались что скрывается под словами "строит граф", обычный рекурсивный обход без построения динамических структур.
G>>Оверхеда там действительно нет, как бы вам не хотелось обратного.

H>Рихтер с тобой не согласен:

H>

При компиляции IL-кода метода JIT-компилятор создает, помимо машинного
H>кода, внутреннюю таблицу. Логически каждая строка таблицы указывает диапа-
H>зон смещений байтов машинных кодов процессора, и адреса корней для каждого
H>диапазона (или регистра процессора)


H>Далее:

H>

Начиная работу, сборщик предполагает, что все объекты в куче — мусор. Ина-
H>че говоря, он предполагает, что ни один из корней приложения не ссылается на
H>объекты в куче. Затем сборщик проходит по корням, строя граф всех достижи-
H>мых объектов. Например, он может найти глобальную переменную, указывающую
H>на объект в куче. На рис. 19-2 показана куча с несколькими объектами, где корни
H>приложения напрямую ссылаются на объекты А, С, D и F, Все эти объекты стано-
H>вятся частью графа. При добавлении объекта D сборщик замечает, что этот объект
H>ссылается на объект Н, добавляет объект Н к графу и продолжает рекурсивный
H>просмотр всех достижимых объектов.


H>Далее:

H>

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


Включай мозг: все что требуется от такого "графа" только возможность проверить присуствует ли объект в нем. Это значит что достаточно битовго флага.

H>>>Размеры, и правда можно из метаданных получать, заплатив перформансом

G>>С чего бы? Метаданные то в памяти лежат (это как раз лишние пара метров занимаемой памяти).

H>Ты же сам про процессорный кэш упоминал... Забыл?

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

H>>>Ну, потребление само по себе может и не влиять в определенных ситуациях, зато на производительность не лучшим образом влияет сам GC. Строить граф нужно, кучу упаковывать иногда нужно (а это за собой влечет и модификацию указателей). В общем, чего я, вот тебе цитата из Рихтера:

H>>>

Как видите, сбор мусора вызывает существенное снижение производительно-
H>>>сти — это основной недостаток управляемой кучи
.

G>>Только это все может работать быстрее, чем аллокатор на основе списков.
H> Рихтер не авторит, да?
А причем тут авторитет? Это результатами тестов подтверждается.

H>>>Там есть Private bytes.

G>>И че?
H>Это реальный показатель:
H>

Private Bytes represents the amount of private virtual memory a process has allocated and is the value that will rise of a process exhibiting a memory leak bug.

Такой же эфимерный показательнь для GC.

G>>>>Нативная программа использует GDI+ для этих целей?

G>>>>Память там в основном жрет не .NET, а GDI+ (который тоже нативный).

H>>>Не смеши. Не жрет GDI+ столько памяти. Более того, модель использования GDI+ отличается от GDI, требуя ресурсы (кисти и прочее) не накапливать, а создавать по мере необходимости. Я тебе могу выслать бинарник который рисует с использованием GDI+, так у него расход выше 4.1Mb не поднимается.

G>>Меня измерения потребляемой памяти на HelloWorld не интересуют.

H>Т.е. GDI+ реабилитирован?

Нет, это была и есть тормозная библиотека, пожирающая ресусры.
Мне в .NET несколько раз приходиллось использовать pinvoke для функций GDI чтобы рисование достаточно быстро происходило.
Re[33]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 18.03.09 03:00
Здравствуйте, hattab, Вы писали:

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


G>>>>Возьмите Paint.NET — на многих задачах работает быстрее фотошопа, но это разные весовые категории.


H>>>Дельфовый PhotoFiltre разрывает Paint.NET на куски

G>>Скачал и поставил себе это.
G>>Срзу узнал дельфовую программу. Дофига непонятных непермещаемых тулбаров. Дофига пунктов в меню, даже больше чем у фотошопа.
G>>Сам такие интерфейсы ет пять назад плодил.

H>Так и в Paint.NET тулбары не перемещаемые, во всяком случае у меня в 3.31.

Там панели инструментов перемещаемые и полупрозрачные чтобы под ними было видно что нарисовано.

G>>Нету возможности работы со слоями, нету визуально undo/redo stack.

H>У меня версия от 2004 года, тут действительно нет, но есть PhotoFilter Studio, там слои есть.
А я поледнюю скачал, там тоже нет

G>>При выделении с помощью magic wand изображение мелькает и начинает тормозить интерфейс, в отличие от Paint.NET

H>Это ты вероятно с Paint.Net спутал В нем действительно, при выделении (Magic Wand) изображения на картинке 400x647 начинаются тормоза: загрузка CPU в районе 100%, частота подскакивает до своего максимума в 1700MHz. PhotoFiltre при этом спокойно работает на минимуме в 600MHz не нагружая процессор выше 8%.
Я проверил на одинаковых картинках, жрет процессор одинаково, но у PhotoFiltre при этом торможит интерфейс

G>>Дельфовый PhotoFiltre разрывает Paint.NET на куски только во сне.

G>>Хотя памяти от захавал меньше в 2 раз — 20 мб, против 40 для Paint.NET, но с моими двумя гигами мне как-то пофиг.
G>>Скорость работы — одинаковая.
H>Уж не надо про скорость заливать, PhotoFiltre летает заметно шустрее Paint.NET.
Мечты, мечты.

G>>>>Можете посмотреть Windows Live Writer, но анлогов вообще нет

H>>>Дельфовый BlogJet... Ну ты понял
G>>Тока он платный, так что сразу в пролете.
H>Только он не единственный, этих блогопостилок вообще море, слабо сопоставляющееся со словами об отсутствии аналогов.
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 18.03.09 07:52
Оценка: +2
Здравствуйте, gandjustas, Вы писали:

H>>Во-первых, я не мониторю TaskManager'ом, а использую ProcessExplorer (там цифирки более другие )

G>Другие это какие?
Поставь посмотри.

G>Вообще "объем памяти, занимаемый программой" очень эфимерная величина. Есть workset, есть commited memory, есть reserved memory, причем не один из этих параметров не показывает реальной величины используемой памяти в течение какого-то промежутка времени.

Есть еще Virtual size, Working set (private/shareable/shared) и Private bytes.
Процхп умеет показывать график реально юзаемой памяти по времени per process.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[29]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 18.03.09 08:57
Здравствуйте, CreatorCray, Вы писали:

H>>Чего-то не запустилась у меня Вообще по тихому, ни сообщений, ни записей в евентлоге. Windows XP SP3.

CC>Небось Athlon?

Pentium M 735 (1.7) (Dothan)
Re[29]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 18.03.09 08:57
Здравствуйте, CreatorCray, Вы писали:

H>>Чего-то не запустилась у меня Вообще по тихому, ни сообщений, ни записей в евентлоге. Windows XP SP3.

CC>Там просто если ICC считает что твой проц не поддерживает нужные фичи то он делает printf и exit
CC>Прога не консольная, посему в консоль ничего не пишет, а printf этот происходит до winmain.
CC>Выложил собранные без оптимизаций вообще. Вообще удивлён что сей сурс собрался с первой попытки и даже без ворнингов, как никак года три ему наверное, и кинут был на полпути.
CC>У меня самый старый комп что могу найти это P4 820, на нем работало и в первом случае.

Новая работает
Re[39]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 18.03.09 08:58
Оценка: -1
Здравствуйте, gandjustas, Вы писали:

H>>>>Списки по любому нужны (т.е. GC все равно строит граф всех объектов в поколении).

G>>>Вы бы разобрались что скрывается под словами "строит граф", обычный рекурсивный обход без построения динамических структур.
G>>>Оверхеда там действительно нет, как бы вам не хотелось обратного.

H>>Рихтер с тобой не согласен:

H>>

При компиляции IL-кода метода JIT-компилятор создает, помимо машинного
H>>кода, внутреннюю таблицу. Логически каждая строка таблицы указывает диапа-
H>>зон смещений байтов машинных кодов процессора, и адреса корней для каждого
H>>диапазона (или регистра процессора)


H>>Далее:

H>>

Начиная работу, сборщик предполагает, что все объекты в куче — мусор. Ина-
H>>че говоря, он предполагает, что ни один из корней приложения не ссылается на
H>>объекты в куче. Затем сборщик проходит по корням, строя граф всех достижи-
H>>мых объектов. Например, он может найти глобальную переменную, указывающую
H>>на объект в куче. На рис. 19-2 показана куча с несколькими объектами, где корни
H>>приложения напрямую ссылаются на объекты А, С, D и F, Все эти объекты стано-
H>>вятся частью графа. При добавлении объекта D сборщик замечает, что этот объект
H>>ссылается на объект Н, добавляет объект Н к графу и продолжает рекурсивный
H>>просмотр всех достижимых объектов.


H>>Далее:

H>>

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


G>Включай мозг: все что требуется от такого "графа" только возможность проверить присуствует ли объект в нем. Это значит что достаточно битовго флага.


Давай ты последуешь своему совету и подумаешь, что такое граф и, как с помощью битового флага (а точнее речь идет битовом массиве, как я понимаю) можно определить находжение объекта в куче для последующих манипуляций с оным.

H>>>>Размеры, и правда можно из метаданных получать, заплатив перформансом

G>>>С чего бы? Метаданные то в памяти лежат (это как раз лишние пара метров занимаемой памяти).

H>>Ты же сам про процессорный кэш упоминал... Забыл?

G>Не забыл — сборка муроса достаточно редкий процесс и на время его работы программа останавливается.

Ты посмотри, как этот редкий процесс накручивает счетчик, когда ты мышкой водишь над кнопками на тулбаре. К тому же не забывай, я давал пример, когда на один вызод метода по XML-RPC происходит 3 сборки мусора. Не веришь мне, проверь сам.

G>Стандартный аллокатор тоже неспособствует частому попаданию в кеш при выделении относительно неболишах блоков, причем эффект проявляется при каждом выделении-освобождении.


Вообще-то тут речь идет об освобождении ресурсов. У стандартного аллокатора есть информация о размере освобождаемого блока, и нет нужды мотаться за ней в мету.

H>>>>Ну, потребление само по себе может и не влиять в определенных ситуациях, зато на производительность не лучшим образом влияет сам GC. Строить граф нужно, кучу упаковывать иногда нужно (а это за собой влечет и модификацию указателей). В общем, чего я, вот тебе цитата из Рихтера:

H>>>>

Как видите, сбор мусора вызывает существенное снижение производительно-
H>>>>сти — это основной недостаток управляемой кучи
.

G>>>Только это все может работать быстрее, чем аллокатор на основе списков.
H>> Рихтер не авторит, да?
G>А причем тут авторитет? Это результатами тестов подтверждается.

Так Рихтер и говорит, что управляемая куча это есть потеря перформанса. Впрочем, я уже понял, что твою слепую веру ничто не способно поколебать.

H>>>>Там есть Private bytes.

G>>>И че?
H>>Это реальный показатель:
H>>

Private Bytes represents the amount of private virtual memory a process has allocated and is the value that will rise of a process exhibiting a memory leak bug.

G>Такой же эфимерный показательнь для GC.

При чем тут GC? Это показатель реально используемого/выделенного (не зарезервированного) объема, хоть с GC, хоть без GC

H>>>>Не смеши. Не жрет GDI+ столько памяти. Более того, модель использования GDI+ отличается от GDI, требуя ресурсы (кисти и прочее) не накапливать, а создавать по мере необходимости. Я тебе могу выслать бинарник который рисует с использованием GDI+, так у него расход выше 4.1Mb не поднимается.

G>>>Меня измерения потребляемой памяти на HelloWorld не интересуют.

H>>Т.е. GDI+ реабилитирован?

G>Нет, это была и есть тормозная библиотека, пожирающая ресусры.

Еще раз: ресурсы (в частности речь шла о памяти) GDI+ не жрет. У него модель использования другая. Может почитаешь уже?

G>Мне в .NET несколько раз приходиллось использовать pinvoke для функций GDI чтобы рисование достаточно быстро происходило.


GDI+ это тормоз, я не спорю, только как ты это увязал с , якобы, прожорливостью для меня остается загадкой
Re[34]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 18.03.09 08:58
Оценка: -1
Здравствуйте, gandjustas, Вы писали:

H>>Так и в Paint.NET тулбары не перемещаемые, во всяком случае у меня в 3.31.

G>Там панели инструментов перемещаемые и полупрозрачные чтобы под ними было видно что нарисовано.

В PhotoFiltre панель инструментов тоже отцепляемая, в настройки глянь. Хотя обсуждение фейса, это все придирки не по теме.

G>>>Нету возможности работы со слоями, нету визуально undo/redo stack.

H>>У меня версия от 2004 года, тут действительно нет, но есть PhotoFilter Studio, там слои есть.
G>А я поледнюю скачал, там тоже нет

Так ты студию посмотри, там есть

G>>>При выделении с помощью magic wand изображение мелькает и начинает тормозить интерфейс, в отличие от Paint.NET

H>>Это ты вероятно с Paint.Net спутал В нем действительно, при выделении (Magic Wand) изображения на картинке 400x647 начинаются тормоза: загрузка CPU в районе 100%, частота подскакивает до своего максимума в 1700MHz. PhotoFiltre при этом спокойно работает на минимуме в 600MHz не нагружая процессор выше 8%.
G>Я проверил на одинаковых картинках, жрет процессор одинаково, но у PhotoFiltre при этом торможит интерфейс

Я тоже проверил на одинаковых, и результат изложил выше, а посему позволь тебе не поверить.
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 18.03.09 10:23
Здравствуйте, hattab, Вы писали:

H>>>Чего-то не запустилась у меня Вообще по тихому, ни сообщений, ни записей в евентлоге. Windows XP SP3.

CC>>Небось Athlon?
H>Pentium M 735 (1.7) (Dothan)
А, ясно.
Их интел относит к категории /QxSSE2
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 18.03.09 10:23
Здравствуйте, hattab, Вы писали:

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


H>>>Чего-то не запустилась у меня Вообще по тихому, ни сообщений, ни записей в евентлоге. Windows XP SP3.

CC>>Там просто если ICC считает что твой проц не поддерживает нужные фичи то он делает printf и exit
CC>>Прога не консольная, посему в консоль ничего не пишет, а printf этот происходит до winmain.
CC>>Выложил собранные без оптимизаций вообще. Вообще удивлён что сей сурс собрался с первой попытки и даже без ворнингов, как никак года три ему наверное, и кинут был на полпути.
CC>>У меня самый старый комп что могу найти это P4 820, на нем работало и в первом случае.

H>Новая работает

Надо будет как нить ее доработать.
К примеру она не "видит" аллокации из динамически подгружаемых DLL, только из статики. Не будет работать с упакованными/защищенными EXE и т.п. Как нить сделать чтобы можно было отловить откуда была выделена/освобождена память (StackWalk), правда глядя на объем данных, получаемый с простой программки (~200Mb) становится понятно что stackwalk на каждый alloc/free — это будет черезчур.
Плюс почему то к моменту выгрузки DLL не на все аллокации приходит освобождение, причем часто строго на определенном блоке заканчивается работа.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Игoрь 
Дата: 18.03.09 12:05
Оценка: +1 -2
G>Маленький ликбез:
G>1)Стандартный аллокатор поддерживает связный список блоков памяти, выделение нового и освобождение блока вызывает проход по списку, который имеет алгоритмическое время O(n) от количества блоков.
Ты сам в это веришь? Это наивная реализация 80-ых годов. Сейчас используются всякого рода оптимизации, позволяющие минимизировать время поиска и частично отказаться от блокировок кучи. Например, в windows heap создается, если мне память не изменяет, на одну кучу 128 ассоциативных однонаправленных списков, не требующих блокировок.

G>При постоянных выделениях-освобождениях памяти получются очень большие затраты на эту простую операцию.

В С# в целом та же херня.

G>2)При выделении блока идет небольшой оверхед, который зависит от реализации, 16-32 байта кажись. Исследования исходных кодов программ показывают что средний размер объекта составляет от 32 до 128 байт, при такких размерах оверхед является очень значительным.

Достаточно в таск менеджере взглянуть на кол-во используемой памяти .net прогой и С++ с эквивалентной функциональностью, чтобы понять, что ты гонишь. Кроме того, в С++ принято мелкие объекты создавать на стеке. А если нужно в динамической памяти разместить объект, то есть placement new, который позволяет разместить объект в уже выделенной памяти.

G>3)Выделение памяти таким алгоритмом создет фрагментацию памяти, то есть остаются блоки невыделенной памяти малых размеров.

Угу, только проблема фрагментации кучи есть и в .net, кстати, как и мемори лики.

G>4)Алгоритм выделения памяти не потокобезопасный, требуется синхронизация.

GC тоже не потокобезопасный, и зачастую требует не просто синхронизации, но и приостановки работы потоков.

G>5)В программах на С++ часто делают свои аллокаторы, которые выделяют память для маленькиз объектов чтобы избежать описанно выше оверхеда как по потребляемой памяти, так и по времени этой операции

В С++ такое делают крайне-крайне редко. Потому что а) есть стэк; b) есть placement new; c) на мелких объектах свет клином не сошелся — можно и без них обойтись в критичной к скорости части;

G>Теперь о GC

G>6)Выделение памяти в .NET происходит очень просто — инкремент указателя. Никаких дополнительных операций не происходитю
Ага, аж десять раз. Это как бог на душу положит. Может и GC запуститься с полной остановкой всех потоков. Веселуха...
G>7)Оверхед по выделяемой памяти равен 8 байтам на 32-битной платформе (может ошибаюсь немного, лень смотреть)
уже писал про мелкие объекты и про то, что общий оверхед памяти для .net программ хорошо больше цэпэпэ.
G>8)Кроме того что выделение памяти выполняется моментально, эта операция еще и потокобезопасна.
в c# выделение памяти не более потокобезопасно, чем в с++
G>9)такое распределение памяти увелиичивает cache-locality
стандартные аллокаторы windows тоже оптимизированы на это дело
G>10)GC собирает мусор не тогжа когда захочется, а при нехватке памяти в нулевом поколении
по сути это и означает, что когда захочется, особенно если речь идет о более-менее больших системах
G>11)Для нулевого поколения объем памяти — пара сотен КБ, этот кусок очень хорошо ложится в кеш процессора.
пофиг, в С++ частое выделение/удаление мелких объектов стараются делать на стэке.
G>12)Единственный критический недостаток GC заключается в том, что он очень плохо работает когда кончается свободная физическая память, сборка мусора во втором поколении заставляет поднимать все страницы памяти из свопа и это может нереально тормозить.
G>13)Но даже этот недостаток можно побороть. Можно сборку мусора во втором поколении маскировать под каую-либо длительную операцию (например сохранение или открытие файла), а при расчетах использовать рецепт описанный здесь
это в общем-то самообман

PS
существенное преимущество GC — не надо следить за уничтожением объектов, что облегчает программирование, позволяет использовать всякие инетересные техники программирования, вроде замыканий. Но за эти удобства мы платим скоростью исполнения и большим расходом памяти. Вот собственно и все.
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 18.03.09 12:23
Оценка: +1 -1
Здравствуйте, Игoрь, Вы писали:

G>>Маленький ликбез:

G>>1)Стандартный аллокатор поддерживает связный список блоков памяти, выделение нового и освобождение блока вызывает проход по списку, который имеет алгоритмическое время O(n) от количества блоков.
И>Ты сам в это веришь? Это наивная реализация 80-ых годов. Сейчас используются всякого рода оптимизации, позволяющие минимизировать время поиска и частично отказаться от блокировок кучи. Например, в windows heap создается, если мне память не изменяет, на одну кучу 128 ассоциативных однонаправленных списков, не требующих блокировок.
Эта наивная реализация во многих местах осталась и по сей день.

G>>При постоянных выделениях-освобождениях памяти получются очень большие затраты на эту простую операцию.

И>В С# в целом та же херня.
Доказательства? Может сначала статью про .NETовский JIT прочитаете. На этом сайте статьи есть.

G>>2)При выделении блока идет небольшой оверхед, который зависит от реализации, 16-32 байта кажись. Исследования исходных кодов программ показывают что средний размер объекта составляет от 32 до 128 байт, при такких размерах оверхед является очень значительным.

И>Достаточно в таск менеджере взглянуть на кол-во используемой памяти .net прогой и С++ с эквивалентной функциональностью, чтобы понять, что ты гонишь.
Покажите две программы на .net и C++ с эквивалнтной функциональностью сложнее HelloWorld, потом посмотрим кто гонит.
Кроме того цифра в таск менеждере ни о чем не говорит, просто сверните приложение, будете удивлены.

И>Кроме того, в С++ принято мелкие объекты создавать на стеке. А если нужно в динамической памяти разместить объект, то есть placement new, который позволяет разместить объект в уже выделенной памяти.

Ага, это все увеличивает энтропию языка, то есть количество свпособов сделать одно и тоже по-разному.

G>>3)Выделение памяти таким алгоритмом создет фрагментацию памяти, то есть остаются блоки невыделенной памяти малых размеров.

И>Угу, только проблема фрагментации кучи есть и в .net, кстати, как и мемори лики.
Доказательства? Опять отправляю вас читать как работает выделение памяти и сборка мусора в .NET.
Про мемори лики хочу узнать поподробнее, как их получить, потом сравните это с простотой получчения лика в unamanged коде.

G>>4)Алгоритм выделения памяти не потокобезопасный, требуется синхронизация.

И>GC тоже не потокобезопасный, и зачастую требует не просто синхронизации, но и приостановки работы потоков.
Не зачастую, всегда, но GC работает в сотни раз реже, чем выделение-совобождение памяти стандартным аллокатором.

G>>5)В программах на С++ часто делают свои аллокаторы, которые выделяют память для маленькиз объектов чтобы избежать описанно выше оверхеда как по потребляемой памяти, так и по времени этой операции

И>В С++ такое делают крайне-крайне редко. Потому что
И>а) есть стэк;
Стек заставляет копировать объекты чаще, чем нужно.

И>b) есть placement new;

Теже яйца что и кастомный аллокатор, только сбоку

И>c) на мелких объектах свет клином не сошелся — можно и без них обойтись в критичной к скорости части;

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

G>>Теперь о GC

G>>6)Выделение памяти в .NET происходит очень просто — инкремент указателя. Никаких дополнительных операций не происходитю
И>Ага, аж десять раз. Это как бог на душу положит. Может и GC запуститься с полной остановкой всех потоков. Веселуха...
Читайте как работает GC, он не может просто так взять и запуститься.

G>>7)Оверхед по выделяемой памяти равен 8 байтам на 32-битной платформе (может ошибаюсь немного, лень смотреть)

И>уже писал про мелкие объекты и про то, что общий оверхед памяти для .net программ хорошо больше цэпэпэ.
А вы вообще ветку читали перед тем как это постить?

G>>8)Кроме того что выделение памяти выполняется моментально, эта операция еще и потокобезопасна.

И>в c# выделение памяти не более потокобезопасно, чем в с++
Полный бред.

G>>9)такое распределение памяти увелиичивает cache-locality

И>стандартные аллокаторы windows тоже оптимизированы на это дело
Рад за аллокатор Windows, только зачем он нужен если можно выделять память смещением указателя. Быстрее просто нечего придумать.

G>>10)GC собирает мусор не тогжа когда захочется, а при нехватке памяти в нулевом поколении

И>по сути это и означает, что когда захочется, особенно если речь идет о более-менее больших системах
И че? сборка памяти в нулевом поколении работает быстре чем использование алоокатора на списках при выделении-освобождении того же объема памяти.

G>>11)Для нулевого поколения объем памяти — пара сотен КБ, этот кусок очень хорошо ложится в кеш процессора.

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

G>>12)Единственный критический недостаток GC заключается в том, что он очень плохо работает когда кончается свободная физическая память, сборка мусора во втором поколении заставляет поднимать все страницы памяти из свопа и это может нереально тормозить.

G>>13)Но даже этот недостаток можно побороть. Можно сборку мусора во втором поколении маскировать под каую-либо длительную операцию (например сохранение или открытие файла), а при расчетах использовать рецепт описанный здесь
И>это в общем-то самообман
Самообман — думать что C++ всегда быстрее.

И>PS

И>существенное преимущество GC — не надо следить за уничтожением объектов, что облегчает программирование, позволяет использовать всякие инетересные техники программирования, вроде замыканий. Но за эти удобства мы платим скоростью исполнения и большим расходом памяти. Вот собственно и все.
Тесты будут? Или вы тоже омновываете свое мнение на просмотре пары говнопрограмм?
Re[40]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 18.03.09 12:59
Здравствуйте, hattab, Вы писали:

H>Давай ты последуешь своему совету и подумаешь, что такое граф и, как с помощью битового флага (а точнее речь идет битовом массиве, как я понимаю) можно определить находжение объекта в куче для последующих манипуляций с оным.

http://www.rsdn.ru/article/dotnet/GC.xml
Автор(ы): Чистяков Влад (VladD2)
Дата: 14.06.2006
Уже много сказано слов о том, что такое GC, чем он хорош и как лучше его применять. Но, наверно, очень многим хочется знать, как устроен конкретный GC. Данная статья открывает некоторые подробности устройчтва GC в .NET Framework.


H>>>>>Размеры, и правда можно из метаданных получать, заплатив перформансом

G>>>>С чего бы? Метаданные то в памяти лежат (это как раз лишние пара метров занимаемой памяти).

H>>>Ты же сам про процессорный кэш упоминал... Забыл?

G>>Не забыл — сборка муроса достаточно редкий процесс и на время его работы программа останавливается.
H>Ты посмотри, как этот редкий процесс накручивает счетчик, когда ты мышкой водишь над кнопками на тулбаре.
Накручивает до определенной степени, потом переставет.

H>К тому же не забывай, я давал пример, когда на один вызод метода по XML-RPC происходит 3 сборки мусора. Не веришь мне, проверь сам.

Не надо в пример приводить какую-то левую либу.

G>>Стандартный аллокатор тоже неспособствует частому попаданию в кеш при выделении относительно неболишах блоков, причем эффект проявляется при каждом выделении-освобождении.

H>Вообще-то тут речь идет об освобождении ресурсов. У стандартного аллокатора есть информация о размере освобождаемого блока, и нет нужды мотаться за ней в мету.
"мотаться" — громко сказано, это пара ассемблерных команд. Стандартному аллокатору чтобы поместить свободный блок в список приходится мотаться.

H>>>>>Ну, потребление само по себе может и не влиять в определенных ситуациях, зато на производительность не лучшим образом влияет сам GC. Строить граф нужно, кучу упаковывать иногда нужно (а это за собой влечет и модификацию указателей). В общем, чего я, вот тебе цитата из Рихтера:

H>>>>>

Как видите, сбор мусора вызывает существенное снижение производительно-
H>>>>>сти — это основной недостаток управляемой кучи
.

G>>>>Только это все может работать быстрее, чем аллокатор на основе списков.
H>>> Рихтер не авторит, да?
G>>А причем тут авторитет? Это результатами тестов подтверждается.
H>Так Рихтер и говорит, что управляемая куча это есть потеря перформанса. Впрочем, я уже понял, что твою слепую веру ничто не способно поколебать.
Слепая вера и невежество у тебя.
http://www.rsdn.ru/forum/Default.aspx?mid=3164491
Автор: gandjustas
Дата: 06.11.08


H>>>>>Там есть Private bytes.

G>>>>И че?
H>>>Это реальный показатель:
H>>>

Private Bytes represents the amount of private virtual memory a process has allocated and is the value that will rise of a process exhibiting a memory leak bug.

G>>Такой же эфимерный показательнь для GC.
H> При чем тут GC? Это показатель реально используемого/выделенного (не зарезервированного) объема, хоть с GC, хоть без GC
Что значит "реально используемого", ты ведь понимаешь что это далеко не тоже самое что "выделенного", GC нет смысла релизить память первых двух поколений, даже если она не используется. Метаданные в памяти также используются далеко не всегда, несмотря на то что память под них выделлена.
Неиспользуемые страницы могут долго находится в памяти, пока память не понадобится другим приложениям.
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 18.03.09 13:13
Здравствуйте, hattab, Вы писали:

G>>>>При выделении с помощью magic wand изображение мелькает и начинает тормозить интерфейс, в отличие от Paint.NET

H>>>Это ты вероятно с Paint.Net спутал В нем действительно, при выделении (Magic Wand) изображения на картинке 400x647 начинаются тормоза: загрузка CPU в районе 100%, частота подскакивает до своего максимума в 1700MHz. PhotoFiltre при этом спокойно работает на минимуме в 600MHz не нагружая процессор выше 8%.
G>>Я проверил на одинаковых картинках, жрет процессор одинаково, но у PhotoFiltre при этом торможит интерфейс

H>Я тоже проверил на одинаковых, и результат изложил выше, а посему позволь тебе не поверить.

У тебя видимо плохая карма что все .NET программы тормозят.
Re[3]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: neFormal 
Дата: 18.03.09 13:38
Оценка: +1 :)
Здравствуйте, dotidot, Вы писали:

D>А в геймдеве в хорошие времена денег не было для разработчиков, а сейчас вообще всё плохо думаю.


Вомгла(tm) захватила православный геймдев..
...coding for chaos...
Re[36]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: kuj 
Дата: 18.03.09 13:42
Здравствуйте, gandjustas, Вы писали:


G>>>>>При выделении с помощью magic wand изображение мелькает и начинает тормозить интерфейс, в отличие от Paint.NET

H>>>>Это ты вероятно с Paint.Net спутал В нем действительно, при выделении (Magic Wand) изображения на картинке 400x647 начинаются тормоза: загрузка CPU в районе 100%, частота подскакивает до своего максимума в 1700MHz. PhotoFiltre при этом спокойно работает на минимуме в 600MHz не нагружая процессор выше 8%.
G>>>Я проверил на одинаковых картинках, жрет процессор одинаково, но у PhotoFiltre при этом торможит интерфейс

H>>Я тоже проверил на одинаковых, и результат изложил выше, а посему позволь тебе не поверить.

G>У тебя видимо плохая карма что все .NET программы тормозят.

У него не карма плохая, а воображение хорошее.
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 18.03.09 13:43
Здравствуйте, Игoрь, Вы писали:

G>>3)Выделение памяти таким алгоритмом создет фрагментацию памяти, то есть остаются блоки невыделенной памяти малых размеров.

И>Угу, только проблема фрагментации кучи есть и в .net, кстати, как и мемори лики.
Тока мемлики там другие, не такие как в unmanaged. Ну и фрагментация скорее pin-анием вызывается. Обычную кучу GC утаптывать умеет.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 18.03.09 13:43
Оценка:2 (1) +2
Здравствуйте, gandjustas, Вы писали:

G>Эта наивная реализация во многих местах осталась и по сей день.

Это проблемы тех мест а не С++ в целом.

И>>Достаточно в таск менеджере взглянуть на кол-во используемой памяти .net прогой и С++ с эквивалентной функциональностью, чтобы понять, что ты гонишь.

G>Покажите две программы на .net и C++ с эквивалнтной функциональностью сложнее HelloWorld, потом посмотрим кто гонит.
G>Кроме того цифра в таск менеждере ни о чем не говорит, просто сверните приложение, будете удивлены.
Ты не в тот таскманагер смотришь, тебе уже сообщали.

G>>>3)Выделение памяти таким алгоритмом создет фрагментацию памяти, то есть остаются блоки невыделенной памяти малых размеров.

И>>Угу, только проблема фрагментации кучи есть и в .net, кстати, как и мемори лики.
G>Доказательства? Опять отправляю вас читать как работает выделение памяти и сборка мусора в .NET.
Кстати, как там на данный момент обстоит дело с GC в условиях наличия за-pin-ованых объектов?

G>Не зачастую, всегда, но GC работает в сотни раз реже, чем выделение-совобождение памяти стандартным аллокатором.

Это как напишешь. В unmanaged в реальном коде где надо performance выделение/освобождение памяти выносят "за скобки" и делают крайне редко.

И>>а) есть стэк;

G>Стек заставляет копировать объекты чаще, чем нужно.
С чего бы вдруг?

И>>b) есть placement new;

G>Теже яйца что и кастомный аллокатор, только сбоку
Только без затрат на выделение памяти. Т.е. совсем бесплатный считай.

И>>c) на мелких объектах свет клином не сошелся — можно и без них обойтись в критичной к скорости части;

G>Я тоже говорю что критичные по скорости вещи надо писать на C, а некритичные, на более высокоуровневых языках. C++ в таком раскладе места нет.
Как показывает практика — есть. В таком контексте С++ от С мало чем отличается, только поудобнее разве что. Не надо только на нём александрескить и говнокодить.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 18.03.09 14:56
Здравствуйте, niellune, Вы писали:

N>Дело в том что мне нравится язык C++ и меня интересует есть ли сейчас возможность устроиться куда-нибудь на начальную позицию?

N>В каких областях сейчас применяется C++?

Ой, ну господи, если ты таки реально решил работать разработчиком, то найти такое место -- лёгкий квест.
Берёшь палец и высасываешь из него крупные софтверные фирмы, которые работают в твоём городе и предположительно пишут на С++.
Идёшь на сайт такой компании, там ищешь "о компании", там "вакансии", либо сразу поиском. И читаешь список и требования...

Вот, например, так я узнал, что 1c пишет на дельфи (http://www.1c.ru/rus/firm1c/vacan/)
А вот в Яндексе, напрмер, на С/С++ (http://company.yandex.ru/inside/job/)
А в Кроке, походу вообще не пишут (http://www.croc.ru/vacancy/)
Ну и так далее...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 18.03.09 16:12
Оценка: +1
Здравствуйте, Игoрь, Вы писали:

И>PS

И>существенное преимущество GC — не надо следить за уничтожением объектов, что облегчает программирование, позволяет использовать всякие инетересные техники программирования, вроде замыканий. Но за эти удобства мы платим скоростью исполнения и большим расходом памяти. Вот собственно и все.

А я и на С++ фактически не слежу за уничтожением...
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 18.03.09 16:13
Здравствуйте, gandjustas, Вы писали:

G>>>9)такое распределение памяти увелиичивает cache-locality

И>>стандартные аллокаторы windows тоже оптимизированы на это дело
G>Рад за аллокатор Windows, только зачем он нужен если можно выделять память смещением указателя. Быстрее просто нечего придумать.

Можно придумать — стек С++ — у него нет сборки мусора
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 18.03.09 16:18
Оценка: +3
Здравствуйте, gandjustas, Вы писали:

И>>c) на мелких объектах свет клином не сошелся — можно и без них обойтись в критичной к скорости части;

G>Я тоже говорю что критичные по скорости вещи надо писать на C, а некритичные, на более высокоуровневых языках. C++ в таком раскладе места нет.

Такое предложение заставляет заподозрить недостаточное владение С++.
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 18.03.09 16:39
Оценка: -1
Здравствуйте, CreatorCray, Вы писали:

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


G>>Эта наивная реализация во многих местах осталась и по сей день.

CC>Это проблемы тех мест а не С++ в целом.
Да это вообще проблема неуправляемых сред.

И>>>Достаточно в таск менеджере взглянуть на кол-во используемой памяти .net прогой и С++ с эквивалентной функциональностью, чтобы понять, что ты гонишь.

G>>Покажите две программы на .net и C++ с эквивалнтной функциональностью сложнее HelloWorld, потом посмотрим кто гонит.
G>>Кроме того цифра в таск менеждере ни о чем не говорит, просто сверните приложение, будете удивлены.
CC>Ты не в тот таскманагер смотришь, тебе уже сообщали.
Пор цифирке в таскабаре — не ко мне, они меня мало интересуют. Я производидтельность профайлером меряю.

G>>>>3)Выделение памяти таким алгоритмом создет фрагментацию памяти, то есть остаются блоки невыделенной памяти малых размеров.

И>>>Угу, только проблема фрагментации кучи есть и в .net, кстати, как и мемори лики.
G>>Доказательства? Опять отправляю вас читать как работает выделение памяти и сборка мусора в .NET.
CC>Кстати, как там на данный момент обстоит дело с GC в условиях наличия за-pin-ованых объектов?
То что выделено до запиненного объекта — не уплотняется. Перерасход памяти из-за большого количесва запиненных объекктов — признак неграмотности программиста

G>>Не зачастую, всегда, но GC работает в сотни раз реже, чем выделение-совобождение памяти стандартным аллокатором.

CC>Это как напишешь. В unmanaged в реальном коде где надо performance выделение/освобождение памяти выносят "за скобки" и делают крайне редко.
Это примерно тоже самое что performance-critical код написать на С, а потом интеропать с ним из managed.

И>>>а) есть стэк;

G>>Стек заставляет копировать объекты чаще, чем нужно.
CC>С чего бы вдруг?
Передача объектов по значению вызывает копирование. Если бы такой проблемы не было, то не придумывали бы ссылки.

И>>>b) есть placement new;

G>>Теже яйца что и кастомный аллокатор, только сбоку
CC>Только без затрат на выделение памяти. Т.е. совсем бесплатный считай.
А откуда возьмется память в которой будет делаться placement new ?

И>>>c) на мелких объектах свет клином не сошелся — можно и без них обойтись в критичной к скорости части;

G>>Я тоже говорю что критичные по скорости вещи надо писать на C, а некритичные, на более высокоуровневых языках. C++ в таком раскладе места нет.
CC>Как показывает практика — есть. В таком контексте С++ от С мало чем отличается, только поудобнее разве что. Не надо только на нём александрескить и говнокодить.
Испоьзовать C++ как C_с_классами конечно можно, только это получается ну очень низкоуровневое программирование.
Такое использование может себе только гугл позволить, у него денег много.
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 18.03.09 16:41
Здравствуйте, NikeByNike, Вы писали:

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


G>>>>9)такое распределение памяти увелиичивает cache-locality

И>>>стандартные аллокаторы windows тоже оптимизированы на это дело
G>>Рад за аллокатор Windows, только зачем он нужен если можно выделять память смещением указателя. Быстрее просто нечего придумать.

NBN>Можно придумать — стек С++ — у него нет сборки мусора


Только многие высокоуровневые конструкции станут недоступны.
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 18.03.09 16:45
Здравствуйте, NikeByNike, Вы писали:

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


И>>>c) на мелких объектах свет клином не сошелся — можно и без них обойтись в критичной к скорости части;

G>>Я тоже говорю что критичные по скорости вещи надо писать на C, а некритичные, на более высокоуровневых языках. C++ в таком раскладе места нет.

NBN>Такое предложение заставляет заподозрить недостаточное владение С++.

У меня кроме владения С++ есть еще и владение другими языками.
Re[28]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 18.03.09 17:06
Оценка: +2
Здравствуйте, gandjustas, Вы писали:

G>>>Я тоже говорю что критичные по скорости вещи надо писать на C, а некритичные, на более высокоуровневых языках. C++ в таком раскладе места нет.


NBN>>Такое предложение заставляет заподозрить недостаточное владение С++.

G>У меня кроме владения С++ есть еще и владение другими языками.

Я недавно прикинул, что забыл 7 языков (базик, паскаль (7&Delphi), асм, питон, луа, шарп и яву), на которых немного писал в практических целях.
Тем не менее, человек владеющий С++ врядли будет предлагать использовать С, когда можно использовать С++. А если вы владеете С++ недостаточно — то исчезает последняя почва для спора С++ — язык сложный и филиграный и использовать его в качестве лома действительно не стоит.
Re[29]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 18.03.09 17:15
Оценка: -1 :)
Здравствуйте, NikeByNike, Вы писали:

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


G>>>>Я тоже говорю что критичные по скорости вещи надо писать на C, а некритичные, на более высокоуровневых языках. C++ в таком раскладе места нет.


NBN>>>Такое предложение заставляет заподозрить недостаточное владение С++.

G>>У меня кроме владения С++ есть еще и владение другими языками.

NBN>Я недавно прикинул, что забыл 7 языков (базик, паскаль (7&Delphi), асм, питон, луа, шарп и яву), на которых немного писал в практических целях.

Если вы на этих языках "писали немного в практических целях", то можно сказать что и не знали их.

NBN>Тем не менее, человек владеющий С++ врядли будет предлагать использовать С, когда можно использовать С++.

Поправочка: знающий С++ и незнающий других, более выкосоуровневых языков.
Я сам считал C++ венцом творения программистской мысли пока не знал ничего другого.
А при таком подходе "когда в руках молоток все вокруг кажется гвоздями".

Много ли у вас кода на C++ (с классами, шаблонами, полиморфизмом, эксепшенами и динамической памятью) в тех местах где нужно высокое быстродействие?

NBN>А если вы владеете С++ недостаточно — то исчезает последняя почва для спора С++ — язык сложный и филиграный и использовать его в качестве лома действительно не стоит.

Вообще сложность C++ такова что его использовать почти нигде не стоит.
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 18.03.09 17:33
Здравствуйте, gandjustas, Вы писали:

NBN>>Я недавно прикинул, что забыл 7 языков (базик, паскаль (7&Delphi), асм, питон, луа, шарп и яву), на которых немного писал в практических целях.

G>Если вы на этих языках "писали немного в практических целях", то можно сказать что и не знали их.
Гы

NBN>>Тем не менее, человек владеющий С++ врядли будет предлагать использовать С, когда можно использовать С++.

G>Поправочка: знающий С++ и незнающий других, более выкосоуровневых языков.
G>Я сам считал C++ венцом творения программистской мысли пока не знал ничего другого.
Я хорошо помню их возможности

G>Много ли у вас кода на C++ (с классами, шаблонами, полиморфизмом, эксепшенами и динамической памятью) в тех местах где нужно высокое быстродействие?

Я использую то что нужно там где оно нужно
А чем мешают шаблоны и классы там где нужна высокая производительность?

NBN>>А если вы владеете С++ недостаточно — то исчезает последняя почва для спора С++ — язык сложный и филиграный и использовать его в качестве лома действительно не стоит.

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

Кстати, если ты считаешь, что можно писать приложения для WM, которые будут жить в конкурентной среде на шарпе — ты сильно ошибаешься

Кстати, люди ратующие за С и шарп неоднократно обвиняли меня, что я пишу на С++ в шарп стиле
Re[31]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 18.03.09 18:00
Здравствуйте, NikeByNike, Вы писали:

G>>Много ли у вас кода на C++ (с классами, шаблонами, полиморфизмом, эксепшенами и динамической памятью) в тех местах где нужно высокое быстродействие?

NBN>Я использую то что нужно там где оно нужно
Это не ответ на вопрос.

NBN>А чем мешают шаблоны и классы там где нужна высокая производительность?

Вряд ли они там мешают, но не помогают — это точно.

NBN>>>А если вы владеете С++ недостаточно — то исчезает последняя почва для спора С++ — язык сложный и филиграный и использовать его в качестве лома действительно не стоит.

G>>Вообще сложность C++ такова что его использовать почти нигде не стоит.
NBN>Ага, кроме как для игр, приложений затрагивающих эмбеддед сложнее простейших контроллеров, кроссплатформенных приложений которым требуется шустрая работа.
С играми отдельная песня — там сейчас во всю идет перенос тяжелых вычислений на аппартаные ускорители. А все части игры, которе тяжелых вычислений не касаются вполне можно писать на высокоуровневых средствах. Кроме того .NET не такой медленный как тут некоторые пытаются показать.

Про ембед не знаю, сильно с ним не сталкивался.

А многим ли приложениям на десктопе нужная шустрая работа?
У меня таких только два — браузер и среда разработки. Причем опера (которая на C++) тормозит гораздо сильнее чем VS (которая на треть из managed модулей).

NBN>Кстати, если ты считаешь, что можно писать приложения для WM, которые будут жить в конкурентной среде на шарпе — ты сильно ошибаешься

Почему?

NBN>Кстати, люди ратующие за С и шарп неоднократно обвиняли меня, что я пишу на С++ в шарп стиле

Да вы, батенька, извращенец.
Кстати Linq у вас уже появился?
Re[32]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 18.03.09 18:29
Оценка: -1
Здравствуйте, gandjustas, Вы писали:

G>>>Много ли у вас кода на C++ (с классами, шаблонами, полиморфизмом, эксепшенами и динамической памятью) в тех местах где нужно высокое быстродействие?

NBN>>Я использую то что нужно там где оно нужно
G>Это не ответ на вопрос.
Вопрос некорректный. Есть критические места, где всё это есть. Есть места, где С++ стиль идёт по минимому — даже макросы используются.

NBN>>А чем мешают шаблоны и классы там где нужна высокая производительность?

G>Вряд ли они там мешают, но не помогают — это точно.
Помогают — облегчают рефакторинг и читаемость кода.

NBN>>Ага, кроме как для игр, приложений затрагивающих эмбеддед сложнее простейших контроллеров, кроссплатформенных приложений которым требуется шустрая работа.

G>С играми отдельная песня — там сейчас во всю идет перенос тяжелых вычислений на аппартаные ускорители. А все части игры, которе тяжелых вычислений не касаются вполне можно писать на высокоуровневых средствах. Кроме того .NET не такой медленный как тут некоторые пытаются показать.
Ну вот если нашу прогу для WM портануть на NET — то она как минимум будет запускатся не секунду, а 15-20 секунд.

G>Про ембед не знаю, сильно с ним не сталкивался.

Ага, а я сижу как на эмбеддеде, так и на десктопах с красивым гуём — во многом одним и тем же кодом

G>А многим ли приложениям на десктопе нужная шустрая работа?

G>У меня таких только два — браузер и среда разработки. Причем опера (которая на C++) тормозит гораздо сильнее чем VS (которая на треть из managed модулей).
Не пользуйся оперой, как и я

NBN>>Кстати, если ты считаешь, что можно писать приложения для WM, которые будут жить в конкурентной среде на шарпе — ты сильно ошибаешься

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

NBN>>Кстати, люди ратующие за С и шарп неоднократно обвиняли меня, что я пишу на С++ в шарп стиле

G>Да вы, батенька, извращенец.
Нет. Я пишу безопасно, просто и красиво, как оно и должно быть.

G>Кстати Linq у вас уже появился?

Он довольно тормозявый. А в шарпе уже появилась возможность с пользой использовать всю доступную память? (а то в текущем проекте пришлось поизвращаться и залазить в узкие рамки Думаю, что на шарпе было бы невозможно обеспечить даже близкое качество)

P.S.
Ты не думай, что я против шарпа, он мне очень нравится и сегодня я потратил десять минут на его пропаганду. Но, к сожалению, он плохо приспособлен для написания тех программ которые сражаются за массового покупателя.
Хотя его конечно полезно использовать для прототипирования и внутренних тулов.
Re[33]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 18.03.09 18:46
Здравствуйте, NikeByNike, Вы писали:

NBN>>>А чем мешают шаблоны и классы там где нужна высокая производительность?

G>>Вряд ли они там мешают, но не помогают — это точно.
NBN>Помогают — облегчают рефакторинг и читаемость кода.

Шаблоны улучшают читаемость только в самых простых случаях.

NBN>>>Ага, кроме как для игр, приложений затрагивающих эмбеддед сложнее простейших контроллеров, кроссплатформенных приложений которым требуется шустрая работа.

G>>С играми отдельная песня — там сейчас во всю идет перенос тяжелых вычислений на аппартаные ускорители. А все части игры, которе тяжелых вычислений не касаются вполне можно писать на высокоуровневых средствах. Кроме того .NET не такой медленный как тут некоторые пытаются показать.
NBN>Ну вот если нашу прогу для WM портануть на NET — то она как минимум будет запускатся не секунду, а 15-20 секунд.
Ну если вашу портануть может и будет тормозить, а если нормально написать на .NET не факт что будут лишние тормоза.

G>>Про ембед не знаю, сильно с ним не сталкивался.

NBN>Ага, а я сижу как на эмбеддеде, так и на десктопах с красивым гуём — во многом одним и тем же кодом
Наверное у нас разное понимание эмбеда.

NBN>>>Кстати, если ты считаешь, что можно писать приложения для WM, которые будут жить в конкурентной среде на шарпе — ты сильно ошибаешься

G>>Почему?
NBN>Потому что у неё будут плохие потребительские качества, хуже чем у конкурентов.
Потребительские качества очень мало зависят от языка разработки.

NBN>Её будет существенно сложнее ставить, она дольше загружаться и жрат существенно больше ресурсов.

За исключением установки .NET CF (один раз) проблем нет.

NBN>В добавок, там нет, допустим, линка И встречаются свои глюки.

У вас неправильные сведения, там есть Linq.
Там нету expression trees, но Linq to Objects и Linq to XML это не мешает.

NBN>Плюс, опять же, старый код

Ну от него никуда не деться.

NBN>>>Кстати, люди ратующие за С и шарп неоднократно обвиняли меня, что я пишу на С++ в шарп стиле

G>>Да вы, батенька, извращенец.
NBN>Нет. Я пишу безопасно, просто и красиво, как оно и должно быть.

G>>Кстати Linq у вас уже появился?

NBN>Он довольно тормозявый.
Я уже говорил что performance-critical код можно писать на C или юзать unsafe (почти тот же С).

NBN>А в шарпе уже появилась возможность с пользой использовать всю доступную память? (а то в текущем проекте пришлось поизвращаться и залазить в узкие рамки

Я нормально выделял на шарпе под 2 гига. Вроде как 32-битная ось больше выделить не позволит.

NBN>Думаю, что на шарпе было бы невозможно обеспечить даже близкое качество)

"Думаю" — слабый аргумент.

NBN>P.S.

NBN>Ты не думай, что я против шарпа, он мне очень нравится и сегодня я потратил десять минут на его пропаганду. Но, к сожалению, он плохо приспособлен для написания тех программ которые сражаются за массового покупателя.
За такой громкой фразой скрываются шаровары?
Re[33]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: kuj 
Дата: 18.03.09 19:01
Оценка: -1
Здравствуйте, NikeByNike, Вы писали:


G>>Кстати Linq у вас уже появился?

NBN>Он довольно тормозявый.
В каком месте?
NBN>А в шарпе уже появилась возможность с пользой использовать всю доступную память? (а то в текущем проекте пришлось поизвращаться и залазить в узкие рамки Думаю, что на шарпе было бы невозможно обеспечить даже близкое качество)
Разработчика, который пытается использовать ВСЮ память надо бить сильно по рукам.


NBN>Ты не думай, что я против шарпа, он мне очень нравится и сегодня я потратил десять минут на его пропаганду. Но, к сожалению, он плохо приспособлен для написания тех программ которые сражаются за массового покупателя.

Чушь полная.
Re[34]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 18.03.09 19:28
Оценка: -1
Здравствуйте, gandjustas, Вы писали:

NBN>>Помогают — облегчают рефакторинг и читаемость кода.

G>
G>Шаблоны улучшают читаемость только в самых простых случаях.
Фигня. Заявление аналогично: линк нужен очень редко.

NBN>>Ну вот если нашу прогу для WM портануть на NET — то она как минимум будет запускатся не секунду, а 15-20 секунд.

G>Ну если вашу портануть может и будет тормозить, а если нормально написать на .NET не факт что будут лишние тормоза.
Факт.

G>>>Про ембед не знаю, сильно с ним не сталкивался.

NBN>>Ага, а я сижу как на эмбеддеде, так и на десктопах с красивым гуём — во многом одним и тем же кодом
G>Наверное у нас разное понимание эмбеда.
WM — это эмбеддед, бывает эмбеддед и проще и сложнее.

NBN>>>>Кстати, если ты считаешь, что можно писать приложения для WM, которые будут жить в конкурентной среде на шарпе — ты сильно ошибаешься

G>>>Почему?
NBN>>Потому что у неё будут плохие потребительские качества, хуже чем у конкурентов.
G>Потребительские качества очень мало зависят от языка разработки.
02-25. Зависит. На тормозявых и неоптимальных языках нельзя писать оптимальные приложения. Практика это подтверждает самым что ни есть великолепным образом.

NBN>>Её будет существенно сложнее ставить, она дольше загружаться и жрат существенно больше ресурсов.

G>За исключением установки .NET CF (один раз) проблем нет.
1. Один раз для каждого нета.
2. Это минимум в _2_ раза усложняет процесс инсталляции, это просто недопустимо, даже для писюка.

NBN>>В добавок, там нет, допустим, линка И встречаются свои глюки.

G>У вас неправильные сведения, там есть Linq.
G>Там нету expression trees, но Linq to Objects и Linq to XML это не мешает.
Ага, самого клёвого нет

NBN>>Плюс, опять же, старый код

G>Ну от него никуда не деться.
Ага, он делает разработку на С++ значительно проще, чем разработка на шарпе и лучший результат в конечном результате.
Тут ведь как — чуть слажал и тебя конкуренты съели

G>>>Кстати Linq у вас уже появился?

NBN>>Он довольно тормозявый.
G>Я уже говорил что performance-critical код можно писать на C или юзать unsafe (почти тот же С).
Вот это — настоящее извращение, ка я уже говорил — показатель невладения С++, а следовательно бессмыслености спора.

NBN>>А в шарпе уже появилась возможность с пользой использовать всю доступную память? (а то в текущем проекте пришлось поизвращаться и залазить в узкие рамки

G>Я нормально выделял на шарпе под 2 гига. Вроде как 32-битная ось больше выделить не позволит.
Во-первых, позволяет, а во вторых — начинается GC с использованием диска, а это п..ц и прости-прощай юзабилити

NBN>>Думаю, что на шарпе было бы невозможно обеспечить даже близкое качество)

G>"Думаю" — слабый аргумент.
Достаточный. Это называется экспертная оценка

NBN>>P.S.

NBN>>Ты не думай, что я против шарпа, он мне очень нравится и сегодня я потратил десять минут на его пропаганду. Но, к сожалению, он плохо приспособлен для написания тех программ которые сражаются за массового покупателя.
G>За такой громкой фразой скрываются шаровары?
Программы продающиеся индивидуальным пользователям, те которые живут в конкурентной среде. Игры с бюджетом в 10 мегабаксов для PS3 — это шаровары?
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 18.03.09 20:32
Оценка:1 (1) -2 :)
Здравствуйте, NikeByNike, Вы писали:

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


NBN>>>Помогают — облегчают рефакторинг и читаемость кода.

G>>
G>>Шаблоны улучшают читаемость только в самых простых случаях.
NBN>Фигня. Заявление аналогично: линк нужен очень редко.
На C++ он вообще не нужен.
А вот с шаблонами все гораздо прозаичнее.
Когда вы пишите vector<string> то читаемость улучшается. А когда идет vector<sometemple<anothertemplate<param> >, anotherparam> > то читаемости не остается вообще. При этом нету вывода типов и вам придется каждый раз писать эту аннотацию. typedef спасает, но далеко не всегда.
Например при ипользовании ФВП с помощью буста затайпдефить все функции не получися.

А еще не дай бог где-нить ошибиться, компилятор моментально вывалит кучу нечитаемых ошибок почему класс не может быть инстанцирован.

NBN>>>Ну вот если нашу прогу для WM портануть на NET — то она как минимум будет запускатся не секунду, а 15-20 секунд.

G>>Ну если вашу портануть может и будет тормозить, а если нормально написать на .NET не факт что будут лишние тормоза.
NBN>Факт.
Доказательства будут?

NBN>>>>>Кстати, если ты считаешь, что можно писать приложения для WM, которые будут жить в конкурентной среде на шарпе — ты сильно ошибаешься

G>>>>Почему?
NBN>>>Потому что у неё будут плохие потребительские качества, хуже чем у конкурентов.
G>>Потребительские качества очень мало зависят от языка разработки.
NBN>02-25. Зависит. На тормозявых и неоптимальных языках нельзя писать оптимальные приложения. Практика это подтверждает самым что ни есть великолепным образом.
Не надо обвинять язык в том что вы не можете написать на нем нетормозявое приложение. Это не его вина.


NBN>>>Её будет существенно сложнее ставить, она дольше загружаться и жрат существенно больше ресурсов.

G>>За исключением установки .NET CF (один раз) проблем нет.
NBN>1. Один раз для каждого нета.
Если у вас одно приложение, то как оно вас волнует?

NBN>2. Это минимум в _2_ раза усложняет процесс инсталляции, это просто недопустимо, даже для писюка.

Какой ужас, как же люди живут...

NBN>>>В добавок, там нет, допустим, линка И встречаются свои глюки.

G>>У вас неправильные сведения, там есть Linq.
G>>Там нету expression trees, но Linq to Objects и Linq to XML это не мешает.
NBN>Ага, самого клёвого нет
Чего?

NBN>>>Плюс, опять же, старый код

G>>Ну от него никуда не деться.
NBN>Ага, он делает разработку на С++ значительно проще, чем разработка на шарпе и лучший результат в конечном результате.
Он ниче проще не делает, во многих случаях даже делает хуже. Переписывание всего — огромный риск, на который далеко не все идут.

NBN>Тут ведь как — чуть слажал и тебя конкуренты съели

Только от языка это ну вообще никак не зависит.

G>>>>Кстати Linq у вас уже появился?

NBN>>>Он довольно тормозявый.
G>>Я уже говорил что performance-critical код можно писать на C или юзать unsafe (почти тот же С).
NBN>Вот это — настоящее извращение, ка я уже говорил — показатель невладения С++, а следовательно бессмыслености спора.

не смешите, вы уже многократоно показали свое невладение ничем кроме С++, да еще и бравируете этим.

NBN>>>А в шарпе уже появилась возможность с пользой использовать всю доступную память? (а то в текущем проекте пришлось поизвращаться и залазить в узкие рамки

G>>Я нормально выделял на шарпе под 2 гига. Вроде как 32-битная ось больше выделить не позволит.
NBN>Во-первых, позволяет, а во вторых — начинается GC с использованием диска, а это п..ц и прости-прощай юзабилити

У вас программы столько памяти жрут?
Я под два гига выделял исключительно для рассчетов матириц порядка 1000*1000.
Кстати почитайте как работает выделение памяти для больших блоков в .NET, не будет большого тормозняка.

NBN>>>Думаю, что на шарпе было бы невозможно обеспечить даже близкое качество)

G>>"Думаю" — слабый аргумент.
NBN>Достаточный. Это называется экспертная оценка
Какой из вас эксперт, если вы ниче дальше С++ и шароварок толком не видели.

NBN>>>P.S.

NBN>>>Ты не думай, что я против шарпа, он мне очень нравится и сегодня я потратил десять минут на его пропаганду. Но, к сожалению, он плохо приспособлен для написания тех программ которые сражаются за массового покупателя.
G>>За такой громкой фразой скрываются шаровары?
NBN>Программы продающиеся индивидуальным пользователям, те которые живут в конкурентной среде. Игры с бюджетом в 10 мегабаксов для PS3 — это шаровары?
И сколько из этого бюджета ушло на разработку?
Я видел игры с бюждетом в несколько миллионов рублей, там для программиста работы на пару месяцев.
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 18.03.09 20:52
Оценка: -3 :)
Здравствуйте, NikeByNike, Вы писали:

G>>>>Кстати Linq у вас уже появился?

NBN>>>Он довольно тормозявый.
G>>Я уже говорил что performance-critical код можно писать на C или юзать unsafe (почти тот же С).
NBN>Вот это — настоящее извращение, ка я уже говорил — показатель невладения С++, а следовательно бессмыслености спора.

NBN>>>Думаю, что на шарпе было бы невозможно обеспечить даже близкое качество)

G>>"Думаю" — слабый аргумент.
NBN>Достаточный. Это называется экспертная оценка

Ваши высказывания отлично иллюстрирует следующая картинка:

ЗЫ. Мопед не мой, привет QBitу
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: kuj 
Дата: 18.03.09 21:32
Оценка: -2
Здравствуйте, NikeByNike, Вы писали:


NBN>>>Помогают — облегчают рефакторинг и читаемость кода.

G>>
G>>Шаблоны улучшают читаемость только в самых простых случаях.
NBN>Фигня. Заявление аналогично: линк нужен очень редко.
У тебя Александреску головного мозга.

Шаблоны улучшают читаемость...

NBN>>>Её будет существенно сложнее ставить, она дольше загружаться и жрат существенно больше ресурсов.

G>>За исключением установки .NET CF (один раз) проблем нет.
NBN>1. Один раз для каждого нета.
NBN>2. Это минимум в _2_ раза усложняет процесс инсталляции, это просто недопустимо, даже для писюка.
Практика доказывает, что допустимо и для писюка и для коммуникатора. Более того, сейчас дофига новых приложения для коммуникаторов на .NET CF и народ их кушает, и говорит спасибо, и просит добавки.

NBN>>>А в шарпе уже появилась возможность с пользой использовать всю доступную память? (а то в текущем проекте пришлось поизвращаться и залазить в узкие рамки

G>>Я нормально выделял на шарпе под 2 гига. Вроде как 32-битная ось больше выделить не позволит.
NBN>Во-первых, позволяет, а во вторых — начинается GC с использованием диска, а это п..ц и прости-прощай юзабилити
Проверил. Не вижу никакого использования диска. 64 bit OS, 8GB RAM, выделил 4.5GB — ровно 0 disk I/O.

Еще лажовые камменты будут?

NBN>>>Думаю, что на шарпе было бы невозможно обеспечить даже близкое качество)

G>>"Думаю" — слабый аргумент.
NBN>Достаточный. Это называется экспертная оценка
ололол по тебе видно какой ты эксперт.

NBN>>>Ты не думай, что я против шарпа, он мне очень нравится и сегодня я потратил десять минут на его пропаганду. Но, к сожалению, он плохо приспособлен для написания тех программ которые сражаются за массового покупателя.

G>>За такой громкой фразой скрываются шаровары?
NBN>Программы продающиеся индивидуальным пользователям, те которые живут в конкурентной среде. Игры с бюджетом в 10 мегабаксов для PS3 — это шаровары?
О, еще один пример твоей "экспертной оценки"? Нашел самый критичный по ресурсам класс приложений и тут же облажался — кури про xbox. ;]
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Игoрь 
Дата: 18.03.09 21:43
Оценка: +2 -1 :)
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, Игoрь, Вы писали:


G>>>Маленький ликбез:

G>>>1)Стандартный аллокатор поддерживает связный список блоков памяти, выделение нового и освобождение блока вызывает проход по списку, который имеет алгоритмическое время O(n) от количества блоков.
И>>Ты сам в это веришь? Это наивная реализация 80-ых годов. Сейчас используются всякого рода оптимизации, позволяющие минимизировать время поиска и частично отказаться от блокировок кучи. Например, в windows heap создается, если мне память не изменяет, на одну кучу 128 ассоциативных однонаправленных списков, не требующих блокировок.
G>Эта наивная реализация во многих местах осталась и по сей день.
Это не аргумент, вообще.

G>>>При постоянных выделениях-освобождениях памяти получются очень большие затраты на эту простую операцию.

И>>В С# в целом та же херня.
G>Доказательства? Может сначала статью про .NETовский JIT прочитаете. На этом сайте статьи есть.
Еще раз. То, что ты написал в предыдущем посте о преимуществах хипах — ерунда полнейшая. Почему? Да потому что в С++ используется связка стэк + хип. И мелкие часто создаваемые/удаляемые объекты создаются на стэке, а не в хипе. Поэтому все те "преимущества" .net идут лесом. Когда я говорил, что "в C# таже херня", я имел ввиду ситуацию в целом, а не какие-то частные случаи. А именно — работу сборщика мусора и дефрагментатора, который осуществляет перенос объектов в памяти. А это совсем не дешевые операции. Кроме того, если я правильно помню, то при выделении памяти под объект, происходит еще и предварительное обнуление памяти. Далее, все, что ты тут расписал — это касается только мелких объектов. А крупные объекты размещаются в LOH, которая работая скорее по принципу сишной кучи.

G>>>2)При выделении блока идет небольшой оверхед, который зависит от реализации, 16-32 байта кажись. Исследования исходных кодов программ показывают что средний размер объекта составляет от 32 до 128 байт, при такких размерах оверхед является очень значительным.

И>>Достаточно в таск менеджере взглянуть на кол-во используемой памяти .net прогой и С++ с эквивалентной функциональностью, чтобы понять, что ты гонишь.
G>Покажите две программы на .net и C++ с эквивалнтной функциональностью сложнее HelloWorld, потом посмотрим кто гонит.
G>Кроме того цифра в таск менеждере ни о чем не говорит, просто сверните приложение, будете удивлены.
Расскажи как сервисы свернуть... Я поищу что-то из публичных прог.

И>>Кроме того, в С++ принято мелкие объекты создавать на стеке. А если нужно в динамической памяти разместить объект, то есть placement new, который позволяет разместить объект в уже выделенной памяти.

G>Ага, это все увеличивает энтропию языка, то есть количество свпособов сделать одно и тоже по-разному.
Глупость.

G>>>3)Выделение памяти таким алгоритмом создет фрагментацию памяти, то есть остаются блоки невыделенной памяти малых размеров.

И>>Угу, только проблема фрагментации кучи есть и в .net, кстати, как и мемори лики.
G>Доказательства? Опять отправляю вас читать как работает выделение памяти и сборка мусора в .NET.
Лучше сам дуй читать про размещение объектов в LOH и ее фрагментацию.
G>Про мемори лики хочу узнать поподробнее, как их получить, потом сравните это с простотой получчения лика в unamanged коде.
В unamanaged коде лик легко обнаружить и избавиться от него, в managed его получить гораздо сложнее, но и найти и избавиться сложнее. мемлики в С++ — страшилки для детей. Я вот сейчас глянул в С++ проект — на 10МБ кода 16 явных вызовов new.

G>>>4)Алгоритм выделения памяти не потокобезопасный, требуется синхронизация.

И>>GC тоже не потокобезопасный, и зачастую требует не просто синхронизации, но и приостановки работы потоков.
G>Не зачастую, всегда, но GC работает в сотни раз реже, чем выделение-совобождение памяти стандартным аллокатором.
gc и работы гораздо больше выполняет.

G>>>5)В программах на С++ часто делают свои аллокаторы, которые выделяют память для маленькиз объектов чтобы избежать описанно выше оверхеда как по потребляемой памяти, так и по времени этой операции

И>>В С++ такое делают крайне-крайне редко. Потому что
И>>а) есть стэк;
G>Стек заставляет копировать объекты чаще, чем нужно.
просто глупость.

И>>b) есть placement new;

G>Теже яйца что и кастомный аллокатор, только сбоку
Нет, кастомный аллокатор — штука серьезная, который пишется месяцами. А это бесплатная штукенция, которая позваоляет оптимизировать критичный код и уделать .net.

И>>c) на мелких объектах свет клином не сошелся — можно и без них обойтись в критичной к скорости части;

G>Я тоже говорю что критичные по скорости вещи надо писать на C, а некритичные, на более высокоуровневых языках. C++ в таком раскладе места нет.
На С стоит писать код режима ядра, а вот околосистемные сервисы для С++ — самое оно. Например, у меня есть железка на которой крутится линукс под высокой нагрузкой. Нужно написать какой-то демон для него — однозначно С++.

G>>>Теперь о GC

G>>>6)Выделение памяти в .NET происходит очень просто — инкремент указателя. Никаких дополнительных операций не происходитю
И>>Ага, аж десять раз. Это как бог на душу положит. Может и GC запуститься с полной остановкой всех потоков. Веселуха...
G>Читайте как работает GC, он не может просто так взять и запуститься.
А я и не говорю, что он совсем от фонаря запускается. Но речь же шла о вызове new, так вот далеко не всегда этот вызов будет сведен к одному инкременту.

G>>>7)Оверхед по выделяемой памяти равен 8 байтам на 32-битной платформе (может ошибаюсь немного, лень смотреть)

И>>уже писал про мелкие объекты и про то, что общий оверхед памяти для .net программ хорошо больше цэпэпэ.
G>А вы вообще ветку читали перед тем как это постить?
читали

G>>>8)Кроме того что выделение памяти выполняется моментально, эта операция еще и потокобезопасна.

И>>в c# выделение памяти не более потокобезопасно, чем в с++
G>Полный бред.
взаимно.

G>>>9)такое распределение памяти увелиичивает cache-locality

И>>стандартные аллокаторы windows тоже оптимизированы на это дело
G>Рад за аллокатор Windows, только зачем он нужен если можно выделять память смещением указателя. Быстрее просто нечего придумать.
Запарил, учи мат часть. Далеко не всегда выделение памяти сводится к простому смещению. И кроме того, в С++ при выделении на стэке для малых объектов это буквально одна инструкция.

G>>>10)GC собирает мусор не тогжа когда захочется, а при нехватке памяти в нулевом поколении

И>>по сути это и означает, что когда захочется, особенно если речь идет о более-менее больших системах
G>И че? сборка памяти в нулевом поколении работает быстре чем использование алоокатора на списках при выделении-освобождении того же объема памяти.
Того же размера, это какого? Возьмем размер 100 килобайт, быстрее? С учетом того, что такой размер будет выделен не в SOH, а в LOH. А если речь опять про что-то мелкое, так оно и стэке может быть выделено.

G>>>12)Единственный критический недостаток GC заключается в том, что он очень плохо работает когда кончается свободная физическая память, сборка мусора во втором поколении заставляет поднимать все страницы памяти из свопа и это может нереально тормозить.

G>>>13)Но даже этот недостаток можно побороть. Можно сборку мусора во втором поколении маскировать под каую-либо длительную операцию (например сохранение или открытие файла), а при расчетах использовать рецепт описанный здесь
И>>это в общем-то самообман
G>Самообман — думать что C++ всегда быстрее.
Не всегда, на каких-то синтетических тестах может быть быстрее. А-ля выделение/удаление мелких объектов.

И>>PS

И>>существенное преимущество GC — не надо следить за уничтожением объектов, что облегчает программирование, позволяет использовать всякие инетересные техники программирования, вроде замыканий. Но за эти удобства мы платим скоростью исполнения и большим расходом памяти. Вот собственно и все.
G>Тесты будут? Или вы тоже омновываете свое мнение на просмотре пары говнопрограмм?
Ну я от тебя тестов тоже что-то не видел. А мое мнение базируется на трехлетнем опыте работы с .net. Не сильно много, но достаточно, чтобы делать определенные выводы. А ты, похоже, просто фанатик.
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Игoрь 
Дата: 18.03.09 21:47
Оценка: +1
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, Игoрь, Вы писали:


G>>>3)Выделение памяти таким алгоритмом создет фрагментацию памяти, то есть остаются блоки невыделенной памяти малых размеров.

И>>Угу, только проблема фрагментации кучи есть и в .net, кстати, как и мемори лики.
CC>Тока мемлики там другие, не такие как в unmanaged. Ну и фрагментация скорее pin-анием вызывается. Обычную кучу GC утаптывать умеет.
Не, я имел ввиду Large Object Heap (LOH), которая работает как сишная куча, и для нее дефрагментация не осуществляется из-за трудоемкости процесса.
Re[36]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 18.03.09 22:17
Здравствуйте, gandjustas, Вы писали:

G>Когда вы пишите vector<string> то читаемость улучшается. А когда идет vector<sometemple<anothertemplate<param> >, anotherparam> > то читаемости не остается вообще.

Это очень плохой стиль.

NBN>>>>Ну вот если нашу прогу для WM портануть на NET — то она как минимум будет запускатся не секунду, а 15-20 секунд.

G>>>Ну если вашу портануть может и будет тормозить, а если нормально написать на .NET не факт что будут лишние тормоза.
NBN>>Факт.
G>Доказательства будут?
Нет необходимости, это 1. проверялось у нас. 2. отсутствуют решения на шарпе у конкурентов.

NBN>>02-25. Зависит. На тормозявых и неоптимальных языках нельзя писать оптимальные приложения. Практика это подтверждает самым что ни есть великолепным образом.

G>Не надо обвинять язык в том что вы не можете написать на нем нетормозявое приложение. Это не его вина.
Написать нетормозявое приложение можно, просто оно будет сильно уступать по функционалу приложениям созданным более подходящими средствами.

NBN>>>>Её будет существенно сложнее ставить, она дольше загружаться и жрат существенно больше ресурсов.

G>>>За исключением установки .NET CF (один раз) проблем нет.
NBN>>1. Один раз для каждого нета.
G>Если у вас одно приложение, то как оно вас волнует?
У нас несколько десятков приложений.

NBN>>2. Это минимум в _2_ раза усложняет процесс инсталляции, это просто недопустимо, даже для писюка.

G>Какой ужас, как же люди живут...
Пользуются удобным и быстрым нативом.

G>>>Ну от него никуда не деться.

NBN>>Ага, он делает разработку на С++ значительно проще, чем разработка на шарпе и лучший результат в конечном результате.
G>Он ниче проще не делает, во многих случаях даже делает хуже. Переписывание всего — огромный риск, на который далеко не все идут.
Не беспокойся — с нуля на шарпе тоже не пишут Точнее пишут! Ещё как пишут, ведутся на рекламу. Потом либо переписывают на С++, либо пропадают

NBN>>Тут ведь как — чуть слажал и тебя конкуренты съели

G>Только от языка это ну вообще никак не зависит.
Ну ты голову из песка вытащи и пойми, что не все языки вместе со своими енвайраментами неодинаково полезны.

G>не смешите, вы уже многократоно показали свое невладение ничем кроме С++, да еще и бравируете этим.

Я знаю возможности шарпа и хорошо представляю как он устроен внутри.

G>>>"Думаю" — слабый аргумент.

NBN>>Достаточный. Это называется экспертная оценка
G>Какой из вас эксперт, если вы ниче дальше С++ и шароварок толком не видели.
Переход на личности означает то что аргументы у тебя кончились, а следовательно ты слил.
Re[36]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 18.03.09 22:17
Оценка: +1 :)
Здравствуйте, gandjustas, Вы писали:

NBN>>>>Думаю, что на шарпе было бы невозможно обеспечить даже близкое качество)

G>>>"Думаю" — слабый аргумент.
NBN>>Достаточный. Это называется экспертная оценка

G>Ваши высказывания отлично иллюстрирует следующая картинка:

G>http://i41.tinypic.com/30vemo1.jpg
G>ЗЫ. Мопед не мой, привет QBitу

Переход на личности, слив защитан.
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 18.03.09 22:33
Здравствуйте, Игoрь, Вы писали:

У меня тут пару вопросов возникло и дополнений...

И>Еще раз. То, что ты написал в предыдущем посте о преимуществах хипах — ерунда полнейшая. Почему? Да потому что в С++ используется связка стэк + хип. И мелкие часто создаваемые/удаляемые объекты создаются на стэке, а не в хипе. Поэтому все те "преимущества" .net идут лесом. Когда я говорил, что "в C# таже херня", я имел ввиду ситуацию в целом, а не какие-то частные случаи. А именно — работу сборщика мусора и дефрагментатора, который осуществляет перенос объектов в памяти. А это совсем не дешевые операции. Кроме того, если я правильно помню, то при выделении памяти под объект, происходит еще и предварительное обнуление памяти. Далее, все, что ты тут расписал — это касается только мелких объектов. А крупные объекты размещаются в LOH, которая работая скорее по принципу сишной кучи.

В .Net ведь стек тоже вполне себе используется. И если объект выгоднее размещать в стеке, то можно его просто сделать структурой. Единственное, можно попенять на то, что уже готовые конструкции, такие как, например массив, фиг запихнешь в стек. Т.е. я к чему. Связку "стек + хип" вполне можно и в C# юзать, если почти все эти классы сам пишешь. И, чесс говоря, есть ощущение, что это преимущество C++ высосано из пальца.

И>В unamanaged коде лик легко обнаружить и избавиться от него, в managed его получить гораздо сложнее, но и найти и избавиться сложнее. мемлики в С++ — страшилки для детей. Я вот сейчас глянул в С++ проект — на 10МБ кода 16 явных вызовов new.

Если бы в unmanaged всё было так легко, про GC ничего бы не говорили. Теоретически в unmanaged утечку можно вообще не обнаружить. В managed такие вещи решаются на ура при помощи профайлеров.

G>>>>7)Оверхед по выделяемой памяти равен 8 байтам на 32-битной платформе (может ошибаюсь немного, лень смотреть)

И>>>уже писал про мелкие объекты и про то, что общий оверхед памяти для .net программ хорошо больше цэпэпэ.
А вот это можно неплохо подтвердить на примере WPF. Центральным классом там является DependencyObject со свойствами зависимостей. Так вот этот самый DependencyObject хранит значения всех этих свойств, не являющихся конструкциями языка, в виде object. Поэтому получается, что если тип свойства — структура, имеем боксинг. А это в любом случае, да — лишний расход памяти.
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[37]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 18.03.09 22:37
Оценка: :)
Здравствуйте, NikeByNike, Вы писали:

NBN>Не беспокойся — с нуля на шарпе тоже не пишут Точнее пишут! Ещё как пишут, ведутся на рекламу.

Так это получается, что все в форумах NET и NET GUI просто дебилы какие-то, выбирающие инструмент по рекламкам.
Считай это как призыв не юзать подобные аргументы. Все же в деле заняты, а не в бирюльках.
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[41]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 18.03.09 22:40
Здравствуйте, gandjustas, Вы писали:

H>>Давай ты последуешь своему совету и подумаешь, что такое граф и, как с помощью битового флага (а точнее речь идет битовом массиве, как я понимаю) можно определить находжение объекта в куче для последующих манипуляций с оным.

G>http://www.rsdn.ru/article/dotnet/GC.xml
Автор(ы): Чистяков Влад (VladD2)
Дата: 14.06.2006
Уже много сказано слов о том, что такое GC, чем он хорош и как лучше его применять. Но, наверно, очень многим хочется знать, как устроен конкретный GC. Данная статья открывает некоторые подробности устройчтва GC в .NET Framework.


Ты этой ссылкой только подтверждаешь мой тезис о том, что инфраструктура управления памятью в .Net более требовательна к оной

Из заключения:

При наличии большого объема памяти .NET-приложения действительно не стесняются в запросах. Но на самом деле это связано с тем, что алгоритмы GC работают более эффективно при использовании больших объемов памяти. Если памяти в системе начинает не хватать, GC переходит в более экономный режим работы.


Ну и про отрицательное влияние на перформанс тоже сказано... не смотря на все оптимизации.

H>>>>Ты же сам про процессорный кэш упоминал... Забыл?

G>>>Не забыл — сборка муроса достаточно редкий процесс и на время его работы программа останавливается.
H>>Ты посмотри, как этот редкий процесс накручивает счетчик, когда ты мышкой водишь над кнопками на тулбаре.
G>Накручивает до определенной степени, потом переставет.

У меня не получилось дождаться, пока перестанет. Не перестанет он.

H>>К тому же не забывай, я давал пример, когда на один вызод метода по XML-RPC происходит 3 сборки мусора. Не веришь мне, проверь сам.

G>Не надо в пример приводить какую-то левую либу.

Да какой бы я пример не привел, ты назовешь его левым или говнософтом. Ладно, еще пример из говнософта. Запускаем Paint.NET и открываем в нем картинку (я открыл 1600x1200). Выделяем всю картинку Ctrl+A. Смотрим на счетчики GC и видим, что в мирно крутящем пунктир выделения Paint.NET'е, счетчик GC тикает раз-два-три в секунду.

H>>Вообще-то тут речь идет об освобождении ресурсов. У стандартного аллокатора есть информация о размере освобождаемого блока, и нет нужды мотаться за ней в мету.

G>"мотаться" — громко сказано, это пара ассемблерных команд. Стандартному аллокатору чтобы поместить свободный блок в список приходится мотаться.

Стандартный подчиняется ручному управлению, и на работу влияния не оказывает. В отличие от GC решившего вдруг марафет навести.

H>>Так Рихтер и говорит, что управляемая куча это есть потеря перформанса. Впрочем, я уже понял, что твою слепую веру ничто не способно поколебать.

G>Слепая вера и невежество у тебя.
G>http://www.rsdn.ru/forum/Default.aspx?mid=3164491
Автор: gandjustas
Дата: 06.11.08


Во-первых это синтетика, не имеющая ничего общего с реальным миром. Во-вторых это не правильная синтетика.

H>>>>Это реальный показатель:

H>>>>

Private Bytes represents the amount of private virtual memory a process has allocated and is the value that will rise of a process exhibiting a memory leak bug.

G>>>Такой же эфимерный показательнь для GC.
H>> При чем тут GC? Это показатель реально используемого/выделенного (не зарезервированного) объема, хоть с GC, хоть без GC
G>Что значит "реально используемого", ты ведь понимаешь что это далеко не тоже самое что "выделенного", GC нет смысла релизить память первых двух поколений, даже если она не используется. Метаданные в памяти также используются далеко не всегда, несмотря на то что память под них выделлена.
G>Неиспользуемые страницы могут долго находится в памяти, пока память не понадобится другим приложениям.

Мне, как пользователю, не интересны резоны GC. Я вижу результат -- чрезмерное потребление. Делаем простой эксперимент. Запускаем Paint.NET, который откушал сразу 35Mb (судя по твоим словам, большая часть этой цифры -- резерв, который будет возвращен в систему по первому требованию). Теперь начинаем запускать много тяжелого софта: две Delphi IDE, Open Office Writer, Abode Reader, Opera (она у меня жрет в районе 160Mb, из-за размера почтовой базы), VirtualBox. Все система ушла в своп. Смотрим на потребление Paint.NET... оно снизилось ровно на 300Кб. Выводы?
Re[42]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 18.03.09 22:49
Оценка: :)))
Здравствуйте, hattab, Вы писали:

H>Мне, как пользователю, не интересны резоны GC. Я вижу результат -- чрезмерное потребление. Делаем простой эксперимент. Запускаем Paint.NET, который откушал сразу 35Mb (судя по твоим словам, большая часть этой цифры -- резерв, который будет возвращен в систему по первому требованию). Теперь начинаем запускать много тяжелого софта: две Delphi IDE, Open Office Writer, Abode Reader, Opera (она у меня жрет в районе 160Mb, из-за размера почтовой базы), VirtualBox. Все система ушла в своп. Смотрим на потребление Paint.NET... оно снизилось ровно на 300Кб. Выводы?

Блин, вот что правда 100 или 200 мегов оперативы сейчас кому-то принципиально? Я когда приводил скриншот с Creative Docs, там еще Оракл светился. Жрал 250 мегов, но при этом он у меня вообще никак не юзается. Я его однажы установил и всё. И вот оно тяпает 200 мегов при запуске и оно нативное. Но чесс говоря, что есть оно, что нет, мне фиолетово. На компе 1 Гиг оперативы. Ххах. А было бы оно managed, наверняка бы и эти 200 мег припомнили
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[28]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 18.03.09 22:50
Здравствуйте, MxKazan, Вы писали:

MK>В .Net ведь стек тоже вполне себе используется. И если объект выгоднее размещать в стеке, то можно его просто сделать структурой. Единственное, можно попенять на то, что уже готовые конструкции, такие как, например массив, фиг запихнешь в стек. Т.е. я к чему. Связку "стек + хип" вполне можно и в C# юзать, если почти все эти классы сам пишешь. И, чесс говоря, есть ощущение, что это преимущество C++ высосано из пальца.


Я тоже сильной применимости не вижу, но вещь определенно не плохая.

И>>В unamanaged коде лик легко обнаружить и избавиться от него, в managed его получить гораздо сложнее, но и найти и избавиться сложнее. мемлики в С++ — страшилки для детей. Я вот сейчас глянул в С++ проект — на 10МБ кода 16 явных вызовов new.

MK>Если бы в unmanaged всё было так легко, про GC ничего бы не говорили. Теоретически в unmanaged утечку можно вообще не обнаружить. В managed такие вещи решаются на ура при помощи профайлеров.

Нативный FastMM умеет рапортовать об утечках (с адресами, с типами). Плюс есть различные тулы для контроля.
Re[31]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 18.03.09 22:52
Здравствуйте, CreatorCray, Вы писали:

H>>Новая работает

CC>Надо будет как нить ее доработать.
CC>К примеру она не "видит" аллокации из динамически подгружаемых DLL, только из статики. Не будет работать с упакованными/защищенными EXE и т.п. Как нить сделать чтобы можно было отловить откуда была выделена/освобождена память (StackWalk), правда глядя на объем данных, получаемый с простой программки (~200Mb) становится понятно что stackwalk на каждый alloc/free — это будет черезчур.
CC>Плюс почему то к моменту выгрузки DLL не на все аллокации приходит освобождение, причем часто строго на определенном блоке заканчивается работа.

Ага, заметил некоторые траблы с использованием. Но вообще, интересная софтинка
Re[43]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 18.03.09 23:02
Оценка: +2
Здравствуйте, MxKazan, Вы писали:

MK>Блин, вот что правда 100 или 200 мегов оперативы сейчас кому-то принципиально? Я когда приводил скриншот с Creative Docs, там еще Оракл светился. Жрал 250 мегов, но при этом он у меня вообще никак не юзается. Я его однажы установил и всё. И вот оно тяпает 200 мегов при запуске и оно нативное. Но чесс говоря, что есть оно, что нет, мне фиолетово. На компе 1 Гиг оперативы. Ххах. А было бы оно managed, наверняка бы и эти 200 мег припомнили


Во времена DOS'а, когда только начали появляться графические и псевдографические интерфейсы, а "мыши" были большой редкостью, в одном журнале прочитал интервью с каким-то разработчиком. Он отвечая на вопрос журналиста об использовании "мышки" в качестве единственного средства управления, ответил: "Если вы делаете "мышь" единственным средством управления, будьте готовы обеспечить им ваших пользователей". Вот, когда мне говорят о дешевых гигабайтах, я всегда эту фразу вспоминаю Не нужно забывать, что техника бывает очень разной, и часто бывает так, что купив ноутбук с распаянными на плате 512 метрами, заапгрейдить его можно только выкинув и купив новый.
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 18.03.09 23:07
Оценка: -1
Здравствуйте, Игoрь, Вы писали:

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


G>>Здравствуйте, Игoрь, Вы писали:


G>>>>Маленький ликбез:

G>>>>1)Стандартный аллокатор поддерживает связный список блоков памяти, выделение нового и освобождение блока вызывает проход по списку, который имеет алгоритмическое время O(n) от количества блоков.
И>>>Ты сам в это веришь? Это наивная реализация 80-ых годов. Сейчас используются всякого рода оптимизации, позволяющие минимизировать время поиска и частично отказаться от блокировок кучи. Например, в windows heap создается, если мне память не изменяет, на одну кучу 128 ассоциативных однонаправленных списков, не требующих блокировок.
G>>Эта наивная реализация во многих местах осталась и по сей день.
И>Это не аргумент, вообще.

Ну тогда все ваши аргументы по поводу GC вообще не аргументы.


G>>>>При постоянных выделениях-освобождениях памяти получются очень большие затраты на эту простую операцию.

И>>>В С# в целом та же херня.
G>>Доказательства? Может сначала статью про .NETовский JIT прочитаете. На этом сайте статьи есть.
И>Еще раз. То, что ты написал в предыдущем посте о преимуществах хипах — ерунда полнейшая. Почему? Да потому что в С++ используется связка стэк + хип. И мелкие часто создаваемые/удаляемые объекты создаются на стэке, а не в хипе. Поэтому все те "преимущества" .net идут лесом. Когда я говорил, что "в C# таже херня", я имел ввиду ситуацию в целом, а не какие-то частные случаи.
Ну статистику покажите чтоли, а то сильно голословное утверждение.

И>А именно — работу сборщика мусора и дефрагментатора, который осуществляет перенос объектов в памяти. А это совсем не дешевые операции.

Но они дешевле работы стандартного аллокатора. Это факт подтверждаемый тестами.

И>Кроме того, если я правильно помню, то при выделении памяти под объект, происходит еще и предварительное обнуление памяти.

О, да... это супер дорогая операция.

И>Далее, все, что ты тут расписал — это касается только мелких объектов. А крупные объекты размещаются в LOH, которая работая скорее по принципу сишной кучи.

Крупные объекты — это от 84 кб, это очень много. Статистка говорит что большенство объектов в программах гораздо меньше.

G>>>>2)При выделении блока идет небольшой оверхед, который зависит от реализации, 16-32 байта кажись. Исследования исходных кодов программ показывают что средний размер объекта составляет от 32 до 128 байт, при такких размерах оверхед является очень значительным.

И>>>Достаточно в таск менеджере взглянуть на кол-во используемой памяти .net прогой и С++ с эквивалентной функциональностью, чтобы понять, что ты гонишь.
G>>Покажите две программы на .net и C++ с эквивалнтной функциональностью сложнее HelloWorld, потом посмотрим кто гонит.
G>>Кроме того цифра в таск менеждере ни о чем не говорит, просто сверните приложение, будете удивлены.
И>Расскажи как сервисы свернуть... Я поищу что-то из публичных прог.
Сервис не отменяет факта, что цифра в таск менеджере не поеказывает реального потребления памяти.

И>>>Кроме того, в С++ принято мелкие объекты создавать на стеке. А если нужно в динамической памяти разместить объект, то есть placement new, который позволяет разместить объект в уже выделенной памяти.

G>>Ага, это все увеличивает энтропию языка, то есть количество свпособов сделать одно и тоже по-разному.
И>Глупость.
Факт. Есть указатели и есть ссылки. Различия для них чисто синтаксические.


G>>>>3)Выделение памяти таким алгоритмом создет фрагментацию памяти, то есть остаются блоки невыделенной памяти малых размеров.

И>>>Угу, только проблема фрагментации кучи есть и в .net, кстати, как и мемори лики.
G>>Доказательства? Опять отправляю вас читать как работает выделение памяти и сборка мусора в .NET.
И>Лучше сам дуй читать про размещение объектов в LOH и ее фрагментацию.
Как часто объекты в LOH попадают?

G>>Про мемори лики хочу узнать поподробнее, как их получить, потом сравните это с простотой получчения лика в unamanged коде.

И>В unamanaged коде лик легко обнаружить и избавиться от него, в managed его получить гораздо сложнее, но и найти и избавиться сложнее. мемлики в С++ — страшилки для детей.
Ты сам понял какой бред написал?
С каких пор в unmanaged стало легче лики находить? В больших проектах только smart pointerы и RAII спасают, ручками все отследить нереально.
В managed ликов как таковых нету, проблемы чаще всего связаны с незадиспозенными объектами. Все ошибки такого рода отлавливают автоматические утилиты анализа кода.

И>Я вот сейчас глянул в С++ проект — на 10МБ кода 16 явных вызовов new.

И 6487 malloc?

G>>>>4)Алгоритм выделения памяти не потокобезопасный, требуется синхронизация.

И>>>GC тоже не потокобезопасный, и зачастую требует не просто синхронизации, но и приостановки работы потоков.
G>>Не зачастую, всегда, но GC работает в сотни раз реже, чем выделение-совобождение памяти стандартным аллокатором.
И>gc и работы гораздо больше выполняет.
Но в среднем оказывается быстрее стандартного аллокатора.

G>>>>5)В программах на С++ часто делают свои аллокаторы, которые выделяют память для маленькиз объектов чтобы избежать описанно выше оверхеда как по потребляемой памяти, так и по времени этой операции

И>>>В С++ такое делают крайне-крайне редко. Потому что
И>>>а) есть стэк;
G>>Стек заставляет копировать объекты чаще, чем нужно.
И>просто глупость.
Напишите код со сложением векторов на стеке.

И>>>b) есть placement new;

G>>Теже яйца что и кастомный аллокатор, только сбоку
И>Нет, кастомный аллокатор — штука серьезная, который пишется месяцами. А это бесплатная штукенция, которая позваоляет оптимизировать критичный код и уделать .net.
Только деструктор не вызывается, значит применима такая штукенция далеко не всегда.
Да и откуда память под placement new возьмется? Не из воздуха же, а будет выделена тем же стандартным аллокатором.

И>>>c) на мелких объектах свет клином не сошелся — можно и без них обойтись в критичной к скорости части;

G>>Я тоже говорю что критичные по скорости вещи надо писать на C, а некритичные, на более высокоуровневых языках. C++ в таком раскладе места нет.
И>На С стоит писать код режима ядра, а вот околосистемные сервисы для С++ — самое оно. Например, у меня есть железка на которой крутится линукс под высокой нагрузкой. Нужно написать какой-то демон для него — однозначно С++.
Ну и флаг вам в руки.

G>>>>9)такое распределение памяти увелиичивает cache-locality

И>>>стандартные аллокаторы windows тоже оптимизированы на это дело
G>>Рад за аллокатор Windows, только зачем он нужен если можно выделять память смещением указателя. Быстрее просто нечего придумать.
И>Запарил, учи мат часть. Далеко не всегда выделение памяти сводится к простому смещению. И кроме того, в С++ при выделении на стэке для малых объектов это буквально одна инструкция.
Я открою маленький секрет. В .net тоже есть стек и есть структуры, которые на стеке размещаются.

G>>>>10)GC собирает мусор не тогжа когда захочется, а при нехватке памяти в нулевом поколении

И>>>по сути это и означает, что когда захочется, особенно если речь идет о более-менее больших системах
G>>И че? сборка памяти в нулевом поколении работает быстре чем использование алоокатора на списках при выделении-освобождении того же объема памяти.
И>Того же размера, это какого? Возьмем размер 100 килобайт, быстрее? С учетом того, что такой размер будет выделен не в SOH, а в LOH. А если речь опять про что-то мелкое, так оно и стэке может быть выделено.
Твое "может быть выделено на стеке" имеет мало отношения к реальности. Статистические данные, на который опирается .NETовский GC собраны были до его создания. Угадай на чем было большенство проанализированных программ написано?

G>>Самообман — думать что C++ всегда быстрее.

И>Не всегда, на каких-то синтетических тестах может быть быстрее. А-ля выделение/удаление мелких объектов.
А погуглить перформанс тесты вместо написания откровенного бреда?
Причем большентсво тестов написаны с применением .NET 1.1, с тех пор перформанс неоднократно улучшали.

И>Ну я от тебя тестов тоже что-то не видел. А мое мнение базируется на трехлетнем опыте работы с .net. Не сильно много, но достаточно, чтобы делать определенные выводы.

За 3 года могли бы и разобраться как сделать на .NET программу, которая не тормозит. Это вообще говоря не очень сложно делается.

И>А ты, похоже, просто фанатик.

Кто бы говорил...
Re[37]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 18.03.09 23:20
Оценка: -1 :)
Здравствуйте, NikeByNike, Вы писали:

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


G>>Когда вы пишите vector<string> то читаемость улучшается. А когда идет vector<sometemple<anothertemplate<param> >, anotherparam> > то читаемости не остается вообще.

NBN>Это очень плохой стиль.
Ага, и он достаточно часто встречается при использовании чего-то типа буста.

NBN>>>>>Ну вот если нашу прогу для WM портануть на NET — то она как минимум будет запускатся не секунду, а 15-20 секунд.

G>>>>Ну если вашу портануть может и будет тормозить, а если нормально написать на .NET не факт что будут лишние тормоза.
NBN>>>Факт.
G>>Доказательства будут?
NBN>Нет необходимости, это 1. проверялось у нас. 2. отсутствуют решения на шарпе у конкурентов.
То есть вы не смогли написать нетормозящую программу на .NET, а потом объявляете фактом что все программы под .NET CF тормозят?

NBN>>>02-25. Зависит. На тормозявых и неоптимальных языках нельзя писать оптимальные приложения. Практика это подтверждает самым что ни есть великолепным образом.

G>>Не надо обвинять язык в том что вы не можете написать на нем нетормозявое приложение. Это не его вина.
NBN>Написать нетормозявое приложение можно, просто оно будет сильно уступать по функционалу приложениям созданным более подходящими средствами.
Какие-то абстрактные размышления.

NBN>>>>>Её будет существенно сложнее ставить, она дольше загружаться и жрат существенно больше ресурсов.

G>>>>За исключением установки .NET CF (один раз) проблем нет.
NBN>>>1. Один раз для каждого нета.
G>>Если у вас одно приложение, то как оно вас волнует?
NBN>У нас несколько десятков приложений.
И все требуют разные версии .NET CF?

NBN>>>2. Это минимум в _2_ раза усложняет процесс инсталляции, это просто недопустимо, даже для писюка.

G>>Какой ужас, как же люди живут...
NBN>Пользуются удобным и быстрым нативом.
Да не, я про тех кто .NET юзает. Некоторые об этом даже не подозревают.

G>>>>Ну от него никуда не деться.

NBN>>>Ага, он делает разработку на С++ значительно проще, чем разработка на шарпе и лучший результат в конечном результате.
G>>Он ниче проще не делает, во многих случаях даже делает хуже. Переписывание всего — огромный риск, на который далеко не все идут.
NBN>Не беспокойся — с нуля на шарпе тоже не пишут
А с чего еще писать? Разве есть сейчас обширный codebase на шарпе для десктопов\КПК ?

NBN>Точнее пишут! Ещё как пишут, ведутся на рекламу. Потом либо переписывают на С++, либо пропадают

Ну если с шарпа переписывают на С++, то точно пропадают.

NBN>>>Тут ведь как — чуть слажал и тебя конкуренты съели

G>>Только от языка это ну вообще никак не зависит.
NBN>Ну ты голову из песка вытащи и пойми, что не все языки вместе со своими енвайраментами неодинаково полезны.
А я разве не так говорю?
Там где нужен перформанс — там C или асм. Тем где скорость не очень важна C#, F#. Скрипты можно на python\ruby писать, есть рантаймы для .NET, Java, и родные интерпретаторы.

G>>не смешите, вы уже многократоно показали свое невладение ничем кроме С++, да еще и бравируете этим.

NBN>Я знаю возможности шарпа и хорошо представляю как он устроен внутри.
Вы уже несколько раз показали поверхность своих знаний.

G>>>>"Думаю" — слабый аргумент.

NBN>>>Достаточный. Это называется экспертная оценка
G>>Какой из вас эксперт, если вы ниче дальше С++ и шароварок толком не видели.
NBN>Переход на личности означает то что аргументы у тебя кончились, а следовательно ты слил.
Называние себя экспертом — переход на личности.
Re[44]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 18.03.09 23:33
Здравствуйте, hattab, Вы писали:

H>Во времена DOS'а, когда только начали появляться графические и псевдографические интерфейсы, а "мыши" были большой редкостью, в одном журнале прочитал интервью с каким-то разработчиком. Он отвечая на вопрос журналиста об использовании "мышки" в качестве единственного средства управления, ответил: "Если вы делаете "мышь" единственным средством управления, будьте готовы обеспечить им ваших пользователей". Вот, когда мне говорят о дешевых гигабайтах, я всегда эту фразу вспоминаю Не нужно забывать, что техника бывает очень разной, и часто бывает так, что купив ноутбук с распаянными на плате 512 метрами, заапгрейдить его можно только выкинув и купив новый.

Я, конечно, согласен, но только в определенной степени. Речь все-таки не о гигабайтах и 512 мегов сейчас уже редкость. Managed проги хоть и требуют памяти больше нативных, но все же не по 200 мегов на каждую фенечку. Тот же Creative Docs не отобрал у меня больше 120 Мб и при открытии всех сэмплов в поставке (я их покрутил/повертел/поперетаскивал).
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[12]: Что за статистика-то такая волшебная? ;) в избранное  новое    модер. 
От: Erop 
Дата: 18.03.09 23:43
Здравствуйте, gandjustas, Вы писали:

G>Статистика показывает что плотность ошибок на строку кода от языка не зависит. При этом для реализации како-то функционала на С++ требуется написть когда больше (иногда гораздо больше), поэтому багов на единицу функционала для С++ получается больше.


Что за статистика такая? Я вот, например, не верю, что число ошибок на строчку BF и MODULA 2 будет одинаковым...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[42]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 18.03.09 23:47
Здравствуйте, hattab, Вы писали:

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


H>>>Давай ты последуешь своему совету и подумаешь, что такое граф и, как с помощью битового флага (а точнее речь идет битовом массиве, как я понимаю) можно определить находжение объекта в куче для последующих манипуляций с оным.

G>>http://www.rsdn.ru/article/dotnet/GC.xml
Автор(ы): Чистяков Влад (VladD2)
Дата: 14.06.2006
Уже много сказано слов о том, что такое GC, чем он хорош и как лучше его применять. Но, наверно, очень многим хочется знать, как устроен конкретный GC. Данная статья открывает некоторые подробности устройчтва GC в .NET Framework.


H>Ты этой ссылкой только подтверждаешь мой тезис о том, что инфраструктура управления памятью в .Net более требовательна к оной

Офигеть, дайте две, а причем тут перформанс?

H>Из заключения:

H>

При наличии большого объема памяти .NET-приложения действительно не стесняются в запросах. Но на самом деле это связано с тем, что алгоритмы GC работают более эффективно при использовании больших объемов памяти. Если памяти в системе начинает не хватать, GC переходит в более экономный режим работы.


Ключевое выделил.

H>Ну и про отрицательное влияние на перформанс тоже сказано... не смотря на все оптимизации.

Ну а где же цитата про перформанс?

H>>>>>Ты же сам про процессорный кэш упоминал... Забыл?

G>>>>Не забыл — сборка муроса достаточно редкий процесс и на время его работы программа останавливается.
H>>>Ты посмотри, как этот редкий процесс накручивает счетчик, когда ты мышкой водишь над кнопками на тулбаре.
G>>Накручивает до определенной степени, потом переставет.
H>У меня не получилось дождаться, пока перестанет. Не перестанет он.
У тебя определенно плохая карма. Прмерно 10 мб от первоначального объема кушат при двигании мышкой туда-сюда.
Это обсасывали еще при появлении персого дотнета.

H>>>К тому же не забывай, я давал пример, когда на один вызод метода по XML-RPC происходит 3 сборки мусора. Не веришь мне, проверь сам.

G>>Не надо в пример приводить какую-то левую либу.

H>Да какой бы я пример не привел, ты назовешь его левым или говнософтом. Ладно, еще пример из говнософта. Запускаем Paint.NET и открываем в нем картинку (я открыл 1600x1200). Выделяем всю картинку Ctrl+A. Смотрим на счетчики GC и видим, что в мирно крутящем пунктир выделения Paint.NET'е, счетчик GC тикает раз-два-три в секунду.

И че, вам жалко? Че за фобия сборки мусора?
При этом отъедается 20% CPU на "бегающих тараканчиков", которые кстати бегают честно по кругу и очень плавно, в отличие от многих других программ.

H>>>Вообще-то тут речь идет об освобождении ресурсов. У стандартного аллокатора есть информация о размере освобождаемого блока, и нет нужды мотаться за ней в мету.

G>>"мотаться" — громко сказано, это пара ассемблерных команд. Стандартному аллокатору чтобы поместить свободный блок в список приходится мотаться.
H>Стандартный подчиняется ручному управлению, и на работу влияния не оказывает. В отличие от GC решившего вдруг марафет навести.

Надо бы ло внимательнее статью читать, "вдруг" не бывает. тем более это тоже контролируется.

H>>>Так Рихтер и говорит, что управляемая куча это есть потеря перформанса. Впрочем, я уже понял, что твою слепую веру ничто не способно поколебать.

G>>Слепая вера и невежество у тебя.
G>>http://www.rsdn.ru/forum/Default.aspx?mid=3164491
Автор: gandjustas
Дата: 06.11.08


H>Во-первых это синтетика, не имеющая ничего общего с реальным миром. Во-вторых это не правильная синтетика.

Да, синтетика, которая как раз наглядно показывает что аллокатор в делфях медленее GC.

H>Мне, как пользователю, не интересны резоны GC. Я вижу результат -- чрезмерное потребление.

Тебе как пользователю разница от цифирки в таскманагере есть?
Ты даже не можешь сопоставить быстродействие с этой цифиркой никак.

H>Делаем простой эксперимент. Запускаем Paint.NET, который откушал сразу 35Mb (судя по твоим словам, большая часть этой цифры -- резерв, который будет возвращен в систему по первому требованию). Теперь начинаем запускать много тяжелого софта: две Delphi IDE, Open Office Writer, Abode Reader, Opera (она у меня жрет в районе 160Mb, из-за размера почтовой базы), VirtualBox. Все система ушла в своп. Смотрим на потребление Paint.NET... оно снизилось ровно на 300Кб. Выводы?

Вывод один — тебе срочно надо курить про workset. до этого больше тут ничего не пиши.
Re[13]: Что за статистика-то такая волшебная? ;) в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 18.03.09 23:51
Здравствуйте, Erop, Вы писали:

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


G>>Статистика показывает что плотность ошибок на строку кода от языка не зависит. При этом для реализации како-то функционала на С++ требуется написть когда больше (иногда гораздо больше), поэтому багов на единицу функционала для С++ получается больше.


E>Что за статистика такая? Я вот, например, не верю, что число ошибок на строчку BF и MODULA 2 будет одинаковым...

Когда на BF хотябы один большой проект сделают тогда поговорим.

Эта статистика собирается для крупных проектов. Мелочи могут давать перекосы в разные стороны в зависимости от подходящих библиотек.
Re[45]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 19.03.09 00:00
Оценка:1 (1) +2
Здравствуйте, MxKazan, Вы писали:

H>>Во времена DOS'а, когда только начали появляться графические и псевдографические интерфейсы, а "мыши" были большой редкостью, в одном журнале прочитал интервью с каким-то разработчиком. Он отвечая на вопрос журналиста об использовании "мышки" в качестве единственного средства управления, ответил: "Если вы делаете "мышь" единственным средством управления, будьте готовы обеспечить им ваших пользователей". Вот, когда мне говорят о дешевых гигабайтах, я всегда эту фразу вспоминаю Не нужно забывать, что техника бывает очень разной, и часто бывает так, что купив ноутбук с распаянными на плате 512 метрами, заапгрейдить его можно только выкинув и купив новый.

MK>Я, конечно, согласен, но только в определенной степени. Речь все-таки не о гигабайтах и 512 мегов сейчас уже редкость.

Полгода назад у Ровера вышла очень удачная машинка класса UMPC, там распаяно 768 и установлена Виста. В свое время Compaq выпустил очень удачный планшетник TC-1100 (HP'шники, суки, убили эту линейку) с Windows XP Tablet PC с которым сразу обнаружились проблемы с "заиканием" стандартной распознавалки вполть до отказа пользователей от ее использования (массово ставили Квартовскую или Парагоновскую). Причина проста -- стандартная распознавалка Tablet PC является/являлась .Net приложением (видимо GC и давал эффект заикания. На хоботе исследование вопроса проводили, но я детали не помню).

MK>Managed проги хоть и требуют памяти больше нативных, но все же не по 200 мегов на каждую фенечку. Тот же Creative Docs не отобрал у меня больше 120 Мб и при открытии всех сэмплов в поставке (я их покрутил/повертел/поперетаскивал).


Тут ведь какое дело, если софтина работает одна, так и не жалко. Но когда их много, а ресурсы ограничены... Просто выберет человек продукт конкурента и всех делов
Re[17]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 00:09
Здравствуйте, MxKazan, Вы писали:

MK>Вот тут я тебя полностью понимаю. И я тоже против огульного охаивания .Net и его приравнивания к VB.


А зря ты так про VB. На VB целая индустрия держалась. Софта который нужен "уже вчера", и "послезавтра точно устареет"...
Кстати, сейчас эту нужную и важную нишу занял .Net...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[46]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 19.03.09 00:10
Здравствуйте, hattab, Вы писали:

H>Полгода назад у Ровера вышла очень удачная машинка класса UMPC, там распаяно 768 и установлена Виста. В свое время Compaq выпустил очень удачный планшетник TC-1100 (HP'шники, суки, убили эту линейку) с Windows XP Tablet PC с которым сразу обнаружились проблемы с "заиканием" стандартной распознавалки вполть до отказа пользователей от ее использования (массово ставили Квартовскую или Парагоновскую). Причина проста -- стандартная распознавалка Tablet PC является/являлась .Net приложением (видимо GC и давал эффект заикания. На хоботе исследование вопроса проводили, но я детали не помню).

Я честно не знаю, как некоторым удается писать такие дерьмовые проги на .Net. За 3 года я ни разу не сталкивался с этими чудесами подвисаний GC. Допускаю, что они могут быть в высоконагруженных системах, но вот я не сталкивался и всё. Возможно потому, что у меня не развита GC-фобия.

MK>>Managed проги хоть и требуют памяти больше нативных, но все же не по 200 мегов на каждую фенечку. Тот же Creative Docs не отобрал у меня больше 120 Мб и при открытии всех сэмплов в поставке (я их покрутил/повертел/поперетаскивал).

H>Тут ведь какое дело, если софтина работает одна, так и не жалко. Но когда их много, а ресурсы ограничены... Просто выберет человек продукт конкурента и всех делов
В общем это бесконечный спор...
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 00:17
Здравствуйте, gandjustas, Вы писали:

M>>Большая часть "выделения-освобождения памяти" на С++ не затрачивает никаких ресурсов, как может быть быстрее ?

G>
G>Да ну?
G>Вым наверное стоит изучить как аллокаторы и GC работают.

А вам, что такое "автоматическая переменная" в C++
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[43]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 19.03.09 00:19
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

H>>Ты этой ссылкой только подтверждаешь мой тезис о том, что инфраструктура управления памятью в .Net более требовательна к оной

G>Офигеть, дайте две, а причем тут перформанс?

H>>Из заключения:

H>>

При наличии большого объема памяти .NET-приложения действительно не стесняются в запросах. Но на самом деле это связано с тем, что алгоритмы GC работают более эффективно при использовании больших объемов памяти. Если памяти в системе начинает не хватать, GC переходит в более экономный режим работы.


G>Ключевое выделил.


Угу, а при его отсутствии начнется деградация производительности (ведь алгоритмы перестанут работать эффективно, как следует из цитаты)

H>>Ну и про отрицательное влияние на перформанс тоже сказано... не смотря на все оптимизации.

G>Ну а где же цитата про перформанс?

Во ведении там есть несколько слов, найдешь А вообще, слова теже самые, что и у Рихтера. Я вообще удивлен, чего ты этот очевидный и признаваемый факт отрицаешь...

H>>>>>>Ты же сам про процессорный кэш упоминал... Забыл?

G>>>>>Не забыл — сборка муроса достаточно редкий процесс и на время его работы программа останавливается.
H>>>>Ты посмотри, как этот редкий процесс накручивает счетчик, когда ты мышкой водишь над кнопками на тулбаре.
G>>>Накручивает до определенной степени, потом переставет.
H>>У меня не получилось дождаться, пока перестанет. Не перестанет он.
G>У тебя определенно плохая карма. Прмерно 10 мб от первоначального объема кушат при двигании мышкой туда-сюда.
G>Это обсасывали еще при появлении персого дотнета.

Мы тут не про кушали, мы тут про счетчик GC.

H>>>>К тому же не забывай, я давал пример, когда на один вызод метода по XML-RPC происходит 3 сборки мусора. Не веришь мне, проверь сам.

G>>>Не надо в пример приводить какую-то левую либу.

H>>Да какой бы я пример не привел, ты назовешь его левым или говнософтом. Ладно, еще пример из говнософта. Запускаем Paint.NET и открываем в нем картинку (я открыл 1600x1200). Выделяем всю картинку Ctrl+A. Смотрим на счетчики GC и видим, что в мирно крутящем пунктир выделения Paint.NET'е, счетчик GC тикает раз-два-три в секунду.

G>И че, вам жалко? Че за фобия сборки мусора?

Не жалко. Просто ты говорил о редких сборках мусора, а я тебе примеры привожу, которые показывают обратное.

H>>>>Вообще-то тут речь идет об освобождении ресурсов. У стандартного аллокатора есть информация о размере освобождаемого блока, и нет нужды мотаться за ней в мету.

G>>>"мотаться" — громко сказано, это пара ассемблерных команд. Стандартному аллокатору чтобы поместить свободный блок в список приходится мотаться.
H>>Стандартный подчиняется ручному управлению, и на работу влияния не оказывает. В отличие от GC решившего вдруг марафет навести.
G>
G>Надо бы ло внимательнее статью читать, "вдруг" не бывает. тем более это тоже контролируется.

Именно вдруг. Работу GC ты можешь "типа контролировать" подстраивая алгоритм под его текущую стратегию. Зря чтоль Рихтер советует вызывать GC.Collect маскируя его за "тяжелыми операциями"?

G>>>http://www.rsdn.ru/forum/Default.aspx?mid=3164491
Автор: gandjustas
Дата: 06.11.08

H>>Во-первых это синтетика, не имеющая ничего общего с реальным миром. Во-вторых это не правильная синтетика.
G>Да, синтетика, которая как раз наглядно показывает что аллокатор в делфях медленее GC.

Синтетика все что угодно показать может, главное приготовить как надо. Ты, как надо было тебе, приготовил.

H>>Мне, как пользователю, не интересны резоны GC. Я вижу результат -- чрезмерное потребление.

G>Тебе как пользователю разница от цифирки в таскманагере есть?
G>Ты даже не можешь сопоставить быстродействие с этой цифиркой никак.

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

H>>Делаем простой эксперимент. Запускаем Paint.NET, который откушал сразу 35Mb (судя по твоим словам, большая часть этой цифры -- резерв, который будет возвращен в систему по первому требованию). Теперь начинаем запускать много тяжелого софта: две Delphi IDE, Open Office Writer, Abode Reader, Opera (она у меня жрет в районе 160Mb, из-за размера почтовой базы), VirtualBox. Все система ушла в своп. Смотрим на потребление Paint.NET... оно снизилось ровно на 300Кб. Выводы?

G>Вывод один — тебе срочно надо курить про workset. до этого больше тут ничего не пиши.

Я тебе еще раз говорю: это не workset, это Private bytes из Process Explorer'а. Хоть для приличия бы взглянул, уж не первый раз сказано.
Re[19]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 00:21
Здравствуйте, gandjustas, Вы писали:

G>GC не собирает память пока это никому не мешает, как только заполнится первое поколение — сразу же уберет, а то что не успел удбрать — сложит в другое полколение.


Это всего лишь эффект масштаба. Для С++ схему владения надо продумывать уже для довольно небольших задач (для совсем простых можно ничего не освобождать, да и всё), а для GC для задач побольше. Зато управлять GC посложнее...

Есть некоторая ниша по сложности задачи, где GC работает хорошо, но и только...

Кстати, в C++ наработано много всяких подходов к этому месту, так что обычно можно быть по крайней мере не хуже в области массовых аллокаций, чем GC...
Например, можно на каждый запрос на каждой нити создавать отдельный стековый аллокатор, и на нём ничего не освобождать, а только выделять. По окончании запроса данные, которые нужно сохранить мигрируют на обычный аллокатор, а стековый грохается целиком в начальное состояние, и мы снова готовы обработать запрос. В целом для очень многих задач такая стратегия аллокации НАМНОГО ЭФФЕКТИВНЕЕ GC...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 00:27
Здравствуйте, Erop, Вы писали:

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


M>>>Большая часть "выделения-освобождения памяти" на С++ не затрачивает никаких ресурсов, как может быть быстрее ?

G>>
G>>Да ну?
G>>Вым наверное стоит изучить как аллокаторы и GC работают.

E>А вам, что такое "автоматическая переменная" в C++

Не поверите, такие же переменные есть в .NET
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 00:35
Здравствуйте, CreatorCray, Вы писали:

G>>Эта наивная реализация во многих местах осталась и по сей день.

CC>Это проблемы тех мест а не С++ в целом.

+1
Кроме того, там конечно завались просто классных и быстрых GC...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[44]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 00:37
Здравствуйте, hattab, Вы писали:

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


H>>>Ты этой ссылкой только подтверждаешь мой тезис о том, что инфраструктура управления памятью в .Net более требовательна к оной

G>>Офигеть, дайте две, а причем тут перформанс?

H>>>Из заключения:

H>>>

При наличии большого объема памяти .NET-приложения действительно не стесняются в запросах. Но на самом деле это связано с тем, что алгоритмы GC работают более эффективно при использовании больших объемов памяти. Если памяти в системе начинает не хватать, GC переходит в более экономный режим работы.


G>>Ключевое выделил.

H>Угу, а при его отсутствии начнется деградация производительности (ведь алгоритмы перестанут работать эффективно, как следует из цитаты)
Я например замечаю что память кончается конда показатель выделенной физической памяти подбирается к 98 процентам.
В таких условиях тормозит все.

H>>>Ну и про отрицательное влияние на перформанс тоже сказано... не смотря на все оптимизации.

G>>Ну а где же цитата про перформанс?

H>Во ведении там есть несколько слов, найдешь А вообще, слова теже самые, что и у Рихтера. Я вообще удивлен, чего ты этот очевидный и признаваемый факт отрицаешь...

Ага, видно что прочитал введение и заключение.

H>Не жалко. Просто ты говорил о редких сборках мусора, а я тебе примеры привожу, которые показывают обратное.

3 раза в секунду это часто?
На гигагерцовом процессоре за секунду выполняется 1000000000 тактов. При этом если в приложении ничего не происходит, то все поколение становится мксором и не происходит фактически уплотнения кучи.
Сборщик мусора на многопроцесорной машине работает в фоновом режиме по большей части.
Так что влияние на производительность минимальная.


H>>>>>Вообще-то тут речь идет об освобождении ресурсов. У стандартного аллокатора есть информация о размере освобождаемого блока, и нет нужды мотаться за ней в мету.

G>>>>"мотаться" — громко сказано, это пара ассемблерных команд. Стандартному аллокатору чтобы поместить свободный блок в список приходится мотаться.
H>>>Стандартный подчиняется ручному управлению, и на работу влияния не оказывает. В отличие от GC решившего вдруг марафет навести.
G>>
G>>Надо бы ло внимательнее статью читать, "вдруг" не бывает. тем более это тоже контролируется.

H>Именно вдруг. Работу GC ты можешь "типа контролировать" подстраивая алгоритм под его текущую стратегию. Зря чтоль Рихтер советует вызывать GC.Collect маскируя его за "тяжелыми операциями"?

Мдя... не надо так явно показывать свою недалекость. Читайте про GCSettrings.LatencyMode.

H>Синтетика все что угодно показать может, главное приготовить как надо. Ты, как надо было тебе, приготовил.

Ну приготовь как тебе надо, покажи обратное.

H>>>Мне, как пользователю, не интересны резоны GC. Я вижу результат -- чрезмерное потребление.

G>>Тебе как пользователю разница от цифирки в таскманагере есть?
G>>Ты даже не можешь сопоставить быстродействие с этой цифиркой никак.

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


А че, нативное приложение в свом не выгружается? Что ты пытаешься показать этой фразой?
Re[20]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 00:44
Оценка: -1
Здравствуйте, Erop, Вы писали:

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


G>>GC не собирает память пока это никому не мешает, как только заполнится первое поколение — сразу же уберет, а то что не успел удбрать — сложит в другое полколение.


E>Это всего лишь эффект масштаба. Для С++ схему владения надо продумывать уже для довольно небольших задач (для совсем простых можно ничего не освобождать, да и всё), а для GC для задач побольше. Зато управлять GC посложнее...

На чем основано такое мнение? Уж точно не на длительном использовании .NET и профилировании программ.

E>Есть некоторая ниша по сложности задачи, где GC работает хорошо, но и только...

Вам наверное стоит почитать на каких допущениях работает GC. И на основе каких программ эти допущения получены.

E>Кстати, в C++ наработано много всяких подходов к этому месту, так что обычно можно быть по крайней мере не хуже в области массовых аллокаций, чем GC...

Да, в C++ надо думать о том когда и как выдеоять и освобожать память.
В .NET об этом думать не надо. Если будет тормозить тогда смотреть профайлером.

E>Например, можно на каждый запрос на каждой нити создавать отдельный стековый аллокатор, и на нём ничего не освобождать, а только выделять. По окончании запроса данные, которые нужно сохранить мигрируют на обычный аллокатор, а стековый грохается целиком в начальное состояние, и мы снова готовы обработать запрос. В целом для очень многих задач такая стратегия аллокации НАМНОГО ЭФФЕКТИВНЕЕ GC...

Это теория, покажите такие программы на практике.
Обычно ручная возьня с ресурсами очень сильно увеличивает время разработки программ. Такую возьню могут позволить себе только очень крупные фирмы.
Re[38]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 00:53
Здравствуйте, MxKazan, Вы писали:

MK>Так это получается, что все в форумах NET и NET GUI просто дебилы какие-то, выбирающие инструмент по рекламкам.

MK>Считай это как призыв не юзать подобные аргументы. Все же в деле заняты, а не в бирюльках.

Ну просто на PC обычно можно забить на прожорливость GUI, например...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[34]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 00:56
Здравствуйте, kuj, Вы писали:

kuj>Разработчика, который пытается использовать ВСЮ память надо бить сильно по рукам.


Я знаю задачи, в которых это правильная стратегия...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 01:20
Здравствуйте, gandjustas, Вы писали:

G>Только этот оверхед не влияет на производительность.

Но только на платформах, где памяти очень много...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[11]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 02:01
Оценка: :)
Здравствуйте, CreatorCray, Вы писали:

CC>Лично участвовал в С++ серверном проекте для унесённого ныне кризисом Lehman Brothers.


Вот именно! Видишь до чего С++ доводит?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 02:14
Здравствуйте, gandjustas, Вы писали:

G>Можете посмотреть <...> Windows Media Center — аналогично.

А чему там тормозить в принципе?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[36]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 02:16
Здравствуйте, gandjustas, Вы писали:

G>У тебя видимо плохая карма что все .NET программы тормозят.

Да нет, просто у него на ноуте 512 метров RAM...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 02:21
Здравствуйте, gandjustas, Вы писали:

G>Не поверите, такие же переменные есть в .NET

Почему не поверю? Я советовал ведь не "проверить, есть ли в С++ автоматические переменные", а изучить, что это такое...

Скажем на С++ можно делать так
Автор: Erop
Дата: 27.02.07
...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[21]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 02:37
Здравствуйте, gandjustas, Вы писали:

G>На чем основано такое мнение? Уж точно не на длительном использовании .NET и профилировании программ.

Исключительно на переходе на личности основано

E>>Есть некоторая ниша по сложности задачи, где GC работает хорошо, но и только...

G>Вам наверное стоит почитать на каких допущениях работает GC. И на основе каких программ эти допущения получены.
Да и на каких? Сколько в той статистике было баз данных? Сколько 3D движков? Сколько распознавалок? Сколько переводчиков?..

Есть уровень сложности задачи, например текстовый редактор, где GC работает очень хорошо, но с ростом сложности задачи ситуация портится. Скажем при написании базы данных тебе уже придётся очень крепко думать про то как же у тебя данные будут с GC взаимодействовать...

Просто в С++ проектирование такого рода надо начинать на намного более простых задачах. Но на реально сложных это надо делать и там и там...

E>>Кстати, в C++ наработано много всяких подходов к этому месту, так что обычно можно быть по крайней мере не хуже в области массовых аллокаций, чем GC...

G>Да, в C++ надо думать о том когда и как выдеоять и освобожать память.
G>В .NET об этом думать не надо. Если будет тормозить тогда смотреть профайлером.
Ну и поспотришь ты профайлером, и что дальше будет? Если у тебя проектирования не было, а задача сложная, то будет тормозное г., при этом факт того, что это тормозное г. будет задокументирован профайлером

E>>Например, можно на каждый запрос на каждой нити создавать отдельный стековый аллокатор, и на нём ничего не освобождать, а только выделять. По окончании запроса данные, которые нужно сохранить мигрируют на обычный аллокатор, а стековый грохается целиком в начальное состояние, и мы снова готовы обработать запрос. В целом для очень многих задач такая стратегия аллокации НАМНОГО ЭФФЕКТИВНЕЕ GC...

G>Это теория, покажите такие программы на практике.
Какие "такие"? Быстрые и написанные на неуправляемом языке? Ядро линукса, например, устроит?

G>Обычно ручная возьня с ресурсами очень сильно увеличивает время разработки программ. Такую возьню могут позволить себе только очень крупные фирмы.

Обычно, ручная возня с ресурсами занимает очень маленькую часть затрат на разработку действительно сложного ПО (например переводчика, или операционной системы)...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[14]: Что за статистика-то такая волшебная? ;) в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 02:41
Здравствуйте, gandjustas, Вы писали:

G>Эта статистика собирается для крупных проектов. Мелочи могут давать перекосы в разные стороны в зависимости от подходящих библиотек.


А подробности будут?
Я всё равно не верю, что, Ada и С++ имеют одинаковый показатель.
Кроме того, на чём же тогда статистика для С# собрана, если только КРУПНЫЕ проекты идут в счёт? На сингулярити, что ли?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[5]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: _d_m_ 
Дата: 19.03.09 04:27
Здравствуйте, MxKazan, Вы писали:

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


S>>Для разработчика это очень рискованно связываться с C#, т.к. требуется тащить .net runtime и привяжешь себя к Виндам.

MK>Вот-вот! Только представь, каждый день на работу и обратно таскать эти два тяжелых чемоданчика с .net runtime. Там по 20 кг в каждом! Порог вхождения очень высок

Осталость только домыслить "привяжешь себя к виндам" — привязал себя веревкой к оконной раме.
Re[15]: Что за статистика-то такая волшебная? ;) в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 06:34
Здравствуйте, Erop, Вы писали:

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


G>>Эта статистика собирается для крупных проектов. Мелочи могут давать перекосы в разные стороны в зависимости от подходящих библиотек.


E>А подробности будут?

E>Я всё равно не верю, что, Ada и С++ имеют одинаковый показатель.
Можете не верить.

E>Кроме того, на чём же тогда статистика для С# собрана, если только КРУПНЫЕ проекты идут в счёт? На сингулярити, что ли?

На C# очень много крупных проектов, с миллионами строк кода.
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 06:36
Здравствуйте, Erop, Вы писали:

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


G>>Не поверите, такие же переменные есть в .NET

E>Почему не поверю? Я советовал ведь не "проверить, есть ли в С++ автоматические переменные", а изучить, что это такое...

E>Скажем на С++ можно делать так
Автор: Erop
Дата: 27.02.07
...



В нормальных языках такого не нужно делать в принципе.
Re[36]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 06:41
Здравствуйте, Erop, Вы писали:

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


G>>Только этот оверхед не влияет на производительность.

E>Но только на платформах, где памяти очень много...
Это вы себя пытаетесь убедить?
Посмотрел то что я писал, для программы показатель COMMITED памяти редко переваливает за 300 метров, это очень много?
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 06:51
Здравствуйте, Erop, Вы писали:


E>Есть уровень сложности задачи, например текстовый редактор, где GC работает очень хорошо, но с ростом сложности задачи ситуация портится. Скажем при написании базы данных тебе уже придётся очень крепко думать про то как же у тебя данные будут с GC взаимодействовать...

Ты так говоришь как-будто все каждый день пишут базы данных.

Кстати о базах: есть couchDB, которая написана на Erlang, который является одним из самых медленных языков. И ниче, всем кто пользуется — нравится.

E>>>Кстати, в C++ наработано много всяких подходов к этому месту, так что обычно можно быть по крайней мере не хуже в области массовых аллокаций, чем GC...

G>>Да, в C++ надо думать о том когда и как выдеоять и освобожать память.
G>>В .NET об этом думать не надо. Если будет тормозить тогда смотреть профайлером.
E>Ну и поспотришь ты профайлером, и что дальше будет?
Исправлю код там где торомзит.


E>>>Например, можно на каждый запрос на каждой нити создавать отдельный стековый аллокатор, и на нём ничего не освобождать, а только выделять. По окончании запроса данные, которые нужно сохранить мигрируют на обычный аллокатор, а стековый грохается целиком в начальное состояние, и мы снова готовы обработать запрос. В целом для очень многих задач такая стратегия аллокации НАМНОГО ЭФФЕКТИВНЕЕ GC...

G>>Это теория, покажите такие программы на практике.
E>Какие "такие"? Быстрые и написанные на неуправляемом языке? Ядро линукса, например, устроит?
Утстроит, где там C++? Там голый С.
Ядро винды тоже на С вроде как написано.
Если почитаешь ветку я многократно говорил что performance-critical части можно и иногда нужно писать на С.


G>>Обычно ручная возьня с ресурсами очень сильно увеличивает время разработки программ. Такую возьню могут позволить себе только очень крупные фирмы.

E>Обычно, ручная возня с ресурсами занимает очень маленькую часть затрат на разработку действительно сложного ПО (например переводчика, или операционной системы)...
Ну на управляемых языках это так, на неупрвляемых — зависит от разработчика.
Re[6]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 19.03.09 06:51
Здравствуйте, _d_m_, Вы писали:

MK>>Вот-вот! Только представь, каждый день на работу и обратно таскать эти два тяжелых чемоданчика с .net runtime. Там по 20 кг в каждом! Порог вхождения очень высок

___>Осталость только домыслить "привяжешь себя к виндам" — привязал себя веревкой к оконной раме.
И придется ее тоже с собой таскать, на спине, в рюкзачке!
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[28]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 19.03.09 07:21
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

И>>>>Достаточно в таск менеджере взглянуть на кол-во используемой памяти .net прогой и С++ с эквивалентной функциональностью, чтобы понять, что ты гонишь.

G>>>Кроме того цифра в таск менеждере ни о чем не говорит, просто сверните приложение, будете удивлены.
CC>>Ты не в тот таскманагер смотришь, тебе уже сообщали.
G>Пор цифирке в таскабаре — не ко мне, они меня мало интересуют. Я производидтельность профайлером меряю.
И давно ты "кол-во используемой памяти" меряешь профайлером?

G>>>Доказательства? Опять отправляю вас читать как работает выделение памяти и сборка мусора в .NET.

CC>>Кстати, как там на данный момент обстоит дело с GC в условиях наличия за-pin-ованых объектов?
G>То что выделено до запиненного объекта — не уплотняется.
G>Перерасход памяти из-за большого количесва запиненных объекктов — признак неграмотности программиста
Т.е. использование одного компонента, написанного говнокодером херит всю стройную систему?

G>>>Не зачастую, всегда, но GC работает в сотни раз реже, чем выделение-совобождение памяти стандартным аллокатором.

CC>>Это как напишешь. В unmanaged в реальном коде где надо performance выделение/освобождение памяти выносят "за скобки" и делают крайне редко.
G>Это примерно тоже самое что performance-critical код написать на С, а потом интеропать с ним из managed.
И не близко даже.

И>>>>а) есть стэк;

G>>>Стек заставляет копировать объекты чаще, чем нужно.
CC>>С чего бы вдруг?
G>Передача объектов по значению вызывает копирование.
Обьясни поподробнее какая связь между аллокацией на стеке и передачей объектов по значению?

И>>>>b) есть placement new;

G>>>Теже яйца что и кастомный аллокатор, только сбоку
CC>>Только без затрат на выделение памяти. Т.е. совсем бесплатный считай.
G>А откуда возьмется память в которой будет делаться placement new ?
Откуда угодно. Любая свободная память. Сам по себе placement new не равняется аллокатору.

И>>>>c) на мелких объектах свет клином не сошелся — можно и без них обойтись в критичной к скорости части;

G>>>Я тоже говорю что критичные по скорости вещи надо писать на C, а некритичные, на более высокоуровневых языках. C++ в таком раскладе места нет.
CC>>Как показывает практика — есть. В таком контексте С++ от С мало чем отличается, только поудобнее разве что. Не надо только на нём александрескить и говнокодить.
G>Испоьзовать C++ как C_с_классами конечно можно, только это получается ну очень низкоуровневое программирование.
"С с классами" как и "функциональщина из буста" это крайности. Я не про них.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[32]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 19.03.09 07:21
Оценка:1 (1)
Здравствуйте, hattab, Вы писали:

H>Ага, заметил некоторые траблы с использованием.

Там траблов на самом деле еще много Например никак не делалась обработка динамически подгружаемых DLL и т.п.
Писалась "под задачу" и "надо вчера", потому остановилась на этапе как тока на требуемом exe стала показывать результаты аллокаций.

H> Но вообще, интересная софтинка

Надо будет как нить ее доделать. Там самое полезное — DLL. EXE занимается инжектом DLL в процесс, приемом от нее данных с записью в файл и потом показ намерянного.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Mamuthttp://dmitriid.com/
Дата: 19.03.09 07:29
Здравствуйте, gandjustas, Вы писали:

g> E>Есть уровень сложности задачи, например текстовый редактор, где GC работает очень хорошо, но с ростом сложности задачи ситуация портится. Скажем при написании базы данных тебе уже придётся очень крепко думать про то как же у тебя данные будут с GC взаимодействовать...


g> Ты так говоришь как-будто все каждый день пишут базы данных.


g> Кстати о базах: есть couchDB, которая написана на Erlang, который является одним из самых медленных языков. И ниче, всем кто пользуется — нравится.


Слющай, зачэм couchdb? В поставку Эрланга входит тоже неплохая база — mnesia. Написана тоже на Эрланге

Не говоря уж о двух хороших, быстырых веб-серверах

g> E>Ну и поспотришь ты профайлером, и что дальше будет?

g> Исправлю код там где торомзит.

"Сделай так, чтобы вещь заработала. Потом, если необходимо, сделай так, чтобы вещь работала быстро" © философия разработчиков Эрланга

И это вполне правильный подход
Re[29]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 07:29
Здравствуйте, CreatorCray, Вы писали:

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


И>>>>>Достаточно в таск менеджере взглянуть на кол-во используемой памяти .net прогой и С++ с эквивалентной функциональностью, чтобы понять, что ты гонишь.

G>>>>Кроме того цифра в таск менеждере ни о чем не говорит, просто сверните приложение, будете удивлены.
CC>>>Ты не в тот таскманагер смотришь, тебе уже сообщали.
G>>Пор цифирке в таскабаре — не ко мне, они меня мало интересуют. Я производидтельность профайлером меряю.
CC>И давно ты "кол-во используемой памяти" меряешь профайлером?
А я где-то говрил что меряю количество памяти?
Я же написал что эти цифирки не интересуют. Если нужно быстродействие, то меряю его профайлером.

G>>>>Доказательства? Опять отправляю вас читать как работает выделение памяти и сборка мусора в .NET.

CC>>>Кстати, как там на данный момент обстоит дело с GC в условиях наличия за-pin-ованых объектов?
G>>То что выделено до запиненного объекта — не уплотняется.
G>>Перерасход памяти из-за большого количесва запиненных объекктов — признак неграмотности программиста
CC>Т.е. использование одного компонента, написанного говнокодером херит всю стройную систему?
Оно всегда так, любой маленький кусок говнокода может испортить прогу.
А способов надолго запинить память не так много.

И>>>>>а) есть стэк;

G>>>>Стек заставляет копировать объекты чаще, чем нужно.
CC>>>С чего бы вдруг?
G>>Передача объектов по значению вызывает копирование.
CC>Обьясни поподробнее какая связь между аллокацией на стеке и передачей объектов по значению?
А возвращение объектов при выделении памяти на стеке как происходит?

И>>>>>b) есть placement new;

G>>>>Теже яйца что и кастомный аллокатор, только сбоку
CC>>>Только без затрат на выделение памяти. Т.е. совсем бесплатный считай.
G>>А откуда возьмется память в которой будет делаться placement new ?
CC>Откуда угодно. Любая свободная память. Сам по себе placement new не равняется аллокатору.
Ну не равняется, и что с того?


G>>Испоьзовать C++ как C_с_классами конечно можно, только это получается ну очень низкоуровневое программирование.

CC>"С с классами" как и "функциональщина из буста" это крайности. Я не про них.
А в среднем случае C++ сильно уступает по выразительности современныхм языкам.
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 07:31
Оценка: +3 -1
Здравствуйте, gandjustas, Вы писали:

E>>Скажем на С++ можно делать так
Автор: Erop
Дата: 27.02.07
...

G>В нормальных языках такого не нужно делать в принципе.

Что значит "не нужно"?
В С++ тоже не нужно, пока в каком-то месте не понадобится чтобы было реально быстро...
И вот тогда в том самом месте в С++ так сделать можно.
А в "нормальных" языках можно рассказать, что GC -- это уже верх совершенства, а память стоит дёшево...
А что можно сделать в тех самых "нормальных"?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[37]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 07:34
Оценка: +1 -1 :)
Здравствуйте, gandjustas, Вы писали:

G>Посмотрел то что я писал, для программы показатель COMMITED памяти редко переваливает за 300 метров, это очень много?

От программы зависит. Для тачки с 512 Мб на борту это больше половины доступного RAM...
Так что, если прога -- это часы, например, то привет...

Но если проге реально нужно МНОГО памяти, то всё ещё хуже. Особенно если её надо много, но небольшими блоками. Вот в моих С++ прогах часто заканчивается адресное пространство 32-й винды, например. И всякие прототипы на С# показывают радикально худшую производительность/эффективность по памяти
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[23]: "С#" =def= "ХиндиС"? :))) в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 07:47
Оценка: :)
Здравствуйте, gandjustas, Вы писали:

E>>уже придётся очень крепко думать про то как же у тебя данные будут с GC взаимодействовать...

G>Ты так говоришь как-будто все каждый день пишут базы данных.
Во-первых, те, кто решают сложные задачи, они этим заняты обычно каждый день. Написать большой проект -- это не быстро.
Во-вторых, я утверждаю следующее:

Есть некоторый уровень сложности задач, довольно средний, под который GC оптимизирован и на котором он работает неплохо, хотя и с некоторыми известными особенностями и косяками. Этот уровень задачи -- сложный GUI. Для задач на порядок-другой более сложных GC работает хреново. И тогда сказывается то, что GC -- это автоматическая хреновина, которую хрен настроишь по месту, так что требования к точности продумывания архитектуры сложного проекта намного жёстче, чем в случае неуправляемых языков.


G>Кстати о базах: есть couchDB, которая написана на Erlang, который является одним из самых медленных языков. И ниче, всем кто пользуется — нравится.

Ну наверное они там долго продумывали как работа с данными будет происходить, кроме того, я сильно подозреваю, что GC Erlang'а специально под его базу и оптимизирован...

E>>Ну и поспотришь ты профайлером, и что дальше будет?

G>Исправлю код там где тормозит.
Если неправильная архитектура, то тормозит везде...

G>Утстроит, где там C++? Там голый С.

G>Если почитаешь ветку я многократно говорил что performance-critical части можно и иногда нужно писать на С.
Как С и С++ отличаются с точки зрения управляемости и GC? В С++ типобезопасность есть и конструкторы с деструкторами. А ещё там есть виртуальные функции, исключения и шаблоны. И что? Как это всё вообще влияет на обсуждаемые проблемы? Это всего лишь на процесс разработки может повлиять...

Тем не мнее я знаю много довольно быстрого С++ кода, который ворочает большими объёмами данных и весьма быстро. Но не могу его тут опубликовать.

E>>Обычно, ручная возня с ресурсами занимает очень маленькую часть затрат на разработку действительно сложного ПО (например переводчика, или операционной системы)...

G>Ну на управляемых языках это так, на неупрвляемых — зависит от разработчика.
Нет. Не зависит. Плохой разработчик потратит на реализацию сложного проекта бесконечное время Причём на ЛЮБОМ ЯЗЫКЕ...

А вообще-то я согласен с тем, что C++ не терпит лохов, в отличии от C#. То, что C# -- это очень хороший язык для индусов, никто вроде бы и не оспаривает... Думаю, что его смело можно называть ХиндиС (шутка)
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[16]: Что за статистика-то такая волшебная? ;) в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 07:50
Оценка: :)
Здравствуйте, gandjustas, Вы писали:

E>>А подробности будут?

E>>Я всё равно не верю, что, Ada и С++ имеют одинаковый показатель.
G>Можете не верить.
Дык данные-то есть? Методика, что и как измеряли? На каких примерах? Какая получилась статистика?

E>>Кроме того, на чём же тогда статистика для С# собрана, если только КРУПНЫЕ проекты идут в счёт? На сингулярити, что ли?

G>На C# очень много крупных проектов, с миллионами строк кода.
"Очень много" -- это наверное больше 10? Не затруднит привести 5 C# проектов, которые на миллион строк тянут?
Кстати, миллион строк кода -- это не очень крупный проект...
Крупный проект, это от 100-300 человеколет, например...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[27]: 2 kuj в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 07:55
Оценка: +1 :)
E>А что можно сделать в тех самых "нормальных"?

Видимо ты знаешь, что можно сделать? Да? От чего скрываешь?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[38]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 08:02
Здравствуйте, Erop, Вы писали:

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


G>>Посмотрел то что я писал, для программы показатель COMMITED памяти редко переваливает за 300 метров, это очень много?

E>От программы зависит. Для тачки с 512 Мб на борту это больше половины доступного RAM...
E>Так что, если прога -- это часы, например, то привет...
А я говорил что прога — это часы?
У меня прога занимается расчетами и их визуализацией.

E>Но если проге реально нужно МНОГО памяти, то всё ещё хуже. Особенно если её надо много, но небольшими блоками. Вот в моих С++ прогах часто заканчивается адресное пространство 32-й винды, например. И всякие прототипы на С# показывают радикально худшую производительность/эффективность по памяти

И что за программа которой столько памяти нужно?
Re[24]: "С#" =def= "ХиндиС"? :))) в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 08:11
Здравствуйте, Erop, Вы писали:

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


E>>>уже придётся очень крепко думать про то как же у тебя данные будут с GC взаимодействовать...

G>>Ты так говоришь как-будто все каждый день пишут базы данных.
E>Во-первых, те, кто решают сложные задачи, они этим заняты обычно каждый день. Написать большой проект -- это не быстро.
Эти размышления к чему?
Сколько сейчас существует СУБД, которые реально используются? Десятка три наберется, а сколько приложений, посльзующихся этимы самыми БД?
Причем приложения по сложности могут быть сравнимыми с самой БД.

E>Во-вторых, я утверждаю следующее:

Есть некоторый уровень сложности задач, довольно средний, под который GC оптимизирован и на котором он работает неплохо, хотя и с некоторыми известными особенностями и косяками. Этот уровень задачи -- сложный GUI. Для задач на порядок-другой более сложных GC работает хреново. И тогда сказывается то, что GC -- это автоматическая хреновина, которую хрен настроишь по месту, так что требования к точности продумывания архитектуры сложного проекта намного жёстче, чем в случае неуправляемых языков.

Непонятно какая метрика используется для сложности.
Вот есть приложение на .NET — www.microsoft.com, там какая сложность?

G>>Кстати о базах: есть couchDB, которая написана на Erlang, который является одним из самых медленных языков. И ниче, всем кто пользуется — нравится.

E>Ну наверное они там долго продумывали как работа с данными будет происходить, кроме того, я сильно подозреваю, что GC Erlang'а специально под его базу и оптимизирован...
couchDB занимался один человек, у него времени на оптимизацию GC уж точно не было.

E>>>Ну и поспотришь ты профайлером, и что дальше будет?

G>>Исправлю код там где тормозит.
E>Если неправильная архитектура, то тормозит везде...
Вопросы архитектуры ортогональны вопросам быстройдействия.

G>>Утстроит, где там C++? Там голый С.

G>>Если почитаешь ветку я многократно говорил что performance-critical части можно и иногда нужно писать на С.
E>Как С и С++ отличаются с точки зрения управляемости и GC? В С++ типобезопасность есть и конструкторы с деструкторами. А ещё там есть виртуальные функции, исключения и шаблоны. И что? Как это всё вообще влияет на обсуждаемые проблемы? Это всего лишь на процесс разработки может повлиять...
И опять приходим к тому что для того случая где нужно быстродействие используем C, а для всего остального высокоуровневые средства.

E>>>Обычно, ручная возня с ресурсами занимает очень маленькую часть затрат на разработку действительно сложного ПО (например переводчика, или операционной системы)...

G>>Ну на управляемых языках это так, на неупрвляемых — зависит от разработчика.
E>Нет. Не зависит. Плохой разработчик потратит на реализацию сложного проекта бесконечное время Причём на ЛЮБОМ ЯЗЫКЕ...
А кто говорит о плохом разработчике?
Re[39]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 08:13
Здравствуйте, gandjustas, Вы писали:

G>>>Посмотрел то что я писал, для программы показатель COMMITED памяти редко переваливает за 300 метров, это очень много?

G>У меня прога занимается расчетами и их визуализацией.
А для расчётов много памяти надо? Так сказать вне связи с языком? И как эта память выделяется? Большими кусками (ну там пять матриц по 50 метров) или небольшими объектами?

G>И что за программа которой столько памяти нужно?

Ну вот последняя моя прога, которой не хватало адресного пространства, занималась тем, что среди миллионов картинок пыталась найти кучки похожих, таким образом, что каждая картинка была бы хоть как-то похожа на какую-нибудь кучку, и при этом кучек было не много. Например тысяча...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[8]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: _d_m_ 
Дата: 19.03.09 08:16
Здравствуйте, shrecher, Вы писали:

S>У Intel-a была такая попытка — Itanium64. Так был послан далеко и надолго, вернулись на Amd64.


Странно. А это что? :
http://www.itaniumsolutions.org/technology
http://h20341.www2.hp.com/integrity/cache/342254-0-0-178-352.html?jumpid=reg_R1002_RURU
Re[17]: Что за статистика-то такая волшебная? ;) в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 08:17
Оценка: :)
Здравствуйте, Erop, Вы писали:

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


E>>>А подробности будут?

E>>>Я всё равно не верю, что, Ada и С++ имеют одинаковый показатель.
G>>Можете не верить.
E>Дык данные-то есть? Методика, что и как измеряли? На каких примерах? Какая получилась статистика?
Не я мерял, во многих книгах и статьях читал упоминания этого факта.

E>>>Кроме того, на чём же тогда статистика для С# собрана, если только КРУПНЫЕ проекты идут в счёт? На сингулярити, что ли?

G>>На C# очень много крупных проектов, с миллионами строк кода.
E>"Очень много" -- это наверное больше 10? Не затруднит привести 5 C# проектов, которые на миллион строк тянут?
MySpace вас устроит?
Лениво узнавать сколько где строк
Re[40]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 08:20
Здравствуйте, Erop, Вы писали:

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


G>>>>Посмотрел то что я писал, для программы показатель COMMITED памяти редко переваливает за 300 метров, это очень много?

G>>У меня прога занимается расчетами и их визуализацией.
E>А для расчётов много памяти надо? Так сказать вне связи с языком? И как эта память выделяется? Большими кусками (ну там пять матриц по 50 метров) или небольшими объектами?
Для расчетов — большими, матрицы примерно 100х100.
Для визуализации — куча маленьких.
Я вообще говоря не следил за выделением памяти в этой программе.

G>>И что за программа которой столько памяти нужно?

E>Ну вот последняя моя прога, которой не хватало адресного пространства, занималась тем, что среди миллионов картинок пыталась найти кучки похожих, таким образом, что каждая картинка была бы хоть как-то похожа на какую-нибудь кучку, и при этом кучек было не много. Например тысяча...
Ну если все держать в памяти, то неудивительно что она закончилась.
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 19.03.09 08:21
Оценка: +2
Здравствуйте, gandjustas, Вы писали:

И>>>>>>Достаточно в таск менеджере взглянуть на кол-во используемой памяти .net прогой и С++ с эквивалентной функциональностью, чтобы понять, что ты гонишь.

G>>>>>Кроме того цифра в таск менеждере ни о чем не говорит, просто сверните приложение, будете удивлены.
CC>>>>Ты не в тот таскманагер смотришь, тебе уже сообщали.
G>>>Пор цифирке в таскабаре — не ко мне, они меня мало интересуют. Я производидтельность профайлером меряю.
CC>>И давно ты "кол-во используемой памяти" меряешь профайлером?
G>А я где-то говрил что меряю количество памяти?
G>Я же написал что эти цифирки не интересуют. Если нужно быстродействие, то меряю его профайлером.
Ты придуриваешься или всегда такой? Специально оставил поквоченную всю историю вопроса. Речь шла про (см. выше) память. Перечитай внимательно.

G>>>Перерасход памяти из-за большого количесва запиненных объекктов — признак неграмотности программиста

CC>>Т.е. использование одного компонента, написанного говнокодером херит всю стройную систему?
G>Оно всегда так, любой маленький кусок говнокода может испортить прогу.
G>А способов надолго запинить память не так много.
Беда то в том, что входной порог в managed сильно низкий, и обложенный памперсами нуб может спокойно говнокодить не получая при этом за свой говнокод по рукам — работает же, и не падает.

И>>>>>>а) есть стэк;

G>>>>>Стек заставляет копировать объекты чаще, чем нужно.
CC>>>>С чего бы вдруг?
G>>>Передача объектов по значению вызывает копирование.
CC>>Обьясни поподробнее какая связь между аллокацией на стеке и передачей объектов по значению?
G>А возвращение объектов при выделении памяти на стеке как происходит?
Если объект сколь либо серьезных размеров возвращают то никто его на стеке в здравом уме не станет размещать.
Кстати в случае если все таки размещают то ситуацию несколько спасает RVO.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 19.03.09 08:21
Здравствуйте, gandjustas, Вы писали:

NBN>>Тем не менее, человек владеющий С++ врядли будет предлагать использовать С, когда можно использовать С++.

G>Поправочка: знающий С++ и незнающий других, более выкосоуровневых языков.
Тогда по твоей логике такой предлагать С вместо С++ уж точно не будет. Так что не отнекивайся.

G>Много ли у вас кода на C++ (с классами, шаблонами, полиморфизмом, эксепшенами и динамической памятью) в тех местах где нужно высокое быстродействие?

С классами, шаблонами — навалом. На производительности результата они не сказываются.
Полиморфизм через виртуальное наследование и исключения — в HPC используются только тогда, когда без них ну совсем ВАЩЕ никак.
Динамическая память используется, но выделение/освобождение из критического кода выносятся по максимуму — всё выделяется заранее.

NBN>>А если вы владеете С++ недостаточно — то исчезает последняя почва для спора С++ — язык сложный и филиграный и использовать его в качестве лома действительно не стоит.

G>Вообще сложность C++ такова что его использовать почти нигде не стоит.
Это всего лишь твоё мнение.
Хочешь реальных сложностей — на асме под мелкие контроллеры попиши.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[32]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 19.03.09 08:22
Здравствуйте, gandjustas, Вы писали:

NBN>>А чем мешают шаблоны и классы там где нужна высокая производительность?

G>Вряд ли они там мешают, но не помогают — это точно.
Код писать с ними удобнее чем в С стиле.

NBN>>Ага, кроме как для игр, приложений затрагивающих эмбеддед сложнее простейших контроллеров, кроссплатформенных приложений которым требуется шустрая работа.

G>С играми отдельная песня — там сейчас во всю идет перенос тяжелых вычислений на аппартаные ускорители.
Да ты еще и геймдевелопер я смотрю И спец по переносу расчетов на GPU.
Ну-ка расскажи что там и как в геймдеве, а я послушаю.

G>Кроме того .NET не такой медленный как тут некоторые пытаются показать.

Уже всё всем давно показали: Cellfactor

G>А многим ли приложениям на десктопе нужная шустрая работа?

По мне так всем.

G>У меня таких только два — браузер и среда разработки. Причем опера (которая на C++) тормозит гораздо сильнее чем VS (которая на треть из managed модулей).

Ужас какой. Бери FF — она у меня тормозит куда меньше чем VS2003/2005/2008, которые у меня тут установлены.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[34]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 19.03.09 08:22
Здравствуйте, gandjustas, Вы писали:

G>>>Вряд ли они там мешают, но не помогают — это точно.

NBN>>Помогают — облегчают рефакторинг и читаемость кода.
G>Шаблоны улучшают читаемость только в самых простых случаях.
Шаблоны это не только александреску-стайл. С ними можно писать читабельный и удобный код.

NBN>>А в шарпе уже появилась возможность с пользой использовать всю доступную память? (а то в текущем проекте пришлось поизвращаться и залазить в узкие рамки

G>Я нормально выделял на шарпе под 2 гига. Вроде как 32-битная ось больше выделить не позволит.
до 64Gb позволит. Больше современный 32бит проц адресовать не может.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[25]: "С#" =def= "ХиндиС"? :))) в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 08:23
Здравствуйте, gandjustas, Вы писали:

G>Вот есть приложение на .NET — www.microsoft.com, там какая сложность?

Средняя сложность. Это если без БД, а только приложение само.

G>couchDB занимался один человек, у него времени на оптимизацию GC уж точно не было.

Ну так там есть ещё одна база данных -- его родная... Нужно было просто повторить архитектуру в целом...

G>Вопросы архитектуры ортогональны вопросам быстройдействия.

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

G>И опять приходим к тому что для того случая где нужно быстродействие используем C, а для всего остального высокоуровневые средства.

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

G>>>Ну на управляемых языках это так, на неупрвляемых — зависит от разработчика.

E>>Нет. Не зависит. Плохой разработчик потратит на реализацию сложного проекта бесконечное время Причём на ЛЮБОМ ЯЗЫКЕ...
G>А кто говорит о плохом разработчике?
Ну там повыше выделено три твоих слова...

Про индусов и ХиндиС, я так понимаю, возражений нет? Вот и славненько!
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[17]: Что за статистика-то такая волшебная? ;) в избранное  новое    модер. 
От: Mamuthttp://dmitriid.com/
Дата: 19.03.09 08:33
Оценка: +1
E> Кстати, миллион строк кода -- это не очень крупный проект...

Смотря, на чем писать
Re[31]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 08:35
Здравствуйте, CreatorCray, Вы писали:

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


И>>>>>>>Достаточно в таск менеджере взглянуть на кол-во используемой памяти .net прогой и С++ с эквивалентной функциональностью, чтобы понять, что ты гонишь.

G>>>>>>Кроме того цифра в таск менеждере ни о чем не говорит, просто сверните приложение, будете удивлены.
CC>>>>>Ты не в тот таскманагер смотришь, тебе уже сообщали.
G>>>>Пор цифирке в таскабаре — не ко мне, они меня мало интересуют. Я производидтельность профайлером меряю.
CC>>>И давно ты "кол-во используемой памяти" меряешь профайлером?
G>>А я где-то говрил что меряю количество памяти?
G>>Я же написал что эти цифирки не интересуют. Если нужно быстродействие, то меряю его профайлером.
CC>Ты придуриваешься или всегда такой? Специально оставил поквоченную всю историю вопроса. Речь шла про (см. выше) память. Перечитай внимательно.
Читай выделенное.

CC>Беда то в том, что входной порог в managed сильно низкий, и обложенный памперсами нуб может спокойно говнокодить не получая при этом за свой говнокод по рукам — работает же, и не падает.

Это же замечательно. Больше людей счастливы.

И>>>>>>>а) есть стэк;

G>>>>>>Стек заставляет копировать объекты чаще, чем нужно.
CC>>>>>С чего бы вдруг?
G>>>>Передача объектов по значению вызывает копирование.
CC>>>Обьясни поподробнее какая связь между аллокацией на стеке и передачей объектов по значению?
G>>А возвращение объектов при выделении памяти на стеке как происходит?
CC>Если объект сколь либо серьезных размеров возвращают то никто его на стеке в здравом уме не станет размещать.
Это каких размеров?

CC>Кстати в случае если все таки размещают то ситуацию несколько спасает RVO.

И сыылку спасают при передаче параметров.
Только все это знания, не нужные для решения задачи.
Re[31]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 08:39
Здравствуйте, CreatorCray, Вы писали:

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


NBN>>>Тем не менее, человек владеющий С++ врядли будет предлагать использовать С, когда можно использовать С++.

G>>Поправочка: знающий С++ и незнающий других, более выкосоуровневых языков.
CC>Тогда по твоей логике такой предлагать С вместо С++ уж точно не будет. Так что не отнекивайся.
Так я и предлагаю C для performance-critical кода. В остальных случаях более выкокоуровневые языку рулят.

G>>Много ли у вас кода на C++ (с классами, шаблонами, полиморфизмом, эксепшенами и динамической памятью) в тех местах где нужно высокое быстродействие?

CC>С классами, шаблонами — навалом. На производительности результата они не сказываются.
CC>Полиморфизм через виртуальное наследование и исключения — в HPC используются только тогда, когда без них ну совсем ВАЩЕ никак.
CC>Динамическая память используется, но выделение/освобождение из критического кода выносятся по максимуму — всё выделяется заранее.
Ну так у вас и получается C_с_клссами.

NBN>>>А если вы владеете С++ недостаточно — то исчезает последняя почва для спора С++ — язык сложный и филиграный и использовать его в качестве лома действительно не стоит.

G>>Вообще сложность C++ такова что его использовать почти нигде не стоит.
CC> Это всего лишь твоё мнение.
Да

CC>Хочешь реальных сложностей — на асме под мелкие контроллеры попиши.

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

Сложность C++ связана с кучей тонкостей, которые надо знать, помноженными на количество способов отстрелить себе ноги.
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Mamuthttp://dmitriid.com/
Дата: 19.03.09 08:41
Оценка: -1
CC> NBN>>Помогают — облегчают рефакторинг и читаемость кода.
CC> G>Шаблоны улучшают читаемость только в самых простых случаях.
CC> Шаблоны это не только александреску-стайл. С ними можно писать читабельный и удобный код.

Который невозможно сопровождать и отлаживать?
Re[33]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 08:45
Здравствуйте, CreatorCray, Вы писали:

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


NBN>>>А чем мешают шаблоны и классы там где нужна высокая производительность?

G>>Вряд ли они там мешают, но не помогают — это точно.
CC>Код писать с ними удобнее чем в С стиле.
А на более выкогоуровневых языках еще удобнее. Вы с этим спортить будете?

NBN>>>Ага, кроме как для игр, приложений затрагивающих эмбеддед сложнее простейших контроллеров, кроссплатформенных приложений которым требуется шустрая работа.

G>>С играми отдельная песня — там сейчас во всю идет перенос тяжелых вычислений на аппартаные ускорители.
CC>Да ты еще и геймдевелопер я смотрю И спец по переносу расчетов на GPU.
CC>Ну-ка расскажи что там и как в геймдеве, а я послушаю.
Не, я с геймдевом сталкивался всего пару раз и обра раза впечатления неочень.

G>>Кроме того .NET не такой медленный как тут некоторые пытаются показать.

CC>Уже всё всем давно показали: Cellfactor
Думаете нету тормозящего говна, написанного на любом языке?

G>>А многим ли приложениям на десктопе нужная шустрая работа?

CC>По мне так всем.


Я сталкивался с пользователями, которые вполне нормально мирились с генерацияей отчета на 1с (которая на С++) которая длилась двадцать минут.

Проснись, далеко не всем нужна запредельная производительность. А на практике получается что скорость работы программы упирается в диск\сеть и прочее.
Только в игрушках может исключение.
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 08:47
Здравствуйте, CreatorCray, Вы писали:

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


G>>>>Вряд ли они там мешают, но не помогают — это точно.

NBN>>>Помогают — облегчают рефакторинг и читаемость кода.
G>>Шаблоны улучшают читаемость только в самых простых случаях.
CC>Шаблоны это не только александреску-стайл. С ними можно писать читабельный и удобный код.
Ну я и говорю — с самых простых случаях, но в таких случаях C++ сильно уступает по выразительности C#.

NBN>>>А в шарпе уже появилась возможность с пользой использовать всю доступную память? (а то в текущем проекте пришлось поизвращаться и залазить в узкие рамки

G>>Я нормально выделял на шарпе под 2 гига. Вроде как 32-битная ось больше выделить не позволит.
CC>до 64Gb позволит. Больше современный 32бит проц адресовать не может.
Каким образом имея 32-битный указатель можно обратить за пределы четырех гигов?
Возможно сама ось может увидеть много памяти, а для 32-битного приложения 4 гига — предел.
Re[26]: "С#" =def= "ХиндиС"? :))) в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 08:49
Здравствуйте, Erop, Вы писали:

G>>Вопросы архитектуры ортогональны вопросам быстройдействия.

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

G>>И опять приходим к тому что для того случая где нужно быстродействие используем C, а для всего остального высокоуровневые средства.

E>Если тебе из С и С++ больше нравится первый, то никто не мешает тебе использовать первый. Один из существенных его недостатков тот, что на нём реально писать только то, где очень нужно быстродействие, а на плюсах можно и остальное.
Все остальное можно писать на более высокоуровневых языках.
Re[41]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 08:54
Здравствуйте, gandjustas, Вы писали:

G>Для расчетов — большими, матрицы примерно 100х100.

G>Для визуализации — куча маленьких.
Ну, а их много было-то?
Я так понимаю, что объекты по 80 кил уже в GC не играют, так что эти большие куски надо, по чеснаку, из 300 метров вычесть. Остальное -- оверхед на визуализаци....
G>Я вообще говоря не следил за выделением памяти в этой программе.
Ну сколько больших матриц-то было в курсе? Тысяча? Больше? Меньше? Если сильно меньше 1000, то максимум на матрицы 50 -- метров. Ещё пусть 50 -- это то, что нужно на визуализацию в нормальной проге. Это с бо-о-о-ольшим, я тебе скажу, запасом. Ну а 200 метров -- это то, что ты не следил/либо то, что GC съел от большой эффективности

G>Ну если все держать в памяти, то неудивительно что она закончилась.

Ну цель-то была не в памяти держать, или там не в памяти, а результат получить
Но там не совсем в памяти было, на самом деле, но это уже подробности. Результат, тем не менее получить удалось
Прототип на C# не смог ничего... ;(
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[18]: Что за статистика-то такая волшебная? ;) в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 08:58
Оценка: :)
Здравствуйте, gandjustas, Вы писали:

G>>>На C# очень много крупных проектов, с миллионами строк кода.

E>>"Очень много" -- это наверное больше 10? Не затруднит привести 5 C# проектов, которые на миллион строк тянут?
G>MySpace вас устроит?
G>Лениво узнавать сколько где строк
))

MySpace -- это аналог "одноклассников", что ли?
Если аналог, то не устроит. Даже на 30 человеко-лет оно не тянет, IMHO...
Да и на миллионы строк, тоже что-то не очень верится. Разве что они базу данных сами писали.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[18]: Что за статистика-то такая волшебная? ;) в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 08:58
Здравствуйте, Mamut, Вы писали:

E>> Кстати, миллион строк кода -- это не очень крупный проект...


M>Смотря, на чем писать


Я так понимаю, что на ХиндиСе имелось в виду...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[18]: Что за статистика-то такая волшебная? ;) в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 09:01
Оценка: +1 -1
Здравствуйте, gandjustas, Вы писали:

E>>Дык данные-то есть? Методика, что и как измеряли? На каких примерах? Какая получилась статистика?

G>Не я мерял, во многих книгах и статьях читал упоминания этого факта.

Я думаю, что это просто PR.
Уж больно факт малоправдоподобный

Неужели вот в этом коде:
inline void foo( int i ) { std::cout << i; }
вероятность ошибки в 5 раз меньше, чем в этом:
inline 
void foo( int i )
{
    std::cout << i;
}


А языки отличаются намного сильнее, чем разные стили кодирования в С++
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[19]: Что за статистика-то такая волшебная? ;) в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 09:06
Здравствуйте, Erop, Вы писали:

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


E>>>Дык данные-то есть? Методика, что и как измеряли? На каких примерах? Какая получилась статистика?

G>>Не я мерял, во многих книгах и статьях читал упоминания этого факта.

E>Я думаю, что это просто PR.

E>Уж больно факт малоправдоподобный

E>Неужели вот в этом коде:
inline void foo( int i ) { std::cout << i; }
вероятность ошибки в 5 раз меньше, чем в этом:
inline 
E>void foo( int i )
E>{
E>    std::cout << i;
E>}


E>А языки отличаются намного сильнее, чем разные стили кодирования в С++


Вам наверное стоит почитать как считают строки.
Re[42]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 09:08
Здравствуйте, Erop, Вы писали:

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


G>>Для расчетов — большими, матрицы примерно 100х100.

G>>Для визуализации — куча маленьких.
E>Ну, а их много было-то?
E>Я так понимаю, что объекты по 80 кил уже в GC не играют, так что эти большие куски надо, по чеснаку, из 300 метров вычесть. Остальное -- оверхед на визуализаци....
Это вообще к чему?

G>>Я вообще говоря не следил за выделением памяти в этой программе.

E>Ну сколько больших матриц-то было в курсе? Тысяча? Больше? Меньше? Если сильно меньше 1000, то максимум на матрицы 50 -- метров. Ещё пусть 50 -- это то, что нужно на визуализацию в нормальной проге. Это с бо-о-о-ольшим, я тебе скажу, запасом. Ну а 200 метров -- это то, что ты не следил/либо то, что GC съел от большой эффективности
А мне то что?
На всех машинах, где програ запускалась она работала отлично, ни тормозняков, ни дерганя, ни своппинга.

G>>Ну если все держать в памяти, то неудивительно что она закончилась.

E>Ну цель-то была не в памяти держать, или там не в памяти, а результат получить
E>Но там не совсем в памяти было, на самом деле, но это уже подробности. Результат, тем не менее получить удалось
E>Прототип на C# не смог ничего... ;(
Это говорит только о вашем неумении писать на C.
Re[27]: "С#" =def= "ХиндиС"? :))) в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 09:09
Здравствуйте, gandjustas, Вы писали:

G>Все остальное можно писать на более высокоуровневых языках.

Конечно можно. Но тлько если оно в вычислительном смысле ничего не делает. Максимум -- тупо считает по формулам.
Если есть сложная логика + много памяти + нужна скорость и компактность, то ХиндиС -- плохой выбор!
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[19]: Что за статистика-то такая волшебная? ;) в избранное  новое    модер. 
От: Mamuthttp://dmitriid.com/
Дата: 19.03.09 09:10
E> А языки отличаются намного сильнее, чем разные стили кодирования в С++

Известно, что количество ошибок на 100 строчек кода в среднем одинаково, вне зависимости от языка программирования. Вывод — надо писать на языке программирования, который помогает мысли выражать более коротко и ясно
Re[34]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: _d_m_ 
Дата: 19.03.09 09:10
Здравствуйте, gandjustas, Вы писали:

G>Я сталкивался с пользователями, которые вполне нормально мирились с генерацияей отчета на 1с (которая на С++) которая длилась двадцать минут.


1С — УГ.
Я знаю программу — Супермаг 2000, написанную на Оракле, отчет пару часов для небольшого магазина. И причем здесь Оракл? Хреновую программу можно написать на любом языке.
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 09:15
Здравствуйте, _d_m_, Вы писали:

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


G>>Я сталкивался с пользователями, которые вполне нормально мирились с генерацияей отчета на 1с (которая на С++) которая длилась двадцать минут.


___>1С — УГ.

___>Я знаю программу — Супермаг 2000, написанную на Оракле, отчет пару часов для небольшого магазина. И причем здесь Оракл? Хреновую программу можно написать на любом языке.
Я про это и говорю.
Самое главное что пользователи могут и пару часов подождать.
Re[43]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 09:15
Здравствуйте, gandjustas, Вы писали:

G>Это вообще к чему?

Я хочу понять насколько 300 метров было скушано по делу.
Для сравнения последний FR, при распознавании всех азиатских языков одновременно жрёт столько же...

G>На всех машинах, где програ запускалась она работала отлично, ни тормозняков, ни дерганя, ни своппинга.

То, что ты память не считаешь, а докупаешь, если не хватает, я уже понял. К сожалению в коробочном софте такой подход не совсем канает...

E>>Прототип на C# не смог ничего... ;(

G>Это говорит только о вашем неумении писать на C.
Правда? Если ты хочешь меня в чём-то убедить, то не надо делать утверждений, в которых ты заведомо менее компетентен, чем я (скажем оценивать моё умение писать на чём бы то ни было)
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[28]: "С#" =def= "ХиндиС"? :))) в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 09:16
Здравствуйте, Erop, Вы писали:

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


G>>Все остальное можно писать на более высокоуровневых языках.

E>Конечно можно. Но тлько если оно в вычислительном смысле ничего не делает. Максимум -- тупо считает по формулам.
Какой-то левый полет мысли.

E>Если есть сложная логика + много памяти + нужна скорость и компактность, то ХиндиС -- плохой выбор!

Покажите мне программу где все это нужно одновременно.
Re[20]: Что за статистика-то такая волшебная? ;) в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 09:17
Здравствуйте, gandjustas, Вы писали:

G>Вам наверное стоит почитать как считают строки.

1) Я хотел бы узнать методу, которая использовалась в ТОМ САМОМ ИССЛЕДОВАНИИИ
2) Вам, наверное, стоит попробовать понять, что же вам пытаются донести собеседники...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[36]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 19.03.09 09:17
Оценка: +1 :)
Здравствуйте, gandjustas, Вы писали:

G>Например при ипользовании ФВП с помощью буста затайпдефить все функции не получися.

Функциональщину на С++ на данный момент я отношу к редкостным извращениям, полагая что если надо функциональщина — лучше взять другой язык.
Появится поддержка functional из С++0х в компилерах — будем посмотреть.
А пока это не для С++.

G>Я видел игры с бюждетом в несколько миллионов рублей, там для программиста работы на пару месяцев.

А ты, эксперт. (С)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[45]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 19.03.09 09:17
Здравствуйте, MxKazan, Вы писали:

MK>Я, конечно, согласен, но только в определенной степени. Речь все-таки не о гигабайтах и 512 мегов сейчас уже редкость. Managed проги хоть и требуют памяти больше нативных, но все же не по 200 мегов на каждую фенечку. Тот же Creative Docs не отобрал у меня больше 120 Мб и при открытии всех сэмплов в поставке (я их покрутил/повертел/поперетаскивал).


Да блин у меня на 2 гигах открыты две VS2008 с решарпером и всё, 2 гига кончились. А проект запустить так вообще 2.7 гига коммит и веник в свопе надрывается.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[20]: Что за статистика-то такая волшебная? ;) в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 09:17
Здравствуйте, Mamut, Вы писали:

M>Известно, что количество ошибок на 100 строчек кода в среднем одинаково, вне зависимости от языка программирования. Вывод — надо писать на языке программирования, который помогает мысли выражать более коротко и ясно


Откуда это известно-то? Я в это не верю, например!
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[36]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 09:20
Здравствуйте, gandjustas, Вы писали:

G>Самое главное что пользователи могут и пару часов подождать.

Это только в двух случаях.
1) Если решают что купить одни, а "подождать" -- другие.
2) Если совсем нет конкурентов
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[44]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 09:20
Здравствуйте, Erop, Вы писали:

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


G>>Это вообще к чему?

E>Я хочу понять насколько 300 метров было скушано по делу.
А вам не все равно?
Мне например все равно.
Прога не тормозила нигде.

E>Для сравнения последний FR, при распознавании всех азиатских языков одновременно жрёт столько же...

Я очень рад за него.

G>>На всех машинах, где програ запускалась она работала отлично, ни тормозняков, ни дерганя, ни своппинга.

E>То, что ты память не считаешь, а докупаешь, если не хватает, я уже понял. К сожалению в коробочном софте такой подход не совсем канает...
Не думаю что в коробочном софте мне придется решать матричные уравнения с размерносятми 100 на 100.
Re[29]: "С#" =def= "ХиндиС"? :))) в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 09:21
Оценка: -1
Здравствуйте, gandjustas, Вы писали:

G>Покажите мне программу где все это нужно одновременно.

Почти весь сложный софт. От базы данных, до фотошопа...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[37]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 09:23
Оценка: :))
Здравствуйте, CreatorCray, Вы писали:

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


G>>Например при ипользовании ФВП с помощью буста затайпдефить все функции не получися.

CC>Функциональщину на С++ на данный момент я отношу к редкостным извращениям, полагая что если надо функциональщина — лучше взять другой язык.
CC>Появится поддержка functional из С++0х в компилерах — будем посмотреть.
CC>А пока это не для С++.
То есть всетаки с++ недостаточно выразительный.
Что и требовалось доказать.

G>>Я видел игры с бюждетом в несколько миллионов рублей, там для программиста работы на пару месяцев.

CC>А ты, эксперт. (С)
Нет, там программист действительно за пару месяцев справился.
Re[21]: Что за статистика-то такая волшебная? ;) в избранное  новое    модер. 
От: Mamuthttp://dmitriid.com/
Дата: 19.03.09 09:23
Оценка:1 (1) +1
E> M>Известно, что количество ошибок на 100 строчек кода в среднем одинаково, вне зависимости от языка программирования. Вывод — надо писать на языке программирования, который помогает мысли выражать более коротко и ясно

E> Откуда это известно-то? Я в это не верю, например!


Надеюсь кто-то найдет ссылку и скинет. Проводила иследования то ли Моторолла, то ли Эрикссон.
Re[36]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: _d_m_ 
Дата: 19.03.09 09:26
Здравствуйте, gandjustas, Вы писали:

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


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


G>>>Я сталкивался с пользователями, которые вполне нормально мирились с генерацияей отчета на 1с (которая на С++) которая длилась двадцать минут.


___>>1С — УГ.

___>>Я знаю программу — Супермаг 2000, написанную на Оракле, отчет пару часов для небольшого магазина. И причем здесь Оракл? Хреновую программу можно написать на любом языке.
G>Я про это и говорю.
G>Самое главное что пользователи могут и пару часов подождать.

Ну как знать. У нас если отчет больше 5 минут — все жалобы: программа зависла — они просто убивают браузер. Кстати, MS SQL 2005 + ASP.Net 2.0 + IE7. Есть инсталяции работающие на сервере 2xPIII 1GHz. И и ничего — отчеты до 5 минут.
Кстати: спецом тестировали на всех браузерах стресс тесты — нормально выводить таблицу из 20000 строк может за 5 мин только IE. Остальные очень умные браузеры выводят таблицу не целиком, а каждую добавленную строку пытаются отобразить в итоге — больше часа.
Re[45]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 09:27
Здравствуйте, gandjustas, Вы писали:

E>>Для сравнения последний FR, при распознавании всех азиатских языков одновременно жрёт столько же...

G>Я очень рад за него.

Фишка в том, что он с ещё кучкой прог может одновременно работать. А если всё писать на ХиндиС, то на каждую прогну придётся по компу покупать ;(

G>Не думаю что в коробочном софте мне придется решать матричные уравнения с размерносятми 100 на 100.

Что-то как-то конкретики мало. То ты приводишь как типичный пример эту решалку уравнений, то потом, оказывается, что это маргинальщина какая-то.
Кстати, так сколько матриц-то 100х100 было нужно ОДНОВРЕМЕННО? Или у тебя уже настолько C# головного мозга, что ты это и прикинуть даже не можешь?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[46]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 09:35
Здравствуйте, Erop, Вы писали:

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


E>>>Для сравнения последний FR, при распознавании всех азиатских языков одновременно жрёт столько же...

G>>Я очень рад за него.

E>Фишка в том, что он с ещё кучкой прог может одновременно работать. А если всё писать на ХиндиС, то на каждую прогну придётся по компу покупать ;(

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

G>>Не думаю что в коробочном софте мне придется решать матричные уравнения с размерносятми 100 на 100.

E>Что-то как-то конкретики мало. То ты приводишь как типичный пример эту решалку уравнений, то потом, оказывается, что это маргинальщина какая-то.
E>Кстати, так сколько матриц-то 100х100 было нужно ОДНОВРЕМЕННО?
30-40 висят в памяти для истории, сколько временных создавалось при расчетах лень считать.

E>Или у тебя уже настолько C# головного мозга, что ты это и прикинуть даже не можешь?

Ты глумишься и не понимаешь что мне абсолютно незачем считать сколько у меня там матриц для решения задачи с приемлимым качеством.
Вот как раз отбрасывание многих незначящих для решения деталей и дают преимущество высокоуровневым языкам.
Re[42]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: _d_m_ 
Дата: 19.03.09 09:36
Здравствуйте, hattab, Вы писали:

H>Да какой бы я пример не привел, ты назовешь его левым или говнософтом. Ладно, еще пример из говнософта. Запускаем Paint.NET и открываем в нем картинку (я открыл 1600x1200). Выделяем всю картинку Ctrl+A. Смотрим на счетчики GC и видим, что в мирно крутящем пунктир выделения Paint.NET'е, счетчик GC тикает раз-два-три в секунду.


H>Мне, как пользователю, не интересны резоны GC. Я вижу результат -- чрезмерное потребление. Делаем простой эксперимент. Запускаем Paint.NET, который откушал сразу 35Mb (судя по твоим словам, большая часть этой цифры -- резерв, который будет возвращен в систему по первому требованию). Теперь начинаем запускать много тяжелого софта: две Delphi IDE, Open Office Writer, Abode Reader, Opera (она у меня жрет в районе 160Mb, из-за размера почтовой базы), VirtualBox. Все система ушла в своп. Смотрим на потребление Paint.NET... оно снизилось ровно на 300Кб. Выводы?


Хорошо а как быть с программой печати акцизных марок фирмы Атлас написанной на дельфи жрущей 300Мб оперативы, и текущей как дырявое ведро? (Это было года 3 назад).
Re[47]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 10:13
Здравствуйте, gandjustas, Вы писали:

E>>Фишка в том, что он с ещё кучкой прог может одновременно работать. А если всё писать на ХиндиС, то на каждую прогу придётся по компу покупать ;(

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

Ты читать умеешь? Выделенное перечти, пожалуйста...

E>>Кстати, так сколько матриц-то 100х100 было нужно ОДНОВРЕМЕННО?

G>30-40 висят в памяти для истории, сколько временных создавалось при расчетах лень считать.
Это так сложно?
Считать не обязательно достаточно прикинуть с точностью до порядка.
50 — 100 -- нормальная оценка?

Если да, то это всего-навсего 8 метров... Так что твоя прока тупо профукала 250 из 300, то есть более 80% использованной памяти!!!

G>Вот как раз отбрасывание многих незначящих для решения деталей и дают преимущество высокоуровневым языкам.

Ну ты уже настолько абстрагировался, что и СЕЙЧАС прикинуть не можешь, что ли?
Тогда у тебя без шуток C#-головного-мозга, IMHO
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[21]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 19.03.09 10:36
Оценка: +3
Здравствуйте, gandjustas, Вы писали:

G>Да, в C++ надо думать о том когда и как выдеоять и освобожать память.

Нет, это нужно в С.
Ну или в С++ если программист им не владеет.

G>Обычно ручная возьня с ресурсами очень сильно увеличивает время разработки программ. Такую возьню могут позволить себе только очень крупные фирмы.

Не очень сильно.
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 19.03.09 10:36
Оценка: +2
Здравствуйте, Erop, Вы писали:

kuj>>Разработчика, который пытается использовать ВСЮ память надо бить сильно по рукам.


E>Я знаю задачи, в которых это правильная стратегия...


Не корми тролля
Re[46]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 19.03.09 10:42
Здравствуйте, CreatorCray, Вы писали:

CC>Да блин у меня на 2 гигах открыты две VS2008 с решарпером и всё, 2 гига кончились. А проект запустить так вообще 2.7 гига коммит и веник в свопе надрывается.

Да правда чтоль. На работе 2 Гига. Бывает и по три Студии открываю. И ничего не тормозит вообще. Про проект ничо не скажу, оно в зачаточном состоянии.
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[34]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 19.03.09 11:09
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>Я сталкивался с пользователями, которые вполне нормально мирились с генерацияей отчета на 1с (которая на С++) которая длилась двадцать минут.

Вообще-то на васике.
Re[48]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 11:22
Здравствуйте, Erop, Вы писали:

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


E>>>Фишка в том, что он с ещё кучкой прог может одновременно работать. А если всё писать на ХиндиС, то на каждую прогу придётся по компу покупать ;(

G>>Большенство прог, будучи неактивнми вообще не мешают други, при необходимости скидываясь в своп чуть ли не полностью.
G>>Причем это не зависит от языка разработки.
E>Ты читать умеешь? Выделенное перечти, пожалуйста...
Сколько у тебя на компютере программ "одноврменно работают" без твоего участия?

E>>>Кстати, так сколько матриц-то 100х100 было нужно ОДНОВРЕМЕННО?

G>>30-40 висят в памяти для истории, сколько временных создавалось при расчетах лень считать.
E>Это так сложно?
E>Считать не обязательно достаточно прикинуть с точностью до порядка.
E>50 — 100 -- нормальная оценка?
Наверное.

E>Если да, то это всего-навсего 8 метров... Так что твоя прока тупо профукала 250 из 300, то есть более 80% использованной памяти!!!

О ужас, горе мне.
А вообще меня это нисколько не волнует.
Re[34]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 19.03.09 11:34
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

NBN>>>>А чем мешают шаблоны и классы там где нужна высокая производительность?

G>>>Вряд ли они там мешают, но не помогают — это точно.
CC>>Код писать с ними удобнее чем в С стиле.
G>А на более выкогоуровневых языках еще удобнее. Вы с этим спортить будете?
Ты софист, с тобой спорить только время тратить.
Какое отношение другие языки имеют к сравнению С и С++?

NBN>>>>Ага, кроме как для игр, приложений затрагивающих эмбеддед сложнее простейших контроллеров, кроссплатформенных приложений которым требуется шустрая работа.

G>>>С играми отдельная песня — там сейчас во всю идет перенос тяжелых вычислений на аппартаные ускорители.
CC>>Да ты еще и геймдевелопер я смотрю И спец по переносу расчетов на GPU.
CC>>Ну-ка расскажи что там и как в геймдеве, а я послушаю.
G>Не, я с геймдевом сталкивался всего пару раз и обра раза впечатления неочень.
Т.е. ты не в курсе.
Но мнение, как полагается, имеешь.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[36]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 19.03.09 11:34
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>>>Я сталкивался с пользователями, которые вполне нормально мирились с генерацияей отчета на 1с (которая на С++) которая длилась двадцать минут.

___>>1С — УГ.
___>>Я знаю программу — Супермаг 2000, написанную на Оракле, отчет пару часов для небольшого магазина. И причем здесь Оракл? Хреновую программу можно написать на любом языке.
G>Я про это и говорю.
G>Самое главное что пользователи могут и пару часов подождать.
Значит нужно писать хреновые программы?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[36]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 19.03.09 11:34
Здравствуйте, gandjustas, Вы писали:

G>>>>>Вряд ли они там мешают, но не помогают — это точно.

NBN>>>>Помогают — облегчают рефакторинг и читаемость кода.
G>>>Шаблоны улучшают читаемость только в самых простых случаях.
CC>>Шаблоны это не только александреску-стайл. С ними можно писать читабельный и удобный код.
G>Ну я и говорю — с самых простых случаях, но в таких случаях C++ сильно уступает по выразительности C#.
Откуда в сравнении С и С++ взялся С#? Мсье софист со стажем?

G>Каким образом имея 32-битный указатель можно обратить за пределы четырех гигов?

G>Возможно сама ось может увидеть много памяти, а для 32-битного приложения 4 гига — предел.
ОС это точно такой же код, как и в приложении, только привилегий побольше.
А добраться можно например через сегментные регистры и LDT, но это уже нестандартное приложение получится.
Так что технически это осуществимо.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[36]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 19.03.09 11:34
Здравствуйте, Mamut, Вы писали:

M>Который невозможно сопровождать и отлаживать?

С неалександреску шаблонами — читабельный и отлаживабельный
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[32]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 19.03.09 11:34
Здравствуйте, gandjustas, Вы писали:

И>>>>>>>>Достаточно в таск менеджере взглянуть на кол-во используемой памяти .net прогой и С++ с эквивалентной функциональностью, чтобы понять, что ты гонишь.

G>>>>>>>Кроме того цифра в таск менеждере ни о чем не говорит, просто сверните приложение, будете удивлены.
CC>>>>>>Ты не в тот таскманагер смотришь, тебе уже сообщали.
G>>>>>Пор цифирке в таскабаре — не ко мне, они меня мало интересуют. Я производидтельность профайлером меряю.
CC>>>>И давно ты "кол-во используемой памяти" меряешь профайлером?
G>>>А я где-то говрил что меряю количество памяти?
G>>>Я же написал что эти цифирки не интересуют. Если нужно быстродействие, то меряю его профайлером.
CC>>Ты придуриваешься или всегда такой? Специально оставил поквоченную всю историю вопроса. Речь шла про (см. выше) память. Перечитай внимательно.
G>Читай выделенное.
Да да, тебе про потребляемую память, а ты "а мне до сиреневой звезды, у меня профайлер!".

G>Это же замечательно. Больше людей счастливы.

Особенно те, которым потом этот говнокод отдают на переделку.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[29]: "С#" =def= "ХиндиС"? :))) в избранное  новое    модер. 
От: CreatorCray 
Дата: 19.03.09 11:34
Здравствуйте, gandjustas, Вы писали:

E>>Если есть сложная логика + много памяти + нужна скорость и компактность, то ХиндиС -- плохой выбор!

G>Покажите мне программу где все это нужно одновременно.
Алгоритм факторизации MPQS например. Памяти надо тонны, расчетов на месяцы.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[30]: "С#" =def= "ХиндиС"? :))) в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 11:42
Здравствуйте, CreatorCray, Вы писали:

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


E>>>Если есть сложная логика + много памяти + нужна скорость и компактность, то ХиндиС -- плохой выбор!

G>>Покажите мне программу где все это нужно одновременно.
CC>Алгоритм факторизации MPQS например. Памяти надо тонны, расчетов на месяцы.
Угу, и его чаще всего пишут на С, опять С++ остался неудел
Re[37]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Mamuthttp://dmitriid.com/
Дата: 19.03.09 11:46
Здравствуйте, CreatorCray, Вы писали:

CC> M>Который невозможно сопровождать и отлаживать?


CC> С неалександреску шаблонами — читабельный и отлаживабельный


Ну, когда на банальном СТЛе может вывалиться простыня в 5-7 строк звернутых друг в друга шаблонах — все равно не очень отлаживабельный http://pascalg.wordpress.com/2008/02/24/stl-error-messages-are-so-great/

#include <iostream>
#include <vector>

using namespace std;

int main(){
      vector<int> aList;

       aList.insert(10);    // итератор намеренно пропущен

       return 0;
}


Сообщение об ошибке

pascal@zetwal:~/temp$ g++ stltest.cpp
stltest.cpp: In function ‘int main()’:
stltest.cpp:9: error: no matching function for call to ‘std::vector<int, std::allocator<int> >::insert(int)’
/usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/vector.tcc:93:

note: candidates are: typename std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::insert(__gnu_cxx::__normal_iterator<typename _Alloc::pointer, std::vector<_Tp, _Alloc> >, const _Tp& ) [with _Tp = int, _Alloc = std::allocator<int>]
/usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/stl_vector.h:657: note: void std::vector<_Tp, _Alloc>::insert(__gnu_cxx::__normal_iterator<typename _Alloc::pointer, std::vector<_Tp, _Alloc> >, size_t, const _Tp& ) [with _Tp = int, _Alloc = std::allocator<int>]


Re[47]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 19.03.09 11:51
Здравствуйте, MxKazan, Вы писали:

CC>>Да блин у меня на 2 гигах открыты две VS2008 с решарпером и всё, 2 гига кончились. А проект запустить так вообще 2.7 гига коммит и веник в свопе надрывается.

MK>Да правда чтоль. На работе 2 Гига. Бывает и по три Студии открываю. И ничего не тормозит вообще.
MK>Про проект ничо не скажу, оно в зачаточном состоянии.
Проект на шарпе, здоровый, писан когда то американскими индусами.
Стало легче когда решарпер снёс.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[38]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 19.03.09 11:51
Здравствуйте, gandjustas, Вы писали:

G>>>Например при ипользовании ФВП с помощью буста затайпдефить все функции не получися.

CC>>Функциональщину на С++ на данный момент я отношу к редкостным извращениям, полагая что если надо функциональщина — лучше взять другой язык.
CC>>Появится поддержка functional из С++0х в компилерах — будем посмотреть.
CC>>А пока это не для С++.
G>То есть всетаки с++ недостаточно выразительный.
В сравнении с С, про который речь в этой ветке?

G>Что и требовалось доказать.

Сам себе придумал, сам себе доказал. Как тебе жить просто, а.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[31]: "С#" =def= "ХиндиС"? :))) в избранное  новое    модер. 
От: CreatorCray 
Дата: 19.03.09 11:58
Здравствуйте, gandjustas, Вы писали:

E>>>>Если есть сложная логика + много памяти + нужна скорость и компактность, то ХиндиС -- плохой выбор!

G>>>Покажите мне программу где все это нужно одновременно.
CC>>Алгоритм факторизации MPQS например. Памяти надо тонны, расчетов на месяцы.
G>Угу, и его чаще всего пишут на С, опять С++ остался неудел
А пацаны то и не знают
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[38]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 19.03.09 11:58
Здравствуйте, Mamut, Вы писали:

M>Сообщение об ошибке


M>pascal@zetwal:~/temp$ g++ stltest.cpp

M>stltest.cpp: In function ‘int main()’:
M>stltest.cpp:9: error: no matching function for call to ‘std::vector<int, std::allocator<int> >::insert(int)’
M>/usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/vector.tcc:93:

M>note: candidates are: typename std::vector<_Tp, _Alloc>::iterator std::vector<_Tp, _Alloc>::insert(__gnu_cxx::__normal_iterator<typename _Alloc::pointer, std::vector<_Tp, _Alloc> >, const _Tp& ) [with _Tp = int, _Alloc = std::allocator<int>]

M>/usr/lib/gcc/i486-linux-gnu/4.0.3/../../../../include/c++/4.0.3/bits/stl_vector.h:657: note: void std::vector<_Tp, _Alloc>::insert(__gnu_cxx::__normal_iterator<typename _Alloc::pointer, std::vector<_Tp, _Alloc> >, size_t, const _Tp& ) [with _Tp = int, _Alloc = std::allocator<int>]

M>[/q]


Вай батыр, какой дурдом!
Меняй компилер, срочно!
Кошерный выводит так:

Compiling with Intel(R) C++ 11.0.061 [IA-32]... (Intel C++ Environment)
main.cpp
.\main.cpp(9): error: no instance of overloaded function "std::vector<_Ty, _Ax>::insert [with _Ty=int, _Ax=std::allocator<int>]" matches the argument list
            argument types are: (int)
            object type is: std::vector<int, std::allocator<int>>
      aList.insert(10);    // итератор намеренно пропущен
            ^

compilation aborted for .\main.cpp (code 2)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[39]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 11:59
Оценка: -1
Здравствуйте, CreatorCray, Вы писали:

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


G>>>>Например при ипользовании ФВП с помощью буста затайпдефить все функции не получися.

CC>>>Функциональщину на С++ на данный момент я отношу к редкостным извращениям, полагая что если надо функциональщина — лучше взять другой язык.
CC>>>Появится поддержка functional из С++0х в компилерах — будем посмотреть.
CC>>>А пока это не для С++.
G>>То есть всетаки с++ недостаточно выразительный.
CC>В сравнении с С, про который речь в этой ветке?
В сравнении с другими языками, поддерживающими ФВП например.

G>>Что и требовалось доказать.

CC>Сам себе придумал, сам себе доказал. Как тебе жить просто, а.
Ну почему же, вы тут упорно доказываете что все надо писать на С++.
А оказывается что там где требуется производительность там пишется все на С (или на подмножестве С++), а там где производительность не требуется выразительности плюсов не хватает.
Re[39]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Mamuthttp://dmitriid.com/
Дата: 19.03.09 12:02
CC> Вай батыр, какой дурдом!
CC> Меняй компилер, срочно!

Это не решение проблемы
Re[38]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 19.03.09 12:02
Здравствуйте, Mamut, Вы писали:

M>Ну, когда на банальном СТЛе может вывалиться простыня в 5-7 строк звернутых друг в друга шаблонах — все равно не очень отлаживабельный http://pascalg.wordpress.com/2008/02/24/stl-error-messages-are-so-great/

хы, и это разве сообщение об ошибке которым стоит гордится?

проанализировал как я анализировал:
взгяд ухватился за стрчку error:
далее прочитал текст no matching function for call
далее прочитал insert(int)
далее прочитал to ‘std::vector<int, std::allocator<int> >
далее взгляд перенёсся на aList.insert(10);
далее было задействовано около двух десятков лицевых мышц для выражения типа o_O

потрачено: ~6 секунд.
вывод: ето даже не попытка ввести в замешательство.

P.S. Рекомендую подключить буст.
People write code, programming languages don't.
Re[39]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Mamuthttp://dmitriid.com/
Дата: 19.03.09 12:05
Х> потрачено: ~6 секунд.
Х> вывод: ето даже не попытка ввести в замешательство.

Х> P.S. Рекомендую подключить буст.


Нууу, так нечестно Это должно было быть моим следубщим ходом На самом деле, vector — это вообще так, мелочевка Но ошибки уже впечатляют
Re[40]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 19.03.09 12:18
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>>>То есть всетаки с++ недостаточно выразительный.

CC>>В сравнении с С, про который речь в этой ветке?
G>В сравнении с другими языками, поддерживающими ФВП например.
А они откуда взялись в обсуждении "С или С++"?
Ты с темы не съезжай, будь так любезен.

G>>>Что и требовалось доказать.

CC>>Сам себе придумал, сам себе доказал. Как тебе жить просто, а.
G>Ну почему же, вы тут упорно доказываете что все надо писать на С++.
Примеры моих постов, где говорится "что все надо писать на С++" в студию. Причем там должно говориться "все надо писать на С++" и никак иначе.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[40]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 19.03.09 12:18
Здравствуйте, Mamut, Вы писали:

CC>> Меняй компилер, срочно!

M>Это не решение проблемы
Ну так диагностика об ошибке то куда вменяемее. Проблема я так понял в неразборчивой простыне в случае ошибки.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 19.03.09 12:21
Здравствуйте, CreatorCray, Вы писали:
G>>Не зачастую, всегда, но GC работает в сотни раз реже, чем выделение-совобождение памяти стандартным аллокатором.
CC>Это как напишешь. В unmanaged в реальном коде где надо performance выделение/освобождение памяти выносят "за скобки" и делают крайне редко.
Ты не поверишь — в managed делают точно так же. К примеру, для интенсивных сокетных операций на старте приложения распределяют буфера, которые впоследствии будут пиниться, чтобы защититься от фрагментации хипа.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[31]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 19.03.09 12:21
Здравствуйте, CreatorCray, Вы писали:
CC>Беда то в том, что входной порог в managed сильно низкий, и обложенный памперсами нуб может спокойно говнокодить не получая при этом за свой говнокод по рукам — работает же, и не падает.
Ничего страшного. На плюсах нуб точно так же может говнокодить. То, что приложение сумело запуститься у нуба на машине, никак не гарантирует того, что оно будет устойчиво работать во всех сценариях.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[40]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 19.03.09 12:38
Здравствуйте, hattab, Вы писали:
G>>Включай мозг: все что требуется от такого "графа" только возможность проверить присуствует ли объект в нем. Это значит что достаточно битовго флага.

H>Давай ты последуешь своему совету и подумаешь, что такое граф и, как с помощью битового флага (а точнее речь идет битовом массиве, как я понимаю) можно определить находжение объекта в куче для последующих манипуляций с оным.

Увы, всё так и есть. Упорство в заблуждениях никого не красит. Никакого "отдельного" графа GC не строит. Он раскрашивает существующий.
Объем памяти, нужный для Register Map, крайне мал.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[49]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 12:59
Здравствуйте, gandjustas, Вы писали:

G>Сколько у тебя на компютере программ "одноврменно работают" без твоего участия?

По пять — десять на каждом...

E>>Если да, то это всего-навсего 8 метров... Так что твоя прока тупо профукала 250 из 300, то есть более 80% использованной памяти!!!

G>О ужас, горе мне.
G>А вообще меня это нисколько не волнует.
Я понимаю, что тебя это не волнует. Но те, кого парит эффективность их программ, несколько недовольны таким положением вещей...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[2]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: ambel-vlad 
Дата: 19.03.09 13:34
Оценка: +2 :)
Hi gandjustas

Начал читать это
G>2)Платформа .NET, на которой работает C# — это не только десктопные программы,

И сразу вспомнил:

Кролики — это не только ценный мех ...

Без обид. Я пишу не имея камня за пазухой. Просто само и сразу же всплыло в голове.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[17]: Что за статистика-то такая волшебная? ;) в избранное  новое    модер. 
От: Sansend 
Дата: 19.03.09 14:30
Оценка:4 (2)
Здравствуйте, Erop, Вы писали:

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


E>>>А подробности будут?

E>>>Я всё равно не верю, что, Ada и С++ имеют одинаковый показатель.
G>>Можете не верить.
E>Дык данные-то есть? Методика, что и как измеряли? На каких примерах? Какая получилась статистика?

E>>>Кроме того, на чём же тогда статистика для С# собрана, если только КРУПНЫЕ проекты идут в счёт? На сингулярити, что ли?

G>>На C# очень много крупных проектов, с миллионами строк кода.
E>"Очень много" -- это наверное больше 10? Не затруднит привести 5 C# проектов, которые на миллион строк тянут?
E>Кстати, миллион строк кода -- это не очень крупный проект...
E>Крупный проект, это от 100-300 человеколет, например...


Могу привести пример ediEnterprise ЕРП система для логистики(подробностей не знаю). Штат разработчиков — около 90 человек, полностью написано на C#, тянет на 300-400 человеколет =)
Re[18]: Что за статистика-то такая волшебная? ;) в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 15:38
Здравствуйте, Sansend, Вы писали:

S>Могу привести пример ediEnterprise ЕРП система для логистики(подробностей не знаю). Штат разработчиков — около 90 человек, полностью написано на C#, тянет на 300-400 человеколет =)


Да, согласен, это уже крупный проект. Интересно, кстати, какое там соотношение между SQL и C#?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[45]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 19.03.09 17:20
Оценка: +1 -1
Здравствуйте, gandjustas, Вы писали:

G>>>Ключевое выделил.

H>>Угу, а при его отсутствии начнется деградация производительности (ведь алгоритмы перестанут работать эффективно, как следует из цитаты)
G>Я например замечаю что память кончается конда показатель выделенной физической памяти подбирается к 98 процентам.
G>В таких условиях тормозит все.

Отсутствие большого объема свободной памяти и отстутствие свободной памяти вообще, сравнивать, как бы, нельзя

H>>Во ведении там есть несколько слов, найдешь А вообще, слова теже самые, что и у Рихтера. Я вообще удивлен, чего ты этот очевидный и признаваемый факт отрицаешь...

G>Ага, видно что прочитал введение и заключение.

Я тебе уже цитировал Рихтера, и не вижу ни какой необходимости цитировать тоже самое еще раз

H>>Не жалко. Просто ты говорил о редких сборках мусора, а я тебе примеры привожу, которые показывают обратное.

G>3 раза в секунду это часто?
G>На гигагерцовом процессоре за секунду выполняется 1000000000 тактов. При этом если в приложении ничего не происходит, то все поколение становится мксором и не происходит фактически уплотнения кучи.

Это демагогия.

G>Сборщик мусора на многопроцесорной машине работает в фоновом режиме по большей части.

G>Так что влияние на производительность минимальная.

Сборщик мусора, даже на многопроцессорной машине, даже "серверный", вынужден останавливать выполняющиеся потоки. Concurent GC требует синхронизации, что на производительности не может не сказаться. Поколения конечно хорошо, но приводимый мною пример с XML-RPC.NET вызывает таки сборку во втором поколении (причем размер кучь у поколений постоянно меняется)

G>>>Надо бы ло внимательнее статью читать, "вдруг" не бывает. тем более это тоже контролируется.

H>>Именно вдруг. Работу GC ты можешь "типа контролировать" подстраивая алгоритм под его текущую стратегию. Зря чтоль Рихтер советует вызывать GC.Collect маскируя его за "тяжелыми операциями"?
G>Мдя... не надо так явно показывать свою недалекость. Читайте про GCSettrings.LatencyMode.

Это не управление, это декларация желаний

H>>Синтетика все что угодно показать может, главное приготовить как надо. Ты, как надо было тебе, приготовил.

G>Ну приготовь как тебе надо, покажи обратное.

Перейдем сразу к оглашению результатов: у меня толще!

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


G>А че, нативное приложение в свом не выгружается? Что ты пытаешься показать этой фразой?


Я говорю о том, что Paint.NET откушавший больше чем Turbo Delphi IDE, отправляется в утиль и остается там навсегда.
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 19.03.09 17:21
Здравствуйте, gandjustas, Вы писали:

G>Кстати о базах: есть couchDB, которая написана на Erlang, который является одним из самых медленных языков. И ниче, всем кто пользуется — нравится.


У Borland/CodeGear тоже есть SQL сервер -- BlackFish, на Java и .Net. Я не в курсе, как там с перформансом, но и ежу понятно, что основная нагрузка при работе с БД ложится на дисковую систему, а вовсе не на управляемый код.
Re[38]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 19.03.09 17:21
Здравствуйте, Erop, Вы писали:

G>>Посмотрел то что я писал, для программы показатель COMMITED памяти редко переваливает за 300 метров, это очень много?

E>От программы зависит. Для тачки с 512 Мб на борту это больше половины доступного RAM...
E>Так что, если прога -- это часы, например, то привет...

Более того, из 512, после загрузки системы, занято ~200 Не то чтобы мне было жалко денег (~$170 за 2Gb), просто пока меня реально не припрет покупать не буду, а .Net софт меня не припирает
Re[34]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 19.03.09 17:27
Здравствуйте, gandjustas, Вы писали:

G>Я сталкивался с пользователями, которые вполне нормально мирились с генерацияей отчета на 1с (которая на С++) которая длилась двадцать минут.


У меня был контракт с конторой, в которой зарплата расчитывалась 2.5 суток (!) (большая контора). Они тоже считали это нормальным, пока мы не сократили время до 40 минут (переписали с нуля)

G>Проснись, далеко не всем нужна запредельная производительность. А на практике получается что скорость работы программы упирается в диск\сеть и прочее.

G>Только в игрушках может исключение.

Скажи, а во что упирается меню в WLW, отзывчивость которого меня жутко печалит (при установке он прогоняется ngen'ом, так что это не JIT)?
Re[43]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 19.03.09 17:37
Здравствуйте, _d_m_, Вы писали:

___>Хорошо а как быть с программой печати акцизных марок фирмы Атлас написанной на дельфи жрущей 300Мб оперативы, и текущей как дырявое ведро? (Это было года 3 назад).


Странный вопрос... Я разве где-то утверждал, что Delphi или любой другой натив есть решение всех проблем?
Re[41]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 19.03.09 17:45
Здравствуйте, Sinclair, Вы писали:

H>>Давай ты последуешь своему совету и подумаешь, что такое граф и, как с помощью битового флага (а точнее речь идет битовом массиве, как я понимаю) можно определить находжение объекта в куче для последующих манипуляций с оным.

S>Увы, всё так и есть. Упорство в заблуждениях никого не красит. Никакого "отдельного" графа GC не строит. Он раскрашивает существующий.
S>Объем памяти, нужный для Register Map, крайне мал.

Русский перевод Рихтера ввел в заблуждение (я его цитировал) Прозрение пришло в виде другого перевода Рихтера
Re[46]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 17:49
Оценка: -1 :)
Здравствуйте, hattab, Вы писали:

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


G>>>>Ключевое выделил.

H>>>Угу, а при его отсутствии начнется деградация производительности (ведь алгоритмы перестанут работать эффективно, как следует из цитаты)
G>>Я например замечаю что память кончается конда показатель выделенной физической памяти подбирается к 98 процентам.
G>>В таких условиях тормозит все.

H>Отсутствие большого объема свободной памяти и отстутствие свободной памяти вообще, сравнивать, как бы, нельзя

Это к тому что тормозов дополнительных нету независимот от .NET или native.

H>>>Не жалко. Просто ты говорил о редких сборках мусора, а я тебе примеры привожу, которые показывают обратное.

G>>3 раза в секунду это часто?
G>>На гигагерцовом процессоре за секунду выполняется 1000000000 тактов. При этом если в приложении ничего не происходит, то все поколение становится мксором и не происходит фактически уплотнения кучи.
H>Это демагогия.
Демагогия это делать выводы о производительности основываясь на мифилогизированных представлениях о GC.


G>>Сборщик мусора на многопроцесорной машине работает в фоновом режиме по большей части.

G>>Так что влияние на производительность минимальная.

H>Сборщик мусора, даже на многопроцессорной машине, даже "серверный", вынужден останавливать выполняющиеся потоки. Concurent GC требует синхронизации, что на производительности не может не сказаться.

Но ты не забывай что GC не требуется проходи по списку на каждое выделение-освобождение.

H>Поколения конечно хорошо, но приводимый мною пример с XML-RPC.NET вызывает таки сборку во втором поколении (причем размер кучь у поколений постоянно меняется)

Как это влияет на производительность?
Покажите код (.NET и нативный) и результаты замеров, тогда вам кто-нибудь поверит.

H>>>Синтетика все что угодно показать может, главное приготовить как надо. Ты, как надо было тебе, приготовил.

G>>Ну приготовь как тебе надо, покажи обратное.
H>Перейдем сразу к оглашению результатов: у меня толще!


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

G>>А че, нативное приложение в свом не выгружается? Что ты пытаешься показать этой фразой?
H>Я говорю о том, что Paint.NET откушавший больше чем Turbo Delphi IDE, отправляется в утиль и остается там навсегда.
Такое чувство что кода ты был маленький к тебе приходил дядька из Microsoft и отобрал у тебя конфетку. Теперь ты выплескиваешь свою обиду на форуме.

Вообще за все время ты ни разу не привел аргументы почему .NET работает медленнее, все сводилось к каким-то левым наблюдениям (которые еще и не у всех воспроизводятся) и недалеким выводам.
Кроме того ты очень активно в своих суждениях опираешься на библиотеку XML-RPC.NET, которая вообще непонятно как работает.
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 17:54
Оценка: :))
Здравствуйте, hattab, Вы писали:

G>>Проснись, далеко не всем нужна запредельная производительность. А на практике получается что скорость работы программы упирается в диск\сеть и прочее.

G>>Только в игрушках может исключение.

H>Скажи, а во что упирается меню в WLW, отзывчивость которого меня жутко печалит (при установке он прогоняется ngen'ом, так что это не JIT)?

Незнаю во что у тебя меню упирается, только что проверил — все летает.
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 17:55
Здравствуйте, hattab, Вы писали:

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


G>>Кстати о базах: есть couchDB, которая написана на Erlang, который является одним из самых медленных языков. И ниче, всем кто пользуется — нравится.


H>У Borland/CodeGear тоже есть SQL сервер -- BlackFish, на Java и .Net. Я не в курсе, как там с перформансом, но и ежу понятно, что основная нагрузка при работе с БД ложится на дисковую систему, а вовсе не на управляемый код.


Там кроме диска еще оооочень много факторов, влияющих на производительность.
Re[36]: Кажется я начинаю понимать... ;) в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 18:06
Оценка: +1 :))
Здравствуйте, gandjustas, Вы писали:

G>Незнаю во что у тебя меню упирается, только что проверил — все летает.

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

Ганджустас! (И как я раньше тайну ника-то не просёк!!!) Будь человеком, отсыпь кораблик?..
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[47]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 18:09
Здравствуйте, gandjustas, Вы писали:

G>Но ты не забывай что GC не требуется проходи по списку на каждое выделение-освобождение.


Это никому не требуется, кроме древних-предревних кучь...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[37]: Кажется я начинаю понимать... ;) в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 18:30
Здравствуйте, Erop, Вы писали:

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


G>>Незнаю во что у тебя меню упирается, только что проверил — все летает.

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

E>Ганджустас! (И как я раньше тайну ника-то не просёк!!!) Будь человеком, отсыпь кораблик?..

Я уже бросил
Re[38]: Когда же тебя отпустит-то? :) в избранное  новое    модер. 
От: Erop 
Дата: 19.03.09 18:33
Оценка: :)
Здравствуйте, gandjustas, Вы писали:

E>>Ганджустас! (И как я раньше тайну ника-то не просёк!!!) Будь человеком, отсыпь кораблик?..

G>Я уже бросил
Пока не долетело ;(
Ждёмс...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: WolfHound модератор 
Дата: 19.03.09 18:34
Оценка: +1
Здравствуйте, NikeByNike, Вы писали:

G>>А программа на C++ будет корректировать выделние памяти в зависимости от загруженности компьютера? Конечно нет.

G>>И GC не будет.
NBN>Потому что не сможет
Не только может но и делает.
Подумай на досуге зачем приложения на .NET мониторят \KernelObjects\LowMemoryCondition
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[48]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.03.09 18:56
Оценка: :)))
Здравствуйте, Erop, Вы писали:

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


G>>Но ты не забывай что GC не требуется проходи по списку на каждое выделение-освобождение.


E>Это никому не требуется, кроме древних-предревних кучь...


Ну давайте чтобы не быть голословным приведу код:
На c++
#include <windows.h>

int _tmain(int argc, _TCHAR* argv[])
{
    DWORD ticks = GetTickCount();

    for(int i=0; i<1000000; i++)
    {        
        int* arr = new int[64];
        delete [] arr;
    }

    printf("%d", GetTickCount() - ticks);
    getchar();
    return 0;
}


На C#
static void Main(string[] args)
{
    var sw = new System.Diagnostics.Stopwatch();
    sw.Start();

    for (int i = 0; i < 1000000; i++)
    {
        var arr = new int[64];
        arr[0] = arr[1]; //иначе оптимизатор грохает цикл
    }
    GC.Collect();//чтобы быть уверенным что вся память освободилась

    Console.WriteLine(sw.ElapsedMilliseconds);
    Console.ReadKey();
}


Собиралось 2008 студией, релиз, запуск из проводника.
C++ — 562 мсек, C# — 92 мсек.

Стоит учесть что каждый проход GC в программе на C# очищает вс первое поколение в таком случа и двигание объектов не происходит, то немного исправляет результат в пользу C#, но даже если бы код на C# работал в 2 раза медленее, то он оказался бы в 3 раза быстрее стандартного аллокатора для C++.
Re[36]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Anton Batenevhttp://antonbatenev.moikrug.ru/
Дата: 19.03.09 20:11
Здравствуйте, gandjustas, Вы писали:

g> Каким образом имея 32-битный указатель можно обратить за пределы четырех гигов?

g> Возможно сама ось может увидеть много памяти, а для 32-битного приложения 4 гига — предел.

Ай-ай-ай.
Re[36]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 19.03.09 22:22
Здравствуйте, gandjustas, Вы писали:


NBN>>>>А в шарпе уже появилась возможность с пользой использовать всю доступную память? (а то в текущем проекте пришлось поизвращаться и залазить в узкие рамки

G>>>Я нормально выделял на шарпе под 2 гига. Вроде как 32-битная ось больше выделить не позволит.
CC>>до 64Gb позволит. Больше современный 32бит проц адресовать не может.
G>Каким образом имея 32-битный указатель можно обратить за пределы четырех гигов?

PSE и PAE — 36 bit addressing.

64GB можно адресовать только в некоторых серверных OS (Win2kX Server Enterprise на сколько я помню).

G>Возможно сама ось может увидеть много памяти, а для 32-битного приложения 4 гига — предел.


Обычно и того меньше — до 2GB, что можно переконфигурировать в boot.ini и получить до 3х.
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: _d_m_ 
Дата: 20.03.09 01:46
Оценка: -1
Здравствуйте, NikeByNike, Вы писали:

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


G>>Я сталкивался с пользователями, которые вполне нормально мирились с генерацияей отчета на 1с (которая на С++) которая длилась двадцать минут.

NBN>Вообще-то на васике.

Ложь.
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 20.03.09 05:28
Здравствуйте, Erop, Вы писали:
E>Ну и поспотришь ты профайлером, и что дальше будет? Если у тебя проектирования не было, а задача сложная, то будет тормозное г., при этом факт того, что это тормозное г. будет задокументирован профайлером
Я понимаю, головой думать — это тяжелая работа. Ок, специально для тех, кто не представляет себе, что бывает "дальше" после просмотра профайлером, маленькая история вот здесь.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 20.03.09 05:28
Оценка:1 (1)
Здравствуйте, Хвост, Вы писали:
Х>немного непонятно что ты в етой задаче нашёл такого "сложноописуемого" на с++
Не вижу сортировки по алфавиту.

Кстати, про С# и прочее. Немного другая задача, но похожая: здесь
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sheridanhttp://www.sheridan-home.ru/
Дата: 20.03.09 06:03
Sinclair wrote:

> Я понимаю, головой думать — это тяжелая работа. Ок, специально для тех, кто не представляет себе, что бывает "дальше" после просмотра профайлером, маленькая история вот

здесь.
В англицком к примеру я не силен. В трех словах пожалуйста опиши что там происходит. Насколько я понял — чел добился существенного увеличения производительности, или нет?
Posted via RSDN NNTP Server 2.1 beta
Re[47]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 20.03.09 06:24
Здравствуйте, gandjustas, Вы писали:

H>>Отсутствие большого объема свободной памяти и отстутствие свободной памяти вообще, сравнивать, как бы, нельзя

G>Это к тому что тормозов дополнительных нету независимот от .NET или native.

Реальность с тобой не согласна. Увы.

H>>>>Не жалко. Просто ты говорил о редких сборках мусора, а я тебе примеры привожу, которые показывают обратное.

G>>>3 раза в секунду это часто?
G>>>На гигагерцовом процессоре за секунду выполняется 1000000000 тактов. При этом если в приложении ничего не происходит, то все поколение становится мксором и не происходит фактически уплотнения кучи.
H>>Это демагогия.
G>Демагогия это делать выводы о производительности основываясь на мифилогизированных представлениях о GC.

Я делаю выводы исключительно на основе личного опыта работы с .Net софтом.

G>>>Сборщик мусора на многопроцесорной машине работает в фоновом режиме по большей части.

G>>>Так что влияние на производительность минимальная.

H>>Сборщик мусора, даже на многопроцессорной машине, даже "серверный", вынужден останавливать выполняющиеся потоки. Concurent GC требует синхронизации, что на производительности не может не сказаться.

G>Но ты не забывай что GC не требуется проходи по списку на каждое выделение-освобождение.

А я этого и не говорил Современным нативным аллокаторам тоже не требуется.

H>>Поколения конечно хорошо, но приводимый мною пример с XML-RPC.NET вызывает таки сборку во втором поколении (причем размер кучь у поколений постоянно меняется)

G>Как это влияет на производительность?

Отрицательно.

G>Покажите код (.NET и нативный) и результаты замеров, тогда вам кто-нибудь поверит.


Код чего показать? Как делается вызов XML-RPC метода? OK (но что тебе это дасть?). (пишу по памяти)

C#:
[XmlRpcUrl("http://127.0.0.1/")] 
public interface IScreenshot
{ 
  [XmlRpcMethod("keyhole.getScreenshot64")]  
  byte[] getScreenshot64(int x, int y);
}

...

Picture.Image := Bitmap.FromStream(new MemoryStream(XmlRpcProxyGen.Create<IScreenshot>().getScreenshot64(320, 200)));


Delphi:
Picture.Bitmap.LoadFromStream(TXmlRpcBase64(XmlRpcServerProxy('http://127.0.0.1/').keyhole.getScreenshot64(320, 200)).AsStream);


Код библиотеки XML-RPC.NET можешь скачать с ее домашней страницы. Для мониторинга использовал ProcessExplorer. В итоге, на 170 вызовов XML-RPC метода имеем: 101 сборка во втором поколении, 111 сборок в первом поколении, 295 сборок в нулевом поколении.

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

G>>>А че, нативное приложение в свом не выгружается? Что ты пытаешься показать этой фразой?
H>>Я говорю о том, что Paint.NET откушавший больше чем Turbo Delphi IDE, отправляется в утиль и остается там навсегда.
G>Такое чувство что кода ты был маленький к тебе приходил дядька из Microsoft и отобрал у тебя конфетку. Теперь ты выплескиваешь свою обиду на форуме.

Ничего личного. Психоанализ явно не твой конек

G>Вообще за все время ты ни разу не привел аргументы почему .NET работает медленнее, все сводилось к каким-то левым наблюдениям (которые еще и не у всех воспроизводятся) и недалеким выводам.


А как надо наблюдать, чтоб наблюдения стали правыми? Использую, что имеется в наличии (софт т.е.), мониторю чем сам МС велел (perfmon-счетчики, они и в ProcessExplorer'е). Выводы исключительно по результатам

G>Кроме того ты очень активно в своих суждениях опираешься на библиотеку XML-RPC.NET, которая вообще непонятно как работает.


Библиотека XML-RPC.NET используется по нескольким причинам: 1) XML-RPC мне интересен. 2) При его реализации не обойтись без многократных выделений памяти, что в свою очередь позволяет увидеть, как на это реагирует GC. В общем, ссылку на сурсы я дал. Стоит ждать критики?
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 20.03.09 06:24
Здравствуйте, gandjustas, Вы писали:

G>>>Кстати о базах: есть couchDB, которая написана на Erlang, который является одним из самых медленных языков. И ниче, всем кто пользуется — нравится.


H>>У Borland/CodeGear тоже есть SQL сервер -- BlackFish, на Java и .Net. Я не в курсе, как там с перформансом, но и ежу понятно, что основная нагрузка при работе с БД ложится на дисковую систему, а вовсе не на управляемый код.

G>
G>Там кроме диска еще оооочень много факторов, влияющих на производительность.

Читаем вдумчиво.
Re[49]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 20.03.09 06:24
Здравствуйте, gandjustas, Вы писали:

G>Собиралось 2008 студией, релиз, запуск из проводника.

G>C++ — 562 мсек, C# — 92 мсек.

G>Стоит учесть что каждый проход GC в программе на C# очищает вс первое поколение в таком случа и двигание объектов не происходит, то немного исправляет результат в пользу C#, но даже если бы код на C# работал в 2 раза медленее, то он оказался бы в 3 раза быстрее стандартного аллокатора для C++.


Несмотря на всю бессмысленность синтетики, скажи, на какой машинке делал замер? Процессор (частота), память (тип, PC...)?
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Mamuthttp://dmitriid.com/
Дата: 20.03.09 06:52
Здравствуйте, Sheridan, Вы писали:

S> Sinclair wrote:


S> > Я понимаю, головой думать — это тяжелая работа. Ок, специально для тех, кто не представляет себе, что бывает "дальше" после просмотра профайлером, маленькая история вот


S> здесь.

S> В англицком к примеру я не силен. В трех словах пожалуйста опиши что там происходит. Насколько я понял — чел добился существенного увеличения производительности, или нет?


Преамбула: "если программа рсаботает со скоростью, указаной в ТЗ, нет смысла оптимизировать ее скорость дальше. Необходимо сосредоточить усилия на исправлении багов, безопасности, документации и т.п." Созвучно с Эриксоновским "сделай так, чтобы фещь работала, а потом, если необходимо, сделай так, чтобы она работала быстро"

Амбула:

Чел проганл профайлером свою программу и увидел, что 43% времени проводится в методе Contains. В .NET'е уже есть тип данных, который может быстро сообщить, есть в нем такой элемент, или нет, и сам хранит только уникальные (distinct) значения.

Таким образом замена этого кода:
 var racks = (from rack in ReplaceQuestionMarks(originalRack)
                 select Canonicalize(rack)).Distinct().ToArray();


на
var racks = new HashSet<string>(
                from rack in ReplaceQuestionMarks(originalRack)
                select Canonicalize(rack));


Приводит к тому, что Contains теперь занимает всего 3% от времени программы.

Новый профайлинг показывает, что следующее узкое место — это комбинация метода ReadLine и каноникализации строки.

А там уже можно думать — кэшировать словарь (меньше запросо к диску, увеличение требований к памяти), заранее расчитывать индекс для словаря в канонической форме (увеличение места на диске, усложнение программы, уменьшение времени) и т.п.

ЗЫ. Локальный вывод типов рулит в плане читаемости
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 20.03.09 07:15
Оценка:2 (1)
Здравствуйте, Sheridan, Вы писали:

S>В англицком к примеру я не силен.

Как же ты живешь-то?
S>В трех словах пожалуйста опиши что там происходит. Насколько я понял — чел добился существенного увеличения производительности, или нет?

Как я уже много раз говорил, есть только один разумный способ написать производительное приложение.
(Оффтоп: идеальное слово, производительное, привыкайте!) Вот он:

  • Задать осмысленные, измеримые, направленные на потребителя цели.
  • Написать код как можно яснее и правильнее.
  • Аккуратно сравнить производительность с заданными целями
  • Цели достигнуты? Отлично! Не тратьте времени на анализ производительности. Вложите своё ценное время в фичи, документацию, отладку, надежность, безопасность, во что угодно.
  • Если цели не достигнуты, используйте инструменты чтобы выяснить, какое из исправимых мест тормозит сильнее всего, и исправьте его
Повторяйте этот процесс, исправляя при необходимости цели, до тех пор, пока вы либо не достигнете цели, либо не сдадитесь.

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

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

Один из комментаторов предположил, что узкое место этой программы связано с дисковым вводом/выводом. Каждый раз при выполнении запроса мы перечитываем двухмегабайтный словарь десятки раз. Это имеет преимущество использования минимума памяти; мы никогда не держим больше одной строки словаря в памяти одновременно, вместо всех четырёх мегабайт, которые бы потребовались на весь словарь (напомню, что словарь в ASCII на диске, но в двухбайтовых символах Unicode в памяти, так что потребление удваивается).

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

Вот результаты профилирования поиска семибуквенных слов с одной пропущенной, повторенного 20 раз:

43%: Contains
21%: ReadLine
14%: Sort
7%: ToUpperInvariant
15%: всё остальное

Святые угодники! Вызовы экстеншн-метода Contains для проверки, содержится ли слово в списке каркасов, занимают почти половину времени работы программы!

Что имеет смысл, как только перестаешь о нём думать. Метод "Contains" по своей очень обобщенной природе вынужден быть весьма наивным.
Получив массив, в 99.9% случаях он должен просмотреть все 26 элементов потому что в 99.9% слово не совпадет ни с одним из возможных каркасов. Он не может воспользоваться "ранним возвратом", как сделал бы ты при выполнении линейного поиска по отсортированному списку. И для каждого элемента он должен сделать полное сравнение строки; здесь нету моднявых проверок, пользующихся неизменностью строк или хеш-кодами или типа того.

У нас есть структура данных, которая разработана чтобы быстро отвечать, входит ли элемент в множество. И, что еще лучше, в нее уже встроена логика "distinct". Когда я заменил
var racks = (from rack in ReplaceQuestionMarks(originalRack)
    select Canonicalize(rack)).Distinct().ToArray();

на
var racks = new HashSet<string>(
    from rack in ReplaceQuestionMarks(originalRack)
    select Canonicalize(rack));

производительность внезапно и значительно улучшилась. "Contains" упал до 3% общих затрат, и, естественно, общие затраты теперь вдвое меньше.

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

После этого изменения, производительность программы улучшается примерно до одной секунды на запрос, и профиль теперь выглядит вот так:

39%: ReadLine
23%: Sort
11%: ToUpperInvariant
7%: всякая фигня в итераторе в FileLines
5%: ToArray (called by Join)
15%: всё остальное

Теперь узкое место явно в комбинации постоянного чтения строки из файла (48%) и каноникализации каждой строки словаря снова и снова (37%).

С учетом этой информации, мы теперь можем сделать осмысленное вложение времени и усилий. Мы могли бы кэшировать порции словаря в памяти, чтобы избежать повторных затрат на ввод/+вывод. Стоит ли потенциальный выигрышь в скорости потенциального значительного роста потребления памяти? Мы можем тут повыпендриваться, и, к примеру, кэшировать только семи- и восьмибуквенные слова.

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

Все эти решения принимаются на основе того факта, что я уже превзошел поставленную цель, так что ответ на все вопросы "нет". Достаточно хорошо, это, по определению, достаточно хорошо.
Если бы я применил этот алгоритм для построения реального игрового AI, он был бы уже недостаточно хорош, и я бы применил какое-нибудь более умное решение. Но этого не случилось.

... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sheridanhttp://www.sheridan-home.ru/
Дата: 20.03.09 07:48
Sinclair wrote:

> S>В англицком к примеру я не силен.

> Как же ты живешь-то?
Да неплохо в общем то живу.

> S>В трех словах пожалуйста опиши что там происходит. Насколько я понял — чел добился существенного увеличения производительности, или нет?

>

...

Спасибо. Все правильно написано. Оптимизировать нужно в разумных пределах.
Posted via RSDN NNTP Server 2.1 beta
Re[48]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 07:57
Оценка: -2 :))
Здравствуйте, hattab, Вы писали:

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


H>>>Отсутствие большого объема свободной памяти и отстутствие свободной памяти вообще, сравнивать, как бы, нельзя

G>>Это к тому что тормозов дополнительных нету независимот от .NET или native.

H>Реальность с тобой не согласна. Увы.

У тебя видимо альтернативная реальность.
Сильнуе галлюцинации вызванные GC-фобией.

H>>>>>Не жалко. Просто ты говорил о редких сборках мусора, а я тебе примеры привожу, которые показывают обратное.

G>>>>3 раза в секунду это часто?
G>>>>На гигагерцовом процессоре за секунду выполняется 1000000000 тактов. При этом если в приложении ничего не происходит, то все поколение становится мксором и не происходит фактически уплотнения кучи.
H>>>Это демагогия.
G>>Демагогия это делать выводы о производительности основываясь на мифилогизированных представлениях о GC.
H>Я делаю выводы исключительно на основе личного опыта работы с .Net софтом.

Ты не написал ни одной строчки production кода на .NET.
А делать выводы, основанные на просмотре каких-то говнопрограмм как минимум глупо, ты ведь даже не знаешь почему они тормозят, если вообще тормозят (про галлюцианации смотри выше).

G>>>>Сборщик мусора на многопроцесорной машине работает в фоновом режиме по большей части.

G>>>>Так что влияние на производительность минимальная.

H>>>Сборщик мусора, даже на многопроцессорной машине, даже "серверный", вынужден останавливать выполняющиеся потоки. Concurent GC требует синхронизации, что на производительности не может не сказаться.

G>>Но ты не забывай что GC не требуется проходи по списку на каждое выделение-освобождение.
H>А я этого и не говорил Современным нативным аллокаторам тоже не требуется.
Я привел пример кодаЮ доказывающий обратное.
Можешь конечно повторять свой тезис, но правдивее он не станет.

H>>>Поколения конечно хорошо, но приводимый мною пример с XML-RPC.NET вызывает таки сборку во втором поколении (причем размер кучь у поколений постоянно меняется)

G>>Как это влияет на производительность?
H>Отрицательно.
Доказательства?

G>>Покажите код (.NET и нативный) и результаты замеров, тогда вам кто-нибудь поверит.

H>Код библиотеки XML-RPC.NET можешь скачать с ее домашней страницы. Для мониторинга использовал ProcessExplorer. В итоге, на 170 вызовов XML-RPC метода имеем: 101 сборка во втором поколении, 111 сборок в первом поколении, 295 сборок в нулевом поколении.
А замеры производительности? Без них от этого толку нет. Лучше профайлером, чтобы сразу было видно где и от чего тормозит.

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

G>>>>А че, нативное приложение в свом не выгружается? Что ты пытаешься показать этой фразой?
H>>>Я говорю о том, что Paint.NET откушавший больше чем Turbo Delphi IDE, отправляется в утиль и остается там навсегда.
G>>Такое чувство что кода ты был маленький к тебе приходил дядька из Microsoft и отобрал у тебя конфетку. Теперь ты выплескиваешь свою обиду на форуме.
H>Ничего личного. Психоанализ явно не твой конек
Да я просто стебаюсь.

G>>Вообще за все время ты ни разу не привел аргументы почему .NET работает медленнее, все сводилось к каким-то левым наблюдениям (которые еще и не у всех воспроизводятся) и недалеким выводам.

H>А как надо наблюдать, чтоб наблюдения стали правыми? Использую, что имеется в наличии (софт т.е.), мониторю чем сам МС велел (perfmon-счетчики, они и в ProcessExplorer'е). Выводы исключительно по результатам
По каким? Ты делаешь вывод о производительености, при этом не приводя ни одного факта, касающегося непостредственно этой самой производительности.
Анализ — явно не твой конек

G>>Кроме того ты очень активно в своих суждениях опираешься на библиотеку XML-RPC.NET, которая вообще непонятно как работает.

H>Библиотека XML-RPC.NET используется по нескольким причинам: 1) XML-RPC мне интересен. 2) При его реализации не обойтись без многократных выделений памяти, что в свою очередь позволяет увидеть, как на это реагирует GC. В общем, ссылку на сурсы я дал. Стоит ждать критики?
Где XML-RPC.NET найти я знаю, дай сырцы натвного исполнеия для сравнения.
Re[50]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 08:11
Оценка: -1 :))
Здравствуйте, hattab, Вы писали:

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


G>>Собиралось 2008 студией, релиз, запуск из проводника.

G>>C++ — 562 мсек, C# — 92 мсек.

G>>Стоит учесть что каждый проход GC в программе на C# очищает вс первое поколение в таком случа и двигание объектов не происходит, то немного исправляет результат в пользу C#, но даже если бы код на C# работал в 2 раза медленее, то он оказался бы в 3 раза быстрее стандартного аллокатора для C++.


H>Несмотря на всю бессмысленность синтетики,

Работа с динамической памятью является основной операцией в большенстве программ .

H>скажи, на какой машинке делал замер? Процессор (частота), память (тип, PC...)?

Ноут, Intel Core2Duo 1800 или около того, памяти 2 гб DDR2, ОС — виста.

Для сравнения запустил на домашнем компе, у него одноядерный Athlon 64 (GC точно не concurrent), 3 гига памяти, ОС — Windows Server 2008 x64.
Замеры C++ — 562 мсек, C# — 135 мсек.
Опять даже если учесть что в реальном случае .NET может работать в два раза медленее, то все равно не в пользу C++.
Приложение на C# запустилось как 64-битное, что многло дать задержки на операции присваивания.
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 08:15
Оценка: +1 :)
Здравствуйте, Sheridan, Вы писали:

S>Sinclair wrote:


>> S>В англицком к примеру я не силен.

>> Как же ты живешь-то?
S>Да неплохо в общем то живу.

>> S>В трех словах пожалуйста опиши что там происходит. Насколько я понял — чел добился существенного увеличения производительности, или нет?

>>

...

S>Спасибо. Все правильно написано. Оптимизировать нужно в разумных пределах.

Самое главное

Если я и выучил хоть что-то про анализ производительности, так это то, что мои догадки о расположении узких мест зачастую неверны

Тебе стоит это учесть.
Re[48]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 20.03.09 08:17
Оценка:2 (2) :)
Здравствуйте, hattab, Вы писали:
H>Я делаю выводы исключительно на основе личного опыта работы с .Net софтом.
Личный опыт — штука субъективная. Вот, к примеру, что пишут ведущие собаководы:

As user-interface folks know, perceived performance and actual performance can often be different things. I [Steven] remember when I was writing a portion of the Windows UI for Visual C++ and when I benchmarked against Borland C++ at the time, we were definitely faster (measured by seconds). However the reviews consistently mentioned Borland as being faster and providing feedback in the form of counts of lines compiled flying by. So I coded up a line count display that flashed a lot of numbers at you while compiling (literally flashy so it looked like it couldn't keep up). In clock times it actually consumed a non-zero amount of time so we got "slower" but the reviewers then started giving us credit for being faster. So in this case slower actually got faster.

http://blogs.msdn.com/e7/archive/2008/12/15/continuing-our-discussion-on-performance.aspx
Забавно, не правда ли?
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[37]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 20.03.09 08:23
Здравствуйте, criosray, Вы писали:

C>Обычно и того меньше — до 2GB, что можно переконфигурировать в boot.ini и получить до 3х.

Уточню, процесс видит адресного пространства 4Gb/Segment, но использовать под свои нужды может тока младшие 2(3)Gb. Остальным распоряжается система.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[49]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 20.03.09 08:23
Здравствуйте, gandjustas, Вы писали:

CPUID: Intel(R) Pentium(R) D CPU 2.66GHz

VS 2003 + ICC 11, C++ : 188
VS 2008, C# : 117

G>Собиралось 2008 студией, релиз, запуск из проводника.

G>C++ — 562 мсек, C# — 92 мсек.
Дааа, хреновый С++ стал в 2008й студии. Наводит на интересные мысли.

G>Стоит учесть что каждый проход GC в программе на C# очищает вс первое поколение в таком случа и двигание объектов не происходит, то немного исправляет результат в пользу C#, но даже если бы код на C# работал в 2 раза медленее, то он оказался бы в 3 раза быстрее стандартного аллокатора для C++.

У меня как видишь, рядышком.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[39]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 20.03.09 08:23
Здравствуйте, hattab, Вы писали:

H>Не то чтобы мне было жалко денег (~$170 за 2Gb)

Ох мать, а чего так дорого то?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[48]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 20.03.09 08:31
Оценка: -1 :)
Здравствуйте, hattab, Вы писали:



H>Код чего показать? Как делается вызов XML-RPC метода? OK (но что тебе это дасть?). (пишу по памяти)


H>C#:

H>
H>[XmlRpcUrl("http://127.0.0.1/")] 
H>public interface IScreenshot
H>{ 
H>  [XmlRpcMethod("keyhole.getScreenshot64")]  
H>  byte[] getScreenshot64(int x, int y);
H>}

H>...

H>Picture.Image := Bitmap.FromStream(new MemoryStream(XmlRpcProxyGen.Create<IScreenshot>().getScreenshot64(320, 200)));
H>


H>Delphi:

H>
H>Picture.Bitmap.LoadFromStream(TXmlRpcBase64(XmlRpcServerProxy('http://127.0.0.1/').keyhole.getScreenshot64(320, 200)).AsStream);
H>


Вы что же картинки в base64 гоняете? Вот такие, простите, индусоалгоритмизаторы и есть причина репутации .NET как медленной среды.

Хардкодинг урлов в атрибутах — моветон.
Java-like нотация записи методов (getScreenshot64) — моветон.
В С# нет оператора :=
Неиспользование using для MemoryStream — утечка ресурсов.
Читабельность Picture.Bitmap.LoadFromStream(TXmlRpcBase64(XmlRpcServerProxy('http://127.0.0.1/').keyhole.getScreenshot64(320, 200)).AsStream); -- отвратительная.

Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 08:31
Оценка: -1
Здравствуйте, Sinclair, Вы писали:

S>Я понимаю, головой думать — это тяжелая работа.

А переход на личности -- это такой способ ведения дискуссий от MVP?

S>Ок, специально для тех, кто не представляет себе, что бывает "дальше" после просмотра профайлером, маленькая история вот здесь.


Это всё конечно очень интересно, но при чём тут GC?

Кроме того, то, что он сразу же искал неэффективным образом (хотя, как я понял, это основная функциональность в проге!!!), говорит о том, что проектировать это дело он и не пытался. А пытался типа написать, потом профильнуть, потом трясти...

Что бы получилось, если бы он сначала таки подумал как сделать его прогу быстрой, потом это запроектировал, а только потом уже бомбил, не известно. Мне так кажется, что 2 секунды для этой программки -- ЭТО ОЧЕНЬ ОЧЕНЬ ОЧЕНЬ ДОЛГО.
Правда он сам себе выдал ТЗ, что "и так сойдёт", исправил грубую ошибку проектирования и получил в результате "саксесс стори". Но когда ты сам себе орбитр не трудно всегда побеждать.
А вот, если в дело вмешиваются клиенты и конкуренты, ситуация несколько меняется...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 08:32
Здравствуйте, hattab, Вы писали:

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


G>>>>Кстати о базах: есть couchDB, которая написана на Erlang, который является одним из самых медленных языков. И ниче, всем кто пользуется — нравится.


H>>>У Borland/CodeGear тоже есть SQL сервер -- BlackFish, на Java и .Net. Я не в курсе, как там с перформансом, но и ежу понятно, что основная нагрузка при работе с БД ложится на дисковую систему, а вовсе не на управляемый код.

G>>
G>>Там кроме диска еще оооочень много факторов, влияющих на производительность.
H>Читаем вдумчиво.
Наверное надо было доабавить что работа с диском в меньшей степени влияет на производительность реальных СУБД, потому что там алгоритмической сложности нету, надо только подстроить под особенности работы ОС с диском.
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 20.03.09 08:38
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Хвост, Вы писали:

Х>>немного непонятно что ты в етой задаче нашёл такого "сложноописуемого" на с++
S>Не вижу сортировки по алфавиту.

multiset
People write code, programming languages don't.
Re[50]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 08:38
Здравствуйте, CreatorCray, Вы писали:

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


CC>CPUID: Intel(R) Pentium(R) D CPU 2.66GHz


CC>VS 2003 + ICC 11, C++ : 188

CC>VS 2008, C# : 117
Можно только порадоваться за компилятор интела.
А сколько ядер на машине?

G>>Стоит учесть что каждый проход GC в программе на C# очищает вс первое поколение в таком случа и двигание объектов не происходит, то немного исправляет результат в пользу C#, но даже если бы код на C# работал в 2 раза медленее, то он оказался бы в 3 раза быстрее стандартного аллокатора для C++.

CC>У меня как видишь, рядышком.
Тем не менее в полтора раза.
При желании алгоритм в программе на C# можно построить так чтобы результат оказался близким к результату синтетического теста.
В целях оптимизации вполне можно так поступить.
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sheridanhttp://www.sheridan-home.ru/
Дата: 20.03.09 08:40
gandjustas wrote:

> Самое главное

>

> Если я и выучил хоть что-то про анализ производительности, так это то, что мои догадки о расположении узких мест зачастую неверны

> Тебе стоит это учесть.

То что последнее слово за профайлером я и так знаю.
Posted via RSDN NNTP Server 2.1 beta
Re[28]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 08:45
Здравствуйте, Sheridan, Вы писали:

S>gandjustas wrote:


>> Самое главное

>>

>> Если я и выучил хоть что-то про анализ производительности, так это то, что мои догадки о расположении узких мест зачастую неверны

>> Тебе стоит это учесть.

S>То что последнее слово за профайлером я и так знаю.


Неверно.
За профайлером должно быть первое слово.
Re[49]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 08:48
Здравствуйте, criosray, Вы писали:

C>Неиспользование using для MemoryStream — утечка ресурсов.

Разве?
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 20.03.09 08:51
Оценка: +1 -1
Здравствуйте, Erop, Вы писали:

E>Кроме того, то, что он сразу же искал неэффективным образом (хотя, как я понял, это основная функциональность в проге!!!), говорит о том, что проектировать это дело он и не пытался. А пытался типа написать, потом профильнуть, потом трясти...

Совершенно верно. И это — единственный способ писать хорошие программы.

E>Что бы получилось, если бы он сначала таки подумал как сделать его прогу быстрой, потом это запроектировал, а только потом уже бомбил, не известно.

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

E>Мне так кажется, что 2 секунды для этой программки -- ЭТО ОЧЕНЬ ОЧЕНЬ ОЧЕНЬ ДОЛГО.

Напомню, что цели должны быть ориентированы на потребителя, а не высосаны из пальца. Сколько, по-твоему, должна работать эта программа? Почему?

E>А вот, если в дело вмешиваются клиенты и конкуренты, ситуация несколько меняется...

Читать последнюю строчку в его статье.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[50]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 20.03.09 09:03
Здравствуйте, gandjustas,
кстати, скажи пожалуйста, а сколько лично у тебя установлено .NET приложений уровня desktop?
People write code, programming languages don't.
Re[49]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 20.03.09 09:03
Здравствуйте, gandjustas, Вы писали:

H>>>>Сборщик мусора, даже на многопроцессорной машине, даже "серверный", вынужден останавливать выполняющиеся потоки. Concurent GC требует синхронизации, что на производительности не может не сказаться.

G>>>Но ты не забывай что GC не требуется проходи по списку на каждое выделение-освобождение.
H>>А я этого и не говорил Современным нативным аллокаторам тоже не требуется.
G>Я привел пример кодаЮ доказывающий обратное.
G>Можешь конечно повторять свой тезис, но правдивее он не станет.

Смотри мой следующий пост Сурпрайз будет

G>>>Покажите код (.NET и нативный) и результаты замеров, тогда вам кто-нибудь поверит.

H>>Код библиотеки XML-RPC.NET можешь скачать с ее домашней страницы. Для мониторинга использовал ProcessExplorer. В итоге, на 170 вызовов XML-RPC метода имеем: 101 сборка во втором поколении, 111 сборок в первом поколении, 295 сборок в нулевом поколении.
G>А замеры производительности? Без них от этого толку нет. Лучше профайлером, чтобы сразу было видно где и от чего тормозит.

Банально логика: такое количество сборок мусора не может не сказаться на производительности.

G>>>Вообще за все время ты ни разу не привел аргументы почему .NET работает медленнее, все сводилось к каким-то левым наблюдениям (которые еще и не у всех воспроизводятся) и недалеким выводам.

H>>А как надо наблюдать, чтоб наблюдения стали правыми? Использую, что имеется в наличии (софт т.е.), мониторю чем сам МС велел (perfmon-счетчики, они и в ProcessExplorer'е). Выводы исключительно по результатам
G>По каким? Ты делаешь вывод о производительености, при этом не приводя ни одного факта, касающегося непостредственно этой самой производительности.

Количество сборок мусора я привел

G>>>Кроме того ты очень активно в своих суждениях опираешься на библиотеку XML-RPC.NET, которая вообще непонятно как работает.

H>>Библиотека XML-RPC.NET используется по нескольким причинам: 1) XML-RPC мне интересен. 2) При его реализации не обойтись без многократных выделений памяти, что в свою очередь позволяет увидеть, как на это реагирует GC. В общем, ссылку на сурсы я дал. Стоит ждать критики?
G>Где XML-RPC.NET найти я знаю, дай сырцы натвного исполнеия для сравнения.

Я не могу тебе дать сурсы закрытой библиотеки. Но ты не понял главной мысли. Я не пытаюсь сравнить XML-RPC.NET с моей нативной реализацией, т.к. это бессмысленно по причине разных алгоритмов парсинга пакетов. Она тут в пример приводится только для демонстрации поведения GC. Пойми это наконец.
Re[51]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 20.03.09 09:03
Здравствуйте, gandjustas, Вы писали:

H>>Несмотря на всю бессмысленность синтетики,

G>Работа с динамической памятью является основной операцией в большенстве программ.

Да, только эта синтетика с реальностью ничего общего не имеет

H>>скажи, на какой машинке делал замер? Процессор (частота), память (тип, PC...)?

G>Ноут, Intel Core2Duo 1800 или около того, памяти 2 гб DDR2, ОС — виста.

G>Для сравнения запустил на домашнем компе, у него одноядерный Athlon 64 (GC точно не concurrent), 3 гига памяти, ОС — Windows Server 2008 x64.

G>Замеры C++ — 562 мсек, C# — 135 мсек.
G>Опять даже если учесть что в реальном случае .NET может работать в два раза медленее, то все равно не в пользу C++.
G>Приложение на C# запустилось как 64-битное, что многло дать задержки на операции присваивания.

Теперь обещаный сурпрайз

Turbo Delphi 2006:
Type

 TIntArray = Array [0 .. 63] Of Integer;
 PIntArray = ^TIntArray;

Var

 Index : Integer;
 arr   : PIntArray;
 sw    : THighResStopwatch; // на основе QueryPerformanceCounter

begin

 sw.Start;

 For Index := 1 To 1000000 Do
  Begin

   New(Arr);
   Dispose(Arr);

  End;

 sw.Stop;

 ShowMessageFmt('Time: %d', [sw.ElapsedTime]);

end;


Pentium M 1.7GHz. Память PC2700. Время: 67ms.
Re[49]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 20.03.09 09:04
Здравствуйте, Sinclair, Вы писали:

H>>Я делаю выводы исключительно на основе личного опыта работы с .Net софтом.

S>Личный опыт — штука субъективная. Вот, к примеру, что пишут ведущие собаководы:
S>http://blogs.msdn.com/e7/archive/2008/12/15/continuing-our-discussion-on-performance.aspx
S>Забавно, не правда ли?

Все в нашем мире субъективно.
Re[40]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 20.03.09 09:04
Здравствуйте, CreatorCray, Вы писали:

H>>Не то чтобы мне было жалко денег (~$170 за 2Gb)

CC>Ох мать, а чего так дорого то?

$74 стоимость 1Gb планки (SODIMM PC2700 200pin 2.5v) на Никсе + 15% моего продавца И это еще не самая дорогая...
Re[29]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sheridanhttp://www.sheridan-home.ru/
Дата: 20.03.09 09:07
gandjustas wrote:


> S>То что последнее слово за профайлером я и так знаю.

> Неверно.
> За профайлером должно быть первое слово.
Слушаю и повинуюсь, о грозный Ганджустас!!!
Posted via RSDN NNTP Server 2.1 beta
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 20.03.09 09:07
Оценка: :))
Здравствуйте, Хвост, Вы писали:
Х>multiset
А он неявно сортирует??? Офигеть. Я как отвык от того, что для множества нужно задавать отношение частичного порядка.
Я надеюсь, уточнение сортировки в Case-insensitive/accent-sensitive для турецкой локали не усложнит эту безусловно прекрасную программу?
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[49]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 20.03.09 09:11
Оценка: :)
Здравствуйте, criosray, Вы писали:

H>>Код чего показать? Как делается вызов XML-RPC метода? OK (но что тебе это дасть?). (пишу по памяти)


H>>C#:

H>>
H>>[XmlRpcUrl("http://127.0.0.1/")] 
H>>public interface IScreenshot
H>>{ 
H>>  [XmlRpcMethod("keyhole.getScreenshot64")]  
H>>  byte[] getScreenshot64(int x, int y);
H>>}

H>>...

H>>Picture.Image := Bitmap.FromStream(new MemoryStream(XmlRpcProxyGen.Create<IScreenshot>().getScreenshot64(320, 200)));
H>>


H>>Delphi:

H>>
H>>Picture.Bitmap.LoadFromStream(TXmlRpcBase64(XmlRpcServerProxy('http://127.0.0.1/').keyhole.getScreenshot64(320, 200)).AsStream);
H>>


C>Вы что же картинки в base64 гоняете? Вот такие, простите, индусоалгоритмизаторы и есть причина репутации .NET как медленной среды.


Base64 -- единственный способ передать бинарные данные в XML-RPC.

C>Хардкодинг урлов в атрибутах — моветон.


Это тестовый пример

C>Java-like нотация записи методов (getScreenshot64) — моветон.


Это негласный стандарт в XML-RPC.

C>В С# нет оператора :=


Писал по памяти. Pascal мой основной язык.

C>Неиспользование using для MemoryStream — утечка ресурсов.


Чего-то я не понял, а каким ресурсом, кроме собственно памяти, владеет MemoryStream?

C>Читабельность Picture.Bitmap.LoadFromStream(TXmlRpcBase64(XmlRpcServerProxy('http://127.0.0.1/').keyhole.getScreenshot64(320, 200)).AsStream); -- отвратительная.


Еще раз: это тестовый пример.
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 20.03.09 09:22
Здравствуйте, gandjustas, Вы писали:

H>>>>У Borland/CodeGear тоже есть SQL сервер -- BlackFish, на Java и .Net. Я не в курсе, как там с перформансом, но и ежу понятно, что основная нагрузка при работе с БД ложится на дисковую систему, а вовсе не на управляемый код.

G>>>
G>>>Там кроме диска еще оооочень много факторов, влияющих на производительность.
H>>Читаем вдумчиво.
G>Наверное надо было доабавить что работа с диском в меньшей степени влияет на производительность реальных СУБД, потому что там алгоритмической сложности нету, надо только подстроить под особенности работы ОС с диском.

Ты же вроде отметился в ветке, где приводили пример работы MSSQL с базой на диске и в памяти... Основные задержки, это, как раз таки, выборка данных с диска.
Re[28]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 09:43
Здравствуйте, hattab, Вы писали:

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


H>>>>>У Borland/CodeGear тоже есть SQL сервер -- BlackFish, на Java и .Net. Я не в курсе, как там с перформансом, но и ежу понятно, что основная нагрузка при работе с БД ложится на дисковую систему, а вовсе не на управляемый код.

G>>>>
G>>>>Там кроме диска еще оооочень много факторов, влияющих на производительность.
H>>>Читаем вдумчиво.
G>>Наверное надо было доабавить что работа с диском в меньшей степени влияет на производительность реальных СУБД, потому что там алгоритмической сложности нету, надо только подстроить под особенности работы ОС с диском.

H>Ты же вроде отметился в ветке, где приводили пример работы MSSQL с базой на диске и в памяти... Основные задержки, это, как раз таки, выборка данных с диска.

Но оптимизировать эти издержки не сильно получится, только компромисс время-память.
Зато есть куча других мест в СУБД, в которых придется сильно понапрягаться чтобы вытянуть производительность.
Re[51]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 20.03.09 10:03
Здравствуйте, gandjustas, Вы писали:

G>А сколько ядер на машине?

2 честных (не НТ)

G>В целях оптимизации вполне можно так поступить.

Могу ли я в таком случае оптимизировать С++ код?
Простое убирание блокировки (CriticalSection) через применение Per-Thread Allocator дает уже 47
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[52]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 20.03.09 10:08
Здравствуйте, CreatorCray, Вы писали:

G>>А сколько ядер на машине?

CC>2 честных (не НТ)

G>>В целях оптимизации вполне можно так поступить.

CC>Могу ли я в таком случае оптимизировать С++ код?
CC>Простое убирание блокировки (CriticalSection) через применение Per-Thread Allocator дает уже 47

в Delphi без блокировок 24
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 20.03.09 10:10
Здравствуйте, Sinclair, Вы писали:
S>Я надеюсь, уточнение сортировки в Case-insensitive/accent-sensitive для турецкой локали не усложнит эту безусловно прекрасную программу?
безусловно усложнит, как минимум придётся написать волшебный предикат, как максимум заменить std::string на что-нибудь из комплекта ICU.
People write code, programming languages don't.
Re[50]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 20.03.09 10:15
Здравствуйте, hattab, Вы писали:
H>Base64 -- единственный способ передать бинарные данные в XML-RPC.
Несомненно, именно это было ключевым фактором при принятии решения о способе маршаллинга картинок в неуправляемый фильтр. Извини, не могу больше писать — встаю для аплодисментов.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[49]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 20.03.09 10:18
Оценка: -2 :)
Здравствуйте, gandjustas, Вы писали:

G>Ну давайте чтобы не быть голословным приведу код:

G>....поскипано...
G>Собиралось 2008 студией, релиз, запуск из проводника.
G>C++ — 562 мсек, C# — 92 мсек.

G>Стоит учесть что каждый проход GC в программе на C# очищает вс первое поколение в таком случа и двигание объектов не происходит, то немного исправляет результат в пользу C#, но даже если бы код на C# работал в 2 раза медленее, то он оказался бы в 3 раза быстрее стандартного аллокатора для C++.

G>#include <windows.h>

маленькая поправка

int _tmain(int argc, _TCHAR* argv[])
{
    DWORD ticks = GetTickCount();

    for(int i=0; i<1000000; i++)
    {        
        int arr[64]; // вот ето действительно стандартный "аллокатор" на С++
    }

    printf("%d", GetTickCount() - ticks);
    getchar();
    return 0;
}


время показывать?
People write code, programming languages don't.
Re[51]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 20.03.09 10:19
Здравствуйте, Sinclair, Вы писали:

H>>Base64 -- единственный способ передать бинарные данные в XML-RPC.

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

Сказать-то чего хотел?
Re[53]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 20.03.09 10:44
Здравствуйте, hattab, Вы писали:

H> в Delphi без блокировок 24

У нас с тобой процы разные, так что наши попугаи сравнивать без знания скока попугаев у тебя в C# проге сложновато.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[50]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 10:45
Оценка: +2 -1 :)
Здравствуйте, Хвост, Вы писали:

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


G>>Ну давайте чтобы не быть голословным приведу код:

G>>....поскипано...
G>>Собиралось 2008 студией, релиз, запуск из проводника.
G>>C++ — 562 мсек, C# — 92 мсек.

G>>Стоит учесть что каждый проход GC в программе на C# очищает вс первое поколение в таком случа и двигание объектов не происходит, то немного исправляет результат в пользу C#, но даже если бы код на C# работал в 2 раза медленее, то он оказался бы в 3 раза быстрее стандартного аллокатора для C++.

G>>#include <windows.h>

Х>маленькая поправка


Х>
Х>int _tmain(int argc, _TCHAR* argv[])
Х>{
Х>    DWORD ticks = GetTickCount();

Х>    for(int i=0; i<1000000; i++)
Х>    {        
Х>        int arr[64]; // вот ето действительно стандартный "аллокатор" на С++
Х>    }

Х>    printf("%d", GetTickCount() - ticks);
Х>    getchar();
Х>    return 0;
Х>}
Х>


Невопрос

static unsafe void Main(string[] args)
{
    var sw = new System.Diagnostics.Stopwatch();
    sw.Start();

    for (int i = 0; i < 1000000; i++)
    {
        int* ptr = stackalloc int[100];
    }

    Console.WriteLine(sw.ElapsedMilliseconds);
    Console.ReadKey();
}


Х>время показывать?

Для начала надо научиться отличать хер от пальца.
Re[29]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 20.03.09 10:49
Здравствуйте, gandjustas, Вы писали:
H>>Ты же вроде отметился в ветке, где приводили пример работы MSSQL с базой на диске и в памяти... Основные задержки, это, как раз таки, выборка данных с диска.
G>Но оптимизировать эти издержки не сильно получится, только компромисс время-память.
То-то и оно.
Компромисса CPU/диск там и в помине нету — можно потратить пару миллиардов тактов только на то, чтобы понять, что некую страничку не нужно поднимать с диска.
А вот с памятью всё достаточно безрадостно — почитай того же Гарсиа-Молина на предмет того, как зависят асимптотики реляционных алгоритмов от того, какую часть промежуточных результатов можно себе позволить держать в RAMe. Поэтому удвоение memory footprint при прочих равных — это вовсе не $40 за еще одну планку памяти, а тупо просад на порядок времени выполнения некоторого запроса.

Дисклаймер: это вовсе не означает, что управляемых РСУБД не может быть. Есть масса способов свести расходы от недетерминистической финализации к минимуму; а кроме всего прочего, управляемые среды предлагают возможность не просто "компилировать планы запросов", а "по-настоящему компилировать планы запросов в натив". Что в некоторых случаях может дать чудовищный performance boost.
Ну и, естественно, проникновение на рынок аццких отжигов типа IODrive способно сильно изменить расклад сил в RDBMS-алгоритмах, благодаря сокращению разрывов между производительностью памяти и диска.
В прошлый раз этот прорыв предсказывали поклонники 64хбит архитектуры; но парни никак не могли понять, что возможность отмапить терабайтную базу в виртуальную
это совсем-совсем не то же самое, что и поднять терабайтную базу в память физическую.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[51]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 20.03.09 10:51
Здравствуйте, gandjustas, Вы писали:

G>Невопрос


static unsafe void Main(string[] args)


ого! тебе осталось сделать совсем небольшой шаг до С++, решайся!

P.S. ну и что ты со своими байтами будешь делать? а как насчёт того чтобы классы на стеке инстанцировать?
People write code, programming languages don't.
Re[52]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 10:58
Оценка: -1 :))
Здравствуйте, Хвост, Вы писали:

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


G>>Невопрос


Х>
Х>static unsafe void Main(string[] args)
Х>


Х>ого! тебе осталось сделать совсем небольшой шаг до С++, решайся!

Зачем? Для запредельного перфоманса есть С, для надежного и красивого кода есть C#, F#.
А С++ в этом уравнении места нет.

Х>P.S. ну и что ты со своими байтами будешь делать? а как насчёт того чтобы классы на стеке инстанцировать?

Если уж очень надо стеке, то воспользуюсь структурами.
Re[52]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 20.03.09 11:07
Оценка: +2
Здравствуйте, hattab, Вы писали:

H>Сказать-то чего хотел?

Что люди, которые для решения задачи "Получить от сервера картинку" выбирают формат BMP-over-XML/RPC, мягко говоря, не имеют права критиковать дотнет за производительность.

Есть .Net софтинка: одна форма с кнопкой и картинкой (PictureBox). При нажатии на кнопку происходит вызов XML-RPC сервера и получение от него картинки 320x200x24 в формате BMP. После запуска клиент занимает 11.1Mb памяти. С каждым нажатием на кнопку потребление памяти растет. Постепенно вырастает до 21.2Mb, и на этой цифре останавливается (ну с мелкими мотыляниями туда-сюда). В аналогичном нативном клиенте потребление не превышает 5Mb. В цем тут вина .Net разработчика (там кода -- одна строка)?

Вина, естественно, в том, что для адекватных задач нужно применять адекватные средства.

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

Без этого прогибания пальцев типа "да у меня нативный клиент отъедает всего пять метров" примерно то же самое, что и "а вот у меня прога вообще регистр EBX не использует". В том смысле, что никому не интересно, что там твоя прога "использует" внутри. Если она работает так, как нужно заказчику, то всё в порядке. Никаких других критериев в природе нет.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[54]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 20.03.09 11:13
Здравствуйте, CreatorCray, Вы писали:

H>> в Delphi без блокировок 24

CC>У нас с тобой процы разные, так что наши попугаи сравнивать без знания скока попугаев у тебя в C# проге сложновато.

С# 103.
Re[53]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 20.03.09 11:14
Здравствуйте, gandjustas, Вы писали:
Х>>ого! тебе осталось сделать совсем небольшой шаг до С++, решайся!
G>Зачем? Для запредельного перфоманса есть С, для надежного и красивого кода есть C#, F#.
G>А С++ в этом уравнении места нет.
ну как же, C++ == запредельный перфоманс + надёжный и красивый код

Х>>P.S. ну и что ты со своими байтами будешь делать? а как насчёт того чтобы классы на стеке инстанцировать?

G>Если уж очень надо стеке, то воспользуюсь структурами.
надеюсь ты понимаешь разницу между структурой и классом в дотнете, повторяюсь — инстанцировать классы

и на посошок, или я проглядел, или ты не ответил на вопрос — сколько у тебя установлено приложений уровня "десктоп", писаных на дотнете?
People write code, programming languages don't.
Re[52]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 20.03.09 11:16
Оценка: :)
Здравствуйте, hattab, Вы писали:



H> New(Arr);

H> Dispose(Arr);

H>Pentium M 1.7GHz. Память PC2700. Время: 67ms.


Если компилятор не дурак, то он вообще не станет выделять память по пусту, раз Вы ее не используете и пустой цикл тоже не станет крутить по чем зря.

Впрочем, это ж Делфи.
Re[53]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 20.03.09 11:24
Здравствуйте, criosray, Вы писали:

Вообще все эти сравнения и пиписькомеренья весьма забавно выглядят. В управляемом коде в целях безопасности, афаик, при выделении памяти производится так же ее очистка (обнуление), а это по два такта процессора на каждый байт.

Критично ли это для конечного пользователя — только в очень редких случаях (мне с такими не доводилось сталкиваться).
Обоснован ли такой оверхед — в большинстве случаев определенно да.

В целом управление памятью в дотнет реализовано очень-очень эффективно — так, что в исключительном большинстве случаев память не является "бутылышным горлышком".
Re[53]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 20.03.09 11:30
Здравствуйте, Sinclair, Вы писали:

H>>Сказать-то чего хотел?

S>Что люди, которые для решения задачи "Получить от сервера картинку" выбирают формат BMP-over-XML/RPC, мягко говоря, не имеют права критиковать дотнет за производительность.

Давай посмотрим на это дело детальнее. Отфонарный скриншот моего десктопа ужатый до 320x200x24, в формате BMP занимает 192,054 байт. Респонзовый пакет XML-RPC с этой картинкой занимает 256,207 байт. Картинка после gzip'а весит 54,710 байт. Пакет XML-RPC после gzip'а весит 56,093. Время обработки gzip'ом раличается в пределах погрешности замеров. Теперь прикинем, из-за разницы аж в килобайт(!) я должен заставлять разработчика клиентского приложения опускаться с уровня прикладного API (в виде XML-RPC, работая с которым, он о транспорте вообще не думает) на уровень HTTP транспорта (с погружением в RFC, заголовки и пр.), дабы дать ему альтернативный способ доступа к ресурсу

S>

Есть .Net софтинка: одна форма с кнопкой и картинкой (PictureBox). При нажатии на кнопку происходит вызов XML-RPC сервера и получение от него картинки 320x200x24 в формате BMP. После запуска клиент занимает 11.1Mb памяти. С каждым нажатием на кнопку потребление памяти растет. Постепенно вырастает до 21.2Mb, и на этой цифре останавливается (ну с мелкими мотыляниями туда-сюда). В аналогичном нативном клиенте потребление не превышает 5Mb. В цем тут вина .Net разработчика (там кода -- одна строка)?

S>Вина, естественно, в том, что для адекватных задач нужно применять адекватные средства.

Давай ты не будешь вытаскивать фразы из контекста и манипулировать ими по своему усмотрению

S>Ну, а в целом по больнице, нужно не смотреть всякую фигню в таскменеджере, а ставить перед собой задачи и смотреть, как они решаются. В частности, к примеру, профилировать, сколько времени занимает "забрать картинку с сервера" в нативном и управляемом клиенте и укладывается ли это в заданные параметры.

S>В частности, брать тестовую среду, близкую к реальной, и смотреть, по прежнему ли всё укладывается.
S>Не имеет смысла сравнивать распределенную память у двух программ, когда еще полтора гига свободно. Нужно запускать, к примеру, обе программы на 512 метрах памяти, с открытым в параллель офисом или чем еще там требуется по задаче, и мерить, мерить, мерить, мерить.

Синклер, я уже писал, что у меня не стояло задачи сравнить XML-RPC.NET со своей нативной реализацией.

S>Без этого прогибания пальцев типа "да у меня нативный клиент отъедает всего пять метров" примерно то же самое, что и "а вот у меня прога вообще регистр EBX не использует". В том смысле, что никому не интересно, что там твоя прога "использует" внутри. Если она работает так, как нужно заказчику, то всё в порядке. Никаких других критериев в природе нет.


Неверные выводы на основе неверно исталкованых слов...
Re[54]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 20.03.09 11:31
Оценка: +2
Здравствуйте, criosray, Вы писали:

C>Вообще все эти сравнения и пиписькомеренья весьма забавно выглядят.

Забавно, да.
Ну это ты предъявы к зачинщику
Автор: gandjustas
Дата: 19.03.09
предъявляй.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[54]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 11:32
Оценка: -1 :)
Здравствуйте, Хвост, Вы писали:

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

Х>>>ого! тебе осталось сделать совсем небольшой шаг до С++, решайся!
G>>Зачем? Для запредельного перфоманса есть С, для надежного и красивого кода есть C#, F#.
G>>А С++ в этом уравнении места нет.
Х>ну как же, C++ == запредельный перфоманс + надёжный и красивый код
И то и другое неправда.


Х>>>P.S. ну и что ты со своими байтами будешь делать? а как насчёт того чтобы классы на стеке инстанцировать?

G>>Если уж очень надо стеке, то воспользуюсь структурами.
Х>надеюсь ты понимаешь разницу между структурой и классом в дотнете, повторяюсь — инстанцировать классы
Я то как раз отлично понимаю, а вы — видимо нет.

Х>и на посошок, или я проглядел, или ты не ответил на вопрос — сколько у тебя установлено приложений уровня "десктоп", писаных на дотнете?

Сколько установлено — не считал, пользуюсь двумя — paint.NET и Windows Live Writer. Это треть софта, который я ставил и пользуюсь им.
Re[53]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 20.03.09 11:35
Здравствуйте, criosray, Вы писали:

H>> New(Arr);

H>> Dispose(Arr);

H>>Pentium M 1.7GHz. Память PC2700. Время: 67ms.


C>Если компилятор не дурак, то он вообще не станет выделять память по пусту, раз Вы ее не используете и пустой цикл тоже не станет крутить по чем зря.


C>Впрочем, это ж Делфи.


Вай-вай, говнодельфи укопал мегашарпа... Смотри не лопни, от злости
Re[54]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 11:36
Здравствуйте, criosray, Вы писали:

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


C>Вообще все эти сравнения и пиписькомеренья весьма забавно выглядят. В управляемом коде в целях безопасности, афаик, при выделении памяти производится так же ее очистка (обнуление), а это по два такта процессора на каждый байт.

Кроме того я в тесте кроме выделения памяти померил еще и время двух миллионов проверок на попадание в границы массива и присваивания.
примерно 5% времени занимает.
Re[50]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 20.03.09 11:37
Здравствуйте, hattab, Вы писали:

H>Base64 -- единственный способ передать бинарные данные в XML-RPC.


Так Вы сами себе злобные буратины, раз выбрали такой стандарт. Что мешает бинарные передавать обычным http stream`ом?

C>>Java-like нотация записи методов (getScreenshot64) — моветон.


H>Это негласный стандарт в XML-RPC.


Ой да ну? А можно ссылку на этот "негласный стандарт". Очень хочу посмотреть.

C>>В С# нет оператора :=


H>Писал по памяти. Pascal мой основной язык.


Ну мы уже поняли, что с дотнет Вы знакомы весьма поверхностно. Лишь хаете его так, будто бы программируете на нем с релиза.

C>>Неиспользование using для MemoryStream — утечка ресурсов.


H>Чего-то я не понял, а каким ресурсом, кроме собственно памяти, владеет MemoryStream?

1) для любого класса, реализующего IDisposable следует вызывать Close/Dispose
2) любой Stream по окончании работы с ним следует закрывать (помечая его тем самым closed)

C>>Читабельность Picture.Bitmap.LoadFromStream(TXmlRpcBase64(XmlRpcServerProxy('http://127.0.0.1/').keyhole.getScreenshot64(320, 200)).AsStream); -- отвратительная.


H>Еще раз: это тестовый пример.

Что-то мне подсказывает, что Ваш код выглядит не лучше этих "тестовых примеров".
Re[54]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 11:42
Оценка: -1 :))
Здравствуйте, hattab, Вы писали:

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


H>>> New(Arr);

H>>> Dispose(Arr);

H>>>Pentium M 1.7GHz. Память PC2700. Время: 67ms.


C>>Если компилятор не дурак, то он вообще не станет выделять память по пусту, раз Вы ее не используете и пустой цикл тоже не станет крутить по чем зря.


C>>Впрочем, это ж Делфи.


H>Вай-вай, говнодельфи укопал мегашарпа... Смотри не лопни, от злости


Кстати, как на делфи с задачкой про все строки файла...
Re[55]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 20.03.09 11:44
Здравствуйте, gandjustas, Вы писали:

G>Кроме того я в тесте кроме выделения памяти померил еще и время двух миллионов проверок на попадание в границы массива и присваивания.

А оно для константных индексов разве будет проверять если размер массива тоже константа, известная еще на этапе компиляции? А как же умный JIT?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[51]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 20.03.09 11:49
Здравствуйте, criosray, Вы писали:

H>>Base64 -- единственный способ передать бинарные данные в XML-RPC.


C>Так Вы сами себе злобные буратины, раз выбрали такой стандарт. Что мешает бинарные передавать обычным http stream`ом?


Почитай, что я Синклеру написал по этому поводу.

C>>>Java-like нотация записи методов (getScreenshot64) — моветон.


H>>Это негласный стандарт в XML-RPC.


C>Ой да ну? А можно ссылку на этот "негласный стандарт". Очень хочу посмотреть.


Иди на http://www.xmlrpc.com/ и смотри примеры.

C>>>В С# нет оператора :=


H>>Писал по памяти. Pascal мой основной язык.


C>Ну мы уже поняли, что с дотнет Вы знакомы весьма поверхностно. Лишь хаете его так, будто бы программируете на нем с релиза.


Я лишь факты констатирую. Просто у пропогандистов реальность из страны ОЗ

C>>>Неиспользование using для MemoryStream — утечка ресурсов.


H>>Чего-то я не понял, а каким ресурсом, кроме собственно памяти, владеет MemoryStream?

C>1) для любого класса, реализующего IDisposable следует вызывать Close/Dispose
C>2) любой Stream по окончании работы с ним следует закрывать (помечая его тем самым closed)

Так камим все таки ресурсом, а? using он для освобождения т.н. неуправляемых ресурсов предназначен же.

C>>>Читабельность Picture.Bitmap.LoadFromStream(TXmlRpcBase64(XmlRpcServerProxy('http://127.0.0.1/').keyhole.getScreenshot64(320, 200)).AsStream); -- отвратительная.


H>>Еще раз: это тестовый пример.

C>Что-то мне подсказывает, что Ваш код выглядит не лучше этих "тестовых примеров".

Попытка перейти на личности приравнивается к сливу. Желаю удачи.
Re[55]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 20.03.09 11:51
Здравствуйте, gandjustas, Вы писали:

C>>Вообще все эти сравнения и пиписькомеренья весьма забавно выглядят. В управляемом коде в целях безопасности, афаик, при выделении памяти производится так же ее очистка (обнуление), а это по два такта процессора на каждый байт.

G>Кроме того я в тесте кроме выделения памяти померил еще и время двух миллионов проверок на попадание в границы массива и присваивания.
G>примерно 5% времени занимает.

Не отмажешься теперь
Re[56]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 11:52
Здравствуйте, CreatorCray, Вы писали:

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


G>>Кроме того я в тесте кроме выделения памяти померил еще и время двух миллионов проверок на попадание в границы массива и присваивания.

CC>А оно для константных индексов разве будет проверять если размер массива тоже константа, известная еще на этапе компиляции? А как же умный JIT?
Может он так и делает. Тогда просто время миллиона присваиваний.
Re[55]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 20.03.09 11:53
Оценка: +4
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, Хвост, Вы писали:


Х>>ну как же, C++ == запредельный перфоманс + надёжный и красивый код

G>И то и другое неправда.
правда, вот я прямо сейчас смотрю в реализацию гугловского V8, и вижу как ни странно запредельный перфоманс + надёжный и красивый код, а может тебе указать на библиотечку Blitz++ которая уделала фортран на вычислительных задачах (да, фортран, да, на вычислительных задачах) что не удавалось твоему перфоманс-фавориту Си? другое дело что мало кто так писать умеет, большинству проще на шарпах Linq'ом побаловаться или в WPF'е поформошлёпить )


Х>>надеюсь ты понимаешь разницу между структурой и классом в дотнете, повторяюсь — инстанцировать классы

G>Я то как раз отлично понимаю, а вы — видимо нет.
можно прямо сказать, дотнет етого не позволяет, я ето знаю, ты ето знаешь, зачем юлить?

Х>>и на посошок, или я проглядел, или ты не ответил на вопрос — сколько у тебя установлено приложений уровня "десктоп", писаных на дотнете?

G>Сколько установлено — не считал, пользуюсь двумя — paint.NET и Windows Live Writer. Это треть софта, который я ставил и пользуюсь им.
у тебя ~6 десктопных программ? клёво
музыку ты наверное не слушаешь, видео не смотришь, документы/таблицы не набираеш, программы не пишешь, гуглы ёрс не смотришь, интернеты не браузишь, скайпы не говоришь, игры не играешь, ну итд по списку 99% софта. ты просто возьми на минутку и задумайся, почему оно так в мире, не правит дотнет.
People write code, programming languages don't.
Re[55]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 12:10
Здравствуйте, gandjustas, Вы писали:

G>Кстати, как на делфи с задачкой про все строки файла...

Если вдруг ты сможешь понятно описать чего тебе надобно, старче, то она очевидно решается на ЛЮБОМ АЛГОРИТМИЧЕСКОМ ЯЗЫКЕ, даже на FORTRAN И basic!
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[56]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 12:13
Оценка: :)
Здравствуйте, Хвост, Вы писали:

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


Х>>>надеюсь ты понимаешь разницу между структурой и классом в дотнете, повторяюсь — инстанцировать классы

G>>Я то как раз отлично понимаю, а вы — видимо нет.
Х>можно прямо сказать, дотнет етого не позволяет, я ето знаю, ты ето знаешь, зачем юлить?
Ну если вы так думаете тогда объясните принципиальную разницу между классом на стеке и структурой на стеке.

Х>>>и на посошок, или я проглядел, или ты не ответил на вопрос — сколько у тебя установлено приложений уровня "десктоп", писаных на дотнете?

G>>Сколько установлено — не считал, пользуюсь двумя — paint.NET и Windows Live Writer. Это треть софта, который я ставил и пользуюсь им.
Х>у тебя ~6 десктопных программ? клёво
Х>музыку ты наверное не слушаешь, видео не смотришь, документы/таблицы не набираеш, программы не пишешь, гуглы ёрс не смотришь, интернеты не браузишь, скайпы не говоришь, игры не играешь, ну итд по списку 99% софта. ты просто возьми на минутку и задумайся, почему оно так в мире, не правит дотнет.
Дейсвительно, не 6, а 7 десктопных программ которыми я пользуюсь: браузер, почтовик, paint.net, live writer, qip, skype, vs2008.
Media Player был в комплекте, офис тоже.
Остальное запускаю редко.

В игры не играю, карты смотрю в браузере.

Кстати, сколько сайтов, по которым ты ходишь написаны на asp.net?
Re[53]: нет, ну если ты настаиваешь... ;) в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 12:18
Здравствуйте, gandjustas, Вы писали:

G>Зачем? Для запредельного перфоманса есть С, для надежного и красивого кода есть C#, F#.

G>А С++ в этом уравнении места нет.

Нет, ну если ты настаиваешь, что быстрый код ОБЯЗАН БЫТЬ ненадёжным и некрасивым, то да, нет...
А если вдруг тебе охота чтобы и быстрый код был и надёжным и красивым и поддерживаемым, то места мало остаётся как раз для С -- только платформы, где есть дот нет, но нет хороших С++ компиляторов...
Кстати, что это за платформы?


Кстати, если так взглянуть на это дело, то окажется, что и для С# место сожмётся, так как если в твоей проге самая нагруженная часть на С++, то не ясно, зачем оболочку-то на ХиндиС делать? У ХиндиС есть неомненный плюс -- дешёвая и быстрая разработка бригадой гастарбайтеров, в смысле индусов. Если в твоём проекте есть такие компоненты, то супер, С# твой выбор...


Да, то, что между черт -- это стёб... Но в каждой шутке есть таки доля шутки...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[56]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 12:21
Здравствуйте, Erop, Вы писали:

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


G>>Кстати, как на делфи с задачкой про все строки файла...

E>Если вдруг ты сможешь понятно описать чего тебе надобно, старче, то она очевидно решается на ЛЮБОМ АЛГОРИТМИЧЕСКОМ ЯЗЫКЕ, даже на FORTRAN И basic!
Никто не говорил что она не решается.

Выразительность языка заключается не в возможности решить задачу, в читаемости, поддерживаемости и расширяемости этого решения. (это упрощенно)
Re[49]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 12:25
Здравствуйте, criosray, Вы писали:

C>Неиспользование using для MemoryStream — утечка ресурсов.

А как же GC?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[54]: нет, ну если ты настаиваешь... ;) в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 12:28
Оценка: +1
Здравствуйте, Erop, Вы писали:

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


G>>Зачем? Для запредельного перфоманса есть С, для надежного и красивого кода есть C#, F#.

G>>А С++ в этом уравнении места нет.

E>Нет, ну если ты настаиваешь, что быстрый код ОБЯЗАН БЫТЬ ненадёжным и некрасивым, то да, нет...

Если вы изначально занимаетесь быстротой кода, то вряд ли он будет нажедным и красивым. Наоборот — вполне.

E>А если вдруг тебе охота чтобы и быстрый код был и надёжным и красивым и поддерживаемым, то места мало остаётся как раз для С -- только платформы, где есть дот нет, но нет хороших С++ компиляторов...

Я не предлагал C использовать для красивого кода.

E>Кстати, если так взглянуть на это дело, то окажется, что и для С# место сожмётся, так как если в твоей проге самая нагруженная часть на С++, то не ясно, зачем оболочку-то на ХиндиС делать? У ХиндиС есть неомненный плюс -- дешёвая и быстрая разработка бригадой гастарбайтеров, в смысле индусов. Если в твоём проекте есть такие компоненты, то супер, С# твой выбор...

Ты как-то очеь интересно говоришь о том что C# позоляет писать хороший код с малыми затратами.

E>Да, то, что между черт -- это стёб... Но в каждой шутке есть таки доля шутки...

Все что ты написал в предыдущем абзаце — правда.
Когда вместо индусов пишут нормальные программисты код у них получается гораздо лучше и быстрее, чем на С++.
И только там где не хватает производительности может быть использован C.

ЗЫ. Ты думаешь на С++ индусы не пишут?
Re[57]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 20.03.09 12:32
Здравствуйте, gandjustas, Вы писали:
G>Ну если вы так думаете тогда объясните принципиальную разницу между классом на стеке и структурой на стеке.
объясняю, struct в сишарпе ето семантически то что называется POD в С++, т.е. плоская структура данных, ни конструкторов, ни методов, ничего. Так вот, в С++ в стек можно положить как объект-инстанс класса, так и объект-инстанс POD-структуры, в сишарпе же только второе.

G>Кстати, сколько сайтов, по которым ты ходишь написаны на asp.net?

честно говоря не знаю, может пять, может десять, на вскидку только три вспомнил, включая рсдн. По ощущениям зарубежные сайты где-то 50/50 asp.net/jsp, наши ~80 — php
Кстати вот ниша веба имхо вполне подходит для .NET (и название платформы удачно подходит ), но мне кажется с развитием песочниц VPS/VDS в веб в лоу-енд сектор может пролезть и C++ (ага, да, именно ето я и сказал, C++ в вебе, какой-нибудь CMS++ ), т.к. VPS/VDS площадки дают довольно ограниченные ресурсы, и хороший производительный веб-фреймворк на С++ очень имел бы право жить.
People write code, programming languages don't.
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 12:41
Здравствуйте, Sinclair, Вы писали:

S>Совершенно верно. И это — единственный способ писать хорошие программы.

Это тебе Бог сообщил, или сам БГ?

S>Известно. Он бы бездарно потратил больше времени на разработку программы.

Чего? Ты думаешь допереть, что для словаря надо использовать структуру, которая ищет эффективно ему понадобилось бы очень много времени?
Не, я конечно понимаю, что это ХиндиС, но не Папус-Новая-Нвинея-С, всё-таки

E>>Мне так кажется, что 2 секунды для этой программки -- ЭТО ОЧЕНЬ ОЧЕНЬ ОЧЕНЬ ДОЛГО.

S>Напомню, что цели должны быть ориентированы на потребителя, а не высосаны из пальца. Сколько, по-твоему, должна работать эта программа? Почему?
Если бы оно ориентировалось на меня как на потребителя, то 0,01 — 0,03 секунды.
Я хотел бы менять ситуацию и сразу видеть варианты в GUI интерфейсе, например...

E>>А вот, если в дело вмешиваются клиенты и конкуренты, ситуация несколько меняется...

S>Читать последнюю строчку в его статье.

Это которая "But I'm not"? Ну да, он действительно не может, потому что действует в рамках индусской парадигмы...
А теперь иди читать моё замечание про то, что если сам себе орбитр, то выиггрывать легко.
И, кстати, тема связи этой "оптимизации" со случаем, когда мы упираемся в "особенности GC" как-то всё-равно не раскрыта... Это если конечно "But I'm not", не учитывать
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 12:43
Здравствуйте, Sinclair, Вы писали:

S>А он неявно сортирует??? Офигеть. Я как отвык от того, что для множества нужно задавать отношение частичного порядка.

S>Я надеюсь, уточнение сортировки в Case-insensitive/accent-sensitive для турецкой локали не усложнит эту безусловно прекрасную программу?

Может уважаемый MVP снизойдёт к нам, сирым и убогим и вспомнит таки азы, а уже потом будет позориться?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[58]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 20.03.09 12:46
Здравствуйте, Хвост, Вы писали:

G>>Ну если вы так думаете тогда объясните принципиальную разницу между классом на стеке и структурой на стеке.

Х>объясняю, struct в сишарпе ето семантически то что называется POD в С++, т.е. плоская структура данных, ни конструкторов, ни методов, ничего. Так вот, в С++ в стек можно положить как объект-инстанс класса, так и объект-инстанс POD-структуры, в сишарпе же только второе.

Pavel Dvorkin, а вот Вам подтверждение моих слов: человек явно не знает, но хаит.

"A struct is a simple user-defined type, a lightweight alternative to a class. They support access modifiers, constructors, indexers, methods, fields, nested types, operators, and properties."

http://en.csharp-online.net/struct
Re[58]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 12:49
Оценка: +1 :)
Здравствуйте, Хвост, Вы писали:

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

G>>Ну если вы так думаете тогда объясните принципиальную разницу между классом на стеке и структурой на стеке.
Х>объясняю, struct в сишарпе ето семантически то что называется POD в С++, т.е. плоская структура данных, ни конструкторов, ни методов, ничего.
В структуре нет методов? Это точно на C#?

Х>Так вот, в С++ в стек можно положить как объект-инстанс класса, так и объект-инстанс POD-структуры, в сишарпе же только второе.

В C++ клас и структура — одно и тоже. В C# — разные вещи.

Вопрос возник видимо из-за непонимания этого факта.
Re[59]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 20.03.09 12:52
Оценка: +1 :))
Здравствуйте, gandjustas, Вы писали:

Х>>Так вот, в С++ в стек можно положить как объект-инстанс класса, так и объект-инстанс POD-структуры, в сишарпе же только второе.

G>В C++ клас и структура — одно и тоже. В C# — разные вещи.

G>Вопрос возник видимо из-за непонимания этого факта.


Причём — тобой.
Re[59]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 20.03.09 13:04
Здравствуйте, gandjustas, Вы писали:

G>В структуре нет методов? Это точно на C#?

ммм...статические есть, но ето немного не то, правда?

G>Вопрос возник видимо из-за непонимания этого факта.

у меня отличное понимание факта.
People write code, programming languages don't.
Re[60]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 13:08
Оценка: +1
Здравствуйте, Хвост, Вы писали:

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


G>>В структуре нет методов? Это точно на C#?

Х>ммм...статические есть, но ето немного не то, правда?
http://msdn.microsoft.com/en-us/library/ah19swz4.aspx

G>>Вопрос возник видимо из-за непонимания этого факта.

Х>у меня отличное понимание факта.
Вы показываете обратное.

ЗЫ. Вообзе говоря не верится что вы писали enterprise систему на C# и ни разу не пользовались структурой DateTime.
Re[38]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Alexey Voytsehovich 
Дата: 20.03.09 13:25
Здравствуйте, CreatorCray, Вы писали:

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


C>>Обычно и того меньше — до 2GB, что можно переконфигурировать в boot.ini и получить до 3х.

CC>Уточню, процесс видит адресного пространства 4Gb/Segment, но использовать под свои нужды может тока младшие 2(3)Gb. Остальным распоряжается система.

может кто подскажет какой туда ключик надо написать для windows xp sp3? Заранее спс.
... << RSDN@Home 1.2.0 alpha 4 rev. 1138>>
Я не умею быть злым, и не хочу быть добрым.
Re[39]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 20.03.09 13:28
Оценка:2 (1)
Здравствуйте, Alexey Voytsehovich, Вы писали:

C>>>Обычно и того меньше — до 2GB, что можно переконфигурировать в boot.ini и получить до 3х.

CC>>Уточню, процесс видит адресного пространства 4Gb/Segment, но использовать под свои нужды может тока младшие 2(3)Gb. Остальным распоряжается система.

AV>может кто подскажет какой туда ключик надо написать для windows xp sp3? Заранее спс.


http://www.microsoft.com/whdc/system/platform/server/PAE/PAEmem.mspx
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: esil 
Дата: 20.03.09 13:28
Здравствуйте, gandjustas, Вы писали:

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


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


BZ>>>потому, что malloc/free на каждый глобальный объект может быть медленней, чем последовательное выделение памяти и затем gc, который за один раз собирает весь мусор


M>>Даю подсказку

M>>int a = 0;
M>>int b = 3 + a;

M>>Очень память дефрагментирует ? затратит линейное время на на выделение памяти и т.п. ?


G>напишите этот же код на Java, .NET, причем буква в букву. работать везде одинаково будет.


G>У вас как в древней присказке "слышу звон, да не знаю где он".


Да это как раз у Вас полнейший неадекват какой-то, постоянное съезжание с темы, ответы на посты в отрыве от обсуждаемого контекста.

Там же написано, что подсказка. Додуматься, что очевидно имелось в виду то, что можно заменить int на произвольный класс, и никакого malloca/free не понадобится, не судьба?

P. S. Даже попкорн полохо лезет под такой некачественный флейм.
Re[61]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 20.03.09 13:31
Оценка: -2 :))
Здравствуйте, gandjustas, Вы писали:

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


G>>>В структуре нет методов? Это точно на C#?

Х>>ммм...статические есть, но ето немного не то, правда?
G>http://msdn.microsoft.com/en-us/library/ah19swz4.aspx
угу, размести на стеке

G>ЗЫ. Вообзе говоря не верится что вы писали enterprise систему на C# и ни разу не пользовались структурой DateTime.

мне вообще иногда хочется забыть что я писал на C#, кажется карма испорчена навсегда (хотя есть надежда что функциональщина очистит мою душу)

Да, вопрос на засыпку, дотнет коммьюнити не смущает что вещи а-ля Windows Vista Bridge Sample Library выходят с опозданием в 2-3 года после появления новых апи? вы только начали готовить? а мы уже продаём
People write code, programming languages don't.
Re[60]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 20.03.09 13:32
Здравствуйте, Хвост, Вы писали:

G>>В структуре нет методов? Это точно на C#?

Х>ммм...статические есть, но ето немного не то, правда?
Странно, что Вы, как утверждаете, писали на дотнет и не знаете, что у структур есть и инстанс методы.

В дотнет structure это value-тип — передается копированием и хранится в стеке.
class — reference-тип — передается по указателю и хранится в куче.

Преобразование value-типа к ref-типу называется боксингом, обратное — unboxing`ом.

int i = 10;
object o = i;
int k = (int) o;

G>>Вопрос возник видимо из-за непонимания этого факта.

Х>у меня отличное понимание факта.

Отличное от реальности?
Re[61]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 20.03.09 13:36
Оценка: -1 :)
Здравствуйте, criosray, Вы писали:

C>Отличное от реальности?

изначально разговор был о массиве структур на стеке, ликбез про боксинг/анбоксинг читать не стоило, читал давно, в зелёной книжке.
People write code, programming languages don't.
Re[62]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 20.03.09 13:38
Оценка: +1 -2
Здравствуйте, Хвост, Вы писали:

C>>Отличное от реальности?

Х>изначально разговор был о массиве структур на стеке, ликбез про боксинг/анбоксинг читать не стоило, читал давно, в зелёной книжке.

Да нет, стоило. Иначе Вы бы продолжали в пустую гонять воздух, не зная почти ничего о теме разговора.
Re[63]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 20.03.09 13:40
Здравствуйте, criosray, Вы писали:

C>Здравствуйте, Хвост, Вы писали:

C>Да нет, стоило. Иначе Вы бы продолжали в пустую гонять воздух, не зная почти ничего о теме разговора.
покажи массив на стеке в дотнете, или действительно не стоит гонять воздух впустую
People write code, programming languages don't.
Re[64]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 20.03.09 13:41
Здравствуйте, Хвост, Вы писали:

C>>Да нет, стоило. Иначе Вы бы продолжали в пустую гонять воздух, не зная почти ничего о теме разговора.

Х>покажи массив на стеке в дотнете, или действительно не стоит гонять воздух впустую

Прочитайте еще раз то, что я Вам писал.
Re[65]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 20.03.09 13:42
Здравствуйте, criosray, Вы писали:

C>Прочитайте еще раз то, что я Вам писал.

хм, написано что такое боксинг и анбоксинг, про value и ref типы, про массив структур на стеке не увидел
People write code, programming languages don't.
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 13:43
Оценка: :)
Здравствуйте, esil, Вы писали:

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


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


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


BZ>>>>потому, что malloc/free на каждый глобальный объект может быть медленней, чем последовательное выделение памяти и затем gc, который за один раз собирает весь мусор


M>>>Даю подсказку

M>>>int a = 0;
M>>>int b = 3 + a;

M>>>Очень память дефрагментирует ? затратит линейное время на на выделение памяти и т.п. ?


G>>напишите этот же код на Java, .NET, причем буква в букву. работать везде одинаково будет.


G>>У вас как в древней присказке "слышу звон, да не знаю где он".


E>Да это как раз у Вас полнейший неадекват какой-то, постоянное съезжание с темы, ответы на посты в отрыве от обсуждаемого контекста.


E>Там же написано, что подсказка. Додуматься, что очевидно имелось в виду то, что можно заменить int на произвольный класс, и никакого malloca/free не понадобится, не судьба?


E>P. S. Даже попкорн полохо лезет под такой некачественный флейм.


Думаете нельзя в C# на стеке данные размещать?
Вот в Java нельзя, только элементарные типы, в C# есть стурктуры.

Не надо показывать свое незнание.
Re[62]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 20.03.09 13:48
Здравствуйте, Хвост, Вы писали:

Х>изначально разговор был о массиве структур на стеке, ликбез про боксинг/анбоксинг читать не стоило, читал давно, в зелёной книжке.

Непонятно к чему тогда было следующее:
1.

объясняю, struct в сишарпе ето семантически то что называется POD в С++, т.е. плоская структура данных, ни конструкторов, ни методов, ничего

2.

G>В структуре нет методов? Это точно на C#?
ммм...статические есть, но ето немного не то, правда?

Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[62]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 13:50
Здравствуйте, Хвост, Вы писали:

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


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


G>>>>В структуре нет методов? Это точно на C#?

Х>>>ммм...статические есть, но ето немного не то, правда?
G>>http://msdn.microsoft.com/en-us/library/ah19swz4.aspx
Х>угу, размести на стеке

var s = new SomeStructType(ctor_args);

Будет на стеке, можете дизассемблером посмотреть.

Вообще старнно как-то. У меня на собеседованиях по .NET одним из первых спрашивали про ралличия классов и структур (value и reference типов). Я сам этот вопрос первым задавал когда собеседования проводил.
Знание и понимание системы типов это то что необходимо для написаня хоть сколько-нибудь сложных программ на любом языке.
А в КСВ каждый день вижу как люди утверждают что они писали на C# но при этом не знают каких-то элементарных вещей.

G>>ЗЫ. Вообзе говоря не верится что вы писали enterprise систему на C# и ни разу не пользовались структурой DateTime.

Х>мне вообще иногда хочется забыть что я писал на C#, кажется карма испорчена навсегда (хотя есть надежда что функциональщина очистит мою душу)
Функциональщина? Так там же GC!

Х>Да, вопрос на засыпку, дотнет коммьюнити не смущает что вещи а-ля Windows Vista Bridge Sample Library выходят с опозданием в 2-3 года после появления новых апи? вы только начали готовить? а мы уже продаём

Их и раньше можно было использовать через pinvoke, кто хотел — тот делал.
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 20.03.09 13:51
Здравствуйте, gandjustas, Вы писали:

G>Думаете нельзя в C# на стеке данные размещать?

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

А вот что имел ввиду minorlogic я, чесс говоря, тоже не понял.
Но эт не страшно
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[63]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 20.03.09 13:54
Оценка: :)
Здравствуйте, MxKazan, Вы писали:

MK>Непонятно к чему тогда было следующее:

потому что я был уверен что struct в C# ето только данные и все операции с ним аля положить в массив и вызвать метод происходят только в его боксовом представлении
People write code, programming languages don't.
Re[63]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 20.03.09 13:54
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, Хвост, Вы писали:


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


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


G>>>>>В структуре нет методов? Это точно на C#?

Х>>>>ммм...статические есть, но ето немного не то, правда?
G>>>http://msdn.microsoft.com/en-us/library/ah19swz4.aspx
Х>>угу, размести на стеке

G>
G>var s = new SomeStructType(ctor_args);
G>

G>Будет на стеке, можете дизассемблером посмотреть.
массив на стеке
People write code, programming languages don't.
Re[64]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 13:55
Здравствуйте, Хвост, Вы писали:

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


C>>Здравствуйте, Хвост, Вы писали:

C>>Да нет, стоило. Иначе Вы бы продолжали в пустую гонять воздух, не зная почти ничего о теме разговора.
Х>покажи массив на стеке в дотнете, или действительно не стоит гонять воздух впустую

var stackArrayOfStruct = stackalloc SomeStruct[10];
Re[62]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 14:00
Здравствуйте, Хвост, Вы писали:

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


C>>Отличное от реальности?

Х>изначально разговор был о массиве структур на стеке
Ложь. Изначально разговор о ращемещении экземпляра класса на стеке.
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: esil 
Дата: 20.03.09 14:02
Оценка: +1 -1
Здравствуйте, gandjustas, Вы писали:

E>>Да это как раз у Вас полнейший неадекват какой-то, постоянное съезжание с темы, ответы на посты в отрыве от обсуждаемого контекста.


E>>Там же написано, что подсказка. Додуматься, что очевидно имелось в виду то, что можно заменить int на произвольный класс, и никакого malloca/free не понадобится, не судьба?


E>>P. S. Даже попкорн полохо лезет под такой некачественный флейм.


G>Думаете нельзя в C# на стеке данные размещать?

G>Вот в Java нельзя, только элементарные типы, в C# есть стурктуры.

G>Не надо показывать свое незнание.


А вот обязательно было в моём утверждении подменять "произвольный класс" на "данные"? Именно это я и имел в виду, говоря про неадекват.
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 14:04
Оценка: :)
Здравствуйте, esil, Вы писали:

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


E>>>Да это как раз у Вас полнейший неадекват какой-то, постоянное съезжание с темы, ответы на посты в отрыве от обсуждаемого контекста.


E>>>Там же написано, что подсказка. Додуматься, что очевидно имелось в виду то, что можно заменить int на произвольный класс, и никакого malloca/free не понадобится, не судьба?


E>>>P. S. Даже попкорн полохо лезет под такой некачественный флейм.


G>>Думаете нельзя в C# на стеке данные размещать?

G>>Вот в Java нельзя, только элементарные типы, в C# есть стурктуры.

G>>Не надо показывать свое незнание.


E>А вот обязательно было в моём утверждении подменять "произвольный класс" на "данные"? Именно это я и имел в виду, говоря про неадекват.

А вы можете объяснить разницу?
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: esil 
Дата: 20.03.09 14:05
Здравствуйте, MxKazan, Вы писали:

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


G>>Думаете нельзя в C# на стеке данные размещать?

MK>Думаю конкретно esil имеет ввиду, что нельзя разместить в стеке произвольные данные.
MK>Массивы, например, туда не засунуть, ибо class

MK>А вот что имел ввиду minorlogic я, чесс говоря, тоже не понял.

MK>Но эт не страшно

Ну он как раз и имеет в виду, что мы можем произвольные типы размещать на стэке, что очень полезно, т. к. позволяет оставаться в рамках ООП-подхода и избегать множества выделений памяти в куче.
Re[28]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 14:10
Оценка: :))) :)
Здравствуйте, esil, Вы писали:

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


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


G>>>Думаете нельзя в C# на стеке данные размещать?

MK>>Думаю конкретно esil имеет ввиду, что нельзя разместить в стеке произвольные данные.
MK>>Массивы, например, туда не засунуть, ибо class

MK>>А вот что имел ввиду minorlogic я, чесс говоря, тоже не понял.

MK>>Но эт не страшно

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

Как будут работать виртуальные методы при размещении объектов на стеке?
Re[65]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 20.03.09 14:14
Оценка: +1 -1
Здравствуйте, gandjustas, Вы писали:

G>
G>var stackArrayOfStruct = stackalloc SomeStruct[10];
G>


хы, ансейф, вперёд к С++?

просто вот когда дело доходит до новых апи — здравствуй интероп с нейтивом, хочешь массив на стеке — здравствуй ансейф, тот же пэйнт.нет афаир просто насквозь пропитан ансейфом, зачем тогда сишарп? хорошие вещи делаются только в нейтиве, вот тот же пример с выводом строк, для такой забавы как флейм на рсдн и стримы с регекспами не грех использовать, а вот если бы ето была программа промышленных маштабов — скажим анализатор логов, то здравствуй мем-маппед файлы да стейт-машины с отсутствием аллокаций, и писать етона си++ без ifstream и multiset, а не на сишарпе с gc и аллокацией на каждый чих.
People write code, programming languages don't.
Re[56]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 20.03.09 14:14
Оценка: +2 -1 :)
Здравствуйте, Erop, Вы писали:

G>>Кстати, как на делфи с задачкой про все строки файла...

E>Если вдруг ты сможешь понятно описать чего тебе надобно, старче, то она очевидно решается на ЛЮБОМ АЛГОРИТМИЧЕСКОМ ЯЗЫКЕ, даже на FORTRAN И basic!
Ты не понял, это у шарпников новый фетиш такой: острое желание показать как можно выпендриться на шарпе. Синтаксический оверхедЪ у них там меньше.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[28]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: esil 
Дата: 20.03.09 14:16
Здравствуйте, gandjustas, Вы писали:

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


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


E>>>>Да это как раз у Вас полнейший неадекват какой-то, постоянное съезжание с темы, ответы на посты в отрыве от обсуждаемого контекста.


E>>>>Там же написано, что подсказка. Додуматься, что очевидно имелось в виду то, что можно заменить int на произвольный класс, и никакого malloca/free не понадобится, не судьба?


E>>>>P. S. Даже попкорн полохо лезет под такой некачественный флейм.


G>>>Думаете нельзя в C# на стеке данные размещать?

G>>>Вот в Java нельзя, только элементарные типы, в C# есть стурктуры.

G>>>Не надо показывать свое незнание.


E>>А вот обязательно было в моём утверждении подменять "произвольный класс" на "данные"? Именно это я и имел в виду, говоря про неадекват.

G>А вы можете объяснить разницу?

Ну вот такой довольно типичный для С++ пример разве разницу не объясняет:


class some_abstract_class {
public:
    some_abstract_class() {}
    virtual ~some_abstract_class() {}

    virtual void some_virtual_function() = 0;
};

void some_function_that_uses_abstract_class(some_abstract_class * cls) {
    cls->some_virtual_function();
}

class some_abstract_class_implementation: public some_abstract_class {
public:
    some_abstract_class_implementation() {}
    virtual ~some_abstract_class_implementation() {}

    virtual void some_virtual_function() {
    }
};

void some_function_usage() {
    some_abstract_class_implementation impl;
    some_function_that_uses_abstract_class(&impl);
}


?
Re[29]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: esil 
Дата: 20.03.09 14:26
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>>>>Думаете нельзя в C# на стеке данные размещать?

MK>>>Думаю конкретно esil имеет ввиду, что нельзя разместить в стеке произвольные данные.
MK>>>Массивы, например, туда не засунуть, ибо class

MK>>>А вот что имел ввиду minorlogic я, чесс говоря, тоже не понял.

MK>>>Но эт не страшно

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

G>Как будут работать виртуальные методы при размещении объектов на стеке?

Точно так же, как и при размещении в куче. По указателю на базовый класс можно получить таблицу виртуальных функций, а где в памяти объект этого класса расположен — не важно. Приме ниже привёл.
Re[64]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 20.03.09 14:33
Здравствуйте, Хвост, Вы писали:

Х>потому что я был уверен что struct в C# ето только данные и все операции с ним аля положить в массив и вызвать метод происходят только в его боксовом представлении

Угу. Еще ты был уверен про уровень
Автор: Хвост
Дата: 20.03.09
разработчиков .Net.
Что теперь мешает и мне написать подобный пост про тебя?
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: esil 
Дата: 20.03.09 14:38
Здравствуйте, gandjustas, Вы писали:

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


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


BZ>>>читай внимательно. в языках с gc гарантия — на 3x, можно и меньше. в C++ — гарантий никаких, расход может быть каким угодно прсто потому что память усеяна мелкими дырками


NBN>>C++ очень универсальный язык Он позволяет писать так как тебе нужно. В частности обеспечить все гарантии по чему хочешь, чем я, кстати, на днях воспользовался.

G>Я вот тут на днях написал на C# библиотеку для работы с конечными автоматами. Она генерирует в рантайме код автомата по описанию, а потом использует его.
G>На C++ такое получится?

И что же из себя представляет описание? И что из этого описания генерируется? И зачем это нужно в рантайм, почему нельзя в compile-time?
Re[3]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Regulus 
Дата: 20.03.09 14:55
Оценка: :)
Здравствуйте, MxKazan, Вы писали:

MK> Про слив понравилось! Посмотрим как ты напишешь программу на C++ с графическим интерфейсом, но независимую от платформы.


QT слыхал о таком?
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 20.03.09 14:58
Здравствуйте, esil, Вы писали:

NBN>>>C++ очень универсальный язык Он позволяет писать так как тебе нужно. В частности обеспечить все гарантии по чему хочешь, чем я, кстати, на днях воспользовался.

G>>Я вот тут на днях написал на C# библиотеку для работы с конечными автоматами. Она генерирует в рантайме код автомата по описанию, а потом использует его.
G>>На C++ такое получится?

E>И что же из себя представляет описание? И что из этого описания генерируется? И зачем это нужно в рантайм, почему нельзя в compile-time?


В compile-time Вы ограничены статичным автоматом, либо вынуждены использовать интерпретируемый автомат (например, с описанием на DSL-языке).
Re[65]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 20.03.09 15:04
Оценка: +2 -1
Здравствуйте, MxKazan, Вы писали:

MK>Здравствуйте, Хвост, Вы писали:


Х>>потому что я был уверен что struct в C# ето только данные и все операции с ним аля положить в массив и вызвать метод происходят только в его боксовом представлении

MK>Угу. Еще ты был уверен про уровень
Автор: Хвост
Дата: 20.03.09
разработчиков .Net.

MK>Что теперь мешает и мне написать подобный пост про тебя?
ну, давай по-порядку, на С# я писал давно и немного, на С++ на порядок больше, и есстествено что-то могло забытся, к тому же если ты проследишь начало темы про структуры, то она была о размещении их в массиве, и тут без ансейфа вариант действительно только один — боксинг. Теперь по-поводу "подобный пост про тебя", пиши пожалуйста, ведь ето ты будешь писать обо мне как о разработчике на C#, что ещё раз подтвердит мои слова , C# (особенно в версии 3.5) ето очень мощный язык, но для приложений требующих производительности, малой затраты ресурсов, быстрой реакции интерфейса ето просто моветон. Прототипы писать одно удовольствие, но тут как говорится — хоть на питоне. Дотнетчики же говорят "ааа, да ты чего, купи 4 ядра, возьми 16 гб" меня просто умиляют, вы поймите, что достойная производительность ето дополнительный функционал, ето когда спеллчекер подчёркивает красным не через две секунды после набора слова а сразу, ето когда в CAD'ах скролл рабочей области работает плавно, ето когда скриптовый google docs интерфейс не лагает, ето когда ты можешь в корелдро видеть тридцать слоёв одновременно а не пять, или когда диаграмму в таблице можно увидеть не только в плоском виде а в 3д и повращать, т.е. ещё раз, дополнительные ресурсы — дополнительный функционал. Вся ета дотнетчина на десктопах ето от бедности, когда нет денег нанять высокопрофессиональных программистов на С++ чтобы сделать проект и планка качества невысока, сойдёт и сишарп. Ентерпрайз лично у меня никогда не ассоциировался с качественным кодом, имхо там главная цель — лишь бы правильно работало, а уж быстро ли, медленно ли, интерфейс кривой или прямой — ето уже волнует в пятую очередь. Что насчёт дотнета на серверах — я только за, там дотнет ето просто клей, логика, вся тяжёлая работа лежит на сиквел-серверах + если надо какие-либо нейтив компоненты для обработки чего-нить быстрого (звук/картинки/видео). Заменить слово C# например на Python и ничего не поменяется, абсолютно. C# это клей, полный аналог VB конца 90-х по своему назначению, и плз, не надо его пихать в десктопы, точнее у вас ничего не выйдет, т.к. вы десктопы на C# не пишете, если вы разумны или у вас разумный руководитель.
People write code, programming languages don't.
Re[66]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 20.03.09 15:12
Оценка: +1 -1 :)
Здравствуйте, Хвост, Вы писали:

Х>ну, давай по-порядку, на С# я писал давно и немного, на С++ на порядок больше, и есстествено что-то могло забытся, к тому же если ты проследишь начало темы про структуры, то она была о размещении их в массиве, и тут без ансейфа вариант действительно только один — боксинг. Теперь по-поводу "подобный пост про тебя", пиши пожалуйста, ведь ето ты будешь писать обо мне как о разработчике на C#, что ещё раз подтвердит мои слова , C# (особенно в версии 3.5) ето очень мощный язык, но для приложений требующих производительности, малой затраты ресурсов, быстрой реакции интерфейса ето просто моветон. Прототипы писать одно удовольствие, но тут как говорится — хоть на питоне. Дотнетчики же говорят "ааа, да ты чего, купи 4 ядра, возьми 16 гб" меня просто умиляют, вы поймите, что достойная производительность ето дополнительный функционал, ето когда спеллчекер подчёркивает красным не через две секунды после набора слова а сразу, ето когда в CAD'ах скролл рабочей области работает плавно, ето когда скриптовый google docs интерфейс не лагает, ето когда ты можешь в корелдро видеть тридцать слоёв одновременно а не пять, или когда диаграмму в таблице можно увидеть не только в плоском виде а в 3д и повращать, т.е. ещё раз, дополнительные ресурсы — дополнительный функционал. Вся ета дотнетчина на десктопах ето от бедности, когда нет денег нанять высокопрофессиональных программистов на С++ чтобы сделать проект и планка качества невысока, сойдёт и сишарп. Ентерпрайз лично у меня никогда не ассоциировался с качественным кодом, имхо там главная цель — лишь бы правильно работало, а уж быстро ли, медленно ли, интерфейс кривой или прямой — ето уже волнует в пятую очередь. Что насчёт дотнета на серверах — я только за, там дотнет ето просто клей, логика, вся тяжёлая работа лежит на сиквел-серверах + если надо какие-либо нейтив компоненты для обработки чего-нить быстрого (звук/картинки/видео). Заменить слово C# например на Python и ничего не поменяется, абсолютно. C# это клей, полный аналог VB конца 90-х по своему назначению, и плз, не надо его пихать в десктопы, точнее у вас ничего не выйдет, т.к. вы десктопы на C# не пишете, если вы разумны или у вас разумный руководитель.


Стена текста и все не по делу...

У нас пользователи в госструктурах на компах, которым уже по 2-4 года работают с нашим клиентом на .NET уже больше года в production режиме. Клиент довольно тяжелый: диалоги, графики, отчеты, таблицы, формы — полный комплект. Нареканий на производительность до сих пор не было. "ЧЯДНТ?"
Re[67]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 20.03.09 15:38
Оценка:1 (1) +2 -2
Здравствуйте, criosray, Вы писали:

C>У нас пользователи в госструктурах на компах, которым уже по 2-4 года работают с нашим клиентом на .NET уже больше года в production режиме. Клиент довольно тяжелый: диалоги, графики, отчеты, таблицы, формы — полный комплект. Нареканий на производительность до сих пор не было. "ЧЯДНТ?"


да всё ты делаешь так, я же говорю, VB 21-го века, как бы понимаешь, на примере моего проекта, относительно небольшое приложение, формы, диалоги, отчёты, никто не жалуется, только я вот смотрю на как формочка появляется и меня грусть берёт, вот реально по ощущениям пластилин какой-то, оно то пользователю кажется и ничего, ну полсекунды на форму, или две — а мне то понятно что та же самая форма с теми же самыми контролами будь она писана на MFC например — появилась бы мнгновенно, потому что нет хмля, нет джита, нет гц будь он неладен. Но пипл хавает , ему лишь бы работало, а будет отчёт генерится 5 минут или 5 секунд — неважно, лишь бы не пять часов. Потому что ентерпрайз, другой такой программки у них нет и не будет, сравнивать не с чем. На десктопах ситуация кардинально другая — тут каждый сам за себя, пользователь выбирает, а не как в ентерпрайзах — "мы сейчас к вам прийдём и всё автоматизируем процесс", у пользователя процесс простой — почту почитать, фильму посмотреть, порисовать, поболтать, документ набрать, и тут ты к каждому в дом не прийдёшь с уговором, не создашь индивидуальный софт для каждого десктопа, тебе нужно сделать нацеленый на широкую аудиторию качественный софт, только вот незадача, а качественный нейтив то в этой области уже есть, а лучше качественного нейтива может быть только другой качественный нейтив с большим функционалом, а функционал реально ограничен только одним ресурсом — ресурсом компьютера. Если бы дотнет хотя бы в полтора раза ускорял разработку качественного десктопного софта, за 8 лет на нём бы уже написали немеряно десктоп приложений (посмотрите на C++, когда появился первый промышленный компилятор, и сколько софта писалось на C++ через 8 лет). Однако есть момент. Качественного десктопного софта на C# нет.
People write code, programming languages don't.
Re[29]: Следуй своим же советам! в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 15:49
Оценка: +1 -1
Здравствуйте, gandjustas, Вы писали:

G>Как будут работать виртуальные методы при размещении объектов на стеке?

Блин, следуй своим же советам! Заботай таки С++, а потом уже критикуй!
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[68]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Mamuthttp://dmitriid.com/
Дата: 20.03.09 15:49
Х> Качественного десктопного софта на C# нет.

С одной стороны виноват тот же С++. Потому что legacy и тот же ворд нет смысла переписывать с нуля
С другой стороны — а что такое десктопный софт?
Re[68]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 20.03.09 15:50
Здравствуйте, Хвост, Вы писали:

C>>У нас пользователи в госструктурах на компах, которым уже по 2-4 года работают с нашим клиентом на .NET уже больше года в production режиме. Клиент довольно тяжелый: диалоги, графики, отчеты, таблицы, формы — полный комплект. Нареканий на производительность до сих пор не было. "ЧЯДНТ?"


Х>да всё ты делаешь так, я же говорю, VB 21-го века, как бы понимаешь, на примере моего проекта, относительно небольшое приложение, формы, диалоги, отчёты, никто не жалуется,


Ну если приложение на 3 млн. строк кода "небольшое"...

Х>только я вот смотрю на как формочка появляется и меня грусть берёт, вот реально по ощущениям пластилин какой-то,


Может дело вовсе не в .NET?

Х>оно то пользователю кажется и ничего, ну полсекунды на форму, или две — а мне то понятно что та же самая форма с теми же самыми контролами будь она писана на MFC например — появилась бы мнгновенно,


2 секунды на форму? Дело точно не в .NET.

Х>потому что нет хмля, нет джита, нет гц будь он неладен. Но пипл хавает , ему лишь бы работало, а будет отчёт генерится 5 минут или 5 секунд — неважно, лишь бы не пять часов.


Генерация отчета точно не ограничена дотнетом. Там 95% скорости генерации зависит от доступа к базе.

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


Вы глубоко заблуждаетесь. Лучший тому пример — Microsoft Blend, и AutoCAD, последних версий.

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

Ускоряет не в полтора раза, а как-минимум в три раза (в некоторых случаях может спокойно достичь десятикратного ускорения).
Сужу на собственном опыте — я много лет тому назад перешел с С/С++ на .NET и уже тогда он был более оправдан для большого класса приложений, а на сегодня так и подавно.

Благодаря .NET софт получается еще и много более качественный. Мы — адепты TDD. У нас 95% покрытие тестами.

Х>за 8 лет на нём бы уже написали немеряно десктоп приложений (посмотрите на C++, когда появился первый промышленный компилятор, и сколько софта писалось на C++ через 8 лет). Однако есть момент. Качественного десктопного софта на C# нет.

Продолжайте верить в это.
Re[57]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 15:59
Здравствуйте, gandjustas, Вы писали:

G>Выразительность языка заключается не в возможности решить задачу, в читаемости, поддерживаемости и расширяемости этого решения. (это упрощенно)


Если я верно понял, тебе хочется уметь проверять есть ли в строке не менее трёх слов подряд, упорядоченных по алфавиту?
Так? IMHO, это просто, понятно и поддерживаемо записывается на ЛЮБОМ АЛГОРИТМИЧЕСКОМ ЯЗЫКЕ...
Ну, во всяком случае теми, кто умеет программировать...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[57]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 16:03
Здравствуйте, gandjustas, Вы писали:

G>Дейсвительно, не 6, а 7 десктопных программ которыми я пользуюсь: браузер, почтовик, paint.net, live writer, qip, skype, vs2008.

G>Media Player был в комплекте, офис тоже.
G>Остальное запускаю редко.

А "офис" -- это надо читать, как "ворд", или, как "ещё пять-семь программ"?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[69]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 20.03.09 16:13
Оценка: +1 :)
Здравствуйте, criosray, Вы писали:

Х>>да всё ты делаешь так, я же говорю, VB 21-го века, как бы понимаешь, на примере моего проекта, относительно небольшое приложение, формы, диалоги, отчёты, никто не жалуется,

C>Ну если приложение на 3 млн. строк кода "небольшое"...
я говорил о проекте в котором участвовал я, он был на порядок
3 млн. строк кода внушает, ето около 40 человеколет.

C>Может дело вовсе не в .NET?

может

C>2 секунды на форму? Дело точно не в .NET.

а может и в .NET, я не профайлил, знаете почему? потому что nobody care

C>Вы глубоко заблуждаетесь. Лучший тому пример — Microsoft Blend, и AutoCAD, последних версий.

Blend ето второй продукт о котором я услышал первый раз в жизни, глянул — софт для дотнета на дотнете, вполне логично.
Насчёт автокада я незнаю откуда пошло ето регулярно звучащее заблуждение, но я знаю одно, автокад — ето С++, то что автодеск выпустила пакет апи для интеропа с дотнетом не превращает продукт из нейтива в менеджед.

C>Благодаря .NET софт получается еще и много более качественный. Мы — адепты TDD. У нас 95% покрытие тестами.

я думаю TDD как методология слабо коррелирует с платформой или языком разработки.

Х>>за 8 лет на нём бы уже написали немеряно десктоп приложений (посмотрите на C++, когда появился первый промышленный компилятор, и сколько софта писалось на C++ через 8 лет). Однако есть момент. Качественного десктопного софта на C# нет.

C>Продолжайте верить в это.

в ето не надо верить, достаточно просто посмотреть на список установленных программ.
People write code, programming languages don't.
Re[70]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 20.03.09 16:15
Здравствуйте, Хвост, Вы писали:


Х>я говорил о проекте в котором участвовал я, он был на порядок

на порядок меньше ессно.
People write code, programming languages don't.
Re[67]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 16:21
Здравствуйте, criosray, Вы писали:

C>У нас пользователи в госструктурах на компах, которым уже по 2-4 года работают с нашим клиентом на .NET уже больше года в production режиме. Клиент довольно тяжелый: диалоги, графики, отчеты, таблицы, формы — полный комплект. Нареканий на производительность до сих пор не было. "ЧЯДНТ?"


Считаешь, что выделенное -- это "тяжёлый клиент".
Кстати, а данные вы из DB берёте, я надеюсь?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[55]: нет, ну если ты настаиваешь... ;) в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 16:34
Оценка: +1 -1
Здравствуйте, gandjustas, Вы писали:

E>>Нет, ну если ты настаиваешь, что быстрый код ОБЯЗАН БЫТЬ ненадёжным и некрасивым, то да, нет...

G>Если вы изначально занимаетесь быстротой кода, то вряд ли он будет нажедным и красивым. Наоборот — вполне.
Это всего лишь твоё неумение писать быстрый и качественный код...
Мне известны МНОГОЧИСЛЕННЫЕ контрпримеры, так что позволь не поверить твоему голословному утверждению...

G>Я не предлагал C использовать для красивого кода.

Я понимаю. То есть ты предлагал делать быстрый код некрасивой и ненадёжной помойкой?
А зачем? Потому, что С++ освоить не можешь (эта фраза обозначает тоже самое, что и фраза: "С++ слишком сложный") , или какие-то другие причины?

G>Ты как-то очеь интересно говоришь о том что C# позоляет писать хороший код с малыми затратами.

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

G>Когда вместо индусов пишут нормальные программисты код у них получается гораздо лучше и быстрее, чем на С++.

Про "лучше" -- не ясны критерии, про быстрее — не верю.

G>И только там где не хватает производительности может быть использован C.

Ну вот есть такая т. з., что в случае массового потребителя, производительности не хватает практически ВЕЗДЕ. Ну ценят люди скорость...

G>ЗЫ. Ты думаешь на С++ индусы не пишут?

Пишут, конечно, хотя для них уже есть намного более подходящий ХиндиС...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[68]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 20.03.09 16:37
Оценка: :))
Здравствуйте, Erop, Вы писали:

C>>У нас пользователи в госструктурах на компах, которым уже по 2-4 года работают с нашим клиентом на .NET уже больше года в production режиме. Клиент довольно тяжелый: диалоги, графики, отчеты, таблицы, формы — полный комплект. Нареканий на производительность до сих пор не было. "ЧЯДНТ?"


E>Считаешь, что выделенное -- это "тяжёлый клиент".


Да, выделенное это тяжелый интерфейс.

E>Кстати, а данные вы из DB берёте, я надеюсь?


Из БД, вестимо.
Re[56]: нет, ну если ты настаиваешь... ;) в избранное  новое    модер. 
От: criosray 
Дата: 20.03.09 16:39
Здравствуйте, Erop, Вы писали:

G>>И только там где не хватает производительности может быть использован C.

E>Ну вот есть такая т. з., что в случае массового потребителя, производительности не хватает практически ВЕЗДЕ. Ну ценят люди скорость...
Можно поинтересоваться на основании чего был сделан этот вывод?
Re[56]: нет, ну если ты настаиваешь... ;) в избранное  новое    модер. 
От: criosray 
Дата: 20.03.09 16:40
Здравствуйте, Erop, Вы писали:

E>>>Нет, ну если ты настаиваешь, что быстрый код ОБЯЗАН БЫТЬ ненадёжным и некрасивым, то да, нет...

G>>Если вы изначально занимаетесь быстротой кода, то вряд ли он будет нажедным и красивым. Наоборот — вполне.
E>Это всего лишь твоё неумение писать быстрый и качественный код...
E>Мне известны МНОГОЧИСЛЕННЫЕ контрпримеры, так что позволь не поверить твоему голословному утверждению...

Да, кстати, поделитесь. Будет интересно послушать.
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 20.03.09 16:43
Здравствуйте, Erop, Вы писали:
S>>Совершенно верно. И это — единственный способ писать хорошие программы.
E>Это тебе Бог сообщил, или сам БГ?
Меньше выделывайся, больше читай. В статье написано именно про это.

E>Чего? Ты думаешь допереть, что для словаря надо использовать структуру, которая ищет эффективно ему понадобилось бы очень много времени?

Меньше выделывайся. Это модельнй пример. Ясно, что в реальном мире всё будет устроено немножко по-другому. Но ты бы устал читать статью про оптимизацию реальной дотнет программы. Впрочем, неподалеку есть неплохой блогпост — завтра дойду до офиса, кину тебе ссылку.

E>Если бы оно ориентировалось на меня как на потребителя, то 0,01 — 0,03 секунды.

E>Я хотел бы менять ситуацию и сразу видеть варианты в GUI интерфейсе, например...
На всякий случай напомню, что в его случае нужен был вообще ровно один запуск. И он пишет в последней строчке именно об этом: что в другом случае (например, твоем, где есть GUI и необходимость быстро менять варианты). Еще на всякий случай напомню, что интервалы меньше 0.1 секунды ты вообще на глаз не заметишь.

E>Это которая "But I'm not"? Ну да, он действительно не может, потому что действует в рамках индусской парадигмы...

...поверь мне — он может. То, что ты не знаешь еще и английского — не оправдание. Я там рядом поместил перевод. But I'm not означает, что он не пишет realtime GUI.
E>А теперь иди читать моё замечание про то, что если сам себе орбитр, то выиггрывать легко.
То есть ты имеешь наглость полагать, что чувак не смог бы получить из этой программы 0.01 — 0.03 секунды, если бы это потребовалось? Или у тебя есть какие-то иллюзии про то, что самый эффективный способ получить нужное быстродействие — это алгоритм, приведенный в статье?

E>И, кстати, тема связи этой "оптимизации" со случаем, когда мы упираемся в "особенности GC" как-то всё-равно не раскрыта... Это если конечно "But I'm not", не учитывать

Ок, завтра я тебе кину ссылку про учет особенностей GC.

почистил от перехода на личности — Кодт
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[69]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 20.03.09 16:46
Оценка: +2
Здравствуйте, Mamut, Вы писали:

Х>> Качественного десктопного софта на C# нет.


M>С одной стороны виноват тот же С++. Потому что legacy и тот же ворд нет смысла переписывать с нуля

M>С другой стороны — а что такое десктопный софт?

Гуглохром например, и легаси нету и работает на десктопе
Re: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 20.03.09 17:04
Оценка: +1 :)
Здравствуйте, niellune, Вы писали:

N>Но php мне уже мало и он мне порядком надоел, хочется развиваться дальше.


Хорошая мысль. Воплоти ее в жизнь. А то, твои слова выдают в тебе э... как это по мягче сказать? Ну, не компетентность что ли...

Рассуждения напоминают ответ мальчика пяти лет на вопрос кем ты хочешь стать когда повзрослеешь...

Купи себе учебники по C++ и C#. Прочти их. Изучи языки. Потом еще какие-нибудь другие языки изучи (что-нибудь из ФП, например). Когда ты все это сделаешь, то поймешь какую чушь ты тут нес. А на вопрос каким языком пользоваться ты и само тогда ответить можешь.

ЗЫ

И вообще, что это за позиция — устроиться куда-то "на начальную позицию"?
Это значит ты будешь изучать что-то, а тебе за это еще и платить кто-то должен?
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[2]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 20.03.09 17:08
Оценка: :)
Здравствуйте, BulatZiganshin, Вы писали:

BZ>почему он тебе нравится? то, что он красиво выглядит на бумаге, не гарантирует, что тебе понравится на нём программировать реальные большие задачи


Дык вокруг него такой ореол создали, что несколько лет назад плохое слово в сторону дизайна С++ сразу выливалось в анафему высказавшему эту мысль.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[2]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 20.03.09 17:17
Оценка: -1
Здравствуйте, AndrewVK, Вы писали:

AVK>Хороший топик для потенциальных работодателей. Участников холивара можно смело на должности выше сеньора не брать


Кабздец тебе Андрюха. Заложат тебя в Джетбрэйн. Как пить дать заложат.

А если серьезно, то уровень дискуссии действительно просто супер. Плинтус горами покажется.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[70]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Mamuthttp://dmitriid.com/
Дата: 20.03.09 18:00
h> M>С одной стороны виноват тот же С++. Потому что legacy и тот же ворд нет смысла переписывать с нуля
h> M>С другой стороны — а что такое десктопный софт?

h> Гуглохром например, и легаси нету и работает на десктопе


О, кстати. [holywar offtop on] как это так — написан на кроссплатформенном С++, а кроссплатфоренной версии нет, и в ближайшем будущем не предвидится? 0_o [holywar offtop off]

Гуглохром хороший пример нового приложения. Толкьо вот там С++ изначально — куча. Это и вебкит, и V8.
Re[2]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Mamuthttp://dmitriid.com/
Дата: 20.03.09 18:00
VD> Купи себе учебники по C++ и C#. Прочти их. Изучи языки. Потом еще какие-нибудь другие языки изучи (что-нибудь из ФП, например). Когда ты все это сделаешь, то поймешь какую чушь ты тут нес. А на вопрос каким языком пользоваться ты и само тогда ответить можешь.

Просто так, по учебникам, изучить не получится. Надо на каждом из них селать пусть п менькому, пусть для себя, но проекту

*мечтательно* я, когда C# взял в руки, ршил каталог сидюков сделать. На основе XML С гуем. Даже что-то сделал. Потом все забросил, потому что лень в библиотеках было разбираться
Re[29]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: alsemmhttp://sourceforge.net/projects/ferry
Дата: 20.03.09 18:00
Оценка:3 (1) +1 :))) :)
Здравствуйте, gandjustas, Вы писали:

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


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


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


G>>>>Думаете нельзя в C# на стеке данные размещать?

MK>>>Думаю конкретно esil имеет ввиду, что нельзя разместить в стеке произвольные данные.
MK>>>Массивы, например, туда не засунуть, ибо class

MK>>>А вот что имел ввиду minorlogic я, чесс говоря, тоже не понял.

MK>>>Но эт не страшно

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

G>Как будут работать виртуальные методы при размещении объектов на стеке?
После таких вопросов и появляются стереотипы, что С# отупляет

Алексей
Re[3]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 20.03.09 18:04
Оценка: :)
Здравствуйте, Mamut, Вы писали:

M>Просто так, по учебникам, изучить не получится. Надо на каждом из них селать пусть п менькому, пусть для себя, но проекту


(куча мата) ... Да хотя бы начал с учебника. А ведь он начал с вопроса "где найти идиотов которые его возьмут на работу и будут платить ему за обучение".

Само собой, что теория без практики — деньги на ветер.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[3]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: WolfHound модератор 
Дата: 20.03.09 18:13
Оценка: +2
Здравствуйте, VladD2, Вы писали:

VD>А если серьезно, то уровень дискуссии действительно просто супер. Плинтус горами покажется.

Угу. Люди не знающие .НЕТ против людей не знающих С++.
Смешно читать и тех и других.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[71]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 20.03.09 18:31
Оценка: +1
Здравствуйте, Mamut, Вы писали:

h>> Гуглохром например, и легаси нету и работает на десктопе


M>О, кстати. [holywar offtop on] как это так — написан на кроссплатформенном С++, а кроссплатфоренной версии нет, и в ближайшем будущем не предвидится? 0_o [holywar offtop off]


Дык не под QT написан то А если серьезно, то МакОС и Линукс версии сейчас готовятся.

M>Гуглохром хороший пример нового приложения. Толкьо вот там С++ изначально — куча. Это и вебкит, и V8.


Ну и что? Никого же не смущает использование в .Net софте нативно Трайдента
Re[4]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 20.03.09 18:31
Оценка: :)
Здравствуйте, WolfHound, Вы писали:

VD>>А если серьезно, то уровень дискуссии действительно просто супер. Плинтус горами покажется.

WH>Угу. Люди не знающие .НЕТ против людей не знающих С++.

И дельфист, не знающий ни того, ни другого
Re[69]: ХиндиС -- мощнее любого компа!!! ;))) в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 19:10
Оценка: +2 :))
Здравствуйте, criosray, Вы писали:

E>>Считаешь, что выделенное -- это "тяжёлый клиент".

C>Да, выделенное это тяжелый интерфейс.
Ну это ты продолжаешь "делать не так"... , то есть упорствовать в заблуждениях...
С какой поры построить график или показать диалог стало "тяжёлым интерфейсом"? А какой интерфейс, тогда, лёгкий?
Тебя не смущает, что показать график, таблицу, форму/диалог и т. п. комп, вроде ZX Spectrum мог МГНОВЕННО? То есть человек не мог заметить время в течении которого этот интерфейс работал? Тебе не кажется, что мощь компов с тех пор настолько возросла, что говорить о том, что "диалоговое окно, показ таблички, списка и графика" -- это "тяжёлый интерфейс" -- СМЕШНО.
Тяжёлый интерфейс -- это 3D отрисовка в кваке!

E>>Кстати, а данные вы из DB берёте, я надеюсь?

C>Из БД, вестимо.
Ну вот видишь, сделать запрос в БД, перелопатить и подготовить данные -- фигня вопрос, в в диалоге их показать -- тяжёлый интерфейс?..

Воистину!!! ХиндиС -- мощнее любого компа!!! В смысле как бы не был мощен ваш комп, ХиндиС тормозит ещё мощнее!!!
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[57]: нет, ну если ты настаиваешь... ;) в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 19:16
Здравствуйте, criosray, Вы писали:

C>Да, кстати, поделитесь. Будет интересно послушать.

Чем? Тебе интересны примеры быстрого кода на С++?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[29]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 19:28
Здравствуйте, esil, Вы писали:


E>Ну вот такой довольно типичный для С++ пример разве разницу не объясняет:


E>
E>class some_abstract_class {
E>public:
E>    some_abstract_class() {}
E>    virtual ~some_abstract_class() {}

E>    virtual void some_virtual_function() = 0;
E>};

E>void some_function_that_uses_abstract_class(some_abstract_class * cls) {
    cls->>some_virtual_function();
E>}

E>class some_abstract_class_implementation: public some_abstract_class {
E>public:
E>    some_abstract_class_implementation() {}
E>    virtual ~some_abstract_class_implementation() {}

E>    virtual void some_virtual_function() {
E>    }
E>};

E>void some_function_usage() {
E>    some_abstract_class_implementation impl;
E>    some_function_that_uses_abstract_class(&impl);
E>}
E>


E>?


Круто, а фабричный метод так изобразите?
ЗЫ. Передача указателя на стек до добра не доводит, большенство уязвимостей в ПО так и получаются.
Re[2]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 19:47
Здравствуйте, VladD2, Вы писали:

VD>И вообще, что это за позиция — устроиться куда-то "на начальную позицию"?

VD>Это значит ты будешь изучать что-то, а тебе за это еще и платить кто-то должен?

Да, так бывает. И не только в ПО. И не только сейчас, но и раньше было.
То, что ты не умеешь искать такие позиции, всего лишь говорит что-то о тебе, а не об окружающем мире...
Можешь подумать над значением слова "подмастерье"...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[66]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 19:47
Здравствуйте, Хвост, Вы писали:

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


G>>
G>>var stackArrayOfStruct = stackalloc SomeStruct[10];
G>>


Х>хы, ансейф, вперёд к С++?


Х>просто вот когда дело доходит до новых апи — здравствуй интероп с нейтивом

О да, это просто нереальная сложность, написать DllImport наверное непостижимая задача.

Х>хочешь массив на стеке — здравствуй ансейф,

Думаешь он часто нужен?

Х>тот же пэйнт.нет афаир просто насквозь пропитан ансейфом

От силы 5% ансейфа.

Х>зачем тогда сишарп?

Все что ты назвал никак не мешает использовать всю мощь сишарпа.

Х>хорошие вещи делаются только в нейтиве, вот тот же пример с выводом строк, для такой забавы как флейм на рсдн и стримы с регекспами не грех использовать, а вот если бы ето была программа промышленных маштабов — скажим анализатор логов, то здравствуй мем-маппед файлы да стейт-машины с отсутствием аллокаций, и писать етона си++ без ifstream и multiset, а не на сишарпе с gc и аллокацией на каждый чих.

А доказательсва будут? Ты еще не заметил что GC работает быстре стандартного аллокатора?
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 19:50
Здравствуйте, esil, Вы писали:

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


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


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


BZ>>>>читай внимательно. в языках с gc гарантия — на 3x, можно и меньше. в C++ — гарантий никаких, расход может быть каким угодно прсто потому что память усеяна мелкими дырками


NBN>>>C++ очень универсальный язык Он позволяет писать так как тебе нужно. В частности обеспечить все гарантии по чему хочешь, чем я, кстати, на днях воспользовался.

G>>Я вот тут на днях написал на C# библиотеку для работы с конечными автоматами. Она генерирует в рантайме код автомата по описанию, а потом использует его.
G>>На C++ такое получится?

E>И что же из себя представляет описание?

XML или код.

E>И что из этого описания генерируется?

Вложенные ифы.

E>И зачем это нужно в рантайм, почему нельзя в compile-time?

Пчто в рантайме задавать без перезапуска.
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 20:08
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>Круто, а фабричный метод так изобразите?

А зачем в данном случае фабричный метод?..
Но вообще-то возможно и изображу, правда тут надо бы уточнить, что ты понимаешь под "фабричный метод", так как может и изображу, а может и нет...

G>ЗЫ. Передача указателя на стек до добра не доводит, большенство уязвимостей в ПО так и получаются.

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

Про то, что в больших программах 99% кода достаточно глубоко запрятаны для того, чтобы не смочь породить уязвимость, я и не говорю..
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[69]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: alsemmhttp://sourceforge.net/projects/ferry
Дата: 20.03.09 20:14
Оценка: +1 :)
Здравствуйте, criosray, Вы писали:

C>Вы глубоко заблуждаетесь. Лучший тому пример — Microsoft Blend, и AutoCAD, последних версий.

Про AutoCAD это еще кто заблуждается:

Using the ActiveX® (COM Automation) interface in AutoCAD Architecture software, you can build applications with a variety of programming technologies and environments including Microsoft® Visual C++®, Visual Basic® (VB), Delphi, and Java. AutoCAD Architecture extends the AutoCAD ActiveX interface to provide direct access to most of its custom objects.

Being based on AutoCAD, AutoCAD Architecture also includes Visual Basic for Applications (VBA), the most popular programming environment, and Visual LISP®.

When developing object oriented C++ applications for AutoCAD Architecture, you'll need to work with both the AutoCAD ObjectARX® SDK and the Object Modeling Framework (OMF) for AutoCAD Architecture. Designed for use by professional programmers to develop the fastest, most efficient, and most compact applications for AutoCAD, ObjectARX and the OMF provide the highest performance applications for AutoCAD Architecture, and an ideal development environment.

In 2007, AutoCAD Architecture's .NET interface has been expanded with many classes previously only supported through OMF and C++ now accessible to all .NET supporting languages. Now VB and C# developers can access most of the power of OMF.

http://usa.autodesk.com/adsk/servlet/index?siteID=123112&id=3377116

Внутри AutoCAD как был C++ + MFC (AutoCAD200, для него сам расширения писал), так и остался. Для тех кто сомневается, пост из AutoCAD форума:

maybe you are compiling with the debug version of the MFC libraries. You can check the project configuration properties and see what you have set in C/C++ -> Code Building -> Runtime Library. Here you have to set the value "DLL Multithread (/MD)" either for the debug that for the release configuration. This is because Autocad use only the release version of MFC.

http://discussion.autodesk.com/forums/thread.jspa?messageID=6137033&#6137033

Справедливости ради надо сказать, что пост там про AutoCAD2008. Но вряд-ли AutoCAD2009 что-то изменилось кардинально.

Так что AutoCAD из списка С# приложений вычеркивайте

Алексей
Re[66]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 20:22
Оценка: +1
Здравствуйте, Хвост, Вы писали:

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


MK>>Здравствуйте, Хвост, Вы писали:


Х>>>потому что я был уверен что struct в C# ето только данные и все операции с ним аля положить в массив и вызвать метод происходят только в его боксовом представлении

MK>>Угу. Еще ты был уверен про уровень
Автор: Хвост
Дата: 20.03.09
разработчиков .Net.

MK>>Что теперь мешает и мне написать подобный пост про тебя?
Х>к тому же если ты проследишь начало темы про структуры, то она была о размещении их в массиве, и тут без ансейфа вариант действительно только один — боксинг.
Если нужно на стеке то почему бы не использовать ансейф?
Ансейф не означает отказ от возможностей шарпа и не объявляет о бажном коде. Это просто код где потенциально могут возникнуть ошибки, на C++ например вся программа такая, и ниче.

Х>C# (особенно в версии 3.5) ето очень мощный язык, но для приложений требующих производительности, малой затраты ресурсов, быстрой реакции интерфейса ето просто моветон.

Это каких таких приложений? И причем тут интерфейс? Вы скорость полета WPF видели? Очень рекомендую посмотреть доклад PC46 c PDC2008, повторите такое же на С++ тогда вам поверят.

Х>Дотнетчики же говорят "ааа, да ты чего, купи 4 ядра, возьми 16 гб" меня просто умиляют

Да ну, ссылку кините?
Как раз большенство софта работает на обычных современных компах, с парой гигов и максимум двумя ядрами.
Это только на вопли С++ников, что оно кушает много памяти, так отвечают.

Х>вы поймите, что достойная производительность ето дополнительный функционал, ето когда спеллчекер подчёркивает красным не через две секунды после набора слова а сразу, ето когда в CAD'ах скролл рабочей области работает плавно, ето когда скриптовый google docs интерфейс не лагает, ето когда ты можешь в корелдро видеть тридцать слоёв одновременно а не пять, или когда диаграмму в таблице можно увидеть не только в плоском виде а в 3д и повращать, т.е. ещё раз, дополнительные ресурсы — дополнительный функционал.

А вы можете показать где .NET реально тормозит, кроме убогих поделок говнокодеров?
Убогие поделки и на С++ есть.

Х>Вся ета дотнетчина на десктопах ето от бедности, когда нет денег нанять высокопрофессиональных программистов на С++ чтобы сделать проект и планка качества невысока, сойдёт и сишарп. Ентерпрайз лично у меня никогда не ассоциировался с качественным кодом, имхо там главная цель — лишь бы правильно работало, а уж быстро ли, медленно ли, интерфейс кривой или прямой — ето уже волнует в пятую очередь.

А что есть качество?

Х>Что насчёт дотнета на серверах — я только за, там дотнет ето просто клей, логика, вся тяжёлая работа лежит на сиквел-серверах + если надо какие-либо нейтив компоненты для обработки чего-нить быстрого (звук/картинки/видео). Заменить слово C# например на Python и ничего не поменяется, абсолютно. C# это клей, полный аналог VB конца 90-х по своему назначению, и плз, не надо его пихать в десктопы, точнее у вас ничего не выйдет, т.к. вы десктопы на C# не пишете, если вы разумны или у вас разумный руководитель.

Это какая трава так торкает?

Вы вообще-то не завбывайте что объем программ пишущихся под дексктопы в разы меньше объема enterprise и web софта.
Re[58]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 20:25
Здравствуйте, Erop, Вы писали:

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


G>>Выразительность языка заключается не в возможности решить задачу, в читаемости, поддерживаемости и расширяемости этого решения. (это упрощенно)


E>Если я верно понял, тебе хочется уметь проверять есть ли в строке не менее трёх слов подряд, упорядоченных по алфавиту?

E>Так? IMHO, это просто, понятно и поддерживаемо записывается на ЛЮБОМ АЛГОРИТМИЧЕСКОМ ЯЗЫКЕ...
Ну тогда решение на BF и Delphi в студию.

E>Ну, во всяком случае теми, кто умеет программировать...

Разница познается в сравнении.
Re[70]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 20.03.09 20:27
Оценка: +1 :)
Здравствуйте, alsemm, Вы писали:

C>>Вы глубоко заблуждаетесь. Лучший тому пример — Microsoft Blend, и AutoCAD, последних версий.

A>Про AutoCAD это еще кто заблуждается:

Интерфейс AutoCAD 2009 написан на WPF (.NET). Не так давно обсуждалось.

Это к слову о "пластилиновости интерфейсов дотнет", как опровержение. И, кстати, для С++ нет аналогов WPF. Так что будущее десктоп софта под Windows таки за дотнет.
Re[70]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 20:29
Здравствуйте, Хвост, Вы писали:

C>>2 секунды на форму? Дело точно не в .NET.

Х>а может и в .NET, я не профайлил, знаете почему? потому что nobody care
Вот она — истина.
Во всем софте так — или есть проблемы и они исправляются (иначе конкуретны выдавят),
или эти проблемы никого не волнуют, значит это и не проблемы даже.

Быстродействие софта мало кого волнует, лишь бы visual feedback был адекватный.
Re[56]: нет, ну если ты настаиваешь... ;) в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 20:43
Здравствуйте, Erop, Вы писали:

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


E>>>Нет, ну если ты настаиваешь, что быстрый код ОБЯЗАН БЫТЬ ненадёжным и некрасивым, то да, нет...

G>>Если вы изначально занимаетесь быстротой кода, то вряд ли он будет нажедным и красивым. Наоборот — вполне.
E>Это всего лишь твоё неумение писать быстрый и качественный код...
С чего ты взял?

E>Мне известны МНОГОЧИСЛЕННЫЕ контрпримеры, так что позволь не поверить твоему голословному утверждению...

Уууу, а сколько мне известно примеров когда наступала попа из-за преждевременной оптимизации и раннего проектирования структур данных...
И когда последний раз меня пытались поставить на путь проектирования структур я долго капал на мозг начальству что это неправильно.
В итоге все работало быстрее, чем предполагалось.

G>>Я не предлагал C использовать для красивого кода.

E>Я понимаю. То есть ты предлагал делать быстрый код некрасивой и ненадёжной помойкой?
Быстры и красивый быввает очень редко. Это он может казаться красивым пока не надро какую-то мелочь поменять.

E>А зачем? Потому, что С++ освоить не можешь (эта фраза обозначает тоже самое, что и фраза: "С++ слишком сложный") , или какие-то другие причины?

С чего ты взял что я не знаю С++?

G>>Ты как-то очеь интересно говоришь о том что C# позоляет писать хороший код с малыми затратами.

E>Не хороший, а приемлемый для индусов... Тормозной и прожорливый по памяти А для "нагруженных частей" С -- так у тебя ведь выходит?
Приемлимый для индуксов и хорошый для нормальных программистов.
Ну ты достал, вот покажи где .NET тормозной?
Я модуль на C использовал там где нужна была математика, решил не писат на C# и взять готовый код и слкга допилить под свои нужды.
А "нагруженные части" — те которые обрабатывают большой объем информации в единицу времени — для них C# подходит гораздо лучше.

G>>Когда вместо индусов пишут нормальные программисты код у них получается гораздо лучше и быстрее, чем на С++.

E>Про "лучше" -- не ясны критерии, про быстрее — не верю.
Меньше ошибок, меньше кода, проще модифицировать.
Насчет быстрее можешь не верить, но современные языки спокойно сокращают в несколько раз время разработи по сравнению с C++.

G>>И только там где не хватает производительности может быть использован C.

E>Ну вот есть такая т. з., что в случае массового потребителя, производительности не хватает практически ВЕЗДЕ. Ну ценят люди скорость...
Да ну, а ты не слышал что процессор настолького компа в среднем загружен на 5%, а сервера — на 20%
На C имеет смысл писать только математику, обработка больших объемов данных гораздо лучше пишется на .NET.
Re[59]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 20:43
Здравствуйте, gandjustas, Вы писали:

G>Ну тогда решение на BF и Delphi в студию.

1) Я не считаю BF, asm, а так же и язык машины Тбюринга алгоритмическими...
2) Delphi я не помню совсем, но немного помню ещё PASCAL, наверное. Во всяком случае недавно что-то на нём правил. Но я пока не понял задачу. Уточни таки, а?
Хотя мне проще было бы на C/С++, конечно написать...

E>>Ну, во всяком случае теми, кто умеет программировать...

G>Разница познается в сравнении.

IMHO, разницы принципиальной нет. Хотя, возможно, я не понял задачу.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[70]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 20:44
Оценка: :)
Здравствуйте, hattab, Вы писали:

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


Х>>> Качественного десктопного софта на C# нет.


M>>С одной стороны виноват тот же С++. Потому что legacy и тот же ворд нет смысла переписывать с нуля

M>>С другой стороны — а что такое десктопный софт?

H>Гуглохром например, и легаси нету и работает на десктопе


У гугла столько ресурсов, что они могуть ОС в машинных кодах написать.
И если им будет надо — напишут.
Re[31]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 20:53
Оценка: -3 :))) :)
Здравствуйте, Erop, Вы писали:

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


G>>Круто, а фабричный метод так изобразите?

E>А зачем в данном случае фабричный метод?..
Действительно, ООП там толком нет, только пародия на него.

E>Но вообще-то возможно и изображу, правда тут надо бы уточнить, что ты понимаешь под "фабричный метод", так как может и изображу, а может и нет...

http://ru.wikipedia.org/wiki/Фабричный_метод_(шаблон_проектирования)

G>>ЗЫ. Передача указателя на стек до добра не доводит, большенство уязвимостей в ПО так и получаются.

E>А как можно было бы такой уязвимостью воспользоваться? Ну, хотя бы, гипотетически? Это же не буфер, а объект на стеке.
Я не говорю что это уязвимость. Это причина появления уязвимостей.
Например есть убрать возможность передавать указатель на стек (или сделать такую передачу безопасной), то многих уязвимостей переполнения буфера просто не появится. В managed языках как раз такой возможности нету.
И в C++ есть способ безопасной передачи указателя на стек — ссылки называется. Только на ссылках вообще ООП не сделаешь.

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

Re[70]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 20:53
Здравствуйте, alsemm, Вы писали:

A>Справедливости ради надо сказать, что пост там про AutoCAD2008. Но вряд-ли AutoCAD2009 что-то изменилось кардинально.

A>Так что AutoCAD из списка С# приложений вычеркивайте
Офигеть
Re[71]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: alsemmhttp://sourceforge.net/projects/ferry
Дата: 20.03.09 20:54
Оценка: +1 :)
Здравствуйте, criosray, Вы писали:

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


C>>>Вы глубоко заблуждаетесь. Лучший тому пример — Microsoft Blend, и AutoCAD, последних версий.

A>>Про AutoCAD это еще кто заблуждается:

C>Интерфейс AutoCAD 2009 написан на WPF (.NET). Не так давно обсуждалось.

Почитал ветку. Ну так и правильно, GUI на С++ писать/поддерживать — это overkill, кто бы спорил. Но потроха-то там на c++ как были, так и остались. Из этого следует, то что тут неоднократно утверждалось — каждой задаче свой инструмент. GUI — С#, core — С++

Алексей
Re[71]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: ambel-vlad 
Дата: 20.03.09 20:54
Hi criosray

C>Так что будущее десктоп софта под Windows таки за дотнет.


Где-то это я уже слышал.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[72]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 21:02
Оценка: :))
Здравствуйте, alsemm, Вы писали:

A>GUI — С#, core — С++

надо разработчикам blend это рассказать, а то они не знают.

А что такое core ?
Re[4]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 20.03.09 21:05
Оценка: +1
Здравствуйте, WolfHound, Вы писали:

VD>>А если серьезно, то уровень дискуссии действительно просто супер. Плинтус горами покажется.

WH>Угу. Люди не знающие .НЕТ против людей не знающих С++.
WH>Смешно читать и тех и других.

Не только, люди ещё специализируются на разных направлениях.
Re[32]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 21:14
Здравствуйте, gandjustas, Вы писали:

G>Действительно, ООП там толком нет, только пародия на него.

По существу замечание, однако...
Вообще-то на ООП свет клином не сошёлся. И "настоящее ООП" где-то или "пародия на него" обычно не важно...

E>>Но вообще-то возможно и изображу, правда тут надо бы уточнить, что ты понимаешь под "фабричный метод", так как может и изображу, а может и нет...

G>http://ru.wikipedia.org/wiki/Фабричный_метод_(шаблон_проектирования)
Спасибо, я раньше не знал какого рода документацией пользуются в своей работе ХиндиСишники...
Смотри, такой вот код:
struct IOder {
    virtual bool IsInGoodOrder( T left, T right ) const = 0;
    virtual bool IsEqu( T left, T right ) const = 0;
};

class SortBySimilarity : public IOder {
public:
    bool IsInGoodOrder( T left, T right ) const { /*тут реализация*/ }
    bool IsEqu( T left, T right ) const { /*тут реализация*/ }

    //  фабричные методы
    static SortBySimilarity CreateBySimilarityCasesensitive( const T& pattern ) { /*тут реализация*/ }
    static SortBySimilarity CreateBySimilarityCaseinsensitive( const T& pattern ) { /*тут реализация*/ }
}

// использование
void foo( T pattern )
{
    const IOder& order = SortBySimilarity::CreateBySimilarityCasesensitive( pattern );
    data.SortBy( &order );
}
это "фабричный метод" или нет?

G>И в C++ есть способ безопасной передачи указателя на стек — ссылки называется. Только на ссылках вообще ООП не сделаешь.

Выше глянь, повнимательнее..
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[49]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: esil 
Дата: 20.03.09 21:14
Оценка:1 (1) +2
Здравствуйте, gandjustas, Вы писали:

G>Стоит учесть что каждый проход GC в программе на C# очищает вс первое поколение в таком случа и двигание объектов не происходит, то немного исправляет результат в пользу C#, но даже если бы код на C# работал в 2 раза медленее, то он оказался бы в 3 раза быстрее стандартного аллокатора для C++.


И вот таки да, предположим у нас получилость так, что из-за частых выделений/освобождений памяти наш продукт на С++ работает недопустимо медленно. Что можно с этим сделать? Для начала собрать профиль размеров выделяемых блоков, который нам покажет, что большинство выделяемых блоков имеют размер 256 байт. А дальше можно сделать например так:

#include <windows.h>
#include <tchar.h>
#include <stdio.h>
#include <assert.h>

const size_t block_size = 256;
const int pool_size = 1000;

char * pool;
bool * allocated;

void * operator new[](size_t size) {
    if(size > block_size)
        return malloc(size);

    if(!pool) {
        pool = (char*)malloc(pool_size * block_size);
        allocated = (bool*)malloc(pool_size * sizeof(allocated[0]));
        memset(allocated, 0, pool_size * sizeof(allocated[0]));
    }

    for(int i = 0; i < pool_size; ++i) {
        if(!allocated[i]) {
            allocated[i] = true;
            return pool + block_size * i;
        }
    }

    return malloc(size);
}

void operator delete[](void * mem) {
    char * mem_ch = (char*) mem;

    if(mem_ch < pool || mem_ch >= (pool + pool_size * block_size))
        return free(mem);

    size_t diff = mem_ch - pool;
    assert(diff % block_size == 0);
    int block_num = diff / block_size;
    assert(block_num < pool_size);
    allocated[block_num] = false;
}

int _tmain(int argc, _TCHAR* argv[])
{
    DWORD ticks = GetTickCount();

    for(int i=0; i<1000000; i++)
    {        
        int* arr = new int[64];
        delete [] arr;
    }

    printf("%d", GetTickCount() - ticks);
    getchar();
    return 0;
}


Запустите это наколеночное решение и прослезитесь. И всё. Пользователи довольны, менеджеры счастливы, программисты радуются, фанатики С++ бъются в экстазе.

Что Вы будете делать с продуктом на С#? Судорожно тыкать в разных местах gc.collect? Срочно переписывать куски кода с использованием структур?

P. S. Я понимаю, что наверняка любители писать свои менеджеры памяти сейчас найдут в моём коде, который был написан за 20 минут, и не тестировался на реальных приложениях, тысячи багов, косяков, неоптимальностей и т. д. Суть этого примера в том, чтобы показать, что есть пути решения проблемы, которые можно успешно применять.
Re[71]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 21:15
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>У гугла столько ресурсов, что они могуть ОС в машинных кодах написать.

G>И если им будет надо — напишут.

Не понимаю я вот этого аргумента! Если они такие лохи, что всё делают неверно и неэффективно, то почему у них всё так хорошо?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[57]: нет, ну если ты настаиваешь... ;) в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 21:26
Здравствуйте, gandjustas, Вы писали:

G>>>Если вы изначально занимаетесь быстротой кода, то вряд ли он будет нажедным и красивым. Наоборот — вполне.

E>>Это всего лишь твоё неумение писать быстрый и качественный код...
G>С чего ты взял?
С того, что знаю примеры быстрого кода, который сразу так и разрабатывался, как быстрый...

E>>Мне известны МНОГОЧИСЛЕННЫЕ контрпримеры, так что позволь не поверить твоему голословному утверждению...

G>Уууу, а сколько мне известно примеров когда наступала попа из-за преждевременной оптимизации и раннего проектирования структур данных...
Не понимаю. Возможно проектирование выполнялось некачественно?

G>Быстры и красивый быввает очень редко. Это он может казаться красивым пока не надо какую-то мелочь поменять.

Почему это? Почему быстрый код нельзя писать НОРМАЛЬНО? Читабельно, поддерживаемо, без ребусов?..

G>С чего ты взял что я не знаю С++?

Я не думаю, что ты совсем не знаешь. Но ты тут оговорился, что якобы объект на стеке не может иметь виртуальных функций, но может быть ты именно оговорился, или это вообще не ты был?
В любом случае это не важно. Я не утверждал, что ты не знаешь, я спрашивал, что тебя заставляет выбирать С вместо С++, кроме его сложности (IMHO, если ты говоришь, что С++ сложен, то это значит, что ты его знаешь недостаточно, чтобы писать на нём хороший код)

G>А "нагруженные части" — те которые обрабатывают большой объем информации в единицу времени — для них C# подходит гораздо лучше.

Пока не нужна память и скорость -- да. Например для GUI ХиндиС -- это просто находка!
G>Насчет быстрее можешь не верить, но современные языки спокойно сокращают в несколько раз время разработи по сравнению с C++.
А! Это было не про время исполнения, а про время разработки? Про время разработки верю конечно. Но только в том случае, если задача органична для C#. А если нет, то не верю.
Почти любая оболочка, например, органична. Многое из вебства поверх DB органично, ну и т. д.
А там AI, например, нифига не органичен...

G>>>И только там где не хватает производительности может быть использован C.

E>>Ну вот есть такая т. з., что в случае массового потребителя, производительности не хватает практически ВЕЗДЕ. Ну ценят люди скорость...

G>Да ну, а ты не слышал что процессор настолького компа в среднем загружен на 5%, а сервера — на 20%

G>На C имеет смысл писать только математику, обработка больших объемов данных гораздо лучше пишется на .NET.
Я думаю, что в твоих задачах обработка больших объёмов совсем лучше всего выполнятся СУБД... В на C# хорошо пишется интерфейс к этой самой СУБД...
Ты видимо не встречал пока других сложных задач, где нужна таки выч. мощь, кроме того, что ты называешь словом "математика"
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: esil 
Дата: 20.03.09 21:35
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>Круто, а фабричный метод так изобразите?

G>ЗЫ. Передача указателя на стек до добра не доводит, большенство уязвимостей в ПО так и получаются.

Я заню, что круто ))
Нет, фабричный метод так не изображу. Только не надо говорить "ну тогда и нет никакого ООП на стэке". Естественно одним стэком не обойдёшься. Но стэк позволяет убрать очень много выделений памяти.

P. S. Указатель не был заменён на ссылку по соображениям наглядности для участвующих в дискуссии, которые быть может не сильно разбираются в С++.
Re[72]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Mamuthttp://dmitriid.com/
Дата: 20.03.09 21:40
h> А если серьезно, то МакОС и Линукс версии сейчас готовятся.

Ну, про это я знаю

h> M>Гуглохром хороший пример нового приложения. Толкьо вот там С++ изначально — куча. Это и вебкит, и V8.

h> Ну и что? Никого же не смущает использование в .Net софте нативно Трайдента

Я пас Не знаю
Re[71]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 20.03.09 21:41
Здравствуйте, gandjustas, Вы писали:

M>>>С одной стороны виноват тот же С++. Потому что legacy и тот же ворд нет смысла переписывать с нуля

M>>>С другой стороны — а что такое десктопный софт?

H>>Гуглохром например, и легаси нету и работает на десктопе


G>У гугла столько ресурсов, что они могуть ОС в машинных кодах написать.

G>И если им будет надо — напишут.

У МС ресурсов не меньше, чего же легаси свое не перепишут на шарпе? Глядишь и сэкономят еще
Re[73]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 21:41
Здравствуйте, gandjustas, Вы писали:

G>А что такое core ?

Это реализация функционала проги, отличного от GUI или какого-то ещё UI.

Скажем в твоих задачах core обычно на СУБД какой-то реализовано, а в одной из часть core была на C...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[73]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: alsemmhttp://sourceforge.net/projects/ferry
Дата: 20.03.09 21:49
Здравствуйте, gandjustas, Вы писали:

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


A>>GUI — С#, core — С++

G>надо разработчикам blend это рассказать, а то они не знают.

G>А что такое core ?

В CAD системах — это modeling kernel.

Обзор modeling kernel: http://me.kaist.ac.kr/upload/course/MAE548/20070312_IntroKernels(revised).ppt
13 слайд — языки на которых они написаны — C++/C+/Tcl.

В AutoCAD раньше использовали ACIS, потом его, похоже что, форкнули и сделали свой движок для моделирования. Что сейчас используют — не понятно. Тут написано про это — http://discussion.autodesk.com/forums/message.jspa?messageID=5236836

Алексей
Re[50]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 21:53
Здравствуйте, esil, Вы писали:

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


G>>Стоит учесть что каждый проход GC в программе на C# очищает вс первое поколение в таком случа и двигание объектов не происходит, то немного исправляет результат в пользу C#, но даже если бы код на C# работал в 2 раза медленее, то он оказался бы в 3 раза быстрее стандартного аллокатора для C++.


E>И вот таки да, предположим у нас получилость так, что из-за частых выделений/освобождений памяти наш продукт на С++ работает недопустимо медленно. Что можно с этим сделать? Для начала собрать профиль размеров выделяемых блоков, который нам покажет, что большинство выделяемых блоков имеют размер 256 байт. А дальше можно сделать например так:


E>
E>//поскипано
E>


Только делать так не нужно. В первую очередь стоит заняться алгоритмический оптимизацией или даже архитектурной, а не кидаться писать кастомный аллокатор.
Причем этот подход работает для любых языков.
Re[33]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 21:53
Здравствуйте, Erop, Вы писали:

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


G>>Действительно, ООП там толком нет, только пародия на него.

E>По существу замечание, однако...
E>Вообще-то на ООП свет клином не сошёлся. И "настоящее ООП" где-то или "пародия на него" обычно не важно...
Так это не я начал про супер-мега ооп с объектами на стеке.

E>>>Но вообще-то возможно и изображу, правда тут надо бы уточнить, что ты понимаешь под "фабричный метод", так как может и изображу, а может и нет...

G>>http://ru.wikipedia.org/wiki/Фабричный_метод_(шаблон_проектирования)
E>Спасибо, я раньше не знал какого рода документацией пользуются в своей работе ХиндиСишники...

А вы какой пользуетесь?
Это первая ссылка в гугле по словосочетанию "фабричный метод".

E>Смотри, такой вот код:
E>struct IOder {
E>    virtual bool IsInGoodOrder( T left, T right ) const = 0;
E>    virtual bool IsEqu( T left, T right ) const = 0;
E>};

E>class SortBySimilarity : public IOder {
E>public:
E>    bool IsInGoodOrder( T left, T right ) const { /*тут реализация*/ }
E>    bool IsEqu( T left, T right ) const { /*тут реализация*/ }

E>    //  фабричные методы
E>    static SortBySimilarity CreateBySimilarityCasesensitive( const T& pattern ) { /*тут реализация*/ }
E>    static SortBySimilarity CreateBySimilarityCaseinsensitive( const T& pattern ) { /*тут реализация*/ }
E>}

E>// использование
E>void foo( T pattern )
E>{
E>    const IOder& order = SortBySimilarity::CreateBySimilarityCasesensitive( pattern );
E>    data.SortBy( &order );
E>}
E>
это "фабричный метод" или нет?

Не-а.
Re[5]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 20.03.09 21:54
Здравствуйте, NikeByNike, Вы писали:

VD>>>А если серьезно, то уровень дискуссии действительно просто супер. Плинтус горами покажется.

WH>>Угу. Люди не знающие .НЕТ против людей не знающих С++.
WH>>Смешно читать и тех и других.

NBN>Не только, люди ещё специализируются на разных направлениях...


... незнающие ни того, ни другого но спорящие об обоих.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[72]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 21:56
Оценка: :)
Здравствуйте, Erop, Вы писали:

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


G>>У гугла столько ресурсов, что они могуть ОС в машинных кодах написать.

G>>И если им будет надо — напишут.

E>Не понимаю я вот этого аргумента! Если они такие лохи, что всё делают неверно и неэффективно, то почему у них всё так хорошо?


Гуглу гораздо сложнее будет нанять шатат разработчиков на Java наример, чем написать что-то на C++.
Исторические причины в крупных организациях играют немалую роль.
Re[3]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 20.03.09 21:58
Здравствуйте, Erop, Вы писали:

E>Да, так бывает. И не только в ПО. И не только сейчас, но и раньше было.

E>То, что ты не умеешь искать такие позиции, всего лишь говорит что-то о тебе, а не об окружающем мире...
E>Можешь подумать над значением слова "подмастерье"...

Ой, я же забыл. Мы же о сапожниках говорим. Вот только ученикам зарплату не платили. Им максимум еду давали.
Почему всем будет смешно, если им расскажут о подмастерьи физика, химика или врача. Так почему же подмастерья программистов обсуждаются серьезно?
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[33]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: esil 
Дата: 20.03.09 21:59
Здравствуйте, Erop, Вы писали:

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


G>>Действительно, ООП там толком нет, только пародия на него.

E>По существу замечание, однако...
E>Вообще-то на ООП свет клином не сошёлся. И "настоящее ООП" где-то или "пародия на него" обычно не важно...

E>>>Но вообще-то возможно и изображу, правда тут надо бы уточнить, что ты понимаешь под "фабричный метод", так как может и изображу, а может и нет...

G>>http://ru.wikipedia.org/wiki/Фабричный_метод_(шаблон_проектирования)
E>Спасибо, я раньше не знал какого рода документацией пользуются в своей работе ХиндиСишники...
E>Смотри, такой вот код:
E>struct IOder {
E>    virtual bool IsInGoodOrder( T left, T right ) const = 0;
E>    virtual bool IsEqu( T left, T right ) const = 0;
E>};

E>class SortBySimilarity : public IOder {
E>public:
E>    bool IsInGoodOrder( T left, T right ) const { /*тут реализация*/ }
E>    bool IsEqu( T left, T right ) const { /*тут реализация*/ }

E>    //  фабричные методы
E>    static SortBySimilarity CreateBySimilarityCasesensitive( const T& pattern ) { /*тут реализация*/ }
E>    static SortBySimilarity CreateBySimilarityCaseinsensitive( const T& pattern ) { /*тут реализация*/ }
E>}

E>// использование
E>void foo( T pattern )
E>{
E>    const IOder& order = SortBySimilarity::CreateBySimilarityCasesensitive( pattern );
E>    data.SortBy( &order );
E>}
E>
это "фабричный метод" или нет?


G>>И в C++ есть способ безопасной передачи указателя на стек — ссылки называется. Только на ссылках вообще ООП не сделаешь.

E>Выше глянь, повнимательнее..

А тут случаем баг не закрался?
CreateBySimilarityCasesensitive возвращает временный объект, на который потом берётся ссылка.
Re[34]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: NikeByNike 
Дата: 20.03.09 22:04
Оценка:5 (2) +1
Здравствуйте, esil, Вы писали:

E>А тут случаем баг не закрался?

E>CreateBySimilarityCasesensitive возвращает временный объект, на который потом берётся ссылка.
Нет, временный объект просуществует до конца видимости ссылки. С указателем такая фишка не сработает.
Re[34]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 22:04
Здравствуйте, gandjustas, Вы писали:

G>Так это не я начал про супер-мега ооп с объектами на стеке.

Зачем "супер" и "мега"? Может быть, например, фильтр к какому-нибудь запросу к словарю...
Может быть техника, похожая на ET (шаблонные выражения, не знаю, как по-русски)

это "фабричный метод" или нет?
G>Не-а.
Ну тогда, наверное, именно "фабричный метод" не изображу...
Но при нужде С++ позволяет использовать довольно мощный статический полиморфизм...
И это обычно можно сделать довольно быстрым кодом...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[51]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: esil 
Дата: 20.03.09 22:10
Здравствуйте, gandjustas, Вы писали:

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


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


G>>>Стоит учесть что каждый проход GC в программе на C# очищает вс первое поколение в таком случа и двигание объектов не происходит, то немного исправляет результат в пользу C#, но даже если бы код на C# работал в 2 раза медленее, то он оказался бы в 3 раза быстрее стандартного аллокатора для C++.


E>>И вот таки да, предположим у нас получилость так, что из-за частых выделений/освобождений памяти наш продукт на С++ работает недопустимо медленно. Что можно с этим сделать? Для начала собрать профиль размеров выделяемых блоков, который нам покажет, что большинство выделяемых блоков имеют размер 256 байт. А дальше можно сделать например так:


E>>
E>>//поскипано
E>>


G>Только делать так не нужно. В первую очередь стоит заняться алгоритмический оптимизацией или даже архитектурной, а не кидаться писать кастомный аллокатор.

G>Причем этот подход работает для любых языков.

Может быть да, может быть нет. Может быть архитектура крива, а может быть она правильна, хотя в ней аллоцируется куча мелких объектов. Это вопрос чего угодно (религии, политики, философии), но только не сравнения аллокаторов.
Верным остаётся одно: на любой дурацкий синтетический тест найдёт столь же дурацкий аллокатор, который этот тест "уделает".

Лично мне комфортно от того, что можно пробовать строить различные архитекутры, не думая изначально о том, сколько каких мелких объектов где выделяется, потому что в случае чего можно расчехлить тяжёлую артиллерию. Кому-то такой подход кажется нормальным, кому-то нет. Но по крайней мере есть выбор. Хотя наличие выбора может кому-то тоже показаться плохой идеей. ))
Re[73]: Плохому танцору на С++ лучше не прогать... в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 22:14
Здравствуйте, gandjustas, Вы писали:

G>Исторические причины в крупных организациях играют немалую роль.


Странно у тебя выходит. Типа ХиндиС для десктопа подходит, но в каждом конкретном случае что-то ему мешает...


IMHO, есть огромный сегмент ПО -- это ПО, которое пишут по случаю и как можно быстрее.
Раньше это делали на VB, теперь делают на ХиндиС. В целом это огромный шаг вперёд!!!
И у C# есть своя ниша. А у С++ своя. Это разная работа обычно и разного рода цикл разработки даже. Так что я не вижу ничего странного в выборе человека между тем и этим, при построении дальнейшей карьеры.
Но в своей нише выбор уже часто предопределён. Если тебе надо пять COM-верверов заставить хитро взаимодействовать меду собой, то ясно что не на С++ это удобно. А если ты хочешь написать распознавалку голоса, чтобы оно могло писать под твою диктовку, то ясно, что не C#, твой выбор...

Ну и у десктопов своя специфика -- обычно программ много, а памяти и проца -- нет. При этом редко проги выпускаются по запросу и срочно. Так что экономичность программ -- это большой плюс для десктопа, а скорость разработки, на уровне "надо ещё вчера" -- нет...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[58]: нет, ну если ты настаиваешь... ;) в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 22:14
Здравствуйте, Erop, Вы писали:

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


G>>>>Если вы изначально занимаетесь быстротой кода, то вряд ли он будет нажедным и красивым. Наоборот — вполне.

E>>>Это всего лишь твоё неумение писать быстрый и качественный код...
G>>С чего ты взял?
E>С того, что знаю примеры быстрого кода, который сразу так и разрабатывался, как быстрый...
И я знаю, но обратных примеров больше.

E>>>Мне известны МНОГОЧИСЛЕННЫЕ контрпримеры, так что позволь не поверить твоему голословному утверждению...

G>>Уууу, а сколько мне известно примеров когда наступала попа из-за преждевременной оптимизации и раннего проектирования структур данных...
E>Не понимаю. Возможно проектирование выполнялось некачественно?
Ну это смотря что понимать под качеством проектирования.
Гуглите "premature optimization".

G>>Быстры и красивый быввает очень редко. Это он может казаться красивым пока не надо какую-то мелочь поменять.

E>Почему это? Почему быстрый код нельзя писать НОРМАЛЬНО? Читабельно, поддерживаемо, без ребусов?..
Это я неверно выразился. Вместо быстрый надо читать "оптимизированный".

G>>С чего ты взял что я не знаю С++?

E>Я не думаю, что ты совсем не знаешь. Но ты тут оговорился, что якобы объект на стеке не может иметь виртуальных функций, но может быть ты именно оговорился, или это вообще не ты был?
Я не говорил что не может иметь. Я вообще-то что их использовать там не получится.
Хотя надо было добавить что использовать безопасным образом. Я с тех пор как изучил C++ в полной мере старался не писать кода, который передает указатели на стек куда-то.

E>В любом случае это не важно. Я не утверждал, что ты не знаешь, я спрашивал, что тебя заставляет выбирать С вместо С++, кроме его сложности (IMHO, если ты говоришь, что С++ сложен, то это значит, что ты его знаешь недостаточно, чтобы писать на нём хороший код)

Я говорю что С++ сложен потому что знаю более простые и при этом более эффективные языки.
Например мне удалось жа полчаса объяснить человек программу на F# на два экрана, при том что он F# не знал.
Аналогичная программа на C++ занимала бы больше и была бы гораздо более сложна в понимании.

А вибирать С, когда нужен низкоуровневый код, заставляет его интероперабельность.
DLL экспортируют функции на С, линуксовые динамические модули (so) также работают на С.
Делать процедурную обвязку вокруг ОО-кода не хочется, тем более обычно задача низкоуровневого кода заключается в математике.

G>>А "нагруженные части" — те которые обрабатывают большой объем информации в единицу времени — для них C# подходит гораздо лучше.

E>Пока не нужна память и скорость -- да. Например для GUI ХиндиС -- это просто находка!
Ну а доказательства тезиса будут?
Или опять по принципу — чем больше повторить, там больше правда.

E>А там AI, например, нифига не органичен...

Ну и как AI делать?
Мой знакомый AI занимается, вообще на лиспе пишет.

G>>>>И только там где не хватает производительности может быть использован C.

E>>>Ну вот есть такая т. з., что в случае массового потребителя, производительности не хватает практически ВЕЗДЕ. Ну ценят люди скорость...

G>>Да ну, а ты не слышал что процессор настолького компа в среднем загружен на 5%, а сервера — на 20%

G>>На C имеет смысл писать только математику, обработка больших объемов данных гораздо лучше пишется на .NET.
E>Я думаю, что в твоих задачах обработка больших объёмов совсем лучше всего выполнятся СУБД... В на C# хорошо пишется интерфейс к этой самой СУБД...
Если данные лежат в субд и имеют реляционную природу, то конечно субд. И интерфейс отлично будет.
А если нет — то придется код писать и уж точно не на С++.

E>Ты видимо не встречал пока других сложных задач, где нужна таки выч. мощь, кроме того, что ты называешь словом "математика"

А где еще нужна таки вычмощь кроме математических алгоритмов (физика, графика, видео) ?
Все задачи которые требуют не только процессора, но и активно работы с другими ресурсами компьютера (память, диск, сеть), а также требующие высокую степень параллельности обработки лучше уже писать на .NET.
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: esil 
Дата: 20.03.09 22:16
Здравствуйте, NikeByNike, Вы писали:

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


E>>А тут случаем баг не закрался?

E>>CreateBySimilarityCasesensitive возвращает временный объект, на который потом берётся ссылка.
NBN>Нет, временный объект просуществует до конца видимости ссылки. С указателем такая фишка не сработает.

Сенкс. Не думал, что в этом флейме удастся узнать что-то новое про С++ =)
С подобным кодом раньше не сталкивался, обычно в таких случаях вместо ссылки просто создают локальный объект )
Re[31]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 22:19
Здравствуйте, esil, Вы писали:

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


G>>Круто, а фабричный метод так изобразите?

G>>ЗЫ. Передача указателя на стек до добра не доводит, большенство уязвимостей в ПО так и получаются.

E>Я заню, что круто ))

E>Нет, фабричный метод так не изображу. Только не надо говорить "ну тогда и нет никакого ООП на стэке". Естественно одним стэком не обойдёшься. Но стэк позволяет убрать очень много выделений памяти.
Для С++ толк в этом есть, но мало. Это уже оптимизация после которой код хуже читается, сложнее модифицируется и еще и потенциально подвержен уязывимостям.
Re[72]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 22:21
Здравствуйте, hattab, Вы писали:

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


M>>>>С одной стороны виноват тот же С++. Потому что legacy и тот же ворд нет смысла переписывать с нуля

M>>>>С другой стороны — а что такое десктопный софт?

H>>>Гуглохром например, и легаси нету и работает на десктопе


G>>У гугла столько ресурсов, что они могуть ОС в машинных кодах написать.

G>>И если им будет надо — напишут.

H>У МС ресурсов не меньше, чего же легаси свое не перепишут на шарпе? Глядишь и сэкономят еще

Про это уже говорили, вроде даже в этой теме.
Re[36]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 22:24
Здравствуйте, esil, Вы писали:

E>С подобным кодом раньше не сталкивался, обычно в таких случаях вместо ссылки просто создают локальный объект )

Чтобы создать локальный объект, надо знать его тип. А он может определяться, например, типом аргументов перегруженной порождающей функции...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[52]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 22:40
Оценка: +2
Здравствуйте, esil, Вы писали:

E>Верным остаётся одно: на любой дурацкий синтетический тест найдёт столь же дурацкий аллокатор, который этот тест "уделает".

Так тест и был для стандартного аллокатора.
При страндартном аллокаторе операции выделения и освобождения памяти оказались не такими дешевыми как их считали некоторые.
Кроме этого тест и е должен был ничего показать.

E>Лично мне комфортно от того, что можно пробовать строить различные архитекутры, не думая изначально о том, сколько каких мелких объектов где выделяется, потому что в случае чего можно расчехлить тяжёлую артиллерию.

Отличная идея. GC как раз позволяет не думать о выделении и освобождении памяти вообще.
Если производительность окажется недостаточной то надо смотреть причны и бороться с ними.
Причем чаще всего прчиной оказывается применение неподходчщего алогоритма. Очень редко приходится нарываться на ситуацию когда низкая производительность вызвана особенностями платформы.
Re[59]: нет, ну если ты настаиваешь... ;) в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 22:48
Оценка: -1
Здравствуйте, gandjustas, Вы писали:

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

G>И я знаю, но обратных примеров больше.
Плохих программистов вообще меньше, чем хороших...
Да и дантистов, например, тоже

G>Ну это смотря что понимать под качеством проектирования.

G>Гуглите "premature optimization".
Это другое. Обычно этим словом обозначают желание экономить на спичках пока ещё не решено нужен ли костёр, так скажем. Но если ты, например, решил писать спел-чекер, то ответить на вопросы в какой структуре данных ты будешь хранить словарь и будет ли словарь словоформенным или полексемным, стоит ответить ещё на этапе проектирования

G>Это я неверно выразился. Вместо быстрый надо читать "оптимизированный".

Я, видимо, плохо понимаю смысл "оптимизированный". Видимо это какой-то способ портить код?

G>Хотя надо было добавить что использовать безопасным образом. Я с тех пор как изучил C++ в полной мере старался не писать кода, который передает указатели на стек куда-то.

IMHO, это догма. Надо избегать переполнений буферов, где бы они не были аллокированы. И С++ предоставляет широкие возможности для этого. Например тот класс CAutoBuffer, который я тут показывал...

G>Например мне удалось жа полчаса объяснить человек программу на F# на два экрана, при том что он F# не знал.

G>Аналогичная программа на C++ занимала бы больше и была бы гораздо более сложна в понимании.
Возможно. Но F# -- это всё равно маргинальщина. Кроме того, я не понимаю, что значит "объяснить". Он бы после твоих объяснений смог бы эту прогу поддерживать? В любом случае это тут офтоп.

G>Делать процедурную обвязку вокруг ОО-кода не хочется, тем более обычно задача низкоуровневого кода заключается в математике.

Не знаю, что такое "низкоуровневый код" В моих программах мотор намного сложнее оболочки. Возможно ты с моторами, кроме СУБД просто не сталкивался.

E>>Пока не нужна память и скорость -- да. Например для GUI ХиндиС -- это просто находка!

G>Ну а доказательства тезиса будут?
G>Или опять по принципу — чем больше повторить, там больше правда.
Доказательства чего? Что для GUI находка? Это моё мнение.
А если речь идёт об обработке большого количества данных, то я не знаю успешных примеров моторов на ХиндиС...

G>Ну и как AI делать?

В смысле "как?" Брать и делать...
G>Мой знакомый AI занимается, вообще на лиспе пишет.
На лиспе хорошо делать прототипирование в некоторых задачах AI. Правда удобно. Я как-то возился и с лиспом. Но большой скорости из всех этих списков, IMHO, не выжать -- слишком универсальные

G>Если данные лежат в субд и имеют реляционную природу, то конечно субд. И интерфейс отлично будет.

G>А если нет — то придется код писать и уж точно не на С++.
При веди пример данных, о которых речь...

G>А где еще нужна таки вычмощь кроме математических алгоритмов (физика, графика, видео) ?

Есть то, что я бы не назвал "математические алгоритмы", хотя, строго говоря, все алгоритмы "математические"...
Скажем нейронная сеть -- это мат. алгоритм? А поисковая машина?
Или, например, сжималка памяти на лету, позволяющая увеличить видимый RAM?

G>Все задачи которые требуют не только процессора, но и активно работы с другими ресурсами компьютера (память, диск, сеть), а также требующие высокую степень параллельности обработки лучше уже писать на .NET.


Про параллельность не уверен, есть более специальные средства, хотя я сторонник наоборот, крупной гранулярности, если возможно, и тогда язык не особо важен. Про сеть -- вообще всё пофиг, IMHO, если это не TCP/IP стек А если он -- то не ХиндиС, однозначно, IMHO. Работа с диском -- это известный тормоз и не ясно какая разница, какой язык, опять же... Про активную работу с памятью (что бы это не значило) я тоже как-то сильно сомневаюсь. И С и С++ позволяют отрегулировать эту "активную работу" намного тоньше...

Вот, например, хочу я разработать search engine. Типа как у google. Чтобы скармливать ему документы, а оно их разбивало на слова, как-то там индексировало, а потом отвечало на вопросы вроде: "найди мне все документы, где слова "мама" отстоит от слова "моя" не дальше двух слов, стоят в одном предложении и согласованы по грамматическому значению".
Ну и пополняем, например, на одной нити, а ищем параллельно. И что, думаешь на C# хорошо получится?
AFAIK, все такие движки на плюсах чего-то пишут...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[52]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 22:55
Здравствуйте, esil, Вы писали:

E>Лично мне комфортно от того, что можно пробовать строить различные архитекутры, не думая изначально о том, сколько каких мелких объектов где выделяется, потому что в случае чего можно расчехлить тяжёлую артиллерию. Кому-то такой подход кажется нормальным, кому-то нет. Но по крайней мере есть выбор. Хотя наличие выбора может кому-то тоже показаться плохой идеей. ))


Тут есть ещё одна тонкость. спец. аллокатор таки эффективнее для своей задачи. В этом нет ничего удивительного, так как специализированные решения часто лучше обобщённых
А дальше возникает вопрос насколько тебе это надо. Если ты шахматные часы пишешь, то и фиг с ним. А если, скажем, делаешь ты С-300, и надо, чтобы система управления быстрее чесалась, так как чем быстрее и точнее она чешется, тем на дальше хватает изделию топлива. И тем больше есть времени, соответственно, "на выстрелить"...

И вот ты разрабатываешь, разрабатываешь, и упираешься. С С++ у тебя будет ещё один шаг, практически до субмакисмльного быстродействия, а в GC архитектуре ты остановишься на просто большом быстродействии и всё. И в результате ракета у амеров летает на 250, а у РФ на 350 км... И привет арифметике...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 22:56
Здравствуйте, VladD2, Вы писали:

VD>Почему всем будет смешно, если им расскажут о подмастерьи физика, химика или врача. Так почему же подмастерья программистов обсуждаются серьезно?

Ну посмейся. Слова "аспирант", "ординатура" и "научный руководитель диплома" и "производственная практика" для тебя новы?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[53]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 23:03
Оценка: +2 -1 :)
Здравствуйте, gandjustas, Вы писали:

G>Если производительность окажется недостаточной то надо смотреть причны и бороться с ними.

G>Причем чаще всего прчиной оказывается применение неподходчщего алогоритма. Очень редко приходится нарываться на ситуацию когда низкая производительность вызвана особенностями платформы.

IMHO, такая ситуация, когда для ускорения надо менять алгоритм, часто говорит о том, что проектировали плохо.
Часто можно сразу выбирать оптимальный алгоритм. Не понятно зачем пессимизировать-то? В большинстве задач оптимальные алгоритмы давно уже известны...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[74]: Плохому танцору на С++ лучше не прогать... в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 23:08
Оценка: +1
Здравствуйте, Erop, Вы писали:

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


G>>Исторические причины в крупных организациях играют немалую роль.


E>Странно у тебя выходит. Типа ХиндиС для десктопа подходит, но в каждом конкретном случае что-то ему мешает...

Я уже писал:
1)кодовая база, переписывание с нуля даже небольшого проекта дает только риски и нифига прибыли.
2)программистска база — если есть команда, пишущая на С++, то они не станут на следующий день писать на C#
3)Слабая изменчивость требований, требовния для бизнес-софта меняются очень быстро, бывает что софт перестает отвечать требованиям бизнеса еще до установки клиенту. Десктопный софт такой изменчивости не подвержен, в основном идет добавление по-немногу фич, улучшение юзабилити, правка багов, при этом всем надо сохранять обратную совместимость.


E>IMHO, есть огромный сегмент ПО -- это ПО, которое пишут по случаю и как можно быстрее.

E>Раньше это делали на VB, теперь делают на ХиндиС. В целом это огромный шаг вперёд!!!
Раньше и сейчас это делают на скриптовых языках.

E>Но в своей нише выбор уже часто предопределён. Если тебе надо пять COM-верверов заставить хитро взаимодействовать меду собой, то ясно что не на С++ это удобно. А если ты хочешь написать распознавалку голоса, чтобы оно могло писать под твою диктовку, то ясно, что не C#, твой выбор...

Это еще надо обосновать.

E>Ну и у десктопов своя специфика -- обычно программ много, а памяти и проца -- нет.

Неверно. Память еще может заканчиваться, а проц большую частьвремени простаивает.

E>Так что экономичность программ -- это большой плюс для десктопа

Это вы так думаете.
Можете привести пример когда именно быстродействие становилось конкурентным преимуществом. А учитывая что .NET не сильно по быстродействию отличается от C++, то ваш тезис кажется неверным.

E>а скорость разработки, на уровне "надо ещё вчера" -- нет...

При разработке для заказчика только так и можно работать.
Причем заказной софт — гораздо большая часть разработки.
Re[75]: Плохому танцору на С++ лучше не прогать... в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 23:23
Оценка: -1
Здравствуйте, gandjustas, Вы писали:

E>>а скорость разработки, на уровне "надо ещё вчера" -- нет...

G>При разработке для заказчика только так и можно работать.
IMHO, при разработке для заказчика надо работать так, как надо заказчику

G>Причем заказной софт — гораздо большая часть разработки.

Ну и что? Индусов больше всего, потом наверное код на коболе идёт...
ХиндиС -- тут очень даже к месту. Если всё, кроме сроков разработки и реакции на изменения требований, не важно, то C# -- твой выбор. Я с этим и не спорю.
И проектировать тоже тогда не надо, потому что время терять. Надо писать как можно быстрее, а если потом заказчик, или тот, кто думает, что знает нужды заказчика, это дело завернёт, попрофилять и допилить как-то побыстрее...

Всё верно. Да так и надо вести разработку в таких условиях!
Но это один такой специфический подход к программированию.

Есть и другие ниши. Скажем ретейл. Обычно коробочный софт разрабатывают по какому-то графику, есть цикл выпуска версий там, то, сё, есть время на проектирование, на тестирование, на качество разработки, короче. Если ты будешь выпускать версии раз в месяц, ты только проиграешь! Так что выгодно выпускать версии пореже, но покруче...

А ещё есть разработка технологий и моторов всяких. Скажем сидят люди из 17-й версии СУБД делают 18-ю. Там своя специфика, и C# ещё меньше в тему. Ну и т. д.
Или, наоборот, сидят люди и пишут то, что никто ещё не писал и как это писать не знает. Тоже интересная, и тоже особенная работа...

При этом все эти активности -- программирование. Но они все разные. И кому-то нравится одно, а кому-то другое...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[60]: нет, ну если ты настаиваешь... ;) в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 23:27
Здравствуйте, Erop, Вы писали:

G>>Ну это смотря что понимать под качеством проектирования.

G>>Гуглите "premature optimization".
E>Это другое. Обычно этим словом обозначают желание экономить на спичках пока ещё не решено нужен ли костёр, так скажем. Но если ты, например, решил писать спел-чекер, то ответить на вопросы в какой структуре данных ты будешь хранить словарь и будет ли словарь словоформенным или полексемным, стоит ответить ещё на этапе проектирования
Я в спелл-чекерах не силен, но я так понимаю что имеет ввиду два принципиально разных алгоритма. Тогда да, выбор надо делать заранее.
Только не стоит в это месте говорить "структура данных". Именно структура может измениться до неузнаваемости при эволюционном дизайне.

G>>Это я неверно выразился. Вместо быстрый надо читать "оптимизированный".

E>Я, видимо, плохо понимаю смысл "оптимизированный". Видимо это какой-то способ портить код?
Обычно неалгоритмическая оптимизация зкалючается в расстановке хаков с целью повысить быстродействие. Эти хаки очень отрицательно сказываются.

G>>Например мне удалось жа полчаса объяснить человек программу на F# на два экрана, при том что он F# не знал.

G>>Аналогичная программа на C++ занимала бы больше и была бы гораздо более сложна в понимании.
E>Возможно. Но F# -- это всё равно маргинальщина. Кроме того, я не понимаю, что значит "объяснить". Он бы после твоих объяснений смог бы эту прогу поддерживать? В любом случае это тут офтоп.
Нет, он смог объяснить её преподу так что тот понял и еще на вопросы ответил, короче получил зачет.

G>>Делать процедурную обвязку вокруг ОО-кода не хочется, тем более обычно задача низкоуровневого кода заключается в математике.

E>Не знаю, что такое "низкоуровневый код" В моих программах мотор намного сложнее оболочки. Возможно ты с моторами, кроме СУБД просто не сталкивался.
А что за программы? С таким бешенным мотором.

E>>>Пока не нужна память и скорость -- да. Например для GUI ХиндиС -- это просто находка!

G>>Ну а доказательства тезиса будут?
G>>Или опять по принципу — чем больше повторить, там больше правда.
E>А если речь идёт об обработке большого количества данных, то я не знаю успешных примеров моторов на ХиндиС...
А я не знаю примеров где они нужны были. Приведите парочку.

G>>Если данные лежат в субд и имеют реляционную природу, то конечно субд. И интерфейс отлично будет.

G>>А если нет — то придется код писать и уж точно не на С++.
E>При веди пример данных, о которых речь...
Трейдерские системы, накопление статистики по мере прихода информации.

G>>А где еще нужна таки вычмощь кроме математических алгоритмов (физика, графика, видео) ?

E>Есть то, что я бы не назвал "математические алгоритмы", хотя, строго говоря, все алгоритмы "математические"...
E>Скажем нейронная сеть -- это мат. алгоритм?
Нейронная сеть — да, там перемножение матриц и обратное распространение ошибкм.
E>А поисковая машина?
Чего ищет?

E>Или, например, сжималка памяти на лету, позволяющая увеличить видимый RAM?


Что-то на грани фантастики.

G>>Все задачи которые требуют не только процессора, но и активно работы с другими ресурсами компьютера (память, диск, сеть), а также требующие высокую степень параллельности обработки лучше уже писать на .NET.


E>Про параллельность не уверен, есть более специальные средства, хотя я сторонник наоборот, крупной гранулярности, если возможно, и тогда язык не особо важен. Про сеть -- вообще всё пофиг, IMHO, если это не TCP/IP стек А если он -- то не ХиндиС, однозначно, IMHO. Работа с диском -- это известный тормоз и не ясно какая разница, какой язык, опять же...

Видимо вы не писали таких программ. Разница есть.
E>Про активную работу с памятью (что бы это не значило) я тоже как-то сильно сомневаюсь. И С и С++ позволяют отрегулировать эту "активную работу" намного тоньше...
Вот этого как раз не надо. "Тонкое" управление обычно выливается в очень большие сроки разработки.
Нужны простые способы абстрагироваться от этого управления.

E>Вот, например, хочу я разработать search engine. Типа как у google. Чтобы скармливать ему документы, а оно их разбивало на слова, как-то там индексировало, а потом отвечало на вопросы вроде: "найди мне все документы, где слова "мама" отстоит от слова "моя" не дальше двух слов, стоят в одном предложении и согласованы по грамматическому значению".

E>Ну и пополняем, например, на одной нити, а ищем параллельно. И что, думаешь на C# хорошо получится?
E>AFAIK, все такие движки на плюсах чего-то пишут...
Ну если учесть все аспекты хранения и обработки индексов, распараллеливания вычислений и балансировки входящей нагрузки, то думаю что на .NET получится получше.
Re[53]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 23:31
Оценка: +1 :)
Здравствуйте, Erop, Вы писали:

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


E>>Лично мне комфортно от того, что можно пробовать строить различные архитекутры, не думая изначально о том, сколько каких мелких объектов где выделяется, потому что в случае чего можно расчехлить тяжёлую артиллерию. Кому-то такой подход кажется нормальным, кому-то нет. Но по крайней мере есть выбор. Хотя наличие выбора может кому-то тоже показаться плохой идеей. ))


E>Тут есть ещё одна тонкость. спец. аллокатор таки эффективнее для своей задачи. В этом нет ничего удивительного, так как специализированные решения часто лучше обобщённых

E>А дальше возникает вопрос насколько тебе это надо. Если ты шахматные часы пишешь, то и фиг с ним. А если, скажем, делаешь ты С-300, и надо, чтобы система управления быстрее чесалась, так как чем быстрее и точнее она чешется, тем на дальше хватает изделию топлива. И тем больше есть времени, соответственно, "на выстрелить"...

E>И вот ты разрабатываешь, разрабатываешь, и упираешься. С С++ у тебя будет ещё один шаг, практически до субмакисмльного быстродействия, а в GC архитектуре ты остановишься на просто большом быстродействии и всё. И в результате ракета у амеров летает на 250, а у РФ на 350 км... И привет арифметике...


Зато у амеров этих ракет хоть попой кушай

Вообще если готовы бабло платить, то можно написать суперкомпилятор, который будет специализировать программу под входные данные, тогда она будет лететь 3 раза вокруг земли.

Но для этиъ целей С++ точноне подойдет.
Re[54]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 23:34
Оценка: +1 -1
Здравствуйте, Erop, Вы писали:

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


G>>Если производительность окажется недостаточной то надо смотреть причны и бороться с ними.

G>>Причем чаще всего прчиной оказывается применение неподходчщего алогоритма. Очень редко приходится нарываться на ситуацию когда низкая производительность вызвана особенностями платформы.

E>IMHO, такая ситуация, когда для ускорения надо менять алгоритм, часто говорит о том, что проектировали плохо.

Обычно так и делают.

E>Часто можно сразу выбирать оптимальный алгоритм.

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

E>Не понятно зачем пессимизировать-то? В большинстве задач оптимальные алгоритмы давно уже известны...

Ну если у вас задачи такие что под нее сразу можно оптимальный алгоритм подобрать, то хорошо.
В реальной жизни приходит заказчик и говорит: "сделайте мне песдато!"
Re[61]: нет, ну если ты настаиваешь... ;) в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 23:44
Здравствуйте, gandjustas, Вы писали:

G>Только не стоит в это месте говорить "структура данных". Именно структура может измениться до неузнаваемости при эволюционном дизайне.

Ну что-то изменится, а что-то останется.
Как бы список упорядоченный по алфавиту путём эволюции в префиксное дерево не превратится...

G>Обычно неалгоритмическая оптимизация зкалючается в расстановке хаков с целью повысить быстродействие. Эти хаки очень отрицательно сказываются.

Ну даже хаки можно расставлять культурно, скажем перекрывать new|delete у какого-нибудь класса, а не у всех. Кроме того, в нормальных программах можно не заниматься совсем уж хакками...

G>Нет, он смог объяснить её преподу так что тот понял и еще на вопросы ответил, короче получил зачет.

Ха! Тогда я как-то кванты человку за ночь "объяснил"...
IMHO, к разработке это всё отношения не имеет вообще

G>А что за программы? С таким бешенным мотором.

AI в разных раскладах.

G>А я не знаю примеров где они нужны были. Приведите парочку.

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

G>Трейдерские системы, накопление статистики по мере прихода информации.

А что мешает статистику в БД лить? Кроме того не совсем понятно что за трейдерская система с большим трафиком данных? Ну сколько там сделок с секунду? Ну не миллиард же?

G>Нейронная сеть — да, там перемножение матриц и обратное распространение ошибкм.

Это всего лишь одна из реализаций. Наивная довольно.
E>>А поисковая машина?
G>Чего ищет?
Ну Google знаешь?

G>Что-то на грани фантастики.

Есть несколько конкурирующих продуктов...
Во всяком случае было...


E>>Про параллельность не уверен, есть более специальные средства, хотя я сторонник наоборот, крупной гранулярности, если возможно, и тогда язык не особо важен. Про сеть -- вообще всё пофиг, IMHO, если это не TCP/IP стек А если он -- то не ХиндиС, однозначно, IMHO. Работа с диском -- это известный тормоз и не ясно какая разница, какой язык, опять же...

G>Видимо вы не писали таких программ. Разница есть.
"Таких" -- это "каких"? С диском, пофиг как откуда работать, всё равно диск ждать...
Главное много лишней памяти не скушать. Либо асинхронный доступ реализовать, но тут опять же от ОС скорее зависит, а не от языка...

G>Вот этого как раз не надо. "Тонкое" управление обычно выливается в очень большие сроки разработки.

G>Нужны простые способы абстрагироваться от этого управления.
Это от целей зависит. Если цель -- очень быстро разработать, то да, лучше абстрагироваться, а если цель высокое качество, то лучше иметь возможность рулить...

G>Ну если учесть все аспекты хранения и обработки индексов, распараллеливания вычислений и балансировки входящей нагрузки, то думаю что на .NET получится получше.

Тем не менее все известные успешные реализации на С++ Даже новые...
И, кстати, я не думаю, что на ХиндиС получится лучше. Просто потому, что нет причин для этого. Хотя, скорее всего, и сильно хуже не получится. Будет по памяти менее эффективно на какой-то процент и всё... Скажем на ~10%

Ну а дальше вопрос зачем это нужно. Если на сервере, чтобы работало, то пофиг наверное, а если на сотовом телефоне, для поиска по тексту карточек словаря, то ХиндиС будет в пролёте...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[76]: Плохому танцору на С++ лучше не прогать... в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.03.09 23:48
Здравствуйте, Erop, Вы писали:

E>Есть и другие ниши. Скажем ретейл. Обычно коробочный софт разрабатывают по какому-то графику, есть цикл выпуска версий там, то, сё, есть время на проектирование, на тестирование, на качество разработки, короче. Если ты будешь выпускать версии раз в месяц, ты только проиграешь! Так что выгодно выпускать версии пореже, но покруче...

Тоже самое, только без изменчивости требований.
При поставленном процессе выпуск релиза ниче не стоит.

E>А ещё есть разработка технологий и моторов всяких. Скажем сидят люди из 17-й версии СУБД делают 18-ю. Там своя специфика, и C# ещё меньше в тему. Ну и т. д.

Там таже самая фигня.

E>Или, наоборот, сидят люди и пишут то, что никто ещё не писал и как это писать не знает. Тоже интересная, и тоже особенная работа...

Тогда делается прототип(ы), с целью выяснить как писать, а потом пишется продукт.
А исследования планируются очень просто — поставлены цели, выделено бабло, как только цели достигнуты или бабло кончилось исследования заканчиваются и начинается разработка продукта.

E>При этом все эти активности -- программирование. Но они все разные. И кому-то нравится одно, а кому-то другое...

Это ты сам придумал. Промышленный подход к программированию заключается в том что ты пишешь примерно одинаково, только цели немного разные.
Re[55]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 23:54
Оценка: +2
Здравствуйте, gandjustas, Вы писали:

E>>IMHO, такая ситуация, когда для ускорения надо менять алгоритм, часто говорит о том, что проектировали плохо.

G>Обычно так и делают.
Ну ты же сам пояснил, что вы принципиально не проектируете, а сразу пишите прототип? Тогда не удивительно...

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

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

G>В реальной жизни приходит заказчик и говорит: "сделайте мне песдато!"

И что за алгоритм вы выбираете в качестве первого приближения в таком случае? Зовёте спецов по ублажению?

Вообще-то я имел в виду, что задачи обычно на подзадачи бьются, а подзадачи обычно имеет более менее стандартные решения... Я как-то не понимаю, если уж есть какой-то алгоритм, то что мешает проверить его на эффективность-то?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[54]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 20.03.09 23:55
Здравствуйте, gandjustas, Вы писали:

G>Вообще если готовы бабло платить, то можно написать суперкомпилятор, который будет специализировать программу под входные данные, тогда она будет лететь 3 раза вокруг земли.


G>Но для этиъ целей С++ точноне подойдет.


1) Ты про CT что-нибудь слышал?
2) Как думаешь, а сам компиллер С++ на чём писан?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[77]: Плохому танцору на С++ лучше не прогать... в избранное  новое    модер. 
От: Erop 
Дата: 21.03.09 00:05
Здравствуйте, gandjustas, Вы писали:

G>При поставленном процессе выпуск релиза ниче не стоит.

Может и не стоит, но что ты будешь выпускать на этапе проектирования, например?
Или прототипирования...
Короче не догма. На каких-то этапах каких-то проектов полезно, а на каких-то не особо.

G>Тогда делается прототип(ы), с целью выяснить как писать, а потом пишется продукт.

Нет. Прототипы конечно делаются, но это ОЧЕНЬ УПРОЩЁННЫЙ взгляд на вещи.
Вот представь себе, что тебе надо написать игрока в го, который победит на ЧМ. Как построишь ты работу?

G>Это ты сам придумал. Промышленный подход к программированию заключается в том что ты пишешь примерно одинаково, только цели немного разные.

Не знаю что я там придумал, но с психологической точки зрения активность очень разная...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[5]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 21.03.09 01:44
Оценка: +1
Здравствуйте, Erop, Вы писали:

VD>>Почему всем будет смешно, если им расскажут о подмастерьи физика, химика или врача. Так почему же подмастерья программистов обсуждаются серьезно?

E>Ну посмейся. Слова "аспирант", "ординатура" и "научный руководитель диплома" и "производственная практика" для тебя новы?

Очень смешно. До аспирантуры или ординатура человек обязан отучиться минимум 4 года в профильном институте. В лучшем случае за бесплатно. Сейчас многие деньги уже платят. Тут же человек хочет со знанием ПХП без какой бы то ни было подготовки идти работать С++-программистом.

Вот пусть пойдет по учится 4 годика, а потом можно будет о подмостерье говорить. А не хочет 4 годика, так пусть хотя бы месяца три книжки почитает и примерчики по решает... дома. Глядишь вопросы сами собой отпадут, и разговоры перестанут быть такими детскими и наивными.

Я сутки работал, трое учился, а по вечерам еще с тем же С++ разбирался. Просить у кого-то за это деньги мне даже в голову не приходило.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[28]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 21.03.09 04:33
Оценка: :)
Здравствуйте, Erop, Вы писали:
E>Может уважаемый MVP снизойдёт к нам, сирым и убогим и вспомнит таки азы, а уже потом будет позориться?
А что вы назыаете "азами"? Я на плюсах в последний раз писал, афаик, в 2002. И не считаю знания таких деталей "азами". Азы — это, к примеру, понимание того, в каком порядке пишутся программы
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[62]: нет, ну если ты настаиваешь... ;) в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 21.03.09 06:00
Здравствуйте, Erop, Вы писали:

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


G>>Только не стоит в это месте говорить "структура данных". Именно структура может измениться до неузнаваемости при эволюционном дизайне.

E>Ну что-то изменится, а что-то останется.
E>Как бы список упорядоченный по алфавиту путём эволюции в префиксное дерево не превратится...
У меня один раз именно такое превращение произошло.


G>>Обычно неалгоритмическая оптимизация зкалючается в расстановке хаков с целью повысить быстродействие. Эти хаки очень отрицательно сказываются.

E>Ну даже хаки можно расставлять культурно, скажем перекрывать new|delete у какого-нибудь класса, а не у всех. Кроме того, в нормальных программах можно не заниматься совсем уж хакками...
Это и нижает читаемость и модифицируемость кода. Пользователю класса еще недо будет знать как работает аллокатор класса, чтобы его эффективно использовать.

G>>Нет, он смог объяснить её преподу так что тот понял и еще на вопросы ответил, короче получил зачет.

E>Ха! Тогда я как-то кванты человку за ночь "объяснил"...
E>IMHO, к разработке это всё отношения не имеет вообще
Кванты действительно не имеют.

G>>Трейдерские системы, накопление статистики по мере прихода информации.

E>А что мешает статистику в БД лить? Кроме того не совсем понятно что за трейдерская система с большим трафиком данных? Ну сколько там сделок с секунду? Ну не миллиард же?
То что лить+считать статистику в бд — не хватает скорости бд. Она не рассчитана на сочетания быстрых записей и рассчет аналитики одновременно.

G>>Нейронная сеть — да, там перемножение матриц и обратное распространение ошибкм.

E>Это всего лишь одна из реализаций. Наивная довольно.
E>>>А поисковая машина?
G>>Чего ищет?
E>Ну Google знаешь?
Ну знаю. Еще Windows Live знаю, у них вроде на C# (если не все, то большая часть)

G>>Вот этого как раз не надо. "Тонкое" управление обычно выливается в очень большие сроки разработки.

G>>Нужны простые способы абстрагироваться от этого управления.
E>Это от целей зависит. Если цель -- очень быстро разработать, то да, лучше абстрагироваться, а если цель высокое качество, то лучше иметь возможность рулить...
Это на основании кагого опыта написано?

G>>Ну если учесть все аспекты хранения и обработки индексов, распараллеливания вычислений и балансировки входящей нагрузки, то думаю что на .NET получится получше.

E>Тем не менее все известные успешные реализации на С++ Даже новые...
Скажи это разработчикам Windows Live.

E>И, кстати, я не думаю, что на ХиндиС получится лучше. Просто потому, что нет причин для этого. Хотя, скорее всего, и сильно хуже не получится. Будет по памяти менее эффективно на какой-то процент и всё... Скажем на ~10%

Я не вижу причин чтобы получилось хуже.

E>Ну а дальше вопрос зачем это нужно. Если на сервере, чтобы работало, то пофиг наверное, а если на сотовом телефоне, для поиска по тексту карточек словаря, то ХиндиС будет в пролёте...

А там сильно мощный поиск нужен?
Можно взять Lucene.net — работает очень быстро, можно собрать под CF.
Re[29]: Дык известное дело: поспешишь - людей наспешишь ;) в избранное  новое    модер. 
От: Erop 
Дата: 21.03.09 06:00
Оценка: +1
Здравствуйте, Sinclair, Вы писали:

S>А что вы назыаете "азами"? Я на плюсах в последний раз писал, афаик, в 2002. И не считаю знания таких деталей "азами". Азы — это, к примеру, понимание того, в каком порядке пишутся программы


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

Не вижу сортировки по алфавиту.

и

А он неявно сортирует??? Офигеть. Я как отвык от того, что для множества нужно задавать отношение частичного порядка.
Я надеюсь, уточнение сортировки в Case-insensitive/accent-sensitive для турецкой локали не усложнит эту безусловно прекрасную программу?

твои же слова?

Вот таки они довольно смешно звучат, особенно если сравнить твой тон и твою эрудированность в вопросе
Так что я и советую таки, перед тем как в след. раз людей смешить, разобраться таки в вопросе СНАЧАЛА...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[6]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Erop 
Дата: 21.03.09 06:02
Здравствуйте, VladD2, Вы писали:

VD>Я сутки работал, трое учился, а по вечерам еще с тем же С++ разбирался. Просить у кого-то за это деньги мне даже в голову не приходило.


Ну что тут поделаешь, а некоторым (я их знаю лично) платят только за то, что они соглашаются где-то учиться... Мир несправедлив...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[30]: Дык известное дело: поспешишь - людей наспешишь ;) в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 21.03.09 06:10
Здравствуйте, Erop, Вы писали:

E>Ну, ты, кажется, вызвался довольно менторским тоном всезнайки разговаривать о С++ коде, даже не врубаясь что там написано?

Нет, я задал вопрос. Менторский тон — это у тебя в голове.
E>Я надеюсь, уточнение сортировки в Case-insensitive/accent-sensitive для турецкой локали не усложнит эту безусловно прекрасную программу?[/q]твои же слова?
Ну да, мои. Ну так ты ответь, раз ты так хорошо знаешь STL и плюсы — как будет выглядеть программа с учетом сортировки, которую я привел.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[32]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: minorlogic 
Дата: 21.03.09 06:13
Здравствуйте, Sinclair, Вы писали:

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

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

В плюсах нуб просто не взлетит шутка конечно но ...
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[66]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 21.03.09 06:15
Оценка: +1
Здравствуйте, Хвост, Вы писали:
Х>просто вот когда дело доходит до новых апи — здравствуй интероп с нейтивом, хочешь массив на стеке — здравствуй ансейф, тот же пэйнт.нет афаир просто насквозь пропитан ансейфом, зачем тогда сишарп? хорошие вещи делаются только в нейтиве, вот тот же пример с выводом строк, для такой забавы как флейм на рсдн и стримы с регекспами не грех использовать, а вот если бы ето была программа промышленных маштабов — скажим анализатор логов, то здравствуй мем-маппед файлы да стейт-машины с отсутствием аллокаций, и писать етона си++ без ifstream и multiset, а не на сишарпе с gc и аллокацией на каждый чих.
О да. Анализатор логов — это конечно гораздо промышленнее сайта с дневной посещаемостью в сотню тысяч хитов.

На всякий случай напомню, что на каждую строчку лога, которую читает анализатор, этот самый сайт успевает авторизовать пользователя, сбегать в базу, раскрасить синтаксис, выдать HTML. И всё это "с GC и аллокацией на каждый чих", и стримами, и регекспами.
Но нет, конечно же авторы анализаторов логов считают себя гораздо более главными. Удачи.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[66]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 21.03.09 06:15
Оценка: +2
Здравствуйте, Хвост, Вы писали:

Х>ну, давай по-порядку, на С# я писал давно и немного, на С++ на порядок больше, и есстествено что-то могло забытся, к тому же если ты проследишь начало темы про структуры, то она была о размещении их в массиве, и тут без ансейфа вариант действительно только один — боксинг.

По-прежнему неверно.
Даже при размещении массивов структур в хипе никакого боксинга нет.

Х>Теперь по-поводу "подобный пост про тебя", пиши пожалуйста, ведь ето ты будешь писать обо мне как о разработчике на C#, что ещё раз подтвердит мои слова , C# (особенно в версии 3.5) ето очень мощный язык, но для приложений требующих производительности, малой затраты ресурсов, быстрой реакции интерфейса ето просто моветон.

Ну, если писать на нём, не разбираясь в отличиях value-типов от reference-типов — то да. Но это вообще как бы моветон — писать приложение, требующее производительности, не зная при этом технических основ. Уверяю тебя, при аналогичном уровне знаний С++ результирующая программа будет еще медленнее и нестабильнее.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[67]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 21.03.09 06:42
Оценка: +1 -2 :)
Здравствуйте, Sinclair, Вы писали:

S>О да. Анализатор логов — это конечно гораздо промышленнее сайта с дневной посещаемостью в сотню тысяч хитов.


S>На всякий случай напомню, что на каждую строчку лога, которую читает анализатор, этот самый сайт успевает авторизовать пользователя, сбегать в базу, раскрасить синтаксис, выдать HTML. И всё это "с GC и аллокацией на каждый чих", и стримами, и регекспами.

S>Но нет, конечно же авторы анализаторов логов считают себя гораздо более главными. Удачи.
авторизация — доступ в нативную rdbms, сбегать в базу — аналогично, раскрасить синтаксис — если ты говоришь об уровне расскраски как на рсдне то ето даже не смешно , выдать хтмл — нативный IIS.
где тут твой C#? позвать то, взять ответ, позвать другое и дать ему ответ предыдущего? клей, сопли, грусть. Ты сам-то в какой области на C# пишешь? а то я смотрю тут каждый второй на C# пишет только дальше сайтов и ентерпрайза никто своё рыльце не высовывает, потому что атата.
People write code, programming languages don't.
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: minorlogic 
Дата: 21.03.09 06:51
Здравствуйте, hattab, Вы писали:

H>У меня был контракт с конторой, в которой зарплата расчитывалась 2.5 суток (!) (большая контора). Они тоже считали это нормальным, пока мы не сократили время до 40 минут (переписали с нуля)


Мама мия... решение матрицы 500*500 занимает доли секунды , ЧТО может занимать 40 минут даже если считать зарплату всего земного шара ??? За 40 минут можно отрендрить ролик с симуляцией жидкости и ткани .

P.S. вот это и называется различные прикладные области, в моей считаются такты и тригонометрические операции.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: minorlogic 
Дата: 21.03.09 06:56
Оценка: -1
Здравствуйте, alsemm, Вы писали:

A>После таких вопросов и появляются стереотипы, что С# отупляет


Неа , правильно выражение "разжижает мозг"
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[56]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: minorlogic 
Дата: 21.03.09 07:21
Здравствуйте, Хвост, Вы писали:

Х>правда, вот я прямо сейчас смотрю в реализацию гугловского V8, и вижу как ни странно запредельный перфоманс + надёжный и красивый код, а может тебе указать на библиотечку Blitz++ которая уделала фортран на вычислительных задачах (да, фортран, да, на вычислительных задачах) что не удавалось твоему перфоманс-фавориту Си? другое дело что мало кто так писать умеет, большинству проще на шарпах Linq'ом побаловаться или в WPF'е поформошлёпить )


Офтоп , Blitz++ в сад , boost::numeric::ublas на голову лучше (безопаснее и красивее и быстрее).
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[51]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 21.03.09 08:09
Здравствуйте, gandjustas, Вы писали:

G>Только делать так не нужно. В первую очередь стоит заняться алгоритмический оптимизацией или даже архитектурной, а не кидаться писать кастомный аллокатор.

G>Причем этот подход работает для любых языков.

Ты сам недавно писал, что архитектура ортоганальна перформансу
Re[36]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: hattab 
Дата: 21.03.09 08:10
Здравствуйте, minorlogic, Вы писали:

H>>У меня был контракт с конторой, в которой зарплата расчитывалась 2.5 суток (!) (большая контора). Они тоже считали это нормальным, пока мы не сократили время до 40 минут (переписали с нуля)


M>Мама мия... решение матрицы 500*500 занимает доли секунды , ЧТО может занимать 40 минут даже если считать зарплату всего земного шара ??? За 40 минут можно отрендрить ролик с симуляцией жидкости и ткани .


Ты наверное не думаешь, что расчет ЗП и решение матрицы это одно и тоже...

M>P.S. вот это и называется различные прикладные области, в моей считаются такты и тригонометрические операции.


Вот я и думаю, ты это серьезно, или прикалываешься
Re[74]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 21.03.09 08:49
Здравствуйте, Erop, Вы писали:

E>Скажем в твоих задачах core обычно на СУБД какой-то реализовано, а в одной из часть core была на C...

Стереотипы... Не надо думать, что на .Net создаются только "коннекторы к БД", это далеко не так. Скажем во всех проектах, на которых я работал, конечно, использовались хранимки, но куча серверной бизнес-логики была на C#. Намного больше чем в SQL и core в этих системах как раз сервер приложений, сплошь себе управляемый.
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[37]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: minorlogic 
Дата: 21.03.09 12:09
Здравствуйте, hattab, Вы писали:

H>Вот я и думаю, ты это серьезно, или прикалываешься


Между нами пропасть непонимания.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[68]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 21.03.09 18:47
Оценка: :)
Здравствуйте, Хвост, Вы писали:

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


S>>О да. Анализатор логов — это конечно гораздо промышленнее сайта с дневной посещаемостью в сотню тысяч хитов.


S>>На всякий случай напомню, что на каждую строчку лога, которую читает анализатор, этот самый сайт успевает авторизовать пользователя, сбегать в базу, раскрасить синтаксис, выдать HTML. И всё это "с GC и аллокацией на каждый чих", и стримами, и регекспами.

S>>Но нет, конечно же авторы анализаторов логов считают себя гораздо более главными. Удачи.
Х>авторизация — доступ в нативную rdbms, сбегать в базу — аналогично, раскрасить синтаксис — если ты говоришь об уровне расскраски как на рсдне то ето даже не смешно , выдать хтмл — нативный IIS.
Х>где тут твой C#? позвать то, взять ответ, позвать другое и дать ему ответ предыдущего? клей, сопли, грусть. Ты сам-то в какой области на C# пишешь? а то я смотрю тут каждый второй на C# пишет только дальше сайтов и ентерпрайза никто своё рыльце не высовывает, потому что атата.

Таким образом разработчику сайта надо:
1)продумать систему аутентификации и авторизации
2)создать схему БД, соотвествующую требованиям, обеспечивающую целостность данных и хорошую производительность
3)написать SQL или другой код для получения и изменения данных, организовать кеширование данных (возможно распределенное)
4)сделать шаблоны страниц
5)написать код для обработки данных из базы с целью исключения XSS
6)написать код для обработки данных от пользователя и размещения из в БД
7)написать код для противодействия спам-ботам
8)взаимодействовать с веб-сервером для установки кужных параметров ответа

Таким образом разработчику сайтов надо разбираться в проектировании и оптимизации БД, очень хорошо разбираться в протоколе HTTP, разбираться в безопасности приложений, разбираться в клиентских технологиях (HTML+CSS+JS), разбираться в устройтве веб-сервера.
При это сайт не должен содержать ошибок и не должен бешено тормозить, иначе толку нет даже при отсуствии конкурентов.

Разработчики enterprise софта кроме того сталкиваются с:
1)разработкой сервисов, которые отдают данные клиентам
2)разаботкой десктоп-клиентов, со сложными интерфейсами
3)разработкй мобильных клиентов, которые не всегда могут иметь связь с сервером
4)необходимостью выполнять длительные процессы (больше чем время непрерывной работы клиентов и сервера) с взаимодействием разных клиентов
При всем этом приходится постоянно подстаивать ПО под изменяющиеся требования.

И это все не касаясь еще вопросов обработки тех самых данных — от раскраски синтаксиса до построения аналичитеских систем, способных предсказывать показатели.

так что насчет невысовывания рыльца — мимо кассы.

Вам на C++ часто приходится сталкиваться с таким объемом разных задач?
Re[52]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 21.03.09 18:53
Оценка: :)
Здравствуйте, hattab, Вы писали:

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


G>>Только делать так не нужно. В первую очередь стоит заняться алгоритмический оптимизацией или даже архитектурной, а не кидаться писать кастомный аллокатор.

G>>Причем этот подход работает для любых языков.

H>Ты сам недавно писал, что архитектура ортоганальна перформансу

Да.
Архитектурная оптимизация — когда вы избавляетесь от части ненужных вычислений или делаете так что длительные вычисления не оказывают влияния на наблюдаемый перфоманс.
Re[37]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: soniq 
Дата: 22.03.09 11:09
G>Да как раз не все равно. Ты перечитай еще раз о чем я тебе толкую. .NET поребляет больше памяти на практически константную величину. Истории о том что кто-то запустил программу на .NET и она схавала сразу все свидетельствуют о криворукости автора программы, а не об особенностях работы с памятью в .NET.

Насколько я помню, 18 мегабайт это и есть тот самый минимум, который отжирает сам .Net, дальше памяти нужно много меньше.
Re[38]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 22.03.09 14:44
Здравствуйте, soniq, Вы писали:


G>>Да как раз не все равно. Ты перечитай еще раз о чем я тебе толкую. .NET поребляет больше памяти на практически константную величину. Истории о том что кто-то запустил программу на .NET и она схавала сразу все свидетельствуют о криворукости автора программы, а не об особенностях работы с памятью в .NET.


S>Насколько я помню, 18 мегабайт это и есть тот самый минимум, который отжирает сам .Net, дальше памяти нужно много меньше.


Вы неправильно понимаете.

Почитайте http://www.getdotnetcode.com/gdncstore/free/Articles/The%20Memory%20Mystery.htm
Re: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Кывт 
Дата: 22.03.09 16:31
С#. Точка.

А C++ можешь изучать в свободное время для общего развития и радоваться, что выбрал C#.

Помни: поменять язык — это тебе не два байта переслать.

Инерцию ума работодателей преодолеть весьма сложно, объясняя им, что со своим опытом и глубоким пониманием программирования ты и на другом языке сможешь прекрасно программировать, хоть у тебя и нет на нем опыта работы вообще, но джуниор-девелопером ты как-то не хочешь быть.

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

Обычно поменять язык можно, если предоставится подходящая ситуация в фирме и соответствующий проект.

Не припоминаю сишарперов, который вдруг стали сишниками.

Я знаю некоторых программистов, у которых большой опыт в разработке бизнес-приложений на C#, но C++ они в упор не способны понять.

Для C++ часто требуется на порядок более высокая квалификация, а получать ты будешь примерно столько же, сколько C# программист, ну может быть, чуть-чуть больше — в некоторых фирмах. Это относится к России, как в других странах — не знаю.

Если ты раньше писал только на C# бизнес-приложения, то перейти в C++ будет, мягко говоря, трудновато, да и непонятно — зачем?

Я вот который год пишу на C++ и мне как-то немного тревожно за свое будущее…
Re[53]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: esil 
Дата: 22.03.09 17:18
Оценка: :)
Здравствуйте, gandjustas, Вы писали:

E>>Лично мне комфортно от того, что можно пробовать строить различные архитекутры, не думая изначально о том, сколько каких мелких объектов где выделяется, потому что в случае чего можно расчехлить тяжёлую артиллерию.

G>Отличная идея. GC как раз позволяет не думать о выделении и освобождении памяти вообще.

Это не правда. Если бы GC позволял не думать о выделении и освобождении памяти, то какой смысл бы был сравнивать производительность GC и стандартного аллокатора С++? Или эти сравнения в топике были бессмысленными?
Как можно не думать о выделении и освобождении объектов, если из-за этого может оказаться очень низкая производительность приложения?

G>Если производительность окажется недостаточной то надо смотреть причны и бороться с ними.

G>Причем чаще всего прчиной оказывается применение неподходчщего алогоритма. Очень редко приходится нарываться на ситуацию когда низкая производительность вызвана особенностями платформы.

А причём здесь алгоритмы, если речь идёт о декомпозиции на объекты? Если бы дело было только в алгоритмах, то тогда не применяли бы ООП, а так бы и писали эти алгоритмы на структурных языках. Алгоритм может быть одним и тем же, но по-разному представляться с помощью объектов, работать с разными объектами. По вашим словам один и тот же алгоритм может быть одновременно "подходящим" и "неподходящим" в зависимости от используемой объектной модели задачи. А если Вы подразумеваете под разными алгоритмами использование разных объектных декомпозиций, то тогда Вы просто ограничиваете доступный набор этих декомпозиций, с помощью которых можно решить задачу, просто называя такие декомпозиции неподходящими из-за скорости выделения памяти. А если я пишу программу на С++, то выбор доступных декомпозиций расширяется. Разве я не прав?
Re[54]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 22.03.09 17:47
Оценка: -2 :))
Здравствуйте, esil, Вы писали:

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


E>>>Лично мне комфортно от того, что можно пробовать строить различные архитекутры, не думая изначально о том, сколько каких мелких объектов где выделяется, потому что в случае чего можно расчехлить тяжёлую артиллерию.

G>>Отличная идея. GC как раз позволяет не думать о выделении и освобождении памяти вообще.

E>Это не правда. Если бы GC позволял не думать о выделении и освобождении памяти, то какой смысл бы был сравнивать производительность GC и стандартного аллокатора С++? Или эти сравнения в топике были бессмысленными?

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

E>Как можно не думать о выделении и освобождении объектов, если из-за этого может оказаться очень низкая производительность приложения?

Спокойно, и произовдительность нормальная будет.

G>>Если производительность окажется недостаточной то надо смотреть причны и бороться с ними.

G>>Причем чаще всего прчиной оказывается применение неподходчщего алогоритма. Очень редко приходится нарываться на ситуацию когда низкая производительность вызвана особенностями платформы.

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

Я не об объектах говорил, а о производительности вообще.

E>А если я пишу программу на С++, то выбор доступных декомпозиций расширяется. Разве я не прав?

Неправ. Слабые выразительне способности C++ не позволяют мере проводить объектую декомпозицию так как хочется.
Re[55]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: esil 
Дата: 22.03.09 17:52
Здравствуйте, gandjustas, Вы писали:

E>>Как можно не думать о выделении и освобождении объектов, если из-за этого может оказаться очень низкая производительность приложения?

G>Спокойно, и произовдительность нормальная будет.

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

E>>А если я пишу программу на С++, то выбор доступных декомпозиций расширяется. Разве я не прав?

G>Неправ. Слабые выразительне способности C++ не позволяют мере проводить объектую декомпозицию так как хочется.

Примеры?
Re: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: les_paul 
Дата: 22.03.09 18:37
Оценка: :)
>> с чего начать: С++ или С#?

А ты подумай Сейчас вузы выпускают примерно 9 разработчиков тяготеющих к какому нить С#, к 1 толковому на С++, при примерно равном кол-ве вакансий, чтобы не быть голословным:

http://hh.ru/applicant/searchvacancyresult.xml?text=программист+С%2B%2B&professionalAreaId=0&desireableCompensation=&compensationCurrencyId=1

http://hh.ru/applicant/searchvacancyresult.xml?text=программист+С%23&professionalAreaId=0&desireableCompensation=&compensationCurrencyId=1

Да и ниши это разные совсем, о чём тут вообще спор то идёт. Приложения то языков разные совсем, давайте ещё поспорим на тему, что лучше LISP или PHP.

Тут ответ простой и ясный на вопрос, хочешь дёшево лепить корпоративные вэб сайты/сервисы и формоклёпить со скоростью света бери С#. Хочешь в перспективе работать в Apple, Google, Microsoft, в России в к примеру в Yandex ну или ещё в одном вот из этих ( http://www.research.att.com/~bs/applications.html ) "скромных" мест, в которых как известно работают одни идиоты, которые не читают RSDN и не знают, что с использованием .Net они бы сделали всё быстрее и лучше, учи С++. Только в С++ мало приятного, что в разработке, что в изучении, которое в лучшем случае продлится лет 5, а в худшем не закончится никогда. По уровню зарплат опять же в целом C++/Unix разработчики обычно получают значительно выше, при том же уровне квалификации.
Re[56]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 22.03.09 18:40
Оценка: :)
Здравствуйте, esil, Вы писали:

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


E>>>Как можно не думать о выделении и освобождении объектов, если из-за этого может оказаться очень низкая производительность приложения?

G>>Спокойно, и произовдительность нормальная будет.

E>Т. е. Вы утверждаете, что при правильно выбранном алгоритме независимо от объектной декомпозиции производительность будет одного порядка?

Для систем с GC — да. Это и позволяет концентрироваться на алгоритме.
Для C++ — нет. Там надо думать о том как распределяется память под объекты.

E>>>А если я пишу программу на С++, то выбор доступных декомпозиций расширяется. Разве я не прав?

G>>Неправ. Слабые выразительне способности C++ не позволяют мере проводить объектую декомпозицию так как хочется.
E>Примеры?
1)Как минимум нельзя просто вернуть динамический объект из метода, потому что неизвестно освободят ли его.
2)Осутствуют многие языковые конструкции как yield, ФВП, делегаты, события.
3)Отсуствие метаинформации о типах не позволяет создавать решения вроде IoC контейнеров, OR-мапперов, связывания данных (binding) и других полезных фишек.

Я знаю что некоторые недостатки исправляются бустом, но обычно это порождает сложночитемый код.
Re[57]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: esil 
Дата: 22.03.09 19:17
Здравствуйте, gandjustas, Вы писали:

E>>Т. е. Вы утверждаете, что при правильно выбранном алгоритме независимо от объектной декомпозиции производительность будет одного порядка?

G>Для систем с GC — да. Это и позволяет концентрироваться на алгоритме.

Представьте, что надо сделать текстовый редактор типа WYSIWYG. Ваша вера настолько сильна, что Вы рискнёте для представления одного символа использовать отдельный объект некоторого класса?

Представьте, что надо реализовать какую-нибудь числодробилку. Ваша вера настолько сильна, что Вы рискнёте для представления числа использовать класс?

G>Для C++ — нет. Там надо думать о том как распределяется память под объекты.


В каком смысле надо думать? Думать о том, когда и как память освободить? Ну тогда это утверждение выглядит бредово, с учётом предыдущего. "Производительность будет отличаться на порядки, потому что надо думать". Память выделяется и освобождается в обоих вариантах, но во втором варианте надо думать, чтобы её освободить, поэтому производительность будет хуже.

E>>>>А если я пишу программу на С++, то выбор доступных декомпозиций расширяется. Разве я не прав?

G>>>Неправ. Слабые выразительне способности C++ не позволяют мере проводить объектую декомпозицию так как хочется.
E>>Примеры?
G>1)Как минимум нельзя просто вернуть динамический объект из метода, потому что неизвестно освободят ли его.
G>2)Осутствуют многие языковые конструкции как yield, ФВП, делегаты, события.
G>3)Отсуствие метаинформации о типах не позволяет создавать решения вроде IoC контейнеров, OR-мапперов, связывания данных (binding) и других полезных фишек.

G>Я знаю что некоторые недостатки исправляются бустом, но обычно это порождает сложночитемый код.


Ок, в общем позиция понятна. Странно правда, что использование std::auto_ptr/boost::shared_ptr для возвращаемого объекта представляется сложночитаемым.
Re[58]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 22.03.09 19:42
Оценка: +2
Здравствуйте, esil, Вы писали:

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


E>>>Т. е. Вы утверждаете, что при правильно выбранном алгоритме независимо от объектной декомпозиции производительность будет одного порядка?

G>>Для систем с GC — да. Это и позволяет концентрироваться на алгоритме.

E>Представьте, что надо сделать текстовый редактор типа WYSIWYG. Ваша вера настолько сильна, что Вы рискнёте для представления одного символа использовать отдельный объект некоторого класса?

А такое вообще может быть нужно? Я что-то не представляю сценарий, где для одного символа требуется объект класса.
Если что есть паттерн flyweight, который как раз позволяет не создавать кучу однотипных объектов.

E>Представьте, что надо реализовать какую-нибудь числодробилку. Ваша вера настолько сильна, что Вы рискнёте для представления числа использовать класс?

А что значит класс?
Например в C# сами числа являются наследниками Object, имеют методы и реализуют интерфейсы.

Я надеюсь вы сами понимаете, что выдумываете что-то нереальное. не нужно создавать классы для символов и чисел, они уже есть и отлично работают.
А если каких-то абстракций нету в стандартной библиотеке, то я буду создавать классы.
Очень надеюсь что все программисты так поступют.

G>>Для C++ — нет. Там надо думать о том как распределяется память под объекты.

E>В каком смысле надо думать? Думать о том, когда и как память освободить? Ну тогда это утверждение выглядит бредово, с учётом предыдущего. "Производительность будет отличаться на порядки, потому что надо думать". Память выделяется и освобождается в обоих вариантах, но во втором варианте надо думать, чтобы её освободить, поэтому производительность будет хуже.

Ниче не не понял.

E>>>>>А если я пишу программу на С++, то выбор доступных декомпозиций расширяется. Разве я не прав?

G>>>>Неправ. Слабые выразительне способности C++ не позволяют мере проводить объектую декомпозицию так как хочется.
E>>>Примеры?
G>>1)Как минимум нельзя просто вернуть динамический объект из метода, потому что неизвестно освободят ли его.
G>>2)Осутствуют многие языковые конструкции как yield, ФВП, делегаты, события.
G>>3)Отсуствие метаинформации о типах не позволяет создавать решения вроде IoC контейнеров, OR-мапперов, связывания данных (binding) и других полезных фишек.
G>>Я знаю что некоторые недостатки исправляются бустом, но обычно это порождает сложночитемый код.

E>Ок, в общем позиция понятна. Странно правда, что использование std::auto_ptr/boost::shared_ptr для возвращаемого объекта представляется сложночитаемым.

Это как раз самое простое.
Вот сложночитаемомое становится при активном использовании ФВП.
Re[59]: Поздравляю :D в избранное  новое    модер. 
От: esil 
Дата: 22.03.09 20:10
Здравствуйте, gandjustas, Вы писали:

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


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


E>>>>Т. е. Вы утверждаете, что при правильно выбранном алгоритме независимо от объектной декомпозиции производительность будет одного порядка?

G>>>Для систем с GC — да. Это и позволяет концентрироваться на алгоритме.

E>>Представьте, что надо сделать текстовый редактор типа WYSIWYG. Ваша вера настолько сильна, что Вы рискнёте для представления одного символа использовать отдельный объект некоторого класса?

G>А такое вообще может быть нужно? Я что-то не представляю сценарий, где для одного символа требуется объект класса.
G>Если что есть паттерн flyweight, который как раз позволяет не создавать кучу однотипных объектов.

Вот WYSIWYG-редактор -- это как раз и есть сценарий, где для одного символа хотелось бы отдельный объект.
Наша беседа становится предсказуемой. Я знал, что сейчас Вы скажите про flyweight, а я скопирую описание сего паттерна из той известной книги.

Таки вот, копирую:

Например, в большинстве редакторов документов имеются средства форма-
тирования и редактирования текстов, в той или иной степени модульные. Объект-
но-ориентированные редакторы обычно применяют объекты для представления
таких встроенных элементов, как таблицы и рисунки. Но они не используют
объекты для представления каждого символа, несмотря на то что это увеличило
бы гибкость на самых нижних уровнях приложения. Ведь тогда к рисованию и фор-
матированию символов и встроенных элементов можно былб бы применить еди-
нообразный подход. И для поддержки новых наборов символов не пришлось бы
как-либо затрагивать остальные функции редактора. Да и общая структура прило-
жения отражала бы физическую структуру документа. На следующей диаграмме
показано, как редактор документов мог бы воспользоваться объектами для пред-
ставления символов.

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


А Вы считали зачем придумали этот паттерн? Чтобы было круто и все поняли, что авторы паттерна очень умные?

Вот это Ваше утверждение "Я что-то не представляю сценарий, где для одного символа требуется объект класса" исходит не из того, что такого никогда не хотелось бы, а из того, что такое не применяется. Не Вам не требуется или не хочется, а это скорее всего будет просто недопустимо. Вы считаете, что этот самый flyweight выглядит не более сложным и не менее хуже читаемым и спопровождаемым, чем отдельный объект для каждого символа?

E>>Представьте, что надо реализовать какую-нибудь числодробилку. Ваша вера настолько сильна, что Вы рискнёте для представления числа использовать класс?

G>А что значит класс?
G>Например в C# сами числа являются наследниками Object, имеют методы и реализуют интерфейсы.

Класс — это значит уж точно не то, что представляют из себя примитивные типы с автоматическим боксингом в C#.
Кстати, это не с Вами мы разбирали тот пример с обходом plain-массива по индексам и обхода через интерфейс? Или я путаю?

G>Я надеюсь вы сами понимаете, что выдумываете что-то нереальное. не нужно создавать классы для символов и чисел, они уже есть и отлично работают.

G>А если каких-то абстракций нету в стандартной библиотеке, то я буду создавать классы.
G>Очень надеюсь что все программисты так поступют.

В каком смысле нереальное? Нереальное в плане затрат на реализацию? Так оно о том и речь. С тем, что скорее всего можно найти объектную декомпозицию, которая будет менее затратной по производительности, и более-менее "красивой", никто и не спорит. Но это никак не противоречит неверености вашего исходного утверждения о том, что все объектные декомпозиции имеют производительность одного порядка.

G>>>Для C++ — нет. Там надо думать о том как распределяется память под объекты.

E>>В каком смысле надо думать? Думать о том, когда и как память освободить? Ну тогда это утверждение выглядит бредово, с учётом предыдущего. "Производительность будет отличаться на порядки, потому что надо думать". Память выделяется и освобождается в обоих вариантах, но во втором варианте надо думать, чтобы её освободить, поэтому производительность будет хуже.
G>
G>Ниче не не понял.

Имелось в виду, что здесь очередной плевок в сторону С++ и unmanaged-языков был абсолютно не уместен, потому что здесь либо для обоих вариантов ответ да, либо для обоих нет.
Re[60]: Поздравляю :D в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 22.03.09 20:37
Здравствуйте, esil, Вы писали:

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


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


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


E>>>>>Т. е. Вы утверждаете, что при правильно выбранном алгоритме независимо от объектной декомпозиции производительность будет одного порядка?

G>>>>Для систем с GC — да. Это и позволяет концентрироваться на алгоритме.

E>>>Представьте, что надо сделать текстовый редактор типа WYSIWYG. Ваша вера настолько сильна, что Вы рискнёте для представления одного символа использовать отдельный объект некоторого класса?

G>>А такое вообще может быть нужно? Я что-то не представляю сценарий, где для одного символа требуется объект класса.
G>>Если что есть паттерн flyweight, который как раз позволяет не создавать кучу однотипных объектов.

E>Вот WYSIWYG-редактор -- это как раз и есть сценарий, где для одного символа хотелось бы отдельный объект.

Я к сожалению или к счастью визивиги не писал, но не очень понимаю зачем иметь объекты на каждый символ.
Может вы объясните?

E>Наша беседа становится предсказуемой. Я знал, что сейчас Вы скажите про flyweight, а я скопирую описание сего паттерна из той известной книги.

E>Таки вот, копирую:
E>

поскипано

E>А Вы считали зачем придумали этот паттерн? Чтобы было круто и все поняли, что авторы паттерна очень умные?
Какое отношение это имеет к теме разговора?

E>Вот это Ваше утверждение "Я что-то не представляю сценарий, где для одного символа требуется объект класса" исходит не из того, что такого никогда не хотелось бы, а из того, что такое не применяется. Не Вам не требуется или не хочется, а это скорее всего будет просто недопустимо. Вы считаете, что этот самый flyweight выглядит не более сложным и не менее хуже читаемым и спопровождаемым, чем отдельный объект для каждого символа?

Не понял что вы этим хотели сказать.
Давайте так: объясните зачем создавать какой-то класс, если уже существует подходящий тип в базовой библиотеке.

E>>>Представьте, что надо реализовать какую-нибудь числодробилку. Ваша вера настолько сильна, что Вы рискнёте для представления числа использовать класс?

G>>А что значит класс?
G>>Например в C# сами числа являются наследниками Object, имеют методы и реализуют интерфейсы.

E>Класс — это значит уж точно не то, что представляют из себя примитивные типы с автоматическим боксингом в C#.

Так что представляют из себя классы? Причем тут боксинг вообще?

E>Кстати, это не с Вами мы разбирали тот пример с обходом plain-массива по индексам и обхода через интерфейс? Или я путаю?

Не припоминаю, наверное не со мной.

G>>Я надеюсь вы сами понимаете, что выдумываете что-то нереальное. не нужно создавать классы для символов и чисел, они уже есть и отлично работают.

G>>А если каких-то абстракций нету в стандартной библиотеке, то я буду создавать классы.
G>>Очень надеюсь что все программисты так поступют.

E>В каком смысле нереальное? Нереальное в плане затрат на реализацию? Так оно о том и речь. С тем, что скорее всего можно найти объектную декомпозицию, которая будет менее затратной по производительности, и более-менее "красивой", никто и не спорит. Но это никак не противоречит неверености вашего исходного утверждения о том, что все объектные декомпозиции имеют производительность одного порядка.

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

G>>>>Для C++ — нет. Там надо думать о том как распределяется память под объекты.

E>>>В каком смысле надо думать? Думать о том, когда и как память освободить? Ну тогда это утверждение выглядит бредово, с учётом предыдущего. "Производительность будет отличаться на порядки, потому что надо думать". Память выделяется и освобождается в обоих вариантах, но во втором варианте надо думать, чтобы её освободить, поэтому производительность будет хуже.
G>>
G>>Ниче не не понял.

E>Имелось в виду, что здесь очередной плевок в сторону С++ и unmanaged-языков был абсолютно не уместен, потому что здесь либо для обоих вариантов ответ да, либо для обоих нет.

Это надо еще доказать. Ваш пример с визивигом доказательство не является, потому что он явно надуманный и нифига не обощается. Далеко не во всех программах есть очень много одинаковых объектов.
Re[18]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: -MyXa- 
Дата: 22.03.09 20:41
Здравствуйте, NikeByNike, Вы писали:

NBN>Я когда пишу на С++ — просто выделяю память, и не занимаюсь её освобожденим — пока в этом нет необходимости.


Тут бы любителям GC и спросить, дескать, как это — "не занимаюсь её освобождением" (и памяти, и других ресурсов, и вообще не ресурсов) и без GC. И, получив ответ, обратиться в веру С++. Увы Вам.
Если не поможет, будем действовать током... 600 Вольт (C)
Re[61]: Поздравляю :D в избранное  новое    модер. 
От: esil 
Дата: 22.03.09 21:57
Здравствуйте, gandjustas, Вы писали:

E>>Вот WYSIWYG-редактор -- это как раз и есть сценарий, где для одного символа хотелось бы отдельный объект.

G>Я к сожалению или к счастью визивиги не писал, но не очень понимаю зачем иметь объекты на каждый символ.
G>Может вы объясните?

Документ состоит из абзацев. Абзац из "символов". Пока он состоит только из символов, всё просто. Когда в качестве "символа" может быть таблица, рисунок, формула, спецсимвол, объект OLE, что угодно, то сразу напрашивается сделать этот символ классом, а все вышеуказанные объекты сделать наследником этого класса, чтобы с ними можно было единообразно работать. Как уже было сказано тут возникают проблемы с накладными расходами, если представлять каждый символ в виде объекта. В качестве решения предлагается паттерн flyweight, в котором для одинаковых символов используется один и тот же объект. Но у разных одних и тех же символов могут быть разные атрибуты форматирования (шрифт, цвет). В предлагаемом паттерне эти атрибуты хранятся отдельно, и передаются при рисовании в качестве параметров методов. Но эти параметры нужны в основном только символам, таблицам и картинкам они уже не нужны! В результате получается, что такому объекту как картинка при рисовании требуется зачем-то передать шрифт и цвет, которые никак не используются. Разве Вам уже не кажется, что дизайн так себе? Лично мне уже кажется.

Вообще, у нас есть структура, в которой символ является минимальной единицей форматирования, т. е. форматирование может быть назначено каждому символу отдельно. Не логично ли при этом для каждого символа хранить форматирование, а так как оно используется только для символов, то перенести его в класс символа? Мне кажется это логичным. Да, это потребует больше памяти, потому что форматирование будет храниться посимвольно, а не интервалами. Лет 10 назад возможно это и не было бы приемлимо, но сейчас дополнительные 4 байта на символ мне не кажутся слишком большими расходами, если уж даже flyweight предполагает 4 байта на него. Т. е. с издержками на память можно как-то согласиться. Но ешё есть издержки на выделение/освобождение объекта для каждого символа, с которыми, по моему мнению (да и по Вашему как я понял) могут быть большие проблемы.

E>>Наша беседа становится предсказуемой. Я знал, что сейчас Вы скажите про flyweight, а я скопирую описание сего паттерна из той известной книги.

E>>Таки вот, копирую:
E>>

G>поскипано

E>>А Вы считали зачем придумали этот паттерн? Чтобы было круто и все поняли, что авторы паттерна очень умные?
G>Какое отношение это имеет к теме разговора?

К какой из тем? Про независимость производительности от декомпозиции на объекты? Имеет такое, что есть декомпозиции, в которых издержки на выделение/освобождение объектов становятся недопустимыми. Какое отношение эта тема имеет к C#/C++? Ну давайте Вы уже скорее согласитесь с тем, что не все декомпозиции равноценны по производительности, и пойдём дальше?

E>>Вот это Ваше утверждение "Я что-то не представляю сценарий, где для одного символа требуется объект класса" исходит не из того, что такого никогда не хотелось бы, а из того, что такое не применяется. Не Вам не требуется или не хочется, а это скорее всего будет просто недопустимо. Вы считаете, что этот самый flyweight выглядит не более сложным и не менее хуже читаемым и спопровождаемым, чем отдельный объект для каждого символа?

G>Не понял что вы этим хотели сказать.
G>Давайте так: объясните зачем создавать какой-то класс, если уже существует подходящий тип в базовой библиотеке.

Чтобы сделать в нём виртуальный метод.

E>>Класс — это значит уж точно не то, что представляют из себя примитивные типы с автоматическим боксингом в C#.

G>Так что представляют из себя классы? Причем тут боксинг вообще?
E>>Кстати, это не с Вами мы разбирали тот пример с обходом plain-массива по индексам и обхода через интерфейс? Или я путаю?
G>Не припоминаю, наверное не со мной.

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

E>>В каком смысле нереальное? Нереальное в плане затрат на реализацию? Так оно о том и речь. С тем, что скорее всего можно найти объектную декомпозицию, которая будет менее затратной по производительности, и более-менее "красивой", никто и не спорит. Но это никак не противоречит неверености вашего исходного утверждения о том, что все объектные декомпозиции имеют производительность одного порядка.

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

Выше написал про редактор.

G>>>>>Для C++ — нет. Там надо думать о том как распределяется память под объекты.

E>>>>В каком смысле надо думать? Думать о том, когда и как память освободить? Ну тогда это утверждение выглядит бредово, с учётом предыдущего. "Производительность будет отличаться на порядки, потому что надо думать". Память выделяется и освобождается в обоих вариантах, но во втором варианте надо думать, чтобы её освободить, поэтому производительность будет хуже.
G>>>
G>>>Ниче не не понял.

E>>Имелось в виду, что здесь очередной плевок в сторону С++ и unmanaged-языков был абсолютно не уместен, потому что здесь либо для обоих вариантов ответ да, либо для обоих нет.

G>Это надо еще доказать. Ваш пример с визивигом доказательство не является, потому что он явно надуманный и нифига не обощается. Далеко не во всех программах есть очень много одинаковых объектов.

Причём здесь пример с WYSIWYG? Причём здесь то, что "Далеко не во всех программах есть очень много одинаковых объектов"?
Что доказать? Что выделение/освобождение памяти является и там и там операцией довольно тяжеловесной примерно одного порядка? Вы издеваетесь что ли? Вы правда думаете, что выделение объекта в .net настолько быстрое, что на него можно не обращать внимание, а в С++ оно настолько медленнее, что там уже надо обращать внимание? Вы правда считаете, что при одинаковой объектной декомпозиции в C# и C++ затраты на работу с памятью в C# будут на порядок меньше?

Знаете, складывается такое ощущение, что Вы читаете текст моих постов только для того, чтобы хоть как-то аргументированно возразить, независимо от того, что я напишу, потому-что Вам кажется, что если Вы хоть с чем-то согласитесь, то это будет сразу же автоматически и неминуемо означать, что C# дерьмо, а С++ рулит.
Re[62]: Поздравляю :D в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 22.03.09 22:45
Здравствуйте, esil, Вы писали:

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


E>>>Вот WYSIWYG-редактор -- это как раз и есть сценарий, где для одного символа хотелось бы отдельный объект.

G>>Я к сожалению или к счастью визивиги не писал, но не очень понимаю зачем иметь объекты на каждый символ.
G>>Может вы объясните?

E>Документ состоит из абзацев. Абзац из "символов". Пока он состоит только из символов, всё просто. Когда в качестве "символа" может быть таблица, рисунок, формула, спецсимвол, объект OLE, что угодно, то сразу напрашивается сделать этот символ классом, а все вышеуказанные объекты сделать наследником этого класса, чтобы с ними можно было единообразно работать. Как уже было сказано тут возникают проблемы с накладными расходами, если представлять каждый символ в виде объекта. В качестве решения предлагается паттерн flyweight, в котором для одинаковых символов используется один и тот же объект. Но у разных одних и тех же символов могут быть разные атрибуты форматирования (шрифт, цвет). В предлагаемом паттерне эти атрибуты хранятся отдельно, и передаются при рисовании в качестве параметров методов. Но эти параметры нужны в основном только символам, таблицам и картинкам они уже не нужны! В результате получается, что такому объекту как картинка при рисовании требуется зачем-то передать шрифт и цвет, которые никак не используются. Разве Вам уже не кажется, что дизайн так себе? Лично мне уже кажется.

И мне кажется.
Нафиг не нужны символы текста как отдельные объекты. Строк достаточно.
В таком случае сразу отпадает необходимость использовать flyweight.

E>Вообще, у нас есть структура, в которой символ является минимальной единицей форматирования, т. е. форматирование может быть назначено каждому символу отдельно. Не логично ли при этом для каждого символа хранить форматирование, а так как оно используется только для символов, то перенести его в класс символа? Мне кажется это логичным. Да, это потребует больше памяти, потому что форматирование будет храниться посимвольно, а не интервалами.

Если нужно форматирование посимвольно, то это правильно.
Но например в HTML такое не нужно, тем не менее работает.

E>Лет 10 назад возможно это и не было бы приемлимо, но сейчас дополнительные 4 байта на символ мне не кажутся слишком большими расходами, если уж даже flyweight предполагает 4 байта на него. Т. е. с издержками на память можно как-то согласиться. Но ешё есть издержки на выделение/освобождение объекта для каждого символа, с которыми, по моему мнению (да и по Вашему как я понял) могут быть большие проблемы.

Ну даже если вынести символы отдельно и использовать flyweight, то это никак не решит проблемы создания кучи мелких объектов для аттрибутов символа.

При создании объектов надо определиться с равенством объектов.
Паттерн flyweigth говорит нам что если создается много объектов, но при этом разных (в смысле равентсва) объектов не так много, то лучше не создавать объекты, а использовать идентичные (одни и теже) объекты, созданные заранее.

E>>>Имелось в виду, что здесь очередной плевок в сторону С++ и unmanaged-языков был абсолютно не уместен, потому что здесь либо для обоих вариантов ответ да, либо для обоих нет.

G>>Это надо еще доказать. Ваш пример с визивигом доказательство не является, потому что он явно надуманный и нифига не обощается. Далеко не во всех программах есть очень много одинаковых объектов.
E>
E>Причём здесь пример с WYSIWYG? Причём здесь то, что "Далеко не во всех программах есть очень много одинаковых объектов"?
E>Что доказать? Что выделение/освобождение памяти является и там и там операцией довольно тяжеловесной примерно одного порядка?
Это не так.

E>Вы издеваетесь что ли?

Нет

E>Вы правда думаете, что выделение объекта в .net настолько быстрое, что на него можно не обращать внимание,

Да, сдвиг указателя и все.

E>а в С++ оно настолько медленнее, что там уже надо обращать внимание?

С++ медленнее, но обращать внимание все равно не надо.

В C++ надо обращать внимание на сам факт освобождения или использовать что-то типа auto_ptr или shared_ptr, которые создают свой оверхед.

E>Вы правда считаете, что при одинаковой объектной декомпозиции в C# и C++ затраты на работу с памятью в C# будут на порядок меньше?

Она одинаковой не будет.

E>Знаете, складывается такое ощущение, что Вы читаете текст моих постов только для того, чтобы хоть как-то аргументированно возразить, независимо от того, что я напишу, потому-что Вам кажется, что если Вы хоть с чем-то согласитесь, то это будет сразу же автоматически и неминуемо означать, что C# дерьмо, а С++ рулит.

Мне кажется с точностью до наоборот.
Re[62]: Поздравляю :D в избранное  новое    модер. 
От: Mamuthttp://dmitriid.com/
Дата: 23.03.09 07:10
Оценка: +2
e> Документ состоит из абзацев. Абзац из "символов".

все дальше поскипано. в тх ж GoF, если мне не изеняет память, описано как надо делать для сложного форатирования и т.п. Никому не нужно иметь на каждый символ по классу/экземпляру класса.
Re[60]: Поздравляю :D в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 23.03.09 08:21
Здравствуйте, esil, Вы писали:

E>А Вы считали зачем придумали этот паттерн? Чтобы было круто и все поняли, что авторы паттерна очень умные?

Меня всегда умиляла способность читать книгу и ничерта не понимать.
Ты не заметил, что паттерн позволяет заменить часть программы так, чтобы уменьшить накладные расходы до приемлемых?
При этом основным алгоритмам наплевать, один и тот же там объект или разные.
Это как раз пример того, что мы
а) сначала пишем систему так, как нам удобно — все алгоритмы (например, разбиения на строки и страницы) пишутся очевидным и красивым образом
б) при помощи профайлера выясняем источник проблемы
в) заменяем нехорошую часть алгоритма.
Например, для текстового редактора мы бы всего лишь изменили маленький фрагмент кода, тот, где фабрика Char-ов. Возможно, закомментировали бы метод Char.Equals (чтобы использовать дефолтный ReferenceEquals, который быстрее). И всё! Где тут "заранее проектировать с учетом быстродействия"?
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[50]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 23.03.09 08:27
Оценка:6 (2)
Здравствуйте, CreatorCray, Вы писали:

CC>CPUID: Intel(R) Pentium(R) D CPU 2.66GHz

А вот на той же машине скорость аллокации через ThreadPoolAlloc, склепаный "по-быстрому, на коленке" интереса ради для проверки теории Тормозящей Синхронизации
Суть: отдельный пул на каждый поток с возможностью deferred delete из другого потока.

VS 2003 + ICC 11, C++ : 0 или 16 (видимо разрешения GetTickCount не хватает)

Заменил на вывод времени в секундах, замеренное через RDTSC

#include <CrayLib.h>
#include "threadpoolalloc.h"

int main()
{
    Duration timer;
    timer.Start();

    for(int i=0; i<1000000; i++)
    {        
        int* arr = (int*)ThreadPoolAlloc::Alloc (sizeof(int)*64);
        ThreadPoolAlloc::Free (arr);
    }

    timer.End();

    crprintf(L"%.15f\n", timer.GetSeconds());
    return 0;
}


В итоге:

ThreadPoolAlloc : 0.009060842642408 сек
new []/delete []: 0.198343848866225 сек

Exeшники для "побаловаться" брать тут: http://creatorcray.googlepages.com/testAlloc.rar (45Kb)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[61]: Поздравляю :D в избранное  новое    модер. 
От: hattab 
Дата: 23.03.09 10:36
Оценка:3 (3)
Здравствуйте, Sinclair, Вы писали:

E>>А Вы считали зачем придумали этот паттерн? Чтобы было круто и все поняли, что авторы паттерна очень умные?

S>Меня всегда умиляла способность читать книгу и ничерта не понимать.
S>Ты не заметил, что паттерн позволяет заменить часть программы так, чтобы уменьшить накладные расходы до приемлемых?
S>При этом основным алгоритмам наплевать, один и тот же там объект или разные.
S>Это как раз пример того, что мы
S>а) сначала пишем систему так, как нам удобно — все алгоритмы (например, разбиения на строки и страницы) пишутся очевидным и красивым образом
S>б) при помощи профайлера выясняем источник проблемы
S>в) заменяем нехорошую часть алгоритма.
S>Например, для текстового редактора мы бы всего лишь изменили маленький фрагмент кода, тот, где фабрика Char-ов. Возможно, закомментировали бы метод Char.Equals (чтобы использовать дефолтный ReferenceEquals, который быстрее). И всё! Где тут "заранее проектировать с учетом быстродействия"?

Меня тоже много чего умиляет... Хочешь аналогию на примере парсинга XML-RPC пакетов (ну, оно мое родное и близкое)?

a) сначала пишем систему так, как нам удобно — все алгоритмы (например, парсинг XML, валидация и маппинг) пишутся очевидным и красивым образом. -- Используется XML ридер с DOM. По DOM делается валидация модели пакетов XML-RPC и маппинг на языковые типы.

б) при помощи профайлера выясняем источник проблемы. -- Им оказывается именно построение DOM (там и по памяти оверхед получаем и по перформансу).

в) заменяем нехорошую часть алгоритма. -- Выкидываем DOM и переписываем на SAX (при этом меняется весь алгоритм вообще)

S>И всё! Где тут "заранее проектировать с учетом быстродействия"?


И все! Приплыли. Выкинули весь парсинг, валидацию, маппинг и переписали. Лень было проектировать заранее.
Re[57]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 23.03.09 10:55
Здравствуйте, gandjustas, Вы писали:

G>Для C++ — нет. Там надо думать о том как распределяется память под объекты.

Только если профайлер тычет пальцем в распределение памяти под объекты. А такое обычно бывает если выделяется много мелких объектиков.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[51]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 23.03.09 11:28
Здравствуйте, CreatorCray, Вы писали:

Посыпаю голову пеплом: забыл добавить еще один вызов (ThreadPoolAlloc::ExitThread()) в конце потока, чтоб грохнуло пул и уже точно всё было учтено

Теперь ThreadPoolAlloc : 0.009068380170764 сек

Exeшники обновил
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[62]: Поздравляю :D в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 23.03.09 13:41
Здравствуйте, hattab, Вы писали:

H>И все! Приплыли. Выкинули весь парсинг, валидацию, маппинг и переписали. Лень было проектировать заранее.

Это оттого, что вы с самого начала писали маппинг плохим, неочевидным и неудобным способом.
Вы перемешали логику реализации с логикой задачи. Конечно вы в итоге огребли. Это стопроцентная гарантия.

А вот если бы у вас маппинг был описан декларативно (см. XmlRootAttribute, XmlElementAttribute, XmlAttributeAttribute и т.п.), то вы бы легко заменили DOM-based serializer на SAX-based serializer.

Аналогичные примеры приводят всякие умники про "изначальный выбор алгоритма сортировки" и прочую ботву. Их проблемы — ровно аналогичны. Зачем писать программы в настолько связанном стиле?
Все ведущие собаководы говорят: выражайте намерения, а не действия. Потому что действия изменчивы, а намерения стабильны.
Я приводил ссылку на блог Липперта. Один товарищ там Липперта обвинил в том, что тот дескать намеренно пессимизировал программу, чтобы легче было оптимизировать потом.
Нет, Липперт просто написал программу в максимально декларативном виде. Благодаря этому ему было легко подменить, к примеру, реализацию коллекции.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[63]: Поздравляю :D в избранное  новое    модер. 
От: hattab 
Дата: 23.03.09 14:01
Здравствуйте, Sinclair, Вы писали:

H>>И все! Приплыли. Выкинули весь парсинг, валидацию, маппинг и переписали. Лень было проектировать заранее.

S>Это оттого, что вы с самого начала писали маппинг плохим, неочевидным и неудобным способом.
S>Вы перемешали логику реализации с логикой задачи. Конечно вы в итоге огребли. Это стопроцентная гарантия.

S>А вот если бы у вас маппинг был описан декларативно (см. XmlRootAttribute, XmlElementAttribute, XmlAttributeAttribute и т.п.), то вы бы легко заменили DOM-based serializer на SAX-based serializer.


Слушай, ты по фотографии не лечишь? А то появляются у меня смутные подозрения... Ты понимаешь как отличается алгоритм при работе с DOM и SAX? Кардинально. Общности там вообще ни какой нет. Если в случае с DOM я могу делать маппинг с готовой модели, то используя SAX я вынужден маппинг и валидацию делать по ходу пьессы (кстати, речь идет о парсинге).
Re[64]: Поздравляю :D в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 23.03.09 14:44
Здравствуйте, hattab, Вы писали:

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


H>>>И все! Приплыли. Выкинули весь парсинг, валидацию, маппинг и переписали. Лень было проектировать заранее.

S>>Это оттого, что вы с самого начала писали маппинг плохим, неочевидным и неудобным способом.
S>>Вы перемешали логику реализации с логикой задачи. Конечно вы в итоге огребли. Это стопроцентная гарантия.

S>>А вот если бы у вас маппинг был описан декларативно (см. XmlRootAttribute, XmlElementAttribute, XmlAttributeAttribute и т.п.), то вы бы легко заменили DOM-based serializer на SAX-based serializer.


H>Слушай, ты по фотографии не лечишь? А то появляются у меня смутные подозрения... Ты понимаешь как отличается алгоритм при работе с DOM и SAX? Кардинально. Общности там вообще ни какой нет. Если в случае с DOM я могу делать маппинг с готовой модели, то используя SAX я вынужден маппинг и валидацию делать по ходу пьессы (кстати, речь идет о парсинге).


А с чего ты взял что DOM гораздо удобнее для этой задачи?
Традиционно входящими данными для парсера явяляется поток лексем. В вашем случае интерфейс, представляющий XML как поток лексем — StAX.
Re[64]: Поздравляю :D в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 23.03.09 14:48
Здравствуйте, hattab, Вы писали:
H>Слушай, ты по фотографии не лечишь? А то появляются у меня смутные подозрения... Ты понимаешь как отличается алгоритм при работе с DOM и SAX? Кардинально.
Алгоритм, пардон, чего?
Я призываю всего лишь отделить конкретный маппинг от алгоритма маппинга. Ничего военного в этом нету.

H>Общности там вообще ни какой нет. Если в случае с DOM я могу делать маппинг с готовой модели, то используя SAX я вынужден маппинг и валидацию делать по ходу пьессы (кстати, речь идет о парсинге).

Ничего не понимаю. Модель у тебя в любом случае готова до начала десериализации — она статически размечена атрибутами на сериализуемых типах.
Единственное "радикальное отличие" — в том, чтобы делать один проход по потоку, а не два (один для валидации, другой для маппинга).
Нормально написанный код переделать с DOM-парсера на SAX-парсер — пара пустяков. По сравнению, естественно, с переделкой всего клиентского кода, который выполняет реальные вызовы реального ендпоинта.

Покажи мне фрагмент того кода, который вам запредельно сложно переводить в SAX-based. Может, я чего-то кардинально не понимаю?
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[65]: Поздравляю :D в избранное  новое    модер. 
От: hattab 
Дата: 23.03.09 14:51
Здравствуйте, gandjustas, Вы писали:

G>А с чего ты взял что DOM гораздо удобнее для этой задачи?


С того, что я решил эту задачу используя SAX, и могу со знанием дела утверждать, что удобнее, а что нет в данном случае.

G>Традиционно входящими данными для парсера явяляется поток лексем. В вашем случае интерфейс, представляющий XML как поток лексем — StAX.


Это не просто парсинг XML, это еще и валидация модели XML-RPC + маппинг. К слову сказать, в XML-RPC.NET все сделано на основе DOM, так там алгоритм кристально чист и линеен. В случае с SAX, необходим конечный автомат со стеком (гемороя больше в разы, если не на порядок. но и профита море).
Re[65]: Поздравляю :D в избранное  новое    модер. 
От: hattab 
Дата: 23.03.09 15:03
Здравствуйте, Sinclair, Вы писали:

H>>Ты понимаешь как отличается алгоритм при работе с DOM и SAX? Кардинально.

S>Алгоритм, пардон, чего?
S>Я призываю всего лишь отделить конкретный маппинг от алгоритма маппинга. Ничего военного в этом нету.

Алгоритм валидации модели пакета XML-RPC + ее маппинг на языковые типы.

H>>Общности там вообще ни какой нет. Если в случае с DOM я могу делать маппинг с готовой модели, то используя SAX я вынужден маппинг и валидацию делать по ходу пьессы (кстати, речь идет о парсинге).

S>Ничего не понимаю. Модель у тебя в любом случае готова до начала десериализации — она статически размечена атрибутами на сериализуемых типах.

Не-не-не. Ты понятия не имеешь, что у тебя на входе, и во что это превратится на выходе. Ни какой статики тут нет.

S>Единственное "радикальное отличие" — в том, чтобы делать один проход по потоку, а не два (один для валидации, другой для маппинга).


Различие в том, что в имея DOM ты можешь свалидировать и смапить все за раз, а в случае SAX ты будешь по кусочкам выполнять эти действия.

S>Нормально написанный код переделать с DOM-парсера на SAX-парсер — пара пустяков. По сравнению, естественно, с переделкой всего клиентского кода, который выполняет реальные вызовы реального ендпоинта.


Клиентский код мы не трогаем, его переделывать в случае смены DOM<->SAX вообще не придется.

S>Покажи мне фрагмент того кода, который вам запредельно сложно переводить в SAX-based. Может, я чего-то кардинально не понимаю?


У меня нет кода работающего с DOM, т.к. у меня решение на SAX (просто я знаю, как бы мне было легче все сделать используя DOM). Но на http://www.xml-rpc.net.com/ есть код работающий с DOM.
Re[66]: Поздравляю :D в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 23.03.09 15:10
Здравствуйте, hattab, Вы писали:

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


G>>А с чего ты взял что DOM гораздо удобнее для этой задачи?


H>С того, что я решил эту задачу используя SAX, и могу со знанием дела утверждать, что удобнее, а что нет в данном случае.

Весь прикол в том что для этой задачи DOM и SAX одинаково хреново подходят.

G>>Традиционно входящими данными для парсера явяляется поток лексем. В вашем случае интерфейс, представляющий XML как поток лексем — StAX.


H>Это не просто парсинг XML, это еще и валидация модели XML-RPC + маппинг. К слову сказать, в XML-RPC.NET все сделано на основе DOM, так там алгоритм кристально чист и линеен.


Там используется DOM, хотя вполне хватило бы того самого StAX (XMLReader) ибо вся сериализация-десериализация выполняется потоково.
Re[67]: Поздравляю :D в избранное  новое    модер. 
От: hattab 
Дата: 23.03.09 15:19
Здравствуйте, gandjustas, Вы писали:

G>>>А с чего ты взял что DOM гораздо удобнее для этой задачи?


H>>С того, что я решил эту задачу используя SAX, и могу со знанием дела утверждать, что удобнее, а что нет в данном случае.

G>Весь прикол в том что для этой задачи DOM и SAX одинаково хреново подходят.

Реши ее по другому, и покажи тут свое решение. Тода и поговорим

G>>>Традиционно входящими данными для парсера явяляется поток лексем. В вашем случае интерфейс, представляющий XML как поток лексем — StAX.


H>>Это не просто парсинг XML, это еще и валидация модели XML-RPC + маппинг. К слову сказать, в XML-RPC.NET все сделано на основе DOM, так там алгоритм кристально чист и линеен.

G>
G>Там используется DOM, хотя вполне хватило бы того самого StAX (XMLReader) ибо вся сериализация-десериализация выполняется потоково.

Ты рассуждаешь о задаче, которую, видимо, даже не представляешь.
Re[68]: Поздравляю :D в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 23.03.09 15:42
Здравствуйте, hattab, Вы писали:

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


G>>>>А с чего ты взял что DOM гораздо удобнее для этой задачи?


H>>>С того, что я решил эту задачу используя SAX, и могу со знанием дела утверждать, что удобнее, а что нет в данном случае.

G>>Весь прикол в том что для этой задачи DOM и SAX одинаково хреново подходят.
H>Реши ее по другому, и покажи тут свое решение. Тода и поговорим
Я уже подумал об этом.

G>>>>Традиционно входящими данными для парсера явяляется поток лексем. В вашем случае интерфейс, представляющий XML как поток лексем — StAX.

H>>>Это не просто парсинг XML, это еще и валидация модели XML-RPC + маппинг. К слову сказать, в XML-RPC.NET все сделано на основе DOM, так там алгоритм кристально чист и линеен.
G>>
G>>Там используется DOM, хотя вполне хватило бы того самого StAX (XMLReader) ибо вся сериализация-десериализация выполняется потоково.
H>Ты рассуждаешь о задаче, которую, видимо, даже не представляешь.
О да, я ни разу не парсил XML и не строил по нему какие-то объекты...
Re[63]: Поздравляю :D в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 23.03.09 17:55
Оценка: +3
Здравствуйте, Sinclair, Вы писали:

S>Вы перемешали логику реализации с логикой задачи. Конечно вы в итоге огребли. Это стопроцентная гарантия.


Она частенько перемешивается.

S>А вот если бы у вас маппинг был описан декларативно (см. XmlRootAttribute, XmlElementAttribute, XmlAttributeAttribute и т.п.), то вы бы легко заменили DOM-based serializer на SAX-based serializer.


Давай будем честными сами с собой. Реализовать оторванный от API парсинг ХМЛ-я очень не просто.

Как, например, описать такое отображение (маппинг) на Шарпе и потом связать его с реализациями на основе DOM и MxlReader?

Не получится ли код интерпретации отображения больше основной задачи (в несколько раз)?
Ведь очень легко сказать, что для решения задачи Х "просто" нужно создать подходящий фрэймворк или библиотеку, а потом "просто" использовать его. Но создание таких фрэймворков само по себе не простая задача. Особенно когда язык для этого не предоставляет должных средств.

S>Аналогичные примеры приводят всякие умники про "изначальный выбор алгоритма сортировки" и прочую ботву. Их проблемы — ровно аналогичны.


Не. Разные алгоритмы могут сортировки могут иметь общий интерфейс. А вот разные АПИ — нет.

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

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

Так что подумать перед реализацией было бы не лишним. Главное не зацикливаться на этом. А то может статься, что работа подвиснет на стадии оптимизаций и выбора самого оптимального решения.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[66]: Поздравляю :D в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 23.03.09 17:56
Здравствуйте, hattab, Вы писали:

H>С того, что я решил эту задачу используя SAX, и могу со знанием дела утверждать, что удобнее, а что нет в данном случае.


Не зарекайся. А то когда решить эту задачу с помощью ФВП и рекурсии, то окажется, что это удобнее чем САКсы, шамксы и другие дурДОМы.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[66]: Поздравляю :D в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 23.03.09 18:00
Здравствуйте, hattab, Вы писали:

H>Это не просто парсинг XML, это еще и валидация модели XML-RPC + маппинг.


А зачем ты вообще это вручную делал? Создал бы по метаинформации подходящий XSD и выполнил бы проверк соответствия схеме твоих данных.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[67]: Поздравляю :D в избранное  новое    модер. 
От: hattab 
Дата: 23.03.09 18:19
Здравствуйте, VladD2, Вы писали:

H>>С того, что я решил эту задачу используя SAX, и могу со знанием дела утверждать, что удобнее, а что нет в данном случае.


VD>Не зарекайся. А то когда решить эту задачу с помощью ФВП и рекурсии, то окажется, что это удобнее чем САКсы, шамксы и другие дурДОМы.


Ну, я же относительно DOM и SAX
Re[67]: Поздравляю :D в избранное  новое    модер. 
От: hattab 
Дата: 23.03.09 18:19
Здравствуйте, VladD2, Вы писали:

H>>Это не просто парсинг XML, это еще и валидация модели XML-RPC + маппинг.


VD>А зачем ты вообще это вручную делал? Создал бы по метаинформации подходящий XSD и выполнил бы проверк соответствия схеме твоих данных.


Во-первых перформанс. Во-вторых у XML-RPC пакетов есть нюансы, которые схемой не описываются. Ну и в третьих, у меня есть некоторые особенности при работе с большим контентом в base64.
Re[68]: Поздравляю :D в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 23.03.09 18:44
Здравствуйте, hattab, Вы писали:

VD>>А зачем ты вообще это вручную делал? Создал бы по метаинформации подходящий XSD и выполнил бы проверк соответствия схеме твоих данных.


H>Во-первых перформанс.


А ты измерял разницу? Проверка схем вроде как была очень эффективно реализована. Или я ошибаюсь?
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[69]: Поздравляю :D в избранное  новое    модер. 
От: hattab 
Дата: 23.03.09 19:20
Здравствуйте, VladD2, Вы писали:

VD>>>А зачем ты вообще это вручную делал? Создал бы по метаинформации подходящий XSD и выполнил бы проверк соответствия схеме твоих данных.


H>>Во-первых перформанс.


VD>А ты измерял разницу? Проверка схем вроде как была очень эффективно реализована. Или я ошибаюсь?


Честно говоря нет. Но тут какое дело, схема мне только проверит валидность модели XML-RPC (хотя по приводимой ссылке сказано, что она этого не может, ну допустим), причем весь пакет у меня должен быть в памяти или доступен для второго прохода (собственно моего маппинга). При ручной валидации + маппинге я имею стек правил и модификаторов допустимости некоторых ситуаций, что позволяет эти операции проводить очень быстро (фактически несколько простых проверок). В общем, такой подход позволил мне получить перформанс парсинга "динамики" (пакетов заранее не известных) на уровне gSOAP с его статическим парсингом.
Re[2]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: vladimir.vladimirovich 
Дата: 23.03.09 20:40
Здравствуйте, astral_marine, Вы писали:

_>А самой CRT уже лет 40.


Это copy/paste из DUNUL.PRIDUMAL ?
Re[4]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: vladimir.vladimirovich 
Дата: 23.03.09 20:41
Здравствуйте, ononim, Вы писали:

O>А как вы напишете на C# что нить под мак?


Возьмет mono и запустит.
Re[6]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: vladimir.vladimirovich 
Дата: 23.03.09 20:42
Здравствуйте, ononim, Вы писали:

O>Ой насмешили Нету такого — Qt Software. Есть лишь библиотека Qt, написанная Trolltech.


И владеет ею теперь мобила всея матрицы — Nokia.
Re[66]: Поздравляю :D в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 24.03.09 04:33
Здравствуйте, hattab, Вы писали:

H>Алгоритм валидации модели пакета XML-RPC + ее маппинг на языковые типы.

Ок, я кажется понял. Я-то думал, у вас есть некая "система", и парсинг XML-RPC лишь некоторая ее часть.
А ты имеешь в виду именно разработку библиотеки парсинга XML-RPC. Про эту задачу я так сходу не могу сказать, какую часть кода можно сделать независимой от выбора SAX/DOM.
При написании "влоб", конечно же, придется выкинуть 100% кода. Ладно, будет время — выкачаю либу, на которую ты ссылался, и посмотрю, как там что устроено.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[63]: Поздравляю :D в избранное  новое    модер. 
От: esil 
Дата: 25.03.09 19:34
Здравствуйте, gandjustas, Вы писали:

E>>Документ состоит из абзацев. Абзац из "символов". Пока он состоит только из символов, всё просто. Когда в качестве "символа" может быть таблица, рисунок, формула, спецсимвол, объект OLE, что угодно, то сразу напрашивается сделать этот символ классом, а все вышеуказанные объекты сделать наследником этого класса, чтобы с ними можно было единообразно работать. Как уже было сказано тут возникают проблемы с накладными расходами, если представлять каждый символ в виде объекта. В качестве решения предлагается паттерн flyweight, в котором для одинаковых символов используется один и тот же объект. Но у разных одних и тех же символов могут быть разные атрибуты форматирования (шрифт, цвет). В предлагаемом паттерне эти атрибуты хранятся отдельно, и передаются при рисовании в качестве параметров методов. Но эти параметры нужны в основном только символам, таблицам и картинкам они уже не нужны! В результате получается, что такому объекту как картинка при рисовании требуется зачем-то передать шрифт и цвет, которые никак не используются. Разве Вам уже не кажется, что дизайн так себе? Лично мне уже кажется.

G>И мне кажется.
G>Нафиг не нужны символы текста как отдельные объекты. Строк достаточно.
G>В таком случае сразу отпадает необходимость использовать flyweight.

Строк не достаточно. Как быть с таблицами и картинками? С ними хочется обращаться как с символами.

E>>Лет 10 назад возможно это и не было бы приемлимо, но сейчас дополнительные 4 байта на символ мне не кажутся слишком большими расходами, если уж даже flyweight предполагает 4 байта на него. Т. е. с издержками на память можно как-то согласиться. Но ешё есть издержки на выделение/освобождение объекта для каждого символа, с которыми, по моему мнению (да и по Вашему как я понял) могут быть большие проблемы.

G>Ну даже если вынести символы отдельно и использовать flyweight, то это никак не решит проблемы создания кучи мелких объектов для аттрибутов символа.

Вот для форматирования разных символов можно как раз использовать один и тот же объект "аттрибут". И можно попробовать хранить этот атрибут не для каждого символа, а для интервалов. Но тогда придётся это форматирование передавать каждому символу при рисовании, и картинкам/таблицам тоже.

E>>>>Имелось в виду, что здесь очередной плевок в сторону С++ и unmanaged-языков был абсолютно не уместен, потому что здесь либо для обоих вариантов ответ да, либо для обоих нет.

G>>>Это надо еще доказать. Ваш пример с визивигом доказательство не является, потому что он явно надуманный и нифига не обощается. Далеко не во всех программах есть очень много одинаковых объектов.
E>>
E>>Причём здесь пример с WYSIWYG? Причём здесь то, что "Далеко не во всех программах есть очень много одинаковых объектов"?
E>>Что доказать? Что выделение/освобождение памяти является и там и там операцией довольно тяжеловесной примерно одного порядка?
G>Это не так.

E>>Вы издеваетесь что ли?

G>Нет

E>>Вы правда думаете, что выделение объекта в .net настолько быстрое, что на него можно не обращать внимание,

G>Да, сдвиг указателя и все.

E>>а в С++ оно настолько медленнее, что там уже надо обращать внимание?

G>С++ медленнее, но обращать внимание все равно не надо.

G>В C++ надо обращать внимание на сам факт освобождения или использовать что-то типа auto_ptr или shared_ptr, которые создают свой оверхед.


E>>Вы правда считаете, что при одинаковой объектной декомпозиции в C# и C++ затраты на работу с памятью в C# будут на порядок меньше?

G>Она одинаковой не будет.

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

Ну а как же тогда пример с WYSIWYG? Вы считаете, что архитектура с паттерном flyweight ничуть не хуже, чем использование отдельных объектов для символов?
Re[61]: Поздравляю :D в избранное  новое    модер. 
От: esil 
Дата: 25.03.09 19:43
Здравствуйте, Sinclair, Вы писали:

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


E>>А Вы считали зачем придумали этот паттерн? Чтобы было круто и все поняли, что авторы паттерна очень умные?

S>Меня всегда умиляла способность читать книгу и ничерта не понимать.

Меня всегда умиляла способность людей умиляться своим способностям.

S>Ты не заметил, что паттерн позволяет заменить часть программы так, чтобы уменьшить накладные расходы до приемлемых?

S>При этом основным алгоритмам наплевать, один и тот же там объект или разные.
Если бы Вы хотя бы потрудились прочитать пример кода из указанной книги, то Вам бы стало понятно, что алгоритмам не наплевать. В случае с flyweight им необходимо знать текущее форматирование, которое применяется к рисуемому объекту. Последствия этого Вы понять можете, или тоже нет?

S>Это как раз пример того, что мы

S>а) сначала пишем систему так, как нам удобно — все алгоритмы (например, разбиения на строки и страницы) пишутся очевидным и красивым образом
S>б) при помощи профайлера выясняем источник проблемы
S>в) заменяем нехорошую часть алгоритма.
S>Например, для текстового редактора мы бы всего лишь изменили маленький фрагмент кода, тот, где фабрика Char-ов. Возможно, закомментировали бы метод Char.Equals (чтобы использовать дефолтный ReferenceEquals, который быстрее). И всё! Где тут "заранее проектировать с учетом быстродействия"?

Конечно, конечно, всё так просто. А про добавление дополнительного параметра в метод рисования символа вы не забыли? И в методы рисования картинок тоже не забыли? А теперь скажите мне, если у вас этот же класс картинки помимо непосредственно окна редактирования используется в каком-либо сложном элементе UI, то откуда вы там возьмёте "текущее форматирование", которое нужно предать при рисовании картинки? И с какого перепуга компонент UI, который отображает картинку, должен знать о каком-то форматировании?
Re[63]: Поздравляю :D в избранное  новое    модер. 
От: esil 
Дата: 25.03.09 19:56
Здравствуйте, Mamut, Вы писали:

e>> Документ состоит из абзацев. Абзац из "символов".


M>все дальше поскипано. в тх ж GoF, если мне не изеняет память, описано как надо делать для сложного форатирования и т.п.

Там написано не как надо делать, а как можно делать, чтобы избежать больших изжержек.

M>Никому не нужно иметь на каждый символ по классу/экземпляру класса.

Кому не нужно? Вам не нужно. Ну пожалуйста, я не против. А вот те же авторы GoF пишут, что хотелось бы работать с символами как с объектами, но просто так это сделать не позволяют накладные расходы, поэтому они предлагают использовать flyweight в качестве альтернативы. Цитата, которую я привёл, как раз оттуда.
Re[64]: Поздравляю :D в избранное  новое    модер. 
От: Mamuthttp://dmitriid.com/
Дата: 26.03.09 07:15
e> e>> Документ состоит из абзацев. Абзац из "символов".
e> M>все дальше поскипано. в тх ж GoF, если мне не изеняет память, описано как надо делать для сложного форатирования и т.п.

e> Там написано не как надо делать, а как можно делать, чтобы избежать больших изжержек.


Мнэээ. Зачем говорить то же, что сказал я, только другими словами?


e> M>Никому не нужно иметь на каждый символ по классу/экземпляру класса.


e> Кому не нужно? Вам не нужно. Ну пожалуйста, я не против. А вот те же авторы GoF пишут, что хотелось бы работать с символами как с объектами, но просто так это сделать не позволяют накладные расходы, поэтому они предлагают использовать flyweight в качестве альтернативы. Цитата, которую я привёл, как раз оттуда.


Тогда о чем спор?
Re[64]: Поздравляю :D в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 26.03.09 08:26
Здравствуйте, esil, Вы писали:

G>>Нафиг не нужны символы текста как отдельные объекты. Строк достаточно.

G>>В таком случае сразу отпадает необходимость использовать flyweight.
E>Строк не достаточно. Как быть с таблицами и картинками? С ними хочется обращаться как с символами.
Разны нету, когда мы перестаем пытаться создавать объкты для отдельных символов, то у нас даже необходимость в flyweight отпадает и мы не мучаемся, а спокойно выделяем память для объектов.

E>Вот для форматирования разных символов можно как раз использовать один и тот же объект "аттрибут". И можно попробовать хранить этот атрибут не для каждого символа, а для интервалов. Но тогда придётся это форматирование передавать каждому символу при рисовании, и картинкам/таблицам тоже.

Не думаю что из этого что-то хорошее получится. Во-первых параметры форматирования для разных типов объектов разные, во-вторых разных вариантов форматирования для одного типа может оказаться очень много и использование flyweight ничего не даст.

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

Ага, я об этом с самом начала писал, при этом мне говорили что GC настолько медленный, что именно с ним надо обращать внимание на выделяемую память.

E>Ну а как же тогда пример с WYSIWYG? Вы считаете, что архитектура с паттерном flyweight ничуть не хуже, чем использование отдельных объектов для символов?

Конкретно в примере с визивигом хуже, потому что там этот паттерн неуместен на самом деле.
Вообще flyweight не так часто применяется как может показаться.
Re[3]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: tasiziso 
Дата: 11.04.09 10:40
Здравствуйте, MxKazan, Вы писали:


MK> Про слив понравилось! Посмотрим как ты напишешь программу на C++ с графическим интерфейсом, но независимую от платформы.


http://wxwidgets.org/
... << RSDN@Home 1.2.0 alpha 4 rev. 1144>>
Re: Дык изучи С# + C++ !! в избранное  новое    модер. 
От: vog 
Дата: 11.04.09 12:46
Здравствуйте, niellune, Вы писали:

А в чем проблема? Изучи оба, языки схожи, по-моему это не проблема. Другое дело, что шарп по умолчанию тянет за собой NET, на С++ под NET наверное специально не пишут и надо осваивать другие библиотеки.
Так что вопрос не в языках, а в том хвосте, что они тянут
ICQ 263-128-407
Re: С java + scala начинай! в избранное  новое    модер. 
От: dimgelhttp://dimgel.ru/
Дата: 11.04.09 21:17
Здравствуйте, niellune,

Увидел я в Янусе, что в ветке 200 смайлов, дай думаю зайду хоть поржу... Фууух, ну нафлудили.

Короче, сабж.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Человек становится мужественным, когда ему нечего терять. Мы малодушны только тогда, когда есть еще что-то, за что мы можем цепляться.
Re[33]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: snautSH 
Дата: 14.04.09 14:59
M>В плюсах нуб просто не взлетит шутка конечно но ...
тоесть программистом С++ можно только родиться?
Re[34]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sorantissorantis.blogspot.com
Дата: 15.04.09 22:14
Здравствуйте, snautSH, Вы писали:

M>>В плюсах нуб просто не взлетит шутка конечно но ...

SH>тоесть программистом С++ можно только родиться?

нет, но стать хорошим с++-ником гораздо сложнее чем СиШарпникомКопипастником.
Сам пишу на Шарпе в основном (хотя уже сам не пойму на чем...последнее время сишарп и джава в перемешку с плюсами),
до этого писал на плюсах. шарп люблю, но по плюсам скучаю.. вот такой я сентиментальный
As long as there is life, there is hope
Re: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: ppp222 
Дата: 16.04.09 06:11
Оценка: -2
Здравствуйте, niellune, Вы писали:

N>Здравствуйте! Нужен ваш совет))

N>Дело в том что мне нравится язык C++ и меня интересует есть ли сейчас возможность устроиться куда-нибудь на начальную позицию?
N>В каких областях сейчас применяется C++?

Возможность есть. Более того, сейчас некоторые девелоперские конторы испытывают кадровый дефицит в области разработчиков на С++. Программистов на С# вежливо разворачивают, при этом интересуясь, а не пишите ли на плюсах?
Области использования плюсов прежние: системное и прикладное программирование. С системным все понятно. Там используется либо С, либо С++. С си шарпом туда дороги нет. В прикладном программировании также есть области, в которых используется исключительно С++. В частности, это CAD, CAM и CAE системы. Некоторые могут возразить, мол, автокад 2009 использует .net. Но это либо от незнания, либо от нечестности. На нете там только пользовательский интерфейс. Элемент, конечно, немаловажный, но отнюдь не ключевой в такого рода системах. Мне лично, кстати говоря, новое меню автокада ужасно не понравилось...

N>Может легче сначала пойти на С#, а потом перейти на С++ или сразу искать вакансии С++

N>Просто мне кажется, что объем знаний С++ требуется гораздо больший, а хочется работать и набираться опыта..

Не советую. С C# на С++ никогда не перейти. Это два разных мира. Сиди на своей работе пока и долбай прямо в цель — С++.
С# тебя ничему не научит.
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 16.04.09 06:20
Здравствуйте, Sorantis, Вы писали:

S>нет, но стать хорошим с++-ником гораздо сложнее чем СиШарпникомКопипастником.

А копи-паст здесь причем?
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[2]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: ppp222 
Дата: 16.04.09 06:44
Оценка: :)
Здравствуйте, les_paul, Вы писали:

>>> с чего начать: С++ или С#?


_>А ты подумай Сейчас вузы выпускают примерно 9 разработчиков тяготеющих к какому нить С#, к 1 толковому на С++, при примерно равном кол-ве вакансий, чтобы не быть голословным:


Да, разработчиков на дот нете развелось очень много. Согласен. Мне кажется, что их даже больше, чем требуется.

_> Тут ответ простой и ясный на вопрос, хочешь дёшево лепить корпоративные вэб сайты/сервисы и формоклёпить со скоростью света бери С#. Хочешь в перспективе работать в Apple, Google, Microsoft, в России в к примеру в Yandex ну или ещё в одном вот из этих ( http://www.research.att.com/~bs/applications.html ) "скромных" мест, в которых как известно работают одни идиоты, которые не читают RSDN и не знают, что с использованием .Net они бы сделали всё быстрее и лучше, учи С++. Только в С++ мало приятного, что в разработке, что в изучении, которое в лучшем случае продлится лет 5, а в худшем не закончится никогда. По уровню зарплат опять же в целом C++/Unix разработчики обычно получают значительно выше, при том же уровне квалификации.


Согласен на 100%. Только могу добавить от себя, что разработчики на С++ находят себе применение и в гораздо более скромных фирмах, чем вышеперечисленные.

Что еще плохо в C#, это то, что все дотнетчики зависимы от воли левой пятки MS. MS будет выдумывать новые технологии каждые 5 лет. Соответственно участь дотнетчика — постоянное бессмысленное переучивание, освоение новых, перманентно новых технологий для решения одних и тех же задач.
Re[3]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.04.09 07:02
Оценка: +1 :))
Здравствуйте, ppp222, Вы писали:

P>Что еще плохо в C#, это то, что все дотнетчики зависимы от воли левой пятки MS. MS будет выдумывать новые технологии каждые 5 лет. Соответственно участь дотнетчика — постоянное бессмысленное переучивание, освоение новых, перманентно новых технологий для решения одних и тех же задач.

Это не плохо, это замечательно. зучать новые технологии интересно, они зачастую дают другой взгляд на решаемые проблемы, что очень положительно влияет на общий уровень развитя программиста.
Кроме того новые технологии зачастую позволяют применять существующие знания в новых областях.
Сейчас у .NET охват областей разработки значительно шире, чем у C++, и только продолжает расти. В это время C++ники все еще воюют с проблемами языка и утечек памяти и пользуются средствами десятилетней давности.
Re[3]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Mamuthttp://dmitriid.com/
Дата: 16.04.09 10:12
p> Что еще плохо в C#, это то, что все дотнетчики зависимы от воли левой пятки MS. MS будет выдумывать новые технологии каждые 5 лет. Соответственно участь дотнетчика — постоянное бессмысленное переучивание, освоение новых, перманентно новых технологий для решения одних и тех же задач.

Фигня, что дотнету уже 8 лет и он пока никуда не собирается исчезать?
Re[4]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 16.04.09 11:44
Здравствуйте, gandjustas, Вы писали:

G>В это время C++ники все еще воюют с проблемами языка и утечек памяти и пользуются средствами десятилетней давности.

Ты изрядно отстал от жизни.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 16.04.09 11:53
Здравствуйте, CreatorCray, Вы писали:

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


G>>В это время C++ники все еще воюют с проблемами языка и утечек памяти и пользуются средствами десятилетней давности.

CC>Ты изрядно отстал от жизни.
Погоди. Я так понял, что жизнь в С++ остановилась
Автор: Геннадий Васильев
Дата: 15.03.09
давным давно
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[5]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 16.04.09 11:55
Оценка: :))
Здравствуйте, CreatorCray, Вы писали:

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


G>>В это время C++ники все еще воюют с проблемами языка и утечек памяти и пользуются средствами десятилетней давности.

CC>Ты изрядно отстал от жизни.

Вышла новая версия стандарта? Появился сборщик мусора? Код на С++ стал верифицируемым? Появился вывод типов?
Re[4]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: ppp222 
Дата: 17.04.09 02:34
Оценка: -1 :)))
Здравствуйте, Mamut, Вы писали:

p>> Что еще плохо в C#, это то, что все дотнетчики зависимы от воли левой пятки MS. MS будет выдумывать новые технологии каждые 5 лет. Соответственно участь дотнетчика — постоянное бессмысленное переучивание, освоение новых, перманентно новых технологий для решения одних и тех же задач.


M>Фигня, что дотнету уже 8 лет и он пока никуда не собирается исчезать?


За эти 8 лет вышло три различных дотнета: 1, 2 и 3. Между вторым и третим нет ничего общего, поменялось буквально все. Между первым и вторым различий не так много, но они тоже были. Предполагаю, что 4 дотнет будет доделкой третьего с половиной, после чего выйдет 5 дотнет, который будет кардинально отличаться от третьего, то есть будут преданы анафеме wpf, linq, wcf и так далее. 6 дотнет будет доделкой 5 с половиной, после чего выйдет 7 дотнет, которому сам бог велел кардинально отличаться от пятого дотнета. Предпологаю, что 7 дотнет чем — то будет напоминать первый...
Re[5]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: anton_t 
Дата: 17.04.09 03:01
Здравствуйте, ppp222, Вы писали:

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


p>>> Что еще плохо в C#, это то, что все дотнетчики зависимы от воли левой пятки MS. MS будет выдумывать новые технологии каждые 5 лет. Соответственно участь дотнетчика — постоянное бессмысленное переучивание, освоение новых, перманентно новых технологий для решения одних и тех же задач.


M>>Фигня, что дотнету уже 8 лет и он пока никуда не собирается исчезать?


P>За эти 8 лет вышло три различных дотнета: 1, 2 и 3. Между вторым и третим нет ничего общего, поменялось буквально все.


Не поменялось, а добавилось. Хочешь в 3,5-м дотнете пользоваться WinForms — пользуйся, никто не запрещает.

P>Между первым и вторым различий не так много, но они тоже были. Предполагаю, что 4 дотнет будет доделкой третьего с половиной, после чего выйдет 5 дотнет, который будет кардинально отличаться от третьего, то есть будут преданы анафеме wpf, linq, wcf и так далее. 6 дотнет будет доделкой 5 с половиной, после чего выйдет 7 дотнет, которому сам бог велел кардинально отличаться от пятого дотнета. Предпологаю, что 7 дотнет чем — то будет напоминать первый...


Фантазии.
Re[6]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: ppp222 
Дата: 17.04.09 03:23
Оценка: +1
Здравствуйте, anton_t, Вы писали:

_>Не поменялось, а добавилось. Хочешь в 3,5-м дотнете пользоваться WinForms — пользуйся, никто не запрещает.


Я тебя умоляю, мне — то эти сказочки не рассказывай. Если MS чего решит, то выпьет обязательно, только я к этим шуточкам отношусь крайне отрицательно
Re[6]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: ppp222 
Дата: 17.04.09 03:36
Оценка: :)))
Здравствуйте, gandjustas, Вы писали:

G>Вышла новая версия стандарта? Появился сборщик мусора? Код на С++ стал верифицируемым? Появился вывод типов?


Сборщик мусора противопоказан С++. Стихия С++ — это эффективный код, где строки — это массив символов, завершающийся нулём, а не вызов библиотечных функций. И не потому, что стандарт С++ какой — то недоразвитый, а потому, что работая таким образом мы получаем прирост производительности от десятков до сотен процентов.
Re[7]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: WFrag 
Дата: 17.04.09 04:02
Оценка: +1
Здравствуйте, ppp222, Вы писали:

P>Сборщик мусора противопоказан С++. Стихия С++ — это эффективный код, где строки — это массив символов, завершающийся нулём, а не вызов библиотечных функций. И не потому, что стандарт С++ какой — то недоразвитый, а потому, что работая таким образом мы получаем прирост производительности от десятков до сотен процентов.


Во-первых, если говорить о строках в применении к C++, то это скорее std:string, нет?

А во-вторых, о какой эффективности идёт речь, если «строки — это массив символов, завершающийся нулём»?
Re[5]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 17.04.09 04:09
Здравствуйте, ppp222, Вы писали:

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


p>>> Что еще плохо в C#, это то, что все дотнетчики зависимы от воли левой пятки MS. MS будет выдумывать новые технологии каждые 5 лет. Соответственно участь дотнетчика — постоянное бессмысленное переучивание, освоение новых, перманентно новых технологий для решения одних и тех же задач.


M>>Фигня, что дотнету уже 8 лет и он пока никуда не собирается исчезать?


P>За эти 8 лет вышло три различных дотнета: 1, 2 и 3. Между вторым и третим нет ничего общего, поменялось буквально все.

Между вторым и третьим не поменялось ничего, добавились библиотеки. Код которй работает под 2 работает и под 3, а иногда и наоборот.

P>Между первым и вторым различий не так много, но они тоже были.

Между первым и вторым различий в разы больше.

P>Предполагаю, что 4 дотнет будет доделкой третьего с половиной, после чего выйдет 5 дотнет, который будет кардинально отличаться от третьего, то есть будут преданы анафеме wpf, linq, wcf и так далее. 6 дотнет будет доделкой 5 с половиной, после чего выйдет 7 дотнет, которому сам бог велел кардинально отличаться от пятого дотнета. Предпологаю, что 7 дотнет чем — то будет напоминать первый...

Не надо бредовые предположения строить. Что будет в четвертом дотнете можете сейчас почитать, уже многократно публиковали роадмапы, изменения CLR, почти все библиотеки, которые войдут в состав FCL спейчас доступны для использования.
Re[7]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 17.04.09 04:11
Здравствуйте, ppp222, Вы писали:

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


G>>Вышла новая версия стандарта? Появился сборщик мусора? Код на С++ стал верифицируемым? Появился вывод типов?


P>Сборщик мусора противопоказан С++. Стихия С++ — это эффективный код, где строки — это массив символов, завершающийся нулём, а не вызов библиотечных функций. И не потому, что стандарт С++ какой — то недоразвитый, а потому, что работая таким образом мы получаем прирост производительности от десятков до сотен процентов.


Не далее как вчера написал на F# код, который эффективнее C++-ного варианта в 8 раз. А потом изменением в трех строчках и подключением PFX сделал его распаралеленным.
Re[7]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 17.04.09 04:14
Оценка: +1
Здравствуйте, ppp222, Вы писали:

P>Стихия С++ — это эффективный код, где строки — это массив символов, завершающийся нулём, а не вызов библиотечных функций.


Этот перл достоин отдельго осмеяния.

Если строки — это массив символов, завершающийся нулём, то насколько эффективно получение длины строки?

Да и вообще-то строки как массивы символов используются в C, а не С++
Re[8]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 17.04.09 21:38
Здравствуйте, gandjustas, Вы писали:

G>Не далее как вчера написал на F# код, который эффективнее C++-ного варианта в 8 раз.

смешно
G>А потом изменением в трех строчках и подключением PFX сделал его распаралеленным.
тут даже не смешно
покажи код товарищ, поправим твой с++
People write code, programming languages don't.
Re[7]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: anton_t 
Дата: 18.04.09 03:17
Здравствуйте, ppp222, Вы писали:

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


_>>Не поменялось, а добавилось. Хочешь в 3,5-м дотнете пользоваться WinForms — пользуйся, никто не запрещает.


P>Я тебя умоляю, мне — то эти сказочки не рассказывай. Если MS чего решит, то выпьет обязательно, только я к этим шуточкам отношусь крайне отрицательно


Да не надо меня умолять. С чем ты не согласен? С тем, что в 3,5 можно использовать WinForms? Или ещё с чем?
Re[8]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: minorlogic 
Дата: 18.04.09 05:36
Здравствуйте, gandjustas, Вы писали:

G>Не далее как вчера написал на F# код, который эффективнее C++-ного варианта в 8 раз. А потом изменением в трех строчках и подключением PFX сделал его распаралеленным.


Не стесняйся, код в студию.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[9]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.04.09 11:11
Здравствуйте, Хвост, Вы писали:

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


G>>Не далее как вчера написал на F# код, который эффективнее C++-ного варианта в 8 раз.

Х>смешно
Ага, я тоже от души поржал когда резщультаты тестов смотрел.

G>>А потом изменением в трех строчках и подключением PFX сделал его распаралеленным.

Х>тут даже не смешно
Х>покажи код товарищ, поправим твой с++
Не, я теперь будут в КСВ поступать также как остальные. Постить результаты тестов без исходников.

Если есть желание, то можете сам написать код, который находит все аддитивные цепочки для заданного числа.
Подробное описание что это и зачем нужно здесь
Re[10]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: SleepyDrago 
Дата: 19.04.09 16:06
Здравствуйте, gandjustas, Вы писали:

G>>>Не далее как вчера написал на F# код, который эффективнее C++-ного варианта в 8 раз.

Х>>смешно
G>Ага, я тоже от души поржал когда резщультаты тестов смотрел.

а потом мы все от души поржем когда кто-нибудь знающий покажет вам результаты F... Fortran'а

зы пишите еще — всегда приятно посмеяться на выходных.
Re[11]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 19.04.09 16:21
Здравствуйте, SleepyDrago, Вы писали:

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


G>>>>Не далее как вчера написал на F# код, который эффективнее C++-ного варианта в 8 раз.

Х>>>смешно
G>>Ага, я тоже от души поржал когда резщультаты тестов смотрел.

SD>а потом мы все от души поржем когда кто-нибудь знающий покажет вам результаты F... Fortran'а

Невопрос. Пишите код, задау я привел выше.
Re[7]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 20.04.09 02:29
Оценка: :)
Здравствуйте, ppp222, Вы писали:
P>Сборщик мусора противопоказан С++. Стихия С++ — это эффективный код, где строки — это массив символов, завершающийся нулём, а не вызов библиотечных функций. И не потому, что стандарт С++ какой — то недоразвитый, а потому, что работая таким образом мы получаем прирост производительности от десятков до сотен процентов.
Юморист. Пиши еще. Строки без длины — это конечно прирост производительности, это да.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: snautSH 
Дата: 20.04.09 11:39
Оценка: +1 -1
Здравствуйте, Sorantis, Вы писали:

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


M>>>В плюсах нуб просто не взлетит шутка конечно но ...

SH>>тоесть программистом С++ можно только родиться?

S>нет, но стать хорошим с++-ником гораздо сложнее чем СиШарпникомКопипастником.

S>Сам пишу на Шарпе в основном (хотя уже сам не пойму на чем...последнее время сишарп и джава в перемешку с плюсами),
S>до этого писал на плюсах. шарп люблю, но по плюсам скучаю.. вот такой я сентиментальный

так не пойдет. вы сравниваете разные уровни. это все равно что — стать С++ ником копипастником гораздо проще, чем хорошим C# программистом
Re[11]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 20.04.09 11:59
Здравствуйте, SleepyDrago, Вы писали:

G>>>>Не далее как вчера написал на F# код, который эффективнее C++-ного варианта в 8 раз.

Х>>>смешно
G>>Ага, я тоже от души поржал когда резщультаты тестов смотрел.

SD>а потом мы все от души поржем когда кто-нибудь знающий покажет вам результаты F... Fortran'а


А что мы там увидим? Неужто еще больший прирост производительности?

Я думаю, что gandjustas подразумевает, что на F# получается более эффективный код по критерию (лаконичность+читабельность) / производительность.
Re[12]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 20.04.09 18:16
Оценка: :)
Здравствуйте, criosray, Вы писали:

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


G>>>>>Не далее как вчера написал на F# код, который эффективнее C++-ного варианта в 8 раз.

Х>>>>смешно
G>>>Ага, я тоже от души поржал когда резщультаты тестов смотрел.

SD>>а потом мы все от души поржем когда кто-нибудь знающий покажет вам результаты F... Fortran'а


C>А что мы там увидим? Неужто еще больший прирост производительности?


C>Я думаю, что gandjustas подразумевает, что на F# получается более эффективный код по критерию (лаконичность+читабельность) / производительность.


Да вот в этот раз нет. Именно по замерам времени выполнения код на F# оказался быстрее C++_ного варианта в 8 раз.

Правда никто мегаоптимизацией на С++ не занимался.
Вот и хочется увидеть вариант решения задачи на С++ от крутых перцев из КСВ.
Re[14]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: ollv 
Дата: 23.04.09 19:44
Здравствуйте, Геннадий Васильев, Вы писали:

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


G>>Да хватит уже кросплатформенностью меряться. Самые кроспалформенные GUI-фреймворки уже давно придуманы это HTML+CSS+Javascript, чуть меньшей кроссплатформенностью обладают Flash и Silverlight. С++ c Qt даже рядом не валялся.


ГВ>Ну, если xML — это путь кроссплатформенных GUI, то чем дальше C++/Qt от них, тем оно лучше.

Ну так и есть и ксамл WPF это хорошо иллюстрирует, и плюсам тянуться за гуями, мне кажется, вообще не стоит, за плюсами мегапреимущество в архитектурных и скоростных решениях, за счет высоких абстракций и шаблонов. Гуя же так ил иначе перекочует в XML подобное оформление, кстати при современных фреймворках с парсингом XML тандем его с плюсами мне кажется вполне приемлемым, даже удобным.
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
Re[15]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 23.04.09 21:08
Оценка: +1
Здравствуйте, ollv, Вы писали:

G>>>Да хватит уже кросплатформенностью меряться. Самые кроспалформенные GUI-фреймворки уже давно придуманы это HTML+CSS+Javascript, чуть меньшей кроссплатформенностью обладают Flash и Silverlight. С++ c Qt даже рядом не валялся.


ГВ>>Ну, если xML — это путь кроссплатформенных GUI, то чем дальше C++/Qt от них, тем оно лучше.

O> Ну так и есть и ксамл WPF это хорошо иллюстрирует, и плюсам тянуться за гуями, мне кажется, вообще не стоит, за плюсами мегапреимущество в архитектурных и скоростных решениях, за счет высоких абстракций и шаблонов.
Откуда у С++ "высокие абстракции"? Вы явно что-то путаете. Если Вы считаете уличную магию Александресску — высокими абстракциями, то вынужден Вас разочаровать...
"Архитектурные решения" на С++ тоже довольно примитивны на фоне управляемых языков. Простейшие примеры: IoC/DI и AoP, из более сложных — метапрограммирования типа того, что в Nemerle, ну и конечно всякие DSL...

C++ выигрывает там, где требуется детерменированное освобождение памяти и низкоуровневые оптимизации, но за это приходится платить сложностью разработки и сопровождения, а соответственно и ценой.
Re[15]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 24.04.09 03:25
Оценка: +2
Здравствуйте, ollv, Вы писали:

O> Ну так и есть и ксамл WPF это хорошо иллюстрирует, и плюсам тянуться за гуями, мне кажется, вообще не стоит, за плюсами мегапреимущество в архитектурных и скоростных решениях, за счет высоких абстракций и шаблонов. Гуя же так ил иначе перекочует в XML подобное оформление, кстати при современных фреймворках с парсингом XML тандем его с плюсами мне кажется вполне приемлемым, даже удобным.

Неудачная шутка насчет высоких абстракций. Высокие абстракции, которые создаются в С++, являются костылями.
В большенстве современных языков теже возможности строены в самя изык или стандартные библиотеки.
Re[15]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 24.04.09 15:08
Здравствуйте, ollv, Вы писали:

O> Ну так и есть и ксамл WPF это хорошо иллюстрирует, и плюсам тянуться за гуями, мне кажется, вообще не стоит, за плюсами мегапреимущество в архитектурных и скоростных решениях, за счет высоких абстракций и шаблонов. Гуя же так ил иначе перекочует в XML подобное оформление, кстати при современных фреймворках с парсингом XML тандем его с плюсами мне кажется вполне приемлемым, даже удобным.


Можно пример высокоуровневой абстракции которую нельзя воспроизвести на языке отличном от С++?
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[16]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 24.04.09 15:57
Здравствуйте, VladD2, Вы писали:

O>> Ну так и есть и ксамл WPF это хорошо иллюстрирует, и плюсам тянуться за гуями, мне кажется, вообще не стоит, за плюсами мегапреимущество в архитектурных и скоростных решениях, за счет высоких абстракций и шаблонов. Гуя же так ил иначе перекочует в XML подобное оформление, кстати при современных фреймворках с парсингом XML тандем его с плюсами мне кажется вполне приемлемым, даже удобным.


VD>Можно пример высокоуровневой абстракции которую нельзя воспроизвести на языке отличном от С++?


Ну вообще-то таких абстракций много — в зависимости от того с чем сравнивать.
Re[15]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 24.04.09 16:03
Здравствуйте, ollv, Вы писали:

ГВ>>Ну, если xML — это путь кроссплатформенных GUI, то чем дальше C++/Qt от них, тем оно лучше.

O>Ну так и есть и ксамл WPF это хорошо иллюстрирует, и плюсам тянуться за гуями, мне кажется, вообще не стоит, за плюсами мегапреимущество в архитектурных и скоростных решениях, за счет высоких абстракций и шаблонов.

Вот это ты зря сказал. Ща начнётся мерянье длиной абстракции и диаметром спецификации. (понижая голос) Но в общем и целом (шёпотом) я с этим... Тс-с-с!

O>Гуя же так ил иначе перекочует в XML подобное оформление, кстати при современных фреймворках с парсингом XML тандем его с плюсами мне кажется вполне приемлемым, даже удобным.


Честно говоря, XML ведёт по плохому до к слабому янь и сильному инь. Исключение только одно — разметка естественного текста. Для всего остального гораздо лучше подходят S-expressions.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[17]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sorantissorantis.blogspot.com
Дата: 24.04.09 16:16
Здравствуйте, criosray, Вы писали:

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


O>>> Ну так и есть и ксамл WPF это хорошо иллюстрирует, и плюсам тянуться за гуями, мне кажется, вообще не стоит, за плюсами мегапреимущество в архитектурных и скоростных решениях, за счет высоких абстракций и шаблонов. Гуя же так ил иначе перекочует в XML подобное оформление, кстати при современных фреймворках с парсингом XML тандем его с плюсами мне кажется вполне приемлемым, даже удобным.


VD>>Можно пример высокоуровневой абстракции которую нельзя воспроизвести на языке отличном от С++?


C>Ну вообще-то таких абстракций много — в зависимости от того с чем сравнивать.


Можно конкретный пример? Очень интересно, что за абстракцию можно сделать на плюсах которая будет невозможна на Java например?
As long as there is life, there is hope
Re[17]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 24.04.09 16:34
Здравствуйте, criosray, Вы писали:

C>Ну вообще-то таких абстракций много — в зависимости от того с чем сравнивать.


Ну, хотя бы один пример.

ЗЫ

Я, знаете ли, обожаю читать про разные сверх естественные явления. Не потому, что я в них верю, а просто это очень увлекательно .
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[18]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 24.04.09 16:39
Здравствуйте, VladD2, Вы писали:

C>>Ну вообще-то таких абстракций много — в зависимости от того с чем сравнивать.


VD>Ну, хотя бы один пример.


Э-э, классы и объекты в процедурных языках? Шаблоны в Delphi language или VB6?..
Re[18]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: catBasilio 
Дата: 24.04.09 16:50
Оценка: :)
Здравствуйте, Sorantis, Вы писали:

S>Можно конкретный пример? Очень интересно, что за абстракцию можно сделать на плюсах которая будет невозможна на Java например?


ну например std::auto_ptr.
Re[19]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 24.04.09 16:59
Оценка: +1
Здравствуйте, catBasilio, Вы писали:

S>>Можно конкретный пример? Очень интересно, что за абстракцию можно сделать на плюсах которая будет невозможна на Java например?


B>ну например std::auto_ptr.


Это абстракция? Это костыль помогающий ходить без одной ноги в условиях когда нет автоматического управления памятью.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[19]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 24.04.09 17:04
Оценка: -2
Здравствуйте, criosray, Вы писали:

C>Э-э, классы и объекты в процедурных языках? Шаблоны в Delphi language или VB6?..


А зачем в процедурных то?

К тому же ты говорил об абстракциях которые можно выразить средствами языка, а не о фичах языка.

Если уж речь пошла о фичах, то я с удовольствием погляжу на то чем ты заменишь лямбды с замыканиями (только не надо бустовских уродств, там замыкания не поддерживаются) и паттерн-матчинг.

ЗЫ

Не стоит даже заикаться на счет каких-то там преимуществ С++ в области языковых возможностей и тем более абстракций. Это чушь! Единственное преимущество С++ — это возможность низкоуровневых оптимизаций и относительная дешевизна имеющихся абстракций. Это позволяет, при желании, не хилых усилиях и отсутствии алгоритмических противопоказаний, написать программу обладающую высокой производительностью. Больше преимуществ у этого отсталого языка нет.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[6]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: catBasilio 
Дата: 24.04.09 17:08
Оценка: -1 :)
Здравствуйте, gandjustas, Вы писали:

G>Вышла новая версия стандарта? Появился сборщик мусора? Код на С++ стал верифицируемым? Появился вывод типов?


Однажды я участвовал в одном проекте на С++, в котором использовался самопальный сборщик мусора. Причем он был оченб мощный и умел разруливать циклы и всякие сложные зависимости. Так программа с использованием этого gc жрала память как свинья помои. И довольно много времени приходилось искать объект который держал ссылку.
Если ты думаешь что в джаве или сишарпе память не может утекать, то ты ОЧЕНЬ заблуждаешься. Там точно также возможны ситуации когда кто-то будет держать объект, из-за этого не будет вызван его деструктор, а из-за этого не будет закрыт ремотный коннекшин ...
Единственное что в управляемых языках лучше — это невозможность такой ситуации:

std::vector<MyClass*> array;
array.push_back(new MyClass());
array.push_back(new MyClass());
array.push_back(new MyClass());

vector.clear()

или еще

class CopyableClass
{
 public:
  CopyableClass() : Value(new Object()){}
  ~CopyableClass() { delete Value;}

 private:
  Object* Value;
}


но подобные ситуации замечательно лечатся с использованием std::auto_ptr и std::shared_ptr.
и никакие мемори лики не страшны.
Теги: 
Re[20]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 24.04.09 17:08
Здравствуйте, VladD2, Вы писали:

VD>Это абстракция? Это костыль помогающий ходить без одной ноги в условиях когда нет автоматического управления памятью.


Так... Попкорном я уже запасся.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[7]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sorantissorantis.blogspot.com
Дата: 24.04.09 17:20
Здравствуйте, catBasilio, Вы писали:

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


G>>Вышла новая версия стандарта? Появился сборщик мусора? Код на С++ стал верифицируемым? Появился вывод типов?


B> Однажды я участвовал в одном проекте на С++, в котором использовался самопальный сборщик мусора. Причем он был оченб мощный и умел разруливать циклы и всякие сложные зависимости. Так программа с использованием этого gc жрала память как свинья помои. И довольно много времени приходилось искать объект который держал ссылку.

B>Если ты думаешь что в джаве или сишарпе память не может утекать, то ты ОЧЕНЬ заблуждаешься. Там точно также возможны ситуации когда кто-то будет держать объект, из-за этого не будет вызван его деструктор, а из-за этого не будет закрыт ремотный коннекшин ...

Но в Сишарпе так же можно использовать сборщик мусора ручками, если не доверяешь автоматической сборке.
As long as there is life, there is hope
Re[20]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 24.04.09 17:32
Здравствуйте, VladD2, Вы писали:

VD>Не стоит даже заикаться на счет каких-то там преимуществ С++ в области языковых возможностей и тем более абстракций. Это чушь!

угу, ты ето говоришь года едак с 2002-го, когда C# был настолько убог что даже твой нелюбимый С++ обходил его с головой.
покажи как мне выразить такую простую абстракцию: параметр метода — как ссылка на константный объект, или ммм... такую "фичу" как множественное наследование, или скажем, статический полиморфизм, слышал о таком?
People write code, programming languages don't.
Re[8]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: catBasilio 
Дата: 24.04.09 17:35
Здравствуйте, Sorantis, Вы писали:

S>Но в Сишарпе так же можно использовать сборщик мусора ручками, если не доверяешь автоматической сборке.


А что, у Сишарповского сборщика мусора уже telepaty mode появился?


static void Main(string[] args)
{
MyObject[] manyObjects = new MyObjects[10000000]; 

Console.WriteLine(manyObjects[1]);

...
// многа кода
}


неиспользуемые объекты будут держаться до заврешения программы.
И попробуй убеди меня что это не утечка памяти. И я очень сомневаюсь gc при вызове "ручками" поймет что это некому не нажный код и удалит его.

P.S. это высосанный из пальца пример, но проблему он показывает вполне.
Re[21]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 24.04.09 17:39
Оценка: -1
Здравствуйте, Хвост, Вы писали:

Х>угу, ты ето говоришь года едак с 2002-го, когда C# был настолько убог что даже твой нелюбимый С++ обходил его с головой.


Начиная со 2-й версии С++ нервно курит в сторонке.
А начиная с 2006-го я вообще перешел на Nemerle до которого C# расти еще лет 10, а С++ уже никогда не дорастет.

Х>покажи как мне выразить такую простую абстракцию: параметр метода — как ссылка на константный объект,


Это чушь а не фича.

Х>или ммм... такую "фичу" как множественное наследование,


Когда есть нормальные средства композиции кода (особенно такие как миксины или макросы) оно не нужно. Оно скорее проблема нежели достоинство.

Х>или скажем, статический полиморфизм, слышал о таком?


О статическом не слышал. О параметрическом слышал. Можешь открыть новую страницу истории и поведать миру о статическом полиморфизме.

В общем, не стоит так напрягаться. Этому гнилью даже новый стандарт не поможет. Кстати, где он? (с)
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[21]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 24.04.09 17:40
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Так... Попкорном я уже запасся.


Тогда давай делись!
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[20]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 24.04.09 17:42
Здравствуйте, VladD2, Вы писали:
VD>Если уж речь пошла о фичах, то я с удовольствием погляжу на то чем ты заменишь лямбды с замыканиями
лично я заменяю их на императивный цикл for
сейчас уже есть возможность писать в функциональном стиле, да, скачай msvc10 (CTP) и возрадуйся лямбдам (да ещё и с замыканиями!)
People write code, programming languages don't.
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: catBasilio 
Дата: 24.04.09 17:44
Здравствуйте, VladD2, Вы писали:

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


Х>>угу, ты ето говоришь года едак с 2002-го, когда C# был настолько убог что даже твой нелюбимый С++ обходил его с головой.


VD>Начиная со 2-й версии С++ нервно курит в сторонке.

VD>А начиная с 2006-го я вообще перешел на Nemerle до которого C# расти еще лет 10, а С++ уже никогда не дорастет.

Если С# так хорош, то почему всякие Crysis, Quake, FarCry и прочее на нем не пишут?
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 24.04.09 17:49
Здравствуйте, VladD2, Вы писали:
VD>О статическом не слышал. О параметрическом слышал. Можешь открыть новую страницу истории и поведать миру о статическом полиморфизме.
а погуглить? первая ссылка по запросу static polymorphism даёт представление что ето такое и как ето пользовать.

VD>В общем, не стоит так напрягаться. Этому гнилью даже новый стандарт не поможет. Кстати, где он? (с)

ето твоему немерлю ничего не поможет, мертворождённый проект.
People write code, programming languages don't.
Re[7]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 24.04.09 17:57
Оценка: +1 -1
Здравствуйте, catBasilio, Вы писали:

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


G>>Вышла новая версия стандарта? Появился сборщик мусора? Код на С++ стал верифицируемым? Появился вывод типов?


B> Однажды я участвовал в одном проекте на С++, в котором использовался самопальный сборщик мусора. Причем он был оченб мощный и умел разруливать циклы и всякие сложные зависимости. Так программа с использованием этого gc жрала память как свинья помои. И довольно много времени приходилось искать объект который держал ссылку.

Это еще раз докузывает ущербность C++, этот язык не может работать со собрщиком мусора.

B>Если ты думаешь что в джаве или сишарпе память не может утекать, то ты ОЧЕНЬ заблуждаешься. Там точно также возможны ситуации когда кто-то будет держать объект, из-за этого не будет вызван его деструктор, а из-за этого не будет закрыт ремотный коннекшин ...

Этот "кто-то" умрет, если на него нету ссылок, вместе со всеми объектами, на которые он сам держит ссылки.
И это назвается не лик, а невнимательность программиста.

B>Единственное что в управляемых языках лучше — это невозможность такой ситуации:

B>
//говнокод опущен
B>

Это далеко не единственное.

B>но подобные ситуации замечательно лечатся с использованием std::auto_ptr и std::shared_ptr.

B>и никакие мемори лики не страшны.
С std::auto_ptr гемора не меньше, чем с указателями. Вместо ликов постоянно получаются AV
А std::shared_ptr далеко не бесплатен.

ИМХО лучше вместо кривых костылей с самописными GC, "умными" указателями и прочей лабудой использовать нормальные языки.
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 24.04.09 18:03
Здравствуйте, VladD2, Вы писали:

ГВ>>Так... Попкорном я уже запасся.

VD>Тогда давай делись!

Дык!

Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[8]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 24.04.09 18:05
Оценка: +1 :)
Здравствуйте, gandjustas, Вы писали:

G>ИМХО лучше вместо кривых костылей с самописными GC, "умными" указателями и прочей лабудой использовать нормальные языки.

"нормальные" языки дают оверхед на пустом месте, единственный высокоуровневый язык без оверхедов — С++
People write code, programming languages don't.
Re[21]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 24.04.09 18:13
Здравствуйте, Хвост, Вы писали:

Х>покажи как мне выразить такую простую абстракцию: параметр метода — как ссылка на константный объект

Всю константность в С++ можно с успехом обмануть, кроме того константность не является абстракцией

Х>или ммм... такую "фичу" как множественное наследование

Ага, еще скажи что виртуальный базовый класс — нереальная фича

Х>или скажем, статический полиморфизм, слышал о таком?

Перегрузка методов является одим из видов статического полиморфизма, она есть в C#
Re[9]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 24.04.09 18:19
Оценка: -1
Здравствуйте, Хвост, Вы писали:

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


G>>ИМХО лучше вместо кривых костылей с самописными GC, "умными" указателями и прочей лабудой использовать нормальные языки.

Х>"нормальные" языки дают оверхед на пустом месте, единственный высокоуровневый язык без оверхедов — С++
Ага, с такими же "высокоуровневыми абстракциями". Заканчивай, не смешно уже.

Кстати тесты по быстродействию операций выделения-освобождения памяти в с++ и .NET я приводил — C++ сливает.
И это без умных указателей и прочей лабуды, с ними банальная вещь — работа с памятью — будет еще медленнее.
Re[9]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 24.04.09 18:19
Оценка: +1
Здравствуйте, Хвост, Вы писали:

G>>ИМХО лучше вместо кривых костылей с самописными GC, "умными" указателями и прочей лабудой использовать нормальные языки.

Х>"нормальные" языки дают оверхед на пустом месте, единственный высокоуровневый язык без оверхедов — С++
Очень смешно.
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 24.04.09 18:21
Здравствуйте, catBasilio, Вы писали:

VD>>Начиная со 2-й версии С++ нервно курит в сторонке.

VD>>А начиная с 2006-го я вообще перешел на Nemerle до которого C# расти еще лет 10, а С++ уже никогда не дорастет.

B>Если С# так хорош, то почему всякие Crysis, Quake, FarCry и прочее на нем не пишут?


Вы еще спросили бы почему на С# драйверы не пишут.
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 24.04.09 18:23
Оценка: -1
Здравствуйте, catBasilio, Вы писали:

B>Если С# так хорош, то почему всякие Crysis, Quake, FarCry и прочее на нем не пишут?


Если C++ так хорош, то почему на нем не пишут тысячи бизнес-систем?
Почему самые высоконагруженные сайты написаны не на С++?

Из игрушек кстати Halo 3 вполне на C#.
Re[9]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 24.04.09 18:24
Здравствуйте, catBasilio, Вы писали:

B>P.S. это высосанный из пальца пример, но проблему он показывает вполне.


Этот пример абсолютно нереалистичен. На практике такого не случается.
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 24.04.09 18:27
Здравствуйте, gandjustas, Вы писали:

Х>>покажи как мне выразить такую простую абстракцию: параметр метода — как ссылка на константный объект

G>Всю константность в С++ можно с успехом обмануть,
не понял к чему было про "обмануть", ето тоже самое что грить C# небезопасен потому что есть ансейф
G>кроме того константность не является абстракцией
называй как хочешь, но вот то что такой нужной вещи нет в C# ето просто поразительно.

Х>>или ммм... такую "фичу" как множественное наследование

G>Ага, еще скажи что виртуальный базовый класс — нереальная фича
ты начинаешь говорить как заядлый холиварщик, "етого у нас нет потому что можно обойти окольными путями"


Х>>или скажем, статический полиморфизм, слышал о таком?

G>Перегрузка методов является одим из видов статического полиморфизма, она есть в C#
перегрузка методов ето скорее ad-hoc полиморфизм, и до статического полиморфизма тут как раком до пекина, а вот статический полиморфизм в с++ ето скорее похоже на утиную типизацию, и заметь ноль оверхеда.
People write code, programming languages don't.
Re[10]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 24.04.09 18:30
Здравствуйте, gandjustas, Вы писали:

G>Кстати тесты по быстродействию операций выделения-освобождения памяти в с++ и .NET я приводил — C++ сливает.

G>И это без умных указателей и прочей лабуды, с ними банальная вещь — работа с памятью — будет еще медленнее.
ты вообще в курсе про стек? наша песня хороша, начинай сначала? подавляющее число аллокаций в с++ происходит на стеке, заруби себе ето на носу, и там твой гц сливает аж не балуй.
People write code, programming languages don't.
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 24.04.09 18:36
Оценка: +1 -1
Здравствуйте, gandjustas, Вы писали:

G>Если C++ так хорош, то почему на нем не пишут тысячи бизнес-систем?

потому что бизнес-логика может писатся хоть на скриптах, всем начхать на оверхед, упирается в базу обычно. То что интерфейс лагает слегка — не имеет ни для кого значения. Обсуждалось уже вроде.
G>Почему самые высоконагруженные сайты написаны не на С++?

G>Из игрушек кстати Halo 3 вполне на C#.

Пруфлинк. Могу допустить что там игровая логика написана на C#, но движок — никогда.
People write code, programming languages don't.
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 24.04.09 18:36
Оценка:1 (1) +1 :))
Здравствуйте, gandjustas, Вы писали:

G>Если C++ так хорош, то почему на нем не пишут тысячи бизнес-систем?


Сам пересчитывал?

G>Почему самые высоконагруженные сайты написаны не на С++?


Все переобмерил?

P.S.: Но это всё не аргументы. По устоявшейся RSDN-овской традиции Настоящие Весомые Аргументы Против C++ должны содержать слова из такого ряда: фобия, замшелость, стереотип, мемори лик, проход по памяти, миллионы программистов, википедия, тузик, тряпка, рвать, мозг, затычка, косность. Можно даже шпаргалку составить.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[21]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 24.04.09 18:37
Здравствуйте, Хвост, Вы писали:

VD>>Не стоит даже заикаться на счет каких-то там преимуществ С++ в области языковых возможностей и тем более абстракций. Это чушь!

Х>угу, ты ето говоришь года едак с 2002-го, когда C# был настолько убог что даже твой нелюбимый С++ обходил его с головой.
Х>покажи как мне выразить такую простую абстракцию: параметр метода — как ссылка на константный объект,
Это?
        static void Main(string[] args)
        {
            const string a = "aaa";
            Console.WriteLine(foo(a));
            Console.ReadKey();
        }

        static string foo(string a)
        {
            return a + "bbb";
        }




Х>или ммм... такую "фичу" как множественное наследование,

Множественное наследование — моветон, сродни goto. Это ХОРОШО, что его нету, иначе количество граблей, генерируемых индусами возразло бы экспоненциально.

Х>или скажем, статический полиморфизм, слышал о таком?

Он конечно же есть в .NET

Это все или еще что-то есть?
Re[11]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 24.04.09 18:39
Здравствуйте, Хвост, Вы писали:

G>>Кстати тесты по быстродействию операций выделения-освобождения памяти в с++ и .NET я приводил — C++ сливает.

G>>И это без умных указателей и прочей лабуды, с ними банальная вещь — работа с памятью — будет еще медленнее.
Х>ты вообще в курсе про стек? наша песня хороша, начинай сначала? подавляющее число аллокаций в с++ происходит на стеке, заруби себе ето на носу, и там твой гц сливает аж не балуй.

Да где сливает-то? Покажите бенчмарки, основанные на реальном (желательно production) коде.
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 24.04.09 18:40
Здравствуйте, Хвост, Вы писали:

G>>Если C++ так хорош, то почему на нем не пишут тысячи бизнес-систем?

Х>потому что бизнес-логика может писатся хоть на скриптах, всем начхать на оверхед, упирается в базу обычно. То что интерфейс лагает слегка — не имеет ни для кого значения. Обсуждалось уже вроде.
Вам только кажется. Нигде ничего не лагает.
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 24.04.09 18:43
Здравствуйте, gandjustas, Вы писали:
G>Почему самые высоконагруженные сайты написаны не на С++?
для сайтов легче купить несколько серверных стоек, чем заплатить программистам на С++ выше рынка, к сайтам скорее требование к масшабированию чем к производительности, хотя в гугле и в яндексе афаик ядро поиска написано на С++, наверное потому что им уже есть резон економить на серверах.
People write code, programming languages don't.
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 24.04.09 18:43
Оценка: +1
Здравствуйте, criosray, Вы писали:

Х>>или ммм... такую "фичу" как множественное наследование,

C>Множественное наследование — моветон, сродни goto. Это ХОРОШО, что его нету, иначе количество граблей, генерируемых индусами возразло бы экспоненциально.

Ты уверен, что апелляция к "индусам" в этом контексте выглядит позитивно?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 24.04.09 18:46
Здравствуйте, Хвост, Вы писали:

G>>Почему самые высоконагруженные сайты написаны не на С++?

Х>для сайтов легче купить несколько серверных стоек, чем заплатить программистам на С++ выше рынка, к сайтам скорее требование к масшабированию чем к производительности, хотя в гугле и в яндексе афаик ядро поиска написано на С++, наверное потому что им уже есть резон економить на серверах.
Откуда информация? Дайте ссылку на авторитетный источник.
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 24.04.09 18:47
Здравствуйте, Геннадий Васильев, Вы писали:

Х>>>или ммм... такую "фичу" как множественное наследование,

C>>Множественное наследование — моветон, сродни goto. Это ХОРОШО, что его нету, иначе количество граблей, генерируемых индусами возразло бы экспоненциально.

ГВ>Ты уверен, что апелляция к "индусам" в этом контексте выглядит позитивно?


Нет, но зато реалистично. Индусы — вездесущи. ;(
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 24.04.09 18:55
Здравствуйте, criosray, Вы писали:

ГВ>>Ты уверен, что апелляция к "индусам" в этом контексте выглядит позитивно?

C>Нет, но зато реалистично. Индусы — вездесущи. ;(

И это является проблемой множественнного наследования? ИМХО, это завихрения текущего контекста, ничего больше. В отличие от goto, который сам по себе ничуть не вреден (вредно запутывание программы хаосом из goto).
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 24.04.09 18:57
Здравствуйте, criosray, Вы писали:

C>Здравствуйте, Хвост, Вы писали:


Х>>покажи как мне выразить такую простую абстракцию: параметр метода — как ссылка на константный объект,

C>Это?
C>
C>        static void Main(string[] args)
C>        {
C>            const string a = "aaa";
C>            Console.WriteLine(foo(a));
C>            Console.ReadKey();
C>        }

C>        static string foo(string a)
C>        {
C>            return a + "bbb";
C>        }
C>


нет, вот ето
int main(int argc, char* argv[])
{
    string fileName = getAppDir();
    fileName += "some.file";
    someFunc(fileName);
}

void someFunc(const string& fileName)
{
    fileName = "wow!"; // тут компилятор ругается, в C# недоступен модификатор const для параметров ф-ции/метода
                       // поетому оригинальная строка затрётся за милую душу. В С++ всё гуд. В C# - боль и печаль.
}



Х>>или ммм... такую "фичу" как множественное наследование,

C>Множественное наследование — моветон, сродни goto. Это ХОРОШО, что его нету, иначе количество граблей, генерируемых индусами возразло бы экспоненциально.
ты как бы взгляни на библиотеки boost/wtl/atl, и покажи мне в каком месте в них множественное наследование является моветоном.

Х>>или скажем, статический полиморфизм, слышал о таком?

C>Он конечно же есть в .NET
где?
People write code, programming languages don't.
Re[12]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 24.04.09 18:59
Здравствуйте, criosray, Вы писали:
Х>>ты вообще в курсе про стек? наша песня хороша, начинай сначала? подавляющее число аллокаций в с++ происходит на стеке, заруби себе ето на носу, и там твой гц сливает аж не балуй.
C>Да где сливает-то? Покажите бенчмарки, основанные на реальном (желательно production) коде.
ээээ, даже не знаю что сказать как ты представляешь себе бенчмарки продакшн кода в плане аллокация на стеке vs аллокация c gc?
People write code, programming languages don't.
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 24.04.09 19:00
Оценка: +1 -1
Здравствуйте, Хвост, Вы писали:

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


Х>>>покажи как мне выразить такую простую абстракцию: параметр метода — как ссылка на константный объект

G>>Всю константность в С++ можно с успехом обмануть,
Х>не понял к чему было про "обмануть", ето тоже самое что грить C# небезопасен потому что есть ансейф
ансейф надо явно писать и можно запретить его запускать.
А попробуй запретить в С++ менять константные объекты.

G>>кроме того константность не является абстракцией

Х>называй как хочешь, но вот то что такой нужной вещи нет в C# ето просто поразительно.
Читать больше надо. От константности отказались как раз в силу сложности обеспечения честной константности.

Х>>>или ммм... такую "фичу" как множественное наследование

G>>Ага, еще скажи что виртуальный базовый класс — нереальная фича
Х>ты начинаешь говорить как заядлый холиварщик, "етого у нас нет потому что можно обойти окольными путями"
Это не надо обходить, этого надо избегать. Множественное наследование реализации является ошибкой дизайна, а множественное наследование интерфейсов и так есть в C#.

Х>>>или скажем, статический полиморфизм, слышал о таком?

G>>Перегрузка методов является одим из видов статического полиморфизма, она есть в C#
Х>перегрузка методов ето скорее ad-hoc полиморфизм, и до статического полиморфизма тут как раком до пекина, а вот статический полиморфизм в с++ ето скорее похоже на утиную типизацию, и заметь ноль оверхеда.
Ты путаешься в понятиях, статический полиморфизм — когда решение о вызываемом методе принимается в момент компиляции.

При наличии рантаймовой генерации кода можно получить все преимущества как статического, так и динамического полиморфизма. И утиной типизации тоже.
.NET это очень хорошо умеет.
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 24.04.09 19:02
Оценка:1 (1)
Здравствуйте, criosray, Вы писали:

C>Здравствуйте, Хвост, Вы писали:


G>>>Почему самые высоконагруженные сайты написаны не на С++?

Х>>для сайтов легче купить несколько серверных стоек, чем заплатить программистам на С++ выше рынка, к сайтам скорее требование к масшабированию чем к производительности, хотя в гугле и в яндексе афаик ядро поиска написано на С++, наверное потому что им уже есть резон економить на серверах.
C>Откуда информация? Дайте ссылку на авторитетный источник.
про гугл с ходу не нашёл, а яндекс дык http://company.yandex.ru/inside/job/ раздел "Разработчики"
People write code, programming languages don't.
Re[11]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 24.04.09 19:03
Здравствуйте, Хвост, Вы писали:

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


G>>Кстати тесты по быстродействию операций выделения-освобождения памяти в с++ и .NET я приводил — C++ сливает.

G>>И это без умных указателей и прочей лабуды, с ними банальная вещь — работа с памятью — будет еще медленнее.
Х>ты вообще в курсе про стек? наша песня хороша, начинай сначала? подавляющее число аллокаций в с++ происходит на стеке, заруби себе ето на носу, и там твой гц сливает аж не балуй.
Ну статистику в студию, что где происходит и кто кому сливает.

Я немало писал на С++ чтобы знать где и как выделяется память.
Или местые зубры не используют STL, динамический полиморфизм, паттерны? Все наверное на шаблонах и на стеке.
Re[25]: плохо изложил в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 24.04.09 19:06
...В отличие от goto, с которым можно связать некоторую опасность, создающуюся при неумереннном использовании оного.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 24.04.09 19:07
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>P.S.: Но это всё не аргументы. По устоявшейся RSDN-овской традиции Настоящие Весомые Аргументы Против C++ должны содержать слова из такого ряда: фобия, замшелость, стереотип, мемори лик, проход по памяти, миллионы программистов, википедия, тузик, тряпка, рвать, мозг, затычка, косность. Можно даже шпаргалку составить.

Лучше мастер-класс на манер Владимира Кочеткова для начинающих холиварщиков.
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 24.04.09 19:07
Оценка: :)
Здравствуйте, Хвост, Вы писали:

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


G>>Если C++ так хорош, то почему на нем не пишут тысячи бизнес-систем?

Х>потому что бизнес-логика может писатся хоть на скриптах, всем начхать на оверхед, упирается в базу обычно. То что интерфейс лагает слегка — не имеет ни для кого значения. Обсуждалось уже вроде.
так С++ такой крутой, с высокоуровневыми абстракциями и прочей лабудой, чего бы на нем не писать все это?

G>>Из игрушек кстати Halo 3 вполне на C#.

Х>Пруфлинк. Могу допустить что там игровая логика написана на C#, но движок — никогда.
Движок — XNA, набери в гугле — сразу все увидишь.
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 24.04.09 19:13
Здравствуйте, Хвост, Вы писали:

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


C>>Здравствуйте, Хвост, Вы писали:


Х>>>покажи как мне выразить такую простую абстракцию: параметр метода — как ссылка на константный объект,

C>>Это?
C>>
C>>        static void Main(string[] args)
C>>        {
C>>            const string a = "aaa";
C>>            Console.WriteLine(foo(a));
C>>            Console.ReadKey();
C>>        }

C>>        static string foo(string a)
C>>        {
C>>            return a + "bbb";
C>>        }
C>>


Х>нет, вот ето

Х>
Х>int main(int argc, char* argv[])
Х>{
Х>    string fileName = getAppDir();
Х>    fileName += "some.file";
Х>    someFunc(fileName);
Х>}

Х>void someFunc(const string& fileName)
Х>{
Х>    fileName = "wow!"; // тут компилятор ругается, в C# недоступен модификатор const для параметров ф-ции/метода
Х>                       // поетому оригинальная строка затрётся за милую душу. В С++ всё гуд. В C# - боль и печаль.
Х>}
Х>

В этом месте все сторонники C# начинают громко смеяться
1)строки в C# иммутабельны, при всем желании ты не затрешь строку, которую использует кто-то другой.
2)присваивание строковой переменной литерального значения приводит только к копированию ссылки, в отличие от C++

Поэтому о правильном поведении кода без const модно даже не задумываться, и работать это будет быстрее C++ного варианта.
Re[13]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 24.04.09 19:13
Здравствуйте, Хвост, Вы писали:

Х>>>ты вообще в курсе про стек? наша песня хороша, начинай сначала? подавляющее число аллокаций в с++ происходит на стеке, заруби себе ето на носу, и там твой гц сливает аж не балуй.

C>>Да где сливает-то? Покажите бенчмарки, основанные на реальном (желательно production) коде.
Х>ээээ, даже не знаю что сказать как ты представляешь себе бенчмарки продакшн кода в плане аллокация на стеке vs аллокация c gc?

Так это Вы утверждаете, что сливает... Я ничего не утверждаю, а лишь прошу обосновать Ваши слова реальным кодом, а не синтетическими попугайчиками или, того хуже, Вашими догадками... Всего-то.
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Anton Batenevhttp://antonbatenev.moikrug.ru/
Дата: 24.04.09 20:04
Здравствуйте, Хвост, Вы писали:

Х> То что интерфейс лагает слегка — не имеет ни для кого значения. Обсуждалось уже вроде.


Все зависит от того, сколько это "слегка" в числовом выражении.
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 24.04.09 20:19
Здравствуйте, Хвост, Вы писали:

Х>>>покажи как мне выразить такую простую абстракцию: параметр метода — как ссылка на константный объект,

Х>нет, вот ето
Это не ссылка на константный объект, а константная ссылка. В С# их нет и не особо надо. Это не сравнимо со всем многообразием граблей, возникающих в С++ благодаря голой арифметики указателей и ручному управлению памятью.

Х>>>или ммм... такую "фичу" как множественное наследование,

C>>Множественное наследование — моветон, сродни goto. Это ХОРОШО, что его нету, иначе количество граблей, генерируемых индусами возразло бы экспоненциально.
Х>ты как бы взгляни на библиотеки boost/wtl/atl, и покажи мне в каком месте в них множественное наследование является моветоном.
Библиотеки это вообще очень особая категория. .NET FW гораздо лучше спроектирован, чем boost/atl/wtl, не смотря на отсутствие множественного наследования, т.к. при грамотном дизайне правильнее одиночное наследование и множественная реализация интерфейсов (множественное наследование абстрактных классов в С++).

Х>>>или скажем, статический полиморфизм, слышал о таком?

C>>Он конечно же есть в .NET
Х>где?
Гугл отменили? http://www.dotnetspark.com/kb/433-polymorphism.aspx
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 24.04.09 20:44
Здравствуйте, criosray, Вы писали:
C>Это не ссылка на константный объект, а константная ссылка.
мммм... ддя ссылок имхо монопенисуально, но по аналогии с указателями я привык называть так.
C>В С# их нет и не особо надо.
да, конечно, нет в C# значит особо не надо

C>Это не сравнимо со всем многообразием граблей, возникающих в С++ благодаря голой арифметики указателей и ручному управлению памятью.

на дворе 2009 год. Впервые о смартпоинтерах заговорили афаир в 1996, STL стандартизован в 1998. примерно в 2002-2003-м промышленные компиляторы стали хорошо воспринимать стандарт.
Вот примерно с етих времён "голой арифметики указателей и ручному управлению памятью" становится всё меньше и меньше.

C>Библиотеки это вообще очень особая категория. .NET FW гораздо лучше спроектирован, чем boost/atl/wtl, не смотря на отсутствие множественного наследования,

т.к. при грамотном дизайне правильнее одиночное наследование и множественная реализация интерфейсов (множественное наследование абстрактных классов в С++).
>>.NET FW гораздо лучше спроектирован
голословно
>>т.к. при грамотном дизайне правильнее одиночное наследование и множественная реализация интерфейсов
голословно, можно пример правильного дизайна без множественного наследования и неправильного с множественным? Посмотри так же на CRTP.



Х>>>>или скажем, статический полиморфизм, слышал о таком?

C>>>Он конечно же есть в .NET
Х>>где?
C>Гугл отменили? http://www.dotnetspark.com/kb/433-polymorphism.aspx
спасибо, про перегрузку уже обсудили, если ето единственное что ты видишь в статическом полиморфизме то C# тебя испортил.
People write code, programming languages don't.
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 24.04.09 20:49
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>>>Если C++ так хорош, то почему на нем не пишут тысячи бизнес-систем?

Х>>потому что бизнес-логика может писатся хоть на скриптах, всем начхать на оверхед, упирается в базу обычно. То что интерфейс лагает слегка — не имеет ни для кого значения. Обсуждалось уже вроде.
G>так С++ такой крутой, с высокоуровневыми абстракциями и прочей лабудой, чего бы на нем не писать все это?
дык потому что мало C++ программистов, дорого они стоят, а бизнес-систем много. и поддерживать их будут программеры "на местах", а им лучше язык попроще дать, без острых углов.

G>>>Из игрушек кстати Halo 3 вполне на C#.

G>Движок — XNA, набери в гугле — сразу все увидишь.
я вот призадумался, ты или не знаешь что такое движок, или толком не понимаешь что такое XNA, или ты так далёк от игростроя что почитав "интернеты" придумал свой мир где дотнет захватил игрострой :-D
p.s.
погуглил
Halo 3 вообще никаким боком к XNA не касается, что и не удивительно для игры класса AAA.
People write code, programming languages don't.
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Anton Batenevhttp://antonbatenev.moikrug.ru/
Дата: 24.04.09 20:57
Здравствуйте, Хвост, Вы писали:

Х> Halo 3 вообще никаким боком к XNA не касается, что и не удивительно для игры класса AAA.


Я просто не в теме, расскажи, а что значит AAA?
Re[16]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: ollv 
Дата: 24.04.09 20:58
Здравствуйте, VladD2, Вы писали:

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


O>> Ну так и есть и ксамл WPF это хорошо иллюстрирует, и плюсам тянуться за гуями, мне кажется, вообще не стоит, за плюсами мегапреимущество в архитектурных и скоростных решениях, за счет высоких абстракций и шаблонов. Гуя же так ил иначе перекочует в XML подобное оформление, кстати при современных фреймворках с парсингом XML тандем его с плюсами мне кажется вполне приемлемым, даже удобным.


VD>Можно пример высокоуровневой абстракции которую нельзя воспроизвести на языке отличном от С++?

на каком конкретно? Если языки аля джава или дотнет, или нечто другое из структурных языков, то любой шаблон не привязанный к реальным сущностям является для них недостижимым. дженерики дотнета и не дорастут, а в джаве на сколько я знаю, темплейты так же весьма ограничены (по известным причинам).
Кроме того, на плюсах вполне реализуемы элементы не родственных стурктур, к примеру итерации for_each, find_if count_if, функторы, придают плюсам оттенки функциональных языков, но вообще метапрограммирование видоизменяет плюсы, а говорить, что это все можно реализовать в джава или дотнете — просто не знать плюсы. Даже простейший вызов из темплейтного метода непредопределенного класса с оператором () — уже недостижимая мечта для шарпа или жавы. Впрочем практика показывает, базовый функционал крупных проектов требующих гибкой архитектуры реализуется чаще на плюсах (во всяком случае в моей практике это именно так)
констрейны дают возможность предопределить поведение при компиляции. Да и еще, плюсы то развиваются, стандарт постоянно дополняется новыми фичами расширяюшими возможности, typeof это не последнее
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
Re[28]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 24.04.09 21:05
Здравствуйте, Anton Batenev, Вы писали:

AB>Здравствуйте, Хвост, Вы писали:

Х>> Halo 3 вообще никаким боком к XNA не касается, что и не удивительно для игры класса AAA.
AB>Я просто не в теме, расскажи, а что значит AAA?

Short answer:
High-quality games with high budget.
http://www.gameproducer.net/2006/05/26/what-are-aaa-titles/
People write code, programming languages don't.
Re[17]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sorantissorantis.blogspot.com
Дата: 24.04.09 21:11
Здравствуйте, ollv, Вы писали:

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


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


O>>> Ну так и есть и ксамл WPF это хорошо иллюстрирует, и плюсам тянуться за гуями, мне кажется, вообще не стоит, за плюсами мегапреимущество в архитектурных и скоростных решениях, за счет высоких абстракций и шаблонов. Гуя же так ил иначе перекочует в XML подобное оформление, кстати при современных фреймворках с парсингом XML тандем его с плюсами мне кажется вполне приемлемым, даже удобным.


VD>>Можно пример высокоуровневой абстракции которую нельзя воспроизвести на языке отличном от С++?

O> на каком конкретно? Если языки аля джава или дотнет, или нечто другое из структурных языков, то любой шаблон не привязанный к реальным сущностям является для них недостижимым. дженерики дотнета и не дорастут, а в джаве на сколько я знаю, темплейты так же весьма ограничены (по известным причинам).

Generic Covariance and Contra-Variance in C# 4.0

Java Wildcards
As long as there is life, there is hope
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 24.04.09 21:11
Оценка: -1
Здравствуйте, Хвост, Вы писали:

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


G>>>>Если C++ так хорош, то почему на нем не пишут тысячи бизнес-систем?

Х>>>потому что бизнес-логика может писатся хоть на скриптах, всем начхать на оверхед, упирается в базу обычно. То что интерфейс лагает слегка — не имеет ни для кого значения. Обсуждалось уже вроде.
G>>так С++ такой крутой, с высокоуровневыми абстракциями и прочей лабудой, чего бы на нем не писать все это?
Х>дык потому что мало C++ программистов, дорого они стоят, а бизнес-систем много. и поддерживать их будут программеры "на местах", а им лучше язык попроще дать, без острых углов.
Судя по форуму — совсем немало. А судя по вакансиям хорошему программисту на шарпе платят больше, чем хорошему программисту на С++.

G>>>>Из игрушек кстати Halo 3 вполне на C#.

G>>Движок — XNA, набери в гугле — сразу все увидишь.
Х>я вот призадумался, ты или не знаешь что такое движок, или толком не понимаешь что такое XNA, или ты так далёк от игростроя что почитав "интернеты" придумал свой мир где дотнет захватил игрострой :-D
Я отлично знаю что такое движок, даже сам писал что-то подобное, и даже дописал. А потом понял что херней занимался долго время.

Х>p.s.

Х>погуглил
Х>Halo 3 вообще никаким боком к XNA не касается, что и не удивительно для игры класса AAA.
Да ну. И на чем ты напишешь игру для XBox 360?
Re[29]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Anton Batenevhttp://antonbatenev.moikrug.ru/
Дата: 24.04.09 21:16
Здравствуйте, Хвост, Вы писали:

Х> AB>Я просто не в теме, расскажи, а что значит AAA?

Х> Short answer:
Х> High-quality games with high budget.

Не, хотелось бы для саморазвития. Что есть ААА, что есть BBB. В смысле какую-нибудь табличку сравнительную с приблизительными числовыми характеристиками.
Re[17]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 24.04.09 21:25
Оценка: +1 -1
Здравствуйте, ollv, Вы писали:

O> Кроме того, на плюсах вполне реализуемы элементы не родственных стурктур, к примеру итерации for_each, find_if count_if, функторы, придают плюсам оттенки функциональных языков

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

O>но вообще метапрограммирование видоизменяет плюсы, а говорить, что это все можно реализовать в джава или дотнете — просто не знать плюсы

Рассказываю тайны, большенство программистов на C# достаточно долго программили на плюсах и отлично его знают.
А вот наоборот — редко бывает.

O>Даже простейший вызов из темплейтного метода непредопределенного класса с оператором () — уже недостижимая мечта для шарпа или жавы.

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

O>Впрочем практика показывает, базовый функционал крупных проектов требующих гибкой архитектуры реализуется чаще на плюсах (во всяком случае в моей практике это именно так)

Какой гибкой архитектуры? C++ не умеет интеропать ни с какими другими языками, даже при интеропе с другой либой на С++ могут возникнуть проблемы.

O>констрейны дают возможность предопределить поведение при компиляции. Да и еще, плюсы то развиваются, стандарт постоянно дополняется новыми фичами расширяюшими возможности, typeof это не последнее

За последние 5 лет какое развитие было?
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Mamuthttp://dmitriid.com/
Дата: 24.04.09 21:29
Оценка:1 (1)
AB> Х> Short answer:
AB> Х> High-quality games with high budget.

AB> Не, хотелось бы для саморазвития. Что есть ААА, что есть BBB. В смысле какую-нибудь табличку сравнительную с приблизительными числовыми характеристиками.


Чектого определения нет. Обычно просто обозначает высококачественную игру с большим бюдэетом. Предположительно, стоимость разработки AAA-игр сейчас начинается от 4 илиионов долларов (ссылку не найду, читал еще в прошлом году)
Re[31]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Anton Batenevhttp://antonbatenev.moikrug.ru/
Дата: 24.04.09 21:35
Здравствуйте, Mamut, Вы писали:

M> Чектого определения нет. Обычно просто обозначает высококачественную игру с большим бюдэетом.


А предполагается, что качество напрямую коррелирует с размером бюджета?
Re[31]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sorantissorantis.blogspot.com
Дата: 24.04.09 21:37
Оценка:1 (1)
Здравствуйте, Mamut, Вы писали:

AB>> Х> Short answer:

AB>> Х> High-quality games with high budget.

AB>> Не, хотелось бы для саморазвития. Что есть ААА, что есть BBB. В смысле какую-нибудь табличку сравнительную с приблизительными числовыми характеристиками.


M>Чектого определения нет. Обычно просто обозначает высококачественную игру с большим бюдэетом. Предположительно, стоимость разработки AAA-игр сейчас начинается от 4 илиионов долларов (ссылку не найду, читал еще в прошлом году)



AAA game means games that have almost unlimited budgets and are media events. Blizzard is the AAA game company these days. They won’t release anything that doesnt fall under AAA.


читать тут
As long as there is life, there is hope
Re[16]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: ollv 
Дата: 24.04.09 21:37
Здравствуйте, criosray, Вы писали:

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


G>>>>Да хватит уже кросплатформенностью меряться. Самые кроспалформенные GUI-фреймворки уже давно придуманы это HTML+CSS+Javascript, чуть меньшей кроссплатформенностью обладают Flash и Silverlight. С++ c Qt даже рядом не валялся.


ГВ>>>Ну, если xML — это путь кроссплатформенных GUI, то чем дальше C++/Qt от них, тем оно лучше.

O>> Ну так и есть и ксамл WPF это хорошо иллюстрирует, и плюсам тянуться за гуями, мне кажется, вообще не стоит, за плюсами мегапреимущество в архитектурных и скоростных решениях, за счет высоких абстракций и шаблонов.
C>Откуда у С++ "высокие абстракции"? Вы явно что-то путаете. Если Вы считаете уличную магию Александресску — высокими абстракциями, то вынужден Вас разочаровать...
Александреску С++ не заканчивается.

C>"Архитектурные решения" на С++ тоже довольно примитивны на фоне управляемых языков. Простейшие примеры: IoC/DI и AoP, из более сложных —

метапрограммирования типа того, что в Nemerle, ну и конечно всякие DSL...
Много всего перечислено, в то время как сравнивать надо нечто одно, с чем-то одним. Толку сравнивать управляемые языки с С++, на котором решаются в основном нативные задачи? Кроме того, на плюсах можно реализовать подобие, те-же кортежи, замыкания все это вполне реализуемо (правда в жесткой типизации)
А вот как вы реализуете алгоритмику с поздним связыванием на немерле? Когда последовательность выполняемых методов их овнеров и непосредственно выполнение разнесены во времени? Задайте на немерле список выполняемых задач с поздним биндингом как параметров, так и классов с возможностью отмаршалиться в процессе выполнения на заданный сред? Да еще и с использованием кома, да еще и без поддержки диспатч, а потом, все это напрямую дернуть из менеджед кода Или лямбда исчисление перевешивает ? — очень сильно сомневаюсь.

C>C++ выигрывает там, где требуется детерменированное освобождение памяти и низкоуровневые оптимизации, но за это приходится платить сложностью разработки и сопровождения, а соответственно и ценой.

) маловато , мне как-то даже влом перечислять. Почти все теже жава проекты тянут за собой толпу плюсовых прослоек к системе, для разных нужд, не говоря о ключевых ресурсоемких вычислениях.
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 24.04.09 21:38
Здравствуйте, Anton Batenev, Вы писали:

Х>> AB>Я просто не в теме, расскажи, а что значит AAA?

Х>> Short answer:
Х>> High-quality games with high budget.

AB>Не, хотелось бы для саморазвития. Что есть ААА, что есть BBB. В смысле какую-нибудь табличку сравнительную с приблизительными числовыми характеристиками.


такой не видел и скорее такого не существует, т.к. AAA ето скорее собирательное название для "высококлассных игр с большим бюджетом", если больщой бюджет ещё можно как-то формализовать, то "высококлассный" врятли. Про "BBB" игры не слышал, разве что в качестве метафоры.
People write code, programming languages don't.
Re[28]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 24.04.09 21:43
Здравствуйте, gandjustas, Вы писали:

Х>>дык потому что мало C++ программистов, дорого они стоят, а бизнес-систем много. и поддерживать их будут программеры "на местах", а им лучше язык попроще дать, без острых углов.

G>Судя по форуму — совсем немало.
тем и примечателен (для меня по крайней мере), но ето форум.
G>А судя по вакансиям хорошему программисту на шарпе платят больше, чем хорошему программисту на С++.
судя по вакансиям слабо коррелирует с языком, гораздо значительней с опытом работы.

G>Я отлично знаю что такое движок, даже сам писал что-то подобное, и даже дописал. А потом понял что херней занимался долго время.

ну чтож так сразу херней, експириенс то получил, и то хорошо.

Х>>Halo 3 вообще никаким боком к XNA не касается, что и не удивительно для игры класса AAA.

G>Да ну. И на чем ты напишешь игру для XBox 360?
я врятли напишу, но будь моя воля то движок ессно куцый C++/Direct3D
People write code, programming languages don't.
Re[31]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Anton Batenevhttp://antonbatenev.moikrug.ru/
Дата: 24.04.09 21:47
Здравствуйте, Хвост, Вы писали:

Х> Про "BBB" игры не слышал, разве что в качестве метафоры.


Про ВВВ — это я сам придумал по аналогии с ААА — именно про классификацию и критерии классификации я и хотел узнать.
Re[18]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: ollv 
Дата: 24.04.09 21:53
Оценка: :)
Здравствуйте, gandjustas, Вы писали:

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


O>> Кроме того, на плюсах вполне реализуемы элементы не родственных стурктур, к примеру итерации for_each, find_if count_if, функторы, придают плюсам оттенки функциональных языков

G>ржунимагу. шаблоны позволяют сделать то что уже есть в других языках

O>>но вообще метапрограммирование видоизменяет плюсы, а говорить, что это все можно реализовать в джава или дотнете — просто не знать плюсы

G>Рассказываю тайны, большенство программистов на C# достаточно долго программили на плюсах и отлично его знают.
G>А вот наоборот — редко бывает.
пустые слова, шарп расхолаживает

O>>Даже простейший вызов из темплейтного метода непредопределенного класса с оператором () — уже недостижимая мечта для шарпа или жавы.

G>Включай моз, для чего нужно переопределение скобок? Чтобы объект вел себя как функция, а это значит что возможностей функций не хватает.
Преопределение скобок — это лишь перегрузка одного из операторов, и все, а то, что это получило свое развитие это отдельная история, но основа опять таки не в этом,
биндинг в плюсах покрывает делегаты, а вот обратного нет, т.к. теже функторы это лишь одно из множества, и не потому, что не хватает, а потому, что еще и так можно. а при писанине на дотнете после плюсов всегда чувствуешь тормоза, и ограниченность, т.к. хочется сделать красиво, а не можется

G>Такие выкрутасы с перегрузкой от бедности языка, а обилиле подобных "фич" только повышают возможность создать нифига нечитаемый код.

возможность перегружать это от бедности?

O>>Впрочем практика показывает, базовый функционал крупных проектов требующих гибкой архитектуры реализуется чаще на плюсах (во всяком случае в моей практике это именно так)

G>Какой гибкой архитектуры? C++ не умеет интеропать ни с какими другими языками, даже при интеропе с другой либой на С++ могут возникнуть проблемы.
ему это и не надо, а для предоставления интерфейса наверх и предоставлен менеджед С++, и ком
O>>констрейны дают возможность предопределить поведение при компиляции. Да и еще, плюсы то развиваются, стандарт постоянно дополняется новыми фичами расширяюшими возможности, typeof это не последнее
G>За последние 5 лет какое развитие было?
фреймворки ж)
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
Re[29]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 24.04.09 21:54
Оценка: -1
Здравствуйте, Хвост, Вы писали:

Х>>>Halo 3 вообще никаким боком к XNA не касается, что и не удивительно для игры класса AAA.

G>>Да ну. И на чем ты напишешь игру для XBox 360?
Х>я врятли напишу, но будь моя воля то движок ессно куцый C++/Direct3D

А я вот специально задался вопросом как писать для XBox 360 без XNA. Вообще материалов в сети по этой теме нету.
Никаких средств разрабтки без XNA не нашел.
Видится мне что на XBox игры только на XNA, а соовественно .NET\C#
Игр таких много — http://ru.wikipedia.org/wiki/Список_игр_на_Xbox_360
Re[19]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sorantissorantis.blogspot.com
Дата: 24.04.09 21:59
Оценка: +1
Здравствуйте, ollv, Вы писали:

O>>>но вообще метапрограммирование видоизменяет плюсы, а говорить, что это все можно реализовать в джава или дотнете — просто не знать плюсы

G>>Рассказываю тайны, большенство программистов на C# достаточно долго программили на плюсах и отлично его знают.
G>>А вот наоборот — редко бывает.
O> пустые слова, шарп расхолаживает

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

O>>>Даже простейший вызов из темплейтного метода непредопределенного класса с оператором () — уже недостижимая мечта для шарпа или жавы.

G>>Включай моз, для чего нужно переопределение скобок? Чтобы объект вел себя как функция, а это значит что возможностей функций не хватает.
O> Преопределение скобок — это лишь перегрузка одного из операторов, и все, а то, что это получило свое развитие это отдельная история, но основа опять таки не в этом,

А остальные операторы перегружайте на здоровье
As long as there is life, there is hope
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 24.04.09 22:00
Здравствуйте, gandjustas, Вы писали:

G>В этом месте все сторонники C# начинают громко смеяться

G>1)строки в C# иммутабельны, при всем желании ты не затрешь строку, которую использует кто-то другой.
G>2)присваивание строковой переменной литерального значения приводит только к копированию ссылки, в отличие от C++

G>Поэтому о правильном поведении кода без const модно даже не задумываться, и работать это будет быстрее C++ного варианта.

пойнт был не в строках а в константности объектов, замени строку на экземпляр своего класса и разрыдайся вместе со сторонниками C#
People write code, programming languages don't.
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 24.04.09 22:04
Оценка: :)
Здравствуйте, gandjustas, Вы писали:
G>Читать больше надо. От константности отказались как раз в силу сложности обеспечения честной константности.
а теперь расскажи мне, в чём сложность обеспечения четной константности, если даже C++ ето отлавливает на етапе компиляции? если в с++ запретить касты, разрушающие константность то окромя прямой работы с памятью возможностей изменить константный объект нет, почему же весь такой сейфанутый C# не одолел модификатор const?
People write code, programming languages don't.
Re[19]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 24.04.09 22:04
Здравствуйте, ollv, Вы писали:

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


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


O>>> Кроме того, на плюсах вполне реализуемы элементы не родственных стурктур, к примеру итерации for_each, find_if count_if, функторы, придают плюсам оттенки функциональных языков

G>>ржунимагу. шаблоны позволяют сделать то что уже есть в других языках

O>>>но вообще метапрограммирование видоизменяет плюсы, а говорить, что это все можно реализовать в джава или дотнете — просто не знать плюсы

G>>Рассказываю тайны, большенство программистов на C# достаточно долго программили на плюсах и отлично его знают.
G>>А вот наоборот — редко бывает.
O> пустые слова, шарп расхолаживает
Чего расхолаживает?

O>>>Даже простейший вызов из темплейтного метода непредопределенного класса с оператором () — уже недостижимая мечта для шарпа или жавы.

G>>Включай моз, для чего нужно переопределение скобок? Чтобы объект вел себя как функция, а это значит что возможностей функций не хватает.
O> Преопределение скобок — это лишь перегрузка одного из операторов, и все, а то, что это получило свое развитие это отдельная история, но основа опять таки не в этом,
А в чем? Зачем скобки переопределять надо?

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

Это о чем? Какие делегаты, биндинг, функторы? Вывалил все умные словка, которые знаешь?

O>а при писанине на дотнете после плюсов всегда чувствуешь тормоза, и ограниченность,


Особенно тормоза

O>т.к. хочется сделать красиво, а не можется

Красиво это как? Нафигачить шаблоков?
И как на плюсах сделать красиво IoC-контейнер?

G>>Такие выкрутасы с перегрузкой от бедности языка, а обилиле подобных "фич" только повышают возможность создать нифига нечитаемый код.

O> возможность перегружать это от бедности?
Нет, примерение этой возможности — от бедности.
В Boost даже зяпятую перегрузили потому что инициализаторов коллейкций не было. В C# таки догоадались включить эту фичу.

O>>>Впрочем практика показывает, базовый функционал крупных проектов требующих гибкой архитектуры реализуется чаще на плюсах (во всяком случае в моей практике это именно так)

G>>Какой гибкой архитектуры? C++ не умеет интеропать ни с какими другими языками, даже при интеропе с другой либой на С++ могут возникнуть проблемы.
O> ему это и не надо, а для предоставления интерфейса наверх и предоставлен менеджед С++, и ком
Менеджед С++ вам не поможет, он интеропа между дувумя бинарями не добавляет.
COM это хорошо, но мееедлеееенно в случае outproc и небезопасно в случае inproc. Вот тебе и дилемма, выход из которой — managed код.

O>>>констрейны дают возможность предопределить поведение при компиляции. Да и еще, плюсы то развиваются, стандарт постоянно дополняется новыми фичами расширяюшими возможности, typeof это не последнее

G>>За последние 5 лет какое развитие было?
O> фреймворки ж)
Мы про язык\стандартную библиотеку.
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 24.04.09 22:10
Здравствуйте, Хвост, Вы писали:

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


G>>В этом месте все сторонники C# начинают громко смеяться

G>>1)строки в C# иммутабельны, при всем желании ты не затрешь строку, которую использует кто-то другой.
G>>2)присваивание строковой переменной литерального значения приводит только к копированию ссылки, в отличие от C++

G>>Поэтому о правильном поведении кода без const модно даже не задумываться, и работать это будет быстрее C++ного варианта.

Х>пойнт был не в строках а в константности объектов, замени строку на экземпляр своего класса и разрыдайся вместе со сторонниками C#
Тоже ничего не произойдет, поменяется ссылка внутри метода.
Будет плохо если лезть в поля объекта, но так мало кто делает, потому что можно вернуть новый объект из метода и не заботиться о его времени жизни. В C++ так нельзя.
Re[18]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: ollv 
Дата: 24.04.09 22:12
Здравствуйте, Sorantis, Вы писали:

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


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


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


O>>>> Ну так и есть и ксамл WPF это хорошо иллюстрирует, и плюсам тянуться за гуями, мне кажется, вообще не стоит, за плюсами мегапреимущество в архитектурных и скоростных решениях, за счет высоких абстракций и шаблонов. Гуя же так ил иначе перекочует в XML подобное оформление, кстати при современных фреймворках с парсингом XML тандем его с плюсами мне кажется вполне приемлемым, даже удобным.


VD>>>Можно пример высокоуровневой абстракции которую нельзя воспроизвести на языке отличном от С++?

O>> на каком конкретно? Если языки аля джава или дотнет, или нечто другое из структурных языков, то любой шаблон не привязанный к реальным сущностям является для них недостижимым. дженерики дотнета и не дорастут, а в джаве на сколько я знаю, темплейты так же весьма ограничены (по известным причинам).

S>Generic Covariance and Contra-Variance in C# 4.0

т.е. ві хотите сказать, что єти дженерики дают возможность писануть

struct empty_type{};

template<typename while_java_stopcompile, typename java_machine_type>
    struct shift_java 
{
   enum { java_ver = while_java_stopcompile::ver };
public:
    shift_java(const java_machine_type& jm)
    {
        jm.start();
        
    }
    virtual ~shift_java()
    { 
       if (0) empty_type check_stop[java_ver == 1.6];
    }
};


безо всяких маст би кролик? здесь — все параметры абсолютная абстракция, и если версия олдовая, то сборка даже не осуществится..




S>Java Wildcards
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 24.04.09 22:14
Здравствуйте, Хвост, Вы писали:

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

G>>Читать больше надо. От константности отказались как раз в силу сложности обеспечения честной константности.
Х>а теперь расскажи мне, в чём сложность обеспечения четной константности, если даже C++ ето отлавливает на етапе компиляции?
На этапе компиляции как раз проще всего это сделать. Гарантировать на этапе выполнения константность всего объекта сложно и затратно.

Х>если в с++ запретить касты, разрушающие константность то окромя прямой работы с памятью возможностей изменить константный объект нет, почему же весь такой сейфанутый C# не одолел модификатор const?

Видимо потому что .NET не до конца safe из-за того что работает в unsafe окружении решили не обманывать народ с нечестной константностью.
А вообще const — не самое важно что может быть в язке, иммутабельность гораздо круе в этом плане.
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 24.04.09 22:28
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>А я вот специально задался вопросом как писать для XBox 360 без XNA. Вообще материалов в сети по этой теме нету.

G>Никаких средств разрабтки без XNA не нашел.
ну как, есть железка для дебага — xbox 360 dev kit, ето тотже ящик только с возможностью подключения к нему с персоналки и дебага всех потрохов, разработка ведётся так — на свой компутер ставишь студию, ставишь дхсдк, рядом ставишь хящик девкит, девкитовский софт ставишь себе на компутер. И всё, здравствуй С++ и Direct3D, фигач — заливай в девкит, дебажь в студии как обычный C++ код (вроде удалённой отладки), радуйся жизни. XNA ето такой небольшой фреймворк для создания казуальных игр скорее, или прототипирования идей, но на хне производительности не добиться, на платформах где игры в целях оптимизации работы аллоцируют динамическую память только один раз за сеанс — гц, дотнет, сишарп, хны пролетают.
People write code, programming languages don't.
Re[9]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: romangr 
Дата: 25.04.09 03:24
Оценка:3 (1)
Здравствуйте, catBasilio, Вы писали:

B>
B>static void Main(string[] args)
B>{
B>MyObject[] manyObjects = new MyObjects[10000000]; 

B>Console.WriteLine(manyObjects[1]);

B>...
B>// многа кода
B>}
B>


B>неиспользуемые объекты будут держаться до заврешения программы.

B>И попробуй убеди меня что это не утечка памяти. И я очень сомневаюсь gc при вызове "ручками" поймет что это некому не нажный код и удалит его.

B>P.S. это высосанный из пальца пример, но проблему он показывает вполне.


Этот высосанный из пальца пример показывает, что ты не знаешь ни c#, ни то как работает gc.

Читаем C# Language Specification:

3.9 Automatic memory management
C# employs automatic memory management, which frees developers from manually allocating and freeing the memory occupied by objects. Automatic memory management policies are implemented by a garbage collector. The memory management life cycle of an object is as follows:
1. When the object is created, memory is allocated for it, the constructor is run, and the object is considered live.
2. If the object, or any part of it, cannot be accessed by any possible continuation of execution, other than the running of destructors, the object is considered no longer in use, and it becomes eligible for destruction. The C# compiler and the garbage collector may choose to analyze code to determine which references to an object may be used in the future. For instance, if a local variable that is in scope is the only existing reference to an object, but that local variable is never referred to in any possible continuation of execution from the current execution point in the procedure, the garbage collector may (but is not required to) treat the object as no longer in use.
3. Once the object is eligible for destruction, at some unspecified later time the destructor (§10.13) (if any) for the object is run. Unless overridden by explicit calls, the destructor for the object is run once only.
4. Once the destructor for an object is run, if that object, or any part of it, cannot be accessed by any possible continuation of execution, including the running of destructors, the object is considered inaccessible and the object becomes eligible for collection.
5. Finally, at some time after the object becomes eligible for collection, the garbage collector frees the memory associated with that object.


Так что твой жуткий массив может быть собран мусорщиком сразу после Console.WriteLine. Кстати, по примеру, у тебя весь массив — массив null-ов.
... << RSDN@Home 1.2.0 alpha 4 rev. 1089>>
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 25.04.09 05:22
Здравствуйте, gandjustas, Вы писали:

Х>>пойнт был не в строках а в константности объектов, замени строку на экземпляр своего класса и разрыдайся вместе со сторонниками C#

G>Тоже ничего не произойдет, поменяется ссылка внутри метода.
G>Будет плохо если лезть в поля объекта, но так мало кто делает, потому что можно вернуть новый объект из метода и не заботиться о его времени жизни. В C++ так нельзя.

Можно, но так не любят делать, чтобы не связываться с дополнительным оверхедом по быстродействию.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[20]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 25.04.09 06:26
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

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

G>А в чем? Зачем скобки переопределять надо?

Ну разумеется, чтобы догнать уходящий поезд ФП, МП и ещё какого-нибудь полного-П. Это ж ежу понятно!

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

G>Это о чем? Какие делегаты, биндинг, функторы? Вывалил все умные словка, которые знаешь?

Ну, делегаты C# 1.0 не были реализованы на C++ в ~2001-2003 годах только ленивыми. В итоге всё же остановились на boost-овской реализации.

O>>т.к. хочется сделать красиво, а не можется

G>Красиво это как? Нафигачить шаблоков?
G>И как на плюсах сделать красиво IoC-контейнер?

Какой именно? В смысле — под какое использование?

G>>>Такие выкрутасы с перегрузкой от бедности языка, а обилиле подобных "фич" только повышают возможность создать нифига нечитаемый код.

O>> возможность перегружать это от бедности?
G>Нет, примерение этой возможности — от бедности.
G>В Boost даже зяпятую перегрузили потому что инициализаторов коллейкций не было. В C# таки догоадались включить эту фичу.

Значит, если отсутствующую фичу реализовали средствами языка — это, типа, недостаток языка. Ясен пень — язык будет плох до тех пор, пока в него не будет прямо включено всё-всё известное на данный момент во всех доступных комбинациях. А то не ровён час — библиотеку писать придётся. Логика жжот напалмом! Сила слова, да.

O>>>>Впрочем практика показывает, базовый функционал крупных проектов требующих гибкой архитектуры реализуется чаще на плюсах (во всяком случае в моей практике это именно так)

G>>>Какой гибкой архитектуры? C++ не умеет интеропать ни с какими другими языками, даже при интеропе с другой либой на С++ могут возникнуть проблемы.
O>> ему это и не надо, а для предоставления интерфейса наверх и предоставлен менеджед С++, и ком
G>Менеджед С++ вам не поможет, он интеропа между дувумя бинарями не добавляет.

Конечно, поскольку он сам — интерфейс к .Net.

G>COM это хорошо, но мееедлеееенно в случае outproc и небезопасно в случае inproc. Вот тебе и дилемма, выход из которой — managed код.


Какая ещё дилемма? C++ плохо интеропится с C++-ными либами при несогласованном ABI. Проблема и понятна, и решена в большей или меньшей степени. Через старый добрый C-интерфейс он прекрасно связывается с чем угодно.

Кстати, а две виртуальных машины .Net (в смысле — два активных экземпляра .Net FW) разных версий свяжутся друг с другом "естественным" порядком? Или тоже с бубном и интеропом поплясать надо? А .Net с Java естественно стыкуются?

O>>>>констрейны дают возможность предопределить поведение при компиляции. Да и еще, плюсы то развиваются, стандарт постоянно дополняется новыми фичами расширяюшими возможности, typeof это не последнее

G>>>За последние 5 лет какое развитие было?
O>> фреймворки ж)
G>Мы про язык\стандартную библиотеку.

Загляни в boost — там ответ на вопрос по стандартной библиотеке. А то, что сам язык за 5 лет не поменялся — так это очень даже хорошо.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 25.04.09 07:07
Здравствуйте, gandjustas, Вы писали:

G>Никаких средств разрабтки без XNA не нашел.

Неудивительно. Просто так с куста никто тебе девелопить ничего серьезного не даст.
XBOX Devkit и SDK выдаются тока по договору с МС.

G>Видится мне что на XBox игры только на XNA, а соовественно .NET\C#

Неправильно видится.

G>Игр таких много — http://ru.wikipedia.org/wiki/Список_игр_на_Xbox_360

Неужто ты и вправду думаешь, что кто то будет переписывать на ХНЮ такие С++ игры как Bioshock, Assassin's Creed, COD, TES, FEAR и т.п.?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[28]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 25.04.09 07:07
Оценка:1 (1)
Здравствуйте, gandjustas, Вы писали:

Х>>я вот призадумался, ты или не знаешь что такое движок, или толком не понимаешь что такое XNA, или ты так далёк от игростроя что почитав "интернеты" придумал свой мир где дотнет захватил игрострой :-D

G>Я отлично знаю что такое движок
Да вот что то не бросается в глаза.

G>даже сам писал что-то подобное, и даже дописал. А потом понял что херней занимался долго время.

Угу, ясно.

Х>>Halo 3 вообще никаким боком к XNA не касается, что и не удивительно для игры класса AAA.

G>Да ну. И на чем ты напишешь игру для XBox 360?
На С++ и XBox 360 SDK, которую надо по договору получить у МС. Не бесплатно разумеется.
На шарпе можно говнокодить под ХНЮ, которая суть бесплатный конструктор "налабай дома тетрис".
Чуть что посерьезнее — быстро упрешься в лимиты железа.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[10]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 25.04.09 07:23
Здравствуйте, romangr, Вы писали:

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

B>>неиспользуемые объекты будут держаться до заврешения программы.
B>>И попробуй убеди меня что это не утечка памяти. И я очень сомневаюсь gc при вызове "ручками" поймет что это некому не нажный код и удалит его.
B>>P.S. это высосанный из пальца пример, но проблему он показывает вполне.

R>Этот высосанный из пальца пример показывает, что ты не знаешь ни c#, ни то как работает gc.


Я, кстати, проверил только что. Есть приложение на WPF, вбил следующий Main:
public static void Main() 
{
    var d = new Test[1000000];
    for (int i = 0; i < d.Length; i++)
    {
        d[i] = new Test();
    }
    d[23].F = 23;
    d[230].F = 23;
    MyApplication app = new MyApplication();
    app.Run();
}


Test — простой класс с двумя-тремя свойствами, который в финализаторе показывает MessageBox.

Запустил в debug — массив жил на протяжении работы приложения.
Запустил в release, но из под Студии — массив жил на протяжении работы приложения.
Запустил в release просто из Проводника — объекты массива d начали собираться GC еще на этапе загрузки главного окна приложения.
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[11]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 25.04.09 08:13
Здравствуйте, MxKazan, Вы писали:

MK>Запустил в debug — массив жил на протяжении работы приложения.

MK>Запустил в release, но из под Студии — массив жил на протяжении работы приложения.
MK>Запустил в release просто из Проводника — объекты массива d начали собираться GC еще на этапе загрузки главного окна приложения.

При подключении дебагера время жизни локальных переменных продляется до конца блока.
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 25.04.09 08:15
Здравствуйте, Геннадий Васильев, Вы писали:

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


Х>>>пойнт был не в строках а в константности объектов, замени строку на экземпляр своего класса и разрыдайся вместе со сторонниками C#

G>>Тоже ничего не произойдет, поменяется ссылка внутри метода.
G>>Будет плохо если лезть в поля объекта, но так мало кто делает, потому что можно вернуть новый объект из метода и не заботиться о его времени жизни. В C++ так нельзя.

ГВ>Можно, но так не любят делать, чтобы не связываться с дополнительным оверхедом по быстродействию.




Это в языке, который не имеет оверхедов (с)
Re[21]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 25.04.09 08:25
Здравствуйте, Геннадий Васильев, Вы писали:

O>>>т.к. хочется сделать красиво, а не можется

G>>Красиво это как? Нафигачить шаблоков?
G>>И как на плюсах сделать красиво IoC-контейнер?
ГВ>Какой именно? В смысле — под какое использование?
Например как MSовский Unity.

G>>>>Такие выкрутасы с перегрузкой от бедности языка, а обилиле подобных "фич" только повышают возможность создать нифига нечитаемый код.

O>>> возможность перегружать это от бедности?
G>>Нет, примерение этой возможности — от бедности.
G>>В Boost даже зяпятую перегрузили потому что инициализаторов коллейкций не было. В C# таки догоадались включить эту фичу.

ГВ>Значит, если отсутствующую фичу реализовали средствами языка — это, типа, недостаток языка. Ясен пень — язык будет плох до тех пор, пока в него не будет прямо включено всё-всё известное на данный момент во всех доступных комбинациях. А то не ровён час — библиотеку писать придётся. Логика жжот напалмом! Сила слова, да.

C# развивающийся язык, за 5 лет в него включили столько фич, сколько С++ не снилось за всю историю существования. И при этом C# не превратился в помойку.
В С++ развивать языковые средства можно, но очень осторожно, новый стандарт это показывает. Кстати, когда очередной раз планируется его принятие?


G>>COM это хорошо, но мееедлеееенно в случае outproc и небезопасно в случае inproc. Вот тебе и дилемма, выход из которой — managed код.

ГВ>Какая ещё дилемма? C++ плохо интеропится с C++-ными либами при несогласованном ABI. Проблема и понятна, и решена в большей или меньшей степени. Через старый добрый C-интерфейс он прекрасно связывается с чем угодно.
Угу, и вся "мощь абстракций" упрется в вызовы GetSomeHandle в итоге. Потрясающий язык.

ГВ>Кстати, а две виртуальных машины .Net (в смысле — два активных экземпляра .Net FW) разных версий свяжутся друг с другом "естественным" порядком? Или тоже с бубном и интеропом поплясать надо?

Сейчас два СДК разных версий не уживаются в одном процессе, то есть нельзя запустить сборку с FW1.1 в процессе FW2.0, но такое очень редко случается. Разные версии FW хорошо совместимы по исходному коду и пересобрать под второй фреймворк (и 3.0 и 3.5) не представляет проблем.
Следующая версия CLR будет нормально работать в одном процессе с предыдущими.

ГВ>А .Net с Java естественно стыкуются?

только интероп через C или средства межпроцессного взаимодействия.
Re[28]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 25.04.09 08:38
Здравствуйте, gandjustas, Вы писали:

G>>>Будет плохо если лезть в поля объекта, но так мало кто делает, потому что можно вернуть новый объект из метода и не заботиться о его времени жизни. В C++ так нельзя.


ГВ>>Можно, но так не любят делать, чтобы не связываться с дополнительным оверхедом по быстродействию.


G>


G>Это в языке, который не имеет оверхедов (с)


Никто не утверждал, что на C++ бесконечный цикл исполняется за 0 секунд.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 25.04.09 09:06
Оценка:2 (1) +1
Здравствуйте, gandjustas, Вы писали:

O>>>>т.к. хочется сделать красиво, а не можется

G>>>Красиво это как? Нафигачить шаблоков?
G>>>И как на плюсах сделать красиво IoC-контейнер?
ГВ>>Какой именно? В смысле — под какое использование?
G>Например как MSовский Unity.

OK, теперь давай выясним, что такое "красиво". Желательный интерфейс набросаешь кратенько?

ГВ>>Значит, если отсутствующую фичу реализовали средствами языка — это, типа, недостаток языка. Ясен пень — язык будет плох до тех пор, пока в него не будет прямо включено всё-всё известное на данный момент во всех доступных комбинациях. А то не ровён час — библиотеку писать придётся. Логика жжот напалмом! Сила слова, да.

G>C# развивающийся язык, за 5 лет в него включили столько фич, сколько С++ не снилось за всю историю существования. И при этом C# не превратился в помойку.

И как это опровергает сказанное мной? Что если фича реализована средствами языка — это не недостаток самого языка?

G>В С++ развивать языковые средства можно, но очень осторожно, новый стандарт это показывает.


ИМХО, новый стандарт показывает ещё и вполне традиционный подход: зачем менять язык, если свойства некой фичи можно реализовать имеющимися средствами? Собственно, это много раз сказано в D&E.

G>Кстати, когда очередной раз планируется его принятие?


Шут их знает. Не то в этом году, не то в следующем.

ГВ>>Какая ещё дилемма? C++ плохо интеропится с C++-ными либами при несогласованном ABI. Проблема и понятна, и решена в большей или меньшей степени. Через старый добрый C-интерфейс он прекрасно связывается с чем угодно.

G>Угу, и вся "мощь абстракций" упрется в вызовы GetSomeHandle в итоге. Потрясающий язык.

Почему? Компоновку вызовов GetSomeHandle в классы никто не отменяет.

ГВ>>Кстати, а две виртуальных машины .Net (в смысле — два активных экземпляра .Net FW) разных версий свяжутся друг с другом "естественным" порядком? Или тоже с бубном и интеропом поплясать надо?

G>Сейчас два СДК разных версий не уживаются в одном процессе, то есть нельзя запустить сборку с FW1.1 в процессе FW2.0, но такое очень редко случается. Разные версии FW хорошо совместимы по исходному коду и пересобрать под второй фреймворк (и 3.0 и 3.5) не представляет проблем.
G>Следующая версия CLR будет нормально работать в одном процессе с предыдущими.
ГВ>>А .Net с Java естественно стыкуются?
G>только интероп через C или средства межпроцессного взаимодействия.

Вопросы были риторическими. Иными словами, на самом деле проблем с совместимостью и интероперабельностью хватает у всех, так что выпячивать аналогичные недостатки C++ как некие особенные тут нет никакого смысла.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 25.04.09 09:28
Оценка: +1
Здравствуйте, criosray, Вы писали:

C>Откуда информация? Дайте ссылку на авторитетный источник.


Покопайся в сообщениях вот этого сиятельного господина.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[32]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Mamuthttp://dmitriid.com/
Дата: 25.04.09 09:32
Оценка:2 (1)
Здравствуйте, Anton Batenev, Вы писали:

AB> M> Чектого определения нет. Обычно просто обозначает высококачественную игру с большим бюдэетом.


AB> А предполагается, что качество напрямую коррелирует с размером бюджета?


Неа Тут все типа вилами по воде. Если игра огромнобюджетная + качественная + «не провалилась в прокате» (по аналогии с фильмами ), то это — ААА
Re: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: SergeyT.http://sergeyteplyakov.blogspot.com/
Дата: 25.04.09 09:41
Оценка:27 (10) +1

Мне кажется, что языки, используемые нами для выражения своих идей, становятся частью нас самих, поэтому, если вы знаете только один язык, может показаться, будто сторонники других языков представляют опасность лично для вас. Мне представляется, что выход из этой ситуации – освоение других языков. Сомневаюсь, что можно быть профессионалом в области ПО и знать лишь один язык программирования. Может быть и экономическая причина: фундаментальные знания выходят за границы языка программирования в отличие от многих практических навыков. Поэтому, если я знаю только язык X и его наборы инструментов, а вы являетесь сторонником языка Y и его наборов инструментов, вы представляете угрозу для источника моего заработка. И вновь решение, как мне кажется, — в знании нескольких языков и наборов инструментов (а также твердое понимание фундаментальных концепций).

Интервью++: Бьерн Страуструп об эволюции языков

Портфелем знаний мы предпочитаем называть все факты, известные программистам об информатике, обалсти приложений, в которых они работают, и накопленный ими опыт. Управление портфелем знаний очень похоже на управление финансовыми портфелем.
Предложения по поддержке портфеля знаний:
— Учите (как минимум) по одному языку программирования каждый год.
— Читайте по одной технической книге ежеквартально.
— Читайте книги, не относящиеся к технической литературе.
— Экспериментируйте с различными операционными средами.
Важно продолжать инвестирование. Как только вы почувствуете, что освоили новый язык или фрагмент технологии, двигайтесь дальше. Изучайте другой.
Неважно, будете ли вы когда-либо использовать одну из этих технологий в проекте или даже не упомянете о них в своем резюме. Процесс обучения расширит ваше мышление, открывая вас для новых возможностей и новых путей в творчестве. "Перекрестное опыление" идей важно; попытайтесь применить выученные уроки к проекту, над которым вы работаете в настоящее время. Даже если в вашем проекте не используется некая технология, вы наверняка сможете позаимствовать некоторые идеи.

Эндрю Хант и Дэвид Томас. Программист-прагматик. Путь от подмастерья к мастеру

Как сказал Дэвид Грфйс (Gries) подход к программированию не должен определяться используемыми инструментами. В связи с этим он проводит различие между программированием на языке (programming in lanuage) и программирование с использованием языка (programming into language). Разработчики, программирующие «на» языке, ограничивают свое мышление конструкциями, непосредственно поддерживаемых языком. Если предоставляемые языком средства примитивны, мысли программистов будут столь же примитивными.
Разработчики, программирующие «с использованием» языка, сначала решают, какие мысли они хотят выразить, после чего определяют, как выразить их при помощи конкретного языка.

Стив Макконнелл. Совершенный код.

Я привел три цитаты, каждая из которых говорит о второстепенной роли языка программирования в жизни разработчика. Причем автор одной из них имеет непосредственное отношение к одному из языков программирования!
Конечно же, я не придерживаюсь мысли, что язык программирования не играет никакой роли. Нет, это не так. Я не считаю, что не нужно углублять свои знания в конкретном языке или технологии; не считаю, что нужно выбросить книги Герба Саттера и Андея Александреску, Джошуа Блоха и Билла Вагнера, и не зачитыватся этюдами nikov-а на этом форуме. Все это очень полезно. Но польза не только в том, что эти знания вы можете использовать сейчас на текущем проекте с текущим языком и технологией, а в том, что эти знания позволят перейти вам на следующий уровень своего развития и решать более сложные задачи в следующих проектах, уже на совершенно других языках программирования и совершенно других технологиях.

Продолжая рассуждение о языках программирования в жизни разработчика, достаточно вспомнить, что пишет Брукс и Буч о сложности программных систем:

Эйнштейн неоднократно утверждал, что природа должна иметь простые объяснения, поскольку Богу не свойственны капризность и произвол. У программиста нет такого утешения: сложность, с которой он должен справиться, лежит в самой природе системы

а затем:

Сложность программного обеспечения – отнюдь не случайное его свойство. Сложность вызывается четырьмя основными причинами: сложностью реальной предметной области, из которой исходит заказ на разработку; турдностью управления процессом разработки; необходимостью обеспечить достаточную гибкость программы; неудовлетворительными способами описания поведения больших дискретных систем.


Как вы можете заметить, не один из этих пунктов не содержит фразы: «сложность программного обеспечения обусловлена неверным выбором языка программирования». Кроме того, вам будет довольно сложно найти цитату авторитетного автора, который бы сказал что-то вроде этого: «Изучение языка программирования А – это ваш путь к успеху. Благодаря ему уже через полгода его изучения вас ждет почет и уважение в среде разработчиков по всему миру, вы будете президентом корпорации и будете ездить на Bentley, а вот если ваш выбор остановится на языке программирования Б – вас ждет позор, забвение и жизнь на помойке».

На закуску, хочется привести еще одну цитату Ханта и Томаса:

Программирование – это прикладное искусство. Простейший его смысл заключается в следующем: заставить компьютер делать то, что вам нужно (или то, что нужно пользователю, работающему с вашей программой). Программист – он и слушатель, он и советник, он и переводчик и даже диктатор. Вы пытаетесь ухватить суть не совсем ясных требований и найти такой способ их выражения, что только машина сможет оценить их по достоинству. Вы пытаетесь задокументировать работу так, чтобы она была понятна другим, спроектировать ее так, чтобы другие могли на нее положиться. Кроме того, вы пытаетесь сделать все это вопреки безжалостному ходу стрелки часов, отсчитывающих время, отпущенное на проект. Каждый день вы совершаете по маленькому чуду.
Это непростая работа.
Многие предлагают вам помощь. Фирмы-поставщики инструментальных средств настойчиво говорят о чудесах, которые творят их программы. Мудрецы от методологии заверяют в том, что их средства гарантируют результаты. Каждый считает свой язык программирования лучшим из лучших, а операционную систему – панацеей.
Разумеется, эти утверждения неверны. Простых ответов не существует. Не существует такого понятия, как наилучшее решение, будь то инструментальное средство, язык или операционная система. Существует лишь некие системы, которые являются более приемлемыми при конкретном стечении обстоятельств.
И в этот момент на сцену выходит прагматизм. Стоит избегать обряда венчания с конкретной технологией, но при этом необходимо обладать подготовкой и опытом, настолько обширными, что это позволит выбрать верные решения в конкретных ситуациях. Ваша подготовка происходит из понимания основных принципов информатики, а опыт основывается на разнообразных практических проектах. Теория и практика сочетаются, придавая вам силу.


ЗЫ. топикпастеру (если он все еще читает это обсуждение): расценивай это обсуждение так, как будто оно находится в форуме «Коллеги, улыбнитесь». Главное – выбор интересного коллектива с интересной задачей, а язык программирования имеет второстепенное значение.
Re[2]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 25.04.09 09:50
Оценка: +1
Здравствуйте, SergeyT.,

Отдельное спасибо за удачную подборку саму по себе.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[13]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: SleepyDrago 
Дата: 25.04.09 10:06
Здравствуйте, gandjustas, Вы писали:

G>Да вот в этот раз нет. Именно по замерам времени выполнения код на F# оказался быстрее C++_ного варианта в 8 раз.


G>Правда никто мегаоптимизацией на С++ не занимался.

G>Вот и хочется увидеть вариант решения задачи на С++ от крутых перцев из КСВ.
видимо крутые перцы из КСВ заняты
я тут мимо прохожу раз в N дней, от того и лаги.
Судя по цифрам тот код на плюсах что у вас есть ничего не стоит — так что
обрежьте лишнее, и кидайте на публичный ресурс а ссылку в ответ.
Когда меня чужие баги задалбывают я для отдыха гоняю профайлер — так что если алгоритмы примерно похожи выгребание ошибок первого порядка позволит С++ "не ударить в грязь лицом".

зы. сделайте тестовый набор данных, эталон. Длина запуска не больше 5 минут на типовом железе. Мне вот может придется винду поставить ради этого — так что если будет совсем грустно то могу и забить.
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 25.04.09 10:46
Здравствуйте, Геннадий Васильев, Вы писали:

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


O>>>>>т.к. хочется сделать красиво, а не можется

G>>>>Красиво это как? Нафигачить шаблоков?
G>>>>И как на плюсах сделать красиво IoC-контейнер?
ГВ>>>Какой именно? В смысле — под какое использование?
G>>Например как MSовский Unity.

ГВ>OK, теперь давай выясним, что такое "красиво". Желательный интерфейс набросаешь кратенько?

Угу. Есть метод Register, который заносит в контейнер пару (тип интерфейса, тип реализации), и метод Resolve, который по заданному типу интерфейса выдает объект нужного типа реализации.
Когда получится можно сделать так чтобы если тип реализации имеет конструктор с параметрами, то при создании объекта в параметры конструктора подсчтавлялись бы объекты полученные через Resolve.

ГВ>>>Значит, если отсутствующую фичу реализовали средствами языка — это, типа, недостаток языка. Ясен пень — язык будет плох до тех пор, пока в него не будет прямо включено всё-всё известное на данный момент во всех доступных комбинациях. А то не ровён час — библиотеку писать придётся. Логика жжот напалмом! Сила слова, да.

G>>C# развивающийся язык, за 5 лет в него включили столько фич, сколько С++ не снилось за всю историю существования. И при этом C# не превратился в помойку.
ГВ>И как это опровергает сказанное мной? Что если фича реализована средствами языка — это не недостаток самого языка?
Если фича востребована, а реализация делается через непонятно что. причем за много лет в самом языке это не было исправлено, то это однозначно свидетельствует о недостатке языка.


ГВ>>>Кстати, а две виртуальных машины .Net (в смысле — два активных экземпляра .Net FW) разных версий свяжутся друг с другом "естественным" порядком? Или тоже с бубном и интеропом поплясать надо?

G>>Сейчас два СДК разных версий не уживаются в одном процессе, то есть нельзя запустить сборку с FW1.1 в процессе FW2.0, но такое очень редко случается. Разные версии FW хорошо совместимы по исходному коду и пересобрать под второй фреймворк (и 3.0 и 3.5) не представляет проблем.
G>>Следующая версия CLR будет нормально работать в одном процессе с предыдущими.
ГВ>>>А .Net с Java естественно стыкуются?
G>>только интероп через C или средства межпроцессного взаимодействия.

ГВ>Вопросы были риторическими. Иными словами, на самом деле проблем с совместимостью и интероперабельностью хватает у всех, так что выпячивать аналогичные недостатки C++ как некие особенные тут нет никакого смысла.

На самом деле проблем нету, потому что все описанное является только потенциальными проблемами и очень редко встречается в жизни. Тогда как интероп между C++_ными библиотеками встречается часто.
Re[14]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 25.04.09 10:49
Здравствуйте, SleepyDrago, Вы писали:

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


G>>Да вот в этот раз нет. Именно по замерам времени выполнения код на F# оказался быстрее C++_ного варианта в 8 раз.


G>>Правда никто мегаоптимизацией на С++ не занимался.

G>>Вот и хочется увидеть вариант решения задачи на С++ от крутых перцев из КСВ.
SD>видимо крутые перцы из КСВ заняты
За то время, котороекрутые перцы потратили на постинг булшита могли бы уже такую простую программку написать.
Re[20]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: ollv 
Дата: 25.04.09 11:19
Здравствуйте, gandjustas, Вы писали:

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


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


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


O>>>> Кроме того, на плюсах вполне реализуемы элементы не родственных стурктур, к примеру итерации for_each, find_if count_if, функторы, придают плюсам оттенки функциональных языков

G>>>ржунимагу. шаблоны позволяют сделать то что уже есть в других языках
ну посмейся, может в процессе придет понимание того, что в с++ есть возможность сделать то, чего нет в других языках, и есть возможность сделать подобие того, чего в нем изначально не было, и есть в других. И это при том, что в нем можно работать как в менеджед, так и в анменеджед, Сравнивать же менеджед и анменеджед — изначально бредово, т.к. если идет сравнение возможностей, то последние молчат при необходимости работы с МАПИ и библиотеками с ансаппортным диспатч и т.д.

O>>>>но вообще метапрограммирование видоизменяет плюсы, а говорить, что это все можно реализовать в джава или дотнете — просто не знать плюсы

G>>>Рассказываю тайны, большенство программистов на C# достаточно долго программили на плюсах и отлично его знают.
G>>>А вот наоборот — редко бывает.
O>> пустые слова, шарп расхолаживает
G>Чего расхолаживает?
Ощущение , что попал в песочницу с необходимостью постоянно в случае невозможности рыть совочком, прыгать опять за забор или через импорт апишных методов, или чз написание дополнительных утилзов на сях

O>>>>Даже простейший вызов из темплейтного метода непредопределенного класса с оператором () — уже недостижимая мечта для шарпа или жавы.

G>>>Включай моз, для чего нужно переопределение скобок? Чтобы объект вел себя как функция, а это значит что возможностей функций не хватает.
O>> Преопределение скобок — это лишь перегрузка одного из операторов, и все, а то, что это получило свое развитие это отдельная история, но основа опять таки не в этом,
G>А в чем? Зачем скобки переопределять надо?
ты изначально поставил глупый вопрос, нафига в нете делегаты, что методов мало ?

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

G>Это о чем? Какие делегаты, биндинг, функторы? Вывалил все умные словка, которые знаешь?
А ты подумай немного, ..как реализовывать late fastening в дотнете ? Когда конструирование аргументов, владельцев методов, и создание каскада вызовов разведено во времени? — никак. а через поздний биндинг это решается.

O>>а при писанине на дотнете после плюсов всегда чувствуешь тормоза, и ограниченность,

G>
G>Особенно тормоза

O>>т.к. хочется сделать красиво, а не можется

G>Красиво это как? Нафигачить шаблоков?
G>И как на плюсах сделать красиво IoC-контейнер?
да запросто, причем реализовывается с ограничение депенденси, при превышении даже собираться не будет

G>>>Такие выкрутасы с перегрузкой от бедности языка, а обилиле подобных "фич" только повышают возможность создать нифига нечитаемый код.

O>> возможность перегружать это от бедности?
G>Нет, примерение этой возможности — от бедности.
G>В Boost даже зяпятую перегрузили потому что инициализаторов коллейкций не было. В C# таки догоадались включить эту фичу.
ах в бууст даже запятую перегрузили .. ты меня реально утомил. Плюсы на столько гибкий язык, что позволяет имлементить реализации модифицирующие синтаксис, да еще и чик __asm и ты уже там . А тебя это раздражает Да

O>>>>Впрочем практика показывает, базовый функционал крупных проектов требующих гибкой архитектуры реализуется чаще на плюсах (во всяком случае в моей практике это именно так)

G>>>Какой гибкой архитектуры? C++ не умеет интеропать ни с какими другими языками, даже при интеропе с другой либой на С++ могут возникнуть проблемы.
O>> ему это и не надо, а для предоставления интерфейса наверх и предоставлен менеджед С++, и ком
G>Менеджед С++ вам не поможет, он интеропа между дувумя бинарями не добавляет.
G>COM это хорошо, но мееедлеееенно в случае outproc и небезопасно в случае inproc. Вот тебе и дилемма, выход из которой — managed код.
Ком нужен для определенной специфики, чтобы мегатяжелые менеджед грабли таки могли получить быстро работающий код, или код, который может дернуть то, чего ну никак не дернуть из менеджед , или просто попытаться избавить себя от гемороя мегатомных импортов. А для реализации прослоек используется менеджед си.

O>>>>констрейны дают возможность предопределить поведение при компиляции. Да и еще, плюсы то развиваются, стандарт постоянно дополняется новыми фичами расширяюшими возможности, typeof это не последнее

G>>>За последние 5 лет какое развитие было?
O>> фреймворки ж)
G>Мы про язык\стандартную библиотеку.
опять за рыбу деньги, — фреймворк внесенный в стандарт становится частью языка. Просто понимаешь какая штука, за время своего существования плюсы стали академическим языком, просто так внести новый фреймворк, не так просто нужно доказать, что в этом есть необходимость.
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
Re[15]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: SleepyDrago 
Дата: 25.04.09 11:39
Здравствуйте, gandjustas, Вы писали:

G>>>Правда никто мегаоптимизацией на С++ не занимался.

G>>>Вот и хочется увидеть вариант решения задачи на С++ от крутых перцев из КСВ.
SD>>видимо крутые перцы из КСВ заняты
G>За то время, котороекрутые перцы потратили на постинг булшита могли бы уже такую простую программку написать.
если не интересно здесь кидайте к себе в блог. Ссылки на идею алгоритма недостаточно для того чтобы сдвинуть с места ленивого человека
Re[21]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 25.04.09 11:44
Оценка: :)
Здравствуйте, ollv, Вы писали:

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


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


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


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


O>>>>> Кроме того, на плюсах вполне реализуемы элементы не родственных стурктур, к примеру итерации for_each, find_if count_if, функторы, придают плюсам оттенки функциональных языков

G>>>>ржунимагу. шаблоны позволяют сделать то что уже есть в других языках
O> ну посмейся, может в процессе придет понимание того, что в с++ есть возможность сделать то, чего нет в других языках, и есть возможность сделать подобие того, чего в нем изначально не было, и есть в других.
Ну тогда в студию GC, с такими же performance характеристиками, как в managed.

O>И это при том, что в нем можно работать как в менеджед, так и в анменеджед,

Это не является преимуществом.
У unmanaged вообще говоря достаточно мало преимуществ.

O>Сравнивать же менеджед и анменеджед — изначально бредово, т.к. если идет сравнение возможностей, то последние молчат при необходимости работы с МАПИ и библиотеками с ансаппортным диспатч и т.д.

.NET умеет работать с COM.

O>>>>>но вообще метапрограммирование видоизменяет плюсы, а говорить, что это все можно реализовать в джава или дотнете — просто не знать плюсы

G>>>>Рассказываю тайны, большенство программистов на C# достаточно долго программили на плюсах и отлично его знают.
G>>>>А вот наоборот — редко бывает.
O>>> пустые слова, шарп расхолаживает
G>>Чего расхолаживает?
O> Ощущение , что попал в песочницу с необходимостью постоянно в случае невозможности рыть совочком, прыгать опять за забор или через импорт апишных методов, или чз написание дополнительных утилзов на сях
Ты неверное в другом мире живешь.
Сколько я проектов сделал на .NET необходимость в вызовах нативных методов возникала раза два.
Неверное это от твоего незнания библиотеки.

O>>>>>Даже простейший вызов из темплейтного метода непредопределенного класса с оператором () — уже недостижимая мечта для шарпа или жавы.

G>>>>Включай моз, для чего нужно переопределение скобок? Чтобы объект вел себя как функция, а это значит что возможностей функций не хватает.
O>>> Преопределение скобок — это лишь перегрузка одного из операторов, и все, а то, что это получило свое развитие это отдельная история, но основа опять таки не в этом,
G>>А в чем? Зачем скобки переопределять надо?
O> ты изначально поставил глупый вопрос, нафига в нете делегаты, что методов мало ?
Делегаты можно считать навороченным "указателем на функцию", так как в .NET сам методы не являются FCO.
А в C++ не было ни делегатов и ФВП, были только указатели на функцию, которые как и все указатели наделены родовыми травмами.
Перегрузка скобок дает возможность делать что-то издалека похоже на делегаты .NET или ФВП, в остальном такая перегрузка нафиг не нужна.

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

G>>Это о чем? Какие делегаты, биндинг, функторы? Вывалил все умные словка, которые знаешь?
O> А ты подумай немного, ..как реализовывать late fastening в дотнете ? Когда конструирование аргументов, владельцев методов, и создание каскада вызовов разведено во времени? — никак. а через поздний биндинг это решается.
Ты вывалил все оставшиеся слова, которые знаешь? Покажи пример кода на С++.

O>>>т.к. хочется сделать красиво, а не можется

G>>Красиво это как? Нафигачить шаблоков?
G>>И как на плюсах сделать красиво IoC-контейнер?
O> да запросто, причем реализовывается с ограничение депенденси, при превышении даже собираться не будет
Ну код в студию.

G>>>>Такие выкрутасы с перегрузкой от бедности языка, а обилиле подобных "фич" только повышают возможность создать нифига нечитаемый код.

O>>> возможность перегружать это от бедности?
G>>Нет, примерение этой возможности — от бедности.
G>>В Boost даже зяпятую перегрузили потому что инициализаторов коллейкций не было. В C# таки догоадались включить эту фичу.
O> ах в бууст даже запятую перегрузили .. ты меня реально утомил. Плюсы на столько гибкий язык, что позволяет имлементить реализации модифицирующие синтаксис, да еще и чик __asm и ты уже там . А тебя это раздражает Да
Если каждый начнет "имплементить реализации" (шибанутое словосочетание) модифицирющие синтаксис, то будет попа. Код станет абсолютно нечитаемым.

O> Ком нужен для определенной специфики, чтобы мегатяжелые менеджед грабли таки могли получить быстро работающий код, или код, который может дернуть то, чего ну никак не дернуть из менеджед , или просто попытаться избавить себя от гемороя мегатомных импортов. А для реализации прослоек используется менеджед си.

Это ты сам себе придумал? Из C# отлично дергаются нативные методы, да нужны они очень редко, а работа с комом происходит гораздо проще.

G>>>>За последние 5 лет какое развитие было?

O>>> фреймворки ж)
G>>Мы про язык\стандартную библиотеку.
O> опять за рыбу деньги, — фреймворк внесенный в стандарт становится частью языка. Просто понимаешь какая штука, за время своего существования плюсы стали академическим языком, просто так внести новый фреймворк, не так просто нужно доказать, что в этом есть необходимость.
Не отмазывайся.
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 25.04.09 11:59
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

ГВ>>OK, теперь давай выясним, что такое "красиво". Желательный интерфейс набросаешь кратенько?

G>Угу. Есть метод Register, который заносит в контейнер пару (тип интерфейса, тип реализации), и метод Resolve, который по заданному типу интерфейса выдает объект нужного типа реализации.
G>Когда получится можно сделать так чтобы если тип реализации имеет конструктор с параметрами, то при создании объекта в параметры конструктора подсчтавлялись бы объекты полученные через Resolve.

OK, сегодня-завтра набросаю. В принципе, сразу можно сказать, что вот такой примерно интерфейс вполне достижим:

class IoC_Container
{
  public:
    template<typename I_, typename T_>
      void Register(){...}

    template<typename I_>
      I_ *Resolve(){...}
};


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

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

ГВ>>И как это опровергает сказанное мной? Что если фича реализована средствами языка — это не недостаток самого языка?

G>Если фича востребована, а реализация делается через непонятно что. причем за много лет в самом языке это не было исправлено, то это однозначно свидетельствует о недостатке языка.

В лучшем случае, это свидетельствует о недостатках процесса управления разработкой языка. Мало ли какие фичи могут оказаться востребованными?

ГВ>>Вопросы были риторическими. Иными словами, на самом деле проблем с совместимостью и интероперабельностью хватает у всех, так что выпячивать аналогичные недостатки C++ как некие особенные тут нет никакого смысла.

G>На самом деле проблем нету, потому что все описанное является только потенциальными проблемами и очень редко встречается в жизни. Тогда как интероп между C++_ными библиотеками встречается часто.

Как ни странно, но даже это вполне объяснимо количеством производителей компиляторов. В отличие от той же Java и тем более — от .Net. Кстати, заморочки с переносом кода между .Net и Mono, AFAIK, имеют место быть.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 25.04.09 12:07
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>С другой стороны, в самом по себе паттерне IoC ничего запредельного нет, мне сейчас любопытно поиграться в тех ограничениях, которые ты предложил.

Удачи. Учти что ни одной толковой реализации IoC-контейнера на C++ с конфигурированием в рантайме нету.
Я видел только решения с precompile-time кодогенерацией.

ГВ>>>И как это опровергает сказанное мной? Что если фича реализована средствами языка — это не недостаток самого языка?

G>>Если фича востребована, а реализация делается через непонятно что. причем за много лет в самом языке это не было исправлено, то это однозначно свидетельствует о недостатке языка.
ГВ>В лучшем случае, это свидетельствует о недостатках процесса управления разработкой языка.
Наличие надостатков в управлении разработкой веде к недостаткам в самом языке.

ГВ>Мало ли какие фичи могут оказаться востребованными?

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

ГВ>>>Вопросы были риторическими. Иными словами, на самом деле проблем с совместимостью и интероперабельностью хватает у всех, так что выпячивать аналогичные недостатки C++ как некие особенные тут нет никакого смысла.

G>>На самом деле проблем нету, потому что все описанное является только потенциальными проблемами и очень редко встречается в жизни. Тогда как интероп между C++_ными библиотеками встречается часто.

ГВ>Как ни странно, но даже это вполне объяснимо количеством производителей компиляторов. В отличие от той же Java и тем более — от .Net. Кстати, заморочки с переносом кода между .Net и Mono, AFAIK, имеют место быть.

Не имеют, надо только уметь готовить.
Специально поставил второй моно, написал на нем Winforms прогу, не используя mono-scecific библиотеки, и она запустилась под .NET без перекомпиляции.
Если хочется переносимости — надо использовать переносимое подмножество библиотек, это аксиома для любого языка.
Re[6]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Silver_s 
Дата: 25.04.09 14:44
Здравствуйте, shrecher, Вы писали:

S>Эти твои утверждения протеворечивы. Тут только одно из двух: либо престанут разрабатывать на C++, что мало вероятно, т.к. очень много продуктов на нем, тогда да — c++ таланты исчезнут; либо, что более вероятно, продолжат разработку и развитие продуктов на C++, и тогда без людей не обойтись.


Если массовым софтом считать софт о котором слышали(или щупали) 20% от общего числа юзеров в мире. Над разработкой такого софта трудится видимо меньше 1% от общнго числа программистов. Кому хочется в этот 1% видимо стоит ориентироваться на С++. Хотя, для опытного разработчика знание языка это вобще то мелочь, нужно на порядок больше чем просто знание языка и нескольких небольших универсальных библиотек.
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: ollv 
Дата: 25.04.09 14:55
Здравствуйте, gandjustas, Вы писали:

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


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


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


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


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


O>>>>>> Кроме того, на плюсах вполне реализуемы элементы не родственных стурктур, к примеру итерации for_each, find_if count_if, функторы, придают плюсам оттенки функциональных языков

G>>>>>ржунимагу. шаблоны позволяют сделать то что уже есть в других языках
O>> ну посмейся, может в процессе придет понимание того, что в с++ есть возможность сделать то, чего нет в других языках, и есть возможность сделать подобие того, чего в нем изначально не было, и есть в других.
G>Ну тогда в студию GC, с такими же performance характеристиками, как в managed.
нахрен он нужен если есть шаред птр? чтобы морочить себе голову вызовом принудительной сборки для попытки освободить ресурс в прогнозируемое время

O>>И это при том, что в нем можно работать как в менеджед, так и в анменеджед,

G>Это не является преимуществом.
G>У unmanaged вообще говоря достаточно мало преимуществ.
ты совсем ляпнулся или как ? Код по работе из менеджед с МАПИ? (даже не пытайся, по твоим суждения видно что ты не доганяешь принципиальной разницы диспатч саппортинга )

O>>Сравнивать же менеджед и анменеджед — изначально бредово, т.к. если идет сравнение возможностей, то последние молчат при необходимости работы с МАПИ и библиотеками с ансаппортным диспатч и т.д.

G>.NET умеет работать с COM.
: насмешил мои тапочки очередной раз ..ну подними IUnknown

O>>>>>>но вообще метапрограммирование видоизменяет плюсы, а говорить, что это все можно реализовать в джава или дотнете — просто не знать плюсы

G>>>>>Рассказываю тайны, большенство программистов на C# достаточно долго программили на плюсах и отлично его знают.
G>>>>>А вот наоборот — редко бывает.
O>>>> пустые слова, шарп расхолаживает
G>>>Чего расхолаживает?
O>> Ощущение , что попал в песочницу с необходимостью постоянно в случае невозможности рыть совочком, прыгать опять за забор или через импорт апишных методов, или чз написание дополнительных утилзов на сях
G>Ты неверное в другом мире живешь.
G>Сколько я проектов сделал на .NET необходимость в вызовах нативных методов возникала раза два.
G>Неверное это от твоего незнания библиотеки.
Ха, какой библиотеки если есть области для которых менеджед код не имеет библиотек, МАПИ — это лишь одна — совсем малая из них. Ты что до сих пор не понял, роль менеджед Си?

O>>>>>>Даже простейший вызов из темплейтного метода непредопределенного класса с оператором () — уже недостижимая мечта для шарпа или жавы.

G>>>>>Включай моз, для чего нужно переопределение скобок? Чтобы объект вел себя как функция, а это значит что возможностей функций не хватает.
O>>>> Преопределение скобок — это лишь перегрузка одного из операторов, и все, а то, что это получило свое развитие это отдельная история, но основа опять таки не в этом,
G>>>А в чем? Зачем скобки переопределять надо?
O>> ты изначально поставил глупый вопрос, нафига в нете делегаты, что методов мало ?
G>Делегаты можно считать навороченным "указателем на функцию", так как в .NET сам методы не являются FCO.
G>А в C++ не было ни делегатов и ФВП, были только указатели на функцию, которые как и все указатели наделены родовыми травмами.
G>Перегрузка скобок дает возможность делать что-то издалека похоже на делегаты .NET или ФВП, в остальном такая перегрузка нафиг не нужна.
Да нифига, си благодаря своей гибкости () позволяет реализовать то, что есть в других языках без изменения самого Си , функторы появились зодолго до делегатов, — , которые в принципе ничем не отличаются от указателя на функцию, кроме оверкодинга в декларации.
идиома mem_fun и bind это гораздо более широкое понятие, чем делегаты именно благодаря позднему связыванию, когда
декларации вида:

class _1call 
{
  public:
  tempate <typename T> 
     void m(T val) {}
};

class _2call 
{
  public:
  tempate <typename T> 
     void m(T val) {}
};
...
task<_1call, task<_2call > > t (bind(&_1call::m<dyadya_vasya>), task<_2call, task<_3call >... >... );

//вызовется в последствии
_1call owner;
  t(owner)(dyadya_vasya);

с возможностью биндить как аргументы, так и владельцев, так и чуваков как ты, для обучения тому, что сранивать языки менеджед и анменеджед — глупо, только потому, что у каждого своя роль и преимущество. Что надо писать на лиспе, что-то на прологе,
К примеру анменеджед нельз использовать в том-же ком+. Так чтобы подвеситься на события некоего приложения ханделером через ком+ надо юзать менеджед. А чтобы дергать ком без поддержки диспатч надо юзать анменеджед. Только вот если говорить о синтаксисе, конечно каждый сам себе хозяин — но лично мне ближе плюсы.

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

G>>>Это о чем? Какие делегаты, биндинг, функторы? Вывалил все умные словка, которые знаешь?
O>> А ты подумай немного, ..как реализовывать late fastening в дотнете ? Когда конструирование аргументов, владельцев методов, и создание каскада вызовов разведено во времени? — никак. а через поздний биндинг это решается.
G>Ты вывалил все оставшиеся слова, которые знаешь? Покажи пример кода на С++.
тебе какой? иди бусты ревьювь, там каждый второй шаг — недостижимая мечта для менеджед языков.
да прочти констрейны для задачи поведения при сборке хотя бы, я там выше пример привел — такое на шарпе и еже с ним не изобразить. И замечу, к слову о абстракции на момент имплемента класса, параметр шаблона чистая абстракция, и вызовы от него в том числе, в отличие от шарпа, где надо указывать кто должен быть чем

O>>>>т.к. хочется сделать красиво, а не можется

G>>>Красиво это как? Нафигачить шаблоков?
G>>>И как на плюсах сделать красиво IoC-контейнер?
O>> да запросто, причем реализовывается с ограничение депенденси, при превышении даже собираться не будет
G>Ну код в студию.
денег давай будет — а пока можешь уже готовые решения посмотреть , а они есть ..

G>>>>>Такие выкрутасы с перегрузкой от бедности языка, а обилиле подобных "фич" только повышают возможность создать нифига нечитаемый код.

O>>>> возможность перегружать это от бедности?
G>>>Нет, примерение этой возможности — от бедности.
G>>>В Boost даже зяпятую перегрузили потому что инициализаторов коллейкций не было. В C# таки догоадались включить эту фичу.
O>> ах в бууст даже запятую перегрузили .. ты меня реально утомил. Плюсы на столько гибкий язык, что позволяет имлементить реализации модифицирующие синтаксис, да еще и чик __asm и ты уже там . А тебя это раздражает Да
G>Если каждый начнет "имплементить реализации" (шибанутое словосочетание) модифицирющие синтаксис, то будет попа. Код станет абсолютно нечитаемым.
на этой попе, простите, сидит весь NET

O>> Ком нужен для определенной специфики, чтобы мегатяжелые менеджед грабли таки могли получить быстро работающий код, или код, который может дернуть то, чего ну никак не дернуть из менеджед , или просто попытаться избавить себя от гемороя мегатомных импортов. А для реализации прослоек используется менеджед си.

G>Это ты сам себе придумал? Из C# отлично дергаются нативные методы, да нужны они очень редко, а работа с комом происходит гораздо проще.
Опять смешишь тапочки, ? создай в шарпе натив экземпляр и вызови от него метод.

G>>>>>За последние 5 лет какое развитие было?

O>>>> фреймворки ж)
G>>>Мы про язык\стандартную библиотеку.
O>> опять за рыбу деньги, — фреймворк внесенный в стандарт становится частью языка. Просто понимаешь какая штука, за время своего существования плюсы стали академическим языком, просто так внести новый фреймворк, не так просто нужно доказать, что в этом есть необходимость.
G>Не отмазывайся.
Это не отмазка, изучи историю написания MFC-шных листов и прочего, почему это делалось ? До того как шел в использование стл, после появления стл необходимость в этих листах отпала. Что же касается нета, то там все иначе, пока корпорация не разродится на патч все дышут веником.
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
Re[8]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Silver_s 
Дата: 25.04.09 15:36
Здравствуйте, kochetkov.vladimir, Вы писали:
MK>>Сначала Дворкин меня задалбывал этим предсказаниями чего там будет через 10-20 лет, теперь вот ты

KV>Не-не-не, он в конце-концов сдался и написал, что "конца С# не будет и никуда он не денется" Re: Сишарпкапец наступает
Автор: Pavel Dvorkin
Дата: 10.03.09


А какие проблемы ... даже если он изчезнет. Многие С# программисты с удовольствием с ним попрощаются если будет предложено что-то еще более эффективное. К ЯП понятие верность "неуместно". Только вот к тому времени на С++ будут еще меньше писать.

Вобще-то новинки вводят для того чтобы производительность труда программистов повысить. Не хочется не изучай. И вобще-то в C# (как языке) все новинки которые были — совсем мизерные в плане их изучения (2-3 дня) но не по полезности мизерные. Так что ворчать по поводу изменений стандарта С# вобще неуместно. ... Если меняются библиотеки это уже другое дело...
Re[3]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Silver_s 
Дата: 25.04.09 15:51
Оценка: +2
Здравствуйте, VladD2, Вы писали:

VD>Дык вокруг него такой ореол создали, что несколько лет назад плохое слово в сторону дизайна С++ сразу выливалось в анафему высказавшему эту мысль.


Если человек только начал изучать С++ и ему уже C++ больше нравится чем C# значит он только этот ореол и видел. По тому что на поверхностном уровне между этими языками практически никакой разницы.
Или "логическим" путем вывел : если на C++ писать сложнее => значит он круче.
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 25.04.09 16:03
Здравствуйте, ollv, Вы писали:

O>>> ну посмейся, может в процессе придет понимание того, что в с++ есть возможность сделать то, чего нет в других языках, и есть возможность сделать подобие того, чего в нем изначально не было, и есть в других.

G>>Ну тогда в студию GC, с такими же performance характеристиками, как в managed.
O> нахрен он нужен если есть шаред птр? чтобы морочить себе голову вызовом принудительной сборки для попытки освободить ресурс в прогнозируемое время
шаред птр — дополнительные тормоза на каждой операции присваивания и каждом выходе из блока. .NETовский GC порвет релизацию работы с динмамической памятью на shared_ptr как тузик грелку.

O>>>И это при том, что в нем можно работать как в менеджед, так и в анменеджед,

G>>Это не является преимуществом.
G>>У unmanaged вообще говоря достаточно мало преимуществ.
O>ты совсем ляпнулся или как ? Код по работе из менеджед с МАПИ? (даже не пытайся, по твоим суждения видно что ты не доганяешь принципиальной разницы диспатч саппортинга )
А нахрен он нужен в .NET?

O>>>Сравнивать же менеджед и анменеджед — изначально бредово, т.к. если идет сравнение возможностей, то последние молчат при необходимости работы с МАПИ и библиотеками с ансаппортным диспатч и т.д.

G>>.NET умеет работать с COM.
O> : насмешил мои тапочки очередной раз ..ну подними IUnknown
А зачем? .NET отлично работает с com без вникания в детали реализации этого COM. Не нужно знать про IUnknown, AddRef и Release, про CoCreateInstance и прочее/
То что ты считаеь крутостью является на самом деле ненужной шелухой.

G>>Ты неверное в другом мире живешь.

G>>Сколько я проектов сделал на .NET необходимость в вызовах нативных методов возникала раза два.
G>>Неверное это от твоего незнания библиотеки.
O>Ха, какой библиотеки если есть области для которых менеджед код не имеет библиотек, МАПИ — это лишь одна — совсем малая из них. Ты что до сих пор не понял, роль менеджед Си?
Да нахрен не нужен MAPI, .NET и без него почту слать умеет.

G>>Делегаты можно считать навороченным "указателем на функцию", так как в .NET сам методы не являются FCO.

G>>А в C++ не было ни делегатов и ФВП, были только указатели на функцию, которые как и все указатели наделены родовыми травмами.
G>>Перегрузка скобок дает возможность делать что-то издалека похоже на делегаты .NET или ФВП, в остальном такая перегрузка нафиг не нужна.
O> Да нифига, си благодаря своей гибкости () позволяет реализовать то, что есть в других языках без изменения самого Си , функторы появились зодолго до делегатов, — , которые в принципе ничем не отличаются от указателя на функцию, кроме оверкодинга в декларации.
O> идиома mem_fun и bind это гораздо более широкое понятие, чем делегаты именно благодаря позднему связыванию, когда
O>декларации вида:
O>
//нечитаемая фигня опущена

O>с возможностью биндить как аргументы, так и владельцев
А в чем крутость если тоже самое достигается передачей объекта как параметра?

O>>>>>т.к. хочется сделать красиво, а не можется

G>>>>Красиво это как? Нафигачить шаблоков?
G>>>>И как на плюсах сделать красиво IoC-контейнер?
O>>> да запросто, причем реализовывается с ограничение депенденси, при превышении даже собираться не будет
G>>Ну код в студию.
O> денег давай будет — а пока можешь уже готовые решения посмотреть , а они есть ..
Зачем тебе денег? Все контейнеры бесплатные. Нормальных решений для С++ нету.
Слив засчитан.

G>>Если каждый начнет "имплементить реализации" (шибанутое словосочетание) модифицирющие синтаксис, то будет попа. Код станет абсолютно нечитаемым.

O> на этой попе, простите, сидит весь NET
Примеры покажешь как весь .NET сидит на модификации синтаксиса?

O>>> Ком нужен для определенной специфики, чтобы мегатяжелые менеджед грабли таки могли получить быстро работающий код, или код, который может дернуть то, чего ну никак не дернуть из менеджед , или просто попытаться избавить себя от гемороя мегатомных импортов. А для реализации прослоек используется менеджед си.

G>>Это ты сам себе придумал? Из C# отлично дергаются нативные методы, да нужны они очень редко, а работа с комом происходит гораздо проще.
O>Опять смешишь тапочки, ? создай в шарпе натив экземпляр и вызови от него метод.
Натив экземпляр чего?
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: ollv 
Дата: 25.04.09 16:43
Здравствуйте, gandjustas, Вы писали:
В общем то резюм я понял, твоя стратегия проста — все что преимущество (я даже преимуществом это не назову потому, что для каждой платформы свои задачи) С++ — для нета не нужно. Читай между строк.

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


G>шаред птр — дополнительные тормоза на каждой операции присваивания и каждом выходе из блока. .NETовский GC порвет релизацию работы с динмамической памятью на shared_ptr как тузик грелку.

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

O>>>>И это при том, что в нем можно работать как в менеджед, так и в анменеджед,

G>>>Это нты е является преимуществом.
G>>>У unmanaged вообще говоря достаточно мало преимуществ.
O>>ты совсем ляпнулся или как ? Код по работе из менеджед с МАПИ? (даже не пытайся, по твоим суждения видно что ты не доганяешь принципиальной разницы диспатч саппортинга )
G>А нахрен он нужен в .NET?
Знаешь на скольких проектах хотели бы считать так-же как и ты? И не только про мапи, а про весь ком без поддержки диспатча (т.е. те ком объекты которые в принципе не могут использоваться в нете, уже бы пора тебе заметить мой намек)

G>То что ты считаеь крутостью является на самом деле ненужной шелухой.

да хватит, я уже понял. Ну не беда, это сейчас, пару раз столкнешься с необходмостью эту "шелуху" просаппортить в нет, и понимание придет.

G>Да нахрен не нужен MAPI, .NET и без него почту слать умеет.

Это какую если не секрет

O>>
//именно по этому тебе бесполезно , чтото говорить, бо суть того о чем тебе говорят вот уже который пост, ты элементарно не доганяешь
G>

O>>с возможностью биндить как аргументы, так и владельцев
G>А в чем крутость если тоже самое достигается передачей объекта как параметра?
Я же говорю нет — расхолаживает

G>Зачем тебе денег? Все контейнеры бесплатные. Нормальных решений для С++ нету.

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

G>>>Если каждый начнет "имплементить реализации" (шибанутое словосочетание) модифицирющие синтаксис, то будет попа. Код станет абсолютно нечитаемым.

O>> на этой попе, простите, сидит весь NET
G>Примеры покажешь как весь .NET сидит на модификации синтаксиса?
Как только ты покажешь мне возможность работы с комом без диспатч, так и сразу

O>>>> Ком нужен для определенной специфики, чтобы мегатяжелые менеджед грабли таки могли получить быстро работающий код, или код, который может дернуть то, чего ну никак не дернуть из менеджед , или просто попытаться избавить себя от гемороя мегатомных импортов. А для реализации прослоек используется менеджед си.

G>>>Это ты сам себе придумал? Из C# отлично дергаются нативные методы, да нужны они очень редко, а работа с комом происходит гораздо проще.
O>>Опять смешишь тапочки, ? создай в шарпе натив экземпляр и вызови от него метод.
G>Натив экземпляр чего?
экземпляр анменеджед объекта, — еще одну (хоть какую-то, кривую, не кривую, любую иллюстрацию)
Compiler can be as trained AI but can't compose music.
Antheil piano jazz sonata. Я болен ПГМ.
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Mamuthttp://dmitriid.com/
Дата: 25.04.09 18:39
Оценка: +2 :))
o> идиома mem_fun и bind это гораздо более широкое понятие, чем делегаты именно благодаря позднему связыванию, когда
o> декларации вида:

o>
o> class _1call
o> {
o>   public:
o>   tempate <typename T>
o>      void m(T val) {}
o> };

o> class _2call
o> {
o>   public:
o>   tempate <typename T>
o>      void m(T val) {}
o> };
o> ...
o> task<_1call, task<_2call > > t (bind(&_1call::m<dyadya_vasya>), task<_2call, task<_3call >... >... );

o> //вызовется в последствии
o> _1call owner;
o>   t(owner)(dyadya_vasya);
o>


o> с возможностью биндить как аргументы, так и владельцев, так и чуваков


А можноо объяснить на пальцах, что здесь происходит? По-моему, тут написана какая-то реально нечитаемая фигня, в которой сам автор не разберется уже через полгода
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 25.04.09 20:11
Здравствуйте, gandjustas, Вы писали:

ГВ>>>>И как это опровергает сказанное мной? Что если фича реализована средствами языка — это не недостаток самого языка?

G>>>Если фича востребована, а реализация делается через непонятно что. причем за много лет в самом языке это не было исправлено, то это однозначно свидетельствует о недостатке языка.
ГВ>>В лучшем случае, это свидетельствует о недостатках процесса управления разработкой языка.
G>Наличие надостатков в управлении разработкой веде к недостаткам в самом языке.

А ещё это может свидетельствовать о неправильном применении языка, о чрезмерной концентрации на Syntax Sugar и ещё много о чём, вплоть до недостатков, присущих правительству Шарля Де Голля. Тут вопрос в другом: удалось реализовать фичу X средствами самого языка ("понятно какими" или "непонятно какими" — совершенно не важно) или нет. Если не удалось — значит возможностей языка для этой фичи не хватает. Если удалось, то относить сей факт к "недостаткам" можно, ИМХО, только по каким-то очень вычурным соображениям вроде очередного "миллиона индусов, которые завалят нас багами".

ГВ>>Мало ли какие фичи могут оказаться востребованными?

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

Дык! Об этом заговорили аккурат в том же 2002-м, если мне не изменяет память.

ГВ>>Кстати, заморочки с переносом кода между .Net и Mono, AFAIK, имеют место быть.

G>Не имеют, надо только уметь готовить.
G>Специально поставил второй моно, написал на нем Winforms прогу, не используя mono-scecific библиотеки, и она запустилась под .NET без перекомпиляции.

Значит, слухи лживые.

G>Если хочется переносимости — надо использовать переносимое подмножество библиотек, это аксиома для любого языка.


Да. Ровно то же самое относится и к C++-библиотекам, с той поправкой, что по сути компиляторы разных производителей представляют собой разные модификации C++ (собственно, для обеспечения согласованности и нужна стандартизация, в том числе и ABI).
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 25.04.09 22:21
Здравствуйте, ollv, Вы писали:

O> В общем то резюм я понял, твоя стратегия проста — все что преимущество (я даже преимуществом это не назову потому, что для каждой платформы свои задачи) С++ — для нета не нужно. Читай между строк.

А ты преимуществ то и не привел.
Сможешь объяснить в чем "премущества" С++ заключаются?
В том что на нем можно сделать что-то сильно системное? Так тоже самое можно сделать на С без всей мощи абстрактных шаблонов, а потом вызывать из высокоуровневого кода.
В том что можно на шаблонах делать фигню, которая типа меняет синтасис? Так это сильно сомнительное преимущество, код нечитаемый становится.
То что можно перегрузить скобки? Это просто смешно, в нормальных языках нету необходимости перегружать скобкию

G>>шаред птр — дополнительные тормоза на каждой операции присваивания и каждом выходе из блока. .NETовский GC порвет релизацию работы с динмамической памятью на shared_ptr как тузик грелку.

O> весьма самоуверенное и между тем необъективное заявление. Достаточно для проверки провести небольшой тест, создаем определенное количество объектов, в си, и дот нете, и считаем время какое ушло на создание — очистку ссылок. Ок Там и посмотри что тузик, а что грелка ..
Я писал такой тест в этой теме, смотри выше, C++ слил в 3-6 раз. Это без шаред птр
А потом прибежали другие и начали рассказывать что они динамическую память не выделяют и создают все на стеке

O>>>ты совсем ляпнулся или как ? Код по работе из менеджед с МАПИ? (даже не пытайся, по твоим суждения видно что ты не доганяешь принципиальной разницы диспатч саппортинга )

G>>А нахрен он нужен в .NET?
O> Знаешь на скольких проектах хотели бы считать так-же как и ты? И не только про мапи, а про весь ком без поддержки диспатча (т.е. те ком объекты которые в принципе не могут использоваться в нете, уже бы пора тебе заметить мой намек)
Ответь на вопрос, нафига MAPI в .NET?

G>>То что ты считаеь крутостью является на самом деле ненужной шелухой.

O> да хватит, я уже понял. Ну не беда, это сейчас, пару раз столкнешься с необходмостью эту "шелуху" просаппортить в нет, и понимание придет.

Она там не нужна, чем больше ты хочешь заниматься ковырянием в реализации, тем больнее .NET тебя будет бить за это по ркуам.

G>>Да нахрен не нужен MAPI, .NET и без него почту слать умеет.

O>Это какую если не секрет
Электронную

O>>>с возможностью биндить как аргументы, так и владельцев

G>>А в чем крутость если тоже самое достигается передачей объекта как параметра?
O> Я же говорю нет — расхолаживает
Ответь на вопрос, в чем крутость такого биндинга, если тоже самое делается передачей параметром?

G>>>>Если каждый начнет "имплементить реализации" (шибанутое словосочетание) модифицирющие синтаксис, то будет попа. Код станет абсолютно нечитаемым.

O>>> на этой попе, простите, сидит весь NET
G>>Примеры покажешь как весь .NET сидит на модификации синтаксиса?
O>Как только ты покажешь мне возможность работы с комом без диспатч, так и сразу
С комом без IDispatch нормально все работает. Берешь Tlbimp, натравливаешь его на idl, получешь interop assembly, дальше работаешь как с обычными классами в .NET.
Если нужен IDispatch, то тогда лучше на VB это писать.

O>>>>> Ком нужен для определенной специфики, чтобы мегатяжелые менеджед грабли таки могли получить быстро работающий код, или код, который может дернуть то, чего ну никак не дернуть из менеджед , или просто попытаться избавить себя от гемороя мегатомных импортов. А для реализации прослоек используется менеджед си.

G>>>>Это ты сам себе придумал? Из C# отлично дергаются нативные методы, да нужны они очень редко, а работа с комом происходит гораздо проще.
O>>>Опять смешишь тапочки, ? создай в шарпе натив экземпляр и вызови от него метод.
G>>Натив экземпляр чего?
O> экземпляр анменеджед объекта, — еще одну (хоть какую-то, кривую, не кривую, любую иллюстрацию)
Какого анменеджед объекта? Нету анменеджед объектов.
Возьми DLL, скомпилированную Intel C++ Compiler и напиши в visual studio код, который создает объект из этой либы — придет понимание.
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 25.04.09 22:47
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>>OK, теперь давай выясним, что такое "красиво". Желательный интерфейс набросаешь кратенько?

G>>Угу. Есть метод Register, который заносит в контейнер пару (тип интерфейса, тип реализации), и метод Resolve, который по заданному типу интерфейса выдает объект нужного типа реализации.
G>>Когда получится можно сделать так чтобы если тип реализации имеет конструктор с параметрами, то при создании объекта в параметры конструктора подсчтавлялись бы объекты полученные через Resolve.

ГВ>OK, сегодня-завтра набросаю. В принципе, сразу можно сказать, что вот такой примерно интерфейс вполне достижим:


ГВ>
ГВ>class IoC_Container
ГВ>{
ГВ>  public:
ГВ>    template<typename I_, typename T_>
ГВ>      void Register(){...}

ГВ>    template<typename I_>
ГВ>      I_ *Resolve(){...}
ГВ>};
ГВ>


Регистрация производится обычно строкой в конфигурационном файле и ее можно менять "на лету". IoC контейнеры спокойно конструируют целое дерево объектов по интерфейсам:

IoC.Resolve<ISomeType>();

где ISomeType это SomeType с конструктором SomeType(ISomeOtherType someOther)
где ISomeOtherType это SomeOtherType с конструктором SomeOtherType(IAnotherType another, IAnotherOtherType anotherOther)
где ...

Будет очень интересно посмотреть как Вы это реализуете на С++. Можно даже без конфигурационного файла — так и быть, но должна быть возможность подгрузки имплементации из библиотек (dll, можно COM, если осилите.



Еще интересно было бы увидеть что-то вроде RhinoMocks — библиотеки для мокинга объектов (свойства, методы, события).
И желательно, чтоб код самих тестов получался не хуже по читабельности и лаконичности. Примеры с кодом тут: http://ayende.com/Blog/archive/2008/06/13/The-test-of-fire-Rhino-Mocks-3.5-in-the-real.aspx


ГВ>С другой стороны, в самом по себе паттерне IoC ничего запредельного нет, мне сейчас любопытно поиграться в тех ограничениях, которые ты предложил.

Запредельное? Патерн IoC в управляемых языках реализуется на базовом уровне за минут 40-50 максимум неопытными студентами.
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 25.04.09 22:51
Оценка: +1
Здравствуйте, ollv, Вы писали:

Я уже много лет как ушел с С++, и как же я рад этому... Глядя на ЭТО понимаю на сколько правильным оказался мой выбор.

O>task<_1call, task<_2call > > t (bind(&_1call::m<dyadya_vasya>), task<_2call, task<_3call >... >... );


Re[21]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 25.04.09 23:01
Оценка: -1 :)
Здравствуйте, ollv, Вы писали:

O>Сравнивать же менеджед и анменеджед — изначально бредово, т.к. если идет сравнение возможностей, то последние молчат при необходимости работы с МАПИ и библиотеками с ансаппортным диспатч и т.д.

Ну пишите простую COM обертку в качестве медиатора на С++. Делов-то.

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

G>>Это о чем? Какие делегаты, биндинг, функторы? Вывалил все умные словка, которые знаешь?
O> А ты подумай немного, ..как реализовывать late fastening в дотнете ? Когда конструирование аргументов, владельцев методов, и создание каскада вызовов разведено во времени? — никак. а через поздний биндинг это решается.
late fastening это что? late binding?
http://www.codeguru.com/csharp/csharp/cs_syntax/reflection/article.php/c5881 ну вот Вам late binding на .NET. Делается на порядок проще, лаконичнее и читабельнее, чем на С++.

O>>>а при писанине на дотнете после плюсов всегда чувствуешь тормоза, и ограниченность,

G>>
G>>Особенно тормоза
Я правильно понял: Вы осознали свою ограниченность и свои тормоза, перейдя с С++ на дотнет? Так это естественно. Чему тут удивляться?

O> ах в бууст даже запятую перегрузили .. ты меня реально утомил. Плюсы на столько гибкий язык, что позволяет имлементить реализации модифицирующие синтаксис, да еще и чик __asm и ты уже там . А тебя это раздражает Да


С++ позволяет имлементить. Это хорошо сказанно. Запишу себе на память цитату, коли Вы не против...

O> опять за рыбу деньги, — фреймворк внесенный в стандарт становится частью языка.

Глупость.
Re[21]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 25.04.09 23:07
Здравствуйте, ollv, Вы писали:


O>>>>> Кроме того, на плюсах вполне реализуемы элементы не родственных стурктур, к примеру итерации for_each, find_if count_if, функторы, придают плюсам оттенки функциональных языков

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

Вы кроме Александреску вообще что-то читали? А реальным программированием занимались?
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 25.04.09 23:53
Здравствуйте, criosray, Вы писали:

C>Регистрация производится обычно строкой в конфигурационном файле и ее можно менять "на лету". IoC контейнеры спокойно конструируют целое дерево объектов по интерфейсам:


C>IoC.Resolve<ISomeType>();


C>где ISomeType это SomeType с конструктором SomeType(ISomeOtherType someOther)

C>где ISomeOtherType это SomeOtherType с конструктором SomeOtherType(IAnotherType another, IAnotherOtherType anotherOther)
C>где ...

Хм. В принципе, приблизительно так тоже можно. Некоторые сложности с правильной регистрацией. Мне интересно, как разрешается ситуация, если SomeType содержит конструкторы вроде таких: SomeType(int, string, ISomeOtherType) и SomeType(ISomeOtherType)?

C>Будет очень интересно посмотреть как Вы это реализуете на С++. Можно даже без конфигурационного файла — так и быть, но должна быть возможность подгрузки имплементации из библиотек (dll, можно COM, если осилите.


А .Net переписать не надо по ходу дела?

C>Еще интересно было бы увидеть что-то вроде RhinoMocks — библиотеки для мокинга объектов (свойства, методы, события).

C>И желательно, чтоб код самих тестов получался не хуже по читабельности и лаконичности. Примеры с кодом тут: http://ayende.com/Blog/archive/2008/06/13/The-test-of-fire-Rhino-Mocks-3.5-in-the-real.aspx

Ну что ж, посмотрим...

ГВ>>С другой стороны, в самом по себе паттерне IoC ничего запредельного нет, мне сейчас любопытно поиграться в тех ограничениях, которые ты предложил.

C>Запредельное? Патерн IoC в управляемых языках реализуется на базовом уровне за минут 40-50 максимум неопытными студентами.

Он и на C++ реализуется примерно за то же время. Надо только подождать, чтобы требований накидали.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 26.04.09 06:58
Оценка:2 (1)
Здравствуйте, criosray, Вы писали:

C>Запредельное? Патерн IoC в управляемых языках реализуется на базовом уровне за минут 40-50 максимум неопытными студентами.

http://code.google.com/p/pococapsule/
с использованием етой библиотеки реализуется минут за 5-10 опытными программистами на C++
People write code, programming languages don't.
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 26.04.09 09:44
Здравствуйте, Геннадий Васильев, Вы писали:


C>>Регистрация производится обычно строкой в конфигурационном файле и ее можно менять "на лету". IoC контейнеры спокойно конструируют целое дерево объектов по интерфейсам:


C>>IoC.Resolve<ISomeType>();


C>>где ISomeType это SomeType с конструктором SomeType(ISomeOtherType someOther)

C>>где ISomeOtherType это SomeOtherType с конструктором SomeOtherType(IAnotherType another, IAnotherOtherType anotherOther)
C>>где ...

ГВ>Хм. В принципе, приблизительно так тоже можно. Некоторые сложности с правильной регистрацией. Мне интересно, как разрешается ситуация, если SomeType содержит конструкторы вроде таких: SomeType(int, string, ISomeOtherType) и SomeType(ISomeOtherType)?

Выбирается самый длинный подходящий. То есть если IoC`ку указали значения для аргументов int и string, то сконструирует по первому.

C>>Будет очень интересно посмотреть как Вы это реализуете на С++. Можно даже без конфигурационного файла — так и быть, но должна быть возможность подгрузки имплементации из библиотек (dll, можно COM, если осилите.


ГВ>А .Net переписать не надо по ходу дела?


Так ведь тут нам с пеной у рта доказывают, что на С++ все просто чудесно в плане алгоритмизации. В чем проблема-то? А ведь это далеко не все, что позволяют IoC в дотнет. Например, Castle Windsor, Unity, Spring.NET и другие предоставляют до купы мощный механизм AoP (интерцепторы) — путем генерирования прокси-классов на лету...

ГВ>>>С другой стороны, в самом по себе паттерне IoC ничего запредельного нет, мне сейчас любопытно поиграться в тех ограничениях, которые ты предложил.

C>>Запредельное? Патерн IoC в управляемых языках реализуется на базовом уровне за минут 40-50 максимум неопытными студентами.

ГВ>Он и на C++ реализуется примерно за то же время. Надо только подождать, чтобы требований накидали.

Ну Вы сделайте для начала то, что уже Вам накидали. Если сделаете — съем свою шляпу, чесслово.
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 26.04.09 09:46
Здравствуйте, Хвост, Вы писали:

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


C>>Запредельное? Патерн IoC в управляемых языках реализуется на базовом уровне за минут 40-50 максимум неопытными студентами.

Х>http://code.google.com/p/pococapsule/
Х>с использованием етой библиотеки реализуется минут за 5-10 опытными программистами на C++
Вы ведь опытный программист, да? Реализацию в студию.
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 26.04.09 10:42
Здравствуйте, Хвост, Вы писали:

C>>Запредельное? Патерн IoC в управляемых языках реализуется на базовом уровне за минут 40-50 максимум неопытными студентами.

Х>http://code.google.com/p/pococapsule/
Х>с использованием етой библиотеки реализуется минут за 5-10 опытными программистами на C++

Хех. Оно там уже реализовано. Интересно поиграться "с нуля".
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[28]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 26.04.09 10:46
Здравствуйте, criosray, Вы писали:

Х>>с использованием етой библиотеки реализуется минут за 5-10 опытными программистами на C++

C>Вы ведь опытный программист, да? Реализацию в студию.
реализацию чего? пока по вашим постам я только понял что вы хотите что-то вроде service locator'а, а не IoC контейнера. Лучше опишите задачу, как вы её решаете с помощью вашего фреймворка, и посмотрим что в етом случае делают в С++.
People write code, programming languages don't.
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: minorlogic 
Дата: 26.04.09 15:55
Здравствуйте, criosray, Вы писали:

ГВ>>Ты уверен, что апелляция к "индусам" в этом контексте выглядит позитивно?


C>Нет, но зато реалистично. Индусы — вездесущи. ;(


Ты называешь шарп языком для индусов ? ну ты счас тут отгребешь ...
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[26]: Простенький IoC на C++ в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 26.04.09 18:25
Здравствуйте, gandjustas, Вы писали:

ГВ>>С другой стороны, в самом по себе паттерне IoC ничего запредельного нет, мне сейчас любопытно поиграться в тех ограничениях, которые ты предложил.

G>Удачи.

Посмотри в этот архив. Это я набросал за сегодня. Внешнего конфигурирования, разумеется, нет, но и буст тоже не используется: его не все любят, а для иллюстрации идеи, ИМХО, этого достаточно.

Собирается VS2K5, там собственно IoC.h и IoC_COM.h — реализация контейнера, остальное тесты и примочки. Дальше см. комментарии, если что не понятно — спрашивай здесь.

Для справки: ушло на это всё где-то около 3-х часов чистого времени.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[28]: Welcome в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 26.04.09 18:27
Здравствуйте, criosray, Вы писали:

C>Ну Вы сделайте для начала то, что уже Вам накидали.


Сабж
Автор: Геннадий Васильев
Дата: 26.04.09
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 26.04.09 18:39
Здравствуйте, minorlogic, Вы писали:

ГВ>>>Ты уверен, что апелляция к "индусам" в этом контексте выглядит позитивно?

C>>Нет, но зато реалистично. Индусы — вездесущи. ;(
M>Ты называешь шарп языком для индусов ? ну ты счас тут отгребешь ...

Где? На 25-м уровне вложенности ветки из 900 сообщений, расположенной в КСВ? Отгрести? Только если очень напрашиваться!
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[28]: Кстати в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 26.04.09 18:46
Здравствуйте, criosray, Вы писали:

ГВ>>Хм. В принципе, приблизительно так тоже можно. Некоторые сложности с правильной регистрацией. Мне интересно, как разрешается ситуация, если SomeType содержит конструкторы вроде таких: SomeType(int, string, ISomeOtherType) и SomeType(ISomeOtherType)?

C>Выбирается самый длинный подходящий. То есть если IoC`ку указали значения для аргументов int и string, то сконструирует по первому.

Этого я сейчас делать не стал, чтобы не тянуть буст. Хотя в принципе — возможно.

ГВ>>А .Net переписать не надо по ходу дела?

C>Так ведь тут нам с пеной у рта доказывают, что на С++ все просто чудесно в плане алгоритмизации. В чем проблема-то? А ведь это далеко не все, что позволяют IoC в дотнет. Например, Castle Windsor, Unity, Spring.NET и другие предоставляют до купы мощный механизм AoP (интерцепторы) — путем генерирования прокси-классов на лету...

Генерировать прокси, увы, без чего-то вроде emit можно, но довольно сложно. Так что, это точно не здесь и не сейчас.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[21]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 26.04.09 19:08
Здравствуйте, Хвост, Вы писали:

Х>лично я заменяю их на императивный цикл for


Мне тебя очень жалко.

Х>сейчас уже есть возможность писать в функциональном стиле, да, скачай msvc10 (CTP) и возрадуйся лямбдам (да ещё и с замыканиями!)


Ой не верю. Для этого нужно GC. Или снова будут UB там и сям.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 26.04.09 19:11
Оценка: :)
Здравствуйте, catBasilio, Вы писали:

B>Если С# так хорош, то почему всякие Crysis, Quake, FarCry и прочее на нем не пишут?


Банально выжимают производительность. Тот же Quake писался на С. Кормак ООП в принципе не приветствовал никогда.
Кстати, большой объем кода в играх — это логика игры. И его ни один идиот на С не пишет.
Есть и игры написанные на 90% на управляемом коде. Так что выигрышь от применения С++ и С не велик.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 26.04.09 19:12
Здравствуйте, VladD2, Вы писали:

Х>>сейчас уже есть возможность писать в функциональном стиле, да, скачай msvc10 (CTP) и возрадуйся лямбдам (да ещё и с замыканиями!)


VD>Ой не верю. Для этого нужно GC.


Нет. GC для этого не обязателен.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 26.04.09 19:16
Здравствуйте, Хвост, Вы писали:

Х>а погуглить? первая ссылка по запросу static polymorphism даёт представление что ето такое и как ето пользовать.


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

VD>>В общем, не стоит так напрягаться. Этому гнилью даже новый стандарт не поможет. Кстати, где он? (с)

Х>ето твоему немерлю ничего не поможет, мертворождённый проект.

Странный способ ответита на вопрос. Ну, да ладно.

Гы. Шарп уже впитал из Немерла добрую половину и продолжает двигаться в этом направлении. Лет через 10 C# станет немерлом со шрамами оставленными эволюцией. Это как минимум. А как максимум я тебе пришлю эту ссылочку и посмотрю на то как ты будешь выкручиваться.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 26.04.09 19:17
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Дык!


ГВ>


Не, так не честно. Слюноотделение есть, а вкуса нет.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 26.04.09 19:19
Оценка: :)
Здравствуйте, VladD2, Вы писали:

VD>Не, так не честно. Слюноотделение есть, а вкуса нет.


Слюни можно употребить в качестве аргументации. Как раз подходящий форум.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[27]: Простенький IoC на C++ в избранное  новое    модер. 
От: criosray 
Дата: 26.04.09 19:54
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Собирается VS2K5, там собственно IoC.h и IoC_COM.h — реализация контейнера, остальное тесты и примочки. Дальше см. комментарии, если что не понятно — спрашивай здесь.


Пока код не читал, но интересно — это нынче стандартная практика пихать в хидеры реализацию?

Комментарии по делу будут позже...
Re[28]: Простенький IoC на C++ в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 26.04.09 20:05
Здравствуйте, criosray, Вы писали:

C>Пока код не читал, но интересно — это нынче стандартная практика пихать в хидеры реализацию?


Там всё на шаблонах.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[17]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 26.04.09 20:07
Оценка:3 (2) +2
Здравствуйте, ollv, Вы писали:

O>>> Ну так и есть и ксамл WPF это хорошо иллюстрирует, и плюсам тянуться за гуями, мне кажется, вообще не стоит, за плюсами мегапреимущество в архитектурных и скоростных решениях, за счет высоких абстракций и шаблонов. Гуя же так ил иначе перекочует в XML подобное оформление, кстати при современных фреймворках с парсингом XML тандем его с плюсами мне кажется вполне приемлемым, даже удобным.


VD>>Можно пример высокоуровневой абстракции которую нельзя воспроизвести на языке отличном от С++?

O> на каком конкретно?

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

Вопрос этот риторический, так как ты сделал слишком общее утверждение. Оно очевидно не верно.

В прочем если тебя интересует пенисометрия, то очень смешно сравнивать С++ с современными ФЯ. Для примера Хаскель, Немерле или Лисп (который, кстати, существенно старше С++).

Теперь по абстракциям и архитектурным решениям. Если под абстракциями понимаются абстракции программирования, то С++ поддерживает ООП, параметрический полиморфизм и (с горем пополам) метапрограммирование. Все это есть в море языков. Причем во многих реализация отдельных фич, а иногда и всех значительно лучше чем в С++. Кроме того С++ не поддерживает парадигму функционального программирования, что приводит к тому, что писать на нем в функциональном стиле становится крайне неудобно.

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

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


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

Теперь я тебе открою правду о шаблонах.
1. Шаблон — это не более чем синтаксический препроцессор который позволяет во время компиляции подставить что-то вместо плэйсхолдеров. Так вот есть куда более мощьные системы типов (например, система типов Haskell) на фоне которых препроцессор вроде С++ просто меркнет.
2. Есть куда более мощные синтаксические препроцессоры (например, Nemerle и Лисп) которые по возможностям и удобству рвут С++ как тузик грелку. К примеру, я воспроизвел linq из спецификации C# написав два макроса. С++ такое сделать не может в приципе.
3. Кроме того шаблоны в С++ были задуманы как средство релизации параметрического полиморфизма. Оных намного лучше реализован почти во всех языках в которых он вообще реализован. И те же дженерики тоже лучше шаблонов за исключением пары неудобств. А уж параметрический полиморфизм в современных ФЯ сделан несравнимо лучше шаблонов С++. Опять же курим Хаскель, ОКамл и т.п. Просто использование шаблонов выходит за рамки параметрического полиморфизма и входят в область метапрограммирования. Но в этой области безоговорочно царят макросы. И убогим возможностям С++ тут делать не чего.

O>дженерики дотнета и не дорастут, а в джаве на сколько я знаю, темплейты так же весьма ограничены (по известным причинам).


Это кто-то другой не дорос до понимания сути вещей.

O> Кроме того, на плюсах вполне реализуемы элементы не родственных стурктур, к примеру итерации for_each, find_if count_if, функторы, придают плюсам оттенки функциональных языков,


Они придают плюсам оттенок помойки. Попиши сначала на полноценном ФЯ, а потом делай такие заявления.
Кстати вместо самопальный (и доволно бессмысленных) терминов вроде "не родственных стурктур" лучше использовать общепринятый термин "параметрический полиморфизм" и "утиная типизация". Тогда станет ясно, что С++ не единственный язык где функции можно применять для разных типов данных. По этому поводу курим таких наследников ML как OCaml.

O>но вообще метапрограммирование видоизменяет плюсы, а говорить, что это все можно реализовать в джава или дотнете — просто не знать плюсы.


Вот нести такую чушь как несешь ты должно быть просто стыдно. А говорить, что все это можно реализовать "все можно реализовать в джава или дотнете" не просто можно, а можно смело. Опять же МП на шаблонах С++ доступно в C++/CLI работающем на VM .NET. Но это пример чисто иллюстративный, чтобы и тебе было понятно, что ты заблуждаешься. Если же серьезно говорить о метапрограммировании, то С++ тут откровенный лузер, если сравнивать его с такими языками, реализованными поверх дотнета, как Nemerle и Lisp. Вот где МП доведено до высшего пилотажа. Причем оно исходно предусмотрено в языка, а не достигается использованием побочных эффектов системы типов.


O> Даже простейший вызов из темплейтного метода непредопределенного класса с оператором () — уже недостижимая мечта для шарпа или жавы.


И и правда мечта. Называется она строгая статическая типизация. Мечта не достижимая в С++.
К метапрограммированию, правда, отношения имеет мало.

O> Впрочем практика показывает, базовый функционал крупных проектов требующих гибкой архитектуры реализуется чаще на плюсах (во всяком случае в моей практике это именно так)


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

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

O>констрейны дают возможность предопределить поведение при компиляции. Да и еще, плюсы то развиваются, стандарт постоянно дополняется новыми фичами расширяюшими возможности, typeof это не последнее


Стандарт не изменялся с 1998 года. Читай по буквам — Д Е С Я Т Ь лет. Разговоры о том, что вот-вот появится новых стандарт не утихают с 2000-го года. Но, насколько мне известно до сих пор он так и не принят.
Так что ты просто выдаешь желаемое за действительное. На твоем месте я бы почитал об альтернативных решениях и перестал так бодро гнать пургу.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 26.04.09 20:24
Здравствуйте, Геннадий Васильев, Вы писали:

VD>>Ой не верю. Для этого нужно GC.


ГВ>Нет. GC для этого не обязателен.


Из известных мне вариантов есть еще только подсчет ссылок. Но он тоже вряд ли может быть применен в рамках С++, так как объект не обязаны его реализовывать. Да и подсчет ссылок приводит к зацикливаниям, которые потенциально тоже можно разрыват (пример — Руби), но это опять же проблематично. По любому, подсчет ссылок или GC — это все вариации на тему автоматического управления памятью.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Lloyd 
Дата: 26.04.09 22:08
Здравствуйте, gandjustas, Вы писали:

G>Почему самые высоконагруженные сайты написаны не на С++?


Высоконагруженные части некоторых высоконагруженных сайтов-таки написаны на С/C++.
Не так давно на InfoQ было видео выступления одного из разработчиков FaceBook-а. Посмотри, там много интересного было разсказано.
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 27.04.09 02:36
Оценка: -1
Здравствуйте, VladD2, Вы писали:

VD>>>Ой не верю. Для этого нужно GC.

ГВ>>Нет. GC для этого не обязателен.
VD>Из известных мне вариантов есть еще только подсчет ссылок. [...]

Повторю: ни GC, ни подсчёт ссылок для ФП-стиля не обязательны.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[18]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 27.04.09 04:13
Оценка:6 (3) +1
Здравствуйте, VladD2, Вы писали:

VD>>>Можно пример высокоуровневой абстракции которую нельзя воспроизвести на языке отличном от С++?

O>> на каком конкретно?
VD>В высказывании утверждалось, что С++ имеет преимущество. Не говорилось, что преимущество именно перед конкретным языком. Значит выбор из всего списка языков. Так что тебе прийдется или признаться, что ты спорол чушь или привести пример абстракции которая не реализуется на одном из существующих на сегодня языке.

Как ты правильно заметил, Тьюринг-полные языки, в общем, эквивалентны по своим возможностям в смысле выражения абстракций. Всё дело в итоговой цене на билет. Я не сомневаюсь, что абстракцию автоматического управления ресурсами вроде std::auto_ptr можно реализовать и на Хаскеле, и на Лиспе и ещё много на чём. Вопрос остаётся тем же самым: сколько это будет стоить пользователю.

VD>Вопрос этот риторический, так как ты сделал слишком общее утверждение. Оно очевидно не верно.


VD>В прочем если тебя интересует пенисометрия, то очень смешно сравнивать С++ с современными ФЯ. Для примера Хаскель, Немерле или Лисп (который, кстати, существенно старше С++).


Так с современными, или с теми, которые старше и на которых обкатывались идеи, впитанные C++?

VD>Теперь по абстракциям и архитектурным решениям. Если под абстракциями понимаются абстракции программирования, то С++ поддерживает ООП, параметрический полиморфизм и (с горем пополам) метапрограммирование. Все это есть в море языков. Причем во многих реализация отдельных фич, а иногда и всех значительно лучше чем в С++. Кроме того С++ не поддерживает парадигму функционального программирования, что приводит к тому, что писать на нем в функциональном стиле становится крайне неудобно.


В новой версии стандарта — поддерживает.

VD>Если под абстракциями понимаются абстракции прикладной сферы, то это тоже чушь, так как любой язык полный по тьюригу потенциально может реализовать любую абстракцию. Даже скриптовые языки тут ни чем не уступают С++.


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

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


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


По всей видимости, ollv имеет в виду C#, говоря о .Net. В том же, что кодогенерация C++ перенастроена на IL ничего необычного нет. Тьюринг-полнота, ага. Из C++ можно и Lisp генерировать. И наоборот. Вопрос в практичности такого решения.

VD>Теперь я тебе открою правду о шаблонах.


[skip обнажённая правда, от блеска которой слепит глаза и хочется сморкаться]

Всё это, конечно, правильно, хоть и с некоторыми поправками. Но поправки сейчас не суть важны. Важно другое: что та самая "область" в которой царят все за компанию (кроме C++) магическим образом не пересекается с теми областями, в которых от C++ никак не могут (и не хотят) избавиться по сугубо практическим соображениям. То есть, она как бы есть, но её значимость как бы слегка эфемерна по отношению к тому набору требований, с которым приходится иметь дело C++-никам.

А так — да, бесспорно. На Lisp можно написать очень много всего интересного. Если бы ещё не потеря производительности по сравнению с "убогим" C/C++ — всё было бы совсем хорошо.

O>>дженерики дотнета и не дорастут, а в джаве на сколько я знаю, темплейты так же весьма ограничены (по известным причинам).

VD>Это кто-то другой не дорос до понимания сути вещей.

Суть вещей — многогранное явление. Для каждого она своя.

O>> Кроме того, на плюсах вполне реализуемы элементы не родственных стурктур, к примеру итерации for_each, find_if count_if, функторы, придают плюсам оттенки функциональных языков,


VD> Они придают плюсам оттенок помойки. Попиши сначала на полноценном ФЯ, а потом делай такие заявления.


Помойка или нет — это сугубо эмоциональная оценка. Не нравится — не пользуйся, никто не заставляет. Зато нет никакой необходимости любой ценой приводить структуру потока управления в соответствие с некоторой "правильной парадигмой".

VD>[...] С++ тут откровенный лузер, если сравнивать его с такими языками, реализованными поверх дотнета, как Nemerle и Lisp. Вот где МП доведено до высшего пилотажа. Причем оно исходно предусмотрено в языка, а не достигается использованием побочных эффектов системы типов.


Забавно, что как раз использование "побочных эффектов" и делает C++ столь привлекательным по критерию производительности программиста при сохранении производительности продукта.

O>> Даже простейший вызов из темплейтного метода непредопределенного класса с оператором () — уже недостижимая мечта для шарпа или жавы.

VD>И и правда мечта. Называется она строгая статическая типизация. Мечта не достижимая в С++.
VD>К метапрограммированию, правда, отношения имеет мало.

А чистота "метапрограммирования", или "функционального программирования", или ещё какая "чистота" какой-нибудь очередной мутной "парадигмы" вообще не шибко-то кого и беспокоит (в мире C++). Пуризм — это ещё одно ругательство, как и BASIC, если ты не в курсе. Есть только два критерия: "удобно написать удобную фишку X" и "иметь возможности для отступления в случае потерь производительности". Теоретические же базисы хороши для формирования общей культуры программиста и исследования теоретических же проблем. Хотя это отнюдь не отрицает, например, того, что Lisp хорош в сфере обработки символических данных. Кстати, обрати внимание — Lisp тоже поддерживает императивный стиль одновременно с функциональным.

O>> Впрочем практика показывает, базовый функционал крупных проектов требующих гибкой архитектуры реализуется чаще на плюсах (во всяком случае в моей практике это именно так)

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

Логическая связь этих высказываний остаётся для меня загадкой. Неужели, Влад, ты покушаешься на святое: на миллионы успешных продуктов и вполне успешных программистов? Глазам своим не верю. Грэхема на ночь глядя обчитался, что ли?

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


Я вам не скажу за всю Одессу, но по моей практике язык всегда был самой последней причиной появления этих самых "весьма глючных продуктов". Куда как более существенными выглядят другие возможные причины: неудачный менеджмент, неполная постановка задачи, плохо проработанные требования пользователей, бестолковый маркетинг. А язык...

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


Ну, что тут скажешь? Я занесу в шпаргалку Абсолютных Противо-C++-ных Аргументов ещё слова: "ересь", "бред" и "вера".

O>>констрейны дают возможность предопределить поведение при компиляции. Да и еще, плюсы то развиваются, стандарт постоянно дополняется новыми фичами расширяюшими возможности, typeof это не последнее


VD>Стандарт не изменялся с 1998 года. Читай по буквам — Д Е С Я Т Ь лет. Разговоры о том, что вот-вот появится новых стандарт не утихают с 2000-го года. Но, насколько мне известно до сих пор он так и не принят.


И это очень хорошо, что не нужно напряженно следить за настроениями в комитете. Нет, это (читай по буквам) О Ч Е Н Ь хорошо.

VD>Так что ты просто выдаешь желаемое за действительное. На твоем месте я бы почитал об альтернативных решениях и перестал так бодро гнать пургу.


Нет-нет, Девид Блейн, это ты очень основательно ошибаешься в оценке: что, где и когда должно находиться. Больше того, ты же сам и выдаёшь желаемое за действительное, как это делает тьма критиков C++: сначала они апеллируют к мнимому обилию мемори-ликов, потом к мозголомности, потом — к отсутствию "теоретической чистоты" и т.п. Хорошо, до мирового заговора не все доходят. Нормально, ничего, в сущности, нового. История повторяется с периодичностью, достойной метронома.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Mamuthttp://dmitriid.com/
Дата: 27.04.09 06:25
ГВ> Тут вопрос в другом: удалось реализовать фичу X средствами самого языка ("понятно какими" или "непонятно какими" — совершенно не важно) или нет. Если не удалось — значит возможностей языка для этой фичи не хватает. Если удалось, то относить сей факт к "недостаткам" можно, ИМХО, только по каким-то очень вычурным соображениям вроде очередного "миллиона индусов, которые завалят нас багами".

Все Тьюринг-полные языки равны друг другу по возможностям (ну то есть то, что решается одной строчкой на Хаскеле, можно решить тысячью строк на ассемблере). Другой вопрос — а надо ли, и не взять ли в руки инструмент, котороый повышает эффективность разработки?
Re[19]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 27.04.09 07:52
Оценка: +1 -2
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Как ты правильно заметил, Тьюринг-полные языки, в общем, эквивалентны по своим возможностям в смысле выражения абстракций. Всё дело в итоговой цене на билет. Я не сомневаюсь, что абстракцию автоматического управления ресурсами вроде std::auto_ptr можно реализовать и на Хаскеле, и на Лиспе и ещё много на чём. Вопрос остаётся тем же самым: сколько это будет стоить пользователю.


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

VD>>Теперь по абстракциям и архитектурным решениям. Если под абстракциями понимаются абстракции программирования, то С++ поддерживает ООП, параметрический полиморфизм и (с горем пополам) метапрограммирование. Все это есть в море языков. Причем во многих реализация отдельных фич, а иногда и всех значительно лучше чем в С++. Кроме того С++ не поддерживает парадигму функционального программирования, что приводит к тому, что писать на нем в функциональном стиле становится крайне неудобно.


ГВ>В новой версии стандарта — поддерживает.


Поддерживает 1% от ФЯ? Замечательно.

ГВ>А так — да, бесспорно. На Lisp можно написать очень много всего интересного. Если бы ещё не потеря производительности по сравнению с "убогим" C/C++ — всё было бы совсем хорошо.


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

Лучшее — враг хорошего.

O>>>дженерики дотнета и не дорастут, а в джаве на сколько я знаю, темплейты так же весьма ограничены (по известным причинам).

VD>>Это кто-то другой не дорос до понимания сути вещей.
ГВ>Суть вещей — многогранное явление. Для каждого она своя.
Особенно, если Вы смотрите на вещи сквозь призму непонимания и иллюзии.

VD>>[...] С++ тут откровенный лузер, если сравнивать его с такими языками, реализованными поверх дотнета, как Nemerle и Lisp. Вот где МП доведено до высшего пилотажа. Причем оно исходно предусмотрено в языка, а не достигается использованием побочных эффектов системы типов.


ГВ>Забавно, что как раз использование "побочных эффектов" и делает C++ столь привлекательным по критерию производительности программиста при сохранении производительности продукта.

А вот это иллюзии. В программировании крайне важно сохранять "читабельность кода". Ради этого придумывают много умных терминов вроде SRP, DRY, SoC, Open/close principle, cohesion и т.д. и т.п.

ГВ>А чистота "метапрограммирования", или "функционального программирования", или ещё какая "чистота" какой-нибудь очередной мутной "парадигмы" вообще не шибко-то кого и беспокоит (в мире C++).


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

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


ГВ>Ну, что тут скажешь? Я занесу в шпаргалку Абсолютных Противо-C++-ных Аргументов ещё слова: "ересь", "бред" и "вера".


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

VD>>Стандарт не изменялся с 1998 года. Читай по буквам — Д Е С Я Т Ь лет. Разговоры о том, что вот-вот появится новых стандарт не утихают с 2000-го года. Но, насколько мне известно до сих пор он так и не принят.


ГВ>И это очень хорошо, что не нужно напряженно следить за настроениями в комитете. Нет, это (читай по буквам) О Ч Е Н Ь хорошо.

Это очень плохо. Язык должен развиваться. Посмотрите на С# — кому плохо, что за эти 7 лет на пороге уже 4ая версия языка, где каждая версия — серьезный шаг вперед?..
Re[19]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 27.04.09 07:58
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Всё это, конечно, правильно, хоть и с некоторыми поправками. Но поправки сейчас не суть важны. Важно другое: что та самая "область" в которой царят все за компанию (кроме C++) магическим образом не пересекается с теми областями, в которых от C++ никак не могут (и не хотят) избавиться по сугубо практическим соображениям. То есть, она как бы есть, но её значимость как бы слегка эфемерна по отношению к тому набору требований, с которым приходится иметь дело C++-никам.

Ну конечно не избавишься сразу от C++ везде. Есть тонны кода на C++, которые приносят много денег и этот код надо саппортить, есть кучи программистов, которых не выгонишь на улицу в один момент, есть кучи недалеких менеджеров, которые кроме C++ других языков и не слышали.
Только ни один из этих факторов не говорит что С++ чем-то хорош.
Re[20]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 27.04.09 08:35
Оценка: +1 :)
Здравствуйте, criosray, Вы писали:

ГВ>>Вопрос остаётся тем же самым: сколько это будет стоить пользователю.

C>Стоимость прямо пропорциональна человеко-часам, затраченым в процессе разработки и в этом плане С++ уже давно в отстающих, при чем иногда очень-очень сильно отстающих...

Началось... Давай вспомним все значения слова "стоимость" и все контексты, к которым его можно привязать.

ГВ>>В новой версии стандарта — поддерживает.

C>Поддерживает 1% от ФЯ? Замечательно.

Ух ты. А что это такое — 1% от ФЯ? А почему не 0,76% и не 3,84%?

ГВ>>А так — да, бесспорно. На Lisp можно написать очень много всего интересного. Если бы ещё не потеря производительности по сравнению с "убогим" C/C++ — всё было бы совсем хорошо.

C>Представьте себе, среди всего многообразия задач очень мало таких, для которых важно выжимать максимальную производительность.

Это как-то опровергает то, что Lisp медленнее C++?

C>Лучшее — враг хорошего.


Бесспорно. На C++ получаются вполне хорошие решения.

ГВ>>Суть вещей — многогранное явление. Для каждого она своя.

C>Особенно, если Вы смотрите на вещи сквозь призму непонимания и иллюзии.

Угу, давай теперь углами призмы непонимания начнём меряться.

ГВ>>Забавно, что как раз использование "побочных эффектов" и делает C++ столь привлекательным по критерию производительности программиста при сохранении производительности продукта.

C>А вот это иллюзии. В программировании крайне важно сохранять "читабельность кода". Ради этого придумывают много умных терминов вроде SRP, DRY, SoC, Open/close principle, cohesion и т.д. и т.п.

С кем-то я совсем недавно спорил по поводу читабельности... А, с Владом как раз. Давай, теперь с тобой. Что такое "читабельность"? Какова связь читабельности и, например, open/close principle?

ГВ>>А чистота "метапрограммирования", или "функционального программирования", или ещё какая "чистота" какой-нибудь очередной мутной "парадигмы" вообще не шибко-то кого и беспокоит (в мире C++).

C>и это заметно. Чистота вообще не шибко кого заботит в мире С++ и появляются на свет уродливые творения, где над каждой строкой кода надо раздумывать так же долго, как при чтении Ницше...

Вот те раз, а мужики-то и не знают, что "лёгкость понимания", оказывается, зависит от чистоты парадигмы.

ГВ>>Ну, что тут скажешь? Я занесу в шпаргалку Абсолютных Противо-C++-ных Аргументов ещё слова: "ересь", "бред" и "вера".

C>Занесите, т.к. Влад абсолютно прав. С++ уродливый и непродуктивный язык и жив он все еще только потому, что у него есть ниша, в которой у него нет достойных конкурентов.

Следовательно, для этой ниши C++ вполне подходящий и продуктивный язык, где ему нет достойных конкурентов.

ГВ>>И это очень хорошо, что не нужно напряженно следить за настроениями в комитете. Нет, это (читай по буквам) О Ч Е Н Ь хорошо.

C>Это очень плохо. Язык должен развиваться. Посмотрите на С# — кому плохо, что за эти 7 лет на пороге уже 4ая версия языка, где каждая версия — серьезный шаг вперед?..

Будь я разработчиком компилятора того же C++, меня такая ситуация очень бы устраивала (стабильность спецификации). И потом, я не говорил, что кому-то должно стать плохо от того, что C# меняется.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[20]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 27.04.09 08:41
Здравствуйте, gandjustas, Вы писали:

G>Ну конечно не избавишься сразу от C++ везде. Есть тонны кода на C++, которые приносят много денег и этот код надо саппортить, есть кучи программистов, которых не выгонишь на улицу в один момент, есть кучи недалеких менеджеров, которые кроме C++ других языков и не слышали.

G>Только ни один из этих факторов не говорит что С++ чем-то хорош.

А я разве говорил о дихотомии "хорошо-плохо"?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[20]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 27.04.09 08:46
Оценка: +2 :))
Здравствуйте, gandjustas, Вы писали:

G>Ну конечно не избавишься сразу от C++ везде. Есть тонны кода на C++, которые приносят много денег и этот код надо саппортить, есть кучи программистов, которых не выгонишь на улицу в один момент, есть кучи недалеких менеджеров, которые кроме C++ других языков и не слышали.

G>Только ни один из этих факторов не говорит что С++ чем-то хорош.
просто удивительно, фраза одинаково верна для всех языков из мэйнстрима
People write code, programming languages don't.
Re[20]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 27.04.09 08:55
Оценка: +2 -1
Здравствуйте, criosray, Вы писали:

ГВ>>И это очень хорошо, что не нужно напряженно следить за настроениями в комитете. Нет, это (читай по буквам) О Ч Е Н Ь хорошо.

C>Это очень плохо. Язык должен развиваться. Посмотрите на С# — кому плохо, что за эти 7 лет на пороге уже 4ая версия языка, где каждая версия — серьезный шаг вперед?..
язык C++ в своей молодости тоже бурно развивался, почитай D&E, только вот когда количество программистов на нём выросло до миллионов, количество платформ и компиляторов до десятков, то тут уже начинает главенствовать принцип "не навреди". C#, дай бог ему здоровья, если обретёт такой же ареал то будет развиваться тоже не шустро, уж поверь.
People write code, programming languages don't.
Re[28]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 27.04.09 09:22
Здравствуйте, Mamut, Вы писали:

ГВ>> Тут вопрос в другом: удалось реализовать фичу X средствами самого языка ("понятно какими" или "непонятно какими" — совершенно не важно) или нет. Если не удалось — значит возможностей языка для этой фичи не хватает. Если удалось, то относить сей факт к "недостаткам" можно, ИМХО, только по каким-то очень вычурным соображениям вроде очередного "миллиона индусов, которые завалят нас багами".


M>Все Тьюринг-полные языки равны друг другу по возможностям (ну то есть то, что решается одной строчкой на Хаскеле, можно решить тысячью строк на ассемблере). Другой вопрос — а надо ли, и не взять ли в руки инструмент, котороый повышает эффективность разработки?


А кто-то с этим спорит? По-моему, тут грызня о мифических фатальных недостатках C++ и тех, кто на нём программирует. Собственно, пропоненты такой позиции, ИМХО, традиционно поступают в строгом соответствии с советами Тристана:

Если вы на женщин слишком падки,
В прелестях ищите недостатки.
Станет сразу все намного проще:
Девушка стройна, мы скажем: мощи!

Умницу мы наречем уродкой,
Добрую объявим сумасбродкой.
Ласковая — стало быть, липучка,
Держит себя строго — значит, злючка.

Назовем кокетливую шлюхой,
Скажем про веселую — под мухой.
Пухленькая — скоро лопнет с жиру,
Щедрую перекрестим в транжиру.

Ну, а бережлива? — Окрестим в сквалыгу!
Если маленькая? — Ростом с фигу!
Если рослая? — Тогда верзила!


(c)
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[21]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 27.04.09 09:23
Оценка: :)
Здравствуйте, Хвост, Вы писали:

ГВ>>>И это очень хорошо, что не нужно напряженно следить за настроениями в комитете. Нет, это (читай по буквам) О Ч Е Н Ь хорошо.

C>>Это очень плохо. Язык должен развиваться. Посмотрите на С# — кому плохо, что за эти 7 лет на пороге уже 4ая версия языка, где каждая версия — серьезный шаг вперед?..
Х>язык C++ в своей молодости тоже бурно развивался, почитай D&E, только вот когда количество программистов на нём выросло до миллионов, количество платформ и компиляторов до десятков, то тут уже начинает главенствовать принцип "не навреди". C#, дай бог ему здоровья, если обретёт такой же ареал то будет развиваться тоже не шустро, уж поверь.

Если бы Вы что-то знали о С# и об Андерсоне, Вы бы не писали такой чуши.
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 27.04.09 09:27
Здравствуйте, criosray, Вы писали:

Х>>язык C++ в своей молодости тоже бурно развивался, почитай D&E, только вот когда количество программистов на нём выросло до миллионов, количество платформ и компиляторов до десятков, то тут уже начинает главенствовать принцип "не навреди". C#, дай бог ему здоровья, если обретёт такой же ареал то будет развиваться тоже не шустро, уж поверь.


C>Если бы Вы что-то знали о С# и об Андерсоне, Вы бы не писали такой чуши.


Интересно, почему?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 27.04.09 09:32
Здравствуйте, criosray, Вы писали:

Х>>язык C++ в своей молодости тоже бурно развивался, почитай D&E, только вот когда количество программистов на нём выросло до миллионов, количество платформ и компиляторов до десятков, то тут уже начинает главенствовать принцип "не навреди". C#, дай бог ему здоровья, если обретёт такой же ареал то будет развиваться тоже не шустро, уж поверь.

C>Если бы Вы что-то знали о С# и об Андерсоне, Вы бы не писали такой чуши.

Ганс Христиан? Как же, знаком, знаком. "Принцесса на горошине", "Дюймовочка", "Гадкий утёнок", да что там, "Стойкий оловянный солдатик", ето же всё классика и знакома каждому.
А по существу, в чём чушь? Удиви меня.
People write code, programming languages don't.
Re[21]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 27.04.09 09:40
Здравствуйте, Геннадий Васильев, Вы писали:


ГВ>>>Вопрос остаётся тем же самым: сколько это будет стоить пользователю.

C>>Стоимость прямо пропорциональна человеко-часам, затраченым в процессе разработки и в этом плане С++ уже давно в отстающих, при чем иногда очень-очень сильно отстающих...
ГВ>Началось... Давай вспомним все значения слова "стоимость" и все контексты, к которым его можно привязать.
Началась демогогия... Вам есть что по делу сказать?

ГВ>>>В новой версии стандарта — поддерживает.

C>>Поддерживает 1% от ФЯ? Замечательно.

ГВ>Ух ты. А что это такое — 1% от ФЯ? А почему не 0,76% и не 3,84%?


Еще одна порция демагогии. По делу нечего сказать? Под 1% подразумевалась — малая доля, если Вы ничего больше придумать не можете, кроме как цепляться к словам.
Функциональщины в том же С# больше, чем в С++0х (хорошее название, кстати, точно выражает инопланетное происхождение синтаксиса языка), но это не делает С# функциональным языком.

ГВ>>>А так — да, бесспорно. На Lisp можно написать очень много всего интересного. Если бы ещё не потеря производительности по сравнению с "убогим" C/C++ — всё было бы совсем хорошо.

C>>Представьте себе, среди всего многообразия задач очень мало таких, для которых важно выжимать максимальную производительность.

ГВ>Это как-то опровергает то, что Lisp медленнее C++?


Нет, это означает что во многих (в большинстве, коли Вам так будет угодно) контекстах аргумент производительности конечного продукта абсолютно иррелевантет.

C>>Лучшее — враг хорошего.


ГВ>Бесспорно. На C++ получаются вполне хорошие решения.


Смотря по каким критериям оценивать и в зависимости от задач.

ГВ>>>Забавно, что как раз использование "побочных эффектов" и делает C++ столь привлекательным по критерию производительности программиста при сохранении производительности продукта.

C>>А вот это иллюзии. В программировании крайне важно сохранять "читабельность кода". Ради этого придумывают много умных терминов вроде SRP, DRY, SoC, Open/close principle, cohesion и т.д. и т.п.
ГВ>С кем-то я совсем недавно спорил по поводу читабельности... А, с Владом как раз. Давай, теперь с тобой. Что такое "читабельность"? Какова связь читабельности и, например, open/close principle?
Самая что ни есть прямая.

ГВ>>>А чистота "метапрограммирования", или "функционального программирования", или ещё какая "чистота" какой-нибудь очередной мутной "парадигмы" вообще не шибко-то кого и беспокоит (в мире C++).

C>>и это заметно. Чистота вообще не шибко кого заботит в мире С++ и появляются на свет уродливые творения, где над каждой строкой кода надо раздумывать так же долго, как при чтении Ницше...
ГВ>Вот те раз, а мужики-то и не знают, что "лёгкость понимания", оказывается, зависит от чистоты парадигмы.
Легкость понимания зависит от выразительности и лаконичности синтаксиса языка и структуры кода (и других менее значимых факторов). В этом плане С++, скажем прямо, сосет. И Ваша реализация IoC тому самое явное доказательство (для сравнения смотрите исходник Сastle MicroKernel).

ГВ>>>Ну, что тут скажешь? Я занесу в шпаргалку Абсолютных Противо-C++-ных Аргументов ещё слова: "ересь", "бред" и "вера".

C>>Занесите, т.к. Влад абсолютно прав. С++ уродливый и непродуктивный язык и жив он все еще только потому, что у него есть ниша, в которой у него нет достойных конкурентов.

ГВ>Следовательно, для этой ниши C++ вполне подходящий и продуктивный язык, где ему нет достойных конкурентов.


На безрыбьи и рак — щука.

ГВ>>>И это очень хорошо, что не нужно напряженно следить за настроениями в комитете. Нет, это (читай по буквам) О Ч Е Н Ь хорошо.

C>>Это очень плохо. Язык должен развиваться. Посмотрите на С# — кому плохо, что за эти 7 лет на пороге уже 4ая версия языка, где каждая версия — серьезный шаг вперед?..

ГВ>Будь я разработчиком компилятора того же C++, меня такая ситуация очень бы устраивала (стабильность спецификации).


Какой процент разработчиков компилятора от общего числа программистов?
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 27.04.09 09:46
Оценка: :)
Здравствуйте, Хвост, Вы писали:

Х>>>язык C++ в своей молодости тоже бурно развивался, почитай D&E, только вот когда количество программистов на нём выросло до миллионов, количество платформ и компиляторов до десятков, то тут уже начинает главенствовать принцип "не навреди". C#, дай бог ему здоровья, если обретёт такой же ареал то будет развиваться тоже не шустро, уж поверь.

C>>Если бы Вы что-то знали о С# и об Андерсоне, Вы бы не писали такой чуши.

Х>Ганс Христиан? Как же, знаком, знаком. "Принцесса на горошине", "Дюймовочка", "Гадкий утёнок", да что там, "Стойкий оловянный солдатик", ето же всё классика и знакома каждому.

Опечатка. Подразумевался Андерс. Андерс Хайлсберг.
Х>А по существу, в чём чушь? Удиви меня.
В том, что для С# никогда не будет "десятков компиляторов и платформ" — язык будет продолжать развиваться во много раз быстрее С++ до тех пор, пока будет куда развиваться, а путей развития для него все еще — море.
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 27.04.09 10:02
Оценка: +1
Здравствуйте, criosray, Вы писали:

ГВ>>Началось... Давай вспомним все значения слова "стоимость" и все контексты, к которым его можно привязать.

C>Началась демогогия... Вам есть что по делу сказать?

Я уж сказал, вроде. Стоимость для конечного пользователя — это, в числе прочего, и стоимость аппаратных ресурсов, необходимых для выполнеия программ.

ГВ>>Ух ты. А что это такое — 1% от ФЯ? А почему не 0,76% и не 3,84%?

C>Еще одна порция демагогии. По делу нечего сказать? Под 1% подразумевалась — малая доля, если Вы ничего больше придумать не можете, кроме как цепляться к словам.
C>Функциональщины в том же С# больше, чем в С++0х (хорошее название, кстати, точно выражает инопланетное происхождение синтаксиса языка), но это не делает С# функциональным языком.

Прости, а кто-то утверждал, что C++ — функциональный язык? Говорили, что он поддерживает функциональный стиль. Это несколько не одно и то же. Не надо додумывать, а потом спорить с додуманным.

ГВ>>Это как-то опровергает то, что Lisp медленнее C++?

C>Нет, это означает что во многих (в большинстве, коли Вам так будет угодно) контекстах аргумент производительности конечного продукта абсолютно иррелевантет.

Да и шут с ними, со многими контекстами, в которых производительность не важна. В огороде бузина...

C>>>Лучшее — враг хорошего.

ГВ>>Бесспорно. На C++ получаются вполне хорошие решения.
C>Смотря по каким критериям оценивать и в зависимости от задач.

+1

ГВ>>С кем-то я совсем недавно спорил по поводу читабельности... А, с Владом как раз. Давай, теперь с тобой. Что такое "читабельность"? Какова связь читабельности и, например, open/close principle?

C>Самая что ни есть прямая.

Сначала ответь на первый вопрос: что такое "читабельность"?

ГВ>>Вот те раз, а мужики-то и не знают, что "лёгкость понимания", оказывается, зависит от чистоты парадигмы.

C>Легкость понимания зависит от выразительности и лаконичности синтаксиса языка и структуры кода (и других менее значимых факторов). В этом плане С++, скажем прямо, сосет. И Ваша реализация IoC тому самое явное доказательство (для сравнения смотрите исходник Сastle MicroKernel).

Я разве утверждал, что C++ — лаконичный язык? Его относительная многословность — вполне медицинский факт.

Кстати, что касается IoC, то мы начали с желательной модели использования. И кстати, содержательных комментариев так пока и не последовало.

ГВ>>Следовательно, для этой ниши C++ вполне подходящий и продуктивный язык, где ему нет достойных конкурентов.

C>На безрыбьи и рак — щука.

Да ну? Разве ж C++ — это безрыбье? Безрыбье — это автокод.

ГВ>>Будь я разработчиком компилятора того же C++, меня такая ситуация очень бы устраивала (стабильность спецификации).

C>Какой процент разработчиков компилятора от общего числа программистов?

Меня это устраивало бы, потому что можно сделать высококачественный компилятор и спокойно его отшлифовать, не опасаясь очередного виража стандартизаторов. А не потому, что я нашёл тихую заводь.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[29]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 27.04.09 10:05
Здравствуйте, Хвост, Вы писали:

Х>>>с использованием етой библиотеки реализуется минут за 5-10 опытными программистами на C++

C>>Вы ведь опытный программист, да? Реализацию в студию.
Х>реализацию чего? пока по вашим постам я только понял что вы хотите что-то вроде service locator'а, а не IoC контейнера. Лучше опишите задачу, как вы её решаете с помощью вашего фреймворка, и посмотрим что в етом случае делают в С++.

Простейший пример из продакшн кода — форма ввода, построенная на Supervising Controller, где презентация отмечена циклом жизни pooled 0-5, а контроллер на 100% (почти) покрыт модульными тестами и таких форм не одна, ни две, а больше сотни.
Re[28]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 27.04.09 10:13
Здравствуйте, criosray, Вы писали:

C>Здравствуйте, Хвост, Вы писали:


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


C>>>Запредельное? Патерн IoC в управляемых языках реализуется на базовом уровне за минут 40-50 максимум неопытными студентами.

Х>>http://code.google.com/p/pococapsule/

Очень-очень примитивно, если сравнивать с Castle Windsor.
Где возможность задать Lifecycle?
Где возможность задать Lifestyle?
Где автоматическая регистрация компонент по шаблону?


            Scan(x =>
            {
                x.TheCallingAssembly();


                x.ExcludeNamespaceContainingType<IEvent>();
                x.ExcludeNamespaceContainingType<SearchModel>();
                x.ExcludeNamespaceContainingType<AuthenticationService>();
                x.ExcludeNamespaceContainingType<DovetailController>();

 
                x.AddAllTypesOf<IDomainMap>();


                x.WithDefaultConventions();
                x.With<DomainEntityAliaser>();
            });



Где расширяемость аналогичная Сastle Facilities? Где интерцепторы???
Re[29]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 27.04.09 12:27
Оценка:1 (1)
Здравствуйте, criosray, Вы писали:

C>>>>Запредельное? Патерн IoC в управляемых языках реализуется на базовом уровне за минут 40-50 максимум неопытными студентами.

Х>>>http://code.google.com/p/pococapsule/
C>Очень-очень примитивно, если сравнивать с Castle Windsor.

Ну дык, pococapsule и по объёму чуть не в 10 раз меньше, чем Castle Windsor. Что тут бочку-то катить? Тем не менее, в качестве ответа на вопрос об IoC — вполне себе ответ.

C>Где возможность задать Lifecycle?

C>Где возможность задать Lifestyle?

Это уже фичи, которые в тот или иной контейнер могут быть внесены или нет.

C>Где автоматическая регистрация компонент по шаблону?


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

C>Где расширяемость аналогичная Сastle Facilities?


Да тоже, вроде бы, ничего сверхъестественного.

C>Где интерцепторы???


Вот с этим сложнее, но и то, из-за кодогенерации.



Ты всё же определись, чего ты хочешь от собеседников: чтобы сделали копию Castle Windsor или MS Unity, продемонстрировали возможный подход или ещё чего-то? Я надеюсь — ты не просто ищешь повод фыркнуть погромче, верно? Можно написать IoC-контейнер и конфигурируемый, и гибкий, и с обилием других качеств, но это, в общем, довольно объёмная работа. Тот же Castle Windsor, если судить по объёму исходников, ну никак не один и не два человеко-месяца.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 27.04.09 13:51
Здравствуйте, Геннадий Васильев, Вы писали:

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


C>>>>>Запредельное? Патерн IoC в управляемых языках реализуется на базовом уровне за минут 40-50 максимум неопытными студентами.

Х>>>>http://code.google.com/p/pococapsule/
C>>Очень-очень примитивно, если сравнивать с Castle Windsor.

ГВ>Ну дык, pococapsule и по объёму чуть не в 10 раз меньше, чем Castle Windsor. Что тут бочку-то катить?

Кого волнует объем?
ГВ>Тем не менее, в качестве ответа на вопрос об IoC — вполне себе ответ.
Нет, это не ответ. Что толку от такого IoC, если у него кроме самого базового DI и нету больше ничего?
Вот Вы лично пользуетесь PocoCapsule? Наверняка нет, а мы IoC используем на каждом шагу потому, что сильно облегчает жизнь и естественным образом улучшает архитектуру систем.

C>>Где возможность задать Lifecycle?

C>>Где возможность задать Lifestyle?

ГВ>Это уже фичи, которые в тот или иной контейнер могут быть внесены или нет.

Ну покажите мне хоть один контейнер на С++, где были бы эти "фичи". Это, кстати, не просто фичи, а самая основа работы контейнера. Что мне толку от контейнера, если я не могу задать lifestyle компоненты?

C>>Где автоматическая регистрация компонент по шаблону?


ГВ>Можно сделать и так, но понадобится глобальный регистратор всех компонентов, используемых в такой операции.


Ну сделайте. Очень хочу посмотреть. Условия все те же: конфигурирование через конфиг файл. То есть указывается сборки и шаблон, по которому ее сканировать и дальше все делается автоматически контейнером.

C>>Где расширяемость аналогичная Сastle Facilities?


ГВ>Да тоже, вроде бы, ничего сверхъестественного.


Ну нету ведь?

C>>Где интерцепторы???


ГВ>Вот с этим сложнее, но и то, из-за кодогенерации.


Конечно посложнее. И судя по тому, что готовых рабочих решений нету — невыполнимая задача для С++. Так?

ГВ>

ГВ>Ты всё же определись, чего ты хочешь от собеседников: чтобы сделали копию Castle Windsor или MS Unity, продемонстрировали возможный подход или ещё чего-то?
Да, я хочу чтоб мне показали аналог Виндсор, но для С++. Еще я хочу увидеть аналог RhinoMocks.

ГВ>Я надеюсь — ты не просто ищешь повод фыркнуть погромче, верно? Можно написать IoC-контейнер и конфигурируемый, и гибкий, и с обилием других качеств, но это, в общем, довольно объёмная работа. Тот же Castle Windsor, если судить по объёму исходников, ну никак не один и не два человеко-месяца.

Для справки, на дотнет реализаций этих контейнеров уже больше десятка (а то и двух десятков). Почему на вашем столь любом замечательном мощном С++ до сих пор нету ничего подобного? Можете ответить на этот вопрос?
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 27.04.09 14:05
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>>Началось... Давай вспомним все значения слова "стоимость" и все контексты, к которым его можно привязать.

C>>Началась демогогия... Вам есть что по делу сказать?

ГВ>Я уж сказал, вроде. Стоимость для конечного пользователя — это, в числе прочего, и стоимость аппаратных ресурсов, необходимых для выполнеия программ.


Каких еще ресурсов? Наш вполне себе современный софт с богатым пользовательским интерфейсом (WinForms, и WPF c недавних пор) работает на старых маломощных компьютерах и пользователи им довольны.

ГВ>>>Ух ты. А что это такое — 1% от ФЯ? А почему не 0,76% и не 3,84%?

C>>Еще одна порция демагогии. По делу нечего сказать? Под 1% подразумевалась — малая доля, если Вы ничего больше придумать не можете, кроме как цепляться к словам.
C>>Функциональщины в том же С# больше, чем в С++0х (хорошее название, кстати, точно выражает инопланетное происхождение синтаксиса языка), но это не делает С# функциональным языком.
ГВ>Прости, а кто-то утверждал, что C++ — функциональный язык? Говорили, что он поддерживает функциональный стиль. Это несколько не одно и то же. Не надо додумывать, а потом спорить с додуманным.
Да не поддерживает он функциональный стиль. Хотите функциональный стиль — смотрите тот же F#.

ГВ>>>С кем-то я совсем недавно спорил по поводу читабельности... А, с Владом как раз. Давай, теперь с тобой. Что такое "читабельность"? Какова связь читабельности и, например, open/close principle?

C>>Самая что ни есть прямая.
ГВ>Сначала ответь на первый вопрос: что такое "читабельность"?
Cвойство текстового материала, характеризующее лёгкость восприятия его человеком.

ГВ>>>Вот те раз, а мужики-то и не знают, что "лёгкость понимания", оказывается, зависит от чистоты парадигмы.

C>>Легкость понимания зависит от выразительности и лаконичности синтаксиса языка и структуры кода (и других менее значимых факторов). В этом плане С++, скажем прямо, сосет. И Ваша реализация IoC тому самое явное доказательство (для сравнения смотрите исходник Сastle MicroKernel).
ГВ>Я разве утверждал, что C++ — лаконичный язык? Его относительная многословность — вполне медицинский факт.
"а мужики-то и не знают, что "лёгкость понимания", оказывается, зависит от чистоты парадигмы"

ГВ>Кстати, что касается IoC, то мы начали с желательной модели использования. И кстати, содержательных комментариев так пока и не последовало.

Глаза раззуйте.

ГВ>>>Следовательно, для этой ниши C++ вполне подходящий и продуктивный язык, где ему нет достойных конкурентов.

C>>На безрыбьи и рак — щука.

ГВ>Да ну? Разве ж C++ — это безрыбье? Безрыбье — это автокод.


Нет, на безрыбьи и С++ (рак) — щука.

ГВ>>>Будь я разработчиком компилятора того же C++, меня такая ситуация очень бы устраивала (стабильность спецификации).

C>>Какой процент разработчиков компилятора от общего числа программистов?

ГВ>Меня это устраивало бы, потому что можно сделать высококачественный компилятор и спокойно его отшлифовать, не опасаясь очередного виража стандартизаторов. А не потому, что я нашёл тихую заводь.

Вы не ответили на поставленный вопрос: Какой процент разработчиков компилятора от общего числа программистов?
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 27.04.09 14:29
Здравствуйте, criosray, Вы писали:

ГВ>>Я уж сказал, вроде. Стоимость для конечного пользователя — это, в числе прочего, и стоимость аппаратных ресурсов, необходимых для выполнеия программ.

C>Каких еще ресурсов? Наш вполне себе современный софт с богатым пользовательским интерфейсом (WinForms, и WPF c недавних пор) работает на старых маломощных компьютерах и пользователи им довольны.

А кто-то утверждал, что софт на WPF должен всегда недопустимо тормозить? Вроде, такого не было. Мы, в общем, как раз о том сегменте, где те самые проценты разницы в производительности программ на C++ и .Net (или не проценты — как повезёт) имеют значение.

ГВ>>Прости, а кто-то утверждал, что C++ — функциональный язык? Говорили, что он поддерживает функциональный стиль. Это несколько не одно и то же. Не надо додумывать, а потом спорить с додуманным.

C>Да не поддерживает он функциональный стиль. Хотите функциональный стиль — смотрите тот же F#.

Упс. А лямбды — не функциональный стиль? Да даже бустовые замыкания — и то функциональный стиль.

ГВ>>>>С кем-то я совсем недавно спорил по поводу читабельности... А, с Владом как раз. Давай, теперь с тобой. Что такое "читабельность"? Какова связь читабельности и, например, open/close principle?

C>>>Самая что ни есть прямая.
ГВ>>Сначала ответь на первый вопрос: что такое "читабельность"?
C>Cвойство текстового материала, характеризующее лёгкость восприятия его человеком.

Каковы объективные характеристики этого свойства (я и в самом деле этого не знаю, хоть пальцем ткни, где про сие почитать)? Какова связь этого свойства с open/close principle?

ГВ>>>>Вот те раз, а мужики-то и не знают, что "лёгкость понимания", оказывается, зависит от чистоты парадигмы.

C>>>Легкость понимания зависит от выразительности и лаконичности синтаксиса языка и структуры кода (и других менее значимых факторов). В этом плане С++, скажем прямо, сосет. И Ваша реализация IoC тому самое явное доказательство (для сравнения смотрите исходник Сastle MicroKernel).
ГВ>>Я разве утверждал, что C++ — лаконичный язык? Его относительная многословность — вполне медицинский факт.
C>"а мужики-то и не знают, что "лёгкость понимания", оказывается, зависит от чистоты парадигмы"

Это к чему? Я что-то запутался. Чтобы исключить намёки, повторю своё мнение. Итак, на мой взгляд, чистота парадигмы — неизвестно что, поскольку зачастую неизвестно, что такое сама парадигма (только на википедию ссылаться не надо); лёгкость понимания — явление субъективное, т.е. — с трудом поддающееся объективным измерениям (мне, например, вполне понятно, что написано в IoC.h и ещё в туче других библиотек на C++); "многословность" — до некоторой степени измерима сравнением количества лексем в коде аналогичной функциональности на разных языках.

Понятно, почему я иронизирую над апелляциями к "лёгкости понимания" и "чистоте парадигмы"?

ГВ>>Кстати, что касается IoC, то мы начали с желательной модели использования. И кстати, содержательных комментариев так пока и не последовало.

C>Глаза раззуйте.

Дружище, как-то оно не по-товарищески — хамить в ответ на предложенный код. Собери свои претензии в один постинг, будь добр, и забрось в ответ по IoC, а то я не могу понять, где претензии к предложенному примеру, где к C++, где к IoC-контейнерам на C++ "вообще" и т.п.

ГВ>>Меня это устраивало бы, потому что можно сделать высококачественный компилятор и спокойно его отшлифовать, не опасаясь очередного виража стандартизаторов. А не потому, что я нашёл тихую заводь.

C>Вы не ответили на поставленный вопрос: Какой процент разработчиков компилятора от общего числа программистов?

Это нерелевантный в данном контексте вопрос, да и не смог бы я на него содержательно ответить, даже если бы и захотел. С другой стороны, cие не имеет ни малейшего значения с точки зрения оценки самого C++. Пойми, медленное развитие C++ как языка имеет свои положительные стороны — как минимум, разработчики компиляторов могут дать более качественные (оптимизированные и т.п.) компиляторы, чем это было бы в ситуации очень быстрых изменений. Во всяком случае, такое предположение вполне логично.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[31]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 27.04.09 15:18
Здравствуйте, criosray, Вы писали:

ГВ>>Ну дык, pococapsule и по объёму чуть не в 10 раз меньше, чем Castle Windsor. Что тут бочку-то катить?

C>Кого волнует объем?

В общем — никого, согласен. Просто pocoapsule — это мелочёвка, в общем-то. Годится в качестве заготовки, пожалуй, ну так она для того и приведена была здесь.

ГВ>>Тем не менее, в качестве ответа на вопрос об IoC — вполне себе ответ.

C>Нет, это не ответ. Что толку от такого IoC, если у него кроме самого базового DI и нету больше ничего?
C>Вот Вы лично пользуетесь PocoCapsule? Наверняка нет, а мы IoC используем на каждом шагу потому, что сильно облегчает жизнь и естественным образом улучшает архитектуру систем.

Да я вообще самописными контейнерами такого рода пользуюсь. И не жужжу особо. Просто называю их не IoC-контейнерами, а настраиваемыми агрегатами, например.

C>>>Где возможность задать Lifecycle?

C>>>Где возможность задать Lifestyle?
ГВ>>Это уже фичи, которые в тот или иной контейнер могут быть внесены или нет.
C>Ну покажите мне хоть один контейнер на С++, где были бы эти "фичи". Это, кстати, не просто фичи, а самая основа работы контейнера. Что мне толку от контейнера, если я не могу задать lifestyle компоненты?

Сдаётся мне, что тут дело в несколько иной общей культуре разработки на C++ — здесь не так модны большие тяжёлые компоненты типа "унифицирующих контейнеров" a-la Java. А написать самостоятельно что-то в таком духе — дело не сложное (как раз мой пример о том и свидетельствует). Можно и lifestyle/lifecycle прикрутить — опять таки, дело не хитрое.

C>>>Где автоматическая регистрация компонент по шаблону?

ГВ>>Можно сделать и так, но понадобится глобальный регистратор всех компонентов, используемых в такой операции.
C>Ну сделайте. Очень хочу посмотреть. Условия все те же: конфигурирование через конфиг файл. То есть указывается сборки и шаблон, по которому ее сканировать и дальше все делается автоматически контейнером.

Нет такого явления в C++, как "сборки" — это раз. Есть DLL, но нет такого явления, как "сканирование содержимого DLL". Чтобы получить нечто подобное поиску нужного класса нужно а) определить способ и формат описания класса (реестр), б) занести описания всех классов в такой реестр и в) напустить на указанный реестр операцию поиска. В рантайме-то у C++-ных классов никаких имён нет. Техника очевидная для любого C++-ника. В принципе, если формат выбран с человекочитаемыми именами, то их можно перенсти и в конфиг-файл. Тоже, в общем, не бином Ньютона.

Мне сейчас, честно говоря, просто возиться с этим не хочется. Для форумного спора как-то слишком много усилий на квадратный дюйм.

C>>>Где расширяемость аналогичная Сastle Facilities?

ГВ>>Да тоже, вроде бы, ничего сверхъестественного.
C>Ну нету ведь?

Где? У меня?

C>>>Где интерцепторы???

ГВ>>Вот с этим сложнее, но и то, из-за кодогенерации.
C>Конечно посложнее. И судя по тому, что готовых рабочих решений нету — невыполнимая задача для С++. Так?

Проще сказать — да, невыполнимая. Прокси придётся писать вручную. Максимум, чем можно воспользоваться — довольно хитрыми играми с препроцессором.



ГВ>>Ты всё же определись, чего ты хочешь от собеседников: чтобы сделали копию Castle Windsor или MS Unity, продемонстрировали возможный подход или ещё чего-то?
C>Да, я хочу чтоб мне показали аналог Виндсор, но для С++. Еще я хочу увидеть аналог RhinoMocks.

Зачем? Это послужит тебе аргументом за то, что C++ — "достаточно мощный"? Или интересует принципиальная возможность реализации таких вещей?

ГВ>>Я надеюсь — ты не просто ищешь повод фыркнуть погромче, верно? Можно написать IoC-контейнер и конфигурируемый, и гибкий, и с обилием других качеств, но это, в общем, довольно объёмная работа. Тот же Castle Windsor, если судить по объёму исходников, ну никак не один и не два человеко-месяца.

C>Для справки, на дотнет реализаций этих контейнеров уже больше десятка (а то и двух десятков). Почему на вашем столь любом замечательном мощном С++ до сих пор нету ничего подобного? Можете ответить на этот вопрос?

Значит, просто никому не нужно. А вообще говоря, не знаю, почему оно так.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[19]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 27.04.09 15:31
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Как ты правильно заметил, Тьюринг-полные языки, в общем, эквивалентны по своим возможностям в смысле выражения абстракций. Всё дело в итоговой цене на билет. Я не сомневаюсь, что абстракцию автоматического управления ресурсами вроде std::auto_ptr можно реализовать и на Хаскеле, и на Лиспе и ещё много на чём. Вопрос остаётся тем же самым: сколько это будет стоить пользователю.


У тебя проблемы с терминологией. std::auto_ptr — это помошник упрощающий ручное управление памятью. В языках с автоматическим управлением памятью они ненужны. Меж тем сделать их не сложно.

ГВ>Так с современными, или с теми, которые старше и на которых обкатывались идеи, впитанные C++?


А что мешает языку быть старше другого языка и оставаться при этом современным? Лисп вещь самодостаточная. У него никогда не было проблем с std::auto_ptr. По этому он и сейчас почти в любой пенесометрии порвет С++ как тузик грелку.

ГВ>В новой версии стандарта — поддерживает.


1. Где эта версия? Стандарт уже зарелизили? А то мне про него последние 10 лет рассказывают, рассказывают...
2. Без GC толку от этого будет не много.

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


ГВ>По всей видимости, ollv имеет в виду C#, говоря о .Net.


Ну, так пора запомнить, что это разные вещи.

ГВ>В том же, что кодогенерация C++ перенастроена на IL ничего необычного нет.


Спасибо за поддержку.

ГВ>Тьюринг-полнота, ага. Из C++ можно и Lisp генерировать. И наоборот. Вопрос в практичности такого решения.


А что непрактичного в генерации il-а? Скорсть практически та же. Другое дело, что многим это может быть не нужно. Но перенацеливание С++ для дотнета было сделано ради упрощения итеропа, так что практичность и целесообразность очень высоки.

VD>>Теперь я тебе открою правду о шаблонах.


ГВ>[skip обнажённая правда, от блеска которой слепит глаза и хочется сморкаться]


Это у тебя неадекватные реакции. Ничего, бывает....

ГВ>Всё это, конечно, правильно, хоть и с некоторыми поправками. Но поправки сейчас не суть важны. Важно другое: что та самая "область" в которой царят все за компанию (кроме C++) магическим образом не пересекается с теми областями, в которых от C++ никак не могут (и не хотят) избавиться по сугубо практическим соображениям.


Ошибаешься! Такие как ollv по незнанию или из фанатических побуждений применяют С++ там где ему совсем не место и в условиях где он противопоказан.

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

ГВ>То есть, она как бы есть, но её значимость как бы слегка эфемерна по отношению к тому набору требований, с которым приходится иметь дело C++-никам.


В большинстве случаев это домысли тех самых С++-ников.

ГВ>А так — да, бесспорно. На Lisp можно написать очень много всего интересного. Если бы ещё не потеря производительности по сравнению с "убогим" C/C++ — всё было бы совсем хорошо.


Когда-то давно производительность Лиспа была огромной проблемой. Но сейчас есть высокопроизводительные компиляторы. Плюс Лисп позволят генерировать исполянемый код. Вот недавно мне дали ссылку на забавный продукт (можно сказать в некотором роде конкурент Немерла):
http://lambda-the-ultimate.org/node/3281
Это язык основанный на Лиспе позволяющий расширять свой синтаксис и семантику. К сожалению, информации по нему пока очень мало. Но факт в том, что этот язык имеет библиотеку позволяющую преобразовывать код на этом языке в il тем самым уходя от интерпретации и получая высокопроизводительные решения.

ГВ>Суть вещей — многогранное явление. Для каждого она своя.


Для людей не обладающих информацией она всегда однобока.

O>>> Кроме того, на плюсах вполне реализуемы элементы не родственных стурктур, к примеру итерации for_each, find_if count_if, функторы, придают плюсам оттенки функциональных языков,


VD>> Они придают плюсам оттенок помойки. Попиши сначала на полноценном ФЯ, а потом делай такие заявления.


ГВ>Помойка или нет — это сугубо эмоциональная оценка.


Эмоциональная она для тех, кто не видел библиотек функциональных языков. Там все очень смеялись бы увидев функции вроде find_if и count_if. Их авторам рассказали бы, что на то есть универсальные функции высшего порядка filter и fold, а find_if и count_if реализуются на их базе добавлением простейшей лямбды.

ГВ>Не нравится — не пользуйся, никто не заставляет.


Не нравится. Не пользуюсь. Будь уверен.

ГВ> Зато нет никакой необходимости любой ценой приводить структуру потока управления в соответствие с некоторой "правильной парадигмой".


Это ты в том смысле сказал, что усе уже сделано не правильно и делать что-то правильно не надо?

VD>>[...] С++ тут откровенный лузер, если сравнивать его с такими языками, реализованными поверх дотнета, как Nemerle и Lisp. Вот где МП доведено до высшего пилотажа. Причем оно исходно предусмотрено в языка, а не достигается использованием побочных эффектов системы типов.


ГВ>Забавно, что как раз использование "побочных эффектов" и делает C++ столь привлекательным по критерию производительности программиста при сохранении производительности продукта.


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

ГВ>А чистота "метапрограммирования", или "функционального программирования", или ещё какая "чистота" какой-нибудь очередной мутной "парадигмы" вообще не шибко-то кого и беспокоит (в мире C++). Пуризм — это ещё одно ругательство, как и BASIC, если ты не в курсе. Есть только два критерия: "удобно написать удобную фишку X" и "иметь возможности для отступления в случае потерь производительности".


Это как раз тот случай где отсутствие чистых и грамотных решений толкает на использование кривых.
Ты с книгами Александеску хорошо знаком?

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


Да, да, да. Зачем наука в программировании? Ты давно всем доказал, что программирование особая отрасль и мозг в ней не нужен. Главное трясти по сильнее. То ли дело автомобили. Вот там наука важна. Ведь на автомобилях ездеем мы сами, а софт используют какие-то ламеры.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[20]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 27.04.09 16:46
Здравствуйте, VladD2, Вы писали:

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


GC научился удалять строго указанные объекты (освобождать занятую память) в строго указанный момент времени? Он же, вроде, с точностью до поколения может работать?

ГВ>>Так с современными, или с теми, которые старше и на которых обкатывались идеи, впитанные C++?

VD>А что мешает языку быть старше другого языка и оставаться при этом современным? Лисп вещь самодостаточная. У него никогда не было проблем с std::auto_ptr. По этому он и сейчас почти в любой пенесометрии порвет С++ как тузик грелку.

ГВ>>В новой версии стандарта — поддерживает.

VD>1. Где эта версия? Стандарт уже зарелизили? А то мне про него последние 10 лет рассказывают, рассказывают...

Ну... Комитет (tm).

VD>2. Без GC толку от этого будет не много.


ИМХО, ты ошибаешься.

ГВ>>В том же, что кодогенерация C++ перенастроена на IL ничего необычного нет.

VD>Спасибо за поддержку.

Пожалуйста.

ГВ>>Тьюринг-полнота, ага. Из C++ можно и Lisp генерировать. И наоборот. Вопрос в практичности такого решения.

VD>А что непрактичного в генерации il-а? Скорсть практически та же. Другое дело, что многим это может быть не нужно. Но перенацеливание С++ для дотнета было сделано ради упрощения итеропа, так что практичность и целесообразность очень высоки.

Я и не оспариваю практическую полезность генерации IL компилятором C++.

ГВ>>Всё это, конечно, правильно, хоть и с некоторыми поправками. Но поправки сейчас не суть важны. Важно другое: что та самая "область" в которой царят все за компанию (кроме C++) магическим образом не пересекается с теми областями, в которых от C++ никак не могут (и не хотят) избавиться по сугубо практическим соображениям.

VD>Ошибаешься! Такие как ollv по незнанию или из фанатических побуждений применяют С++ там где ему совсем не место и в условиях где он противопоказан.

Это слишком сильное утверждение, насчёт незнания и фанатизма. Так что, тут я согласиться не могу.

VD>Понимаешь, я не буду спорить, что если задача очень тиражная и скорость является основным требованием, то С++ подходящий язык. Хотя и тут есть альтернативные решения и С++ зачастую выбирается исходя из распространенности и разрекламированности. Но когда сил не много, а нужно в кратчайшие строки получить надежное решение, когда денег на разработку нехватает, С++ является худшим выбором. Например, на С++ сайты не пишут даже в Майкрософт и АйБиЭм. А наши лаботрясы пишут. И еще с пеной у рта доказывают, что только так и надо.


Не надо переворачивать с ног на голову. Сайты бывают разные, и требования — тоже разные. MS и IBM (как и все остальные) вольны поступать так, как им заблагорассудится. И кроме всего прочего, слишком мало критериев для отсечения C++: "в кратчайшие строки получить надежное решение, когда денег на разработку нехватает". Он запросто может оказаться наилучшим выбором с учётом других факторов. Тут проблема в другом: почему-то те, кто ругают C++ приписывают ему какую-то имманентную глюкавость, запредельную трудоёмкость и т.п. чуть ли не по всем аспектам, тогда как на самом деле это а) не так и б) зачастую обусловлено тем же контекстом, т.е. постановкой задачи, анализом требований и т.п.

ГВ>>То есть, она как бы есть, но её значимость как бы слегка эфемерна по отношению к тому набору требований, с которым приходится иметь дело C++-никам.

VD>В большинстве случаев это домысли тех самых С++-ников.

Домыслы — это как раз попытка любой ценой соблюсти теоретическую цельность. ИМХО, бессмысленная и глупая затея: простое заколачивание гвоздя может быть обложено целой тучей теорий и псевдотеорий, но заколачивальщик вовсе не обязан им следовать.

ГВ>>А так — да, бесспорно. На Lisp можно написать очень много всего интересного. Если бы ещё не потеря производительности по сравнению с "убогим" C/C++ — всё было бы совсем хорошо.

VD>Когда-то давно производительность Лиспа была огромной проблемой. Но сейчас есть высокопроизводительные компиляторы.

AFAIK, на данный момент Lisp примерно на 5-20% проигрывает C++, пробегало где-то на www.franz.com. Естественно, это не весь Lisp, вполне вероятно, что есть и пошустрее. Про SBCL я знаю, но сильно с ним не возился.

VD>Плюс Лисп позволят генерировать исполянемый код. Вот недавно мне дали ссылку на забавный продукт (можно сказать в некотором роде конкурент Немерла):

VD>http://lambda-the-ultimate.org/node/3281
VD>Это язык основанный на Лиспе позволяющий расширять свой синтаксис и семантику. К сожалению, информации по нему пока очень мало. Но факт в том, что этот язык имеет библиотеку позволяющую преобразовывать код на этом языке в il тем самым уходя от интерпретации и получая высокопроизводительные решения.

Тоже неплохо.

ГВ>>Суть вещей — многогранное явление. Для каждого она своя.

VD>Для людей не обладающих информацией она всегда однобока.



VD>>> Они придают плюсам оттенок помойки. Попиши сначала на полноценном ФЯ, а потом делай такие заявления.

ГВ>>Помойка или нет — это сугубо эмоциональная оценка.
VD>Эмоциональная она для тех, кто не видел библиотек функциональных языков. Там все очень смеялись бы увидев функции вроде find_if и count_if. Их авторам рассказали бы, что на то есть универсальные функции высшего порядка filter и fold, а find_if и count_if реализуются на их базе добавлением простейшей лямбды.

Да нет, она эмоциональная по сугубо формальным признакам. find_if и Co вполне решают свои задачи в рамках STL/C++. Понятно, что это не filter/fold, но тем не менее.

ГВ>> Зато нет никакой необходимости любой ценой приводить структуру потока управления в соответствие с некоторой "правильной парадигмой".

VD>Это ты в том смысле сказал, что усе уже сделано не правильно и делать что-то правильно не надо?

Да не... Парадигм слишком много и каждая — самонаилучшая. С точки зрения адептов. Но абсолютная "правильность" — это миф такой, весьма живучий, вроде абсолютной качественности. Есть решения подходящие более или менее по вполне определённым критериям, вот и всё. Эти критерии выбираются исходя из требований текущих и прогнозируемых. Иногда удаётся предугадать изменение требований и тогда решение объявляется "правильным", иногда — нет и его объявляют "неправильным". Ну и ещё добавим сюда критерии, связанные с практическим удобством разработки и легко прогнозируемыми модификациями.

ГВ>>Забавно, что как раз использование "побочных эффектов" и делает C++ столь привлекательным по критерию производительности программиста при сохранении производительности продукта.

VD>Забавно, что ты даже не понимаешь о чем идет речь. Речь же идет о побочных эффектах воплощения шаблонов. Эти эффекты позволяют заниматься метапрограммированием во время компиляции. Но как и все, что достигается не предусмотренными для этого средствами, данное решение является очень неудобным и ограниченным.

Удивительно, но именно шаблоны я и имел в виду.

ГВ>>А чистота "метапрограммирования", или "функционального программирования", или ещё какая "чистота" какой-нибудь очередной мутной "парадигмы" вообще не шибко-то кого и беспокоит (в мире C++). Пуризм — это ещё одно ругательство, как и BASIC, если ты не в курсе. Есть только два критерия: "удобно написать удобную фишку X" и "иметь возможности для отступления в случае потерь производительности".

VD>Это как раз тот случай где отсутствие чистых и грамотных решений толкает на использование кривых.

Скажем так, это квинтэссенция практических мотиваций.

VD>Ты с книгами Александеску хорошо знаком?


Наизусть не помню, конечно. А что?

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

VD>Да, да, да. Зачем наука в программировании? Ты давно всем доказал, что программирование особая отрасль и мозг в ней не нужен. Главное трясти по сильнее. То ли дело автомобили. Вот там наука важна. Ведь на автомобилях ездеем мы сами, а софт используют какие-то ламеры.

Да ну?! Вроде как я обычно доказываю прямо противоположное. Мозг как раз нужен и теоретическая подготовка — тоже. Так что, что-то ты перепутал.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[21]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 27.04.09 17:49
Оценка: +1 :)
Здравствуйте, Геннадий Васильев, Вы писали:

VD>>У тебя проблемы с терминологией. std::auto_ptr — это помощник упрощающий ручное управление памятью. В языках с автоматическим управлением памятью они ненужны. Меж тем сделать их не сложно.


ГВ>GC научился удалять строго указанные объекты (освобождать занятую память) в строго указанный момент времени? Он же, вроде, с точностью до поколения может работать?


GC бывают разные, но их объединяет одно — при наличии GC не надо управлять жизнью объектов вручную.

ГВ>>>В новой версии стандарта — поддерживает.

VD>>1. Где эта версия? Стандарт уже зарелизили? А то мне про него последние 10 лет рассказывают, рассказывают...

ГВ>Ну... Комитет (tm).


Ага. Комитет — это жизненная форма, наделённая шестью или более ногами, и лишенная мозга. (с) Роберт Хайнлайн. Потому и развитие С++ такое бурное.

VD>>2. Без GC толку от этого будет не много.


ГВ>ИМХО, ты ошибаешься.


Да? Объясни тогда оду простую вещь. Для эффективного использования замыканий сами замыкания и все на что они замкнуты (т.е. имеют ссылки) должно жить столько сколько живет само замыкание. А замыкание может быть передано в ФВП которая так же может передать его в другие ФВП. Как не имея системы автоматического управления памятью реализовать безопасные (не приводящие к UB ошибкам времени выполения) замыкания?

VD>>Ошибаешься! Такие как ollv по незнанию или из фанатических побуждений применяют С++ там где ему совсем не место и в условиях где он противопоказан.


ГВ>Это слишком сильное утверждение, насчёт незнания и фанатизма. Так что, тут я согласиться не могу.


Что в нем сильного? Оно не противоречит утверждению, что есть люди использующие С++ осознанно и для задач где он является конкурентно-способным.

ГВ>Не надо переворачивать с ног на голову. Сайты бывают разные, и требования — тоже разные.


Ага. Не надо. Не надо разглагольствовать о разных задах сайтов. С++ там по любому не место. Если только в виде какого-то там драйвера или мелкого компонента вроде ISAPI-фильтра.

ГВ>MS и IBM (как и все остальные) вольны поступать так, как им заблагорассудится.


Ага. И выбирают для сайтов Яву и дотнет.

ГВ> И кроме всего прочего, слишком мало критериев для отсечения C++: "в кратчайшие строки получить надежное решение, когда денег на разработку нехватает". Он запросто может оказаться наилучшим выбором с учётом других факторов.


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

ГВ> Тут проблема в другом: почему-то те, кто ругают C++ приписывают ему какую-то имманентную глюкавость, запредельную трудоёмкость и т.п. чуть ли не по всем аспектам, тогда как на самом деле это а) не так и б) зачастую обусловлено тем же контекстом, т.е. постановкой задачи, анализом требований и т.п.


Глюкавость приписывают не языку, а коду на нем написанном. И не почему-то, а исходя из общирного опыта и объективных логических рассуждений. Язык не типобезопасен, возлагает на программиста массу ответственности.
Есть такое умное высказывание (не помню чье) — человек не должен делать работу которую может сделать машина. А С++ заставляет человека делать работу которую можно возложить на машину. Все остальное последсвия. Ну, и С++ как раз очень сильно сковывает программиста в выборе абстракции. По сути, большинство С++-программистов, начинают решать все задачи с помощью шаблонов. Причем очень распростронено мнение, что производительность важнее качества.

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

ГВ>>>А так — да, бесспорно. На Lisp можно написать очень много всего интересного. Если бы ещё не потеря производительности по сравнению с "убогим" C/C++ — всё было бы совсем хорошо.

VD>>Когда-то давно производительность Лиспа была огромной проблемой. Но сейчас есть высокопроизводительные компиляторы.

ГВ>AFAIK, на данный момент Lisp примерно на 5-20% проигрывает C++, пробегало где-то на www.franz.com.


Твой AFAIK. Высосан из пальцев. В прочем я не Лиспер и дать тебе точных данных не могу. Но я проверял их данные и скорее соглашусь с ними, а не с тобой. Кстати, проигрышь в 20% это вообще смешно. Отдельные компиляторы С++ проигрывают друг-другу в разны на разных задачах.

В прочем можно посмотреть здесь.

ГВ>Про SBCL я знаю, но сильно с ним не возился.


Я его пробовал. Очень быстрый, но глюкавый и не очень стандартный. Главная проблема в том, что для Винды его делают в последнюю очередь. Верся для Винды значительно отстает. Но для пенисометрии идеален. На многих тестах рвет С++-ные компиляторы как тузик грелку.

ГВ>Тоже неплохо.


Еще как не плохо. И это технологии про которые уже забыл. А ведь им 50 лет!

ГВ>Да нет, она эмоциональная по сугубо формальным признакам. find_if и Co вполне решают свои задачи в рамках STL/C++. Понятно, что это не filter/fold, но тем не менее.


Офтоп — Люблю русский "да нет".
Если понятно, то лучше помалкивать про find_if и компанию. И уж точно не заикаться о "применимости к объектам разного класса" или как там?...

ГВ>>>Забавно, что как раз использование "побочных эффектов" и делает C++ столь привлекательным по критерию производительности программиста при сохранении производительности продукта.

VD>>Забавно, что ты даже не понимаешь о чем идет речь. Речь же идет о побочных эффектах воплощения шаблонов. Эти эффекты позволяют заниматься метапрограммированием во время компиляции. Но как и все, что достигается не предусмотренными для этого средствами, данное решение является очень неудобным и ограниченным.

ГВ>Удивительно, но именно шаблоны я и имел в виду.


Да? Иди прочти еще раз свои слова. Если ты говорил о шаблонах, то они вообще теряют смысл.

ГВ>>>А чистота "метапрограммирования", или "функционального программирования", или ещё какая "чистота" какой-нибудь очередной мутной "парадигмы" вообще не шибко-то кого и беспокоит (в мире C++). Пуризм — это ещё одно ругательство, как и BASIC, если ты не в курсе. Есть только два критерия: "удобно написать удобную фишку X" и "иметь возможности для отступления в случае потерь производительности".

VD>>Это как раз тот случай где отсутствие чистых и грамотных решений толкает на использование кривых.

ГВ> Скажем так, это квинтэссенция практических мотиваций.


Это э....ыы... жопа, если одним словмо.

VD>>Ты с книгами Александеску хорошо знаком?


ГВ>Наизусть не помню, конечно. А что?


Но знаком? А с метапрограммированием в Лисп или Немерле ты знаком?
Если знаком, то должен понимать, что это как небо и земля. В случае шаблонов С++ трудоемкость офигительная, сложность высокая, результат так себе и при этом все еще совсем плохо по ресурсам потребляемым компилятором. А в результате метапрограмма деже не может выдать сообщение об ошибке или обратиться к внешнему файлу. Ну, куда это годится?

VD>>Да, да, да. Зачем наука в программировании? Ты давно всем доказал, что программирование особая отрасль и мозг в ней не нужен. Главное трясти по сильнее. То ли дело автомобили. Вот там наука важна. Ведь на автомобилях ездеем мы сами, а софт используют какие-то ламеры.


ГВ>Да ну?! Вроде как я обычно доказываю прямо противоположное. Мозг как раз нужен и теоретическая подготовка — тоже. Так что, что-то ты перепутал.


Я перепутал? Ну, не знаю. Я тебя читал.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 27.04.09 18:41
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Упс. А лямбды — не функциональный стиль? Да даже бустовые замыкания — и то функциональный стиль.


В boost-е нет полноценных замыканий. Там очень ограниченная эмуляция.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 27.04.09 18:45
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Это нерелевантный в данном контексте вопрос, да и не смог бы я на него содержательно ответить, даже если бы и захотел. С другой стороны, cие не имеет ни малейшего значения с точки зрения оценки самого C++. Пойми, медленное развитие C++ как языка имеет свои положительные стороны — как минимум, разработчики компиляторов могут дать более качественные (оптимизированные и т.п.) компиляторы, чем это было бы в ситуации очень быстрых изменений. Во всяком случае, такое предположение вполне логично.


Качество компиляторов можно повысить спроектировав качественный язык, а не давая 10 лет на реализацию запутанного и мутного монстра.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[21]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 27.04.09 18:50
Здравствуйте, Хвост, Вы писали:

Х>язык C++ в своей молодости тоже бурно развивался, почитай D&E, только вот когда количество программистов на нём выросло до миллионов, количество платформ и компиляторов до десятков, то тут уже начинает главенствовать принцип "не навреди". C#, дай бог ему здоровья, если обретёт такой же ареал то будет развиваться тоже не шустро, уж поверь.


Не возьмусь оценить точные проценты применения, но почему-то мне кажется, что C#, а уж тем более Ява применяется гораздо чаще на сегодняшний день. И объясняется это тем, что он применяется для автоматизации предприятий и создания сайтов в интернет. В этих областях есть много нюансов и написать единый коробочный софт для них в принципе невозможно. А это ниша для огромных стад разработчиков. С++ же используется в последнее время больше частью для создания высокотиражных продуктов где стоимость разработки не так важна, так как окупается количеством продаж (т.е. — игры, ОС, офисные приложения), а меньшее потребление компьютерных ресурсов может увеличить объем продаж.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[22]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 27.04.09 19:01
Здравствуйте, VladD2, Вы писали:

VD>>>2. Без GC толку от этого будет не много.

ГВ>>ИМХО, ты ошибаешься.
VD>Да? Объясни тогда оду простую вещь. Для эффективного использования замыканий сами замыкания и все на что они замкнуты (т.е. имеют ссылки) должно жить столько сколько живет само замыкание. А замыкание может быть передано в ФВП которая так же может передать его в другие ФВП. Как не имея системы автоматического управления памятью реализовать безопасные (не приводящие к UB ошибкам времени выполения) замыкания?

Замыкать можно ещё и значения. Значения указателей — в том числе и т.д., и т.п.

VD>>>Ошибаешься! Такие как ollv по незнанию или из фанатических побуждений применяют С++ там где ему совсем не место и в условиях где он противопоказан.

ГВ>>Это слишком сильное утверждение, насчёт незнания и фанатизма. Так что, тут я согласиться не могу.
VD>Что в нем сильного? Оно не противоречит утверждению, что есть люди использующие С++ осознанно и для задач где он является конкурентно-способным.

Вот это: "Такие как ollv". Если бы ты сказал "некоторые", я бы согласился. А так ты едва ли не прямо сомневаешься в квалификации ollv, что порицается правилами форума.

ГВ>>Не надо переворачивать с ног на голову. Сайты бывают разные, и требования — тоже разные.

VD>Ага. Не надо. Не надо разглагольствовать о разных задах сайтов. С++ там по любому не место. Если только в виде какого-то там драйвера или мелкого компонента вроде ISAPI-фильтра.

Место ему там или нет — оставь решение этой задачи самим разработчикам сайтов. Полагаю, что их квалификации вполне достаточно для такого выбора. Ты скажи, ты сам много сайтов на C++ написал, а потом переписал их на что-то ещё, чтобы уверенно утверждать, что C++ не даёт никаких преимуществ?

ГВ>>MS и IBM (как и все остальные) вольны поступать так, как им заблагорассудится.

VD>Ага. И выбирают для сайтов Яву и дотнет.

И что с того? Выбрали и выбрали. Как это должно сказываться на выборе, который делают совсем другие люди?

ГВ>> И кроме всего прочего, слишком мало критериев для отсечения C++: "в кратчайшие строки получить надежное решение, когда денег на разработку нехватает". Он запросто может оказаться наилучшим выбором с учётом других факторов.

VD>Ага. Но другим фактором может быть только крайняя нужда в достижении высокой вычислительной производительности путем ручной оптимизации.

Отнюдь. Решающим фактором может оказаться всё, что угодно, вплоть до наличия под рукой подходящих библиотек и доступности программистов. А ещё фактором может оказаться, например, необходимость тащить .Net FW.

ГВ>> Тут проблема в другом: почему-то те, кто ругают C++ приписывают ему какую-то имманентную глюкавость, запредельную трудоёмкость и т.п. чуть ли не по всем аспектам, тогда как на самом деле это а) не так и б) зачастую обусловлено тем же контекстом, т.е. постановкой задачи, анализом требований и т.п.

VD>Глюкавость приписывают не языку, а коду на нем написанном. И не почему-то, а исходя из общирного опыта и объективных логических рассуждений. Язык не типобезопасен, возлагает на программиста массу ответственности.

Э... Не так. C++ допускает опасные операции. Но вовсе не требует. А ответственность везде в цене, это от языка не зависит.

VD>Есть такое умное высказывание (не помню чье) — человек не должен делать работу которую может сделать машина. А С++ заставляет человека делать работу которую можно возложить на машину.


Не так. C++ позволяет человеку влезть в то, чем обычно занимается машина.

VD>Все остальное последсвия. Ну, и С++ как раз очень сильно сковывает программиста в выборе абстракции. По сути, большинство С++-программистов, начинают решать все задачи с помощью шаблонов.


Опять двадцать пять.

1. Ограничения на выбор допустимых абстракции есть у любого языка программирования. Так уж они, засранцы, устроены.
2. Шаблоны широко используются в программировании на C++. Не понятно, ты считаешь это негативной чертой? Или — ограничителем в выборе абстракции?

VD>Причем очень распростронено мнение, что производительность важнее качества.


Нередко производительность является составляющей интегральной характеристики "качественно".

VD>Многие защитники С++ приводят в качестве примера 3D-игры. Мол, "почему их пишут на С++?". А стоило бы посмотреть на другой аспект. Почти все эти игры безбожно глючат. Играть в некоторые до выхода патчей просто невозможно. Большая часть ошибок в этих играх могла бы быть попросту не допущена, будь программа написана на более качественном языке.


С чего ты это взял? Например, известно, что крутоглюкавый Сталкер (который без кучи патчей вылетает в самых неожиданных местах) написан с использованием Lua. Известна также душещипательная история о скоростной резке Сталкера перед выходом (часть карт порезана, часть выброшена и т.д.) Думается, что вторая причина посущественнее остальных будет.

ГВ>>AFAIK, на данный момент Lisp примерно на 5-20% проигрывает C++, пробегало где-то на www.franz.com.

VD>Твой AFAIK. Высосан из пальцев. В прочем я не Лиспер и дать тебе точных данных не могу. Но я проверял их данные и скорее соглашусь с ними, а не с тобой. Кстати, проигрышь в 20% это вообще смешно. Отдельные компиляторы С++ проигрывают друг-другу в разны на разных задачах.

Не понял. Чьи данные ты проверял?

ГВ>>Да нет, она эмоциональная по сугубо формальным признакам. find_if и Co вполне решают свои задачи в рамках STL/C++. Понятно, что это не filter/fold, но тем не менее.

VD>Офтоп — Люблю русский "да нет".
VD>Если понятно, то лучше помалкивать про find_if и компанию. И уж точно не заикаться о "применимости к объектам разного класса" или как там?...

О чём не заикаться? Я тебя не понимаю что-то. fold, в общем, до какой-то степени эмулируется accumulate+boost::bind, а у find_if — своё, вполне определённое назначение и она вполне применима к широкому набору типов. Шаблон же, однако.

ГВ>>>>Забавно, что как раз использование "побочных эффектов" и делает C++ столь привлекательным по критерию производительности программиста при сохранении производительности продукта.

VD>>>Забавно, что ты даже не понимаешь о чем идет речь. Речь же идет о побочных эффектах воплощения шаблонов. Эти эффекты позволяют заниматься метапрограммированием во время компиляции. Но как и все, что достигается не предусмотренными для этого средствами, данное решение является очень неудобным и ограниченным.
ГВ>>Удивительно, но именно шаблоны я и имел в виду.
VD>Да? Иди прочти еще раз свои слова. Если ты говорил о шаблонах, то они вообще теряют смысл.

Так... Тогда объясни, что ты считаешь "прямыми", а что "побочными" эффектами шаблонов?

VD>>>Это как раз тот случай где отсутствие чистых и грамотных решений толкает на использование кривых.

ГВ>> Скажем так, это квинтэссенция практических мотиваций.
VD>Это э....ыы... жопа, если одним словмо.

Real World, The.

VD>Если знаком (с МП на Lisp и Nemerle — ГВ.), то должен понимать, что это как небо и земля. В случае шаблонов С++ трудоемкость офигительная, сложность высокая, результат так себе и при этом все еще совсем плохо по ресурсам потребляемым компилятором. А в результате метапрограмма деже не может выдать сообщение об ошибке или обратиться к внешнему файлу. Ну, куда это годится?


А зачем метапрограмме на C++ обращаться к внешнму файлу, если эта самая метапрограмма "работать"-то может только во время компиляции? Что до сообщений об ошибках, тут согласен — подчас их весьма сложно анализировать. Ну и различия в МП мне тоже вполне понятны. Только я не согласен с тем, что результат — так себе. Вполне себе нормальный результат.

ГВ>>Да ну?! Вроде как я обычно доказываю прямо противоположное. Мозг как раз нужен и теоретическая подготовка — тоже. Так что, что-то ты перепутал.

VD>Я перепутал? Ну, не знаю. Я тебя читал.

Просто любопытно: из чего ты сделал вывод, что я считаю, что "мозг не нужен" и "главное — трясти"?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[23]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 28.04.09 13:52
Оценка:1 (1) +1 -2
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Замыкать можно ещё и значения. Значения указателей — в том числе и т.д., и т.п.


Ты бы лучше не говорил о том в чем не разбираемый. А то такой бред несешь, что просто смешно.
Замыкать значения невозможно. Это просто глупость. Значения на то и значения чтобы копироваться. Суть замыканий как раз в том, чтобы иметь доступ к значениям видимым в лексической области видимости. При этом все переменные и поля которые попали в замыкание должны жить не меньше чем область в которой они объявлены и не меньше чем живет замыкание. Любой указатель должен быть верным до момента когда замыкание перестанет существовать.
Это приводит к тому, что образуется граф взаимно-связанных объектов время жизни которых крайне сложно отследить. При наличии GC следить за и не надо. Если GC нет, то требуется или накладывать ограничения, которые сузят область применения ФП и ухудшат удобство пользования им, или вводить какие-то другие механизмы отслеживания времени жизни связанных объектов. Если исключить GC, я знаю только одну такую — подсчет ссылок.

ГВ>Вот это: "Такие как ollv". Если бы ты сказал "некоторые", я бы согласился. А так ты едва ли не прямо сомневаешься в квалификации ollv, что порицается правилами форума.


А я и не сомневаюсь. Он продемонстрировал свою квалификацию самым прямым образом. Прямо и неприкрыто показал, что кроме С++ ничего в жизни толком и не видел.

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


А я полагаю, что такой выбор сам по себе говорит о квалификации, точнее вменяемости, таких разработчиков.

ГВ> Ты скажи, ты сам много сайтов на C++ написал, а потом переписал их на что-то ещё, чтобы уверенно утверждать, что C++ не даёт никаких преимуществ?


Я не идиот чтобы заниматься таким маразмом. На С++ я пописал не мало, так что имею полное моральное право судить о его возможностях и недостатках. Как говорится не надо быть курицей, чтобы иметь права рассуждать о вкусе яичницы.

ГВ>>>MS и IBM (как и все остальные) вольны поступать так, как им заблагорассудится.

VD>>Ага. И выбирают для сайтов Яву и дотнет.

ГВ>И что с того? Выбрали и выбрали. Как это должно сказываться на выборе, который делают совсем другие люди?


Никак, хотя и сказывается на практике. Это просто демонстрирует, что даже компании с слабо ограниченными ресурсами не выбирают С++ для не не тиражных серверных решений.

ГВ>>> И кроме всего прочего, слишком мало критериев для отсечения C++: "в кратчайшие строки получить надежное решение, когда денег на разработку нехватает". Он запросто может оказаться наилучшим выбором с учётом других факторов.

VD>>Ага. Но другим фактором может быть только крайняя нужда в достижении высокой вычислительной производительности путем ручной оптимизации.

ГВ>Отнюдь. Решающим фактором может оказаться всё, что угодно, вплоть до наличия под рукой подходящих библиотек и доступности программистов. А ещё фактором может оказаться, например, необходимость тащить .Net FW.


Изумительная логика. Согласен, что на практике именно ею и руководствуются очень многие, но она в корне порочна. Вот представь себе, что речь идет о разработке новой марки автомобиля. Представь себе, что за разработку его берутся не инженеры специализирующиеся на автомабилях, а скажем ракетчики. Они кончено тоже знакомы с аэродинамикой, механикой, физикой, математикой и т.п. и потенциально могут сравиться с задачей. Мало того. В качестве инструментов они берут не заточенные под автомобили кады и т.п., а то на чем они проектировали вертолеты. Вместо двигателей внутреннего сгорания используют ГТД или вообще реактивный двигатель, вместо железа — алюминий и титан и так во всем. В результате автомобиль конечно у них скорее всего получится, но вместо года они потратят пять лет и вместо экономного и относительно недорого автомобиля у них получится монстр который никому не будет нужен на практике.
Маразматическая ситуация? Да, не несомненно! Но почему же такую же ситуацию в сфере разработки ПО ты считаешь само собой разумеющейся?
Если те кто пишет софт берутся за область где С++ не подходит должным образом, то они обязаны владеть альтернативными технологиями. В противном случае им просто не следует браться за выполнение этой работы.
А у нас получается, что людям в лом изучить другие языки, другие технологии, но они все равно берутся за разработку софта в любой отрасли и виде деятельности.
Слава Богу, что такого маразма все меньше и меньше. Но зачем же его защищать?

ГВ>Э... Не так. C++ допускает опасные операции. Но вовсе не требует. А ответственность везде в цене, это от языка не зависит.


Допускать уже достаточно. Но он не только допускает, но и провоцирует их. А зачастую не предоставляет других путей как небезопасные.
К тому же чтобы создать относительно безопасные решения требуется весьма высокая квалификация и немалые силы на выработку стратегии и контроль ее соблюдения. Заметь я не говорю, что речь идет о инструменте в руках ламеров. Он и весьма квалифицированным программистам надевает гандикап.

VD>>Есть такое умное высказывание (не помню чье) — человек не должен делать работу которую может сделать машина. А С++ заставляет человека делать работу которую можно возложить на машину.


ГВ>Не так. C++ позволяет человеку влезть в то, чем обычно занимается машина.


Нет. Он заставляет заниматься человека тем, что может контролировать машина. Он не предаставляет возможности не думать об упрвлении памятью даже если программист этого очень хочет. Он не предоставляет гарантий типобезопасности. Эти аспекты требуется контролировать вручную!

ГВ>1. Ограничения на выбор допустимых абстракции есть у любого языка программирования. Так уж они, засранцы, устроены.


Действительно современные языки предоставляют выбор и довольно широкого круга вариантов. С++ же застрял в 80-ых. ООП и шаблоны. А далее голимый кривой С.

ГВ>2. Шаблоны широко используются в программировании на C++. Не понятно, ты считаешь это негативной чертой? Или — ограничителем в выборе абстракции?


Они средством затычкой с помощью которой люди пытаются обойти ограничения. Но результат неудовлетворительный. И только те, кто кроме С++ ничего не видел, считают это в порядке вещей.

VD>>Причем очень распростронено мнение, что производительность важнее качества.


ГВ>Нередко производительность является составляющей интегральной характеристики "качественно".


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


VD>>Многие защитники С++ приводят в качестве примера 3D-игры. Мол, "почему их пишут на С++?". А стоило бы посмотреть на другой аспект. Почти все эти игры безбожно глючат. Играть в некоторые до выхода патчей просто невозможно. Большая часть ошибок в этих играх могла бы быть попросту не допущена, будь программа написана на более качественном языке.


ГВ>С чего ты это взял?


Что? Что написаны на С++? Из слов тех кто это приводит к качестве доказательства того, что все подряд надо на С++ писать.

ГВ>Например, известно, что крутоглюкавый Сталкер (который без кучи патчей вылетает в самых неожиданных местах) написан с использованием Lua.


Ты откровенно говоря гонишь. На Луа там написаны только скрипты к сенкам да логика некоторая. А глючащий движок написан на С++. Причем Сталкер то работает еще приемлемо. А вот Кризис вылетал отменно. Особенно если у тебя не дай бок карточка по новее или звуковух по прикольнее. И скрипты там были явно не причем. Там проходы по памяти, потеря ресурсов и т.п.

ГВ>Известна также душещипательная история о скоростной резке Сталкера перед выходом (часть карт порезана, часть выброшена и т.д.) Думается, что вторая причина посущественнее остальных будет.


Внимание, вопрос если бы в Сталкере логика игры писалась бы на С++, а не на скрипте, то код игра стала бы надежнее или наоборот?

ГВ>Не понял. Чьи данные ты проверял?


Лесперов которые кидали ссылки на тесты. Зайди в Декларативное программирование и спроси. Тебе тоже ссылок накидают.

ГВ>О чём не заикаться? Я тебя не понимаю что-то. fold, в общем, до какой-то степени эмулируется accumulate+boost::bind, а у find_if — своё, вполне определённое назначение и она вполне применима к широкому набору типов. Шаблон же, однако.


Уродства получаемого в итоге стыдиться. Сравни.
Вот пример использования find_if:
#include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

bool IsOdd (int i) 
{
  return i % 2 == 1;
}

int main () 
{
  vector<int> myvector;
  vector<int>::iterator it;

  myvector.push_back(10);
  myvector.push_back(25);
  myvector.push_back(40);
  myvector.push_back(55);

  it = find_if (myvector.begin(), myvector.end(), IsOdd);

  cout << "The first odd value is " << *it << endl;

  return 0;
}

А вот тоже самое на более современном языке:
using System;
using System.Console;

module Program
{
  Main() : void
  {
    def myvector = Collections.Generic.List([10, 25, 40, 55]);
    
    def it = myvector.Find(x => x % 2 == 1);
    
    WriteLine($"The first odd value is $it");
  }
}


И это простой случай без замыкания. С замыканием разница начинает расти намного сильнее.

ГВ>Так... Тогда объясни, что ты считаешь "прямыми", а что "побочными" эффектами шаблонов?


Прямой эффект — это параметрически полиморфизм, т.е. то ради чего шаблоны были введены. А вот вычисления во время компиляции основанные на том факте, что раскрытие шаблонов идет итеративно и может быть остановлено человеком описавшим частный случай шаблона — это использование побочного эффекта. Автор языка не предусматривал подобного использования шаблонов.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[4]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: mukhomor 
Дата: 28.04.09 17:50
Здравствуйте, VladD2, Вы писали:

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


E>>Да, так бывает. И не только в ПО. И не только сейчас, но и раньше было.

E>>То, что ты не умеешь искать такие позиции, всего лишь говорит что-то о тебе, а не об окружающем мире...
E>>Можешь подумать над значением слова "подмастерье"...

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

VD>Почему всем будет смешно, если им расскажут о подмастерьи физика, химика или врача. Так почему же подмастерья программистов обсуждаются серьезно?


Очень просто. Профессия программиста стоит особняком. У Макконнела ("Совершенный код") написано что программистами становятся 40% (боюсь тут соврать) не профильных программистов. А физиков сколько непрофильных? Химикив? Вот и ответ. Если речь идет о системных программистах, то да — это серъезно, а в остальном случае важнее может оказаться иная специальность. Мне кажется, что в большинстве случаев важнее математические способности или физические или экономические, так как сам, решая задачи медленно но верно из освоения технологии скатываюсь к книжкам по алгоритмам. Язык программирования и технологии вторичны.
Про подмастерья не согласен. Надо учить и платить. И чем талантливее ученик, тем больше платить. А то, что я слышу, это просто отголоски честолюбия и высокомерия. Вот только должно быть по Фаусту — "Наследовать достоин тот, кто сам способен дать наследство." Я так считаю.
Re[24]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 28.04.09 18:43
Оценка: +2
Здравствуйте, VladD2, Вы писали:

ГВ>>Замыкать можно ещё и значения. Значения указателей — в том числе и т.д., и т.п.

VD>Ты бы лучше не говорил о том в чем не разбираемый. А то такой бред несешь, что просто смешно.
VD>Замыкать значения невозможно. Это просто глупость. Значения на то и значения чтобы копироваться. Суть замыканий как раз в том, чтобы иметь доступ к значениям видимым в лексической области видимости. При этом все переменные и поля которые попали в замыкание должны жить не меньше чем область в которой они объявлены и не меньше чем живет замыкание. Любой указатель должен быть верным до момента когда замыкание перестанет существовать.

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

VD>Это приводит к тому, что образуется граф взаимно-связанных объектов время жизни которых крайне сложно отследить. [...] Если исключить GC, я знаю только одну такую — подсчет ссылок.


Это всё понятно, и никто с этим не спорит. Равно как никто и не пытается объявить C++ "чистым ФЯ".

ГВ>>Вот это: "Такие как ollv". Если бы ты сказал "некоторые", я бы согласился. А так ты едва ли не прямо сомневаешься в квалификации ollv, что порицается правилами форума.

VD>А я и не сомневаюсь. Он продемонстрировал свою квалификацию самым прямым образом. Прямо и неприкрыто показал, что кроме С++ ничего в жизни толком и не видел.

Оснований для такого утверждения нет. Мораль? Тебе это всё показалось.

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

VD>А я полагаю, что такой выбор сам по себе говорит о квалификации, точнее вменяемости, таких разработчиков.

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

ГВ>> Ты скажи, ты сам много сайтов на C++ написал, а потом переписал их на что-то ещё, чтобы уверенно утверждать, что C++ не даёт никаких преимуществ?

VD>Я не идиот чтобы заниматься таким маразмом. На С++ я пописал не мало, так что имею полное моральное право судить о его возможностях и недостатках. Как говорится не надо быть курицей, чтобы иметь права рассуждать о вкусе яичницы.

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

ГВ>>>>MS и IBM (как и все остальные) вольны поступать так, как им заблагорассудится.

VD>>>Ага. И выбирают для сайтов Яву и дотнет.
ГВ>>И что с того? Выбрали и выбрали. Как это должно сказываться на выборе, который делают совсем другие люди?
VD>Никак, хотя и сказывается на практике. Это просто демонстрирует, что даже компании с слабо ограниченными ресурсами не выбирают С++ для не не тиражных серверных решений.

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

ГВ>>Отнюдь. Решающим фактором может оказаться всё, что угодно, вплоть до наличия под рукой подходящих библиотек и доступности программистов. А ещё фактором может оказаться, например, необходимость тащить .Net FW.

VD>Изумительная логика. Согласен, что на практике именно ею и руководствуются очень многие, но она в корне порочна.

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

VD>Вот представь себе, что речь идет о разработке новой марки автомобиля. Представь себе, что за разработку его берутся не инженеры специализирующиеся на автомабилях, а скажем ракетчики. Они кончено тоже знакомы с аэродинамикой, механикой, физикой, математикой и т.п. и потенциально могут сравиться с задачей. Мало того. В качестве инструментов они берут не заточенные под автомобили кады и т.п., а то на чем они проектировали вертолеты. Вместо двигателей внутреннего сгорания используют ГТД или вообще реактивный двигатель, вместо железа — алюминий и титан и так во всем. В результате автомобиль конечно у них скорее всего получится, но вместо года они потратят пять лет и вместо экономного и относительно недорого автомобиля у них получится монстр который никому не будет нужен на практике.

VD>Маразматическая ситуация? Да, не несомненно! Но почему же такую же ситуацию в сфере разработки ПО ты считаешь само собой разумеющейся?

Действительно, ситуация неоднозначная. Из-за вагона логических ошибок в твоём рассуждении. Например, ты не учитываешь, что проектирование автомобиля и проектирование вертолёта выполняется в рамках определённых массогабаритных, прочностных и прочих технических и нетехнических ограничений, накладываемых на конечный продукт. Если вертолётчики спроектируют автомобиль, то так или иначе они будут вынуждены вписаться в ограничения, заданные для автомобиля — хоть с титаном, хоть с алюминием, хоть с пластилином. Какие CAD они будут использовать — дело десятое, хоть на счётах вычислять. Это только программисты могут считать, что конечные характеристики автомобиля решающим образом определяются используемым CAD.

VD>Если те кто пишет софт берутся за область где С++ не подходит должным образом, то они обязаны владеть альтернативными технологиями. В противном случае им просто не следует браться за выполнение этой работы.

VD>А у нас получается, что людям в лом изучить другие языки, другие технологии, но они все равно берутся за разработку софта в любой отрасли и виде деятельности.
VD>Слава Богу, что такого маразма все меньше и меньше. Но зачем же его защищать?

Кто это тут защищал использование C++ там, где он не подходит должным образом? По-моему, тебе померещилось. Разговор идёт о гротескной преувеличенности недостатков C++ и о том, что в некоторых ситуациях он оказывается наилучшим выбором. Ты, почему-то, додумываешь, что это является призывом использовать C++ где ни попадя, вопреки здравому смыслу.

ГВ>>Э... Не так. C++ допускает опасные операции. Но вовсе не требует. А ответственность везде в цене, это от языка не зависит.

VD>Допускать уже достаточно. Но он не только допускает, но и провоцирует их. А зачастую не предоставляет других путей как небезопасные.

Это — проблема и ответственность самих "спровоцировавшихся". Подвержен провокациям — не зямай C++.

VD>К тому же чтобы создать относительно безопасные решения требуется весьма высокая квалификация и немалые силы на выработку стратегии и контроль ее соблюдения. Заметь я не говорю, что речь идет о инструменте в руках ламеров. Он и весьма квалифицированным программистам надевает гандикап.


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

Собственно, поэтому действительно опытному и квалифицированному програмисту ни один язык никакого "гандикапа" на голову не наденет по определению. Просто такой програмист никогда не поставит в своём сознании язык програмирования на такое место, откуда голова будет доступна для надевания хоть горшков, хоть гандикапов.

VD>>>Есть такое умное высказывание (не помню чье) — человек не должен делать работу которую может сделать машина. А С++ заставляет человека делать работу которую можно возложить на машину.

ГВ>>Не так. C++ позволяет человеку влезть в то, чем обычно занимается машина.
VD>Нет. Он заставляет заниматься человека тем, что может контролировать машина. Он не предаставляет возможности не думать об упрвлении памятью даже если программист этого очень хочет. Он не предоставляет гарантий типобезопасности. Эти аспекты требуется контролировать вручную!

Прям, не язык, а монстр. (отсмеяшись) Знаешь, где самые страшные монстры? В воображении!

ГВ>>1. Ограничения на выбор допустимых абстракции есть у любого языка программирования. Так уж они, засранцы, устроены.

VD>Действительно современные языки предоставляют выбор и довольно широкого круга вариантов. С++ же застрял в 80-ых. ООП и шаблоны. А далее голимый кривой С.

ООП, между прочим, несколько более молодая концепция, чем ФП.

ГВ>>2. Шаблоны широко используются в программировании на C++. Не понятно, ты считаешь это негативной чертой? Или — ограничителем в выборе абстракции?

VD>Они средством затычкой с помощью которой люди пытаются обойти ограничения. Но результат неудовлетворительный. И только те, кто кроме С++ ничего не видел, считают это в порядке вещей.

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

VD>>>Причем очень распростронено мнение, что производительность важнее качества.

ГВ>>Нередко производительность является составляющей интегральной характеристики "качественно".
VD>Я бы скорее сказал — не часто. Но дело даже не в этом. Решение проблем производительности только путем работы на низком уровне — это не вреный подход. Выигрыш от выбора более оптимальных алгоритмов куда более существеннен нежели от ковыряния в указателях.

Есть ещё abstraction penalty. AFAIK, Java и .Net на данный момент справляются с ним несколько хуже, чем C++. Возможно, что когда-нибудь ситуация изменится, я это вполне допускаю. Только не надо читать мне лекцию по JIT-компиляции и возможностях этого подхода, я их отлично представляю.

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


Угу: в частности, если в приложении есть много тупых... Далее по тексту.

VD>>>Многие защитники С++ приводят в качестве примера 3D-игры. Мол, "почему их пишут на С++?". А стоило бы посмотреть на другой аспект. Почти все эти игры безбожно глючат. Играть в некоторые до выхода патчей просто невозможно. Большая часть ошибок в этих играх могла бы быть попросту не допущена, будь программа написана на более качественном языке.

ГВ>>С чего ты это взял?
VD>Что? Что написаны на С++? Из слов тех кто это приводит к качестве доказательства того, что все подряд надо на С++ писать.

Нет, вот это: "Большая часть ошибок в этих играх могла бы быть попросту не допущена"? Откуда такая уверенность?

ГВ>>Например, известно, что крутоглюкавый Сталкер (который без кучи патчей вылетает в самых неожиданных местах) написан с использованием Lua.

VD>Ты откровенно говоря гонишь. На Луа там написаны только скрипты к сенкам да логика некоторая.

И что характерно — она глючит похлеще движка. Если прикинуть, то ИМХО, плотность глюков на единицу скриптового кода получается поболе, чем в движке.

ГВ>>Известна также душещипательная история о скоростной резке Сталкера перед выходом (часть карт порезана, часть выброшена и т.д.) Думается, что вторая причина посущественнее остальных будет.

VD>Внимание, вопрос если бы в Сталкере логика игры писалась бы на С++, а не на скрипте, то код игра стала бы надежнее или наоборот?

Я думаю, что на этот вопрос нет ответа. Единственно, что будь игровая логика написана на C++, её было бы не так легко модифицировать моддерам.

ГВ>>О чём не заикаться? Я тебя не понимаю что-то. fold, в общем, до какой-то степени эмулируется accumulate+boost::bind, а у find_if — своё, вполне определённое назначение и она вполне применима к широкому набору типов. Шаблон же, однако.

VD>Уродства получаемого в итоге стыдиться. Сравни.
VD>Вот пример использования find_if:

[skip overquoting]

VD>И это простой случай без замыкания. С замыканием разница начинает расти намного сильнее.


Синтетика не показательная. Например, что касается C++-ного фрагмента, то он может быть и вот таким:

it = find_if (myvector.begin(), myvector.end(), _1 % 2 == 1);


Это с примитивными, в общем-то, бустовыми лямбдами. А то, что find_if не внесён в vector, так это хорошо есть и хорошо весьма.

ГВ>>Так... Тогда объясни, что ты считаешь "прямыми", а что "побочными" эффектами шаблонов?

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

Понятно. Хотя, наличие таких побочных эффектов естественно следует из логики разворачивания шаблонов.

VD>Автор языка не предусматривал подобного использования шаблонов.


Ну и что?

P.S.: В предыдущем постинге я тебя спросил:

Просто любопытно: из чего ты сделал вывод, что я считаю, что "мозг не нужен" и "главное — трясти"?

Вопрос остаётся в силе.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 28.04.09 20:27
Оценка:1 (1) +1
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Кто это тут защищал использование C++ там, где он не подходит должным образом? По-моему, тебе померещилось. Разговор идёт о гротескной преувеличенности недостатков C++ и о том, что в некоторых ситуациях он оказывается наилучшим выбором.

Очень мало таких ситуаций. На практике оказывается что там где подходит С++ на самом деле нужно что-то вроде C_ _ классами. Высокоуровневые абстакции С++ идут лесом, упор делается на вычисления.

ГВ>Ты, почему-то, додумываешь, что это является призывом использовать C++ где ни попадя, вопреки здравому смыслу.

Ну попытка использвания C++ для сайтов или High-load сценариев — вопреки здравому смыслу.
Хотя многие тут уверены в обратном.

ГВ>>>Не так. C++ позволяет человеку влезть в то, чем обычно занимается машина.

VD>>Нет. Он заставляет заниматься человека тем, что может контролировать машина. Он не предаставляет возможности не думать об упрвлении памятью даже если программист этого очень хочет. Он не предоставляет гарантий типобезопасности. Эти аспекты требуется контролировать вручную!
ГВ>Прям, не язык, а монстр. (отсмеяшись) Знаешь, где самые страшные монстры? В воображении!
Сарказм здесь не уместен. C++ действительно заставляет программиста работать на очень низком уровне, даже если ему этого не хочется.
Это огромная проблема для языка.

ГВ>Есть ещё abstraction penalty. AFAIK, Java и .Net на данный момент справляются с ним несколько хуже, чем C++. Возможно, что когда-нибудь ситуация изменится, я это вполне допускаю. Только не надо читать мне лекцию по JIT-компиляции и возможностях этого подхода, я их отлично представляю.

О каком конкретно abstarction penality идет речь?

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

ГВ>Угу: в частности, если в приложении есть много тупых... Далее по тексту.

ГВ>>>Например, известно, что крутоглюкавый Сталкер (который без кучи патчей вылетает в самых неожиданных местах) написан с использованием Lua.

VD>>Ты откровенно говоря гонишь. На Луа там написаны только скрипты к сенкам да логика некоторая.

ГВ>И что характерно — она глючит похлеще движка. Если прикинуть, то ИМХО, плотность глюков на единицу скриптового кода получается поболе, чем в движке.

Только глюк в движке на С++ приведет к AV и падению, а глюк в игрологике может остаться незамеченным совсем.

ГВ>>>Известна также душещипательная история о скоростной резке Сталкера перед выходом (часть карт порезана, часть выброшена и т.д.) Думается, что вторая причина посущественнее остальных будет.

VD>>Внимание, вопрос если бы в Сталкере логика игры писалась бы на С++, а не на скрипте, то код игра стала бы надежнее или наоборот?
ГВ>Я думаю, что на этот вопрос нет ответа. Единственно, что будь игровая логика написана на C++, её было бы не так легко модифицировать моддерам.
На самом деле на С++ она не была бы написана никогда.

ГВ>Синтетика не показательная. Например, что касается C++-ного фрагмента, то он может быть и вот таким:

ГВ>
ГВ>it = find_if (myvector.begin(), myvector.end(), _1 % 2 == 1);
ГВ>

А если выражение лямбды работает не с числами?
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 28.04.09 20:47
Здравствуйте, gandjustas, Вы писали:

ГВ>>Кто это тут защищал использование C++ там, где он не подходит должным образом? По-моему, тебе померещилось. Разговор идёт о гротескной преувеличенности недостатков C++ и о том, что в некоторых ситуациях он оказывается наилучшим выбором.

G>Очень мало таких ситуаций. На практике оказывается что там где подходит С++ на самом деле нужно что-то вроде C_ _ классами. Высокоуровневые абстакции С++ идут лесом, упор делается на вычисления.

http://en.wikipedia.org/wiki/Objective-C — во многих смыслах замечательное решение, а с недавних пор еще и автоматическая сборка муссора появилась (опционально).
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 28.04.09 21:16
Здравствуйте, gandjustas, Вы писали:

ГВ>>Кто это тут защищал использование C++ там, где он не подходит должным образом? По-моему, тебе померещилось. Разговор идёт о гротескной преувеличенности недостатков C++ и о том, что в некоторых ситуациях он оказывается наилучшим выбором.

G>Очень мало таких ситуаций. На практике оказывается что там где подходит С++ на самом деле нужно что-то вроде C_ _ классами. Высокоуровневые абстакции С++ идут лесом, упор делается на вычисления.

По чьей практике так оказывается?

ГВ>>Ты, почему-то, додумываешь, что это является призывом использовать C++ где ни попадя, вопреки здравому смыслу.

G>Ну попытка использвания C++ для сайтов или High-load сценариев — вопреки здравому смыслу.
G>Хотя многие тут уверены в обратном.

Вероятно, нужно обратиться к тем, кто использует C++ для high-load. Тогда всё станет на свои места.

ГВ>>Прям, не язык, а монстр. (отсмеяшись) Знаешь, где самые страшные монстры? В воображении!

G>Сарказм здесь не уместен. C++ действительно заставляет программиста работать на очень низком уровне, даже если ему этого не хочется.
G>Это огромная проблема для языка.

Скажем так, это неотъемлемая черта языка — возможность работы с низким уровнем. Надо это делать или нет — зависит от.

ГВ>>Есть ещё abstraction penalty. AFAIK, Java и .Net на данный момент справляются с ним несколько хуже, чем C++. Возможно, что когда-нибудь ситуация изменится, я это вполне допускаю. Только не надо читать мне лекцию по JIT-компиляции и возможностях этого подхода, я их отлично представляю.

G>О каком конкретно abstarction penality идет речь?

Да он почти всегда к одному сводится: к куче вложенных вызовов "абстрактных слоёв".

ГВ>>И что характерно — она глючит похлеще движка. Если прикинуть, то ИМХО, плотность глюков на единицу скриптового кода получается поболе, чем в движке.

G>Только глюк в движке на С++ приведет к AV и падению, а глюк в игрологике может остаться незамеченным совсем.

Ну да! Ещё как замеченным!

ГВ>>Я думаю, что на этот вопрос нет ответа. Единственно, что будь игровая логика написана на C++, её было бы не так легко модифицировать моддерам.

G>На самом деле на С++ она не была бы написана никогда.

О! Свежая мысль.

ГВ>>Синтетика не показательная. Например, что касается C++-ного фрагмента, то он может быть и вот таким:

ГВ>>
ГВ>>it = find_if (myvector.begin(), myvector.end(), _1 % 2 == 1);
ГВ>>

G>А если выражение лямбды работает не с числами?

Да на здоровье. Можно и ссылки, и указатели запихнуть.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 29.04.09 04:44
Здравствуйте, Геннадий Васильев, Вы писали:

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


ГВ>>>Кто это тут защищал использование C++ там, где он не подходит должным образом? По-моему, тебе померещилось. Разговор идёт о гротескной преувеличенности недостатков C++ и о том, что в некоторых ситуациях он оказывается наилучшим выбором.

G>>Очень мало таких ситуаций. На практике оказывается что там где подходит С++ на самом деле нужно что-то вроде C_ _ классами. Высокоуровневые абстакции С++ идут лесом, упор делается на вычисления.
ГВ>По чьей практике так оказывается?
По практике общения здесь в первую очередь.
Все "защитники" С++, если хоть немного разбираются в managed языках, упор делают а performance в C++.
Причем с++ обеспечивает быстродействие в числомолотильных алгоримтах в первую очередь. Там где требуется активная работа с памятью, сложными структурами данных, С++ без приседаний с аллокаторами сливает.


ГВ>>>Ты, почему-то, додумываешь, что это является призывом использовать C++ где ни попадя, вопреки здравому смыслу.

G>>Ну попытка использвания C++ для сайтов или High-load сценариев — вопреки здравому смыслу.
G>>Хотя многие тут уверены в обратном.
ГВ>Вероятно, нужно обратиться к тем, кто использует C++ для high-load. Тогда всё станет на свои места.

Если кто-то пишет High-load на С++, то это не означает что так надо делать. Кроме того некоторые системы могут бть написаны на С++ по историческим причинам.
Вообще аппеляции к тому что "кто-то так делает" не показывают равильность такого применения.

ГВ>>>Прям, не язык, а монстр. (отсмеяшись) Знаешь, где самые страшные монстры? В воображении!

G>>Сарказм здесь не уместен. C++ действительно заставляет программиста работать на очень низком уровне, даже если ему этого не хочется.
G>>Это огромная проблема для языка.
ГВ>Скажем так, это неотъемлемая черта языка — возможность работы с низким уровнем. Надо это делать или нет — зависит от.
Не надо подменять понятия, в С++ это не возможность, а необходимость.

ГВ>>>Есть ещё abstraction penalty. AFAIK, Java и .Net на данный момент справляются с ним несколько хуже, чем C++. Возможно, что когда-нибудь ситуация изменится, я это вполне допускаю. Только не надо читать мне лекцию по JIT-компиляции и возможностях этого подхода, я их отлично представляю.

G>>О каком конкретно abstarction penality идет речь?
ГВ>Да он почти всегда к одному сводится: к куче вложенных вызовов "абстрактных слоёв".
И что? 2-3 виртуальных вызова вообще незаметны будут ни при каком раскладе.
Давай конкретно, о каком penality идет речь?

вот насчет abstarction gain — оно есть в .NET. Одно из проявлений — динамическая кодогенерация. Я недавно писал runtime-генератор конечных автоматов по описанию. В С++ такое в принципе невозможно.

ГВ>>>Синтетика не показательная. Например, что касается C++-ного фрагмента, то он может быть и вот таким:

ГВ>>>
ГВ>>>it = find_if (myvector.begin(), myvector.end(), _1 % 2 == 1);
ГВ>>>

G>>А если выражение лямбды работает не с числами?
ГВ>Да на здоровье. Можно и ссылки, и указатели запихнуть.
Ну и как быдет выглядет "лямбда" на C++, в которой вызывается метод объекта-параметра и его результат сравнивается к чем-либо?
Re[28]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 29.04.09 06:32
Здравствуйте, gandjustas, Вы писали:

ГВ>>Вероятно, нужно обратиться к тем, кто использует C++ для high-load. Тогда всё станет на свои места.

G>
G>Если кто-то пишет High-load на С++, то это не означает что так надо делать. Кроме того некоторые системы могут бть написаны на С++ по историческим причинам.
G>Вообще аппеляции к тому что "кто-то так делает" не показывают равильность такого применения.

Не только. То, что "кто-то так делает" не показыват ни априорную правильность, ни априорную неправильность такого решения. Всё, что таким образом можно показать, так это в буквальном смысле то, что "кто-то так делает".

G>>>Это огромная проблема для языка.

ГВ>>Скажем так, это неотъемлемая черта языка — возможность работы с низким уровнем. Надо это делать или нет — зависит от.
G>Не надо подменять понятия, в С++ это не возможность, а необходимость.

Э... Тогда поясни, что имеется в виду под низким уровнем? __asm, void*, арифметика указателей или вообще любые упоминания указателей?

ГВ>>>>Есть ещё abstraction penalty. AFAIK, Java и .Net на данный момент справляются с ним несколько хуже, чем C++. Возможно, что когда-нибудь ситуация изменится, я это вполне допускаю. Только не надо читать мне лекцию по JIT-компиляции и возможностях этого подхода, я их отлично представляю.

G>>>О каком конкретно abstarction penality идет речь?
ГВ>>Да он почти всегда к одному сводится: к куче вложенных вызовов "абстрактных слоёв".
G>И что? 2-3 виртуальных вызова вообще незаметны будут ни при каком раскладе.
G>Давай конкретно, о каком penality идет речь?

Ну, во-первых, к 2-3 виртуальным вызовам абстракции редко сводятся, а во-вторых, здесь мне надо поискать отдельно. От ответа не отказываюсь, просто нужно кое-какие детали восстановить.

G>Ну и как быдет выглядет "лямбда" на C++, в которой вызывается метод объекта-параметра и его результат сравнивается к чем-либо?


class Foo {
  public:
    int foo(){...};
};

std::vector<Foo*> vec;

find_if (myvector.begin(), myvector.end(), bind(&T::foo, _1) != 42);


Это опять таки — бустовая примочка.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[29]: опечатка в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 29.04.09 06:34
Оценка: :)
class Foo {
  public:
    int foo(){...};
};

std::vector<Foo*> vec;

find_if (vec.begin(), vec.end(), bind(&T::foo, _1) != 42);
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[29]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 29.04.09 06:54
Здравствуйте, Геннадий Васильев, Вы писали:

Тут снова вопрос производительности поднялся
Автор: void29091988
Дата: 29.04.09
.
Обращение не конкретно к ГВ, а к тем, кто пожелает защитить честь неуправляемого кода, или просто помочь человеку разобраться с тем, что он делает не так.

Кстати, это далеко не первый случай выбора платформы по бенчмарку Дело даже не в бенчмарке, а в том, _какие_ специалисты делают эти бенчмарки и принимают потом решения.
Re[28]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 29.04.09 07:24
Оценка:2 (1) +1 -1 :)
Здравствуйте, gandjustas, Вы писали:

G>Если кто-то пишет High-load на С++, то это не означает что так надо делать. Кроме того некоторые системы могут бть написаны на С++ по историческим причинам.

G>Вообще аппеляции к тому что "кто-то так делает" не показывают равильность такого применения.

Хм, а на что тогда опираться? на победные реляции сан и микрософт? Критерий истины — практика

ГВ>>Да он почти всегда к одному сводится: к куче вложенных вызовов "абстрактных слоёв".

G>И что? 2-3 виртуальных вызова вообще незаметны будут ни при каком раскладе.
G>Давай конкретно, о каком penality идет речь?

Так скажем, не будут заметны в большинстве случаев. Однако, опираясь на практику как критерий истины :), я могу однозначно сказать, что не только виртуальные, но и обычные вызовы влияют на производительность. Проверяется это очень просто — я интенсивно использую инлайны в проектах на C++, так вот время отклика для релизной версии в несколько раз (если не на порядок) лучше чем в отладочной — скажем 40-50 мс и 300-400 мс. Что это значит для пользователя я думаю объяснять не надо. Да что там говорить, достаточно почитать рекомендации по написанию производительного кода на яве или .нет — как можно меньше маленьких функций, объектов, все вычисления выносить в одну большую простыню, тогда может jit что-то и сделает. На C++ так извращаться не надо — в итоге программы получаются эффективными, но асбсолютно не теряют в читаемости. В принципе, это была изначальная цель при создании C++ и она с успехом достигнута.

У C++ конечно есть недостатки и наверное можно придумать язык лучше, но по моему проблема в том, что вместо лучшего навязывается другое. Скажем, лисп — это отличный язык, но он не лучше и не хуже C++, он просто другой. То же самое с C# и явой.
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 29.04.09 07:28
Оценка: +2
Здравствуйте, samius, Вы писали:

S>Тут снова вопрос производительности поднялся
Автор: void29091988
Дата: 29.04.09
.

S>Обращение не конкретно к ГВ, а к тем, кто пожелает защитить честь неуправляемого кода, или просто помочь человеку разобраться с тем, что он делает не так.

Это не сравнение управляемого и неуправляемого кода, а тестирование подсистем ввода-вывода :)
Re[31]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 29.04.09 07:53
Оценка: +1
Здравствуйте, COFF, Вы писали:

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


S>>Тут снова вопрос производительности поднялся
Автор: void29091988
Дата: 29.04.09
.

S>>Обращение не конкретно к ГВ, а к тем, кто пожелает защитить честь неуправляемого кода, или просто помочь человеку разобраться с тем, что он делает не так.

COF>Это не сравнение управляемого и неуправляемого кода, а тестирование подсистем ввода-вывода


Дело не в том как написано и что тестируется и даже не в конкретном экспериментаторе (который думает что разница в контроле типов в рантайме), а в интерпретации результата.
Победил C# — недоумение
Победил С++ — значит C# — тормоз

Притом человеку не важно, что тесты заняли около 3х секунд, если бы и 30 в обоих случаях, он бы не удивился. Ему важно что на такой синтетике (10 тыс. раз по 10 тыс символов) что-то быстрее, притом что он гораздо больше потеряет в эффективности принимая непутевые решения.
Re[32]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 29.04.09 07:57
Оценка:2 (1) :)
Здравствуйте, samius, Вы писали:

S>Дело не в том как написано и что тестируется и даже не в конкретном экспериментаторе (который думает что разница в контроле типов в рантайме), а в интерпретации результата.

S>Победил C# — недоумение
S>Победил С++ — значит C# — тормоз

Не, ну все правильно. Победил C# значит надо разбираться где в C++ коде косяк :)
Re[29]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 29.04.09 08:05
Здравствуйте, COFF, Вы писали:

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


G>>Если кто-то пишет High-load на С++, то это не означает что так надо делать. Кроме того некоторые системы могут бть написаны на С++ по историческим причинам.

G>>Вообще аппеляции к тому что "кто-то так делает" не показывают равильность такого применения.
COF>Хм, а на что тогда опираться? на победные реляции сан и микрософт? Критерий истины — практика
Факторы, влиящие на практическе применение, зачастую очень далеки от технических.


ГВ>>>Да он почти всегда к одному сводится: к куче вложенных вызовов "абстрактных слоёв".

G>>И что? 2-3 виртуальных вызова вообще незаметны будут ни при каком раскладе.
G>>Давай конкретно, о каком penality идет речь?

COF>Так скажем, не будут заметны в большинстве случаев. Однако, опираясь на практику как критерий истины , я могу однозначно сказать, что не только виртуальные, но и обычные вызовы влияют на производительность. Проверяется это очень просто — я интенсивно использую инлайны в проектах на C++, так вот время отклика для релизной версии в несколько раз (если не на порядок) лучше чем в отладочной — скажем 40-50 мс и 300-400 мс. Что это значит для пользователя я думаю объяснять не надо. Да что там говорить, достаточно почитать рекомендации по написанию производительного кода на яве или .нет — как можно меньше маленьких функций, объектов, все вычисления выносить в одну большую простыню, тогда может jit что-то и сделает. На C++ так извращаться не надо — в итоге программы получаются эффективными, но асбсолютно не теряют в читаемости. В принципе, это была изначальная цель при создании C++ и она с успехом достигнута.

Думаешь разница в скорости между release и debug достигается инлайнингом?
Кстати JIT сам умеет инлайнить, прчием начиная с 3.5SP1 весьма неплохо.

COF>У C++ конечно есть недостатки и наверное можно придумать язык лучше, но по моему проблема в том, что вместо лучшего навязывается другое. Скажем, лисп — это отличный язык, но он не лучше и не хуже C++, он просто другой. То же самое с C# и явой.

Lisp — не mainstream, изначально по причине медленности, впоследствии из-за своего синтаксиса.
Re[29]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 29.04.09 08:12
Здравствуйте, Геннадий Васильев, Вы писали:

G>>>>Это огромная проблема для языка.

ГВ>>>Скажем так, это неотъемлемая черта языка — возможность работы с низким уровнем. Надо это делать или нет — зависит от.
G>>Не надо подменять понятия, в С++ это не возможность, а необходимость.
ГВ>Э... Тогда поясни, что имеется в виду под низким уровнем? __asm, void*, арифметика указателей или вообще любые упоминания указателей?
1)Ручное управление памятью, надо следить чтобы указатель нигде не повис. Использовать умные указатели или следить чтобы везде вызывался delete
2)Арифметика указателей, надо следить чтобы использовались STL-ные итераторы вместо указателей
3)Даже с бустом сложные лямбды надо формировать кучей методов bind.
4)Небезопасные приведения типов
продолжать можно долго...
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 29.04.09 09:03
Здравствуйте, gandjustas, Вы писали:

G>Думаешь разница в скорости между release и debug достигается инлайнингом?

G>Кстати JIT сам умеет инлайнить, прчием начиная с 3.5SP1 весьма неплохо.

В определенных местах практически только им
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 29.04.09 10:46
Здравствуйте, gandjustas, Вы писали:

G>Я писал такой тест в этой теме, смотри выше, C++ слил в 3-6 раз. Это без шаред птр

G>А потом прибежали другие и начали рассказывать что они динамическую память не выделяют и создают все на стеке
Ты мерял там на самом деле разницу в производительности GC и WinAPI функции HeapAlloc.
А никак не работу с shared ptr.

G>Ответь на вопрос, нафига MAPI в .NET?

Вот хочется ему. Представь что он заказчик и ему надо именно MAPI.

G>Возьми DLL, скомпилированную Intel C++ Compiler и напиши в visual studio код, который создает объект из этой либы — придет понимание.

ICC манглит имена так же как и визжалка. Так что никаких проблем не ожидается.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[20]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 29.04.09 10:46
Оценка: :)
Здравствуйте, criosray, Вы писали:

C>и это заметно. Чистота вообще не шибко кого заботит в мире С++ и появляются на свет уродливые творения, где над каждой строкой кода надо раздумывать так же долго, как при чтении Ницше...

Лишь только NDA останавливает меня от постинга особо смачных кусков проекта на C# писанного индусами с гринкартой.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 29.04.09 11:01
Здравствуйте, samius, Вы писали:

S>Тут снова вопрос производительности поднялся
Автор: void29091988
Дата: 29.04.09
.

S>Обращение не конкретно к ГВ, а к тем, кто пожелает защитить честь неуправляемого кода, или просто помочь человеку разобраться с тем, что он делает не так.

Да что там защищать-то? Там одна fprintf чего стоит — она сама по себе тормоз ещё тот.

S>Кстати, это далеко не первый случай выбора платформы по бенчмарку Дело даже не в бенчмарке, а в том, _какие_ специалисты делают эти бенчмарки и принимают потом решения.


[шутка on]
Да-да! Вот у _таких_ специалистов-то .Net и оказывается шустрее всего вокруг.
[шутка off]
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 29.04.09 11:07
Здравствуйте, gandjustas, Вы писали:

ГВ>>Э... Тогда поясни, что имеется в виду под низким уровнем? __asm, void*, арифметика указателей или вообще любые упоминания указателей?

G>1)Ручное управление памятью, надо следить чтобы указатель нигде не повис. Использовать умные указатели или следить чтобы везде вызывался delete
G>2)Арифметика указателей, надо следить чтобы использовались STL-ные итераторы вместо указателей
G>3)Даже с бустом сложные лямбды надо формировать кучей методов bind.
G>4)Небезопасные приведения типов
G>продолжать можно долго...

Понятно. Справедливости ради:
— арифметикой указателей можно и не пользоваться;
— bind — это уже не низкий уровень;
— правильные приведения типов (не через static_cast<void*>) никаких нежданных побочных эффектов не имеют.

P.S.: Не хочешь высказаться по IoC
Автор: Геннадий Васильев
Дата: 26.04.09
?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[31]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 29.04.09 14:20
Оценка: +1
Здравствуйте, Геннадий Васильев, Вы писали:

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


ГВ>>>Э... Тогда поясни, что имеется в виду под низким уровнем? __asm, void*, арифметика указателей или вообще любые упоминания указателей?

G>>1)Ручное управление памятью, надо следить чтобы указатель нигде не повис. Использовать умные указатели или следить чтобы везде вызывался delete
G>>2)Арифметика указателей, надо следить чтобы использовались STL-ные итераторы вместо указателей
G>>3)Даже с бустом сложные лямбды надо формировать кучей методов bind.
G>>4)Небезопасные приведения типов
G>>продолжать можно долго...

ГВ>Понятно. Справедливости ради:

Ты опыть не понял о чем тебе толкуют.

ГВ>- арифметикой указателей можно и не пользоваться;

Можно и С++ не пользоваться.
А если пользоваться С++, то постоянно следить чтобы нигде не накосячить, чтобы не использовать арифметику указателей вмето итераторов, чтобы не использовать обычны указатели вместо умных итп.
В нормальных языках за этим следит компилятор и рантайм. В C# для работы с указателями программист должен описать это явно. А вызывающий код может отказаться вызывать, то что небезопасно.

ГВ>- bind — это уже не низкий уровень;

Очень низкий. Связыванием должен заниматься компилятор, а не программист. Для простых типов и арифметических операция в C++ этого удалось добиться, а для всех остальных — нет.

ГВ>- правильные приведения типов (не через static_cast<void*>) никаких нежданных побочных эффектов не имеют.

Введение дополниельных конструкций для "правильного приведения типов" уж точно не свидетельствует о высокоуровневости языка.
В остальном аналогично указателям.


ГВ>P.S.: Не хочешь высказаться по IoC
Автор: Геннадий Васильев
Дата: 26.04.09
?

Хочу. Код также свидетельствует о черезмерной низкоуровневости С++. Метаинформацией о типах дожен заниматься рантайм, а не программист.
Все остальное — действительно задача, которая решается неочень опытным программистом в короткое время.
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 29.04.09 14:36
Оценка: :)
Здравствуйте, CreatorCray, Вы писали:

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


G>>Я писал такой тест в этой теме, смотри выше, C++ слил в 3-6 раз. Это без шаред птр

G>>А потом прибежали другие и начали рассказывать что они динамическую память не выделяют и создают все на стеке
CC>Ты мерял там на самом деле разницу в производительности GC и WinAPI функции HeapAlloc.
CC>А никак не работу с shared ptr.
Ну а shared_ptr вносит дополнительный оверхед.

G>>Ответь на вопрос, нафига MAPI в .NET?

CC>Вот хочется ему. Представь что он заказчик и ему надо именно MAPI.
Если заказчик диктует технические решения, то я с таким не связываюсь. И другим не рекомендую.

G>>Возьми DLL, скомпилированную Intel C++ Compiler и напиши в visual studio код, который создает объект из этой либы — придет понимание.

CC>ICC манглит имена так же как и визжалка. Так что никаких проблем не ожидается.
И что, можно прямо так просто взять и создать объект, реализация которого лежит в другой DLL?
Re[32]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 29.04.09 14:47
Здравствуйте, gandjustas, Вы писали:

ГВ>>Понятно. Справедливости ради:

G>Ты опыть не понял о чем тебе толкуют.

Понял, только не согласен с оценкой перечисленных фич, как низкоуровневых.

ГВ>>- арифметикой указателей можно и не пользоваться;

G>Можно и С++ не пользоваться.
G>А если пользоваться С++, то постоянно следить чтобы нигде не накосячить, чтобы не использовать арифметику указателей вмето итераторов, чтобы не использовать обычны указатели вместо умных итп.
G>В нормальных языках за этим следит компилятор и рантайм. В C# для работы с указателями программист должен описать это явно. А вызывающий код может отказаться вызывать, то что небезопасно.

Мне кажется, ты дуешь на воду. Проблема выбора, конечно, существует, но я не склонен считать её чем-то слишком трудным. Но, в любом случае, твоё мнение мне теперь понятно.

ГВ>>- bind — это уже не низкий уровень;

G>Очень низкий. Связыванием должен заниматься компилятор, а не программист. Для простых типов и арифметических операция в C++ этого удалось добиться, а для всех остальных — нет.

Ну вот уже ты, по-моему, путаешься. Описанием связывания в любом случае занимается программист. И потом, bind — это, в общем-то, не полноценные лямбды, как ни крути. Показательно то, что на C++ их можно реализовать.

ГВ>>- правильные приведения типов (не через static_cast<void*>) никаких нежданных побочных эффектов не имеют.

G>Введение дополниельных конструкций для "правильного приведения типов" уж точно не свидетельствует о высокоуровневости языка.
G>В остальном аналогично указателям.

Как раз строго наоборот. xxxxx_cast потому и сделаны такими, чтобы указать на неправильность подобных приведений. Естетсвенные приведения (от наследника к родителю) выполняются прозрачно, без дополнительных инструкций.

ГВ>>P.S.: Не хочешь высказаться по IoC
Автор: Геннадий Васильев
Дата: 26.04.09
?

G>Хочу. Код также свидетельствует о черезмерной низкоуровневости С++. Метаинформацией о типах дожен заниматься рантайм, а не программист.

А где ты там метаинформацию нашёл?

G>Все остальное — действительно задача, которая решается неочень опытным программистом в короткое время.


+1
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[28]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 29.04.09 14:48
Здравствуйте, gandjustas, Вы писали:

G>>>Ответь на вопрос, нафига MAPI в .NET?

CC>>Вот хочется ему. Представь что он заказчик и ему надо именно MAPI.
G>Если заказчик диктует технические решения, то я с таким не связываюсь. И другим не рекомендую.

Заказчик сам может быть вынужден диктовать технические решения.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[32]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 29.04.09 14:53
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, Геннадий Васильев, Вы писали:


ГВ>>- арифметикой указателей можно и не пользоваться;

G>Можно и С++ не пользоваться.
G>А если пользоваться С++, то постоянно следить чтобы нигде не накосячить, чтобы не использовать арифметику указателей вмето итераторов, чтобы не использовать обычны указатели вместо умных итп.
G>В нормальных языках за этим следит компилятор и рантайм. В C# для работы с указателями программист должен описать это явно. А вызывающий код может отказаться вызывать, то что небезопасно.

В пору, когда я писал на C++ мне были абсолютны чужды и непонятны лозунги о безопасности управляемого кода. У меня в руках был мощный инструмент, использовать который я знал как (к сожалению, в прошедшем времени). Тогда казалось: неумеешь писать надежный код на небезопасном языке — не берись, а умеешь — так если что, все под рукой.

Теперь я немного другого мнения о безопасности кода: Это как ABS! Если умеешь эффективно пользоваться тормозами и регулярно оттачиваешь свои навыки — ABS не нужен. Если ездишь из точки A в точку B без жажды адреналина, или за руль эпизодически садится жена — лучше бы ABS иметь чем не иметь. Пристегиваешь ремень безопасности, потому как не уверен за джигитов, которые носятся вокруг.
И убеждать водителей, не привыкших к ABS, что они без ABS не смогут ездить, дохлый помер...

Так и с unsafe кодом. Боишься не за себя, а за соседа, у которого нет нужных навыков. А раз компилятор ограничивает от потенциально опасных действий всех одинаково, можно внимание, необходимое для контроля за этим, направить в другое русло.
Re[33]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 29.04.09 16:22
Оценка:2 (1) +1 -2 :))) :)
Здравствуйте, COFF, Вы писали:

S>>Дело не в том как написано и что тестируется и даже не в конкретном экспериментаторе (который думает что разница в контроле типов в рантайме), а в интерпретации результата.

S>>Победил C# — недоумение
S>>Победил С++ — значит C# — тормоз

COF>Не, ну все правильно. Победил C# значит надо разбираться где в C++ коде косяк



Совершенно верно. И пока программисты С++ ищут очередной косяк, программисты С# сдали проект в продакшн и занялись другим, получив свою денюжку.
Re[29]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 29.04.09 16:27
Оценка: +1
Здравствуйте, COFF, Вы писали:

ГВ>>>Да он почти всегда к одному сводится: к куче вложенных вызовов "абстрактных слоёв".

G>>И что? 2-3 виртуальных вызова вообще незаметны будут ни при каком раскладе.
G>>Давай конкретно, о каком penality идет речь?

COF>Так скажем, не будут заметны в большинстве случаев. Однако, опираясь на практику как критерий истины , я могу однозначно сказать, что не только виртуальные, но и обычные вызовы влияют на производительность. Проверяется это очень просто — я интенсивно использую инлайны в проектах на C++, так вот время отклика для релизной версии в несколько раз (если не на порядок) лучше чем в отладочной — скажем 40-50 мс и 300-400 мс. Что это значит для пользователя я думаю объяснять не надо. Да что там говорить, достаточно почитать рекомендации по написанию производительного кода на яве или .нет — как можно меньше маленьких функций, объектов, все вычисления выносить в одну большую простыню, тогда может jit что-то и сделает. На C++ так извращаться не надо — в итоге программы получаются эффективными, но асбсолютно не теряют в читаемости.

Сложно потерять то, чего изначально не было.

COF>В принципе, это была изначальная цель при создании C++ и она с успехом достигнута.

Достигнута.

COF>У C++ конечно есть недостатки и наверное можно придумать язык лучше, но по моему проблема в том, что вместо лучшего навязывается другое. Скажем, лисп — это отличный язык, но он не лучше и не хуже C++, он просто другой. То же самое с C# и явой.


Ну давайте разовьем мысль:
С++ не лучше Паскаля — он просто другой
С++ не лучше Бейсика — он просто другой
...
Вы хоть понимаете, что это демагогия и софистика? Да С++ не лучше лиспа, а хуже. С++ не лучше С#, а хуже. С++ не лучше явы, а хуже. Если Вы скажете что это тоже демагогия, то будете правы потому, что любое сравнение не имеет смысла, если проводится в отрыве от контекста реальных задач программиста, и если не указаны критерии сравнения.
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 29.04.09 16:28
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>>Кто это тут защищал использование C++ там, где он не подходит должным образом? По-моему, тебе померещилось. Разговор идёт о гротескной преувеличенности недостатков C++ и о том, что в некоторых ситуациях он оказывается наилучшим выбором.

G>>Очень мало таких ситуаций. На практике оказывается что там где подходит С++ на самом деле нужно что-то вроде C_ _ классами. Высокоуровневые абстакции С++ идут лесом, упор делается на вычисления.

ГВ>По чьей практике так оказывается?


К примеру, по моей.
Re[29]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 29.04.09 16:29
Оценка: +4 :)
Здравствуйте, COFF, Вы писали:

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

А можно ссылку на эту рекомендацию писать как можно меньше маленьких функций?
А то страшно стало! Быстрее всё всё всё в main переношу...
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 29.04.09 16:31
Здравствуйте, MxKazan, Вы писали:

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

MK>А можно ссылку на эту рекомендацию писать как можно меньше маленьких функций?
+1 Сколько лет на дотнет пишу, а впервый раз слышу такое.
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 29.04.09 16:52
Оценка:2 (1) :))
Здравствуйте, MxKazan, Вы писали:

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


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

MK>А можно ссылку на эту рекомендацию писать как можно меньше маленьких функций?
MK>А то страшно стало! Быстрее всё всё всё в main переношу...
Продолжу: вместо свойств публичные поля, использовать только структуры (на классы и GC — табу), которые выделять только на стеке, или в крайнем случае распределенные с помощью самописного аллокатора (массив структур тоже не пойдет, т.к. проверяет диапазон индекса). Все методы только статические, в них структуры передавать через ref параметр, дабы избежать копирований на стеке, ну и на всякий случай все под /unsafe компилить.
Чуть не забыл выкинуть все циклы foreach, а все остальные переписать в манере
for (i/*глобальная переменная*/ = items.Count -1; i >= 0; --i /*непременно префиксная форма*/)

Если кто так не сделает, то его код будет работать медленнее, чем C++ и ему никак не догнать плюсы по перфомансу, что означает конец карьеры программиста
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 29.04.09 17:27
Оценка: -1 :))
Здравствуйте, MxKazan, Вы писали:

MK>А можно ссылку на эту рекомендацию писать как можно меньше маленьких функций?

MK>А то страшно стало! Быстрее всё всё всё в main переношу... :user:

Пожалуйста, не поленился и специально нашел такой пример

http://www.cnblogs.com/jerryzhao/archive/2007/08/29/873986.html

One of the ways in which you can improve the performance of loading a form is by reducing the number of method calls made during form initialization.
Re[31]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 29.04.09 17:30
Оценка: -2
Здравствуйте, samius, Вы писали:

S>Если кто так не сделает, то его код будет работать медленнее, чем C++ и ему никак не догнать плюсы по перфомансу, что означает конец карьеры программиста :(


На самом деле, это все (и еще много чего другого) я делаю когда пишу на C++, если надо написать действительно быстрый код. То что Вас это забавляет показывает только то, что с задачами, критичными по скорости Вам сталкиваться не приходилось. Увы...
Re[31]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 29.04.09 17:37
Здравствуйте, COFF, Вы писали:

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


MK>>А можно ссылку на эту рекомендацию писать как можно меньше маленьких функций?

MK>>А то страшно стало! Быстрее всё всё всё в main переношу...

COF>Пожалуйста, не поленился и специально нашел такой пример


COF>http://www.cnblogs.com/jerryzhao/archive/2007/08/29/873986.html


COF>One of the ways in which you can improve the performance of loading a form is by reducing the number of method calls made during form initialization.


Оттуда же

This application was built using the Release profile and deployed to the Pocket PC 2002 emulator, where it was run 5 times.

Под покетом походу надо и на длине названий методов экономить
Re[31]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 29.04.09 17:42
Здравствуйте, COFF, Вы писали:

MK>>А можно ссылку на эту рекомендацию писать как можно меньше маленьких функций?

MK>>А то страшно стало! Быстрее всё всё всё в main переношу...

COF>Пожалуйста, не поленился и специально нашел такой пример


COF>http://www.cnblogs.com/jerryzhao/archive/2007/08/29/873986.html


COF>One of the ways in which you can improve the performance of loading a form is by reducing the number of method calls made during form initialization.


Раз: Improving Microsoft .NET Compact Framework-based Application Form Load Performance
Два: March 2002
Три: Microsoft® .NET Compact Framework 1.0


Акелла промахнулся.
Re[32]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 29.04.09 17:45
Оценка: +1
Здравствуйте, COFF, Вы писали:


S>>Если кто так не сделает, то его код будет работать медленнее, чем C++ и ему никак не догнать плюсы по перфомансу, что означает конец карьеры программиста


COF>На самом деле, это все (и еще много чего другого) я делаю когда пишу на C++, если надо написать действительно быстрый код. То что Вас это забавляет показывает только то, что с задачами, критичными по скорости Вам сталкиваться не приходилось. Увы...


Быстрый код получается не тогда, когда Вы тратите 90% времени на техническую оптимизацию кода и 10% на алгоритмизацию, а 90% на алгоритмизацию, 10% на техническую оптимизацию.
Re[32]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 29.04.09 17:49
Здравствуйте, COFF, Вы писали:

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


S>>Если кто так не сделает, то его код будет работать медленнее, чем C++ и ему никак не догнать плюсы по перфомансу, что означает конец карьеры программиста


COF>На самом деле, это все (и еще много чего другого) я делаю когда пишу на C++, если надо написать действительно быстрый код. То что Вас это забавляет показывает только то, что с задачами, критичными по скорости Вам сталкиваться не приходилось. Увы...

Возможно не в той степени, что Вам...
Предпочитаю другие методы оптимизации. В тех задачах, с которыми я сталкивался их хватало. До экономии на минимизации кол-ва методов не доходило. (Заменять вызовы через интерфейс в дотнете на другие вызовы — приходилось)
Re[32]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 29.04.09 17:52
Здравствуйте, criosray, Вы писали:

C>Раз: Improving Microsoft .NET Compact Framework-based Application Form Load Performance

C>Два: March 2002
C>Три: Microsoft® .NET Compact Framework 1.0

C>Акелла промахнулся. :down:


Ну да, а что, что-то принципиально поменялось? Я именно тогда эту статью и читал. Более того, и сейчас используется огромное количество устройств с .NET Compact Framework 1.0.
Re[31]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 29.04.09 17:53
Здравствуйте, COFF, Вы писали:

COF>Пожалуйста, не поленился и специально нашел такой пример

COF>http://www.cnblogs.com/jerryzhao/archive/2007/08/29/873986.html
COF>One of the ways in which you can improve the performance of loading a form is by reducing the number of method calls made during form initialization.
Не, ты правда относишь эти рекомендации в разряд общих, относящихся ко всему Фреймворку в его текущей реализации, ммм?
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[33]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 29.04.09 17:54
Здравствуйте, criosray, Вы писали:

C>Быстрый код получается не тогда, когда Вы тратите 90% времени на техническую оптимизацию кода и 10% на алгоритмизацию, а 90% на алгоритмизацию, 10% на техническую оптимизацию.


Конечно я в курсе, что любую программу можно ускорить если заменить сортировку пузырьком на что-то более продвинутое :)
Re[33]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 29.04.09 17:56
Здравствуйте, COFF, Вы писали:

C>>Раз: Improving Microsoft .NET Compact Framework-based Application Form Load Performance

C>>Два: March 2002
C>>Три: Microsoft® .NET Compact Framework 1.0

C>>Акелла промахнулся.


COF>Ну да, а что, что-то принципиально поменялось? Я именно тогда эту статью и читал. Более того, и сейчас используется огромное количество устройств с .NET Compact Framework 1.0.


Ну во-первых, очень многое поменялось и сейчас 99% WM устройств с .NET CF 3.5
Во-вторых, Вы не видитте разницы между CLR для мобильных телефонов и CLR для полноценных компьютеров?
Re[34]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 29.04.09 17:58
Здравствуйте, COFF, Вы писали:


C>>Быстрый код получается не тогда, когда Вы тратите 90% времени на техническую оптимизацию кода и 10% на алгоритмизацию, а 90% на алгоритмизацию, 10% на техническую оптимизацию.


COF>Конечно я в курсе, что любую программу можно ускорить если заменить сортировку пузырьком на что-то более продвинутое


Очень рад, что Вы знаете сортировку пузырьком. Надеюсь, Вы так же знаете, что это самое ускорение от замены сортировки пузырьком на "что-то более продвинутое" далеко не всегда рационально?
Re[34]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 29.04.09 18:02
Оценка: :)
Здравствуйте, criosray, Вы писали:

C>Ну во-первых, очень многое поменялось и сейчас 99% WM устройств с .NET CF 3.5

C>Во-вторых, Вы не видитте разницы между CLR для мобильных телефонов и CLR для полноценных компьютеров?

Нет, не вижу разницы. Серьезно
Re[34]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 29.04.09 18:02
Оценка: +3
Здравствуйте, criosray, Вы писали:

C>Ну во-первых, очень многое поменялось и сейчас 99% WM устройств с .NET CF 3.5

C>Во-вторых, Вы не видитте разницы между CLR для мобильных телефонов и CLR для полноценных компьютеров?
Да дело даже не в этом. COFF приводит пример частной задачи, которая к самому .Net мало имеет отношения.
Так что написано:

For example, the code generated by the Forms Designer for setting the location and size of a control uses two method calls for setting these properties, like this

Т.е. это проблема Forms Designer, а никак не .Net.
И если бы дизайнер генерил не очень удачный C++ код, к нему можно было бы предъявить точно такие же претензии.
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 29.04.09 18:06
Здравствуйте, COFF, Вы писали:

C>>Ну во-первых, очень многое поменялось и сейчас 99% WM устройств с .NET CF 3.5

C>>Во-вторых, Вы не видитте разницы между CLR для мобильных телефонов и CLR для полноценных компьютеров?

COF>Нет, не вижу разницы. Серьезно


Зачем же так откровенно выставлять на показ свое невежество?..
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 29.04.09 18:07
Здравствуйте, MxKazan, Вы писали:

MK>Т.е. это проблема Forms Designer, а никак не .Net.

MK>И если бы дизайнер генерил не очень удачный C++ код, к нему можно было бы предъявить точно такие же претензии.

Хорошо, вот более релевантная ссылка — просто не имею привычки (к сожалению) локально сохранять все статьи, которые я прочитал, чтобы при случае была возможность блеснуть на rsdn :) Поэтому пришлось погуглить немного

http://xman892.blogspot.com/2005/11/compact-framework-performance-hints.html
Re[36]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 29.04.09 18:09
Здравствуйте, criosray, Вы писали:

C>Зачем же так откровенно выставлять на показ свое невежество?.. :xz:


То есть таки под мобильные устройства надо писать на C++, не используя CF, я так понимаю этот вот пассаж про невежество?
Re[37]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 29.04.09 18:11
Здравствуйте, COFF, Вы писали:

C>>Зачем же так откровенно выставлять на показ свое невежество?..


COF>То есть таки под мобильные устройства надо писать на C++, не используя CF, я так понимаю этот вот пассаж про невежество?


Нет, не правильно.
Re[32]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 29.04.09 18:19
Здравствуйте, MxKazan, Вы писали:

COF>>Пожалуйста, не поленился и специально нашел такой пример

COF>>http://www.cnblogs.com/jerryzhao/archive/2007/08/29/873986.html
COF>>One of the ways in which you can improve the performance of loading a form is by reducing the number of method calls made during form initialization.
MK>Не, ты правда относишь эти рекомендации в разряд общих, относящихся ко всему Фреймворку в его текущей реализации, ммм?

Справедливости ради, часть этих рекомендаций действительно общего характера. К примеру, про avoid boxing/unboxing совершенно верно написано (впрочем, заметное падение производительности будет лишь на многократно повторяющихся операциях в короткий промежуток времени...).

Но вот про "избегайте использовать много мелких объектов и мелких методов" — полный бред.
Re[36]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 29.04.09 18:28
Оценка: +1
Здравствуйте, COFF, Вы писали:

COF>Хорошо, вот более релевантная ссылка — просто не имею привычки (к сожалению) локально сохранять все статьи, которые я прочитал, чтобы при случае была возможность блеснуть на rsdn Поэтому пришлось погуглить немного

COF>http://xman892.blogspot.com/2005/11/compact-framework-performance-hints.html
И где там про то, что всё нужно пихать в один большой метод? Наоборот вот на инлайнинг указывают...
Я так и не понял, причем здесь рекомендации по Компакт FW и обычный PC'шный FW?
А так списочек вполне стандартный, но он лишь указывает на возможные узкие места.
Кстати, в С++ нет виртуальных методов? А, просматривая, например, исходники Гугл Хрома, не смущает что и там есть всякие set/get а-ля свойства?
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[33]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 29.04.09 18:55
Здравствуйте, Геннадий Васильев, Вы писали:


ГВ>>>- bind — это уже не низкий уровень;

G>>Очень низкий. Связыванием должен заниматься компилятор, а не программист. Для простых типов и арифметических операция в C++ этого удалось добиться, а для всех остальных — нет.
ГВ>Ну вот уже ты, по-моему, путаешься. Описанием связывания в любом случае занимается программист.
Да ну. Вот я пишу лямбду на C#: x => x.SomeMethod() == someValue, при этом someValue создает полноценное лексическое замыкание, которое в С++ невозможно вообще. Где здесь связывание?

ГВ>И потом, bind — это, в общем-то, не полноценные лямбды, как ни крути. Показательно то, что на C++ их можно реализовать.

Показательно то что их нет в современном языке.


ГВ>>>P.S.: Не хочешь высказаться по IoC
Автор: Геннадий Васильев
Дата: 26.04.09
?

G>>Хочу. Код также свидетельствует о черезмерной низкоуровневости С++. Метаинформацией о типах дожен заниматься рантайм, а не программист.
ГВ>А где ты там метаинформацию нашёл?
TypeName, TrivialClassTraitDep1, TrivialClassTraitDep2, методы контейнера RegisterDep1, RegisterDep2, RegisterDep. В той или иной мере реализуют метаинформацию.
Re[34]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 29.04.09 22:40
Здравствуйте, gandjustas, Вы писали:

ГВ>>>>- bind — это уже не низкий уровень;

G>>>Очень низкий. Связыванием должен заниматься компилятор, а не программист. Для простых типов и арифметических операция в C++ этого удалось добиться, а для всех остальных — нет.
ГВ>>Ну вот уже ты, по-моему, путаешься. Описанием связывания в любом случае занимается программист.
G>Да ну. Вот я пишу лямбду на C#: x => x.SomeMethod() == someValue, при этом someValue создает полноценное лексическое замыкание, которое в С++ невозможно вообще. Где здесь связывание?

А упоминание someValue вот здесь: x => x.SomeMethod() == someValue — это что, как не описание того, что нужно связать, сиречь, описание связывания?

Ровно то же самое делается на C++: bind(&X::SomeMethod, _1) == someValue. И тоже, знаешь ли, полноценное лексическое замыкание. В конце концов, главное при создании замыкания что? ИМХО — связать переменные локального контекста с параметрами (или переменными) некоторой функции. Совершенно не важно, используем мы ссылки или значения. По-моему, не стоит впадать в крайности и считать "полноценным" замыканием только такое, которое использует ссылки в стиле C#.

Но и в том, и в другом случае программист описывает, что именно связыватся.

ГВ>>И потом, bind — это, в общем-то, не полноценные лямбды, как ни крути. Показательно то, что на C++ их можно реализовать.

G> Показательно то что их нет в современном языке.

Как это — нет? А новый стандарт? А новый компилятор от MS (который, правда, я ещё не щупал)? Всё есть, вроде. И опять таки, bind — пусть и не полноценная замена, но по крайней мере, для "маленьких функций" — вполне подходящее решение. Примечательно же оно тем, что получено средствами самого C++.

ГВ>>>>P.S.: Не хочешь высказаться по IoC
Автор: Геннадий Васильев
Дата: 26.04.09
?

G>>>Хочу. Код также свидетельствует о черезмерной низкоуровневости С++. Метаинформацией о типах дожен заниматься рантайм, а не программист.
ГВ>>А где ты там метаинформацию нашёл?
G>TypeName, TrivialClassTraitDep1, TrivialClassTraitDep2, методы контейнера RegisterDep1, RegisterDep2, RegisterDep. В той или иной мере реализуют метаинформацию.

Хм. Я бы так не сказал, поскольку Traits используются для конструирования типа (для инстанцирования RegisterDep). Ну а сами RegisterDep просто зависят от типа используемого конструктора (учтём, что сигнатура = тип функции), точно так же, как и любая функция требует параметров вполне определённых типов. Но мы же не называем требование соблюдать типы параметров функции использованием метаданных. А не то, знаешь, можно любое наследование метаданными назвать.

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

Исключение, пожалуй, TypeName — эта структура, действительно, похожа на метаданные — то есть такие данные, которые сопоставляются типу, но прямо в него не включены. Но от TypeName можно избавиться посредством type_info — тогда метаданными будет заниматься только рантайм. Мне просто хотелось оставить возможность назначать объектам идентификаторы разных типов: GUID, int, const wchar_t * и так далее.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 30.04.09 01:48
Здравствуйте, Геннадий Васильев, Вы писали:

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


ГВ>>>>>- bind — это уже не низкий уровень;

G>>>>Очень низкий. Связыванием должен заниматься компилятор, а не программист. Для простых типов и арифметических операция в C++ этого удалось добиться, а для всех остальных — нет.
ГВ>>>Ну вот уже ты, по-моему, путаешься. Описанием связывания в любом случае занимается программист.
G>>Да ну. Вот я пишу лямбду на C#: x => x.SomeMethod() == someValue, при этом someValue создает полноценное лексическое замыкание, которое в С++ невозможно вообще. Где здесь связывание?

ГВ>А упоминание someValue вот здесь: x => x.SomeMethod() == someValue — это что, как не описание того, что нужно связать, сиречь, описание связывания?

Только описание неявное, программисту не надо об этом заботиться, оно все само работает. Вариантов ошибиться нету.

ГВ>Ровно то же самое делается на C++: bind(&X::SomeMethod, _1) == someValue. И тоже, знаешь ли, полноценное лексическое замыкание. В конце концов, главное при создании замыкания что? ИМХО — связать переменные локального контекста с параметрами (или переменными) некоторой функции. Совершенно не важно, используем мы ссылки или значения.

Важно. Если связать что-нить с объектом в хипе, выделенном в текущем скоупе, и время жизни лямбды больше, чем текущий скоуп, то получится утечка.

ГВ>По-моему, не стоит впадать в крайности и считать "полноценным" замыканием только такое, которое использует ссылки в стиле C#.

Не надо торговаться. лямбды и замыкания в С++ ущербны.

ГВ>Но и в том, и в другом случае программист описывает, что именно связыватся.

Нет, в случае C# программист пишет функцию. Ему не надо вникать что там внутри компилятора происходит. В случае C++ он должен заниматься сввязыванием.

ГВ>>>И потом, bind — это, в общем-то, не полноценные лямбды, как ни крути. Показательно то, что на C++ их можно реализовать.

G>> Показательно то что их нет в современном языке.

ГВ>Как это — нет? А новый стандарт? А новый компилятор от MS (который, правда, я ещё не щупал)? Всё есть, вроде. И опять таки, bind — пусть и не полноценная замена, но по крайней мере, для "маленьких функций" — вполне подходящее решение. Примечательно же оно тем, что получено средствами самого C++.

Ну и где этот стандарт?

ГВ>>>>>P.S.: Не хочешь высказаться по IoC
Автор: Геннадий Васильев
Дата: 26.04.09
?

G>>>>Хочу. Код также свидетельствует о черезмерной низкоуровневости С++. Метаинформацией о типах дожен заниматься рантайм, а не программист.
ГВ>>>А где ты там метаинформацию нашёл?
G>>TypeName, TrivialClassTraitDep1, TrivialClassTraitDep2, методы контейнера RegisterDep1, RegisterDep2, RegisterDep. В той или иной мере реализуют метаинформацию.

ГВ>Хм. Я бы так не сказал, поскольку Traits используются для конструирования типа (для инстанцирования RegisterDep). Ну а сами RegisterDep просто зависят от типа используемого конструктора (учтём, что сигнатура = тип функции), точно так же, как и любая функция требует параметров вполне определённых типов.

Это и есть метаданные типов.

ГВ>Программист в данном случае должен только выбрать, как именно регистрировать в контейнере тот или иной тип. Но это всегда обязанность программиста, выбор нужного конструктора полностью на компилятор не переложишь.

На компилятор — нет, а на контейнер — можно.

ГВ>Исключение, пожалуй, TypeName — эта структура, действительно, похожа на метаданные — то есть такие данные, которые сопоставляются типу, но прямо в него не включены. Но от TypeName можно избавиться посредством type_info — тогда метаданными будет заниматься только рантайм. Мне просто хотелось оставить возможность назначать объектам идентификаторы разных типов: GUID, int, const wchar_t * и так далее.

Ты считаешь что описание количества и типов параметров конструктора, совмещенное с методами создания объекта, не является метаданными?
Не стоит себя обманывать.

На type_info все не заменишь, типизированность пропадет, генериков в рантайме у С++ нету.
Re[32]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 30.04.09 03:33
Здравствуйте, COFF, Вы писали:

COF>На самом деле, это все (и еще много чего другого) я делаю когда пишу на C++,


На самом деле это многое говорит... о тебе.

ЗЫ

И эти люди запрещают мне ковыряться в носу?! (с)
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[33]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 30.04.09 03:35
Здравствуйте, criosray, Вы писали:

C>Быстрый код получается не тогда, когда Вы тратите 90% времени на техническую оптимизацию кода и 10% на алгоритмизацию, а 90% на алгоритмизацию, 10% на техническую оптимизацию.


Назвать тот бред, что ты перечислил оптимизациями вообще язык не поворачивается. Ту чушь оптимизируют компиляторы (JIT или обычные). Ручное вмешательство там на сегодня только вредит, так как нарушает те самые партерный что оптимизируются компиляторами.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[31]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 30.04.09 03:43
Здравствуйте, COFF, Вы писали:

COF>http://www.cnblogs.com/jerryzhao/archive/2007/08/29/873986.html


COF>One of the ways in which you can improve the performance of loading a form is by reducing the number of method calls made during form initialization.


Уважаемый! Прежде чем давать ссылки на что-то, не плохо было бы прочесть то на что даешь ссылку.
В этой ссылке написано, что если в API есть метод позволяющий задать значение за один раз, то нужно использовать его, а не несколько отдельных вызовов. Вот пример оттуда:
    this.textBox1.Location = new Point(10,20);
    this.textBox1.Size = new Size(72,23);
            

This can be consolidated into a single method call by using the Bounds property:

    this.textBox1.Bounds = new Rectangle(10,20,72,23);


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

Правило универсальное. Применимо и для любой программы написанной на С++. Так что мотай на ус.

ЗЫ

Не выставляй себя полным ламером. Молчи по тем темам в которых не шаришь.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[34]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 30.04.09 03:46
Здравствуйте, criosray, Вы писали:

C>Ну во-первых, очень многое поменялось и сейчас 99% WM устройств с .NET CF 3.5

C>Во-вторых, Вы не видитте разницы между CLR для мобильных телефонов и CLR для полноценных компьютеров?

Этот пример справедлив и для настольного фрэймворка последней версии. Ты вчитайся в код. Там не о экономии на вызове метода речь идет. Там речь о том, что не надо устанавливать размеры окна в два приема, если тоже самое можно сделать за один прием.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[33]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 30.04.09 03:54
Здравствуйте, criosray, Вы писали:

C>Но вот про "избегайте использовать много мелких объектов и мелких методов" — полный бред.


Не. Для Компакт-фрэймворка, особенно старых версий — это правильная рекомендация. GC там весьма примитивный. Никакой инкрементальной сборки. Так что и правад укрупнение объектов имело смысл. К тому же любой объект занимает лишнее место (для обычного фрэймворка это где-то 12 байт), так что укрупнение может дать выигрыш. Вопрос только в том, что актуальным этот совет будет если в память нужно поднять миллионы объектов. Естественно, что на обычном фрэймворке такой совет полная чушь.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[33]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 30.04.09 06:24
Здравствуйте, VladD2, Вы писали:

VD>На самом деле это многое говорит... о тебе. :))


Я просто стараюсь избегать преждевременной пессимизации кода. В итоге, наши программы работают лучше программ конкурентов, что приносит вполне ощутимое конкурентное преимущество.
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 30.04.09 06:36
Здравствуйте, VladD2, Вы писали:

C>>Ну во-первых, очень многое поменялось и сейчас 99% WM устройств с .NET CF 3.5

C>>Во-вторых, Вы не видитте разницы между CLR для мобильных телефонов и CLR для полноценных компьютеров?

VD>Этот пример справедлив и для настольного фрэймворка последней версии. Ты вчитайся в код. Там не о экономии на вызове метода речь идет. Там речь о том, что не надо устанавливать размеры окна в два приема, если тоже самое можно сделать за один прием.


Хорошо, тут я был не прав. Привел неудачный пример. Но я действительно неоднократно видел подобные рекомендации — ссылок к сожалению не сохранил, поэтому пытался найти в гугле что есть :) Да и ты сам ниже подтверждаешь мои слова.

Вообще, в чем принципиальное отличие компактного фреймворка от большого — только в том, что последний работает на компьютере с ограниченными ресурсами. И вот тут все прелести managed языков в плане ресурсоемкости и производительности вылезают во всей красе. Только и всего. На десктопе, и особенно на сервере этого не заметно, или так скажем не так явно заметно. Вот только пользователи жалуются — типа установил консоль оракла написанную на яве и ничего больше запустить не могу, съела всю память :)
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 30.04.09 07:30
Оценка: +1 :)
Здравствуйте, VladD2, Вы писали:

C>>Ну во-первых, очень многое поменялось и сейчас 99% WM устройств с .NET CF 3.5

C>>Во-вторых, Вы не видитте разницы между CLR для мобильных телефонов и CLR для полноценных компьютеров?

VD>Этот пример справедлив и для настольного фрэймворка последней версии. Ты вчитайся в код. Там не о экономии на вызове метода речь идет. Там речь о том, что не надо устанавливать размеры окна в два приема, если тоже самое можно сделать за один прием.


Да это не важно. Суть, что человек пытается судить о производительности .NET FW по .NET CF 1.0, что есть полная глупость. Это в духе того сравнения, которое сделал Шеридан недавно: что мол GUI на виндовом сервере тормозит сервер потому, что на его криво настроенном линуксовом сервере X Window подсистема кушает 10% процессорного времени...
Re[34]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 30.04.09 07:31
Здравствуйте, VladD2, Вы писали:


C>>Быстрый код получается не тогда, когда Вы тратите 90% времени на техническую оптимизацию кода и 10% на алгоритмизацию, а 90% на алгоритмизацию, 10% на техническую оптимизацию.


VD>Назвать тот бред, что ты перечислил оптимизациями вообще язык не поворачивается. Ту чушь оптимизируют компиляторы (JIT или обычные). Ручное вмешательство там на сегодня только вредит, так как нарушает те самые партерный что оптимизируются компиляторами.


Вы это мне? Я как бы в курсе.
Re[34]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 30.04.09 07:33
Оценка: -1
Здравствуйте, COFF, Вы писали:

VD>>На самом деле это многое говорит... о тебе.


COF>Я просто стараюсь избегать преждевременной пессимизации кода.


Так это и есть пессимизация кода, если Вы во время написания кода стараетесь экономить на количестве тактов процессора и байтов памяти, там, где это абсолютно не принципиально и только отвлекает Вас от, собственно, решения поставленной задачи.
Re[36]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 30.04.09 07:35
Здравствуйте, COFF, Вы писали:

C>>>Ну во-первых, очень многое поменялось и сейчас 99% WM устройств с .NET CF 3.5

C>>>Во-вторых, Вы не видитте разницы между CLR для мобильных телефонов и CLR для полноценных компьютеров?

VD>>Этот пример справедлив и для настольного фрэймворка последней версии. Ты вчитайся в код. Там не о экономии на вызове метода речь идет. Там речь о том, что не надо устанавливать размеры окна в два приема, если тоже самое можно сделать за один прием.


COF>Хорошо, тут я был не прав. Привел неудачный пример. Но я действительно неоднократно видел подобные рекомендации — ссылок к сожалению не сохранил, поэтому пытался найти в гугле что есть Да и ты сам ниже подтверждаешь мои слова.


COF>Вообще, в чем принципиальное отличие компактного фреймворка от большого — только в том, что последний работает на компьютере с

Это не отличие фреймворка. Это отличие рабочих условий.
COF>ограниченными ресурсами. И вот тут все прелести managed языков в плане ресурсоемкости и производительности вылезают во всей красе. Только и всего. На десктопе, и особенно на сервере этого не заметно, или так скажем не так явно заметно. Вот только пользователи жалуются — типа установил консоль оракла написанную на яве и ничего больше запустить не могу, съела всю память
А вот у меня на WM6.1 устройстве с .NET CF 3.5 есть три приложения на .NET CF и визуально по производительности они ничуть не уступают приложениям на С++ (MFC) — летают.
Re[37]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 30.04.09 07:53
Здравствуйте, criosray, Вы писали:

COF>>Вообще, в чем принципиальное отличие компактного фреймворка от большого — только в том, что последний работает на компьютере с

C>Это не отличие фреймворка. Это отличие рабочих условий.
COF>>ограниченными ресурсами. И вот тут все прелести managed языков в плане ресурсоемкости и производительности вылезают во всей красе. Только и всего. На десктопе, и особенно на сервере этого не заметно, или так скажем не так явно заметно. Вот только пользователи жалуются — типа установил консоль оракла написанную на яве и ничего больше запустить не могу, съела всю память :)
C>А вот у меня на WM6.1 устройстве с .NET CF 3.5 есть три приложения на .NET CF и визуально по производительности они ничуть не уступают приложениям на С++ (MFC) — летают.

Хорошо, что это за приложения? Я их поставлю и если они действительно летают, то я признаю свою неправоту :)
Re[36]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 30.04.09 08:04
Здравствуйте, gandjustas, Вы писали:

ГВ>>Ровно то же самое делается на C++: bind(&X::SomeMethod, _1) == someValue. И тоже, знаешь ли, полноценное лексическое замыкание. В конце концов, главное при создании замыкания что? ИМХО — связать переменные локального контекста с параметрами (или переменными) некоторой функции. Совершенно не важно, используем мы ссылки или значения.

G>Важно. Если связать что-нить с объектом в хипе, выделенном в текущем скоупе, и время жизни лямбды больше, чем текущий скоуп, то получится утечка.

А... Так ты про согласование жизненных циклов? Ну тогда да. Только это не "связывание", вроде, а "согласование ЖЦ".

ГВ>>По-моему, не стоит впадать в крайности и считать "полноценным" замыканием только такое, которое использует ссылки в стиле C#.

G>Не надо торговаться. лямбды и замыкания в С++ ущербны.

Не "ущербны", а специфичны для C++. У любого языка есть своя специфика.

ГВ>>Но и в том, и в другом случае программист описывает, что именно связыватся.

G>Нет, в случае C# программист пишет функцию. Ему не надо вникать что там внутри компилятора происходит. В случае C++ он должен заниматься сввязыванием.

Ну всё, я уже понял. C++-ник должен отследить согласованность ЖЦ. Да, это есть, хотя и далеко от чудовищной проблемности, приписываемой такому подходу. Ну и опять таки.... Ладно, хватит уже про shared_ptr.

ГВ>>Как это — нет? А новый стандарт? А новый компилятор от MS (который, правда, я ещё не щупал)? Всё есть, вроде. И опять таки, bind — пусть и не полноценная замена, но по крайней мере, для "маленьких функций" — вполне подходящее решение. Примечательно же оно тем, что получено средствами самого C++.

G>Ну и где этот стандарт?

Планируется к принятию. Компилятор, AFAIK, уже вышел. (Можно подумать, что появись этот стандарт прямо сейчас, что-то бы изменилось в твоей риторике! Ага, верю я...)

ГВ>>Хм. Я бы так не сказал, поскольку Traits используются для конструирования типа (для инстанцирования RegisterDep). Ну а сами RegisterDep просто зависят от типа используемого конструктора (учтём, что сигнатура = тип функции), точно так же, как и любая функция требует параметров вполне определённых типов.

G>Это и есть метаданные типов.

Понятно. Значит, любую привязку к типу сейчас нужно называть использованием метаданных. А мужики-то...

ГВ>>Программист в данном случае должен только выбрать, как именно регистрировать в контейнере тот или иной тип. Но это всегда обязанность программиста, выбор нужного конструктора полностью на компилятор не переложишь.

G>На компилятор — нет, а на контейнер — можно.

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

G>Ты считаешь что описание количества и типов параметров конструктора, совмещенное с методами создания объекта, не является метаданными?

G>Не стоит себя обманывать.

Хм. Это есть явное указание типа (сигнатуры) используемого конструктора. Где тут метаданные? От цифр в названиях методов можно избавиться.

G>На type_info все не заменишь, типизированность пропадет, генериков в рантайме у С++ нету.


Как это — типизированность пропадёт? Какая? Где? std::string(raw_name) и полный вперёд!
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[38]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 30.04.09 08:12
Здравствуйте, COFF, Вы писали:

COF>>>Вообще, в чем принципиальное отличие компактного фреймворка от большого — только в том, что последний работает на компьютере с

C>>Это не отличие фреймворка. Это отличие рабочих условий.
COF>>>ограниченными ресурсами. И вот тут все прелести managed языков в плане ресурсоемкости и производительности вылезают во всей красе. Только и всего. На десктопе, и особенно на сервере этого не заметно, или так скажем не так явно заметно. Вот только пользователи жалуются — типа установил консоль оракла написанную на яве и ничего больше запустить не могу, съела всю память
C>>А вот у меня на WM6.1 устройстве с .NET CF 3.5 есть три приложения на .NET CF и визуально по производительности они ничуть не уступают приложениям на С++ (MFC) — летают.

COF>Хорошо, что это за приложения? Я их поставлю и если они действительно летают, то я признаю свою неправоту

ThrottleLauncher, Twittula и самописное бизнес-приложение.
Re[37]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 30.04.09 09:55
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>>По-моему, не стоит впадать в крайности и считать "полноценным" замыканием только такое, которое использует ссылки в стиле C#.

G>>Не надо торговаться. лямбды и замыкания в С++ ущербны.
ГВ>Не "ущербны", а специфичны для C++. У любого языка есть своя специфика.
Не надо торговаться, не на рынке находимся.

ГВ>>>Но и в том, и в другом случае программист описывает, что именно связыватся.

G>>Нет, в случае C# программист пишет функцию. Ему не надо вникать что там внутри компилятора происходит. В случае C++ он должен заниматься сввязыванием.
ГВ>Ну всё, я уже понял. C++-ник должен отследить согласованность ЖЦ. Да, это есть, хотя и далеко от чудовищной проблемности, приписываемой такому подходу. Ну и опять таки.... Ладно, хватит уже про shared_ptr.
Какую согласованность, какого ЖЦ? Придумыванием терминов ущербность не скрыть.

ГВ>>>Как это — нет? А новый стандарт? А новый компилятор от MS (который, правда, я ещё не щупал)? Всё есть, вроде. И опять таки, bind — пусть и не полноценная замена, но по крайней мере, для "маленьких функций" — вполне подходящее решение. Примечательно же оно тем, что получено средствами самого C++.

G>>Ну и где этот стандарт?
ГВ>Планируется к принятию. Компилятор, AFAIK, уже вышел. (Можно подумать, что появись этот стандарт прямо сейчас, что-то бы изменилось в твоей риторике! Ага, верю я...)
Про стандарт уже давно говорят, а его пока нет.

ГВ>>>Хм. Я бы так не сказал, поскольку Traits используются для конструирования типа (для инстанцирования RegisterDep). Ну а сами RegisterDep просто зависят от типа используемого конструктора (учтём, что сигнатура = тип функции), точно так же, как и любая функция требует параметров вполне определённых типов.

G>>Это и есть метаданные типов.

ГВ>Понятно. Значит, любую привязку к типу сейчас нужно называть использованием метаданных. А мужики-то...

Не любую привзку типу, а любые структуры данныих или методы, которые так или иначе описывают некоторый тип и его содержимое.

ГВ>>>Программист в данном случае должен только выбрать, как именно регистрировать в контейнере тот или иной тип. Но это всегда обязанность программиста, выбор нужного конструктора полностью на компилятор не переложишь.

G>>На компилятор — нет, а на контейнер — можно.

ГВ>А как контейнер вычислит, что мне нужен именно определённый конструктор? Допустим, что у объекта два конструктора, оба с двумя аргументами, типы которых известны контейнеру. Контейнер сам примет решение? А на основании каких критериев?

На основании каких хочет, это его дело.

G>>Ты считаешь что описание количества и типов параметров конструктора, совмещенное с методами создания объекта, не является метаданными?

G>>Не стоит себя обманывать.
ГВ>Хм. Это есть явное указание типа (сигнатуры) используемого конструктора. Где тут метаданные? От цифр в названиях методов можно избавиться.
От этого метаданные не исчезнут.

G>>На type_info все не заменишь, типизированность пропадет, генериков в рантайме у С++ нету.

ГВ>Как это — типизированность пропадёт? Какая? Где? std::string(raw_name) и полный вперёд!
Ну код в студию: типобезопасное создание в рантайме ообъекта по заданному type_info.
Re[25]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 04.05.09 09:25
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Ты бы за логической связью последил. Если копирование — это не один из приёмов, который может использоваться для построения замыкания, то... То я прям, не знаю, даже.
Гм. Вообще-то у замыкания есть своя, четко определенная семантика. Копирование, о котором ты говоришь — малоинтересный частный случай.
В общем случае замыкается именно лексический контекст, причем он не readonly:
int sum = 0;
IteratePackageStructure(structure, (item) => sum += item.Size));
Console.WriteLine(sum);

Никакими копированиями эмулировать поведение вот этого маленького фрагмента кода не получится. Придется выполнять замыкание вручную, например написать функтор, у которого sum станет мембером.
ГВ>Это всё понятно, и никто с этим не спорит. Равно как никто и не пытается объявить C++ "чистым ФЯ".
Да, это всего лишь громоздкий и многословный императивный язык.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[38]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 04.05.09 10:59
Здравствуйте, gandjustas, Вы писали:

ГВ>>>>По-моему, не стоит впадать в крайности и считать "полноценным" замыканием только такое, которое использует ссылки в стиле C#.

G>>>Не надо торговаться. лямбды и замыкания в С++ ущербны.
ГВ>>Не "ущербны", а специфичны для C++. У любого языка есть своя специфика.
G> Не надо торговаться, не на рынке находимся.

Конечно-конечно. Гораздо правильнее принять "ущербно" вместо "специфично". Дружище, мы не на рынке, но и ты в законодатели терминов ещё не выбился, так что, давай уж согласовывать термины.

ГВ>>Ну всё, я уже понял. C++-ник должен отследить согласованность ЖЦ. Да, это есть, хотя и далеко от чудовищной проблемности, приписываемой такому подходу. Ну и опять таки.... Ладно, хватит уже про shared_ptr.

G>Какую согласованность, какого ЖЦ? Придумыванием терминов ущербность не скрыть.

ЖЦ = жизненный цикл. Если это новый термин, то программирование появилось позавчера.

ГВ>>>>Как это — нет? А новый стандарт? А новый компилятор от MS (который, правда, я ещё не щупал)? Всё есть, вроде. И опять таки, bind — пусть и не полноценная замена, но по крайней мере, для "маленьких функций" — вполне подходящее решение. Примечательно же оно тем, что получено средствами самого C++.

G>>>Ну и где этот стандарт?
ГВ>>Планируется к принятию. Компилятор, AFAIK, уже вышел. (Можно подумать, что появись этот стандарт прямо сейчас, что-то бы изменилось в твоей риторике! Ага, верю я...)
G>Про стандарт уже давно говорят, а его пока нет.

Зато компилятор, AFAIK, уже есть. Жаль, никак руки не доходят его плотно пощупать.

ГВ>>>>Хм. Я бы так не сказал, поскольку Traits используются для конструирования типа (для инстанцирования RegisterDep). Ну а сами RegisterDep просто зависят от типа используемого конструктора (учтём, что сигнатура = тип функции), точно так же, как и любая функция требует параметров вполне определённых типов.

G>>>Это и есть метаданные типов.

ГВ>>Понятно. Значит, любую привязку к типу сейчас нужно называть использованием метаданных. А мужики-то...

G>Не любую привзку типу, а любые структуры данныих или методы, которые так или иначе описывают некоторый тип и его содержимое.

Э... Что-то опять новенькое. Я как-то привык считать, что метаданные нужны для того, чтобы сопоставить типу (или объекту) какие-то параметры, о которых сам тип (объект) и слыхом не слыхивал. Meta = "над".

ГВ>>>>Программист в данном случае должен только выбрать, как именно регистрировать в контейнере тот или иной тип. Но это всегда обязанность программиста, выбор нужного конструктора полностью на компилятор не переложишь.

G>>>На компилятор — нет, а на контейнер — можно.

ГВ>>А как контейнер вычислит, что мне нужен именно определённый конструктор? Допустим, что у объекта два конструктора, оба с двумя аргументами, типы которых известны контейнеру. Контейнер сам примет решение? А на основании каких критериев?

G>На основании каких хочет, это его дело.

Нет, Девид Блейн... Я таких вольностей свои программам не позволяю.

G>>>Ты считаешь что описание количества и типов параметров конструктора, совмещенное с методами создания объекта, не является метаданными?

G>>>Не стоит себя обманывать.
ГВ>>Хм. Это есть явное указание типа (сигнатуры) используемого конструктора. Где тут метаданные? От цифр в названиях методов можно избавиться.
G>От этого метаданные не исчезнут.

Ты видишь суслика? Я, лично, — нет.

G>>>На type_info все не заменишь, типизированность пропадет, генериков в рантайме у С++ нету.

ГВ>>Как это — типизированность пропадёт? Какая? Где? std::string(raw_name) и полный вперёд!
G>Ну код в студию: типобезопасное создание в рантайме ообъекта по заданному type_info.

Если не лень будет, переделаю свой пример, но обещать не буду.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[26]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 04.05.09 11:13
Здравствуйте, Sinclair, Вы писали:

ГВ>>Ты бы за логической связью последил. Если копирование — это не один из приёмов, который может использоваться для построения замыкания, то... То я прям, не знаю, даже.

S>Гм. Вообще-то у замыкания есть своя, четко определенная семантика. Копирование, о котором ты говоришь — малоинтересный частный случай.

Смотря что копируется. Копировать можно и ссылки. В остальном проблема передачи параметров замыкания носит ровно тот же самый характер, что и передача параметров в процедуру: по ссылке, по указателю или по значению. Согласование жизненных циклов объектов — из той же оперы.

S>В общем случае замыкается именно лексический контекст, причем он не readonly:


Забавно, что сейчас ты апеллируешь к тому, что иной раз подаётся как преимущество "ФП": отсуствие побочных эффектов. Но это так, в offtop-порядке.

S>
S>int sum = 0;
S>IteratePackageStructure(structure, (item) => sum += item.Size));
S>Console.WriteLine(sum);
S>

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

Скажем так, по состоянию на данный момент такое поведение трудновато реализовать.

ГВ>>Это всё понятно, и никто с этим не спорит. Равно как никто и не пытается объявить C++ "чистым ФЯ".

S>Да, это всего лишь громоздкий и многословный императивный язык.

Да-да, осталось отказаться от замшелых стереотипов... На колу мочало.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[39]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 04.05.09 11:34
Здравствуйте, Геннадий Васильев, Вы писали:

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


ГВ>>>>>По-моему, не стоит впадать в крайности и считать "полноценным" замыканием только такое, которое использует ссылки в стиле C#.

G>>>>Не надо торговаться. лямбды и замыкания в С++ ущербны.
ГВ>>>Не "ущербны", а специфичны для C++. У любого языка есть своя специфика.
G>> Не надо торговаться, не на рынке находимся.

ГВ>Конечно-конечно. Гораздо правильнее принять "ущербно" вместо "специфично". Дружище, мы не на рынке, но и ты в законодатели терминов ещё не выбился, так что, давай уж согласовывать термины.

Не надо согласовывать, если что-то делается в С++ созданием кучи шаблонов, когда в других языках оно уже есть, то это именно "ущербно".

ГВ>Э... Что-то опять новенькое. Я как-то привык считать, что метаданные нужны для того, чтобы сопоставить типу (или объекту) какие-то параметры, о которых сам тип (объект) и слыхом не слыхивал. Meta = "над".

Правильно, а теперь еще раз перечитай свой код. Очень даже сопоставляется строковое имя типа и количество параметров конструктора с типами аргументов.

G>>>>Ты считаешь что описание количества и типов параметров конструктора, совмещенное с методами создания объекта, не является метаданными?

G>>>>Не стоит себя обманывать.
ГВ>>>Хм. Это есть явное указание типа (сигнатуры) используемого конструктора. Где тут метаданные? От цифр в названиях методов можно избавиться.
G>>От этого метаданные не исчезнут.
ГВ>Ты видишь суслика? Я, лично, — нет.
Это не суслик, а огромный слон.
Re[27]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 04.05.09 11:43
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Смотря что копируется. Копировать можно и ссылки. В остальном проблема передачи параметров замыкания носит ровно тот же самый характер, что и передача параметров в процедуру: по ссылке, по указателю или по значению. Согласование жизненных циклов объектов — из той же оперы.
Вот то-то и оно, что в нормальных замыканиях "передача параметров" происходит по ссылке. И параметры образуются неявным образом. А не вручную — вручную можно и функтор напедалить, кто бы спорил. Там и буст не особо нужен.

ГВ>Скажем так, по состоянию на данный момент такое поведение трудновато реализовать.

Об этом речь и идет. Ежу понятно, что "поведение С++" на С++ реализовывать легко и приятно.

ГВ>Да-да, осталось отказаться от замшелых стереотипов... На колу мочало.

Угу. С нетерпением ждем реализации Linq на С++. Хотя бы в объеме библиотеки, т.е. без специального синтаксиса query expressions.
Смею полагать, что "по состоянию на данный момент такое поведение трудновато реализовать".
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[40]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 04.05.09 11:45
Здравствуйте, gandjustas, Вы писали:

ГВ>>Конечно-конечно. Гораздо правильнее принять "ущербно" вместо "специфично". Дружище, мы не на рынке, но и ты в законодатели терминов ещё не выбился, так что, давай уж согласовывать термины.

G>Не надо согласовывать, если что-то делается в С++ созданием кучи шаблонов, когда в других языках оно уже есть, то это именно "ущербно".

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

ГВ>>Э... Что-то опять новенькое. Я как-то привык считать, что метаданные нужны для того, чтобы сопоставить типу (или объекту) какие-то параметры, о которых сам тип (объект) и слыхом не слыхивал. Meta = "над".

G>Правильно, а теперь еще раз перечитай свой код. Очень даже сопоставляется строковое имя типа и количество параметров конструктора с типами аргументов.

Не совсем так, только строковое имя типа именно сопоставляется с типом и может называться "метаданными типа". А количество параметров конструктора — часть определения самого типа. Понимаешь разницу?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[41]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 04.05.09 11:51
Здравствуйте, Геннадий Васильев, Вы писали:

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


ГВ>>>Конечно-конечно. Гораздо правильнее принять "ущербно" вместо "специфично". Дружище, мы не на рынке, но и ты в законодатели терминов ещё не выбился, так что, давай уж согласовывать термины.

G>>Не надо согласовывать, если что-то делается в С++ созданием кучи шаблонов, когда в других языках оно уже есть, то это именно "ущербно".
ГВ>Ясно. Значит, ты считаешь такое явление ущербностью со всеми сопутствующими эмоциональными оттенками. На здоровье. Я полагаю это спецификой.


ГВ>>>Э... Что-то опять новенькое. Я как-то привык считать, что метаданные нужны для того, чтобы сопоставить типу (или объекту) какие-то параметры, о которых сам тип (объект) и слыхом не слыхивал. Meta = "над".

G>>Правильно, а теперь еще раз перечитай свой код. Очень даже сопоставляется строковое имя типа и количество параметров конструктора с типами аргументов.
ГВ>Не совсем так, только строковое имя типа именно сопоставляется с типом и может называться "метаданными типа". А количество параметров конструктора — часть определения самого типа. Понимаешь разницу?
И можно у "самого типа" спросить о том какие у него есть конструкторы?
Re[28]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 04.05.09 11:56
Здравствуйте, Sinclair, Вы писали:

ГВ>>Смотря что копируется. Копировать можно и ссылки. В остальном проблема передачи параметров замыкания носит ровно тот же самый характер, что и передача параметров в процедуру: по ссылке, по указателю или по значению. Согласование жизненных циклов объектов — из той же оперы.

S>Вот то-то и оно, что в нормальных замыканиях "передача параметров" происходит по ссылке. И параметры образуются неявным образом. А не вручную — вручную можно и функтор напедалить, кто бы спорил. Там и буст не особо нужен.

C++ предполагает три различных способа передачи параметров: значение, ссылка, указатель. "Нормальные" замыкания, судя по твоему высказыванию — это только ссылка, контролируемая GC. Я не хочу сказать, что такая точка зрения не имеет права на существование, но это никак не противоречит копированиям и прочим тра-ля-ля.

ГВ>>Скажем так, по состоянию на данный момент такое поведение трудновато реализовать.

S> Об этом речь и идет. Ежу понятно, что "поведение С++" на С++ реализовывать легко и приятно.

Ну, я имел в виду, что с бустом сие сложновато будет реализовать. В смысле, именно такую конструкцию — со ссылкой на неконстантную переменную. Но и то, из-за design goals самой BLL (boost lambda library). А так, вроде, C++0x должен содержать такую возможность.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[42]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 04.05.09 12:00
Здравствуйте, gandjustas, Вы писали:

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

G>И можно у "самого типа" спросить о том какие у него есть конструкторы?

А зачем? Пользователь сам явно указывает, какой конструктор нужно использовать для создания экземпляра.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[29]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 04.05.09 12:17
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ> C++ предполагает три различных способа передачи параметров: значение, ссылка, указатель. "Нормальные" замыкания, судя по твоему высказыванию — это только ссылка, контролируемая GC.

Нет, это "только ссылка". Потому что семантика передачи ссылки принципиально отличается от передачи по значению, и именно она нужна. GC — второстепенная деталь реализации, без которой всё вместе трудно заставить работать.
ГВ> Я не хочу сказать, что такая точка зрения не имеет права на существование, но это никак не противоречит копированиям и прочим тра-ля-ля.
Геннадий, не надо придуриваться. Есть общепринятая трактовка замыкания, в которой замыкается полный лексический контекст. И плюсы не в состоянии обеспечить реализацию этой трактовки. А говорить "вот мы изобрели некоторое малополезное подмножество вашей функциональности, и назвали его точно так же, как полное — вот вам и замыкания" — это нечестно.

ГВ>Ну, я имел в виду, что с бустом сие сложновато будет реализовать. В смысле, именно такую конструкцию — со ссылкой на неконстантную переменную. Но и то, из-за design goals самой BLL (boost lambda library). А так, вроде, C++0x должен содержать такую возможность.

Да, мы в курсе, что C++0x должен содержать все нужные возможности по определению.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[39]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 04.05.09 12:34
Оценка:3 (1)
Здравствуйте, criosray, Вы писали:

COF>>Хорошо, что это за приложения? Я их поставлю и если они действительно летают, то я признаю свою неправоту :)

C>ThrottleLauncher, Twittula и самописное бизнес-приложение.

Поставил ThrottleLauncher и поигрался с ним пару дней. Такое впечатление, что у тебя либо быстрое устройство с маленьким экраном, либо у тебя извращенное представление о том, что значит "программа летает". Если ThrottleLauncher и летает на моем HTC HD, то низко-низко :) С аналогичными программами, написанными на C++, просто не сравнить. В общем, я еще более укрепился в своем мнении, хотя после столь массированной пропаганды со стороны сторонников управляемых языков уже был даже готов поверить.

Но прикольно другое. Поставив сие чудо софтостроения и нарвавшись на нехилые тормоза, я начал рыть в сети на предмет возможных настроек и т.п. Вот на что я наткнулся и что меня буквально потрясло:

В процессе тестирования проги обнаружил большую утечку памяти. За 15 минут переключения вкладок прога полностью съела 18 свободных мег. Это напоминает утечку памяти PointUI 2. Методов борьбы не обнаружил. Если буфферизацию ставить в 0 — прога тормозит, а утечка памяти происходит медленно, но верно. В общем не рекомендую владельцам медленных процессоров и малой оперативки.

Это проблема программы — не высвобождается полностью память при перерисовке, решить ее самостоятельно не удастся.

http://4pda.ru/forum/index.php?s=&showtopic=67951&view=findpost&p=2650476

Или я чего-то совсем не понимаю, или вот...
Re[29]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Mamuthttp://dmitriid.com/
Дата: 04.05.09 12:41
ГВ> C++ предполагает три различных способа передачи параметров: значение, ссылка, указатель.

Учитывая, что два последних — это, по сути, одно и то же...
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 04.05.09 13:07
Здравствуйте, Sinclair, Вы писали:

ГВ>> Я не хочу сказать, что такая точка зрения не имеет права на существование, но это никак не противоречит копированиям и прочим тра-ля-ля.

S>Геннадий, не надо придуриваться. Есть общепринятая трактовка замыкания, в которой замыкается полный лексический контекст. И плюсы не в состоянии обеспечить реализацию этой трактовки. А говорить "вот мы изобрели некоторое малополезное подмножество вашей функциональности, и назвали его точно так же, как полное — вот вам и замыкания" — это нечестно.

Ясно, терминологически мы разошлись, поскольку я называл "замыканием", по сути, передачу параметров лямбда-выражению, а не операцию, подразумевающую эээ... Совмещение пространства имён лямбды с пространством имён функции, где эта лямбда создаётся, и сопутствующим неявным порожденем связей, переменных и т.п.

Короче говоря, я понял, о каком различии ты говоришь, но тут сейчас сам точно не знаю, что именно будет реализовано в C++0x.

ГВ>>Ну, я имел в виду, что с бустом сие сложновато будет реализовать. В смысле, именно такую конструкцию — со ссылкой на неконстантную переменную. Но и то, из-за design goals самой BLL (boost lambda library). А так, вроде, C++0x должен содержать такую возможность.

S>Да, мы в курсе, что C++0x должен содержать все нужные возможности по определению.

А я вот ещё не в курсе, будет ли в нём именно лексическое замыкание в "общепринятой трактовке" (с неявной модификацией жизненного цикла замкнутых переменных). Скорее всего — нет.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 04.05.09 13:09
Здравствуйте, Mamut, Вы писали:

ГВ>> C++ предполагает три различных способа передачи параметров: значение, ссылка, указатель.

M>Учитывая, что два последних — это, по сути, одно и то же...

Все они одно и то же — значение чего-то.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[31]: P.S. в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 04.05.09 13:13
ГВ>Короче говоря, я понял, о каком различии ты говоришь, но тут сейчас сам точно не знаю, что именно будет реализовано в C++0x.

Пойми меня правильно: я не думаю, что в C++0x появится вездесущий GC и возможность менять время существования переменной без явного указания этого программистом. Я просто не в курсе деталей стандарта и уж тем более — особенностей реализации C++0x разными компиляторами. Поэтому не могу уверенно что-то говорить.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[34]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 04.05.09 13:26
Здравствуйте, COFF, Вы писали:

COF>Я просто стараюсь избегать преждевременной пессимизации кода. В итоге, наши программы работают лучше программ конкурентов, что приносит вполне ощутимое конкурентное преимущество.


Это полнейший лам. Ты ни грамма не ускоришь программу этими глупостями.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 04.05.09 13:29
Здравствуйте, criosray, Вы писали:

C>Так это и есть пессимизация кода, если Вы во время написания кода стараетесь экономить на количестве тактов процессора и байтов памяти, там, где это абсолютно не принципиально и только отвлекает Вас от, собственно, решения поставленной задачи.


Все еще смешнее. Большая часть из перечисленного ровным счетом не влияет на производительность. Скажем выбор префикской и постфиксной записи мог влиять на что-то во времена Страуструпа, но современные компиляторы оптимизируют генерируемый код и в случае если просто поменять форму инкремента в цикле, ничего не изменится.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[31]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Mamuthttp://dmitriid.com/
Дата: 04.05.09 13:35
Оценка: :)
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ> ГВ>> C++ предполагает три различных способа передачи параметров: значение, ссылка, указатель.


ГВ> M>Учитывая, что два последних — это, по сути, одно и то же...


ГВ> Все они одно и то же — значение чего-то.


Я имею в виду — что ссылка _ это адрес чего-то, что указатель — это адрес чего-то
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 04.05.09 13:38
Оценка: +1 -1
Здравствуйте, VladD2, Вы писали:

COF>>Я просто стараюсь избегать преждевременной пессимизации кода. В итоге, наши программы работают лучше программ конкурентов, что приносит вполне ощутимое конкурентное преимущество.


VD>Это полнейший лам. Ты ни грамма не ускоришь программу этими глупостями.


Это культура. Если одинаково просто написать ++j и j++, for( int j = count; j-- > 0; ) и for( int j = 0; j < count; j++ ), то при прочих равных надо выбирать оптимальный вариант — это и называется избегать пессимизации кода. Лам — это, с одной стороны, делать такие микрооптимизации в ущерб чему-то более важному, с другой стороны — осознанно на них забивать, типа и так сойдет.
Re[36]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 04.05.09 13:46
Оценка:1 (1) +2 -1
Вдогонку,
У меня был знакомый, который на C++ осознанно писал вот так — for( int i = 0; i < array.GetCount(); i++ ), типа компилятор должен сам такие ситуации разруливать. Ну и в других местах он поступал аналогично. Потом он уволился и мне пришлось в его коде разбираться и оптимизировать. Так вот без всяких алгоритмических штучек, просто вычищением лишних уровней косвенности и выпрямления интерфейсов, мне удалось ускорить его код в несколько раз.

Так что пессимизация кода в малом скорее всего значит и пессимизацию в большом. Это мое твердое убеждение.
Re[37]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 04.05.09 13:56
Здравствуйте, COFF, Вы писали:

COF>Вдогонку,

COF>У меня был знакомый, который на C++ осознанно писал вот так — for( int i = 0; i < array.GetCount(); i++ ), типа компилятор должен сам такие ситуации разруливать. Ну и в других местах он поступал аналогично. Потом он уволился и мне пришлось в его коде разбираться и оптимизировать. Так вот без всяких алгоритмических штучек, просто вычищением лишних уровней косвенности и выпрямления интерфейсов, мне удалось ускорить его код в несколько раз.
Если array.GetCount() нормально инлайнится, то разницы в релизе не будет.
А если нет, то это уже проблемы в ДНК, а не в уровнях косвенности.
Кстати, что профайлер сказал на такой код?

COF>Так что пессимизация кода в малом скорее всего значит и пессимизацию в большом. Это мое твердое убеждение.

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

Кстати. Твой знакомый работал и никого не беспокоило быстродействие кода, а ты в первую очередь занялся "выпрямлением интерфейсов", что сократило простор для алгоритмической или архитектурной оптимизации.
Re[38]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 04.05.09 14:03
Оценка: +1 -1
Здравствуйте, gandjustas, Вы писали:

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


G>Кстати. Твой знакомый работал и никого не беспокоило быстродействие кода, а ты в первую очередь занялся "выпрямлением интерфейсов", что сократило простор для алгоритмической или архитектурной оптимизации.


Нет, мне надо было реализовать некую новую функциональность, в процессе выяснилось, что существующая реализация недостаточно для этого гибка. Поэтому пришлось сделать рефакторинг определенных интерфейсов и модулей. Как побочный эффект выросла и скорость. На ровном по сути месте. Вообще, я не верю в подход — сделай как-нибудь, потом запустим профайлер и посмотрим где тормозит. Скорее всего, окажется, что тормоза равномерно распределены по всей программе. Часто говорят, что о безопасности надо думать с самого начала и всегда, невозможно небезопасную программу сделать безопасной. Вот то же самое, я уверен, можно сказать и о производительности — о ней надо думать всегда.
Re[39]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 04.05.09 14:36
Оценка: +1
Здравствуйте, COFF, Вы писали:

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


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


G>>Кстати. Твой знакомый работал и никого не беспокоило быстродействие кода, а ты в первую очередь занялся "выпрямлением интерфейсов", что сократило простор для алгоритмической или архитектурной оптимизации.


COF>Вообще, я не верю в подход — сделай как-нибудь, потом запустим профайлер и посмотрим где тормозит.

Зря. Это единственный возможный подход. В люом нетривиальном случае только профайлер может сказать где тормозит.

COF>Скорее всего, окажется, что тормоза равномерно распределены по всей программе.

Ты ни разу профайлером не пользовался? Почти всегда тормоза сосредоточены в 10% кода. Только без профайлера не узнаешь что это за 10%.

COF>Часто говорят, что о безопасности надо думать с самого начала и всегда, невозможно небезопасную программу сделать безопасной.

В большенстве случаев это верно. Вопрсы безопасности влияют на архитектуру.

COF>Вот то же самое, я уверен, можно сказать и о производительности — о ней надо думать всегда.

В большенстве случаев это неверно. Вопросы производительности, касающиеся вычислений, рекдо влияют на архитектуру.
Вопросы производительности, связанные с IO и многопоточностью, которые как раз влияют на архитектуру, "выпрямлением интерфейсов" не решаются.
Re[36]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 04.05.09 14:53
Оценка: +1
Здравствуйте, COFF, Вы писали:

COF>Это культура. Если одинаково просто написать ++j и j++, for( int j = count; j-- > 0; ) и for( int j = 0; j < count; j++ ), то при прочих равных надо выбирать оптимальный вариант — это и называется избегать пессимизации кода.


Это махровое ламерство. Собственно данная беседа для меня потеряла всяческий интерес.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[36]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 04.05.09 14:55
Здравствуйте, COFF, Вы писали:

COF>Хорошо, тут я был не прав. Привел неудачный пример. Но я действительно неоднократно видел подобные рекомендации — ссылок к сожалению не сохранил, поэтому пытался найти в гугле что есть Да и ты сам ниже подтверждаешь мои слова.


Нет таких ссылок и быть не может. Потому как это бред. Стоимость вызова микроспопически мала. Ее можно заметить на вызове методов-пустышек в цикле. А их то как раз отлично оптимизирует (инлайнит) JIT.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[37]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 04.05.09 15:20
Оценка:2 (2)
Здравствуйте, VladD2, Вы писали:

VD>Это махровое ламерство. Собственно данная беседа для меня потеряла всяческий интерес.


Для меня эта беседа потеряла интерес когда я покрутил приложение, которое (по словам одного из обвинителей меня в ламерстве) якобы летает. Оказалось, что мало того, что оно тормозит, так еще и память утекает, причем со свистом — так, что средней C++-ной программе надо постараться такую утечку организовать. В общем, гладко было на бумаге, да забыли про овраги — практика пока теорию не подтверждает. Лепите уважаемые свои лямбды дальше :)

Вообще, все это я могу объяснить только профессиональной абберацией у дот-нетчиков, которые настолько привыкли, что все тормозит, что просто перестают тормоза эти замечать. На данный эффект в будущем буду делать поправку, а может вообще спорить на эти темы не буду — бессмысленно :)
Re[37]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 04.05.09 16:51
Здравствуйте, VladD2, Вы писали:

VD>Нет таких ссылок и быть не может. Потому как это бред. Стоимость вызова микроспопически мала. Ее можно заметить на вызове методов-пустышек в цикле. А их то как раз отлично оптимизирует (инлайнит) JIT.


Судя по всему, не всё JIT оптимизирует и не всегда.

Ссылка старовата, зато от производителя. Интересны советы касательно использования virtual и упрощения графа вызовов. Например, вот это:

Copy Frequently Called Code into the Loop
If you repeatedly call methods from inside a loop, consider changing the loop to reduce the number of calls made. The JIT compiler usually inlines any called code if it is simple, but in most complex scenarios it is your responsibility to optimize the code. The costs of the call increase as you cross process or computer boundaries with remoting or Web services. The following code shows a method being called repeatedly inside a loop.

Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[38]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 05.05.09 13:33
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Ссылка старовата, зато от производителя. Интересны советы касательно использования virtual и упрощения графа вызовов. Например, вот это:


ГВ>

ГВ>Copy Frequently Called Code into the Loop
ГВ>If you repeatedly call methods from inside a loop, consider changing the loop to reduce the number of calls made. The JIT compiler usually inlines any called code if it is simple, but in most complex scenarios it is your responsibility to optimize the code. The costs of the call increase as you cross process or computer boundaries with remoting or Web services. The following code shows a method being called repeatedly inside a loop.


Что тебя тут удивило или заинтересовало?
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[39]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 05.05.09 16:25
Здравствуйте, VladD2, Вы писали:

VD>Что тебя тут удивило или заинтересовало?


Очень созвучно тому, о чём говорил COFF — про объединение мелких методов в один. Ты, вроде, утверждал, что таких рекомендаций не может быть вообще. Как видишь — бывают.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 05.05.09 16:29
Оценка:2 (1)
Здравствуйте, Sinclair, Вы писали:
ГВ>> C++ предполагает три различных способа передачи параметров: значение, ссылка, указатель. "Нормальные" замыкания, судя по твоему высказыванию — это только ссылка, контролируемая GC.
S>Нет, это "только ссылка". Потому что семантика передачи ссылки принципиально отличается от передачи по значению, и именно она нужна. GC — второстепенная деталь реализации, без которой всё вместе трудно заставить работать.
спасибо, Капитан, за ликбез про семантику, а "мужики то не знали". Только с чего ты взял что нужна именно она? С++ предоставляет вариант — замыкать контекст по ссылке или по значению (кстати некотороые из lisp'ов таки замыкания реализуют через копирование, ага). Очевидно ето плюс, т.к. программист не ограничен "единственно правильным решением".

ГВ>> Я не хочу сказать, что такая точка зрения не имеет права на существование, но это никак не противоречит копированиям и прочим тра-ля-ля.

S>Геннадий, не надо придуриваться. Есть общепринятая трактовка замыкания, в которой замыкается полный лексический контекст. И плюсы не в состоянии обеспечить реализацию этой трактовки. А говорить "вот мы изобрели некоторое малополезное подмножество вашей функциональности, и назвали его точно так же, как полное — вот вам и замыкания" — это нечестно.
не надо выдумывать, в новом с++ именно замыкание, аргументов против так и не увидел, разве отсутствует "замыкание на полный лексический контекст", али что?
People write code, programming languages don't.
Re[38]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 05.05.09 16:33
Оценка: +1 :)
Здравствуйте, Геннадий Васильев, Вы писали:

VD>>Нет таких ссылок и быть не может. Потому как это бред. Стоимость вызова микроспопически мала. Ее можно заметить на вызове методов-пустышек в цикле. А их то как раз отлично оптимизирует (инлайнит) JIT.


ГВ>Судя по всему, не всё JIT оптимизирует и не всегда.


Вам не надоело кидаться какашками? Вроде никто не утверждал, что управляемые языки есть серебрянной пулей, но они дают разумный компромис и с учетом того, что компьютерное время все более и более дешево в сравнении с человеко-часами, затрачиваемыми на разработку, будущее — однозначно за управляемыми языками. Более того, я уверен, что нам предстоит еще увидеть полностью управляемые ОС типа Singularity.
Re[38]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 05.05.09 16:37
Здравствуйте, COFF, Вы писали:

VD>>Это махровое ламерство. Собственно данная беседа для меня потеряла всяческий интерес.


COF>Для меня эта беседа потеряла интерес когда я покрутил приложение, которое (по словам одного из обвинителей меня в ламерстве) якобы летает. Оказалось, что мало того, что оно тормозит, так еще и память утекает, причем со свистом — так, что средней C++-ной программе надо постараться такую утечку организовать. В общем, гладко было на бумаге, да забыли про овраги — практика пока теорию не подтверждает. Лепите уважаемые свои лямбды дальше


Камень в мой огород? Оно действительно летает и не тормозит. В версии 0.9.5 В RC явно что-то перемудрили. Почти наверняка проблема там в анменеджед модулях — например, во флэщ проигрывателе, который активно используется. Впрочем, не берусь утверждать.
Re[39]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 05.05.09 17:08
Оценка:2 (1)
Здравствуйте, criosray, Вы писали:

ГВ>>Судя по всему, не всё JIT оптимизирует и не всегда.


C>Вам не надоело кидаться какашками?


Хм. Уж, по-моему, если у кого резьбу и срывает, то это у хулителей C++. Тебе цитаты привести или сам найдёшь? И вообще говоря, называть рекомендации Microsoft "какашками" — это сильно, да. Учту, что ссылка на MSDN может быть приравнена к хулению.

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


Отлично, очень рад. Кто-то утверждал обратное (обратное "разумному компромиссу", а не "будущему за...", разумеется)?

C>Более того, я уверен, что нам предстоит еще увидеть полностью управляемые ОС типа Singularity.


Ну и отлично ещё раз, возьми с полки пирожок. Думаешь, я собираюсь спорить с твоей уверенностью?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[40]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 05.05.09 17:16
Оценка: -2
Здравствуйте, Геннадий Васильев, Вы писали:

Продолжим общение, когда Вы смените хамский тон на нечто более цивилизованное.

ГВ>Хм. Уж, по-моему, если у кого резьбу и срывает, то это у хулителей C++. Тебе цитаты привести или сам найдёшь? И вообще говоря, называть рекомендации Microsoft "какашками" — это сильно, да. Учту, что ссылка на MSDN может быть приравнена к хулению.

ГВ>Отлично, очень рад. Кто-то утверждал обратное (обратное "разумному компромиссу", а не "будущему за...", разумеется)?
ГВ>Ну и отлично ещё раз, возьми с полки пирожок. Думаешь, я собираюсь спорить с твоей уверенностью?
Re[41]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 05.05.09 17:21
Здравствуйте, criosray, Вы писали:

C>Продолжим общение, когда Вы смените хамский тон на нечто более цивилизованное.


Боюсь, что это не возможно, поскольку мой "хамский тон" существует, преимущественно, в твоём воображении.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[30]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 05.05.09 18:47
Здравствуйте, Sinclair, Вы писали:

S>Да, мы в курсе, что C++0x должен содержать все нужные возможности по определению.


Посмотри сюда, думаю, тебе будет интересно.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[31]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 05.05.09 18:47
Здравствуйте, Хвост, Вы писали:

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

ГВ>>> C++ предполагает три различных способа передачи параметров: значение, ссылка, указатель. "Нормальные" замыкания, судя по твоему высказыванию — это только ссылка, контролируемая GC.
S>>Нет, это "только ссылка". Потому что семантика передачи ссылки принципиально отличается от передачи по значению, и именно она нужна. GC — второстепенная деталь реализации, без которой всё вместе трудно заставить работать.
Х>спасибо, Капитан, за ликбез про семантику, а "мужики то не знали". Только с чего ты взял что нужна именно она? С++ предоставляет вариант — замыкать контекст по ссылке или по значению (кстати некотороые из lisp'ов таки замыкания реализуют через копирование, ага). Очевидно ето плюс, т.к. программист не ограничен "единственно правильным решением".
Ага, он ограничен двумя неправильными, и одним неочевидным и частично правильным.
Кроме того полноценные замыкания, которые продлевают жизнь контекста, невозвожны без GC.
Куча способов сделать неправльно — плохая черта для языка.

ГВ>>> Я не хочу сказать, что такая точка зрения не имеет права на существование, но это никак не противоречит копированиям и прочим тра-ля-ля.

S>>Геннадий, не надо придуриваться. Есть общепринятая трактовка замыкания, в которой замыкается полный лексический контекст. И плюсы не в состоянии обеспечить реализацию этой трактовки. А говорить "вот мы изобрели некоторое малополезное подмножество вашей функциональности, и назвали его точно так же, как полное — вот вам и замыкания" — это нечестно.
Х>не надо выдумывать, в новом с++ именно замыкание, аргументов против так и не увидел, разве отсутствует "замыкание на полный лексический контекст", али что?

"замыкание на полный лексический контекст" и есть то самое замыкание с которого начался разговор. То что может быть когда-нибудь будет в новом стандарте С++ замыканием не станет.
Re[32]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 05.05.09 18:56
Здравствуйте, gandjustas, Вы писали:

G>"замыкание на полный лексический контекст" и есть то самое замыкание с которого начался разговор. То что может быть когда-нибудь будет в новом стандарте С++ замыканием не станет.


Напротив. Это как раз полное классическое замыкание с некоторой спецификой, свойственной C++ (явное разделение ссылок и значений, const/mutable, далее по тексту). То, что лямбда не навязывает обязательной модификации жизненного цикла контекста — есть хорошо, и хорошо весьма.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[32]: Правильная ссылка в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 05.05.09 19:03
Я имел в виду Part 1.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[33]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 05.05.09 20:10
Здравствуйте, Геннадий Васильев, Вы писали:

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


G>>"замыкание на полный лексический контекст" и есть то самое замыкание с которого начался разговор. То что может быть когда-нибудь будет в новом стандарте С++ замыканием не станет.


ГВ>Напротив. Это как раз полное классическое замыкание с некоторой спецификой, свойственной C++ (явное разделение ссылок и значений, const/mutable, далее по тексту). То, что лямбда не навязывает обязательной модификации жизненного цикла контекста — есть хорошо, и хорошо весьма.


Срок жизни такого замыкания ограничен блоком, в котором объявлена лямбда. А значит за пределами этого блока при обращении к лямбде ждет UB. Т.е. лямбду можно передать аргументом, но вернуть в качестве результата ни лямбду, ни что-то ее использующее нельзя. Как можно говорить о классическом замыкании то что работает как замыкание только в одну сторону?
Re[39]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Anton Batenevhttp://antonbatenev.moikrug.ru/
Дата: 05.05.09 20:18
Здравствуйте, criosray, Вы писали:

c> с учетом того, что компьютерное время все более и более дешево в сравнении с человеко-часами, затрачиваемыми на разработку


Зависит от <количества серверов в стойке>.
Re[34]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 05.05.09 20:19
Оценка: +1
Здравствуйте, samius, Вы писали:

S>Срок жизни такого замыкания ограничен блоком, в котором объявлена лямбда. А значит за пределами этого блока при обращении к лямбде ждет UB. Т.е. лямбду можно передать аргументом, но вернуть в качестве результата ни лямбду, ни что-то ее использующее нельзя. Как можно говорить о классическом замыкании то что работает как замыкание только в одну сторону?

в с++ лямбда может копировать контекст по значению, тогда UB отменяется.
People write code, programming languages don't.
Re[34]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 05.05.09 20:50
Оценка:2 (2)
Здравствуйте, samius, Вы писали:

ГВ>>Напротив. Это как раз полное классическое замыкание с некоторой спецификой, свойственной C++ (явное разделение ссылок и значений, const/mutable, далее по тексту). То, что лямбда не навязывает обязательной модификации жизненного цикла контекста — есть хорошо, и хорошо весьма.


S>Срок жизни такого замыкания ограничен блоком, в котором объявлена лямбда. А значит за пределами этого блока при обращении к лямбде ждет UB.


С передачей переменных (собственно — замыканием) дело обстоит точно так же, как и с передачей фактических параметров в функции, возвратом значений, формированием объектов и т.п. То есть можно, например, создать объект, один из членов которого будет ссылаться на локальную переменную:

class A {
  A(int *p) : p_(p){}
  int *p_;
};

A foo() {
  int a;
  return A(&a);
}


Но если так сделать, то ты сам себе недобрый Буратин. Аналогичное ограничение с лямбдами.

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


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

function<void (int)> g = [](int n) { cout << n * n * n << " "; };


vector<int> a;
vector<int> b;

// ...

auto prime = [](const int n) -> bool {
    if (n < 2) {
       return false;
    }

    for (int i = 2; i <= n / i; ++i) {
        if (n % i == 0) {
            return false;
        }
    }
    return true;
};

keep_if(a, prime);
keep_if(b, prime);


Вполне себе функции со вполне себе распознаваемой сигнатурой.

S>Как можно говорить о классическом замыкании то что работает как замыкание только в одну сторону?


ИМХО, можно. Просто вопросы согласования жизненных циклов, как обычно, лежат на программисте. Само по себе замыкание от этого неполноценным не становится, но (как это всегда бывает на C++) нужно контролировать, что именно происходит с твоими переменными.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[33]: Правильная ссылка в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 05.05.09 21:14
Оценка: -1 :)
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Я имел в виду Part 1.


Собственно, что и ожидалось. Недолямбды в недоязыке.

Of course, if a lambda function object outlives local variables that it has captured by reference, you get crashtrocity.


В прочем, это лучше чем есть сейчас. Лучше хоть что-то, чем ничего.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 05.05.09 21:18
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>ИМХО, можно. Просто вопросы согласования жизненных циклов, как обычно, лежат на программисте. Само по себе замыкание от этого неполноценным не становится, но (как это всегда бывает на C++) нужно контролировать, что именно происходит с твоими переменными.


Еще как стаовится. Исчезает целый класс применения.

В общем, будет еще больше багов.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 05.05.09 21:20
Здравствуйте, Хвост, Вы писали:

Х>в с++ лямбда может копировать контекст по значению, тогда UB отменяется.


Ты забыл добавить, что при этом отменяются высокая производительность и некоторые области применения. А как только данные начинают передоваться по ссылке, то здравствуй UB и море багов.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[34]: Правильная ссылка в избранное  новое    модер. 
От: Хвост 
Дата: 05.05.09 21:25
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Собственно, что и ожидалось. Недолямбды в недоязыке.

VD>

VD>Of course, if a lambda function object outlives local variables that it has captured by reference, you get crashtrocity.

во-первых, ето полноценные лямбды и полноценные замыкания, ты ето сам прекрасно знаешь и к чему ета клоунада "недолямбды в недоязыке" мне непонятно, во-вторых, тебе как к очередному фанату управляемой памяти вопрос, где написано что замыкания обязаны захватывать контекст по ссылке и никак иначе?
People write code, programming languages don't.
Re[36]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 05.05.09 21:30
Оценка: +1 -1 :)
Здравствуйте, VladD2, Вы писали:

VD>Ты забыл добавить, что при этом отменяются высокая производительность и некоторые области применения. А как только данные начинают передоваться по ссылке, то здравствуй UB и море багов.

ой ли, ты часто передаёшь лямбды после выхода из scope? как раз таки остутствие гц и возможность захватывать контекст по ссылке обеспечивает экстремальную производительность (нет боксинга для стековых объектов как в дотнете, ага). Ещё раз, ето юмор такой или что? лямбды в с++ предлагают два варианта захвата контекста, причём можно гибко выбирать что захватывать по ссылке, что по значению. Таких гибких лямбд нет ни в одном языке программирования, назвать ето "недолямбдами" и "ограничением области применения" можно разве только по причине шаблонности мышления.
People write code, programming languages don't.
Re[35]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 05.05.09 21:33
Оценка: +1
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>С передачей переменных (собственно — замыканием) дело обстоит точно так же, как и с передачей фактических параметров в функции, возвратом значений, формированием объектов и т.п. То есть можно, например, создать объект, один из членов которого будет ссылаться на локальную переменную:


ГВ>
ГВ>


ГВ>Но если так сделать, то ты сам себе недобрый Буратин. Аналогичное ограничение с лямбдами.

Об этом и говорю.

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


ГВ>Возвращать лямбду как функцию, судя по всему, тоже можно. Вот фрагменты из примеров, которые приведены по той ссылке, что я давал:


ГВ>
ГВ>function<void (int)> g = [](int n) { cout << n * n * n << " "; };
ГВ>

Нет замыкания...

ГВ>
ГВ>vector<int> a;
ГВ>vector<int> b;

ГВ>// ...

ГВ>auto prime = [](const int n) -> bool {
ГВ>    if (n < 2) {
ГВ>       return false;
ГВ>    }

ГВ>    for (int i = 2; i <= n / i; ++i) {
ГВ>        if (n % i == 0) {
ГВ>            return false;
ГВ>        }
ГВ>    }
ГВ>    return true;
ГВ>};

ГВ>keep_if(a, prime);
ГВ>keep_if(b, prime);
ГВ>

И тут нет замыкания

S>>Как можно говорить о классическом замыкании то что работает как замыкание только в одну сторону?


ГВ>ИМХО, можно. Просто вопросы согласования жизненных циклов, как обычно, лежат на программисте. Само по себе замыкание от этого неполноценным не становится, но (как это всегда бывает на C++) нужно контролировать, что именно происходит с твоими переменными.

Т.е. если захотелось передать лямбду с замыканием наружу — то как надо поступить?
Re[36]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 05.05.09 21:34
Здравствуйте, VladD2, Вы писали:

ГВ>>ИМХО, можно. Просто вопросы согласования жизненных циклов, как обычно, лежат на программисте. Само по себе замыкание от этого неполноценным не становится, но (как это всегда бывает на C++) нужно контролировать, что именно происходит с твоими переменными.


VD>Еще как стаовится. Исчезает целый класс применения.


Да ну? И какой же это класс?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[37]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 05.05.09 21:38
Здравствуйте, Геннадий Васильев, Вы писали:

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


ГВ>>>ИМХО, можно. Просто вопросы согласования жизненных циклов, как обычно, лежат на программисте. Само по себе замыкание от этого неполноценным не становится, но (как это всегда бывает на C++) нужно контролировать, что именно происходит с твоими переменными.


VD>>Еще как стаовится. Исчезает целый класс применения.


ГВ>Да ну? И какой же это класс?

http://en.wikipedia.org/wiki/Closure_(computer_science)#Closures_and_first-class_functions
Re[36]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 05.05.09 21:40
Здравствуйте, samius, Вы писали:

S>И тут нет замыкания


Согласен. Но ты лучше посмотри статью по ссылке.

S>Т.е. если захотелось передать лямбду с замыканием наружу — то как надо поступить?


Я думаю, замкнуть контекст надо по значению. Ну, или через shared_ptr — всё как обычно.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[38]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 05.05.09 21:44
Здравствуйте, samius, Вы писали:

VD>>>Еще как стаовится. Исчезает целый класс применения.


ГВ>>Да ну? И какой же это класс?

S>http://en.wikipedia.org/wiki/Closure_(computer_science)#Closures_and_first-class_functions

Э... Ты хочешь сказать, что наличие замыканий в C++0x свидетельствует об отсутствии замыканий в C++0x? Я в самом деле тебя не понимаю.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[35]: Правильная ссылка в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 05.05.09 21:46
Оценка: +1 -1
Здравствуйте, Хвост, Вы писали:

VD>>Собственно, что и ожидалось. Недолямбды в недоязыке.

VD>>

VD>>Of course, if a lambda function object outlives local variables that it has captured by reference, you get crashtrocity.

Х>во-первых, ето полноценные лямбды и полноценные замыкания,

Ага. Для тех кто настоящие не видел.

Х>во-вторых, тебе как к очередному фанату управляемой памяти вопрос,


Фанат это тот кто хвалит даже полное дерьмо лиш на том основании, что он фанат этого дерьма. Я же оцениваю вещи по их качествам.

Х>где написано что замыкания обязаны захватывать контекст по ссылке и никак иначе?


Захват должен быть максимально прозрачным и не нагружать сознание. Детали вроде "по ссылке" или "по значению" засоряют главное достоинство лябды — простоту использования. Программист просто должен создать лямбду и передать ее куда-то или возвратить откуда-то. Если при этом ему прийдется слудить за временем жизни захватываемых значений, то простота использования будет потеряна, а значит и весь кайф лямбды. Если захватываемые значения просто копируются, то многие сценарии использования будут недоступны, да и производительность может пострадать. Плюс копирование может само по себе привести к ошибке.

Реализация предлагаемая в C++0x — это недо-лямбда. Что в полне вписывается в концепции недоязыка — плевать на безопасность и удобсво ради производительности.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[39]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 05.05.09 21:48
Здравствуйте, Геннадий Васильев, Вы писали:

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


VD>>>>Еще как стаовится. Исчезает целый класс применения.


ГВ>>>Да ну? И какой же это класс?

S>>http://en.wikipedia.org/wiki/Closure_(computer_science)#Closures_and_first-class_functions

ГВ>Э... Ты хочешь сказать, что наличие замыканий в C++0x свидетельствует об отсутствии замыканий в C++0x? Я в самом деле тебя не понимаю.


Нет, я просто привел класс применения лямбд, с которым вижу сложности на C++.
Конкретно, как вот это может быть записано с помощью лямбды на С++?
(define (best-selling-books threshold)
  (filter 
    (lambda (book) (>= (book-sales book) threshold))
    book-list))
Re[40]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 05.05.09 21:53
Здравствуйте, samius, Вы писали:

S>Нет, я просто привел класс применения лямбд, с которым вижу сложности на C++.

S>Конкретно, как вот это может быть записано с помощью лямбды на С++?
S>
S>(define (best-selling-books threshold)
S>  (filter 
S>    (lambda (book) (>= (book-sales book) threshold))
S>    book-list))
S>


ненене, не оно. Промахнулся с примером. Хотел пример с возвратом функции
Re[41]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 05.05.09 21:57
Здравствуйте, samius, Вы писали:

S>ненене, не оно. Промахнулся с примером. Хотел пример с возвратом функции


; Return a function that approximates the derivative of f
; using an interval of dx, which should be appropriately small.
(define (derivative f dx)
  (lambda (x) (/ (- (f (+ x dx)) (f x)) dx)))


Этот
Re[40]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 05.05.09 22:19
Здравствуйте, samius, Вы писали:

S>Нет, я просто привел класс применения лямбд, с которым вижу сложности на C++.

S>Конкретно, как вот это может быть записано с помощью лямбды на С++?
S>
S>(define (best-selling-books threshold)
S>  (filter 
S>    (lambda (book) (>= (book-sales book) threshold))
S>    book-list))
S>


Мммм... Если я тебя правильно понял, то имеется в виду такое использование:

(setq best-books (best-selling-books 500))


Тогда аналог приблизительно такой:

ListPtr book_list; // Значение определяется где-то...

typedef ListPtr(*ListFunc)();

ListFunc best_selling_books(long threshold) {
  return filter(book_list, [] (ListItem x) -> bool { return x->book_sales >= threshold; })
}
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[37]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 05.05.09 22:26
Оценка: +1 -1
Здравствуйте, Хвост, Вы писали:

VD>>Ты забыл добавить, что при этом отменяются высокая производительность и некоторые области применения. А как только данные начинают передоваться по ссылке, то здравствуй UB и море багов.

Х>ой ли, ты часто передаёшь лямбды после выхода из scope?

Если ты хотел сказать возвращаешь лябды из функций, то таки — да. Например, весь linq реализован на идее отложенных вычислений и комбинирования лямбд.

Х> как раз таки остутствие гц и возможность захватывать контекст по ссылке обеспечивает экстремальную производительность...


Смешно тебя слушать. Передача контекста по ссылке без автоматического управления памятью обеспечивает исключительно UB, а стало быть проходы по памяти и бессонные ночи в отладчике.

А экстремальную производительность обеспечиваеют исключительно применение качественных алгоритмов и библиотек. Отсутствие GC затрудняет создание как первого, так и второго.

Х> (нет боксинга для стековых объектов как в дотнете, ага).


Ого какие слова ты знаешь!
Дело за малым, осталось понять что за ними скрывается и когда он происходит.

Х> Ещё раз, ето юмор такой или что? лямбды в с++ предлагают два варианта захвата контекста,


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

Х>причём можно гибко выбирать что захватывать по ссылке, что по значению. Таких гибких лямбд нет ни в одном языке программирования, назвать ето "недолямбдами" и "ограничением области применения" можно разве только по причине шаблонности мышления.


Да. Ты полностью прав. Такий лямбд нет ни в одном языке. Такое не пришло в голову даже изобретателям весьма экстравогантного Лиспа. Надо было писать стандарт 12 лет, чтобы тупо забить на безопасность и допускать UB в банальном коде.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[39]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 05.05.09 22:31
Оценка: -1
Здравствуйте, Геннадий Васильев, Вы писали:

VD>>>>Еще как стаовится. Исчезает целый класс применения.


ГВ>>>Да ну? И какой же это класс?

S>>http://en.wikipedia.org/wiki/Closure_(computer_science)#Closures_and_first-class_functions

ГВ>Э... Ты хочешь сказать, что наличие замыканий в C++0x свидетельствует об отсутствии замыканий в C++0x? Я в самом деле тебя не понимаю.


Редкосная демагогия. Просто противно.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[42]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 05.05.09 22:32
Оценка:1 (1)
Здравствуйте, samius, Вы писали:

S>>ненене, не оно. Промахнулся с примером. Хотел пример с возвратом функции


А... Я тоже малость удивился.

S>
S>; Return a function that approximates the derivative of f
S>; using an interval of dx, which should be appropriately small.
S>(define (derivative f dx)
S>  (lambda (x) (/ (- (f (+ x dx)) (f x)) dx)))
S>


S>Этот


Понял. Судя по всему, тоже можно.

typedef double (*Func)(double);

Func derivative(Func f, double dx) {
  return [=](double x) -> double {
    return (f(x + dx) - f(x)) / dx;
  }
}

//...
double val = derivative(func, some_dx)(some_x);


Кстати, интересный вопрос, ответ на который мне пока не ясен, это как на самом деле реализован захват контекста. По идее, где-то должно быть неявное "превращение" функции в объект.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[40]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 05.05.09 22:33
Оценка: +1
Здравствуйте, VladD2, Вы писали:

ГВ>>Э... Ты хочешь сказать, что наличие замыканий в C++0x свидетельствует об отсутствии замыканий в C++0x? Я в самом деле тебя не понимаю.

VD>Редкосная демагогия. Просто противно.

Последи лучше за собой. O'K?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[37]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 05.05.09 22:38
Оценка: -1
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Я думаю, замкнуть контекст надо по значению. Ну, или через shared_ptr — всё как обычно.


Именно! Как обычно — закат солнца вручную...
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[43]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 05.05.09 22:40
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Понял. Судя по всему, тоже можно.


ГВ>
ГВ>typedef double (*Func)(double);

ГВ>Func derivative(Func f, double dx) {
ГВ>  return [=](double x) -> double {
ГВ>    return (f(x + dx) - f(x)) / dx;
ГВ>  }
ГВ>}

ГВ>//...
ГВ>double val = derivative(func, some_dx)(some_x);
ГВ>


ГВ>Кстати, интересный вопрос, ответ на который мне пока не ясен, это как на самом деле реализован захват контекста. По идее, где-то должно быть неявное "превращение" функции в объект.


Может как раз тот случай, когда это вешается на разработчика?

Этот код — это чисто предположение, или компилящийся и выполняющийся?
Re[34]: Правильная ссылка в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 05.05.09 22:47
Здравствуйте, VladD2, Вы писали:

ГВ>>Я имел в виду Part 1.

VD>Собственно, что и ожидалось. Недолямбды в недоязыке.

А где же "замшелые стереотипы" и "косность мышления" "Страуструпа, впавшего в маразм"?

Влад, ну я тебя прям не узнаю.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[35]: Правильная ссылка в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 05.05.09 22:51
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>>Я имел в виду Part 1.

VD>>Собственно, что и ожидалось. Недолямбды в недоязыке.

ГВ>А где же "замшелые стереотипы" и "косность мышления" "Страуструпа, впавшего в маразм"?


ГВ>Влад, ну я тебя прям не узнаю.


В Лиспе замыкания (причем полноценные) появились где-то в пятидесятых годах прошлого века. В С++ даже недозамыканий нет по сей день. Со времени публикации последнего стандарта прошло 11 лет. Так что вопрос риторический. Конечно на месте. Когда на добавление всем известной фичи тратят 12 лет и получают хреновый результат, то ни о чем кроме замшелости говорить не приходится.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[44]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 05.05.09 22:56
Здравствуйте, samius, Вы писали:

S>Может как раз тот случай, когда это вешается на разработчика?


А смысл тогда в лямбдах? Те же объекты.

S>Этот код — это чисто предположение, или компилящийся и выполняющийся?


Пока только предположение. Постараюсь поставить CTP на днях, тогда скажу точнее.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[36]: Правильная ссылка в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 05.05.09 23:06
Здравствуйте, VladD2, Вы писали:

VD>В Лиспе замыкания (причем полноценные) появились где-то в пятидесятых годах прошлого века. В С++ даже недозамыканий нет по сей день. Со времени публикации последнего стандарта прошло 11 лет. Так что вопрос риторический. Конечно на месте. Когда на добавление всем известной фичи тратят 12 лет и получают хреновый результат, то ни о чем кроме замшелости говорить не приходится.


А с чего ты взял, что эти 11-12 лет были потрачены только лишь на добавление одной фичи?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[37]: Правильная ссылка в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 05.05.09 23:35
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>А с чего ты взял, что эти 11-12 лет были потрачены только лишь на добавление одной фичи?


А что если фичей 2 или 6, то это меняет дело? За это время с нуля спроектировали десятки языков. Языки вроде Явы и Шарпа обзавелись большей частью фич которые только обсуждались в С++ох. Скажем методы расширения шарпа были тупо стянуты из одного из реквестов еще в 2002.

12 лет — это строк за который человек вырастает. А они не смогли принять какой-то там стандарт.

За это время обсуждение проблем С++ плавно переросла в обсуждение его реальной необходимости и в итоге просто исчезло так как те кто задавались вопросами просто пересели на другие языки.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[38]: Правильная ссылка в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 06.05.09 01:15
Здравствуйте, VladD2, Вы писали:

ГВ>>А с чего ты взял, что эти 11-12 лет были потрачены только лишь на добавление одной фичи?

VD>А что если фичей 2 или 6, то это меняет дело? За это время с нуля спроектировали десятки языков. Языки вроде Явы и Шарпа обзавелись большей частью фич которые только обсуждались в С++ох. Скажем методы расширения шарпа были тупо стянуты из одного из реквестов еще в 2002.
VD>12 лет — это строк за который человек вырастает. А они не смогли принять какой-то там стандарт.
VD>За это время обсуждение проблем С++ плавно переросла в обсуждение его реальной необходимости и в итоге просто исчезло так как те кто задавались вопросами просто пересели на другие языки.

По-моему, явление по имени "C++" нужно рассматривать в комплексе с такими штуками, как куча производителей, которые реализовывали язык, как заблагорассудится, неторопливой активностью комитета и тем фактом, что некоего единого владельца С++ нет в природе. В отличие от десятков других языков, у которых есть владелец, есть узкий круг лиц, занимающихся развитием и нет "отвязного" комитета. Я не хочу сказать, что второе — плохо, но это главным образом определяет отличия динамики развития C++ от Java, C# и иже с ними.

Так что, как бы там что-то во что-то ни перерастало, и какими бы метафизическими свойствами C++ ни наделялся, но он как раз является плодом объёмного договорного процесса очень разных разработчиков программного обеспечения. "Какой-то там" стандарт можно принимать хоть по десять раз на дню, а такой, что удовлетворит кучу разных участников и принимается не для проформы, вырабатывать, всё же, посложнее. 10-12 лет для таких взаимодействий — не то, что мелочь, а так, цветочек понюхать не успеешь. Хорошо, хоть не разругались. Здесь интересно поведение производителя конкурирующего (якобы) языка. Обрати внимание, Microsoft реализовала стандарт 98-го года только в 2003-м, спустя пять лет после принятия, тогда как нововведения C++0x появились в VS10 CTP до принятия стандарта. С чего бы это MS впереди паровоза понеслась, тогда как раньше относилась к стандарту хорошо, если не наплевательски?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[38]: Addon в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 06.05.09 01:26
Здравствуйте, VladD2, Вы писали:

ГВ>>А с чего ты взял, что эти 11-12 лет были потрачены только лишь на добавление одной фичи?

VD>А что если фичей 2 или 6, то это меняет дело? За это время с нуля спроектировали десятки языков.

Добавим к проблемам развития C++ ещё то, что очень мало кто хочет столкнуться с необходимостью переписывать всё ранее разработанное ПО, чтобы оно компилировалось новыми компиляторами.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[37]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 06.05.09 01:42
Здравствуйте, Хвост, Вы писали:

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


VD>>Ты забыл добавить, что при этом отменяются высокая производительность и некоторые области применения. А как только данные начинают передоваться по ссылке, то здравствуй UB и море багов.

Х>ой ли, ты часто передаёшь лямбды после выхода из scope?
Постоянно. При наличии Linq, у которого отложенное выполнение, лямбды в большенстве случаев живут дольше скоупа.

Х>как раз таки остутствие гц и возможность захватывать контекст по ссылке обеспечивает экстремальную производительность (нет боксинга для стековых объектов как в дотнете, ага).

Возможность захватывать контекст по ссылке без GC обеспечивает море глюков, а копирование — тормоза. Причем избавиться от того и другого одновременно нельзя.
Боксингом мугать никого не надо, для примитивных типов затраты на боксинг минимальны, а более сложные структуры и так передаются по ссылке.

Х>Ещё раз, ето юмор такой или что? лямбды в с++ предлагают два варианта захвата контекста, причём можно гибко выбирать что захватывать по ссылке, что по значению. Таких гибких лямбд нет ни в одном языке программирования, назвать ето "недолямбдами" и "ограничением области применения" можно разве только по причине шаблонности мышления.

Это правда жизни, в С++ — недолямбды, потому что оба варианта, из которых еще надо выбирать, не позволяют решть все задачи, доступные обычным лямбдам.
Re[32]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 06.05.09 02:55
Оценка:2 (1)
Здравствуйте, Mamut, Вы писали:
M>Я имею в виду — что ссылка _ это адрес чего-то, что указатель — это адрес чего-то
Нет-нет-нет, я против. http://blogs.msdn.com/ericlippert/archive/2009/02/17/references-are-not-addresses.aspx
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[44]: Другой вариант в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 06.05.09 04:03
Оценка:2 (2)
Здравствуйте, samius, Вы писали:

S>Может как раз тот случай, когда это вешается на разработчика?


Нет, это именно объект.

S>Этот код — это чисто предположение, или компилящийся и выполняющийся?


Судя по всему, предположение не совсем правильное. Перечитал драфт и обсуждения, кажется, должно быть так:

function<double(double)> derivative(function<double(double)> f, double dx) {
  return [=](double x) -> double {
    return (f(x + dx) - f(x)) / dx;
  }
}


И что касается копирований, то тоже, кажется, ясно. По сути, лямбда — это объект, содержащий замкнутые значения. А дальше — как обычно с объектами. Те же ограничения, те же особенности передачи и сохранения параметров по ссылке и по значению, и т.п.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[38]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 06.05.09 04:21
Здравствуйте, gandjustas, Вы писали:

Х>>как раз таки остутствие гц и возможность захватывать контекст по ссылке обеспечивает экстремальную производительность (нет боксинга для стековых объектов как в дотнете, ага).

G>Возможность захватывать контекст по ссылке без GC обеспечивает море глюков, а копирование — тормоза. Причем избавиться от того и другого одновременно нельзя.

Вот это вот очень сильно бабушка надвое сказала. Всегда остаётся возможность оптимизировать передачу захватом по ссылке и одновременным контролем жизненного цикла. Собственно, это обычная техника для C++.

G>Боксингом мугать никого не надо, для примитивных типов затраты на боксинг минимальны, а более сложные структуры и так передаются по ссылке.


Тормозами тоже пугать никого не надо. (<- косность мозга, тузик, тряпка)

Х>>Ещё раз, ето юмор такой или что? лямбды в с++ предлагают два варианта захвата контекста, причём можно гибко выбирать что захватывать по ссылке, что по значению. Таких гибких лямбд нет ни в одном языке программирования, назвать ето "недолямбдами" и "ограничением области применения" можно разве только по причине шаблонности мышления.

G>Это правда жизни, в С++ — недолямбды, потому что оба варианта, из которых еще надо выбирать, не позволяют решть все задачи, доступные обычным лямбдам.

Похоже, что ты не прав. Хотя, конечно, никто тебе не запретит называть C++-ные лямбды "недолямбдами".
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[39]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 06.05.09 05:29
Оценка: -1
Здравствуйте, Геннадий Васильев, Вы писали:

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


Х>>>как раз таки остутствие гц и возможность захватывать контекст по ссылке обеспечивает экстремальную производительность (нет боксинга для стековых объектов как в дотнете, ага).

G>>Возможность захватывать контекст по ссылке без GC обеспечивает море глюков, а копирование — тормоза. Причем избавиться от того и другого одновременно нельзя.

ГВ>Вот это вот очень сильно бабушка надвое сказала. Всегда остаётся возможность оптимизировать передачу захватом по ссылке и одновременным контролем жизненного цикла. Собственно, это обычная техника для C++.

Ага, "контроль жазненного цикла" обычно как делается? shared_ptr или другой подсчет ссылок. Иначе получаете трудноуловимые баги при изменениях.
А shared_ptr — дополнительный оверхед к распределению памяти в куче.
Очень странная ситуация для "языка без оверхедов"

Х>>>Ещё раз, ето юмор такой или что? лямбды в с++ предлагают два варианта захвата контекста, причём можно гибко выбирать что захватывать по ссылке, что по значению. Таких гибких лямбд нет ни в одном языке программирования, назвать ето "недолямбдами" и "ограничением области применения" можно разве только по причине шаблонности мышления.

G>>Это правда жизни, в С++ — недолямбды, потому что оба варианта, из которых еще надо выбирать, не позволяют решть все задачи, доступные обычным лямбдам.
ГВ>Похоже, что ты не прав. Хотя, конечно, никто тебе не запретит называть C++-ные лямбды "недолямбдами".
Ну также как другим никто не запретит называть недолямбды С++ (которых пока еще нету) лямбдами.
Re[40]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 06.05.09 05:42
Оценка: :)
Здравствуйте, gandjustas, Вы писали:

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


Обычно он делается по-разному, это раз. Баги согласования жизненных циклов ловятся не труднее, чем любые другие — это два.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[41]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 06.05.09 05:50
Здравствуйте, Геннадий Васильев, Вы писали:

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


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


ГВ>Обычно он делается по-разному, это раз. Баги согласования жизненных циклов ловятся не труднее, чем любые другие — это два.


Ну как например?
Re[39]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 06.05.09 05:56
Оценка: +1 :)
Здравствуйте, Геннадий Васильев, Вы писали:

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


G>>Боксингом мугать никого не надо, для примитивных типов затраты на боксинг минимальны, а более сложные структуры и так передаются по ссылке.

ГВ>Тормозами тоже пугать никого не надо. (<- косность мозга, тузик, тряпка)
Хоспадя, да нет там боксинга. Один ни черта не разбирающийся ляпнул, другой зачем то ответил, третий зацепился...
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[45]: Другой вариант в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 06.05.09 10:25
Здравствуйте, Геннадий Васильев, Вы писали:

S>>Этот код — это чисто предположение, или компилящийся и выполняющийся?


ГВ>Судя по всему, предположение не совсем правильное. Перечитал драфт и обсуждения, кажется, должно быть так:


ГВ>
ГВ>function<double(double)> derivative(function<double(double)> f, double dx) {
ГВ>  return [=](double x) -> double {
ГВ>    return (f(x + dx) - f(x)) / dx;
ГВ>  }
ГВ>}


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

Невполне ясно.

Поправь меня если ошибаюсь:
согласно моим представлениям, приведенное выше предположение должно быть транслировано во что-то следующее:

class LambdaFunctor {
public:
    LambdaFunctor(function<double(double)> f, double dx) : m_f(f), m_dx(dx) { }
    double operator()(double x) const { return m_f(x + m_dx) - m_f(x)/m_dx; }
private:
    function<double(double)> m_f;
    double m_dx;
};

function<double(double)> derivative(function<double(double)> f, double dx) {
  return LambdaFunctor(f, dx);
  }
}

Разве возвращается не обертка над объектом на стеке? Копирования я тут не вижу. А даже если бы оно было, разве обертка управляет временем жизни того, что она обертывает? (Кстати, эта обертка — аналог boost-овской?)
Re[38]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 06.05.09 11:36
Оценка:1 (1)
Здравствуйте, VladD2, Вы писали:

VD>Ага. Причем юмор начинается со слов "лямбды в с++" ибо на сегодня в С++ нет даже тех недолямбд которые описаны в С++ох (читать как си-плюс-плюс ох).

Ну в С++0х они есть. Компилеры с лямбдами тоже есть (ICC).
Удивительно, но из всего что появилось в ICC из С++0х применения в живых проектах не нашли только лямбды.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[43]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 06.05.09 11:36
Оценка:4 (2)
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Кстати, интересный вопрос, ответ на который мне пока не ясен, это как на самом деле реализован захват контекста. По идее, где-то должно быть неявное "превращение" функции в объект.


Может вот это (документация к ICC) поможет:

Lambda Function Object

The compiler creates an anonymous function object upon evaluating a lambda expression.
This function object, created by a lambda expression, may live longer than the block in which it is created. You must ensure that it does not use variables that were destroyed before the function object is used.
The following example shows how a function object created by a lambda expression can outlive the function that creates it.
struct Base {
    virtual bool test(int x) = 0;
};
template<typename F>
struct Derived: Base {
    F f;
    bool test(int x) {return f(x);}
    Derived(F f_) : f(f_) {}
};
template<typename F>
Base* MakeDerived( F f ) {
    return new Derived<F>(f);
}
Base* Foo( int k ) {
    return MakeDerived( [k](int x) {return x%k==3;} );
}
bool Bar() {
    Base* b = Foo(3);
    return b->test(6);
}

In the above example, Bar invokes Foo, which copies the function object generated by a lambda expression into an instance of template class Derived. The lambda expression refers to a local variable k. Although the code destroys k before using the copied function object, the code is safe because k was captured by copy.

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[40]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 06.05.09 12:38
Здравствуйте, MxKazan, Вы писали:

MK>Хоспадя, да нет там боксинга. Один ни черта не разбирающийся ляпнул, другой зачем то ответил, третий зацепился...


...короче говоря, на форуме КСВ было скучно и тихо.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[42]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 06.05.09 12:39
Здравствуйте, gandjustas, Вы писали:

ГВ>>Обычно он делается по-разному, это раз. Баги согласования жизненных циклов ловятся не труднее, чем любые другие — это два.


G>Ну как например?


Есть ещё совсем ничего не подсчитывающий auto_ptr. Как минимум.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[46]: Другой вариант в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 06.05.09 12:53
Здравствуйте, samius, Вы писали:

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

S>Невполне ясно.

S>Поправь меня если ошибаюсь:

S>согласно моим представлениям, приведенное выше предположение должно быть транслировано во что-то следующее:

S>
S>class LambdaFunctor {
S>public:
S>    LambdaFunctor(function<double(double)> f, double dx) : m_f(f), m_dx(dx) { }
S>    double operator()(double x) const { return m_f(x + m_dx) - m_f(x)/m_dx; }
S>private:
S>    function<double(double)> m_f;
S>    double m_dx;
S>};

S>function<double(double)> derivative(function<double(double)> f, double dx) {
S>  return LambdaFunctor(f, dx);
S>  }
S>}
S>


ИМХО, похоже.

S>Разве возвращается не обертка над объектом на стеке?


Нет, это не обёртка над стеком: m_f, m_dx — собственные члены объекта.

S>Копирования я тут не вижу.


1. В конструкторе: "m_f(f), m_dx(dx)" — это копирования аргумента и указателя на функцию.
2. Неявно сгенерированный конструктор копирования: LambdaFunctor(const LambdaFunctor &). Если какая-то функция вернёт LambdaFunctor (например, как делает derivative: return LambdaFunctor(f, dx)), то вызван будет как раз этот конструктор копирования.

S>А даже если бы оно было, разве обертка управляет временем жизни того, что она обертывает?


Повторюсь, это не обёртка.

S>Кстати, эта обертка — аналог boost-овской?


Скорее, это обычный функтор. boost-овые лямбды сильно посложнее.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[39]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 06.05.09 13:38
Оценка:1 (1)
Здравствуйте, CreatorCray, Вы писали:

CC>Удивительно, но из всего что появилось в ICC из С++0х применения в живых проектах не нашли только лямбды.


Что даже не сильно удивляет. Длинные и многоярусные лямбды противоречат принципам реюзинга, "обычные" функторы могут быть предпочтительнее с этой точки зрения. Больше того, даже два использования какой-нибудь коротенькой лямбды типа "x >= SOMETHING_LOW && x <= SOMETHING_HIGH" уже побуждают сделать вместо неё обычную функцию или функтор, и обращаться к ним по собственному имени.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[40]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 06.05.09 13:50
Оценка: -1
Здравствуйте, Геннадий Васильев, Вы писали:

CC>>Удивительно, но из всего что появилось в ICC из С++0х применения в живых проектах не нашли только лямбды.


ГВ>Что даже не сильно удивляет. Длинные и многоярусные лямбды противоречат принципам реюзинга, "обычные" функторы могут быть предпочтительнее с этой точки зрения. Больше того, даже два использования какой-нибудь коротенькой лямбды типа "x >= SOMETHING_LOW && x <= SOMETHING_HIGH" уже побуждают сделать вместо неё обычную функцию или функтор, и обращаться к ним по собственному имени.


Это то о чем Вам говорил Влад. Лямбды С++ — неудобные недолямбды. Потому ими и не пользуются.
Re[39]: Addon в избранное  новое    модер. 
От: criosray 
Дата: 06.05.09 13:52
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>>А с чего ты взял, что эти 11-12 лет были потрачены только лишь на добавление одной фичи?

VD>>А что если фичей 2 или 6, то это меняет дело? За это время с нуля спроектировали десятки языков.

ГВ>Добавим к проблемам развития C++ ещё то, что очень мало кто хочет столкнуться с необходимостью переписывать всё ранее разработанное ПО, чтобы оно компилировалось новыми компиляторами.


Компилятор С# 3.0 прекрасно справляется со сборкой С# 1 исходников. Интересно, к чему бы это...
Re[39]: Правильная ссылка в избранное  новое    модер. 
От: criosray 
Дата: 06.05.09 13:55
Оценка: +1
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>По-моему, явление по имени "C++" нужно рассматривать в комплексе с такими штуками, как куча производителей, которые реализовывали язык, как заблагорассудится, неторопливой активностью комитета и тем фактом, что некоего единого владельца С++ нет в природе. В отличие от десятков других языков, у которых есть владелец, есть узкий круг лиц, занимающихся развитием и нет "отвязного" комитета. Я не хочу сказать, что второе — плохо, но это главным образом определяет отличия динамики развития C++ от Java, C# и иже с ними.


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

ГВ>Так что, как бы там что-то во что-то ни перерастало, и какими бы метафизическими свойствами C++ ни наделялся, но он как раз является плодом объёмного договорного процесса очень разных разработчиков программного обеспечения. "Какой-то там" стандарт можно принимать хоть по десять раз на дню, а такой, что удовлетворит кучу разных участников и принимается не для проформы, вырабатывать, всё же, посложнее. 10-12 лет для таких взаимодействий — не то, что мелочь, а так, цветочек понюхать не успеешь.


Ой, ну может хватит чушь молоть-то? 10-12 лет это МОРЕ времени. Посмотрите на С# и Nemerle, которых 12 лет тому назад еще и в планах не было.
Re[41]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 06.05.09 14:09
Оценка: +1 -2
Здравствуйте, criosray, Вы писали:

ГВ>>Что даже не сильно удивляет. Длинные и многоярусные лямбды противоречат принципам реюзинга, "обычные" функторы могут быть предпочтительнее с этой точки зрения. Больше того, даже два использования какой-нибудь коротенькой лямбды типа "x >= SOMETHING_LOW && x <= SOMETHING_HIGH" уже побуждают сделать вместо неё обычную функцию или функтор, и обращаться к ним по собственному имени.


C>Это то о чем Вам говорил Влад. Лямбды С++ — неудобные недолямбды. Потому ими и не пользуются.


Дело не в удобстве, а в культуре программирования.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[40]: Addon в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 06.05.09 14:10
Здравствуйте, criosray, Вы писали:

ГВ>>Добавим к проблемам развития C++ ещё то, что очень мало кто хочет столкнуться с необходимостью переписывать всё ранее разработанное ПО, чтобы оно компилировалось новыми компиляторами.


C>Компилятор С# 3.0 прекрасно справляется со сборкой С# 1 исходников. Интересно, к чему бы это...


Я думаю, что это к тому, что компилятор С# 3.0 прекрасно справляется со сборкой С# 1 исходников.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[42]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 06.05.09 14:22
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>>Что даже не сильно удивляет. Длинные и многоярусные лямбды противоречат принципам реюзинга, "обычные" функторы могут быть предпочтительнее с этой точки зрения. Больше того, даже два использования какой-нибудь коротенькой лямбды типа "x >= SOMETHING_LOW && x <= SOMETHING_HIGH" уже побуждают сделать вместо неё обычную функцию или функтор, и обращаться к ним по собственному имени.


C>>Это то о чем Вам говорил Влад. Лямбды С++ — неудобные недолямбды. Потому ими и не пользуются.


ГВ>Дело не в удобстве, а в культуре программирования.


При чем тут "культура"? Вот в С# лямбды широко используются, не смотря на то, что язык, как и С++ императивный, а не функциональный. Просто потому, что там это УДОБНО.
Re[41]: Addon в избранное  новое    модер. 
От: criosray 
Дата: 06.05.09 14:23
Здравствуйте, Геннадий Васильев, Вы писали:


ГВ>>>Добавим к проблемам развития C++ ещё то, что очень мало кто хочет столкнуться с необходимостью переписывать всё ранее разработанное ПО, чтобы оно компилировалось новыми компиляторами.


C>>Компилятор С# 3.0 прекрасно справляется со сборкой С# 1 исходников. Интересно, к чему бы это...


ГВ>Я думаю, что это к тому, что компилятор С# 3.0 прекрасно справляется со сборкой С# 1 исходников.


"ГВ>>Добавим к проблемам развития C++ ещё то, что очень мало кто хочет столкнуться с необходимостью переписывать всё ранее разработанное ПО, чтобы оно компилировалось новыми компиляторами."
Re[47]: Другой вариант в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 06.05.09 14:29
Здравствуйте, Геннадий Васильев, Вы писали:

S>>Разве возвращается не обертка над объектом на стеке?


ГВ>Нет, это не обёртка над стеком: m_f, m_dx — собственные члены объекта.

догадался

S>>Копирования я тут не вижу.


ГВ>1. В конструкторе: "m_f(f), m_dx(dx)" — это копирования аргумента и указателя на функцию.

ГВ>2. Неявно сгенерированный конструктор копирования: LambdaFunctor(const LambdaFunctor &). Если какая-то функция вернёт LambdaFunctor (например, как делает derivative: return LambdaFunctor(f, dx)), то вызван будет как раз этот конструктор копирования.
Ок, функция возвращает копию. Но вызывающая сторона принимает function<double(double)>. Что это? Я подумал, что это "Polymorphous wrapper for function object". Но я не знаю физики этого понятия. Какое отношение тип function<double(double)> имеет к возвращаемой копии экземпляра LambdaFunctor?

S>>А даже если бы оно было, разве обертка управляет временем жизни того, что она обертывает?

ГВ>Повторюсь, это не обёртка.
Точно?

S>>Кстати, эта обертка — аналог boost-овской?


ГВ>Скорее, это обычный функтор. boost-овые лямбды сильно посложнее.

функтор — это экземпляр объекта. Экземпляр может быть таким или этаким, когда принимающая сторона знает каким он будет — тут все поянтно, т.к. на стеке выделится память под экземпляр. А что есть function<double(double)>.

З.Ы. Извиняюсь за нубские вопросы, с C++ не имел дела с выхода шарпа. В поиске нашел только вот это.
Re[40]: Правильная ссылка в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 06.05.09 14:32
Здравствуйте, criosray, Вы писали:

ГВ>>[...] но это главным образом определяет отличия динамики развития C++ от Java, C# и иже с ними.

C>Да, это не плохо, что язык застрял на мертвой точке и вот уже больше 10 лет сдвинуться с нее не может. Это просто замечательно.

ИМХО, это real world и ничего больше. И потом, как видишь, ничего он не застрял. Что за манера называть синее зелёным?

ГВ>>Так что, как бы там что-то во что-то ни перерастало, и какими бы метафизическими свойствами C++ ни наделялся, но он как раз является плодом объёмного договорного процесса очень разных разработчиков программного обеспечения. "Какой-то там" стандарт можно принимать хоть по десять раз на дню, а такой, что удовлетворит кучу разных участников и принимается не для проформы, вырабатывать, всё же, посложнее. 10-12 лет для таких взаимодействий — не то, что мелочь, а так, цветочек понюхать не успеешь.


C>Ой, ну может хватит чушь молоть-то? 10-12 лет это МОРЕ времени. Посмотрите на С# и Nemerle, которых 12 лет тому назад еще и в планах не было.


Скажем так, я изложил свои соображения, почему считаю, что в данном случае 10-12 лет — не так уж и долго, как может показаться на первый взгляд. Не буду спорить с тем, что на первый взгляд 10-12 лет — это уйма времени. C# и Nemerle в данном случае не уместный пример, поскольку у этих языков есть владелец, Главные Разработчики и т.п. Стандарта ANSI, насколько я знаю, ни на тот ни на другой — нет (вот только про ECMA в данном контексте упоминать не стоит, это не смешно).
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[42]: Addon в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 06.05.09 14:33
Здравствуйте, criosray, Вы писали:

C>>>Компилятор С# 3.0 прекрасно справляется со сборкой С# 1 исходников. Интересно, к чему бы это...

ГВ>>Я думаю, что это к тому, что компилятор С# 3.0 прекрасно справляется со сборкой С# 1 исходников.
C>"ГВ>>Добавим к проблемам развития C++ ещё то, что очень мало кто хочет столкнуться с необходимостью переписывать всё ранее разработанное ПО, чтобы оно компилировалось новыми компиляторами."

И при чём здесь C#?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[43]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 06.05.09 14:39
Здравствуйте, criosray, Вы писали:

ГВ>>>>Что даже не сильно удивляет. Длинные и многоярусные лямбды противоречат принципам реюзинга, "обычные" функторы могут быть предпочтительнее с этой точки зрения. Больше того, даже два использования какой-нибудь коротенькой лямбды типа "x >= SOMETHING_LOW && x <= SOMETHING_HIGH" уже побуждают сделать вместо неё обычную функцию или функтор, и обращаться к ним по собственному имени.


C>>>Это то о чем Вам говорил Влад. Лямбды С++ — неудобные недолямбды. Потому ими и не пользуются.

ГВ>>Дело не в удобстве, а в культуре программирования.
C>При чем тут "культура"? Вот в С# лямбды широко используются, не смотря на то, что язык, как и С++ императивный, а не функциональный. Просто потому, что там это УДОБНО.

Ну ё-моё, ты хоть прочти то, чему возражаешь:

Больше того, даже два использования какой-нибудь коротенькой лямбды типа "x >= SOMETHING_LOW && x <= SOMETHING_HIGH" уже побуждают сделать вместо неё обычную функцию или функтор, и обращаться к ним по собственному имени.


Это был раз. А два, так я вот, например, вполне даже пользуюсь лямбдами (бустовыми). Но совершенно не удивляюсь, что кто-то другой ими не пользуется (только не заводи опять шарманку, что это невозможно и неудобно использовать).
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[48]: Другой вариант в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 06.05.09 15:00
Здравствуйте, samius, Вы писали:

S>Ок, функция возвращает копию. Но вызывающая сторона принимает function<double(double)>. Что это? Я подумал, что это "Polymorphous wrapper for function object". Но я не знаю физики этого понятия.


См. ниже.

S>Какое отношение тип function<double(double)> имеет к возвращаемой копии экземпляра LambdaFunctor?


М-м-м... Да, приведение типов я прозевал. function<double(double)> (теоретически) может ссылаться на экземпляр LambdaFunctor и вызывать LambdaFunctor::operator()(double). Правда для этого вполне может понадобиться разместить экземпляр LambdaFunctor в динамической памяти с подсчётом ссылок, управлением и всей свитой.

S>>>А даже если бы оно было, разве обертка управляет временем жизни того, что она обертывает?

ГВ>>Повторюсь, это не обёртка.
S>Точно?

Ну а что она оборачивает? Разве что вызов f через оператор.

S>>>Кстати, эта обертка — аналог boost-овской?

ГВ>>Скорее, это обычный функтор. boost-овые лямбды сильно посложнее.
S>функтор — это экземпляр объекта. Экземпляр может быть таким или этаким, когда принимающая сторона знает каким он будет — тут все поянтно, т.к. на стеке выделится память под экземпляр. А что есть function<double(double)>.

По-простому — это шаблон, инстанцированный типом double(double), сиречь — сигнатурой функции double func(double). В бусте это — довольно хитрый шаблон, там есть собственный менеджер, shared_ptr-ы, динамическая память... До фига всего. Мне интересно, как это реализовали в C++0x. Заморочка понятна: если по сигнатуре мы ещё можем точно вычислить размер памяти, необходимый для хранения параметров и соответственно их скопировать, то когда появляются ещё и локальные переменные, всё становится намного интереснее. Либо динамическая память, либо ещё какой-то механизм неявного "дораспределения" памяти для таких переменных.

S>З.Ы. Извиняюсь за нубские вопросы, с C++ не имел дела с выхода шарпа. В поиске нашел только вот это.


Что касается C++0x, то на данный момент я точно такой же нуб. Я ж говорю, что живого компилятора ещё в руках не держал.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[43]: Addon в избранное  новое    модер. 
От: criosray 
Дата: 06.05.09 15:01
Здравствуйте, Геннадий Васильев, Вы писали:

C>>>>Компилятор С# 3.0 прекрасно справляется со сборкой С# 1 исходников. Интересно, к чему бы это...

ГВ>>>Я думаю, что это к тому, что компилятор С# 3.0 прекрасно справляется со сборкой С# 1 исходников.
C>>"ГВ>>Добавим к проблемам развития C++ ещё то, что очень мало кто хочет столкнуться с необходимостью переписывать всё ранее разработанное ПО, чтобы оно компилировалось новыми компиляторами."

ГВ>И при чём здесь C#?


С# пример того, что можно очень активно развивать язык, сохраняя "обратную совместимость" на уровне компилятора.
Re[44]: Addon в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 06.05.09 15:20
Здравствуйте, criosray, Вы писали:

C>>>>>Компилятор С# 3.0 прекрасно справляется со сборкой С# 1 исходников. Интересно, к чему бы это...

ГВ>>>>Я думаю, что это к тому, что компилятор С# 3.0 прекрасно справляется со сборкой С# 1 исходников.
C>>>"ГВ>>Добавим к проблемам развития C++ ещё то, что очень мало кто хочет столкнуться с необходимостью переписывать всё ранее разработанное ПО, чтобы оно компилировалось новыми компиляторами."
ГВ>>И при чём здесь C#?
C>С# пример того, что можно очень активно развивать язык, сохраняя "обратную совместимость" на уровне компилятора.

А кто спорит с тем, что это можно? Я только констатирую возможные соображения, которые влияют на развитие C++.

С другой стороны, в период 2000-2003 был вполне себе ощутимый конфликт между возможностями Intel C++ и MSVC++. Собственно, разнобой в возможностях компиляторов вполне сохранился и по сей день (в том же бусте куча кода посвящена как раз этому разнобою). Хотя да, можно сохранять совместимость, а вот тем не менее.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[39]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 06.05.09 15:44
Здравствуйте, CreatorCray, Вы писали:

VD>>Ага. Причем юмор начинается со слов "лямбды в с++" ибо на сегодня в С++ нет даже тех недолямбд которые описаны в С++ох (читать как си-плюс-плюс ох).

CC>Ну в С++0х они есть. Компилеры с лямбдами тоже есть (ICC).
CC>Удивительно, но из всего что появилось в ICC из С++0х применения в живых проектах не нашли только лямбды.

Для особо одаренных повторяю. Нет никакого С++0х. С++0х — это рабочее название черновика.

А в "кампилирах" есть еще свойства и поддержка COM. И что с того?
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[40]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 06.05.09 16:09
Здравствуйте, VladD2, Вы писали:

VD>Для особо одаренных повторяю. Нет никакого С++0х. С++0х — это рабочее название черновика.


Хорошо, C++0x в данном контексте — это эвфемизм для "C++ Standard Draft Which Is Close To Approve By The Appropriate Standard Commitee".

VD>А в "кампилирах" есть еще свойства и поддержка COM. И что с того?


В компиляторах много чего есть, но не всё из этого планируется к принятию в виде стандарта.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[41]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 06.05.09 18:38
Здравствуйте, Геннадий Васильев, Вы писали:

VD>>А в "кампилирах" есть еще свойства и поддержка COM. И что с того?


ГВ>В компиляторах много чего есть, но не всё из этого планируется к принятию в виде стандарта.


Оно уже 11 лет планируется. Так что говорить о чем-то будет можно только когда стандарт выйдет. О чем я и говорил.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[43]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 06.05.09 19:26
Здравствуйте, Геннадий Васильев, Вы писали:

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


ГВ>>>Обычно он делается по-разному, это раз. Баги согласования жизненных циклов ловятся не труднее, чем любые другие — это два.


G>>Ну как например?


ГВ>Есть ещё совсем ничего не подсчитывающий auto_ptr. Как минимум.


Семантика владения в лямбде никак не подойдет. Еще варианты есть?
Может всетаки уже стоит признать что в С++ в обозримом будущем не будет нормальных лямбд.
Re[42]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 06.05.09 19:35
Здравствуйте, VladD2, Вы писали:

VD>>>А в "кампилирах" есть еще свойства и поддержка COM. И что с того?

ГВ>>В компиляторах много чего есть, но не всё из этого планируется к принятию в виде стандарта.
VD>Оно уже 11 лет планируется. Так что говорить о чем-то будет можно только когда стандарт выйдет. О чем я и говорил.

Отнюдь. Даже если в окончательную версию стандарта лямбды не войдут (что выглядит фантастично), их из компиляторов никто убирать не будет (это выглядит ещё более фантастичным). Поэтому с формальной точки зрения ты прав — стандарта ещё нет, и казалось бы, обсуждать нечего, но коль скоро на практике фичи в компиляторах уже есть (больше того, описание фич прямо ссылается на драфт стандарта), следовательно, утверждать, что их нет — абсурд. И следовательно, нам вполне есть, что обсуждать.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[44]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 06.05.09 19:39
Здравствуйте, gandjustas, Вы писали:

ГВ>>Есть ещё совсем ничего не подсчитывающий auto_ptr. Как минимум.

G>Семантика владения в лямбде никак не подойдет. Еще варианты есть?

Почему не подойдёт? Как по мне, так вполне подойдёт.

G>Может всетаки уже стоит признать что в С++ в обозримом будущем не будет нормальных лямбд.


Знаешь, это очень сильное колдунство — признавать отсутствие наличествующего. "Видишь суслика? А его нет!"
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[43]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 06.05.09 21:48
Оценка: -1
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Отнюдь. Даже если в окончательную версию стандарта лямбды не войдут (что выглядит фантастично), их из компиляторов никто убирать не будет


Еще как будут, как убирали несоответствия с 98-ым стандартом.

ГВ>Поэтому с формальной точки зрения ты прав — стандарта ещё нет, и казалось бы, обсуждать нечего, но коль скоро на практике фичи в компиляторах уже есть (больше того, описание фич прямо ссылается на драфт стандарта), следовательно, утверждать, что их нет — абсурд. И следовательно, нам вполне есть, что обсуждать.


Никаких расширений пока нет. Речь идет о бэтах которые не зарелизятся до 2010 года.

Мне кажется, что включение фич из черновика стандарта является своеобразным протестом против глупого затягивания его принятия и способом подтолкнуть его принятие хоть в каком-то виде, потому как комитет давно живет ради собственного развлечения.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[44]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 06.05.09 23:13
Здравствуйте, VladD2, Вы писали:

ГВ>>Отнюдь. Даже если в окончательную версию стандарта лямбды не войдут (что выглядит фантастично), их из компиляторов никто убирать не будет

VD>Еще как будут, как убирали несоответствия с 98-ым стандартом.

Маловероятно. И первое, и второе. Гораздо более вероятно, что как и с 98-м стандартом, начнётся вакханалия, как это было во времена VC6 — сколько компиляторов, столько реализаций шаблонов. Здесь будут другие заморочки.

ГВ>>Поэтому с формальной точки зрения ты прав — стандарта ещё нет, и казалось бы, обсуждать нечего, но коль скоро на практике фичи в компиляторах уже есть (больше того, описание фич прямо ссылается на драфт стандарта), следовательно, утверждать, что их нет — абсурд. И следовательно, нам вполне есть, что обсуждать.


VD>Никаких расширений пока нет. Речь идет о бэтах которые не зарелизятся до 2010 года.


Ну и что? Значит эти расширения пока в бетах. Факт их существования не отменяется.

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


Да не так всё просто, судя по всему. Где-то пробегало, что это составляющая процедуры принятия стандарта — разработчики компиляторов получают некоторый запас времени для предварительной реализации фич. Есть ещё и сугубо ISO-шные процедуры принятия стандарта, которые, как я понимаю, должны пройти после того, как окончательный драфт стандарта будет одобрен комитетом. В общем, в этой бюрократии я не силён, но похоже, что твои высказывания о "протесте против затягивания" и "ради собственного развлечения" не совсем отражают действительность.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[45]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 01:41
Оценка: :)
Здравствуйте, Геннадий Васильев, Вы писали:

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


ГВ>>>Есть ещё совсем ничего не подсчитывающий auto_ptr. Как минимум.

G>>Семантика владения в лямбде никак не подойдет. Еще варианты есть?
ГВ>Почему не подойдёт? Как по мне, так вполне подойдёт.


G>>Может всетаки уже стоит признать что в С++ в обозримом будущем не будет нормальных лямбд.

ГВ>Знаешь, это очень сильное колдунство — признавать отсутствие наличествующего. "Видишь суслика? А его нет!"
Точно, ты ведь до сих пор не признаешь что нету и не будет в С++ нормальных лямбд, а в других языках есть.
Re[46]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 02:11
Оценка:1 (1) +2 -1 :)
Здравствуйте, gandjustas, Вы писали:

G>>>Может всетаки уже стоит признать что в С++ в обозримом будущем не будет нормальных лямбд.

ГВ>>Знаешь, это очень сильное колдунство — признавать отсутствие наличествующего. "Видишь суслика? А его нет!"
G>Точно, ты ведь до сих пор не признаешь что нету и не будет в С++ нормальных лямбд, а в других языках есть.

Круто, давно не встречал фраз, построенных таким образом. Ты меня, правда, за ребёнка держишь? Или за подчинённого, которого можно заставить верить в любую ахинею? Ладно, шутка, не обижайся.

Теперь — по топику.

Я признаю наличие в других языках других реализаций лямбд. Но я не считаю "единственно нормальной" реализацию лямбд в каком-то определённом языке, или их наборе. Например, то, что лямбды в "других" языках непременно требуют вовлечения GC я считаю изъяном их реализации, пусть и повсеместно встречающимся. Я, например, знаю, что использование лямбда-выражений не всегда требует отдельного управления жизненным циклом замкнутых переменных. Отсюда, я не думаю, что непременное привлечение GC — "нормально", т.е., сродни эталону.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[46]: Ещё Addon в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 02:31
G>Точно, ты ведь до сих пор не признаешь что нету и не будет в С++ нормальных лямбд, а в других языках есть.

Ты только функциональщикам не говори о "нормальности" лямбд, допускающих побочные эффекты. Могут и на смех поднять.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[47]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 04:33
Оценка: +1
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Я признаю наличие в других языках других реализаций лямбд. Но я не считаю "единственно нормальной" реализацию лямбд в каком-то определённом языке, или их наборе. Например, то, что лямбды в "других" языках непременно требуют вовлечения GC я считаю изъяном их реализации, пусть и повсеместно встречающимся. Я, например, знаю, что использование лямбда-выражений не всегда требует отдельного управления жизненным циклом замкнутых переменных. Отсюда, я не думаю, что непременное привлечение GC — "нормально", т.е., сродни эталону.

А другие варианты есть? Явное управление временем жизни не подойдет, надеюсь это понятно.
Re[48]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 07.05.09 05:35
Здравствуйте, gandjustas, Вы писали:


G>А другие варианты есть? Явное управление временем жизни не подойдет, надеюсь это понятно.


Вариантов нет. Не спорьте с ним — пустая трата времени.
Re[44]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 07.05.09 07:16
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Ну ё-моё, ты хоть прочти то, чему возражаешь:


ГВ>

Больше того, даже два использования какой-нибудь коротенькой лямбды типа "x >= SOMETHING_LOW && x <= SOMETHING_HIGH" уже побуждают сделать вместо неё обычную функцию или функтор, и обращаться к ним по собственному имени.

И что? От двукратного прочтения фигня фигней быть не перестанет.
Потому, что два использования коротенькой лямбды типа "x >= SOMETHING_LOW && x <= SOMETHING_HIGH" побуждают к вот такому:

var isWithinRange = (int x) => x >= SOMETHING_LOW && x <= SOMETHING_HIGH;

А вовсе не к обычной функции или функтору. Потому, что так — удобно.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[40]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 07.05.09 08:14
Оценка: :)
Здравствуйте, VladD2, Вы писали:

VD>Для особо одаренных повторяю. Нет никакого С++0х. С++0х — это рабочее название черновика.

Камрад, от того, что ты твердишь "нету его" он не исчезнет.
Он есть, и используется. Это факт.

VD>А в "кампилирах" есть еще свойства и поддержка COM. И что с того?

Это к терапевту.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[42]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 07.05.09 08:14
Здравствуйте, VladD2, Вы писали:

ГВ>>В компиляторах много чего есть, но не всё из этого планируется к принятию в виде стандарта.

VD>Оно уже 11 лет планируется. Так что говорить о чем-то будет можно только когда стандарт выйдет. О чем я и говорил.
Ты так цепляешься за жалкую отмазку "еще не вышел" как будто больше сказать нечего.
Какая мне например разница, вышел он или нет. Гораздо важнее что уже есть реализация в промышленных компиляторах.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[44]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 07.05.09 08:14
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Никаких расширений пока нет. Речь идет о бэтах которые не зарелизятся до 2010 года.

Ты это интелу расскажи, а то пацаны не в курсе.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: max-maxtorwww.rsdn.ru
Дата: 07.05.09 10:31
Оценка: :)))
Здравствуйте, niellune, Вы писали:

N>Здравствуйте! Нужен ваш совет))

N>Но php мне уже мало и он мне порядком надоел, хочется развиваться дальше.

Купи надувную бабу.
Re[41]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 07.05.09 10:45
Оценка: :)))
Здравствуйте, CreatorCray, Вы писали:

VD>>Для особо одаренных повторяю. Нет никакого С++0х. С++0х — это рабочее название черновика.

CC>Камрад, от того, что ты твердишь "нету его" он не исчезнет.
CC>Он есть, и используется. Это факт.

Есть он только в твоем воображении. То что кто-то использует черти что созданное на основе черновиков — это их личная инициатива. Не более того.

VD>>А в "кампилирах" есть еще свойства и поддержка COM. И что с того?

CC>Это к терапевту.

Умора, клиенты психиатров отправляют к терапевтам.
Ладно, разговоры в подобном ключе меня не интересуют.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[42]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 07.05.09 11:10
Оценка: +1 :)
Здравствуйте, VladD2, Вы писали:

VD>Умора, клиенты психиатров отправляют к терапевтам.

Во!
Теперь узнаю старого доброго ВладД2.

VD>Ладно, разговоры в подобном ключе меня не интересуют.

Симметрично.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[45]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 11:38
Здравствуйте, Sinclair, Вы писали:

S>Потому, что два использования коротенькой лямбды типа "x >= SOMETHING_LOW && x <= SOMETHING_HIGH" побуждают к вот такому:


S>
S>var isWithinRange = (int x) => x >= SOMETHING_LOW && x <= SOMETHING_HIGH;
S>

S>А вовсе не к обычной функции или функтору. Потому, что так — удобно.

Гы-гы.

auto isWithinRange = [](int x) -> bool { return x >= SOMETHING_LOW && x <= SOMETHING_HIGH; }


vs.

inline bool isWithinRange(int x) { return x >= SOMETHING_LOW && x <= SOMETHING_HIGH; }


Обрати внимание, функцию с именем isWithinRange невозможно подменить в рантайме.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[48]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 11:50
Здравствуйте, gandjustas, Вы писали:

ГВ>>Я признаю наличие в других языках других реализаций лямбд. Но я не считаю "единственно нормальной" реализацию лямбд в каком-то определённом языке, или их наборе. Например, то, что лямбды в "других" языках непременно требуют вовлечения GC я считаю изъяном их реализации, пусть и повсеместно встречающимся. Я, например, знаю, что использование лямбда-выражений не всегда требует отдельного управления жизненным циклом замкнутых переменных. Отсюда, я не думаю, что непременное привлечение GC — "нормально", т.е., сродни эталону.

G>А другие варианты есть? Явное управление временем жизни не подойдет, надеюсь это понятно.

Да варианты-то самые обыкновенные: от отсутствия специального управления, до подсчёта ссылок и опционального (!) GC. Пойми, я не против GC самого по себе, я не люблю, когда мне его навязывают в обязательном порядке. Вот в маленькой локальной лямбде:

int upper = ...;
it = find_if(v.begin(), v.end(), [=](int x) -> bool { return x >= 0 && x <= upper; })


на фига GC? Здесь вполне достаточно снапшота по значению. Её вообще имеет смысл всю инлайнировать (кстати, я охотно допускаю, что JIT именно так и поступит). И ещё в десятках ситуаций, когда время существования вовлечённых объектов гарантированно превышает время существования лямбды — зачем GC? Зачем GC вообще ставить в известность о том, что ты создаёшь какую-то там лямбду, когда ты на 100% уверен, что она будет удалена до того, как пропадут использованные ей объекты?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: max-maxtorwww.rsdn.ru
Дата: 07.05.09 12:04
Оценка: +1 :))
Здравствуйте, niellune, Вы писали:

N>Здравствуйте! Нужен ваш совет))

N>Дело в том что мне нравится язык C++ и меня интересует есть ли сейчас возможность устроиться куда-нибудь на начальную позицию?
N>В каких областях сейчас применяется C++?

N>Может легче сначала пойти на С#, а потом перейти на С++ или сразу искать вакансии С++

N>Просто мне кажется, что объем знаний С++ требуется гораздо больший, а хочется работать и набираться опыта..

N>У меня есть опыт работы на php, причем не только web, а еще что-то вроде создания системы документооборота)

N>Но php мне уже мало и он мне порядком надоел, хочется развиваться дальше.

Моё мнение C# не очень хорошее решение, если вы не собираетесь связать свою судьбу с виндовс на каком-то относительно непродолжительном участке времени. C++ поддерживается всеми платформами. Ждёт его судьба бейсика. Это моё виденье данной проблемы.
Re[42]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 12:06
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Есть он только в твоем воображении. То что кто-то использует черти что созданное на основе черновиков — это их личная инициатива. Не более того.


А Microsoft с Intel-ом и не знают, что они отсебятину несут.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[49]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 12:09
Здравствуйте, Геннадий Васильев, Вы писали:

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


ГВ>>>Я признаю наличие в других языках других реализаций лямбд. Но я не считаю "единственно нормальной" реализацию лямбд в каком-то определённом языке, или их наборе. Например, то, что лямбды в "других" языках непременно требуют вовлечения GC я считаю изъяном их реализации, пусть и повсеместно встречающимся. Я, например, знаю, что использование лямбда-выражений не всегда требует отдельного управления жизненным циклом замкнутых переменных. Отсюда, я не думаю, что непременное привлечение GC — "нормально", т.е., сродни эталону.

G>>А другие варианты есть? Явное управление временем жизни не подойдет, надеюсь это понятно.

ГВ>Да варианты-то самые обыкновенные: от отсутствия специального управления, до подсчёта ссылок и опционального (!) GC. Пойми, я не против GC самого по себе, я не люблю, когда мне его навязывают в обязательном порядке. Вот в маленькой локальной лямбде:


ГВ>
ГВ>int upper = ...;
ГВ>it = find_if(v.begin(), v.end(), [=](int x) -> bool { return x >= 0 && x <= upper; })
ГВ>


ГВ>на фига GC? Здесь вполне достаточно снапшота по значению. Её вообще имеет смысл всю инлайнировать (кстати, я охотно допускаю, что JIT именно так и поступит). И ещё в десятках ситуаций, когда время существования вовлечённых объектов гарантированно превышает время существования лямбды — зачем GC? Зачем GC вообще ставить в известность о том, что ты создаёшь какую-то там лямбду, когда ты на 100% уверен, что она будет удалена до того, как пропадут использованные ей объекты?


Простые случаи мало интересуют, они будут отлично оптимизироваться JIT. Наличие или остуствие GC там никакой роли не играет.
В более сложных случаях, когда требуется GC, подсчет ссылок дает оверхед, как и опциональный GC.
Не получится сделать в C++ сборщик мусора, сравнимый по быстродействию с .NETовским.

В итоге пришли к тому же: С++, даже в новом стандарте, позволяет эффективно использовать только подмножество лямбд.
Re[50]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 12:23
Здравствуйте, gandjustas, Вы писали:

G>Простые случаи мало интересуют, они будут отлично оптимизироваться JIT. Наличие или остуствие GC там никакой роли не играет.


Я очень рад, если это так.

G>В более сложных случаях, когда требуется GC, подсчет ссылок дает оверхед, как и опциональный GC.


Величина этого оверхеда — вопрос с трудно предсказуемым ответом.

G>Не получится сделать в C++ сборщик мусора, сравнимый по быстродействию с .NETовским.


Ой, сомневаюсь.

G>В итоге пришли к тому же: С++, даже в новом стандарте, позволяет эффективно использовать только подмножество лямбд.


Угу, то есть тезис о неполноценности лямбд в C++ снимается повестки дня. Уже что-то. А то, что там где-то что-то побыстрее, где-то что-то помедленнее — так на то они и разные языки: C++, C#, Java, Haskell... Чтобы где-то выигрывать по отношению друг к другу, где-то проигрывать.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[46]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 07.05.09 12:25
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Гы-гы.


ГВ>
ГВ>auto isWithinRange = [](int x) -> bool { return x >= SOMETHING_LOW && x <= SOMETHING_HIGH; }
ГВ>


ГВ>vs.


ГВ>
ГВ>inline bool isWithinRange(int x) { return x >= SOMETHING_LOW && x <= SOMETHING_HIGH; }
ГВ>


ГВ>Обрати внимание, функцию с именем isWithinRange невозможно подменить в рантайме.


Лямбды удобнее тем, что их можно сочетать вместе с замыканиями в то время когда функцию придется передавать толпу параметров.
Re[51]: Поспешимши в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 12:25
ГВ>Угу, то есть тезис о неполноценности лямбд в C++ снимается повестки дня.

Имел в виду "тезис о принципиальной неполноценности лямбд в C++0x".
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[47]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 12:27
Здравствуйте, samius, Вы писали:

ГВ>>Обрати внимание, функцию с именем isWithinRange невозможно подменить в рантайме.

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

В данном случае я отвечал на вполне определённый выпад Синклера.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[49]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 07.05.09 12:29
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>на фига GC? Здесь вполне достаточно снапшота по значению. Её вообще имеет смысл всю инлайнировать (кстати, я охотно допускаю, что JIT именно так и поступит). И ещё в десятках ситуаций, когда время существования вовлечённых объектов гарантированно превышает время существования лямбды — зачем GC? Зачем GC вообще ставить в известность о том, что ты создаёшь какую-то там лямбду, когда ты на 100% уверен, что она будет удалена до того, как пропадут использованные ей объекты?
Гена, я тебе открою тайну, но GC никто ни в какую известность не ставит. Всё как раз наоборот: это в плюсах нужно что-то "удалять", когда оно больше не нужно.
А GC всего лишь оставляет только те объекты, которые доступны. В частности, если локальная лямбда выйдет из области видимости до того, как использованные ей объекты, то GC про неё никогда не узнает, и ни такта не будет затрачено на её уборку. Зато "100% уверен" — это как раз в случае с GC: именно он даёт такую гарантию. А в твоём случае 100% — это нечестное округление от 99.9999....%
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[51]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 12:30
Оценка: :)
Здравствуйте, Геннадий Васильев, Вы писали:

G>>В более сложных случаях, когда требуется GC, подсчет ссылок дает оверхед, как и опциональный GC.

ГВ>Величина этого оверхеда — вопрос с трудно предсказуемым ответом.
Тем не менее он есть.

G>>Не получится сделать в C++ сборщик мусора, сравнимый по быстродействию с .NETовским.

ГВ>Ой, сомневаюсь.
Не сомневайся. Если бы можно было на С++ сделать хороший сборщик мусора, то его давно бы уже сделали.

G>>В итоге пришли к тому же: С++, даже в новом стандарте, позволяет эффективно использовать только подмножество лямбд.


ГВ>Угу, то есть тезис о неполноценности лямбд в C++ снимается повестки дня. Уже что-то.

Ничего не снимается. Лямбды и там и есть неполноценные. Возможность сымитировать полноценные лямбды эту ситуацию не меняют.

ГВ>А то, что там где-то что-то побыстрее, где-то что-то помедленнее — так на то они и разные языки: C++, C#, Java, Haskell... Чтобы где-то выигрывать по отношению друг к другу, где-то проигрывать.

Тут вопрос не только в скорости работы. Имитирование полноценных лямбд будет порождать громоздкий и\или ненадежный код.
Re[50]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 07.05.09 12:33
Здравствуйте, Sinclair, Вы писали:

S>В частности, если локальная лямбда выйдет из области видимости до того, как использованные ей объекты, то GC про неё никогда не узнает, и ни такта не будет затрачено на её уборку.


А можно раскрыть мысль? Такая лямбда не обрастет делегатом?
Re[50]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 12:41
Здравствуйте, Sinclair, Вы писали:

S>Гена, я тебе открою тайну, но GC никто ни в какую известность не ставит. Всё как раз наоборот: это в плюсах нужно что-то "удалять", когда оно больше не нужно.


Антон, спасибо, но это для меня не тайна. Говоря "ставить в известность" я не имел в виду ручное оповещение GC об использовании объекта.

S>А GC всего лишь оставляет только те объекты, которые доступны. В частности, если локальная лямбда выйдет из области видимости до того, как использованные ей объекты, то GC про неё никогда не узнает, и ни такта не будет затрачено на её уборку.


Ну и превосходно. Правда, AFAIK, не во всех языках с "полноценными" лямбдами дело обстоит именно так.

S>Зато "100% уверен" — это как раз в случае с GC: именно он даёт такую гарантию. А в твоём случае 100% — это нечестное округление от 99.9999....%


Да нет, есть случаи как раз тех самых 100%. Я понимаю, что хочется сказать, что я выдаю желаемое за действительное и приплести излюбленные противо-C++-ные аргументы, но смею тебя заверить, это было бы неправильным.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[43]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 07.05.09 12:45
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>А Microsoft с Intel-ом и не знают, что они отсебятину несут.


Можно ссылку на место где я могу купить компилятор от Microsoft реализующий черновик стандарта?

Если нет, то предлагаю вам всем прекратить нести пургу.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[52]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 12:52
Оценка: +2
Здравствуйте, gandjustas, Вы писали:

G>>>В более сложных случаях, когда требуется GC, подсчет ссылок дает оверхед, как и опциональный GC.

ГВ>>Величина этого оверхеда — вопрос с трудно предсказуемым ответом.
G>Тем не менее он есть.

Он везде есть — больше или меньше.

G>>>Не получится сделать в C++ сборщик мусора, сравнимый по быстродействию с .NETовским.

ГВ>>Ой, сомневаюсь.
G>Не сомневайся. Если бы можно было на С++ сделать хороший сборщик мусора, то его давно бы уже сделали.

Дык, он как неуловимый Джо:

- Что, никто написать не может?
— Да кому он нужен?


G>>>В итоге пришли к тому же: С++, даже в новом стандарте, позволяет эффективно использовать только подмножество лямбд.

ГВ>>Угу, то есть тезис о неполноценности лямбд в C++ снимается повестки дня. Уже что-то.
G>Ничего не снимается. Лямбды и там и есть неполноценные. Возможность сымитировать полноценные лямбды эту ситуацию не меняют.

Понятно. Библиотечная философия C++ тебе претит. Ну что ж, на вкус и цвет...

ГВ>>А то, что там где-то что-то побыстрее, где-то что-то помедленнее — так на то они и разные языки: C++, C#, Java, Haskell... Чтобы где-то выигрывать по отношению друг к другу, где-то проигрывать.

G>Тут вопрос не только в скорости работы. Имитирование полноценных лямбд будет порождать громоздкий и\или ненадежный код.

Понятно. Но эту сказку про C++ рассказывают с регулярностью, достойной лучшего применения, всё то время, пока я на нём программирую — все 14 лет. Тут, знаешь, что ни язык, так непременно его апологеты апеллируют к тому, что на C++ всё глюкаво, громоздко и ненадёжно. Так что, не ты первый, не ты последний.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[44]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 12:55
Здравствуйте, VladD2, Вы писали:

ГВ>>А Microsoft с Intel-ом и не знают, что они отсебятину несут.

VD>Можно ссылку на место где я могу купить компилятор от Microsoft реализующий черновик стандарта?

Дык. Гугль тебя спасёт, ключевые слова "VC10 CTP download". Это действительно бета, как ты правильно заметил (вернее — CTP, я не знаю, как он соотносится с альфа/бета/RC по обычной классификации). Про интеловский компилятор спроси у CreatorCray.

VD>Если нет, то предлагаю вам всем прекратить нести пургу.


Чья б корова...
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[53]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 13:10
Оценка: -1 :)
Здравствуйте, Геннадий Васильев, Вы писали:

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


G>>>>В более сложных случаях, когда требуется GC, подсчет ссылок дает оверхед, как и опциональный GC.

ГВ>>>Величина этого оверхеда — вопрос с трудно предсказуемым ответом.
G>>Тем не менее он есть.
ГВ>Он везде есть — больше или меньше.
О как, а только пару страниц назад было утверждение что в С++ нет оверхедов.

G>>>>Не получится сделать в C++ сборщик мусора, сравнимый по быстродействию с .NETовским.

ГВ>>>Ой, сомневаюсь.
G>>Не сомневайся. Если бы можно было на С++ сделать хороший сборщик мусора, то его давно бы уже сделали.

ГВ>Дык, он как неуловимый Джо:


ГВ>

ГВ>- Что, никто написать не может?
ГВ>- Да кому он нужен?


Ну раз shared_ptr придумали, и они пользуются значительным успхом, то можно предположить что GC очень нужен.

G>>>>В итоге пришли к тому же: С++, даже в новом стандарте, позволяет эффективно использовать только подмножество лямбд.

ГВ>>>Угу, то есть тезис о неполноценности лямбд в C++ снимается повестки дня. Уже что-то.
G>>Ничего не снимается. Лямбды и там и есть неполноценные. Возможность сымитировать полноценные лямбды эту ситуацию не меняют.
ГВ>Понятно. Библиотечная философия C++ тебе претит. Ну что ж, на вкус и цвет...
Не в библиотеках вопрос, лексическое замыкание накакими библиотечными функциями не заменишь, там нудно по-другом управлять временем жизни объектов.

ГВ>>>А то, что там где-то что-то побыстрее, где-то что-то помедленнее — так на то они и разные языки: C++, C#, Java, Haskell... Чтобы где-то выигрывать по отношению друг к другу, где-то проигрывать.

G>>Тут вопрос не только в скорости работы. Имитирование полноценных лямбд будет порождать громоздкий и\или ненадежный код.

ГВ>Понятно. Но эту сказку про C++ рассказывают с регулярностью, достойной лучшего применения, всё то время, пока я на нём программирую — все 14 лет. Тут, знаешь, что ни язык, так непременно его апологеты апеллируют к тому, что на C++ всё глюкаво, громоздко и ненадёжно. Так что, не ты первый, не ты последний.

Так действительно на С++ все глюкаво и ненадежно. А то что ьты 14 лет на нем пишешь чести тебе не делает.
Re[47]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: minorlogic 
Дата: 07.05.09 13:11
Оценка: +1 -1
Здравствуйте, samius, Вы писали:

S>Здравствуйте, Геннадий Васильев, Вы писали:


ГВ>>Гы-гы.


ГВ>>
ГВ>>auto isWithinRange = [](int x) -> bool { return x >= SOMETHING_LOW && x <= SOMETHING_HIGH; }
ГВ>>


ГВ>>vs.


ГВ>>
ГВ>>inline bool isWithinRange(int x) { return x >= SOMETHING_LOW && x <= SOMETHING_HIGH; }
ГВ>>


ГВ>>Обрати внимание, функцию с именем isWithinRange невозможно подменить в рантайме.


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


А ведб не все так просто. Я некоторое время размышлял над полезностью и вредом при использовании лямбд. Использование функторов и функций ненавязчиво подталкивает к обобщенному коду и переиспользованию.

"Лямбды удобнее тем, что их можно сочетать вместе с замыканиями в то время когда функцию придется передавать толпу параметров." не всегда является достаточным аргументом, например

Глобальные переменные удобнее тем, что их можно использовать из любого места и не придется передавать как толпу параметров.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[53]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: minorlogic 
Дата: 07.05.09 13:17
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Понятно. Но эту сказку про C++ рассказывают с регулярностью, достойной лучшего применения, всё то время, пока я на нём программирую — все 14 лет. Тут, знаешь, что ни язык, так непременно его апологеты апеллируют к тому, что на C++ всё глюкаво, громоздко и ненадёжно. Так что, не ты первый, не ты последний.


Что интересно , как ни язык то все к С++, не друг на друга а именно на С++.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[54]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 13:17
Здравствуйте, gandjustas, Вы писали:

ГВ>>Он везде есть — больше или меньше.

G>О как, а только пару страниц назад было утверждение что в С++ нет оверхедов.

В каких-то случаях — нет, в каких-то есть. Чудес же не бывает.

G>Ну раз shared_ptr придумали, и они пользуются значительным успхом, то можно предположить что GC очень нужен.


ИМХО, нельзя.

G>Не в библиотеках вопрос, лексическое замыкание накакими библиотечными функциями не заменишь, там нудно по-другом управлять временем жизни объектов.


Опять двадцать пять.

G>Так действительно на С++ все глюкаво и ненадежно.


Во-во, слово в слово. Все 14 лет.

G>А то что ьты 14 лет на нем пишешь чести тебе не делает.


В чьих глазах?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[48]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 13:18
Оценка: -2
Здравствуйте, minorlogic, Вы писали:

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


S>>Здравствуйте, Геннадий Васильев, Вы писали:


ГВ>>>Гы-гы.


ГВ>>>
ГВ>>>auto isWithinRange = [](int x) -> bool { return x >= SOMETHING_LOW && x <= SOMETHING_HIGH; }
ГВ>>>


ГВ>>>vs.


ГВ>>>
ГВ>>>inline bool isWithinRange(int x) { return x >= SOMETHING_LOW && x <= SOMETHING_HIGH; }
ГВ>>>


ГВ>>>Обрати внимание, функцию с именем isWithinRange невозможно подменить в рантайме.


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


M>А ведб не все так просто. Я некоторое время размышлял над полезностью и вредом при использовании лямбд. Использование функторов и функций ненавязчиво подталкивает к обобщенному коду и переиспользованию.


Ну прям мыслитель.
Как поможет обобщенный код в процитированном примере, если SOMETHING_LOW и SOMETHING_HIGH зависят от контекста?

M>"Лямбды удобнее тем, что их можно сочетать вместе с замыканиями в то время когда функцию придется передавать толпу параметров." не всегда является достаточным аргументом, например


M>Глобальные переменные удобнее тем, что их можно использовать из любого места и не придется передавать как толпу параметров.

Сравнил говно с манной кашей, молодец. такими аналогиями иди пугать детей в детском саду.
Re[48]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 13:20
Оценка: :)
Здравствуйте, minorlogic, Вы писали:

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

M>А ведб не все так просто. Я некоторое время размышлял над полезностью и вредом при использовании лямбд. Использование функторов и функций ненавязчиво подталкивает к обобщенному коду и переиспользованию.

Угу, об этом и речь.

M>"Лямбды удобнее тем, что их можно сочетать вместе с замыканиями в то время когда функцию придется передавать толпу параметров." не всегда является достаточным аргументом, например


M>Глобальные переменные удобнее тем, что их можно использовать из любого места и не придется передавать как толпу параметров.


Глобальные переменные — это зараза ещё та, надо тебе сказать. Я когда-то (по очень синеглазой юности) сознательно приучал себя не пользоваться глобальными переменными — в противном случае сопровождаемость рискует упасть ниже плинтуса.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[48]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 07.05.09 13:22
Оценка:1 (1)
Здравствуйте, minorlogic, Вы писали:

M>"Лямбды удобнее тем, что их можно сочетать вместе с замыканиями в то время когда функцию придется передавать толпу параметров." не всегда является достаточным аргументом, например


M>Глобальные переменные удобнее тем, что их можно использовать из любого места и не придется передавать как толпу параметров.


А GOTO удобнее функций. Из любого места в любое и без параметров!
(я так не считаю, только проиронизировал аналогию)
Re[55]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 13:22
Оценка: :)
Здравствуйте, Геннадий Васильев, Вы писали:


G>>Ну раз shared_ptr придумали, и они пользуются значительным успхом, то можно предположить что GC очень нужен.

ГВ>ИМХО, нельзя.
Обоснования?

G>>Не в библиотеках вопрос, лексическое замыкание накакими библиотечными функциями не заменишь, там нудно по-другом управлять временем жизни объектов.

ГВ>Опять двадцать пять.

G>>Так действительно на С++ все глюкаво и ненадежно.

ГВ>Во-во, слово в слово. Все 14 лет.
Так за 14 лет ничего не поменялось

С++ и по сей день остается языком, на котором больше всего завалено проектов было.
Re[56]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 13:26
Здравствуйте, gandjustas, Вы писали:

G>>>Ну раз shared_ptr придумали, и они пользуются значительным успхом, то можно предположить что GC очень нужен.

ГВ>>ИМХО, нельзя.
G>Обоснования?

Обосновать негативно сформулированный тезис — нельзя. Так что, это ты обоснуй своё высказывание.

ГВ>>Во-во, слово в слово. Все 14 лет.

G>Так за 14 лет ничего не поменялось

Где? В риторике критиков? Угу.

G>С++ и по сей день остается языком, на котором больше всего завалено проектов было.


Пересчитывал?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[51]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 13:27
Здравствуйте, samius, Вы писали:

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


S>>В частности, если локальная лямбда выйдет из области видимости до того, как использованные ей объекты, то GC про неё никогда не узнает, и ни такта не будет затрачено на её уборку.


S>А можно раскрыть мысль? Такая лямбда не обрастет делегатом?


Может и обрастет. Только уборка мертвого объекта ничего не стоит, потому пофиг что чем обрастет.
Re[49]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 13:29
Оценка: :)
Здравствуйте, gandjustas, Вы писали:

M>>А ведб не все так просто. Я некоторое время размышлял над полезностью и вредом при использовании лямбд. Использование функторов и функций ненавязчиво подталкивает к обобщенному коду и переиспользованию.

G>
G>Ну прям мыслитель.
G>Как поможет обобщенный код в процитированном примере, если SOMETHING_LOW и SOMETHING_HIGH зависят от контекста?

Буду предельно откровенен: в случае, когда SOMETHING_LOW и SOMETHING_HIGH зависят от контекста (2/3 параметров), этому коду поможет только Delete. Не знаю уж, обобщённый это будет Delete или нет.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[52]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 13:36
Здравствуйте, gandjustas, Вы писали:

G>А то что ьты 14 лет на нем пишешь чести тебе не делает.

В чьих глазах?


Вопрос остаётся в силе.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[57]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 13:39
Здравствуйте, Геннадий Васильев, Вы писали:

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


G>>>>Ну раз shared_ptr придумали, и они пользуются значительным успхом, то можно предположить что GC очень нужен.

ГВ>>>ИМХО, нельзя.
G>>Обоснования?

ГВ>Обосновать негативно сформулированный тезис — нельзя. Так что, это ты обоснуй своё высказывание.

Обосновываю, сейчас в С++ популярны средства неявного управления временем жизни объектов в куче. Но эти способы обладают некоторыми недостатками.
GC, который свободен от этих недостатков, будет очень востребован.

G>>С++ и по сей день остается языком, на котором больше всего завалено проектов было.

ГВ>Пересчитывал?
Я — нет, а некоторые фирмы часто занимаются статистическими исследованиями.
Re[45]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 07.05.09 13:45
Оценка: +1 -1
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>>А Microsoft с Intel-ом и не знают, что они отсебятину несут.

VD>>Можно ссылку на место где я могу купить компилятор от Microsoft реализующий черновик стандарта?

ГВ>Дык. Гугль тебя спасёт, ключевые слова "VC10 CTP download". Это действительно бета, как ты правильно заметил (вернее — CTP, я не знаю, как он соотносится с альфа/бета/RC по обычной классификации). Про интеловский компилятор спроси у CreatorCray.


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

VD>>Если нет, то предлагаю вам всем прекратить нести пургу.


ГВ>Чья б корова...


Твоя, твоя. Заняться тебе не чем. Разводишь демагогию.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[45]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 07.05.09 13:50
Оценка: +1
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Это действительно бета, как ты правильно заметил (вернее — CTP, я не знаю, как он соотносится с альфа/бета/RC по обычной классификации).


CTP — значит Community Technology Preview. Что по-русски значит — сделали промежуточную сборку и почти не тестируя отдали поиграться народу. То есть, это может быть даже не бэта. Это может быть продукт который еще 5 раз изменится до выхода.

Собственно я не сомневаюсь, что эти недолямбды попадут в релиз. Просто релиза не будет до конца года, а стало быть говорить в общем-то не о чем.
Если же стандарта не будет до конца года, то это будет еще одно нестандартное расширение толку от которого будет не много, так как не все захотят воспроизводить неизвестно что, что есть у МС.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[53]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 13:59
Оценка: +1 -1
Здравствуйте, Геннадий Васильев, Вы писали:

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


ГВ>

G>>А то что ьты 14 лет на нем пишешь чести тебе не делает.

ГВ>В чьих глазах?


ГВ>Вопрос остаётся в силе.

В глазах тех, кто успел попользоваться не только С++, но и более современными языками.
Re[49]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: minorlogic 
Дата: 07.05.09 14:10
Здравствуйте, samius, Вы писали:

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


M>>"Лямбды удобнее тем, что их можно сочетать вместе с замыканиями в то время когда функцию придется передавать толпу параметров." не всегда является достаточным аргументом, например


M>>Глобальные переменные удобнее тем, что их можно использовать из любого места и не придется передавать как толпу параметров.


S>А GOTO удобнее функций. Из любого места в любое и без параметров!

S>(я так не считаю, только проиронизировал аналогию)

Ну я понял что ты понял
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[54]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 07.05.09 14:52
Здравствуйте, gandjustas, Вы писали:


G>>>>>В более сложных случаях, когда требуется GC, подсчет ссылок дает оверхед, как и опциональный GC.

ГВ>>>>Величина этого оверхеда — вопрос с трудно предсказуемым ответом.
G>>>Тем не менее он есть.
ГВ>>Он везде есть — больше или меньше.
G>О как, а только пару страниц назад было утверждение что в С++ нет оверхедов.

Все правильно: пару страниц назад в С++ не было оверхедов, но язык развивается — успел обрасти оверхедами, понимаете ли какое дело...
Re[58]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 15:04
Здравствуйте, gandjustas, Вы писали:

G>>>>>Ну раз shared_ptr придумали, и они пользуются значительным успхом, то можно предположить что GC очень нужен.

ГВ>>>>ИМХО, нельзя.
G>>>Обоснования?
ГВ>>Обосновать негативно сформулированный тезис — нельзя. Так что, это ты обоснуй своё высказывание.
G>Обосновываю, сейчас в С++ популярны средства неявного управления временем жизни объектов в куче. Но эти способы обладают некоторыми недостатками.

А что за недостатки (кроме синхронного подсчёта количества ссылок)?

G>GC, который свободен от этих недостатков, будет очень востребован.


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

G>>>С++ и по сей день остается языком, на котором больше всего завалено проектов было.

ГВ>>Пересчитывал?
G>Я — нет, а некоторые фирмы часто занимаются статистическими исследованиями.

Ссылкой не поделишься? Просто любопытно.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[55]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 15:06
Оценка: :)
Здравствуйте, criosray, Вы писали:

G>>О как, а только пару страниц назад было утверждение что в С++ нет оверхедов.

C>Все правильно: пару страниц назад в С++ не было оверхедов, но язык развивается — успел обрасти оверхедами, понимаете ли какое дело...
какие оверхеды? концепция с++: не плати за то что не используешь, в случае с с++ лямбдами исполнено на 100%, в дотнете же оверхеды на ровном месте, т.е. беспричинно, в силу его устройства.
People write code, programming languages don't.
Re[46]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 15:14
Здравствуйте, VladD2, Вы писали:

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


Нет такой ссылки, потому что компилятор от MS ещё не продаётся. Его можно скачать, как CTP.

Только это не означает, что нам нечего обсуждать. Я тебе уже писал об этом. Гипотетические рассуждения о том, что завтра перекромсают почти утверждённый стандарт и поубирают все фичи из компиляторов, давай оставим тем, кто любит обсуждать сюжетные ходы в плохой фантастике.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[54]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 15:17
Здравствуйте, gandjustas, Вы писали:

ГВ>>Вопрос остаётся в силе.

G>В глазах тех, кто успел попользоваться не только С++, но и более современными языками.

За всех отвечаешь? А по Хуану ли сомбреро?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[47]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 07.05.09 15:21
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Нет такой ссылки, потому что компилятор от MS ещё не продаётся.


Значит и обсуждать не чего.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[59]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 15:22
Здравствуйте, Геннадий Васильев, Вы писали:

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


G>>>>>>Ну раз shared_ptr придумали, и они пользуются значительным успхом, то можно предположить что GC очень нужен.

ГВ>>>>>ИМХО, нельзя.
G>>>>Обоснования?
ГВ>>>Обосновать негативно сформулированный тезис — нельзя. Так что, это ты обоснуй своё высказывание.
G>>Обосновываю, сейчас в С++ популярны средства неявного управления временем жизни объектов в куче. Но эти способы обладают некоторыми недостатками.

ГВ>А что за недостатки (кроме синхронного подсчёта количества ссылок)?

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

G>>>>С++ и по сей день остается языком, на котором больше всего завалено проектов было.

ГВ>>>Пересчитывал?
G>>Я — нет, а некоторые фирмы часто занимаются статистическими исследованиями.
ГВ>Ссылкой не поделишься? Просто любопытно.
Не поделюсь, потому что ссылки не храню.
Re[56]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 15:25
Оценка: -1
Здравствуйте, Хвост, Вы писали:

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


G>>>О как, а только пару страниц назад было утверждение что в С++ нет оверхедов.

C>>Все правильно: пару страниц назад в С++ не было оверхедов, но язык развивается — успел обрасти оверхедами, понимаете ли какое дело...
Х>какие оверхеды? концепция с++: не плати за то что не используешь,
Да ну, а O(n) при выделении и освобождении памяти?

Х>в случае с с++ лямбдами исполнено на 100%,

На 200%, лямбд просто нету Есть только жалкое подобие.

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

Х>в дотнете же оверхеды на ровном месте, т.е. беспричинно, в силу его устройства.

А примеры будут? или опять пердение в лужу?
Re[48]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 15:29
Здравствуйте, VladD2, Вы писали:

VD>Значит и обсуждать не чего.

да ну? или для дотнетчиков microsoft бог и царь и то что для С++ есть компиляторы от других производителей уже не в счёт?
People write code, programming languages don't.
Re[49]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 07.05.09 15:31
Здравствуйте, Хвост, Вы писали:

Х>да ну? или для дотнетчиков microsoft бог и царь и то что для С++ есть компиляторы от других производителей уже не в счёт?


А во всех других уже реализован черновик стандарта?
Нет?
Вот когда реализуют, тогда обсудим.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[57]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 15:35
Оценка: -1 :)
Здравствуйте, gandjustas, Вы писали:

Х>>какие оверхеды? концепция с++: не плати за то что не используешь,

G>Да ну, а O(n) при выделении и освобождении памяти?
здесь поподробней пожалуйста, что имеется ввиду?

Х>>в случае с с++ лямбдами исполнено на 100%,

G>На 200%, лямбд просто нету Есть только жалкое подобие.
может ты найдёшь определение lambda в интернет и перестанешь нести ахинею?

Х>>в дотнете же оверхеды на ровном месте, т.е. беспричинно, в силу его устройства.

G>А примеры будут? или опять пердение в лужу?
да уж, дотнет действительно замазка для мозга. гц, метаданные, промежуточный код + jit, бесчисленные проверки кода на сейфанутость — всё ето есть даже тогда когда тебе етого не нужно, и ето всё в таком случае — не нужный оверхед.
People write code, programming languages don't.
Re[58]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 07.05.09 15:47
Здравствуйте, Хвост, Вы писали:

Х>>>в случае с с++ лямбдами исполнено на 100%,

G>>На 200%, лямбд просто нету Есть только жалкое подобие.
Х>может ты найдёшь определение lambda в интернет и перестанешь нести ахинею?

Х>>>в дотнете же оверхеды на ровном месте, т.е. беспричинно, в силу его устройства.

G>>А примеры будут? или опять пердение в лужу?
Х>да уж, дотнет действительно замазка для мозга. гц, метаданные, промежуточный код + jit, бесчисленные проверки кода на сейфанутость — всё ето есть даже тогда когда тебе етого не нужно, и ето всё в таком случае — не нужный оверхед.

перестанешь нести ахинею?

Re[60]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 15:47
Здравствуйте, gandjustas, Вы писали:

ГВ>>А что за недостатки (кроме синхронного подсчёта количества ссылок)?

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

OK, принято. ИМХО, самый серьёзный недостаток такого способа — потенциальные заморочки с циклическими зависимостями. Ну что же, действительно, опциональный (библиотечный) GC иной раз не помешал бы. В принципе — не помешал бы. Другое дело, что острота потребности в GC, ИМХО, невероятно преувеличена. Вот тут, честно тебе скажу, доказать ты её (острую потребность) не сможешь. Потому что придётся доказывать, исходя из субъективных моментов, а субъективно как раз таких проблем нет — C++-ники привыкли управлять своими объектами и им это вполне удаётся. Хорошим C++-никам — удаётся, а кто не умеет — тот плохой C++-ник, и к его мнению не особо прислушиваются. ИМХО, потому про GC хоть и поговаривают, но не особо.

ГВ>>Ссылкой не поделишься? Просто любопытно.

G>Не поделюсь, потому что ссылки не храню.

Жаль, было бы интересно.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[58]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 07.05.09 15:49
Здравствуйте, Хвост, Вы писали:

Х>да уж, дотнет действительно замазка для мозга. гц, метаданные, промежуточный код + jit, бесчисленные проверки кода на сейфанутость — всё ето есть даже тогда когда тебе етого не нужно, и ето всё в таком случае — не нужный оверхед.


А можно узнать, решениями каких задач ты занимаешься на С++?
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[58]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 15:50
Оценка: -1
Здравствуйте, Хвост, Вы писали:

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


Х>>>какие оверхеды? концепция с++: не плати за то что не используешь,

G>>Да ну, а O(n) при выделении и освобождении памяти?
Х>здесь поподробней пожалуйста, что имеется ввиду?
Стандартные аллокаторы в С++ требуют прохода по списку свободных блоков памяти при выделении\освобождении, эта операция имеет алгоритмическую сложность O(n). При интенсивных операциях выделения\освобождения работает очеень медленно.
Кроме того проход по списку непотокобезопасен, поэтому требуются особые приседания чтобы стандартный аллокатор нормально заработал в многопоточном окружении.

Х>>>в случае с с++ лямбдами исполнено на 100%,

G>>На 200%, лямбд просто нету Есть только жалкое подобие.
Х>может ты найдёшь определение lambda в интернет и перестанешь нести ахинею?
Ты прочитай 3 предыдущие страницы. Нормальные лямбды подразумевают лексические замыкания, которых нету и не будет в С++.

Х>>>в дотнете же оверхеды на ровном месте, т.е. беспричинно, в силу его устройства.

G>>А примеры будут? или опять пердение в лужу?
Х>да уж, дотнет действительно замазка для мозга. гц, метаданные, промежуточный код + jit, бесчисленные проверки кода на сейфанутость — всё ето есть даже тогда когда тебе етого не нужно, и ето всё в таком случае — не нужный оверхед.
Не разводи демагогию, давай факты.
Re[48]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 15:51
Оценка: +1
Здравствуйте, VladD2, Вы писали:

ГВ>>Нет такой ссылки, потому что компилятор от MS ещё не продаётся.

VD>Значит и обсуждать не чего.

Так и не обсуждай. Тебя кто-то заставляет?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[49]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 07.05.09 15:53
Оценка: +1 -2
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>>Нет такой ссылки, потому что компилятор от MS ещё не продаётся.

VD>>Значит и обсуждать не чего.

ГВ>Так и не обсуждай. Тебя кто-то заставляет?


Обсуждал, ты а теперь откровенно гонишь. Учись признавать свою неправоту.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[59]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 15:55
Оценка: +1 :)
Здравствуйте, gandjustas, Вы писали:

Х>>здесь поподробней пожалуйста, что имеется ввиду?

G>Стандартные аллокаторы в С++ требуют прохода по списку свободных блоков памяти при выделении\освобождении, эта операция имеет алгоритмическую сложность O(n). При интенсивных операциях выделения\освобождения работает очеень медленно.

Ключевое слово — пул.

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


Это что-то новенькое. Стандартные аллокаторы как раз вполне работают в многопоточном окружении.

G>Ты прочитай 3 предыдущие страницы. Нормальные лямбды подразумевают лексические замыкания, которых нету и не будет в С++.


Повторение тезиса, как известно, поднимает его истинность в геометрической прогрессии.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[61]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 15:56
Оценка: +1
Здравствуйте, Геннадий Васильев, Вы писали:

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


ГВ>>>А что за недостатки (кроме синхронного подсчёта количества ссылок)?

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

ГВ>OK, принято. ИМХО, самый серьёзный недостаток такого способа — потенциальные заморочки с циклическими зависимостями. Ну что же, действительно, опциональный (библиотечный) GC иной раз не помешал бы. В принципе — не помешал бы. Другое дело, что острота потребности в GC, ИМХО, невероятно преувеличена. Вот тут, честно тебе скажу, доказать ты её (острую потребность) не сможешь. Потому что придётся доказывать, исходя из субъективных моментов, а субъективно как раз таких проблем нет — C++-ники привыкли управлять своими объектами и им это вполне удаётся. Хорошим C++-никам — удаётся, а кто не умеет — тот плохой C++-ник, и к его мнению не особо прислушиваются.

Как раз таки привычки субъективны. А потребность в высокоуровневых языках в большенстве задач очень объективна.
Но при этом существует достаточно много программистов на С++ со своим субъективным мнением.

ГВ>ИМХО, потому про GC хоть и поговаривают, но не особо.

Еще раз. Не получится на C++ сделать CG с характеристиками, близкими к .NETовскому.
Сам язык должен быть рассчитан на работу GC.
Практически любая реализация GC на C++ будет вносить достаточно большой оверхед чтобы отказаться от его использования.
Re[60]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 07.05.09 15:56
Здравствуйте, Геннадий Васильев, Вы писали:

Х>>>здесь поподробней пожалуйста, что имеется ввиду?

G>>Стандартные аллокаторы в С++ требуют прохода по списку свободных блоков памяти при выделении\освобождении, эта операция имеет алгоритмическую сложность O(n). При интенсивных операциях выделения\освобождения работает очеень медленно.

ГВ>Ключевое слово — пул.


Вы только что узнали новое слово и решили вставить его, чтоб казаться умным?
Re[50]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 16:00
Здравствуйте, VladD2, Вы писали:

ГВ>>Так и не обсуждай. Тебя кто-то заставляет?

VD>Обсуждал, ты а теперь откровенно гонишь. Учись признавать свою неправоту.

Иными словами, сказать тебе больше нечего.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[60]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 16:01
Здравствуйте, Геннадий Васильев, Вы писали:

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


Х>>>здесь поподробней пожалуйста, что имеется ввиду?

G>>Стандартные аллокаторы в С++ требуют прохода по списку свободных блоков памяти при выделении\освобождении, эта операция имеет алгоритмическую сложность O(n). При интенсивных операциях выделения\освобождения работает очеень медленно.
ГВ>Ключевое слово — пул.
Угу, очередной "закат солнца вручную". Кроме того с пулом возникают дополнительные проблемы управления временем жизни.

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

ГВ>Это что-то новенькое. Стандартные аллокаторы как раз вполне работают в многопоточном окружении.
Угу, но работают медленно. Даже при однопоточном выделении. Блокировки небесплатные.
Re[61]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 16:03
Здравствуйте, criosray, Вы писали:

ГВ>>Ключевое слово — пул.

C>Вы только что узнали новое слово и решили вставить его, чтоб казаться умным?

Конечно. Я из этой дискуссии столько нового почерпнул — ты не поверишь! Столько новых слов, столько новых идей! Люблю с умными людьми общаться — сразу умнее становлюсь.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[61]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 16:23
Здравствуйте, gandjustas, Вы писали:

ГВ>>Ключевое слово — пул.

G>Угу, очередной "закат солнца вручную". Кроме того с пулом возникают дополнительные проблемы управления временем жизни.

Это какие такие проблемы? Что объекты должны быть уничтожены до уничтожения самого пула? Так это — то же самое, что и общее предотвращение утечек памяти.

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

ГВ>>Это что-то новенькое. Стандартные аллокаторы как раз вполне работают в многопоточном окружении.
G>Угу, но работают медленно. Даже при однопоточном выделении. Блокировки небесплатные.

Ты уж определись: работают стандартные аллокаторы в многопоточном окружении или нет.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[59]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 16:40
Здравствуйте, VladD2, Вы писали:

VD>А можно узнать, решениями каких задач ты занимаешься на С++?

Можно, в данный момент ето десктопная GIS.
В свою очередь можно узнать, какие задачи ты решаешь на C#?
People write code, programming languages don't.
Re[62]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 16:46
Оценка: +1 -1
Здравствуйте, gandjustas, Вы писали:

ГВ>>OK, принято. ИМХО, самый серьёзный недостаток такого способа — потенциальные заморочки с циклическими зависимостями. Ну что же, действительно, опциональный (библиотечный) GC иной раз не помешал бы. В принципе — не помешал бы. Другое дело, что острота потребности в GC, ИМХО, невероятно преувеличена. Вот тут, честно тебе скажу, доказать ты её (острую потребность) не сможешь. Потому что придётся доказывать, исходя из субъективных моментов, а субъективно как раз таких проблем нет — C++-ники привыкли управлять своими объектами и им это вполне удаётся. Хорошим C++-никам — удаётся, а кто не умеет — тот плохой C++-ник, и к его мнению не особо прислушиваются.

G>Как раз таки привычки субъективны. А потребность в высокоуровневых языках в большенстве задач очень объективна.

Приехали. C++ — высокоуровневый язык. Или вы хотите поговорить о DSL? Ну давай, поговорим про DSL.

G>Но при этом существует достаточно много программистов на С++ со своим субъективным мнением.


Если мнения этих программистов хватает, чтобы решать поставленные задачи, значит, потребность в языках местами преувеличена, т.е., не всегда объективна. Сам понимаешь, материя "потребности" тонкая, весьма зависимая от "интеграла по субъективным суждениям".

ГВ>>ИМХО, потому про GC хоть и поговаривают, но не особо.

G>Еще раз. Не получится на C++ сделать CG с характеристиками, близкими к .NETовскому.
G>Сам язык должен быть рассчитан на работу GC.
G>Практически любая реализация GC на C++ будет вносить достаточно большой оверхед чтобы отказаться от его использования.

Не совсем так. Дело в том, что GC для C++ не должен решать задачи управления абсолютно всеми объектами и никто ничего такого и не предлагает. Но для каких-то отдельных моментов он вполне может оказаться приемлемым решением, лучшим, чем reference counting. Ключевое слово: "какие-то отдельные моменты".

И конечно, не буду спорить с тем, что для того, чтобы GC совсем органично вплетался в язык, сам язык должен быть изначально спроектирован для использования GC.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[59]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 16:47
Оценка: +2 :)
Здравствуйте, gandjustas, Вы писали:

G>Стандартные аллокаторы в С++ требуют прохода по списку свободных блоков памяти при выделении\освобождении, эта операция имеет алгоритмическую сложность O(n). При интенсивных операциях выделения\освобождения работает очеень медленно.

для интенсивных операций существует пулы/арены
G>Кроме того проход по списку непотокобезопасен, поэтому требуются особые приседания чтобы стандартный аллокатор нормально заработал в многопоточном окружении.
ну ето просто неправда

Х>>>>в случае с с++ лямбдами исполнено на 100%,

G>>>На 200%, лямбд просто нету Есть только жалкое подобие.
Х>>может ты найдёшь определение lambda в интернет и перестанешь нести ахинею?
G>Ты прочитай 3 предыдущие страницы. Нормальные лямбды подразумевают лексические замыкания, которых нету и не будет в С++.
во-первых: лямбды не подразумевают замыкания, ето замыкания подразумевают лямбды.
во-вторых: лексическое замыкание есть, прочитай теперь ты 3 предыдущие страницы.

Х>>да уж, дотнет действительно замазка для мозга. гц, метаданные, промежуточный код + jit, бесчисленные проверки кода на сейфанутость — всё ето есть даже тогда когда тебе етого не нужно, и ето всё в таком случае — не нужный оверхед.

G>Не разводи демагогию, давай факты.
зайди в раздел .NET или .NET GUI и посмотри темы в которых люди кричат о недостаточной производительности, такое ощущение что избавившись от менеджмента памяти дотнетовцы теперь приседают в борьбе за производительность
People write code, programming languages don't.
Re[60]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 07.05.09 17:01
Здравствуйте, Хвост, Вы писали:

Х>зайди в раздел .NET или .NET GUI и посмотри темы в которых люди кричат о недостаточной производительности, такое ощущение что избавившись от менеджмента памяти дотнетовцы теперь приседают в борьбе за производительность

Что за темы?
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[62]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 17:04
Здравствуйте, Геннадий Васильев, Вы писали:

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


ГВ>>>Ключевое слово — пул.

G>>Угу, очередной "закат солнца вручную". Кроме того с пулом возникают дополнительные проблемы управления временем жизни.

ГВ>Это какие такие проблемы? Что объекты должны быть уничтожены до уничтожения самого пула? Так это — то же самое, что и общее предотвращение утечек памяти.

Опять возвращаемся к ручному управлнию памятью, никаких shred_ptr и прочего.

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

ГВ>>>Это что-то новенькое. Стандартные аллокаторы как раз вполне работают в многопоточном окружении.
G>>Угу, но работают медленно. Даже при однопоточном выделении. Блокировки небесплатные.
ГВ>Ты уж определись: работают стандартные аллокаторы в многопоточном окружении или нет.
Раьотают, но медленно
Re[61]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 17:05
Оценка: +1 :))
Здравствуйте, MxKazan, Вы писали:

MK>Что за темы?

тебе дать ссылку на тему которую завёл ты сам?
People write code, programming languages don't.
Re[61]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 17:07
Здравствуйте, MxKazan, Вы писали:

Х>>зайди в раздел .NET или .NET GUI и посмотри темы в которых люди кричат о недостаточной производительности, такое ощущение что избавившись от менеджмента памяти дотнетовцы теперь приседают в борьбе за производительность

MK>Что за темы?

Склероз?
Автор: MxKazan
Дата: 05.05.09
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[62]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 17:09
Оценка:1 (1) -1
Здравствуйте, Хвост, Вы писали:

MK>>Что за темы?

Х>тебе дать ссылку на тему которую завёл ты сам?
Кстати, глянул, забавная ета тема (http://www.rsdn.ru/forum/message/3379603.flat.aspx
Автор: MxKazan
Дата: 05.05.09
)
Тут дотнет во всей красе, и тормозящий интерфейс, и утечки памяти, вобщем всё лучшее — детям
People write code, programming languages don't.
Re[63]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 17:12
Здравствуйте, gandjustas, Вы писали:

ГВ>>Это какие такие проблемы? Что объекты должны быть уничтожены до уничтожения самого пула? Так это — то же самое, что и общее предотвращение утечек памяти.

G>Опять возвращаемся к ручному управлнию памятью, никаких shred_ptr и прочего.

Почему? Самое обыкновенное управление модулями в программе на C++. В числе прочих, фаза завершения работы модуля может включать и очистку статических (глобальных) указателей.

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

ГВ>>>>Это что-то новенькое. Стандартные аллокаторы как раз вполне работают в многопоточном окружении.
G>>>Угу, но работают медленно. Даже при однопоточном выделении. Блокировки небесплатные.
ГВ>>Ты уж определись: работают стандартные аллокаторы в многопоточном окружении или нет.
G>Раьотают, но медленно

То есть, "нормальная" в твоей терминологии работа — это работа без блокировок, я прав?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[60]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 17:12
Здравствуйте, Хвост, Вы писали:

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


G>>Стандартные аллокаторы в С++ требуют прохода по списку свободных блоков памяти при выделении\освобождении, эта операция имеет алгоритмическую сложность O(n). При интенсивных операциях выделения\освобождения работает очеень медленно.

Х>для интенсивных операций существует пулы/арены
А если у тебя вся программа состоит из таких нтенсивных операций, например высоконагруженный сервер?

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

Х>ну ето просто неправда
Наверное неправльно понял. Приседания требуются в самом аллокаторе, кто снижает производительность.

Х>>>>>в случае с с++ лямбдами исполнено на 100%,

G>>>>На 200%, лямбд просто нету Есть только жалкое подобие.
Х>>>может ты найдёшь определение lambda в интернет и перестанешь нести ахинею?
G>>Ты прочитай 3 предыдущие страницы. Нормальные лямбды подразумевают лексические замыкания, которых нету и не будет в С++.
Х>во-первых: лямбды не подразумевают замыкания, ето замыкания подразумевают лямбды.
Источник этого бреда в студию.

Х>во-вторых: лексическое замыкание есть, прочитай теперь ты 3 предыдущие страницы.

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

Х>>>да уж, дотнет действительно замазка для мозга. гц, метаданные, промежуточный код + jit, бесчисленные проверки кода на сейфанутость — всё ето есть даже тогда когда тебе етого не нужно, и ето всё в таком случае — не нужный оверхед.

G>>Не разводи демагогию, давай факты.
Х>зайди в раздел .NET или .NET GUI и посмотри темы в которых люди кричат о недостаточной производительности, такое ощущение что избавившись от менеджмента памяти дотнетовцы теперь приседают в борьбе за производительность
Многие проблемы с производительностью от незнания. У меня саого программы на .NET тормозили когда я только начинал на нем писать. Теперь таких проблем нету.
Re[62]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 07.05.09 17:14
Оценка: :)
Здравствуйте, Хвост, Вы писали:

MK>>Что за темы?

Х>тебе дать ссылку на тему которую завёл ты сам?
Я, конечно, предполагал, что ты так можешь облажаться, но что Геннадий туда же... Это прямо как про боксинг!
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[64]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 17:21
Здравствуйте, Геннадий Васильев, Вы писали:

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


ГВ>>>Это какие такие проблемы? Что объекты должны быть уничтожены до уничтожения самого пула? Так это — то же самое, что и общее предотвращение утечек памяти.

G>>Опять возвращаемся к ручному управлнию памятью, никаких shred_ptr и прочего.

ГВ>Почему? Самое обыкновенное управление модулями в программе на C++. В числе прочих, фаза завершения работы модуля может включать и очистку статических (глобальных) указателей.

Ох ё....

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

ГВ>>>>>Это что-то новенькое. Стандартные аллокаторы как раз вполне работают в многопоточном окружении.
G>>>>Угу, но работают медленно. Даже при однопоточном выделении. Блокировки небесплатные.
ГВ>>>Ты уж определись: работают стандартные аллокаторы в многопоточном окружении или нет.
G>>Раьотают, но медленно

ГВ>То есть, "нормальная" в твоей терминологии работа — это работа без блокировок, я прав?

Правильная работа — это когда не надо думать выделять память или нет.
Re[63]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 17:28
Здравствуйте, MxKazan, Вы писали:

MK>>>Что за темы?

Х>>тебе дать ссылку на тему которую завёл ты сам?
MK>Я, конечно, предполагал, что ты так можешь облажаться, но что Геннадий туда же... Это прямо как про боксинг!
и где же здесь лажа? что просил то и получил.
кстати про боксинг, будь добр расскажи, какой магией структуры на стеке, которые являются контекстом лямбды, продляют свою жизнь при возврате лямбды из метода?
People write code, programming languages don't.
Re[63]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 17:29
Оценка: +1
Здравствуйте, Геннадий Васильев, Вы писали:

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


ГВ>>>OK, принято. ИМХО, самый серьёзный недостаток такого способа — потенциальные заморочки с циклическими зависимостями. Ну что же, действительно, опциональный (библиотечный) GC иной раз не помешал бы. В принципе — не помешал бы. Другое дело, что острота потребности в GC, ИМХО, невероятно преувеличена. Вот тут, честно тебе скажу, доказать ты её (острую потребность) не сможешь. Потому что придётся доказывать, исходя из субъективных моментов, а субъективно как раз таких проблем нет — C++-ники привыкли управлять своими объектами и им это вполне удаётся. Хорошим C++-никам — удаётся, а кто не умеет — тот плохой C++-ник, и к его мнению не особо прислушиваются.

G>>Как раз таки привычки субъективны. А потребность в высокоуровневых языках в большенстве задач очень объективна.
ГВ>Приехали. C++ — высокоуровневый язык. Или вы хотите поговорить о DSL? Ну давай, поговорим про DSL.
С++ очень низкоуровневый по сравнению с современными языками.


G>>Но при этом существует достаточно много программистов на С++ со своим субъективным мнением.

ГВ>Если мнения этих программистов хватает, чтобы решать поставленные задачи, значит, потребность в языках местами преувеличена, т.е., не всегда объективна. Сам понимаешь, материя "потребности" тонкая, весьма зависимая от "интеграла по субъективным суждениям".
Ну ты страшный бред говоришь. Это примерно как думать что не нужны машины, потому что лошадей хватает решать задачи.

ГВ>>>ИМХО, потому про GC хоть и поговаривают, но не особо.

G>>Еще раз. Не получится на C++ сделать CG с характеристиками, близкими к .NETовскому.
G>>Сам язык должен быть рассчитан на работу GC.
G>>Практически любая реализация GC на C++ будет вносить достаточно большой оверхед чтобы отказаться от его использования.
ГВ>Не совсем так. Дело в том, что GC для C++ не должен решать задачи управления абсолютно всеми объектами и никто ничего такого и не предлагает. Но для каких-то отдельных моментов он вполне может оказаться приемлемым решением, лучшим, чем reference counting. Ключевое слово: "какие-то отдельные моменты".
Ну а тепереь давай точнее. Как будет происходить разделение между управляемыми GC объектами и остальными? Какие это даст преимущества?
Re[64]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 17:31
Здравствуйте, Хвост, Вы писали:

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


MK>>>>Что за темы?

Х>>>тебе дать ссылку на тему которую завёл ты сам?
MK>>Я, конечно, предполагал, что ты так можешь облажаться, но что Геннадий туда же... Это прямо как про боксинг!
Х>и где же здесь лажа? что просил то и получил.
Х>кстати про боксинг, будь добр расскажи, какой магией структуры на стеке, которые являются контекстом лямбды, продляют свою жизнь при возврате лямбды из метода?
Это и называется лексическим замыканием
На C++ (даже с новым стандартом) такое повторить сможешь?
Re[61]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 17:37
Здравствуйте, gandjustas, Вы писали:

G>>>Стандартные аллокаторы в С++ требуют прохода по списку свободных блоков памяти при выделении\освобождении, эта операция имеет алгоритмическую сложность O(n). При интенсивных операциях выделения\освобождения работает очеень медленно.

Х>>для интенсивных операций существует пулы/арены
G>А если у тебя вся программа состоит из таких нтенсивных операций, например высоконагруженный сервер?
даа, вся программа состоит из аллокаций в хипе, такую ещё поискать надо, а как же твои незабвенные 10% кода отнимают 90% ресурсов? или ето не распространяется на высоконагруженные сервера?

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

Х>>ну ето просто неправда
G>Наверное неправльно понял. Приседания требуются в самом аллокаторе, кто снижает производительность.
что-то я совсем запутался, кто и где приседает.

Х>>>>>>в случае с с++ лямбдами исполнено на 100%,

G>>>>>На 200%, лямбд просто нету Есть только жалкое подобие.
Х>>>>может ты найдёшь определение lambda в интернет и перестанешь нести ахинею?
G>>>Ты прочитай 3 предыдущие страницы. Нормальные лямбды подразумевают лексические замыкания, которых нету и не будет в С++.
Х>>во-первых: лямбды не подразумевают замыкания, ето замыкания подразумевают лямбды.
G>Источник этого бреда в студию.
какого бреда? лямбда — анонимная функция
замыкание — функция знающая о контексте вызывающей функции
возможно я погорячился что замыкания подразумевают лямбды, но в большинстве языков ето так, с чем ты не согласен собственно?
ещё раз про замыкания, в c++ ты можешь скопировать весь контекст (синтаксис [=]) и ето будет идентично по семантике с некоторыми лиспами, которые тоже копируют контекст, а не ссылки. Так с чем ты не согласен? то что С++ позволяет программисту оптимально оперировать контекстом? и там где не нужно копирование воспользоваться ссылкой? да, в случае ссылок программист должен учитывать время их жизни, но ето в мире с++ есстесственно, и от етого очевидно лямбды не меняют своего называния.

Х>>во-вторых: лексическое замыкание есть, прочитай теперь ты 3 предыдущие страницы.

G>Нету. Можно сымитировать подобие лексических замыканий причем со значительными ограничениями.
ещё раз, где иммитация? в чём иммитация?

Х>>зайди в раздел .NET или .NET GUI и посмотри темы в которых люди кричат о недостаточной производительности, такое ощущение что избавившись от менеджмента памяти дотнетовцы теперь приседают в борьбе за производительность

G>Многие проблемы с производительностью от незнания. У меня саого программы на .NET тормозили когда я только начинал на нем писать. Теперь таких проблем нету.
я рад за тебя что у тебя нет проблемм с производительностью, а в коде над которым я работаю нет утечек памяти, и явные delete можно пересчитать по пальцам, и что?
People write code, programming languages don't.
Re[63]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 17:41
Здравствуйте, MxKazan, Вы писали:

MK>Я, конечно, предполагал, что ты так можешь облажаться, но что Геннадий туда же... Это прямо как про боксинг!


Шутки-шутками, но если заглянуть в .NET GUI, то там прямо таки несколько активных топиков — про производительность. Однако!
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[64]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 07.05.09 17:43
Здравствуйте, Геннадий Васильев, Вы писали:

MK>>Я, конечно, предполагал, что ты так можешь облажаться, но что Геннадий туда же... Это прямо как про боксинг!


ГВ>Шутки-шутками, но если заглянуть в .NET GUI, то там прямо таки несколько активных топиков — про производительность. Однако!


Давайте загляним в топики в разделе С++.

Шах и мат.
Re[65]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 17:44
Оценка: -1
Здравствуйте, gandjustas, Вы писали:

ГВ>>Почему? Самое обыкновенное управление модулями в программе на C++. В числе прочих, фаза завершения работы модуля может включать и очистку статических (глобальных) указателей.

G>Ох ё....

А по сути?

ГВ>>То есть, "нормальная" в твоей терминологии работа — это работа без блокировок, я прав?

G>Правильная работа — это когда не надо думать выделять память или нет.

Понятно. Всё, что не C# — неправильно. Так бы сразу и сказал.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[66]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 07.05.09 17:45
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Всё, что не C++ — неправильно.


Да, понятно.
Re[64]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 07.05.09 17:48
Здравствуйте, Геннадий Васильев, Вы писали:

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

MK>>Я, конечно, предполагал, что ты так можешь облажаться, но что Геннадий туда же... Это прямо как про боксинг!
ГВ>Шутки-шутками, но если заглянуть в .NET GUI, то там прямо таки несколько активных топиков — про производительность. Однако!
Ага. Только потом выясняется, что в обеих программисты создают по 10 тысяч пользовательских элементов, в одной это длиться 1-4 секунды, а в другой тормоза обнаруживаются в нативном(!) слое отрисовки. Только чтобы это понять, надо хотя-бы немного шарить в WPF, а не вестись на название тем. Кстати, еще упоминалось про тормоза в ветке .NET (не GUI). Не поделишься ссылками?
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[64]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 07.05.09 17:51
Оценка:1 (1) +1
Здравствуйте, Хвост, Вы писали:

Х>кстати про боксинг, будь добр расскажи, какой магией структуры на стеке, которые являются контекстом лямбды, продляют свою жизнь при возврате лямбды из метода?

Легко. Эти структуры размещаются не на стеке, а в полях класса, который и лямбду оборачивает.
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[64]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 07.05.09 17:51
Здравствуйте, Хвост, Вы писали:

Х>кстати про боксинг, будь добр расскажи, какой магией структуры на стеке, которые являются контекстом лямбды, продляют свою жизнь при возврате лямбды из метода?

Структуры, являющиеся контекстом лямбды изначально расположены не на стеке, а в хипе вместе со всем контекстом лямбды. Потому боксинга здесь нет.
Re[65]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 17:55
Здравствуйте, MxKazan, Вы писали:

Х>>кстати про боксинг, будь добр расскажи, какой магией структуры на стеке, которые являются контекстом лямбды, продляют свою жизнь при возврате лямбды из метода?

MK>Легко. Эти структуры размещаются не на стеке, а в полях класса, который и лямбду оборачивает.
логично, в с++ вероятно похожая схема
People write code, programming languages don't.
Re[65]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 17:56
Оценка: :)
Здравствуйте, samius, Вы писали:

Х>>кстати про боксинг, будь добр расскажи, какой магией структуры на стеке, которые являются контекстом лямбды, продляют свою жизнь при возврате лямбды из метода?

MK>Легко. Эти структуры размещаются не на стеке, а в полях класса, который и лямбду оборачивает.

Х>>кстати про боксинг, будь добр расскажи, какой магией структуры на стеке, которые являются контекстом лямбды, продляют свою жизнь при возврате лямбды из метода?

S>Структуры, являющиеся контекстом лямбды изначально расположены не на стеке, а в хипе вместе со всем контекстом лямбды. Потому боксинга здесь нет.
эээ, ребят, вы таки определитесь как оно работает
People write code, programming languages don't.
Re[63]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 07.05.09 17:56
Оценка:4 (2) +3 :)
Здравствуйте, Хвост, Вы писали:

MK>>>Что за темы?

Х>>тебе дать ссылку на тему которую завёл ты сам?
Х>Кстати, глянул, забавная ета тема (http://www.rsdn.ru/forum/message/3379603.flat.aspx
Автор: MxKazan
Дата: 05.05.09
)

Х>Тут дотнет во всей красе, и тормозящий интерфейс, и утечки памяти, вобщем всё лучшее — детям :)))

Да уж, такое впечатление что дотнетчики живут в каком-то виртуальном мире, навеянном рекламными проспектами — в мире где нет утечек памяти, где программы летают, а критерием хорошести языка является то, насколько он поддерживает лямбды :) В конце-концов, ну не было в C++ лямбд — ну и черт с ними, вполне можно без них прожить. Что народ к ним привязался? А вот в C# нет деструкторов и переопределения операторов присваивания, например. Я конечно понимаю, что если чего-то нет в текущей версии C# — это не нужно, а если чего-то нет в C++ — это плохой дизайн языка, но все же :)
Re[66]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 07.05.09 17:58
Здравствуйте, Хвост, Вы писали:

Х>>>кстати про боксинг, будь добр расскажи, какой магией структуры на стеке, которые являются контекстом лямбды, продляют свою жизнь при возврате лямбды из метода?

S>>Структуры, являющиеся контекстом лямбды изначально расположены не на стеке, а в хипе вместе со всем контекстом лямбды. Потому боксинга здесь нет.
Х>эээ, ребят, вы таки определитесь как оно работает
То, что структура лежит в хипе, не означает что она отбоксирована. Может хоть немного сделаешь вид, что понимаешь о чем пишешь?
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[66]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 07.05.09 17:59
Оценка: +1
Здравствуйте, Хвост, Вы писали:

Х>эээ, ребят, вы таки определитесь как оно работает

Написали одно и то же разными словами.
Re[66]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 07.05.09 18:01
Здравствуйте, Хвост, Вы писали:

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


MK>>Легко. Эти структуры размещаются не на стеке, а в полях класса, который и лямбду оборачивает.

Х>логично, в с++ вероятно похожая схема

Судя по описанию новшеств в C++0x, ссылку на которое давал ГВ, схема в C++ невероятно не похожа на дотнетовскую.
Re[67]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 18:05
Здравствуйте, MxKazan, Вы писали:

MK>Здравствуйте, Хвост, Вы писали:


Х>>>>кстати про боксинг, будь добр расскажи, какой магией структуры на стеке, которые являются контекстом лямбды, продляют свою жизнь при возврате лямбды из метода?

S>>>Структуры, являющиеся контекстом лямбды изначально расположены не на стеке, а в хипе вместе со всем контекстом лямбды. Потому боксинга здесь нет.
Х>>эээ, ребят, вы таки определитесь как оно работает
MK>То, что структура лежит в хипе, не означает что она отбоксирована. Может хоть немного сделаешь вид, что понимаешь о чем пишешь?
погоди ерепенится, прочтя твоё сообщение я понял что структура изначально таки лежит на стеке, но в момент вызова лямбды она копируется в поле лямбды, своё же сообщение я написал в ответ на сообщение samius'а, в котором написано что структуры, попадающие в scope лямбды никогда не лежат на стеке, так как всё-таки верно? если верно второе то ето вообще удивительно, получается что там где в C# вызывается лямбда стековых структур не может быть в принципе, а ето просто неимоверный оверхед.
People write code, programming languages don't.
Re[64]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 18:12
Здравствуйте, gandjustas, Вы писали:

G>>>Как раз таки привычки субъективны. А потребность в высокоуровневых языках в большенстве задач очень объективна.

ГВ>>Приехали. C++ — высокоуровневый язык. Или вы хотите поговорить о DSL? Ну давай, поговорим про DSL.
G>С++ очень низкоуровневый по сравнению с современными языками.

У меня дежа-вю. Это уже было и совсем недавно.

G>>>Но при этом существует достаточно много программистов на С++ со своим субъективным мнением.

ГВ>>Если мнения этих программистов хватает, чтобы решать поставленные задачи, значит, потребность в языках местами преувеличена, т.е., не всегда объективна. Сам понимаешь, материя "потребности" тонкая, весьма зависимая от "интеграла по субъективным суждениям".
G>Ну ты страшный бред говоришь. Это примерно как думать что не нужны машины, потому что лошадей хватает решать задачи.

Дык. Были бы машины. Больше похоже на замену одних лошадей чуть-чуть более другими.

ГВ>>Не совсем так. Дело в том, что GC для C++ не должен решать задачи управления абсолютно всеми объектами и никто ничего такого и не предлагает. Но для каких-то отдельных моментов он вполне может оказаться приемлемым решением, лучшим, чем reference counting. Ключевое слово: "какие-то отдельные моменты".

G>Ну а тепереь давай точнее. Как будет происходить разделение между управляемыми GC объектами и остальными? Какие это даст преимущества?

Тут надо подумать, быстро не отвечу. Преимущества, по идее, должны быть в меньшем количестве lock (неизбежен при подсчёте ссылок) и соответственно — в меньшем количестве сбросов кэша процессора. Ну и конечно — в решении проблемы с циклическими ссылками.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[68]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 07.05.09 18:14
Здравствуйте, Хвост, Вы писали:

Х>погоди ерепенится, прочтя твоё сообщение я понял что структура изначально таки лежит на стеке, но в момент вызова лямбды она копируется в поле лямбды, своё же сообщение я написал в ответ на сообщение samius'а, в котором написано что структуры, попадающие в scope лямбды никогда не лежат на стеке, так как всё-таки верно?

Замкнутые структуры размещаются в полях класса.

Х>если верно второе то ето вообще удивительно, получается что там где в C# вызывается лямбда стековых структур не может быть в принципе, а ето просто неимоверный оверхед.

Ты так шутишь или взаправду считаешь, что 30-40 байт — это НЕИМОВЕРНЫЙ ОВЕРХЕД!?!?!?
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[64]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 07.05.09 18:16
Оценка:3 (1)
Здравствуйте, COFF, Вы писали:

COF>Да уж, такое впечатление что дотнетчики живут в каком-то виртуальном мире, навеянном рекламными проспектами — в мире где нет утечек памяти, где программы летают, а критерием хорошести языка является то, насколько он поддерживает лямбды

С лямбдами однозначно лучше чем без них. Уверен, что если у дотнетчиков резко отнять лямбды и, следовательно linq, они пойдут революцией против M$!
COF>В конце-концов, ну не было в C++ лямбд — ну и черт с ними, вполне можно без них прожить. Что народ к ним привязался?
А кто спорит? Можно. Можно прожить и без рекурсии, и даже без виртуальных методов.

COF>А вот в C# нет деструкторов и переопределения операторов присваивания, например.

Очень много желающих добавить в дотнет что-то. Например, паттерн-матчинг. И очень мало желающих вставить в дотнет деструкторы и операторы присванивания. Они почему-то нужны только C++-никам.
COF>Я конечно понимаю, что если чего-то нет в текущей версии C# — это не нужно, а если чего-то нет в C++ — это плохой дизайн языка, но все же
В C# тоже многого нехватает. Те, кому этого очень сильно не хватает, используют Nemerle и F#.
Re[65]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 18:17
Здравствуйте, criosray, Вы писали:

ГВ>>Шутки-шутками, но если заглянуть в .NET GUI, то там прямо таки несколько активных топиков — про производительность. Однако!

C>Давайте загляним в топики в разделе С++.

Даже не заглядывая можно сказать, что производительность — любимая фишка плюсовиков, обсуждается часто и со вкусом. Так что, удивляться нечему.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[67]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 18:19
Здравствуйте, criosray, Вы писали:

ГВ>>Всё, что не C++ — неправильно.

C>Да, понятно.

Странно. Разве я называл шарповые или, например, лисповые лямбды — "недолямбдами", а сам C# — "недоязыком"? Так что, что-то тебе померещилось не то. Ты меня с кем-то путаешь.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[69]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 18:20
Здравствуйте, MxKazan, Вы писали:

Х>>погоди ерепенится, прочтя твоё сообщение я понял что структура изначально таки лежит на стеке, но в момент вызова лямбды она копируется в поле лямбды, своё же сообщение я написал в ответ на сообщение samius'а, в котором написано что структуры, попадающие в scope лямбды никогда не лежат на стеке, так как всё-таки верно?

MK>Замкнутые структуры размещаются в полях класса.
логично, но меня всё же более интересовал вопрос о том, будут ли ети структуры существовать на стеке если они замкнуты.

Х>>если верно второе то ето вообще удивительно, получается что там где в C# вызывается лямбда стековых структур не может быть в принципе, а ето просто неимоверный оверхед.

MK>Ты так шутишь или взаправду считаешь, что 30-40 байт — это НЕИМОВЕРНЫЙ ОВЕРХЕД!?!?!?
оверхед не в памяти, оверхед в скорости аллокации/доступа стек vs heap
People write code, programming languages don't.
Re[68]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 07.05.09 18:24
Оценка:2 (1)
Здравствуйте, Хвост, Вы писали:

Х>... я написал в ответ на сообщение samius'а, в котором написано что структуры, попадающие в scope лямбды никогда не лежат на стеке, так как всё-таки верно? если верно второе то ето вообще удивительно, получается что там где в C# вызывается лямбда стековых структур не может быть в принципе, а ето просто неимоверный оверхед.

Не совсем верно. Лямбда не исключает стековых структур. А лексическое замыкание переменных (структур в том числе) реализуется через размещение переменных в классе, который в хипе.
Оверхед — да. Неимоверный — смотря для чего. Хочешь выжать пару тактов — забудь про лямбды и занимайся ручным инлайнингом. А в общем случае — удобно и красиво.
Re[65]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 07.05.09 18:24
Здравствуйте, samius, Вы писали:

COF>>А вот в C# нет деструкторов и переопределения операторов присваивания, например.

S>Очень много желающих добавить в дотнет что-то. Например, паттерн-матчинг. И очень мало желающих вставить в дотнет деструкторы и операторы присванивания. Они почему-то нужны только C++-никам.

Ну так, а потом получается, что программы с GC страдают от утечек памяти. Кому сказать — не поверят :) Такое впечатление, что в ситуации "вам шашечки или ехать", дотнетчики уверенно выбирают шашечки :)
Re[70]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 07.05.09 18:29
Здравствуйте, Хвост, Вы писали:

Х>оверхед не в памяти, оверхед в скорости аллокации/доступа стек vs heap

ааааа... я понял, ты хипом вообще не пользуешься, всё только в стеке, и пишешь ты только на ассемблере, а то в С++ еще и классы бывают с виртуальными методами, а это, как и хип, непременно неимоверный оверхед!
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[69]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 07.05.09 18:30
Оценка:1 (1)
Здравствуйте, samius, Вы писали:

S>Оверхед — да. Неимоверный — смотря для чего. Хочешь выжать пару тактов — забудь про лямбды и занимайся ручным инлайнингом. А в общем случае — удобно и красиво.


Погодите, тут пару десятков страниц назад меня клеймили за то, что я привел рекомендацию избегать маленьких функций. Сейчас мне отчего-то кажется, что ручной инлайнинг — это тоже самое, но другими словами, нет?
Re[62]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 18:32
Здравствуйте, Хвост, Вы писали:

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


G>>>>Стандартные аллокаторы в С++ требуют прохода по списку свободных блоков памяти при выделении\освобождении, эта операция имеет алгоритмическую сложность O(n). При интенсивных операциях выделения\освобождения работает очеень медленно.

Х>>>для интенсивных операций существует пулы/арены
G>>А если у тебя вся программа состоит из таких нтенсивных операций, например высоконагруженный сервер?
Х>даа, вся программа состоит из аллокаций в хипе, такую ещё поискать надо, а как же твои незабвенные 10% кода отнимают 90% ресурсов? или ето не распространяется на высоконагруженные сервера?
Не путай. 10% кода выполняются 90% времени в вычислтеьных задачах.
При высоких нагрузках надо оптимально управлять ресурсами.

Х>ещё раз про замыкания, в c++ ты можешь скопировать весь контекст (синтаксис [=]) и ето будет идентично по семантике с некоторыми лиспами, которые тоже копируют контекст, а не ссылки. Так с чем ты не согласен? то что С++ позволяет программисту оптимально оперировать контекстом? и там где не нужно копирование воспользоваться ссылкой? да, в случае ссылок программист должен учитывать время их жизни, но ето в мире с++ есстесственно, и от етого очевидно лямбды не меняют своего называния.

Мда..
Есть переменная на стеке, надо построить честное замыкание для лямбды. Время жизни лямбды больше текущего скоупа. Что С++ предлагает? Ничего.
Нет полноценных замыканий => нет полноценных лямбд. Твоя демагогия не интересует.

Х>>>во-вторых: лексическое замыкание есть, прочитай теперь ты 3 предыдущие страницы.

G>>Нету. Можно сымитировать подобие лексических замыканий причем со значительными ограничениями.
Х>ещё раз, где иммитация? в чём иммитация?
Читай выше и внимательнее.

Х>>>зайди в раздел .NET или .NET GUI и посмотри темы в которых люди кричат о недостаточной производительности, такое ощущение что избавившись от менеджмента памяти дотнетовцы теперь приседают в борьбе за производительность

G>>Многие проблемы с производительностью от незнания. У меня саого программы на .NET тормозили когда я только начинал на нем писать. Теперь таких проблем нету.
Х>я рад за тебя что у тебя нет проблемм с производительностью, а в коде над которым я работаю нет утечек памяти, и явные delete можно пересчитать по пальцам, и что?
И кто же память освобождает? shared_ptr, так они оверхед создают...

А вообще-то есть статистика. Так вот проблемы с утечками памяти в unmanaged появляют гораздо чаще проблем с производительностью в managed.
Re[66]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 07.05.09 18:32
Здравствуйте, COFF, Вы писали:

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


COF>>>А вот в C# нет деструкторов и переопределения операторов присваивания, например.

S>>Очень много желающих добавить в дотнет что-то. Например, паттерн-матчинг. И очень мало желающих вставить в дотнет деструкторы и операторы присванивания. Они почему-то нужны только C++-никам.

COF>Ну так, а потом получается, что программы с GC страдают от утечек памяти. Кому сказать — не поверят

Как связано отсутствие деструкторов и операторов присваивания в дотнете с утечками программ с GC?

COF>Такое впечатление, что в ситуации "вам шашечки или ехать", дотнетчики уверенно выбирают шашечки

Что, программы на дотнете ни разу не ездят впринципе?
Re[71]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 18:32
Здравствуйте, MxKazan, Вы писали:

MK>Здравствуйте, Хвост, Вы писали:


Х>>оверхед не в памяти, оверхед в скорости аллокации/доступа стек vs heap

MK> ааааа... я понял, ты хипом вообще не пользуешься, всё только в стеке, и пишешь ты только на ассемблере, а то в С++ еще и классы бывают с виртуальными методами, а это, как и хип, непременно неимоверный оверхед!
к сожалению ты ничего не понял...
к тебе как к дотнетчику нескромный вопрос, чем занимаешься? вебом али ентерпрайзом? третьего то не дано
People write code, programming languages don't.
Re[69]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 18:32
Здравствуйте, MxKazan, Вы писали:

Х>>погоди ерепенится, прочтя твоё сообщение я понял что структура изначально таки лежит на стеке, но в момент вызова лямбды она копируется в поле лямбды, своё же сообщение я написал в ответ на сообщение samius'а, в котором написано что структуры, попадающие в scope лямбды никогда не лежат на стеке, так как всё-таки верно?

MK>Замкнутые структуры размещаются в полях класса.

А замкнуть "по ссылке" их можно? То есть так, чтобы структура "физически" осталась в стеке конструирующей лямбду функции? Или только "по значению", то есть — копированием в соответствующий экземпляр класса сконструированной лямбды?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[67]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 07.05.09 18:36
Здравствуйте, samius, Вы писали:

COF>>Ну так, а потом получается, что программы с GC страдают от утечек памяти. Кому сказать — не поверят :)

S>Как связано отсутствие деструкторов и операторов присваивания в дотнете с утечками программ с GC?

Они позволяют реализовывать осмысленные стратегии управления ресурсами, в том числе отличными от памяти. На самом деле, это очевидно. Или наша цель догнать и перегнать хаскель, в том числе и по производительности, а ресурсы уж как-нибудь сами собой освободятся? :)

COF>>Такое впечатление, что в ситуации "вам шашечки или ехать", дотнетчики уверенно выбирают шашечки :)

S>Что, программы на дотнете ни разу не ездят впринципе?

Медленно и печально :)
Re[65]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 18:36
Здравствуйте, samius, Вы писали:

COF>>В конце-концов, ну не было в C++ лямбд — ну и черт с ними, вполне можно без них прожить. Что народ к ним привязался?

S>А кто спорит? Можно. Можно прожить и без рекурсии, и даже без виртуальных методов.
Да что там лямбды. Десяток страниц назад кто-то доказывал что всю программу можно написать используя один стек.
Даешь офис на стеке
Re[70]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 18:37
Здравствуйте, Хвост, Вы писали:

Х>>>если верно второе то ето вообще удивительно, получается что там где в C# вызывается лямбда стековых структур не может быть в принципе, а ето просто неимоверный оверхед.

MK>>Ты так шутишь или взаправду считаешь, что 30-40 байт — это НЕИМОВЕРНЫЙ ОВЕРХЕД!?!?!?
Х>оверхед не в памяти, оверхед в скорости аллокации/доступа стек vs heap

Ну и расскажи нам о скорости аллокации стек vs managed heap
Re[63]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 18:38
Здравствуйте, gandjustas, Вы писали:

G>Есть переменная на стеке, надо построить честное замыкание для лямбды. Время жизни лямбды больше текущего скоупа. Что С++ предлагает? Ничего.


Да ёлки ж зелёные! Значения (синоним в данном контексте: копия переменной) плюсовыми лямбдами замыкаются с лёгкостью неимоверной. А дальше — хоть выводи функцию из скопа, хоть прихлопывай.

G>Нет полноценных замыканий => нет полноценных лямбд. Твоя демагогия не интересует.


Не, ну это уже просто феерично.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[70]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 07.05.09 18:39
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>А замкнуть "по ссылке" их можно? То есть так, чтобы структура "физически" осталась в стеке конструирующей лямбду функции? Или только "по значению", то есть — копированием в соответствующий экземпляр класса сконструированной лямбды?

Я напишу про общий случай, т.к. спецификацию на язык не читал. Так вот, копирования никакого нет. Компилятор превращает лямбду в класс, у которого поля — это замкнутые переменные, а единственный метод — тело (или как там оно называется) лямбды. Все операторы работающие с замкнутой переменной вне лямбды, переписываются на обращение к полю класса.
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[63]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 18:40
Оценка: -1 :)
Здравствуйте, gandjustas, Вы писали:

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


G>>>А если у тебя вся программа состоит из таких нтенсивных операций, например высоконагруженный сервер?

Х>>даа, вся программа состоит из аллокаций в хипе, такую ещё поискать надо, а как же твои незабвенные 10% кода отнимают 90% ресурсов? или ето не распространяется на высоконагруженные сервера?
G>Не путай. 10% кода выполняются 90% времени в вычислтеьных задачах.
G>При высоких нагрузках надо оптимально управлять ресурсами.
ну вот, пошли уточнения про вычислительные задачи а уж если надо оптимально управлять ресурсами то использовать C++ ето сам бог велел.

Х>>ещё раз про замыкания, в c++ ты можешь скопировать весь контекст (синтаксис [=]) и ето будет идентично по семантике с некоторыми лиспами, которые тоже копируют контекст, а не ссылки. Так с чем ты не согласен? то что С++ позволяет программисту оптимально оперировать контекстом? и там где не нужно копирование воспользоваться ссылкой? да, в случае ссылок программист должен учитывать время их жизни, но ето в мире с++ есстесственно, и от етого очевидно лямбды не меняют своего называния.

G>Мда..
G>Есть переменная на стеке, надо построить честное замыкание для лямбды. Время жизни лямбды больше текущего скоупа. Что С++ предлагает? Ничего.
да что же ты будешь делать, повторяю, три раза: контекст может копироваться, копироваться, копироваться.
т.е. в лямбду скопируется значение переменной на стеке
для закрепления:
копироваться может контекст
не только по ссылке а и по значению
копироваться
контекст
по значению
запомнил?

G>Читай выше и внимательнее.

читай выше и внимательнее

Х>>>>зайди в раздел .NET или .NET GUI и посмотри темы в которых люди кричат о недостаточной производительности, такое ощущение что избавившись от менеджмента памяти дотнетовцы теперь приседают в борьбе за производительность

G>>>Многие проблемы с производительностью от незнания. У меня саого программы на .NET тормозили когда я только начинал на нем писать. Теперь таких проблем нету.
Х>>я рад за тебя что у тебя нет проблемм с производительностью, а в коде над которым я работаю нет утечек памяти, и явные delete можно пересчитать по пальцам, и что?
G>И кто же память освобождает? shared_ptr, так они оверхед создают...
ух-хаха, я вообще не использую shared_ptr, представляешь? удивительно, да?

G>А вообще-то есть статистика. Так вот проблемы с утечками памяти в unmanaged появляют гораздо чаще проблем с производительностью в managed.

есть статистика, что на десктопах пользователей подавляющее большинство приложений — unmanaged, ето на мой взгляд самая лучшая статистика.
People write code, programming languages don't.
Re[68]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 07.05.09 18:43
Здравствуйте, COFF, Вы писали:

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

Что значит "осмысленные"?
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[68]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 18:43
Здравствуйте, COFF, Вы писали:

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


COF>>>Ну так, а потом получается, что программы с GC страдают от утечек памяти. Кому сказать — не поверят

S>>Как связано отсутствие деструкторов и операторов присваивания в дотнете с утечками программ с GC?

COF>Они позволяют реализовывать осмысленные стратегии управления ресурсами, в том числе отличными от памяти.

Осмысленное в твоем понимании — ручное?

COF>>>Такое впечатление, что в ситуации "вам шашечки или ехать", дотнетчики уверенно выбирают шашечки

S>>Что, программы на дотнете ни разу не ездят впринципе?
COF>Медленно и печально
От чего такая уверенность?
Вот привели в пример какой-то пост, где с помощью WPF попытались нарисовать туеву хучу объектов. Интересно, на С++ аналогичное вообще заведется? (не говоря о том чтобы поехать)
Re[69]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 07.05.09 18:48
Оценка: -1
Здравствуйте, gandjustas, Вы писали:

COF>>Они позволяют реализовывать осмысленные стратегии управления ресурсами, в том числе отличными от памяти.

G>Осмысленное в твоем понимании — ручное?

Осмысленное — это значит сделал один раз и забыл, все работает. А ручное — это как-раз подход C#, присвоил переменную, не забудь вызвать функцию типа SubscribeResource, обнулил — UnsubscribeResource ну и так далее.
Re[71]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 18:48
Здравствуйте, MxKazan, Вы писали:

MK>Здравствуйте, Геннадий Васильев, Вы писали:


ГВ>>А замкнуть "по ссылке" их можно? То есть так, чтобы структура "физически" осталась в стеке конструирующей лямбду функции? Или только "по значению", то есть — копированием в соответствующий экземпляр класса сконструированной лямбды?

MK>Я напишу про общий случай, т.к. спецификацию на язык не читал. Так вот, копирования никакого нет. Компилятор превращает лямбду в класс, у которого поля — это замкнутые переменные, а единственный метод — тело (или как там оно называется) лямбды. Все операторы работающие с замкнутой переменной вне лямбды, переписываются на обращение к полю класса.

Примерно то же самое, кстати, должен делать и компилятор C++. Лямбда тоже преобразуется в класс с единственным методом (не считая конструктора копии, кажется) — "operator()(сигнатура, выведенная из параметров лямбды)".

По сути вопроса — понятно. Не знаешь, значит — не знаешь.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[64]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 18:51
Здравствуйте, Хвост, Вы писали:

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


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


G>>>>А если у тебя вся программа состоит из таких нтенсивных операций, например высоконагруженный сервер?

Х>>>даа, вся программа состоит из аллокаций в хипе, такую ещё поискать надо, а как же твои незабвенные 10% кода отнимают 90% ресурсов? или ето не распространяется на высоконагруженные сервера?
G>>Не путай. 10% кода выполняются 90% времени в вычислтеьных задачах.
G>>При высоких нагрузках надо оптимально управлять ресурсами.
Х>ну вот, пошли уточнения про вычислительные задачи а уж если надо оптимально управлять ресурсами то использовать C++ ето сам бог велел.

И что есть в с++ для управления ресурсами? Наверное хорошый пул потоков или "зеленые" треды? А может там есть выделение памяти в хипе за O(1)?


G>>Есть переменная на стеке, надо построить честное замыкание для лямбды. Время жизни лямбды больше текущего скоупа. Что С++ предлагает? Ничего.

Х>да что же ты будешь делать, повторяю, три раза: контекст может копироваться, копироваться, копироваться.
Х>т.е. в лямбду скопируется значение переменной на стеке
Х>для закрепления:
Х>копироваться может контекст
Х>не только по ссылке а и по значению
Х>копироваться
Х>контекст
Х>по значению
Х>запомнил?
Не надо мне доказывать что нету и не будет в с++ нормальных замыканий, я это и так знаю.

Х>>>>>зайди в раздел .NET или .NET GUI и посмотри темы в которых люди кричат о недостаточной производительности, такое ощущение что избавившись от менеджмента памяти дотнетовцы теперь приседают в борьбе за производительность

G>>>>Многие проблемы с производительностью от незнания. У меня саого программы на .NET тормозили когда я только начинал на нем писать. Теперь таких проблем нету.
Х>>>я рад за тебя что у тебя нет проблемм с производительностью, а в коде над которым я работаю нет утечек памяти, и явные delete можно пересчитать по пальцам, и что?
G>>И кто же память освобождает? shared_ptr, так они оверхед создают...
Х>ух-хаха, я вообще не использую shared_ptr, представляешь? удивительно, да?
И что же ты используешь?

G>>А вообще-то есть статистика. Так вот проблемы с утечками памяти в unmanaged появляют гораздо чаще проблем с производительностью в managed.

Х>есть статистика, что на десктопах пользователей подавляющее большинство приложений — unmanaged, ето на мой взгляд самая лучшая статистика.
Эта статистика очень слабо связана с техническими аспектами. Обсуждали уже сотню раз.
Re[70]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 07.05.09 18:51
Здравствуйте, COFF, Вы писали:

COF>Осмысленное — это значит сделал один раз и забыл, все работает. А ручное — это как-раз подход C#, присвоил переменную, не забудь вызвать функцию типа SubscribeResource, обнулил — UnsubscribeResource ну и так далее.

Это очередной ответ из серии "я ни черта не понимаю о чем там в ветках про .Net, но есть пачка слов, к которым можно прицепиться". Уже утомили.
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[69]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 18:51
Оценка: +1 :)
Здравствуйте, gandjustas, Вы писали:

G>Вот привели в пример какой-то пост, где с помощью WPF попытались нарисовать туеву хучу объектов. Интересно, на С++ аналогичное вообще заведется? (не говоря о том чтобы поехать)


Ясный пень — программы на C++ падают от одного слова: "туева хуча". Заклинание такое, хуже "мемори лика".
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[71]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 07.05.09 18:52
Здравствуйте, MxKazan, Вы писали:

MK>Это очередной ответ из серии "я ни черта не понимаю о чем там в ветках про .Net, но есть пачка слов, к которым можно прицепиться". Уже утомили.


Ага, сейчас ты мне расскажешь про IDisposable :) Плавали, знаем..
Re[72]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 07.05.09 18:54
Оценка:1 (1)
Здравствуйте, Геннадий Васильев, Вы писали:

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


MK>>Я напишу про общий случай, т.к. спецификацию на язык не читал. Так вот, копирования никакого нет. Компилятор превращает лямбду в класс, у которого поля — это замкнутые переменные, а единственный метод — тело (или как там оно называется) лямбды. Все операторы работающие с замкнутой переменной вне лямбды, переписываются на обращение к полю класса.


ГВ>Примерно то же самое, кстати, должен делать и компилятор C++. Лямбда тоже преобразуется в класс с единственным методом (не считая конструктора копии, кажется) — "operator()(сигнатура, выведенная из параметров лямбды)".

дотнет этот класс распологает изначально в хипе, а C++ на стеке. дотнетчики с классом ассоциируют хип если не оговорено "класс на стеке", что означает структуру в дотнете.
Потому то же самое, но лишь условно примерно.
Re[65]: Брависсимо! в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 18:56
Здравствуйте, gandjustas, Вы писали:

Х>>запомнил?

G>Не надо мне доказывать что нету и не будет в с++ нормальных замыканий, я это и так знаю.

Итак: "лямбды в C++ предусматривают возможность замыкания контекста по значению". Твой ответ? (Бис! Бис! Заранее аплодирую)
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[70]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 18:57
Здравствуйте, COFF, Вы писали:

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


COF>>>Они позволяют реализовывать осмысленные стратегии управления ресурсами, в том числе отличными от памяти.

G>>Осмысленное в твоем понимании — ручное?

COF>Осмысленное — это значит сделал один раз и забыл, все работает. А ручное — это как-раз подход C#, присвоил переменную, не забудь вызвать функцию типа SubscribeResource, обнулил — UnsubscribeResource ну и так далее.


А ты на C# писал чтонить сложнее heelo world?
А с асинхронным вводом-выводом работал?
Re[70]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 18:59
Оценка:3 (1)
Здравствуйте, Геннадий Васильев, Вы писали:

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


G>>Вот привели в пример какой-то пост, где с помощью WPF попытались нарисовать туеву хучу объектов. Интересно, на С++ аналогичное вообще заведется? (не говоря о том чтобы поехать)

ГВ>Ясный пень — программы на C++ падают от одного слова: "туева хуча". Заклинание такое, хуже "мемори лика".
Не, такие программы на С++ просто не появляются.
Re[72]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 07.05.09 19:00
Здравствуйте, COFF, Вы писали:

COF>Ага, сейчас ты мне расскажешь про IDisposable Плавали, знаем..

IDisposable сделан для unmanaged-ресурсов, чтобы за вашим, недоступным для GC, багажом следить.
В полностью managed библиотеках он практически не нужен. WPF тому пример.
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[71]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 07.05.09 19:00
Здравствуйте, gandjustas, Вы писали:

G>А с асинхронным вводом-выводом работал?

А причем тут это?
Re[64]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 19:00
Оценка: :)
Здравствуйте, Геннадий Васильев, Вы писали:

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


G>>Есть переменная на стеке, надо построить честное замыкание для лямбды. Время жизни лямбды больше текущего скоупа. Что С++ предлагает? Ничего.


ГВ>Да ёлки ж зелёные! Значения (синоним в данном контексте: копия переменной) плюсовыми лямбдами замыкаются с лёгкостью неимоверной. А дальше — хоть выводи функцию из скопа, хоть прихлопывай.

Нет. Нужно лексическое замыкание (не копирование значения).
Re[72]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 07.05.09 19:03
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>>А замкнуть "по ссылке" их можно? То есть так, чтобы структура "физически" осталась в стеке конструирующей лямбду функции? Или только "по значению", то есть — копированием в соответствующий экземпляр класса сконструированной лямбды?

MK>>Я напишу про общий случай, т.к. спецификацию на язык не читал. Так вот, копирования никакого нет. Компилятор превращает лямбду в класс, у которого поля — это замкнутые переменные, а единственный метод — тело (или как там оно называется) лямбды. Все операторы работающие с замкнутой переменной вне лямбды, переписываются на обращение к полю класса.

ГВ>По сути вопроса — понятно. Не знаешь, значит — не знаешь.

Я не знаю только, делает ли компилятор в каких-либо случаях замыкание на стек. А те лямбды, которые я смотрел в Рефлекторе, реализованы именно так, как описано.
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[66]: Брависсимо! в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 19:03
Оценка: :)))
Здравствуйте, Геннадий Васильев, Вы писали:

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


Х>>>запомнил?

G>>Не надо мне доказывать что нету и не будет в с++ нормальных замыканий, я это и так знаю.

ГВ>Итак: "лямбды в C++ предусматривают возможность замыкания контекста по значению". Твой ответ? (Бис! Бис! Заранее аплодирую)

Не надо такие умные слова говорить. Говори честно — копирование значения. Копирование лексическим замыканием не является.
Re[73]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 07.05.09 19:04
Здравствуйте, MxKazan, Вы писали:

COF>>Ага, сейчас ты мне расскажешь про IDisposable :) Плавали, знаем..

MK>IDisposable сделан для unmanaged-ресурсов, чтобы за вашим, недоступным для GC, багажом следить.
MK>В полностью managed библиотеках он практически не нужен. WPF тому пример.

Хм, из ссылки выше я скорее заключил бы обратное :) Потом, времена когда вся система и все приложения будут работать под одной виртуальной машиной с одним GC пока не наступили, тогда может это и не нужно будет, а пока доступ ко внешним по отношению к данному GC ресурсам — это обычная рутинная задача для любого приложения.
Re[60]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 07.05.09 19:07
Здравствуйте, Хвост, Вы писали:

VD>>А можно узнать, решениями каких задач ты занимаешься на С++?

Х>Можно, в данный момент ето десктопная GIS.

И что в ней требует использования С++?

Х>В свою очередь можно узнать, какие задачи ты решаешь на C#?


Последнее, что я написал на C# (исключая тесты) был редактор кода с подсветкой синтаксиса.
http://rsdn.ru/projects/Rsdn.Editor/Article/Rsdn.Edit.xml это было в 2005-ом.
Еще по мелочи для интеграции с VS 2008 кое-что писал.

А так с 2006-го я им не пользуюсь. Для справки, С++ я практически не пользуюсь с 2002-го года. До этого на С и С++ я писал около 7 лет.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[71]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 19:08
Здравствуйте, gandjustas, Вы писали:

ГВ>>Ясный пень — программы на C++ падают от одного слова: "туева хуча". Заклинание такое, хуже "мемори лика".

G>Не, такие программы на С++ просто не появляются.

Во, талантище!
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[74]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 07.05.09 19:10
Здравствуйте, COFF, Вы писали:

COF>Хм, из ссылки выше я скорее заключил бы обратное Потом, времена когда вся система и все приложения будут работать под одной виртуальной машиной с одним GC пока не наступили, тогда может это и не нужно будет, а пока доступ ко внешним по отношению к данному GC ресурсам — это обычная рутинная задача для любого приложения.

Да ты не один такой. Вы тут многие свои оригинальные выводы делаете. Всё от того, что на .Net никто не пишет и смотрит на обсуждение с позиции "к чему бы придраться". Если бы ты почитал внимательно, то увидел бы, что спор идет против втаскивания наследия (unmanaged)WinForms в WPF. Мне еще не разу не понадобился IDisposable, хотя уже 7 месяцев работаю над приложением на WPF, и контролы писал и шаблоны ваял и много много еще чего.
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[67]: Брависсимо! в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 19:10
Оценка: -1
Здравствуйте, gandjustas, Вы писали:

ГВ>>Итак: "лямбды в C++ предусматривают возможность замыкания контекста по значению". Твой ответ? (Бис! Бис! Заранее аплодирую)

G>Не надо такие умные слова говорить. Говори честно — копирование значения. Копирование лексическим замыканием не является.

Расскажи это лисперам. В лиспе исторически замыкания создавались копированием используемых переменных.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[72]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 19:12
Здравствуйте, COFF, Вы писали:

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


G>>А с асинхронным вводом-выводом работал?

COF>А причем тут это?
При том.
Асинхронный ввод-вывод ломает "линейную" структуры программы, это очень сильно сказывается на том как управлять ресурсами.
Re[69]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 19:12
Оценка: :)
Здравствуйте, gandjustas, Вы писали:

COF>>>>Такое впечатление, что в ситуации "вам шашечки или ехать", дотнетчики уверенно выбирают шашечки

S>>>Что, программы на дотнете ни разу не ездят впринципе?
COF>>Медленно и печально
G>От чего такая уверенность?
G>Вот привели в пример какой-то пост, где с помощью WPF попытались нарисовать туеву хучу объектов. Интересно, на С++ аналогичное вообще заведется? (не говоря о том чтобы поехать)
тут я уже упомянул что работаю над GIS, так вот, конечно не 10 тысяч объектов, а 20 тысяч, ну и не 1-4 секунды а 25 раз в секунду (чтобы глазу было приятно), похоже ты прав, ето пожалуй не едет, ето пожалуй летает
People write code, programming languages don't.
Re[65]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 19:15
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

ГВ>>Да ёлки ж зелёные! Значения (синоним в данном контексте: копия переменной) плюсовыми лямбдами замыкаются с лёгкостью неимоверной. А дальше — хоть выводи функцию из скопа, хоть прихлопывай.

G>Нет. Нужно лексическое замыкание (не копирование значения).

"Лексическое замыкание" — это обобщённое название всей операции объединения лямбда-выражения и переменных контекста, в котором порождена лямбда. Копирование значений — способ реализации.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[73]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: COFF 
Дата: 07.05.09 19:16
Оценка: +3 :)
Здравствуйте, gandjustas, Вы писали:

G>>>А с асинхронным вводом-выводом работал?

COF>>А причем тут это?
G>При том.
G>Асинхронный ввод-вывод ломает "линейную" структуры программы, это очень сильно сказывается на том как управлять ресурсами.

Ну и? Да я работал с асинхронным вводом-выводом, правда на C++, где он ничего не ломает. Странно...
Re[70]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 19:18
Здравствуйте, Хвост, Вы писали:

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


COF>>>>>Такое впечатление, что в ситуации "вам шашечки или ехать", дотнетчики уверенно выбирают шашечки

S>>>>Что, программы на дотнете ни разу не ездят впринципе?
COF>>>Медленно и печально
G>>От чего такая уверенность?
G>>Вот привели в пример какой-то пост, где с помощью WPF попытались нарисовать туеву хучу объектов. Интересно, на С++ аналогичное вообще заведется? (не говоря о том чтобы поехать)
Х>тут я уже упомянул что работаю над GIS, так вот, конечно не 10 тысяч объектов, а 20 тысяч, ну и не 1-4 секунды а 25 раз в секунду (чтобы глазу было приятно), похоже ты прав, ето пожалуй не едет, ето пожалуй летает
20 тысяч векторных примитивов с прозрачностью?
Re[70]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 07.05.09 19:20
Здравствуйте, Хвост, Вы писали:

Х>тут я уже упомянул что работаю над GIS, так вот, конечно не 10 тысяч объектов, а 20 тысяч, ну и не 1-4 секунды а 25 раз в секунду (чтобы глазу было приятно), похоже ты прав, ето пожалуй не едет, ето пожалуй летает

Чего 25 раз в секунду? Пересоздаешь 25 раз в секунду 20 тысяч объектов пользовательского интерфейса?
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[71]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 19:24
Здравствуйте, MxKazan, Вы писали:

MK>Здравствуйте, Хвост, Вы писали:


Х>>тут я уже упомянул что работаю над GIS, так вот, конечно не 10 тысяч объектов, а 20 тысяч, ну и не 1-4 секунды а 25 раз в секунду (чтобы глазу было приятно), похоже ты прав, ето пожалуй не едет, ето пожалуй летает

MK>Чего 25 раз в секунду? Пересоздаешь 25 раз в секунду 20 тысяч объектов пользовательского интерфейса?
не пользовательского интерфейса, а скорее упомянутые gandjustas'ом "20 тысяч векторных примитивов с прозрачностью", но при етом ессно каждый етот примитив отзывчив на действия пользователя.
People write code, programming languages don't.
Re[68]: Брависсимо! в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 07.05.09 19:24
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Расскажи это лисперам. В лиспе исторически замыкания создавались копированием используемых переменных.


Знаток Лиспа, блин.

http://www.psg.com/~dlamkins/sl/chapter11.html#closures
? (let ((e 1))
    (defun closure-1 () e)
    (setq e 7)
    (defun closure-2 () e))
CLOSURE-2
? (closure-1)
7
? (closure-2)
7
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[71]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 19:24
Здравствуйте, gandjustas, Вы писали:

G>>>Вот привели в пример какой-то пост, где с помощью WPF попытались нарисовать туеву хучу объектов. Интересно, на С++ аналогичное вообще заведется? (не говоря о том чтобы поехать)

Х>>тут я уже упомянул что работаю над GIS, так вот, конечно не 10 тысяч объектов, а 20 тысяч, ну и не 1-4 секунды а 25 раз в секунду (чтобы глазу было приятно), похоже ты прав, ето пожалуй не едет, ето пожалуй летает
G>20 тысяч векторных примитивов с прозрачностью?
круто, да?
People write code, programming languages don't.
Re[72]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 07.05.09 19:28
Здравствуйте, Хвост, Вы писали:

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

MK>>Здравствуйте, Хвост, Вы писали:
Х>>>тут я уже упомянул что работаю над GIS, так вот, конечно не 10 тысяч объектов, а 20 тысяч, ну и не 1-4 секунды а 25 раз в секунду (чтобы глазу было приятно), похоже ты прав, ето пожалуй не едет, ето пожалуй летает
MK>>Чего 25 раз в секунду? Пересоздаешь 25 раз в секунду 20 тысяч объектов пользовательского интерфейса?
Х>не пользовательского интерфейса, а скорее упомянутые gandjustas'ом "20 тысяч векторных примитивов с прозрачностью", но при етом ессно каждый етот примитив отзывчив на действия пользователя.
Ну а че, мож какие подробности? Что рисует эти примитивы, как "отзывчивость" реализуется? На каком компе ты этот "полет" наблюдаешь?
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[72]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 19:34
Оценка: :)
Здравствуйте, Хвост, Вы писали:

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


G>>>>Вот привели в пример какой-то пост, где с помощью WPF попытались нарисовать туеву хучу объектов. Интересно, на С++ аналогичное вообще заведется? (не говоря о том чтобы поехать)

Х>>>тут я уже упомянул что работаю над GIS, так вот, конечно не 10 тысяч объектов, а 20 тысяч, ну и не 1-4 секунды а 25 раз в секунду (чтобы глазу было приятно), похоже ты прав, ето пожалуй не едет, ето пожалуй летает
G>>20 тысяч векторных примитивов с прозрачностью?
Х>круто, да?
Слабо верится.
Re[73]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 19:36
Здравствуйте, MxKazan, Вы писали:

MK>Здравствуйте, Хвост, Вы писали:


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

MK>>>Здравствуйте, Хвост, Вы писали:
Х>>>>тут я уже упомянул что работаю над GIS, так вот, конечно не 10 тысяч объектов, а 20 тысяч, ну и не 1-4 секунды а 25 раз в секунду (чтобы глазу было приятно), похоже ты прав, ето пожалуй не едет, ето пожалуй летает
MK>>>Чего 25 раз в секунду? Пересоздаешь 25 раз в секунду 20 тысяч объектов пользовательского интерфейса?
Х>>не пользовательского интерфейса, а скорее упомянутые gandjustas'ом "20 тысяч векторных примитивов с прозрачностью", но при етом ессно каждый етот примитив отзывчив на действия пользователя.
MK>Ну а че, мож какие подробности? Что рисует эти примитивы, как "отзывчивость" реализуется? На каком компе ты этот "полет" наблюдаешь?
военная тайна: рендерер — OpenGL (ето если прозрачность нужна, без хардварной акселлерации прозрачность тоже "летает", но так низенько-низенько ), отзывчивость реализуется тем что реально объект, ответственный за отзывчивость создаётся только в момент начального действия пользователя (тыкнул мышкой в примитив/нажал хоткей/выбрал менюшку), а так по сути 99.99% того что видно на екране — просто картинка. Вроде ничего хитрого.
People write code, programming languages don't.
Re[73]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 19:37
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, Хвост, Вы писали:


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


G>>>>>Вот привели в пример какой-то пост, где с помощью WPF попытались нарисовать туеву хучу объектов. Интересно, на С++ аналогичное вообще заведется? (не говоря о том чтобы поехать)

Х>>>>тут я уже упомянул что работаю над GIS, так вот, конечно не 10 тысяч объектов, а 20 тысяч, ну и не 1-4 секунды а 25 раз в секунду (чтобы глазу было приятно), похоже ты прав, ето пожалуй не едет, ето пожалуй летает
G>>>20 тысяч векторных примитивов с прозрачностью?
Х>>круто, да?
G>Слабо верится.
т.е. тебе и в современные 3д игры слабо верится, да? а там ведь покруче будет.
People write code, programming languages don't.
Re[72]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 07.05.09 19:38
Здравствуйте, Хвост, Вы писали:

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


MK>>Здравствуйте, Хвост, Вы писали:


Х>>>тут я уже упомянул что работаю над GIS, так вот, конечно не 10 тысяч объектов, а 20 тысяч, ну и не 1-4 секунды а 25 раз в секунду (чтобы глазу было приятно), похоже ты прав, ето пожалуй не едет, ето пожалуй летает

MK>>Чего 25 раз в секунду? Пересоздаешь 25 раз в секунду 20 тысяч объектов пользовательского интерфейса?
Х>не пользовательского интерфейса, а скорее упомянутые gandjustas'ом "20 тысяч векторных примитивов с прозрачностью", но при етом ессно каждый етот примитив отзывчив на действия пользователя.
GDI? DirectX? OpenGL? Боюсь, что это не заслуги C++. Да и не вопрос повторить на шарпе. (WPF покурит пожалуй).

Каждый примитив отзывчив? А зачем при этом перерисовывать остальные 20 тысяч? чтобы было чем занять процессор?

Писал GIS на первом шарпе. Миллионы объектов, в каждом тысячи точек. Но вот чтобы перерисовать 20 тысяч за 25 сек, задачи не вставало. Обходились одним/двумя/группой выделенных с буферизацией картинки остальных.
Re[74]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 07.05.09 19:39
Здравствуйте, Хвост, Вы писали:

Х>военная тайна: рендерер — OpenGL

Что тут недостижимого для C#?
Re[73]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 19:39
Здравствуйте, samius, Вы писали:

S>Здравствуйте, Хвост, Вы писали:


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


MK>>>Здравствуйте, Хвост, Вы писали:


Х>>>>тут я уже упомянул что работаю над GIS, так вот, конечно не 10 тысяч объектов, а 20 тысяч, ну и не 1-4 секунды а 25 раз в секунду (чтобы глазу было приятно), похоже ты прав, ето пожалуй не едет, ето пожалуй летает

MK>>>Чего 25 раз в секунду? Пересоздаешь 25 раз в секунду 20 тысяч объектов пользовательского интерфейса?
Х>>не пользовательского интерфейса, а скорее упомянутые gandjustas'ом "20 тысяч векторных примитивов с прозрачностью", но при етом ессно каждый етот примитив отзывчив на действия пользователя.
S>GDI? DirectX? OpenGL? Боюсь, что это не заслуги C++. Да и не вопрос повторить на шарпе. (WPF покурит пожалуй).

S>Каждый примитив отзывчив? А зачем при этом перерисовывать остальные 20 тысяч? чтобы было чем занять процессор?

а как ты реализуешь плавный скролл/зум?
People write code, programming languages don't.
Re[74]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 07.05.09 19:41
Оценка: -2 :)
Здравствуйте, Хвост, Вы писали:

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


G>>Здравствуйте, Хвост, Вы писали:


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


G>>>>>>Вот привели в пример какой-то пост, где с помощью WPF попытались нарисовать туеву хучу объектов. Интересно, на С++ аналогичное вообще заведется? (не говоря о том чтобы поехать)

Х>>>>>тут я уже упомянул что работаю над GIS, так вот, конечно не 10 тысяч объектов, а 20 тысяч, ну и не 1-4 секунды а 25 раз в секунду (чтобы глазу было приятно), похоже ты прав, ето пожалуй не едет, ето пожалуй летает
G>>>>20 тысяч векторных примитивов с прозрачностью?
Х>>>круто, да?
G>>Слабо верится.
Х>т.е. тебе и в современные 3д игры слабо верится, да? а там ведь покруче будет.
В играх многое делается на видеокарте, кроме того всегда стараются рисовать поменьше. В ГУИ фреймворках общего назначения так сделать не получится.
Re[74]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 07.05.09 19:43
Здравствуйте, Хвост, Вы писали:

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


S>>Каждый примитив отзывчив? А зачем при этом перерисовывать остальные 20 тысяч? чтобы было чем занять процессор?

Х>а как ты реализуешь плавный скролл/зум?
Заморозкой рендеригна на время скролл-а. Но тот GIS был чисто GDI-шным.
Правда потом (уже на втором шарпе) приходилось прикручивать к ESRI ArcMap 8 рельеф местности на DirectX-е. Вот при скроллинге рельеф был, а карта дорисовывалась после.
Re[75]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 19:44
Здравствуйте, samius, Вы писали:

S>Здравствуйте, Хвост, Вы писали:


Х>>военная тайна: рендерер — OpenGL

S>Что тут недостижимого для C#?
тут недостижимого на C# то что отрисовка на акселлераторе занимает меньшую часть времени отрисовки кадра, основное время — трансформация примитивов из одной координатной системы в другую, тут даже такая вещь как проверка индекса на допустимый диапазон при обращению к массиву даёт проседание в 30%, куда здесь C# тулить?
People write code, programming languages don't.
Re[69]: Брависсимо! в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 07.05.09 19:44
Оценка: -1
Здравствуйте, VladD2, Вы писали:

ГВ>>Расскажи это лисперам. В лиспе исторически замыкания создавались копированием используемых переменных.


Ну, поскольку я знаю твою манеру ведения дискуссии, то обращаю внимание на слово "исторически". А если точно, то я отсылал к common lisp чёрт-те какой давности. В современных диалектах, AFAIK, это уже не так.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[75]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 19:47
Здравствуйте, samius, Вы писали:

S>Здравствуйте, Хвост, Вы писали:


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


S>>>Каждый примитив отзывчив? А зачем при этом перерисовывать остальные 20 тысяч? чтобы было чем занять процессор?

Х>>а как ты реализуешь плавный скролл/зум?
S>Заморозкой рендеригна на время скролл-а. Но тот GIS был чисто GDI-шным.
ну собственно так почти у всех сделано, хотя у нас нет заморозки даже в GDI режиме, правда и прозрачности нет.
People write code, programming languages don't.
Re[74]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 07.05.09 19:47
Здравствуйте, Хвост, Вы писали:

MK>>Ну а че, мож какие подробности? Что рисует эти примитивы, как "отзывчивость" реализуется? На каком компе ты этот "полет" наблюдаешь?

Х>военная тайна: рендерер — OpenGL (ето если прозрачность нужна, без хардварной акселлерации прозрачность тоже "летает", но так низенько-низенько ), отзывчивость реализуется тем что реально объект, ответственный за отзывчивость создаётся только в момент начального действия пользователя (тыкнул мышкой в примитив/нажал хоткей/выбрал менюшку), а так по сути 99.99% того что видно на екране — просто картинка. Вроде ничего хитрого.
Так я и думал. Чего ж ты теплое с мягким сравниваешь? WPF не конкурент рисованию ручками на уровне "линию туда, кружочек сюда" по части скорости, как и рисование "линию туда, кружочек сюда" не конкурент WPF по части фич, таких как биндинг. Микрософт, кстати, сама не позиционирует WPF как библиотеку для приложений, требующих столь сложной графики. И люди в здравом уме это понимают.
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[76]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: MxKazanmxkazan.livejournal.com
Дата: 07.05.09 19:49
Здравствуйте, Хвост, Вы писали:

Х>тут недостижимого на C# то что отрисовка на акселлераторе занимает меньшую часть времени отрисовки кадра, основное время — трансформация примитивов из одной координатной системы в другую, тут даже такая вещь как проверка индекса на допустимый диапазон при обращению к массиву даёт проседание в 30%, куда здесь C# тулить?

Ой да ладно. Ты пробовал или снова "боксинг"?
Эдди, да начхать нам на Таггарта и таких, как он. Мы ведем экспресс, а они едут на крыше и надрывно кричат о том, что они всем руководят и все зависит только от них. Пусть кричат. Мы ведь не надорвемся, везя их?
Re[77]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 19:52
Оценка: :)
Здравствуйте, MxKazan, Вы писали:

MK>Здравствуйте, Хвост, Вы писали:


Х>>тут недостижимого на C# то что отрисовка на акселлераторе занимает меньшую часть времени отрисовки кадра, основное время — трансформация примитивов из одной координатной системы в другую, тут даже такая вещь как проверка индекса на допустимый диапазон при обращению к массиву даёт проседание в 30%, куда здесь C# тулить?

MK>Ой да ладно. Ты пробовал или снова "боксинг"?
что да ладно? про индексы ето факт, если ты про C# то ессно не пробовал, потому как не взлетит очевидно.
People write code, programming languages don't.
Re[76]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 07.05.09 19:54
Здравствуйте, Хвост, Вы писали:

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


S>>Здравствуйте, Хвост, Вы писали:


Х>>>военная тайна: рендерер — OpenGL

S>>Что тут недостижимого для C#?
Х>тут недостижимого на C# то что отрисовка на акселлераторе занимает меньшую часть времени отрисовки кадра, основное время — трансформация примитивов из одной координатной системы в другую
Координатная система тоже 25 раз в секунду меняется?

X>тут даже такая вещь как проверка индекса на допустимый диапазон при обращению к массиву даёт проседание в 30%, куда здесь C# тулить?

Да, кудауж тут C#-у. Он даже по массивам не умеет ходить
Re[77]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 20:01
Здравствуйте, samius, Вы писали:

S>Здравствуйте, Хвост, Вы писали:


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


S>>>Здравствуйте, Хвост, Вы писали:


Х>>>>военная тайна: рендерер — OpenGL

S>>>Что тут недостижимого для C#?
Х>>тут недостижимого на C# то что отрисовка на акселлераторе занимает меньшую часть времени отрисовки кадра, основное время — трансформация примитивов из одной координатной системы в другую
S>Координатная система тоже 25 раз в секунду меняется?
не понял что имелось ввиду. Координаты подавляющего большинства примитивов хранятся всегда в неизменном виде, и их при каждом скролле или зуме необходимо пересчитывать в екранные координаты.
People write code, programming languages don't.
Re[78]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 07.05.09 20:07
Оценка: +1
Здравствуйте, Хвост, Вы писали:

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


S>>Координатная система тоже 25 раз в секунду меняется?

Х>не понял что имелось ввиду. Координаты подавляющего большинства примитивов хранятся всегда в неизменном виде, и их при каждом скролле или зуме необходимо пересчитывать в екранные координаты.
Вообще OpenGL и сам умеет пересчитывать координаты, правда только афинные и почти афинные преобразования, те что можно описать матрицей.
Знаю, что хранятся другие координаты, например, геодезические. Но, их ведь можно преобразовать единожды при чтении в "почти экранные", т.е. в такие координаты, которые легко преобразуются как GDI так и OpenGL-ем. Естественно, все операции с координатами следует проводит с оригинальными координатами, а "почти экранные" хороши для рендеринга. Тогда преобразование координат (кроме первоначального) полностью ляжет на железо.
Re[79]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 20:19
Здравствуйте, samius, Вы писали:

S>Здравствуйте, Хвост, Вы писали:


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


S>>>Координатная система тоже 25 раз в секунду меняется?

Х>>не понял что имелось ввиду. Координаты подавляющего большинства примитивов хранятся всегда в неизменном виде, и их при каждом скролле или зуме необходимо пересчитывать в екранные координаты.
S>Вообще OpenGL и сам умеет пересчитывать координаты, правда только афинные и почти афинные преобразования, те что можно описать матрицей.
S>Знаю, что хранятся другие координаты, например, геодезические. Но, их ведь можно преобразовать единожды при чтении в "почти экранные", т.е. в такие координаты, которые легко преобразуются как GDI так и OpenGL-ем. Естественно, все операции с координатами следует проводит с оригинальными координатами, а "почти экранные" хороши для рендеринга. Тогда преобразование координат (кроме первоначального) полностью ляжет на железо.
абсолютно верно, но ето к сожалению шило на мыло, потому как видимых елементов на екране на порядок/порядки меньше чем есть на самом деле, а для возможности акселлерации прийдётся их трансформировать все, а не только видимые, в случае с GDI ето просто смертельно. Что немаловажно, постоянные трансформации вносят ошибки, поетому оказалось проще и еффективней реализовать схему которая есть.
People write code, programming languages don't.
Re[80]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 07.05.09 20:39
Оценка: +1
Здравствуйте, Хвост, Вы писали:

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


S>>Знаю, что хранятся другие координаты, например, геодезические. Но, их ведь можно преобразовать единожды при чтении в "почти экранные", т.е. в такие координаты, которые легко преобразуются как GDI так и OpenGL-ем. Естественно, все операции с координатами следует проводит с оригинальными координатами, а "почти экранные" хороши для рендеринга. Тогда преобразование координат (кроме первоначального) полностью ляжет на железо.


Х>абсолютно верно, но ето к сожалению шило на мыло, потому как видимых елементов на екране на порядок/порядки меньше чем есть на самом деле, а для возможности акселлерации прийдётся их трансформировать все, а не только видимые, в случае с GDI ето просто смертельно. Что немаловажно, постоянные трансформации вносят ошибки, поетому оказалось проще и еффективней реализовать схему которая есть.


На самом деле, мы уже выбились из темы и перешли к деталям реализации GIS-ов.
Но я отвечу.

Порядки не важны, т.к. есть набор видимых элементов, который обновляется в зависимости от позиции и масштаба вьюхи. Есть эффективные алгоритмы пространственного индексирования объектов, которыми можно пользоваться для того, чтобы читать только те объекты, которые требуется отображать. Потому ни трансформировать все объекты ни читать их в память для отрисовки не обязательно. Те что прочитаны — трансформируются один раз софтом в промежуточную систему координат, все остальные разы железом.
Постоянные трансформации не могут вносить ошибки если эти трансформации не туда-обратно. Всегда есть правильные (родные координаты объекта) и все остальные, полученые из них. Вся логика типа кадастра работает с родными координатами, либо непосредственно полученными из родных.
А отрисовке — пофик на точность. Там на пиксель набежит больше любой погрешности.
Re[81]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 21:47
Здравствуйте, samius, Вы писали:

S>На самом деле, мы уже выбились из темы и перешли к деталям реализации GIS-ов.

так ето здорово во флейме и так в основном пустопорожний разговор, так что ето только в плюс.
S>Но я отвечу.

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

но ведь при скролле/зуме, когда во вьюху попадают новые области, необходимо их заново трансформировать в промежуточную форму, поетому с таким же успехом можно трансформировать сразу в екранную.

S>Постоянные трансформации не могут вносить ошибки если эти трансформации не туда-обратно. Всегда есть правильные (родные координаты объекта) и все остальные, полученые из них. Вся логика типа кадастра работает с родными координатами, либо непосредственно полученными из родных.

S>А отрисовке — пофик на точность. Там на пиксель набежит больше любой погрешности.
ну собственно я про точность отрисовки и говорил, например последовательный зум-аут/зум ин на одну и ту же величину и мы видим уже не то что в начале, или например такой вау-эффект как перелёт из одной точки в другую (как в гуглёрсе) уже не выглядит как последовательное умножение матрицы трансформации на какую-то статичную другую, т.к. накапливаются ошибки. В принципе все ети неточности несложно обходятся, но дело в том что незачем, т.к. на данный момент все трансформации в софте.
People write code, programming languages don't.
Re[82]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 07.05.09 22:32
Оценка:1 (1)
Здравствуйте, Хвост, Вы писали:

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


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

Х>но ведь при скролле/зуме, когда во вьюху попадают новые области, необходимо их заново трансформировать в промежуточную форму, поетому с таким же успехом можно трансформировать сразу в екранную.
Зло. Вьюх может быть несколько (+обзорная, например) с разными экранными координатами. При активной работе с зумом или изменением размеров окна перерисовывать объекты требуется часто, потому софтовый пересчет каждый раз из геодезии в экранные дорог. А из геодезии в промежуточные псевдо-экранные можно считать только однажны.

S>>Постоянные трансформации не могут вносить ошибки если эти трансформации не туда-обратно. Всегда есть правильные (родные координаты объекта) и все остальные, полученые из них. Вся логика типа кадастра работает с родными координатами, либо непосредственно полученными из родных.

S>>А отрисовке — пофик на точность. Там на пиксель набежит больше любой погрешности.
Х>ну собственно я про точность отрисовки и говорил, например последовательный зум-аут/зум ин на одну и ту же величину и мы видим уже не то что в начале
А я говорил, что только промежуточные, а потом манипуляция матрицей. Потому 1000 раз зум-аут/зум-ин не повлияют на координаты. В любом случае координаты объекта при смене вида меняться не должны. Координаты примитива — пожалуйста. Объект неизменен при прорисовке.

X>или например такой вау-эффект как перелёт из одной точки в другую (как в гуглёрсе) уже не выглядит как последовательное умножение матрицы трансформации на какую-то статичную другую, т.к. накапливаются ошибки.

Как или конкретно как в гуглёрсе? AFAIK там рисуются не примитивы во время таких эффектов. Во всяком случае не десятками тысяч.
Но повторить худо-бедно такой пролет на векторных данных можно. Естественно, будет зависеть от обилия данных и способа проекции (либо проекция текстуры, либо плоский рендеринг по спроектированным с шарика на плоскость координатам). С шарика на плоскость тоже можно схалтурить и поручить железу.

X>В принципе все ети неточности несложно обходятся, но дело в том что незачем, т.к. на данный момент все трансформации в софте.

Софтовые трансформации тоже можно сократить введением промежуточной системы координат. Даже на шарике.

Так что запас по производительности есть и значительный. Потому не вижу неподъемных для C# задачь.
Re[65]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 22:45
Оценка:2 (1) +1
Здравствуйте, gandjustas, Вы писали:

G>И что есть в с++ для управления ресурсами? Наверное хорошый пул потоков или "зеленые" треды? А может там есть выделение памяти в хипе за O(1)?

пул потоков обычно нативный, причём здесь С++? зелёные треды очень хороши для серверов, ага))) хип за O(1) ? в С++ можно аллоцировать память в хипе вообще один раз и на всю жизнь, и обеспечить свой микроменеджмент, при етом рефакторинг кода сведётся фактически к find/replace.

Х>>ух-хаха, я вообще не использую shared_ptr, представляешь? удивительно, да?

G>И что же ты используешь?
для шареных объектов? ты знаешь, если грамотно реализовывать софт, и продумывать время жизни, то оказывается и не так уж много мест где одним и тем же объектом владеют (именно владеют) сразу несколько других, в подавляющем большинстве случаев есть какой-то холдер объектов, который раздаёт объекты другим, причём время жизни етих других много меньше времени жизни холдера. Всё ето потому что shared_ptr ето недетерминизм, т.е. время жизни объекта не определено, нельзя взглянуть на код и сказать — вот в етом месте объект мёртв. Ето плохо. Довольно редко но всё же такие ситуации возникают, тогда можно взять shared_ptr или лично я использую обёртку вида intrusive_ptr над ручным вызовом mySubsystem->release(object). Но есчё раз — ети ситуации очень редки. 99.9% объектов в хипе у меня живёт в std контейнерах, auto_ptr'ах, пулах и аренах. Шарятся множество объектов разных типов, но вот шарятся с семантикой владения пара-тройка, и то ето не необходимость, а скорее кривость.

G>>>А вообще-то есть статистика. Так вот проблемы с утечками памяти в unmanaged появляют гораздо чаще проблем с производительностью в managed.

Х>>есть статистика, что на десктопах пользователей подавляющее большинство приложений — unmanaged, ето на мой взгляд самая лучшая статистика.
G>Эта статистика очень слабо связана с техническими аспектами. Обсуждали уже сотню раз.
конечно, ты вот наверное не застал времена былинные, а вот я тебе расскажу, в году едак в 96-м, когда вышла жава, С++ хоронили все кому не лень, в 98-м, когда вышла студия с J++, миллионы мух кинулись на жаву, "С++ устарел, на дворе Pentium II с 32 мб, а жаве и 4 мб с головой, и не надо думать об утечках памяти, тысячах реализаций строк, системной работе с потоками, с гуём, всё межплатформенно, блаблабла.... рай на земле... етц", был и свой сильверлайт, только назывался java applet, так вот, жаве уже второй десяток давно пошёл, а на десктопах её всё как-то не особо, и жаваапплетами интернет не полон, а десктоп полон нативными С++ приложениями, а интернет нативным С++ флешем, хотя вот жава она ведь по-твоему намного лучше с++, верно? задумайся почему всё ето так, пойми и осознай, что производительность — ето ресурс, и будет им во веки веков, и процессор, который быстрее в два раза другого, стоит в 3 раза дороже, и юзер выберет программу которая может выполнять три функции параллельно а не две.
People write code, programming languages don't.
Теги: 
Re[83]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 07.05.09 23:13
Здравствуйте, samius, Вы писали:

S>Здравствуйте, Хвост, Вы писали:


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


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

Х>>но ведь при скролле/зуме, когда во вьюху попадают новые области, необходимо их заново трансформировать в промежуточную форму, поетому с таким же успехом можно трансформировать сразу в екранную.
S>Зло. Вьюх может быть несколько (+обзорная, например) с разными экранными координатами. При активной работе с зумом или изменением размеров окна перерисовывать объекты требуется часто, потому софтовый пересчет каждый раз из геодезии в экранные дорог. А из геодезии в промежуточные псевдо-экранные можно считать только однажны.
ну ещё раз, их либо пересчитывать в псевдо-екранные нужно при каждом сдвиге/масштабировании карты (ето если у нас есть псевдоекранные координаты только видимой области) либо пересчитать все координаты (т.е. и те что вне зоны видимости) во внеекранные заранее, тогда можно пользовать аксселлерированые преобразования, но ето как я уже писал шило на мыло.

S>>>Постоянные трансформации не могут вносить ошибки если эти трансформации не туда-обратно. Всегда есть правильные (родные координаты объекта) и все остальные, полученые из них. Вся логика типа кадастра работает с родными координатами, либо непосредственно полученными из родных.

S>>>А отрисовке — пофик на точность. Там на пиксель набежит больше любой погрешности.
Х>>ну собственно я про точность отрисовки и говорил, например последовательный зум-аут/зум ин на одну и ту же величину и мы видим уже не то что в начале
S>А я говорил, что только промежуточные, а потом манипуляция матрицей. Потому 1000 раз зум-аут/зум-ин не повлияют на координаты. В любом случае координаты объекта при смене вида меняться не должны. Координаты примитива — пожалуйста. Объект неизменен при прорисовке.
дык объект то и неизменен, вид примитива и меняется, т.к. матрица трансформации при 1000 раз зум-аут/зум-ин накапливает ошибку.

X>>или например такой вау-эффект как перелёт из одной точки в другую (как в гуглёрсе) уже не выглядит как последовательное умножение матрицы трансформации на какую-то статичную другую, т.к. накапливаются ошибки.

S>Как или конкретно как в гуглёрсе? AFAIK там рисуются не примитивы во время таких эффектов. Во всяком случае не десятками тысяч.
ну я имею ввиду скорее манеру полёта а не сам внешний вид

S>Но повторить худо-бедно такой пролет на векторных данных можно. Естественно, будет зависеть от обилия данных и способа проекции (либо проекция текстуры, либо плоский рендеринг по спроектированным с шарика на плоскость координатам). С шарика на плоскость тоже можно схалтурить и поручить железу.

да, можно, если учесть неточности железки и соответственно с этим написать алгоритм пролёта.

X>>В принципе все ети неточности несложно обходятся, но дело в том что незачем, т.к. на данный момент все трансформации в софте.

S>Софтовые трансформации тоже можно сократить введением промежуточной системы координат. Даже на шарике.
про проблемы с промежуточную систему координат вроде написал

S>Так что запас по производительности есть и значительный. Потому не вижу неподъемных для C# задачь.

В принципе задачу можно реализовать и на C#, но куча визуальных ништяков отомрёт.
People write code, programming languages don't.
Re[66]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: WFrag 
Дата: 07.05.09 23:17
Здравствуйте, Хвост, Вы писали:

Х>...а интернет нативным С++ флешем...


Это как? Сам плеер, что ли, на C++ написан? Ну так и JVM тоже на C++ написана. А исполняемй код у флеша нет, не нативный.
Re[66]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: WFrag 
Дата: 07.05.09 23:20
Здравствуйте, Хвост, Вы писали:

Х>задумайся почему всё ето так, пойми и осознай, что производительность — ето ресурс, и будет им во веки веков, и процессор, который быстрее в два раза другого, стоит в 3 раза дороже, и юзер выберет программу которая может выполнять три функции параллельно а не две.


Да прям. На тот же Flash и JS (до V8 и подобных) посмотри. Оба тормозиловы жуткие, куда уж там Java до них. И ничо.
Re[70]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 08.05.09 02:20
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>А замкнуть "по ссылке" их можно? То есть так, чтобы структура "физически" осталась в стеке конструирующей лямбду функции?
Нет, нельзя. А главное — зачем?
ГВ>Или только "по значению", то есть — копированием в соответствующий экземпляр класса сконструированной лямбды?
Нет, никакого копирования нет. Т, что выглядит локальными переменными, становится полями структуры. Все обращения в коде метода к этим локальным переменным превращаются в обращения к полям.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[71]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 08.05.09 02:38
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>А замкнуть "по ссылке" их можно? То есть так, чтобы структура "физически" осталась в стеке конструирующей лямбду функции?
S>Нет, нельзя. А главное — зачем?

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

ГВ>>Или только "по значению", то есть — копированием в соответствующий экземпляр класса сконструированной лямбды?

S>Нет, никакого копирования нет. Т, что выглядит локальными переменными, становится полями структуры. Все обращения в коде метода к этим локальным переменным превращаются в обращения к полям.

Стоп, тогда я тебя не понял. Значит, физически, данные в структуре, размещённой в стеке и в объекте-лямбде — одни и те же? Или нет? Мы сейчас обсуждаем ситуацию, когда данные представляют собой структуру (не объект). Для упрощения положим, что лямбда не выходит за пределы скопа, где объявлена замыкаемая структура, то есть время жизни лямбда-объекта гарантированно превышает время жизни замыкаемой структуры и компилятору об этом известно.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[72]: Тьфу в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 08.05.09 02:40
ГВ>...то есть время жизни лямбда-объекта гарантированно превышает время жизни замыкаемой структуры и компилятору об этом известно.

Наоборот, разумеется — время жизни лямбды гарантированно меньше времени жизни структуры.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[72]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 08.05.09 03:13
Оценка:2 (1)
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Стоп, тогда я тебя не понял. Значит, физически, данные в структуре, размещённой в стеке и в объекте-лямбде — одни и те же?

Нет, никакого размещения в стеке не происходит. В зависимости от того, что именно замкнуто в контекст, он превращается либо в набор статических переменных + статический метод-лямбду, либо в объект сгенерированного класса, размещенного в хипе (методом которого опять же является лямбда).
ГВ>Или нет? Мы сейчас обсуждаем ситуацию, когда данные представляют собой структуру (не объект).
Я, если честно, не уверен, что именно генерируется — структура либо объект.
ГВ>Для упрощения положим, что лямбда не выходит за пределы скопа, где объявлена замыкаемая структура, то есть время жизни лямбда-объекта гарантированно превышает время жизни замыкаемой структуры и компилятору об этом известно.
В шарпе "замыкаемая структура" и "лямбда" неразрывно связаны.
Поэтому у них соответствующее время жизни. Примерно так же эта механика работает в JS, только там — полная динамика, а в шарпе — статическая компиляция и типобезопасность.

Далее, размещать эту фигню в стеке компилятор не будет — escape analysis пока что не реализован. Чтобы
не было недопонимания: escape-analysis компилятор вообще выполнять не может. Кроме примитивных случаев типа "объект вообще нигде не используется после создания". В частности, потому, что ему совершенно неизвестно, чем именно занимается метод myCollection.Where(), в который скормили лямбду — он запросто мог сохранить на нее ссылку в каком-то GC Root, для последующего злостного обращения к ней в надежде на UB.

Известно это становится только JITу, и то не всегда. Поэтому escape analysis, как и inlining, в управляемой среде выполняется рантаймом. К джаве первое уже прикрутили, к дотнету пока — только второе.

К счастью, стоимость размещения в хипе в управляемой среде ненамного выше стоимости размещения в стеке. Для того, чтобы написать программу, в которой будет заметен эффект от того, что лямбда размещена не в стеке, нужно очень-очень постараться. А мы тем временем продолжаем надеяться на то, что за то время, которое тебе потребуется для написания этой программы, к CLR таки прикрутят escape analysis. А в отличие от нативного кода, MSIL всех приложений автоматически выиграет от этого будущего улучшения без явной перекомпиляции и передеплоймента приложений.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[73]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 08.05.09 05:01
Здравствуйте, Sinclair, Вы писали:

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

Заметно, если вспомнить foreach по перечислителю-структуре и по перечислителю-классу. Но что-то я не замечал, что бы большинство занимались ручной реализацией перечислителей на структурах. Т.е. в большинстве случаев приемлемо (и лямбда с замыканием на хипе и перечислитель на интерфейсе), а если профайлер скажет что беда, недолго переписать низкоуровневыми средствами критичный кусок.

S>Для того, чтобы написать программу, в которой будет заметен эффект от того, что лямбда размещена не в стеке, нужно очень-очень постараться. А мы тем временем продолжаем надеяться на то, что за то время, которое тебе потребуется для написания этой программы, к CLR таки прикрутят escape analysis. А в отличие от нативного кода, MSIL всех приложений автоматически выиграет от этого будущего улучшения без явной перекомпиляции и передеплоймента приложений.

Да не, можно найти тысячу ситуаций (искувственных и натуральных), где разница в способе размещения замыкания будет заметна. Взять хотя бы тот же расчет координат в GIS-ах. Да, точно! В таких нагруженных случаях пользоваться лямбдой вообще неуместно, потому говорить о разнице между размещением замыкания лямбды на стеке и хипе как-бы неуместно. Боюсь что больше будет заметна разница лямбд на делегатах (в C#) и лямбд на виртуальных функциях (Nemerle и F#).
Re[66]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 08.05.09 05:21
Оценка: +1 -1
Здравствуйте, Хвост, Вы писали:

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


G>>И что есть в с++ для управления ресурсами? Наверное хорошый пул потоков или "зеленые" треды? А может там есть выделение памяти в хипе за O(1)?

Х>пул потоков обычно нативный, причём здесь С++? зелёные треды очень хороши для серверов, ага))) хип за O(1) ? в С++ можно аллоцировать память в хипе вообще один раз и на всю жизнь, и обеспечить свой микроменеджмент, при етом рефакторинг кода сведётся фактически к find/replace.
Ну как всегда все вручную...
Только при ручном управлении ресурсами сложность программы может оказаться такова, что за всю жизнь не напишешь.

Х>>>ух-хаха, я вообще не использую shared_ptr, представляешь? удивительно, да?

G>>И что же ты используешь?
Х>для шареных объектов? ты знаешь, если грамотно реализовывать софт, и продумывать время жизни, то оказывается и не так уж много мест где одним и тем же объектом владеют (именно владеют) сразу несколько других, в подавляющем большинстве случаев есть какой-то холдер объектов, который раздаёт объекты другим, причём время жизни етих других много меньше времени жизни холдера. Всё ето потому что shared_ptr ето недетерминизм, т.е. время жизни объекта не определено, нельзя взглянуть на код и сказать — вот в етом месте объект мёртв. Ето плохо. Довольно редко но всё же такие ситуации возникают, тогда можно взять shared_ptr или лично я использую обёртку вида intrusive_ptr над ручным вызовом mySubsystem->release(object). Но есчё раз — ети ситуации очень редки. 99.9% объектов в хипе у меня живёт в std контейнерах, auto_ptr'ах, пулах и аренах. Шарятся множество объектов разных типов, но вот шарятся с семантикой владения пара-тройка, и то ето не необходимость, а скорее кривость.
Да уж. Легче объявить совместное владение объектами кривостью, чем признать что это родовая травма в С++.

G>>>>А вообще-то есть статистика. Так вот проблемы с утечками памяти в unmanaged появляют гораздо чаще проблем с производительностью в managed.

Х>>>есть статистика, что на десктопах пользователей подавляющее большинство приложений — unmanaged, ето на мой взгляд самая лучшая статистика.
G>>Эта статистика очень слабо связана с техническими аспектами. Обсуждали уже сотню раз.
Х>конечно, ты вот наверное не застал времена былинные, а вот я тебе расскажу, в году едак в 96-м, когда вышла жава, С++ хоронили все кому не лень, в 98-м, когда вышла студия с J++, миллионы мух кинулись на жаву, "С++ устарел, на дворе Pentium II с 32 мб, а жаве и 4 мб с головой, и не надо думать об утечках памяти, тысячах реализаций строк, системной работе с потоками, с гуём, всё межплатформенно, блаблабла.... рай на земле... етц", был и свой сильверлайт, только назывался java applet, так вот, жаве уже второй десяток давно пошёл, а на десктопах её всё как-то не особо, и жаваапплетами интернет не полон, а десктоп полон нативными С++ приложениями, а интернет нативным С++ флешем, хотя вот жава она ведь по-твоему намного лучше с++, верно? задумайся почему всё ето так, пойми и осознай, что производительность — ето ресурс, и будет им во веки веков, и процессор, который быстрее в два раза другого, стоит в 3 раза дороже, и юзер выберет программу которая может выполнять три функции параллельно а не две.
Юзеры выбирают программы, которые решают их задачи. Большенству плевать что такая же программа будет выполняться в 10 раз быстрее. Причины, по которым софт на десктопах нативный далеки от технических.
Задумайся, почему в бизнес-приложениях нативного почти нет, хотя производительность там гораздо важнее и гораздо тяжелее добиться высокой производительности в крупных бизнес-системах.
Задумайся почему веб практически полностью отказался от нативных приложений в пользу managed.
Ты осознаешь что бизнес- и веб-приложений на данный момент на несколько порядков больше, чем десктопного софта?
Re[74]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Sinclair rsdnhttp://www.parallels.com/automation/operations/
Дата: 08.05.09 05:29
Здравствуйте, samius, Вы писали:

S>Заметно, если вспомнить foreach по перечислителю-структуре и по перечислителю-классу.

Это никак не связано с размещением. Разница в скорости сводится к возможности инлайнинга: для структур компилятор и JIT знают точный тип аргумента, в отличие от паттерна, постренного на абстрактном IEnumerable<T>. С лямбдами такой разницы не будет — попробуй на досуге сравнить скорострельность "автогенеренной" лямбды с ручным замыканием, выполненным поверх структуры в стеке.

S> Но что-то я не замечал, что бы большинство занимались ручной реализацией перечислителей на структурах. Т.е. в большинстве случаев приемлемо (и лямбда с замыканием на хипе и перечислитель на интерфейсе), а если профайлер скажет что беда, недолго переписать низкоуровневыми средствами критичный кусок.

Это верно.

S>Да не, можно найти тысячу ситуаций (искувственных и натуральных), где разница в способе размещения замыкания будет заметна. Взять хотя бы тот же расчет координат в GIS-ах. Да, точно! В таких нагруженных случаях пользоваться лямбдой вообще неуместно, потому говорить о разнице между размещением замыкания лямбды на стеке и хипе как-бы неуместно. Боюсь что больше будет заметна разница лямбд на делегатах (в C#) и лямбд на виртуальных функциях (Nemerle и F#).

Я пока не в курсе, нужны ли вообще лямбды в расчётах координат в GIS. Хотя, если вспомнить про то, что лямбды умеют сворачиваться не только в делегаты, но и в Expression Trees, то они могут напрочь порвать реализацию на С++ путём компиляции в шейдерные операции для выполнения в GPU
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[84]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 08.05.09 05:30
Оценка:1 (1) +1
Здравствуйте, Хвост, Вы писали:

Х>ну ещё раз, их либо пересчитывать в псевдо-екранные нужно при каждом сдвиге/масштабировании карты (ето если у нас есть псевдоекранные координаты только видимой области) либо пересчитать все координаты (т.е. и те что вне зоны видимости) во внеекранные заранее, тогда можно пользовать аксселлерированые преобразования, но ето как я уже писал шило на мыло.

Еще раз. Если мы в "плоском" режиме, не проецируя геометрию на шарик, либо проецируя на шарик текстуру, то псевдо-экранные координаты считаются один раз. Сдвиг и масштабирование не потребует полного пересчета, т.к. позволит домножить на матрицу, что можно отдать железу. Для того чтобы понять, лежит объект на экране или нет, пересчитвать его координаты в экранные нет нужды! Достаточно иметь рамку экрана в псевдоэкранных координатах и пространственный индекс в родных координатах объекта.
В случае с шариком тоже поможет промежуточная система координат. Однако, она уже не будет аффинно преобразовываться в экранную, но экономия в расчетах все еще будет при повторе прорисовки объекта.

S>>А я говорил, что только промежуточные, а потом манипуляция матрицей. Потому 1000 раз зум-аут/зум-ин не повлияют на координаты. В любом случае координаты объекта при смене вида меняться не должны. Координаты примитива — пожалуйста. Объект неизменен при прорисовке.

Х>дык объект то и неизменен, вид примитива и меняется, т.к. матрица трансформации при 1000 раз зум-аут/зум-ин накапливает ошибку.
А, вона ты о чем Так- конечно. Тут и зумать не надо. Потаскал карту мышкой в режиме пана и объекты разбежались кто-куда (набежала погрешность на сдвигах).
Такой эффект решается запоминанием предыдущего положения и направления "наблюдателя" и применения коэффициентов к нему. Тогда при 1000 зумов или 1000 панах меняются туда-обратно не коэффициенты матрицы, а коэффициенты, которые требуется применить к предыдущему положению "наблюдателя", фактически к запомненной ранее матрице вида. Сразу про накопление ошибки в матрице на множестве итераций туда-обратно можно забыть.

S>>Но повторить худо-бедно такой пролет на векторных данных можно. Естественно, будет зависеть от обилия данных и способа проекции (либо проекция текстуры, либо плоский рендеринг по спроектированным с шарика на плоскость координатам). С шарика на плоскость тоже можно схалтурить и поручить железу.

Х>да, можно, если учесть неточности железки и соответственно с этим написать алгоритм пролёта.
Какие неточности железки? Пиксель туда-сюда?

S>>Софтовые трансформации тоже можно сократить введением промежуточной системы координат. Даже на шарике.

Х>про проблемы с промежуточную систему координат вроде написал
Нету там проблемы. Одна экономия в расчетах координат повторной прорисовки примитива при смене вида. Что на железе что на софте.

S>>Так что запас по производительности есть и значительный. Потому не вижу неподъемных для C# задачь.

Х>В принципе задачу можно реализовать и на C#, но куча визуальных ништяков отомрёт.
Например?
Re[66]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Mamuthttp://dmitriid.com/
Дата: 08.05.09 05:32
Оценка: +1
Х> G>И что есть в с++ для управления ресурсами? Наверное хорошый пул потоков или "зеленые" треды? А может там есть выделение памяти в хипе за O(1)?

Х> пул потоков обычно нативный, причём здесь С++? зелёные треды очень хороши для серверов, ага)))


Они гениальны для серверов. Erlang это только доказывает. Возможность ненапряжно выделить несколько тысяч процессов/потоков, если надо, рулит
Re[78]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 08.05.09 05:32
Здравствуйте, Хвост, Вы писали:

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


MK>>Здравствуйте, Хвост, Вы писали:


Х>>>тут недостижимого на C# то что отрисовка на акселлераторе занимает меньшую часть времени отрисовки кадра, основное время — трансформация примитивов из одной координатной системы в другую, тут даже такая вещь как проверка индекса на допустимый диапазон при обращению к массиву даёт проседание в 30%, куда здесь C# тулить?

MK>>Ой да ладно. Ты пробовал или снова "боксинг"?
Х>что да ладно? про индексы ето факт, если ты про C# то ессно не пробовал, потому как не взлетит очевидно.
Ну не надо так откровенно сливать.
Приведи тест где заметны эти 30%.

Как ты можешт рассуждать о производительности .NET, если не писал на нем ничего?
Re[75]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 08.05.09 05:36
Здравствуйте, Sinclair, Вы писали:

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


S>>Заметно, если вспомнить foreach по перечислителю-структуре и по перечислителю-классу.

S>Это никак не связано с размещением. Разница в скорости сводится к возможности инлайнинга: для структур компилятор и JIT знают точный тип аргумента, в отличие от паттерна, постренного на абстрактном IEnumerable<T>. С лямбдами такой разницы не будет — попробуй на досуге сравнить скорострельность "автогенеренной" лямбды с ручным замыканием, выполненным поверх структуры в стеке.
Попробую на досуге.

S>Я пока не в курсе, нужны ли вообще лямбды в расчётах координат в GIS. Хотя, если вспомнить про то, что лямбды умеют сворачиваться не только в делегаты, но и в Expression Trees, то они могут напрочь порвать реализацию на С++ путём компиляции в шейдерные операции для выполнения в GPU

Нужны или нет незнаю, но всунуть их насильно туда можно, но не нужно.
А идея с шейдерами мне понравилась. Но не ради порвать C++, а ради реализации полезных фич.
Re[82]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: minorlogic 
Дата: 08.05.09 08:22
Мне бы сразу в голову пришла идея.

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

Преимущества
1. Данные мапятся на плоскость треугольника единожды и кешируются.
2. все трансформации как апаратно так и совтово очень простые (афинные).
3. хорошо ляжет на апаратное ускорение.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[84]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: minorlogic 
Дата: 08.05.09 08:27
Здравствуйте, Хвост, Вы писали:

S>>А я говорил, что только промежуточные, а потом манипуляция матрицей. Потому 1000 раз зум-аут/зум-ин не повлияют на координаты. В любом случае координаты объекта при смене вида меняться не должны. Координаты примитива — пожалуйста. Объект неизменен при прорисовке.

Х>дык объект то и неизменен, вид примитива и меняется, т.к. матрица трансформации при 1000 раз зум-аут/зум-ин накапливает ошибку.

Этот момент мне не совсем ясен, можно подробнее ? Ошибка в матрице по отношению к чему? какая именно ошибка ?

Трансформацию можно хранить не в матрице а как набор трансформаций Rotation(from radians) * translation( x,y) * scale(s)
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[83]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 08.05.09 08:53
Здравствуйте, minorlogic, Вы писали:

M>Мне бы сразу в голову пришла идея.


M>Апроксимировать проекцию набором треугольников, и внутри тотуголика использовать афинный мапинг.


M>Преимущества

M>1. Данные мапятся на плоскость треугольника единожды и кешируются.
M>2. все трансформации как апаратно так и совтово очень простые (афинные).
M>3. хорошо ляжет на апаратное ускорение.

Но и эффект будет не тот, как в рендеригне без мапинга изображения. В GIS случаются немонотонные заливки, там важны толщины и структуры линий, значки (иконки). Все это поплывает при аффинном мапинге кэшированного изображения.
Re[66]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: minorlogic 
Дата: 08.05.09 08:59
Здравствуйте, Хвост, Вы писали:

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


G>>И что есть в с++ для управления ресурсами? Наверное хорошый пул потоков или "зеленые" треды? А может там есть выделение памяти в хипе за O(1)?

Х>пул потоков обычно нативный, причём здесь С++? зелёные треды очень хороши для серверов, ага))) хип за O(1) ? в С++ можно аллоцировать память в хипе вообще один раз и на всю жизнь, и обеспечить свой микроменеджмент, при етом рефакторинг кода сведётся фактически к find/replace.

Предполагаю что имелся ввиду memory pool
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[85]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 08.05.09 09:02
Здравствуйте, minorlogic, Вы писали:

M>Здравствуйте, Хвост, Вы писали:


S>>>А я говорил, что только промежуточные, а потом манипуляция матрицей. Потому 1000 раз зум-аут/зум-ин не повлияют на координаты. В любом случае координаты объекта при смене вида меняться не должны. Координаты примитива — пожалуйста. Объект неизменен при прорисовке.

Х>>дык объект то и неизменен, вид примитива и меняется, т.к. матрица трансформации при 1000 раз зум-аут/зум-ин накапливает ошибку.

M>Этот момент мне не совсем ясен, можно подробнее ? Ошибка в матрице по отношению к чему? какая именно ошибка ?

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

M>Трансформацию можно хранить не в матрице а как набор трансформаций Rotation(from radians) * translation( x,y) * scale(s)

Вот именно. Погрешность не накопится в случае, когда есть исходная матрица X (всегда одинаковая) и набор параметров (поворот, масштаб, сдвиг).
Re[84]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: minorlogic 
Дата: 08.05.09 09:03
Здравствуйте, samius, Вы писали:

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


M>>Мне бы сразу в голову пришла идея.


M>>Апроксимировать проекцию набором треугольников, и внутри тотуголика использовать афинный мапинг.


M>>Преимущества

M>>1. Данные мапятся на плоскость треугольника единожды и кешируются.
M>>2. все трансформации как апаратно так и совтово очень простые (афинные).
M>>3. хорошо ляжет на апаратное ускорение.

S>Но и эффект будет не тот, как в рендеригне без мапинга изображения. В GIS случаются немонотонные заливки, там важны толщины и структуры линий, значки (иконки). Все это поплывает при аффинном мапинге кэшированного изображения.


Скорее всего ты неправильно меня понял.

M>>1. Данные мапятся на плоскость треугольника единожды и кешируются.


Имелось ввиду не кеширование растра , а кеширование спроецированных данных. GIS Data(Vector data(lat lon)) -> Projection Data(Vector data)
Projection Data — может быть и Equiretangular а может и на сферу.


А кешированеи отрендренной текстуры на треугольник это допольнительная фича, так сказать по требованию. Напрмиер при быстром показе мы может отрисовать закешированный растр и потом когда будет время отрендрить заново с лучшим качеством.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[59]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 08.05.09 09:25
Оценка:2 (1) :)
Здравствуйте, gandjustas, Вы писали:

G>Стандартные аллокаторы в С++ требуют прохода по списку свободных блоков памяти при выделении\освобождении, эта операция имеет алгоритмическую сложность O(n). При интенсивных операциях выделения\освобождения работает очеень медленно.

Ты пожалуйста ссылку дай на стандарт С++, где написано что именно так работает "стандартный аллокатор С++".

G>Не разводи демагогию, давай факты.

Симметрично!
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[85]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 08.05.09 09:39
Оценка: +1
Здравствуйте, minorlogic, Вы писали:

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


S>>Но и эффект будет не тот, как в рендеригне без мапинга изображения. В GIS случаются немонотонные заливки, там важны толщины и структуры линий, значки (иконки). Все это поплывает при аффинном мапинге кэшированного изображения.


M>Скорее всего ты неправильно меня понял.

Похоже на то

M>>>1. Данные мапятся на плоскость треугольника единожды и кешируются.


M>Имелось ввиду не кеширование растра , а кеширование спроецированных данных. GIS Data(Vector data(lat lon)) -> Projection Data(Vector data)

M>Projection Data — может быть и Equiretangular а может и на сферу.
Теперь кажись понял. Но тут мы получаем дополнительную задачу разбиения примитивов по треугольникам с разными преобразованиями. Например, если взять полигон-контур России, то он размажется по многим треугольникам, аппроксимирующим эллипсойд. Сразу получим проблему стыков частей такой фигуры по границам аппроксимирующих треугольников. Без введения дополнительных точек не представляю как решать.
Нужен gluTess, либо своя реализация теоретико-множественных операций над точками, ограниченных контурами полигонов. Решается. Да и порядочный GIS должен иметь такую штуку в арсенале.

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

Угу. Пойдет в качестве "быстрого" варианта.
Re[86]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: minorlogic 
Дата: 08.05.09 10:00
Оценка:1 (1)
Здравствуйте, samius, Вы писали:

M>>Имелось ввиду не кеширование растра , а кеширование спроецированных данных. GIS Data(Vector data(lat lon)) -> Projection Data(Vector data)

M>>Projection Data — может быть и Equiretangular а может и на сферу.
S>Теперь кажись понял. Но тут мы получаем дополнительную задачу разбиения примитивов по треугольникам с разными преобразованиями. Например, если взять полигон-контур России, то он размажется по многим треугольникам, аппроксимирующим эллипсойд. Сразу получим проблему стыков частей такой фигуры по границам аппроксимирующих треугольников. Без введения дополнительных точек не представляю как решать.
S>Нужен gluTess, либо своя реализация теоретико-множественных операций над точками, ограниченных контурами полигонов. Решается. Да и порядочный GIS должен иметь такую штуку в арсенале.

Теперь похоже правильно.
Действительно появляются 2 дополнительные задачи.

1. Триангуляция (разбивка на треугольники) проекции.
2. сопряжение на краях треугольников, особенно фигур лежащих на границе.

Задача 1 решена давно для распространенных проекций.
Задачу 2 можно решать очень по разному, можно подсмотреть например как это сделанно в Google Earth и т.п.

Как видим у предложенного решения есть свои недостатки и преимущества. Но лично я бы выбрал именно такой метод визуализации, как более гибкий и маштабируемый.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[60]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 08.05.09 10:34
Оценка: -1
Здравствуйте, CreatorCray, Вы писали:

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


G>>Стандартные аллокаторы в С++ требуют прохода по списку свободных блоков памяти при выделении\освобождении, эта операция имеет алгоритмическую сложность O(n). При интенсивных операциях выделения\освобождения работает очеень медленно.

CC>Ты пожалуйста ссылку дай на стандарт С++, где написано что именно так работает "стандартный аллокатор С++".
Стандарт C++ не определяет реализацию выделения памяти. Во всех известных мне реализациях С++ работает именно так.

G>>Не разводи демагогию, давай факты.

CC>Симметрично!
Я уже приводил код, где GC работает быстрее алокатора С++.
Re[70]: Брависсимо! в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 08.05.09 10:42
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>>Расскажи это лисперам. В лиспе исторически замыкания создавались копированием используемых переменных.


ГВ>Ну, поскольку я знаю твою манеру ведения дискуссии, то обращаю внимание на слово "исторически". А если точно, то я отсылал к common lisp чёрт-те какой давности. В современных диалектах, AFAIK, это уже не так.


Демагог, есть демагог. Нет никакого исторического наследния CL. CL — это стандарт вышедший таким каким он есть.

И вообще, твои слова банальная демонстрация некомпетентности. Лисп изначально имел сборщик мусора и стало быть делать урезанные в нем не имело никакого смысла.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[85]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 08.05.09 11:01
Здравствуйте, samius, Вы писали:

S>Здравствуйте, Хвост, Вы писали:


Х>>ну ещё раз, их либо пересчитывать в псевдо-екранные нужно при каждом сдвиге/масштабировании карты (ето если у нас есть псевдоекранные координаты только видимой области) либо пересчитать все координаты (т.е. и те что вне зоны видимости) во внеекранные заранее, тогда можно пользовать аксселлерированые преобразования, но ето как я уже писал шило на мыло.

S>Еще раз. Если мы в "плоском" режиме, не проецируя геометрию на шарик, либо проецируя на шарик текстуру, то псевдо-экранные координаты считаются один раз. Сдвиг и масштабирование не потребует полного пересчета, т.к. позволит домножить на матрицу, что можно отдать железу. Для того чтобы понять, лежит объект на экране или нет, пересчитвать его координаты в экранные нет нужды! Достаточно иметь рамку экрана в псевдоэкранных координатах и пространственный индекс в родных координатах объекта.
S>В случае с шариком тоже поможет промежуточная система координат. Однако, она уже не будет аффинно преобразовываться в экранную, но экономия в расчетах все еще будет при повторе прорисовки объекта.

S>>>А я говорил, что только промежуточные, а потом манипуляция матрицей. Потому 1000 раз зум-аут/зум-ин не повлияют на координаты. В любом случае координаты объекта при смене вида меняться не должны. Координаты примитива — пожалуйста. Объект неизменен при прорисовке.

Х>>дык объект то и неизменен, вид примитива и меняется, т.к. матрица трансформации при 1000 раз зум-аут/зум-ин накапливает ошибку.
S>А, вона ты о чем Так- конечно. Тут и зумать не надо. Потаскал карту мышкой в режиме пана и объекты разбежались кто-куда (набежала погрешность на сдвигах).
S>Такой эффект решается запоминанием предыдущего положения и направления "наблюдателя" и применения коэффициентов к нему. Тогда при 1000 зумов или 1000 панах меняются туда-обратно не коэффициенты матрицы, а коэффициенты, которые требуется применить к предыдущему положению "наблюдателя", фактически к запомненной ранее матрице вида. Сразу про накопление ошибки в матрице на множестве итераций туда-обратно можно забыть.

S>>>Но повторить худо-бедно такой пролет на векторных данных можно. Естественно, будет зависеть от обилия данных и способа проекции (либо проекция текстуры, либо плоский рендеринг по спроектированным с шарика на плоскость координатам). С шарика на плоскость тоже можно схалтурить и поручить железу.

Х>>да, можно, если учесть неточности железки и соответственно с этим написать алгоритм пролёта.
S>Какие неточности железки? Пиксель туда-сюда?

S>>>Софтовые трансформации тоже можно сократить введением промежуточной системы координат. Даже на шарике.

Х>>про проблемы с промежуточную систему координат вроде написал
S>Нету там проблемы. Одна экономия в расчетах координат повторной прорисовки примитива при смене вида. Что на железе что на софте.

S>>>Так что запас по производительности есть и значительный. Потому не вижу неподъемных для C# задачь.

Х>>В принципе задачу можно реализовать и на C#, но куча визуальных ништяков отомрёт.
S>Например?
People write code, programming languages don't.
Re[86]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 08.05.09 11:08
Здравствуйте, Хвост, Вы писали:
както неудачно нажал отправить, предыдущее сообщение можно удалить

Х>>>ну ещё раз, их либо пересчитывать в псевдо-екранные нужно при каждом сдвиге/масштабировании карты (ето если у нас есть псевдоекранные координаты только видимой области) либо пересчитать все координаты (т.е. и те что вне зоны видимости) во внеекранные заранее, тогда можно пользовать аксселлерированые преобразования, но ето как я уже писал шило на мыло.

S>>Еще раз. Если мы в "плоском" режиме, не проецируя геометрию на шарик, либо проецируя на шарик текстуру, то псевдо-экранные координаты считаются один раз. Сдвиг и масштабирование не потребует полного пересчета, т.к. позволит домножить на матрицу, что можно отдать железу. Для того чтобы понять, лежит объект на экране или нет, пересчитвать его координаты в экранные нет нужды! Достаточно иметь рамку экрана в псевдоэкранных координатах и пространственный индекс в родных координатах объекта.
давай тезисами опишу проблемму
чтобы трансформировать на железе — нужно иметь псевдо-екранные координаты (ето ещё не проблемма)
для того чтобы работать со всей геометрией — нужно иметь её всю в псевдо-екранных координатах (тут проблемма — резко возросшее число геометрии для трансформации)
если не всю — а только видимую, то необходимо постоянно пересчитывать в псевдо-екранные координаты геометрию, появляющуюся во вьюхе при скролле/зуме (тут проблемма — какой тогда смысл в трансформациях на железе если нужно постоянно трансформировать в псевдо-екранные координаты новую видимую геометрию)

S>>>>А я говорил, что только промежуточные, а потом манипуляция матрицей. Потому 1000 раз зум-аут/зум-ин не повлияют на координаты. В любом случае координаты объекта при смене вида меняться не должны. Координаты примитива — пожалуйста. Объект неизменен при прорисовке.

Х>>>дык объект то и неизменен, вид примитива и меняется, т.к. матрица трансформации при 1000 раз зум-аут/зум-ин накапливает ошибку.
S>>А, вона ты о чем Так- конечно. Тут и зумать не надо. Потаскал карту мышкой в режиме пана и объекты разбежались кто-куда (набежала погрешность на сдвигах).
S>>Такой эффект решается запоминанием предыдущего положения и направления "наблюдателя" и применения коэффициентов к нему. Тогда при 1000 зумов или 1000 панах меняются туда-обратно не коэффициенты матрицы, а коэффициенты, которые требуется применить к предыдущему положению "наблюдателя", фактически к запомненной ранее матрице вида. Сразу про накопление ошибки в матрице на множестве итераций туда-обратно можно забыть.
всё верно, просто код становится чуть менее тривиальным, но ето не проблемма.

S>>>>Но повторить худо-бедно такой пролет на векторных данных можно. Естественно, будет зависеть от обилия данных и способа проекции (либо проекция текстуры, либо плоский рендеринг по спроектированным с шарика на плоскость координатам). С шарика на плоскость тоже можно схалтурить и поручить железу.

Х>>>да, можно, если учесть неточности железки и соответственно с этим написать алгоритм пролёта.
S>>Какие неточности железки? Пиксель туда-сюда?
ну вообще-то не пиксель, а поболе, заметно глазу.
People write code, programming languages don't.
Re[86]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 08.05.09 11:13
Здравствуйте, samius, Вы писали:

S>Теперь кажись понял. Но тут мы получаем дополнительную задачу разбиения примитивов по треугольникам с разными преобразованиями. Например, если взять полигон-контур России, то он размажется по многим треугольникам, аппроксимирующим эллипсойд. Сразу получим проблему стыков частей такой фигуры по границам аппроксимирующих треугольников. Без введения дополнительных точек не представляю как решать.

S>Нужен gluTess, либо своя реализация теоретико-множественных операций над точками, ограниченных контурами полигонов. Решается. Да и порядочный GIS должен иметь такую штуку в арсенале.
+1, только хотел отметить про gluTess, что он настолько тормозной (даже для не-реалтайм триангуляции) что даже и пытаться не стоит, есть реализации на порядки быстрее.
People write code, programming languages don't.
Re[61]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 08.05.09 11:57
Оценка:1 (1)
Здравствуйте, gandjustas, Вы писали:

G>>>Стандартные аллокаторы в С++ требуют прохода по списку свободных блоков памяти при выделении\освобождении, эта операция имеет алгоритмическую сложность O(n). При интенсивных операциях выделения\освобождения работает очеень медленно.

CC>>Ты пожалуйста ссылку дай на стандарт С++, где написано что именно так работает "стандартный аллокатор С++".
G>Стандарт C++ не определяет реализацию выделения памяти. Во всех известных мне реализациях С++ работает именно так.
Ну так какого ты ляда утверждаешь что "Стандартные аллокаторы в С++ требуют прохода блаблабла"?

У С++ НЕТ стандартного алгоритма аллокации. Есть интерфейс, который аллокатор должен реализовывать. И есть дефолтный из поставки CRT к компилятору. Качество которого исключительно на совести разработчика CRT.
В некоторых CRT для С++ аллокатор вообще зачастую сводится к вызову системного аллокатора. Который к С++ вообще никакого отношения не имеет.
Все остальное — в руках программиста.
Я могу встроить тот же Hoard в CRT и он тогда будет являться стандартным аллокатором.

G>>>Не разводи демагогию, давай факты.

CC>>Симметрично!
G>Я уже приводил код, где GC работает быстрее алокатора С++.
Аллокатора операционной системы, ты хотел сказать?
CRT вижуалки тупо зовёт HeapAlloc.

Я уже приводил тебе ответный пример, где GC не был быстрее.
Напомню:

твой код:
VS 2003 + ICC 11, C++ : 188 — CRT реализует аллокацию через HeapAlloc
VS 2008, C# : 117

мой кастомный наколенный proof-of-concept аллокатор:
VS 2003 + ICC 11, C++ : 0 или 16 (разрешения GetTickCount очевидно не хватает)

Тут
Автор: CreatorCray
Дата: 23.03.09

Ты его явно или просмотрел или проигнорировал.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[62]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 08.05.09 12:19
Оценка: +1 -4 :)))
Здравствуйте, CreatorCray, Вы писали:

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


G>>>>Стандартные аллокаторы в С++ требуют прохода по списку свободных блоков памяти при выделении\освобождении, эта операция имеет алгоритмическую сложность O(n). При интенсивных операциях выделения\освобождения работает очеень медленно.

CC>>>Ты пожалуйста ссылку дай на стандарт С++, где написано что именно так работает "стандартный аллокатор С++".
G>>Стандарт C++ не определяет реализацию выделения памяти. Во всех известных мне реализациях С++ работает именно так.
CC>Ну так какого ты ляда утверждаешь что "Стандартные аллокаторы в С++ требуют прохода блаблабла"?
Еще раз: все известные мне реализации так работают.

CC>Я могу встроить тот же Hoard в CRT и он тогда будет являться стандартным аллокатором.

Не можешь. Твой CRT ниекто не будет распространять.

G>>>>Не разводи демагогию, давай факты.

CC>>>Симметрично!
G>>Я уже приводил код, где GC работает быстрее алокатора С++.
CC>Аллокатора операционной системы, ты хотел сказать?
CC>CRT вижуалки тупо зовёт HeapAlloc.
И что? У него внутри такой же хип, на таком же С++.

CC>Я уже приводил тебе ответный пример, где GC не был быстрее.

CC>Напомню:
CC>

CC>твой код:
CC>VS 2003 + ICC 11, C++ : 188 — CRT реализует аллокацию через HeapAlloc
CC>VS 2008, C# : 117

CC>мой кастомный наколенный proof-of-concept аллокатор:
CC>VS 2003 + ICC 11, C++ : 0 или 16 (разрешения GetTickCount очевидно не хватает)

CC>Тут
Автор: CreatorCray
Дата: 23.03.09

CC>Ты его явно или просмотрел или проигнорировал.
Твой наколенный непотокобезопасен.
Re[63]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: CreatorCray 
Дата: 08.05.09 12:36
Оценка:1 (1)
Здравствуйте, gandjustas, Вы писали:

CC>>Ну так какого ты ляда утверждаешь что "Стандартные аллокаторы в С++ требуют прохода блаблабла"?

G>Еще раз: все известные мне реализации так работают.
Мы о С++ либо об известных тебе реализациях?

CC>>Я могу встроить тот же Hoard в CRT и он тогда будет являться стандартным аллокатором.

G>Не можешь. Твой CRT ниекто не будет распространять.


CC>>CRT вижуалки тупо зовёт HeapAlloc.

G>И что? У него внутри такой же хип, на таком же С++.
А в С++ на GCC под Linux будет такой же хип?

CC>>Я уже приводил тебе ответный пример, где GC не был быстрее.

CC>>Напомню:
CC>>[q]
CC>>твой код:
CC>>VS 2003 + ICC 11, C++ : 188 — CRT реализует аллокацию через HeapAlloc
CC>>VS 2008, C# : 117

G>Твой наколенный непотокобезопасен.


Жжошь!
Можно узнать с какого перепугу ты так решил?
Там Per-thread pool с lock-free deferred алгоритмом на случай освобождения памяти из не-родного-потока.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[64]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 08.05.09 12:47
Оценка: -3 :)
Здравствуйте, CreatorCray, Вы писали:

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


CC>>>Ну так какого ты ляда утверждаешь что "Стандартные аллокаторы в С++ требуют прохода блаблабла"?

G>>Еще раз: все известные мне реализации так работают.
CC>Мы о С++ либо об известных тебе реализациях?
Думаешь я мало компиляторов видел?
Приведи парочку компиляторов С++ промышленного качества, в которых аллокация по кардинально другом алгоритму делается.

CC>>>CRT вижуалки тупо зовёт HeapAlloc.

G>>И что? У него внутри такой же хип, на таком же С++.
CC>А в С++ на GCC под Linux будет такой же хип?
Похожий.

CC>>>Я уже приводил тебе ответный пример, где GC не был быстрее.

CC>>>Напомню:
CC>>>[q]
CC>>>твой код:
CC>>>VS 2003 + ICC 11, C++ : 188 — CRT реализует аллокацию через HeapAlloc
CC>>>VS 2008, C# : 117

G>>Твой наколенный непотокобезопасен.

CC>
CC>Жжошь!
CC>Можно узнать с какого перепугу ты так решил?
CC>Там Per-thread pool с lock-free deferred алгоритмом на случай освобождения памяти из не-родного-потока.
Значит уже забыл. Пулы интересуют еще меньше, так как они требуют подгонки размеров блоков и пулов.
Как аллокатор общего назначения использовать смысла нету.
Re[64]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 08.05.09 12:50
Здравствуйте, CreatorCray, Вы писали:

G>>Твой наколенный непотокобезопасен.

CC>
CC>Жжошь!
CC>Можно узнать с какого перепугу ты так решил?
ну как же, ведь всё что быстрее гц ето заведомо непотокобезопасно и вообще UB
кстати результат гц просто удручает, всего в полтора раза быстрее VC-шного CRT-аллокатора, и ето быстро??? абберация налицо
People write code, programming languages don't.
Re[64]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 08.05.09 12:52
Здравствуйте, CreatorCray, Вы писали:

CC>Там Per-thread pool с lock-free deferred алгоритмом на случай освобождения памяти из не-родного-потока.


Кстати с явным Free тоже бльшая попа. Все это придется оборачивать в очередные умные указатели чтобы не было утечек.

Заметь что код на C#, такой как в тесте, не требует никаких усилий чтобы работать быстро. Чтобы работал быстро аналогичный код на С++ требуется немало усилий.
Re[65]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 08.05.09 12:54
Оценка: -2
Здравствуйте, Хвост, Вы писали:

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


G>>>Твой наколенный непотокобезопасен.

CC>>
CC>>Жжошь!
CC>>Можно узнать с какого перепугу ты так решил?
Х>ну как же, ведь всё что быстрее гц ето заведомо непотокобезопасно и вообще UB
Х>кстати результат гц просто удручает, всего в полтора раза быстрее VC-шного CRT-аллокатора, и ето быстро??? абберация налицо
Мда.. 30% оверхеда на жоступ к массиву это ой какие тормоза (кстати где код?), а в полтора раза быстрее — это "всего".
Вам, батенька, в политику надо. Там двойные стандарты и подтасовки во всю используются.
Re[65]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 08.05.09 12:54
Здравствуйте, gandjustas, Вы писали:

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


CC>>Там Per-thread pool с lock-free deferred алгоритмом на случай освобождения памяти из не-родного-потока.


G>Кстати с явным Free тоже бльшая попа. Все это придется оборачивать в очередные умные указатели чтобы не было утечек.


G>Заметь что код на C#, такой как в тесте, не требует никаких усилий чтобы работать быстро. Чтобы работал быстро аналогичный код на С++ требуется немало усилий.

в полтора раза быстрее чем С++ ный CRT аллокатор ето не быстро, вот сделать быстро на C# нет вообще вариантов, возможно только через ансейф но ето настолько уныло в пользовании что даже обсуждать не стоит.
People write code, programming languages don't.
Re[66]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 08.05.09 12:55
Здравствуйте, Хвост, Вы писали:

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


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


CC>>>Там Per-thread pool с lock-free deferred алгоритмом на случай освобождения памяти из не-родного-потока.


G>>Кстати с явным Free тоже бльшая попа. Все это придется оборачивать в очередные умные указатели чтобы не было утечек.


G>>Заметь что код на C#, такой как в тесте, не требует никаких усилий чтобы работать быстро. Чтобы работал быстро аналогичный код на С++ требуется немало усилий.

Х>в полтора раза быстрее чем С++ ный CRT аллокатор ето не быстро, вот сделать быстро на C# нет вообще вариантов, возможно только через ансейф но ето настолько уныло в пользовании что даже обсуждать не стоит.

Что именно сделать быстро надо?
Ты писал на C#?
Re[67]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 08.05.09 12:59
Здравствуйте, gandjustas, Вы писали:

G>>>Заметь что код на C#, такой как в тесте, не требует никаких усилий чтобы работать быстро. Чтобы работал быстро аналогичный код на С++ требуется немало усилий.

Х>>в полтора раза быстрее чем С++ ный CRT аллокатор ето не быстро, вот сделать быстро на C# нет вообще вариантов, возможно только через ансейф но ето настолько уныло в пользовании что даже обсуждать не стоит.

G>Что именно сделать быстро надо?

аллокации, ты что собственно мерил своим тестом?

G>Ты писал на C#?

был период, когда жизнь заставляла использовать ету замазку для мозга, да.
People write code, programming languages don't.
Re[68]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 08.05.09 13:12
Оценка: -2
Здравствуйте, Хвост, Вы писали:

G>>Ты писал на C#?

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

Замазка Вам явно не помешала бы — чтоб поменьше сквозняков было.
Re[74]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 08.05.09 13:12
Здравствуйте, samius, Вы писали:

S>>Для того, чтобы написать программу, в которой будет заметен эффект от того, что лямбда размещена не в стеке, нужно очень-очень постараться. А мы тем временем продолжаем надеяться на то, что за то время, которое тебе потребуется для написания этой программы, к CLR таки прикрутят escape analysis. А в отличие от нативного кода, MSIL всех приложений автоматически выиграет от этого будущего улучшения без явной перекомпиляции и передеплоймента приложений.

S>Да не, можно найти тысячу ситуаций (искувственных и натуральных), где разница в способе размещения замыкания будет заметна. Взять хотя бы тот же расчет координат в GIS-ах. Да, точно! В таких нагруженных случаях пользоваться лямбдой вообще неуместно, потому говорить о разнице между размещением замыкания лямбды на стеке и хипе как-бы неуместно. Боюсь что больше будет заметна разница лямбд на делегатах (в C#) и лямбд на виртуальных функциях (Nemerle и F#).
кстати вот лично у меня для трансформации используется функтор, который создаётся на стеке, но компиляторы С++ сейчас настолько умные что инлайнят всё и вся и оверхедов ноль, поетому в С++ я думаю лямбды в моём случае никак не повлияют на производительность, а вот с C# вопрос не однозначен.
People write code, programming languages don't.
Re[69]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 08.05.09 13:15
Здравствуйте, criosray, Вы писали:

G>>>Ты писал на C#?

Х>>был период, когда жизнь заставляла использовать ету замазку для мозга, да.
C>Замазка Вам явно не помешала бы — чтоб поменьше сквозняков было.
вы по своему богатому опыту судите?
People write code, programming languages don't.
Re[68]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 08.05.09 13:17
Здравствуйте, Хвост, Вы писали:

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


G>>>>Заметь что код на C#, такой как в тесте, не требует никаких усилий чтобы работать быстро. Чтобы работал быстро аналогичный код на С++ требуется немало усилий.

Х>>>в полтора раза быстрее чем С++ ный CRT аллокатор ето не быстро, вот сделать быстро на C# нет вообще вариантов, возможно только через ансейф но ето настолько уныло в пользовании что даже обсуждать не стоит.

G>>Что именно сделать быстро надо?

Х>аллокации, ты что собственно мерил своим тестом?
И как их с помощью ансейфа сделать быстро?

И как сделать универсальный аллокатор на С++, сравнимый по скорости с .NETовским?

G>>Ты писал на C#?

Х>был период, когда жизнь заставляла использовать ету замазку для мозга, да.
То есть не писал.
Re[69]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 08.05.09 13:26
Здравствуйте, gandjustas, Вы писали:

G>>>Что именно сделать быстро надо?

Х>>аллокации, ты что собственно мерил своим тестом?
G>И как их с помощью ансейфа сделать быстро?
Ну как, "мы наш, мы новый мир построим", HeapAlloc + ручное управление памятью, указатели, MyMemMgr.alloc() етц, только пользовать ето будет сложнее, смартпоинтеров то нет

G>И как сделать универсальный аллокатор на С++, сравнимый по скорости с .NETовским?

скажи мне что такое универсальный аллокатор, вот аллокатор by CreatorCray для меня достаточно универсален. можно взять tcmalloc, тоже быстрая и потокобезопасная вещь, универсальней что называется некуда, т.к. замена CRTшным malloc/free/realloc..

G>>>Ты писал на C#?

Х>>был период, когда жизнь заставляла использовать ету замазку для мозга, да.
G>То есть не писал.
в С++ лямбд не существует, ага.
People write code, programming languages don't.
Re[70]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 08.05.09 13:48
Здравствуйте, Хвост, Вы писали:

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


G>>>>Что именно сделать быстро надо?

Х>>>аллокации, ты что собственно мерил своим тестом?
G>>И как их с помощью ансейфа сделать быстро?
Х>Ну как, "мы наш, мы новый мир построим", HeapAlloc + ручное управление памятью, указатели, MyMemMgr.alloc() етц, только пользовать ето будет сложнее, смартпоинтеров то нет
Ты прикалываешься или реально тупость говоришь?
1)HeapAlloc работает медленнее, чем GC
2)Даже если выделишь память с помощью unmanaged, то ты не сможешь создать .NET объект в ней.
3)Ты не сможешь хранить ссылки на managed объекты в таком блоке памяти.
В итого это не будет ни быстрее, ни надежнее. Если ты серьезно считаешь что таким вообще стоит заниматься в каком либо случае, то тебе надо срочно обратиться к доктору.
Re[71]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 08.05.09 13:56
Оценка: :)
Здравствуйте, gandjustas, Вы писали:

Х>>Ну как, "мы наш, мы новый мир построим", HeapAlloc + ручное управление памятью, указатели, MyMemMgr.alloc() етц, только пользовать ето будет сложнее, смартпоинтеров то нет

G>Ты прикалываешься или реально тупость говоришь?
G>1)HeapAlloc работает медленнее, чем GC
G>2)Даже если выделишь память с помощью unmanaged, то ты не сможешь создать .NET объект в ней.
G>3)Ты не сможешь хранить ссылки на managed объекты в таком блоке памяти.
я разве где-то утверждал обратное? а то что будет нелегко (пункты 2, 3) так етож C#, он такой)

G>В итого это не будет ни быстрее, ни надежнее. Если ты серьезно считаешь что таким вообще стоит заниматься в каком либо случае, то тебе надо срочно обратиться к доктору.

менежмент руками будет быстрее, надёжнее или нет — ето больше радиус кривизны рук решает.
я считаю что таким действительно не стоит заниматься, C# для етого не предназначен, он высокоуровненвый и медленный, хочешь высокоуровневый и быстрый — бери С++.
People write code, programming languages don't.
Re[87]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 08.05.09 14:05
Здравствуйте, Хвост, Вы писали:

Х>давай тезисами опишу проблемму

Х>чтобы трансформировать на железе — нужно иметь псевдо-екранные координаты (ето ещё не проблемма)
Х>для того чтобы работать со всей геометрией — нужно иметь её всю в псевдо-екранных координатах (тут проблемма — резко возросшее число геометрии для трансформации)
Что значит работать со всей геометрией? Счет или рендеринг? Для рендеринга не нужна вся геометрия. Пусть хранится как есть, в геодезии али еще чем-там.
Х>если не всю — а только видимую, то необходимо постоянно пересчитывать в псевдо-екранные координаты геометрию, появляющуюся во вьюхе при скролле/зуме
Не пересчитывать, а досчитывать. Разве это проблема? А без промежуточных координат требуется именно пересчитвать экранные координаты всех объектов каждый раз. Либо кэшировать экранные координаты, которые придется обновлять при смене вида. Тут опять встает вопрос "набегания погрешности".
X> (тут проблемма — какой тогда смысл в трансформациях на железе если нужно постоянно трансформировать в псевдо-екранные координаты новую видимую геометрию)
Смысл делать на железе тот, что железо это все равно делает, хочешь ты того или нет. Там преобразование в конвейере. Только в одном случае, когда ты софтом преобразуешь, железо делает единичное преобразование вхолостую (AFAIK).
Теперь рассмотрим два случая: первый — при прорисовке каждого примитива полностью рассчитывается преобразование из системы координат хранения (допустим геодезия) в экранные. Так?
Второй случай — когда расчитываются промежуточные координаты один раз, а дальше при каждой прорисовке из промежуточных в экранные с помощью железа. Таким образом софт подсчитывает только промежуточные координаты один раз когда объект попадает в вид и не считает координаты для этого объекта до тех пор, пока объект кэшируется.

Х>>>>да, можно, если учесть неточности железки и соответственно с этим написать алгоритм пролёта.

S>>>Какие неточности железки? Пиксель туда-сюда?
Х>ну вообще-то не пиксель, а поболе, заметно глазу.
Что-то сомневаюсь, что железо на столько дает погрешность.
Re[72]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: criosray 
Дата: 08.05.09 14:13
Оценка: +1
Здравствуйте, Хвост, Вы писали:

Х>высокоуровневый и быстрый — бери С++.


Смешная шутка.

PS: а с каких пор язык программирования получил "скоростной" параметр? Или быстро это в смысле "тяп ляп и готово"?
Re[88]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 08.05.09 14:13
Здравствуйте, samius, Вы писали:

S>Здравствуйте, Хвост, Вы писали:


Х>>давай тезисами опишу проблемму

Х>>чтобы трансформировать на железе — нужно иметь псевдо-екранные координаты (ето ещё не проблемма)
Х>>для того чтобы работать со всей геометрией — нужно иметь её всю в псевдо-екранных координатах (тут проблемма — резко возросшее число геометрии для трансформации)
S>Что значит работать со всей геометрией? Счет или рендеринг? Для рендеринга не нужна вся геометрия. Пусть хранится как есть, в геодезии али еще чем-там.
Х>>если не всю — а только видимую, то необходимо постоянно пересчитывать в псевдо-екранные координаты геометрию, появляющуюся во вьюхе при скролле/зуме
S>Не пересчитывать, а досчитывать. Разве это проблема? А без промежуточных координат требуется именно пересчитвать экранные координаты всех объектов каждый раз. Либо кэшировать экранные координаты, которые придется обновлять при смене вида. Тут опять встает вопрос "набегания погрешности".
ну что значит досчитывать? вот я смотрю на екран, вижу объекты, нажал на другое место на обзорной вьюхе — у меня совсем другие объекты на екране, их прийдётся пересчитывать в псевдо-екранные, а ведь можно сразу в екранные. Если активно скроллить — зумить, то объекты на екране сменяют друг друга почти так же быстро как и при клике на обзорной вьюхе, тут "досчитывать" придётся по пол-екрана на скролл-зум.
People write code, programming languages don't.
Re[75]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 08.05.09 14:15
Здравствуйте, Хвост, Вы писали:

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


S>>Да не, можно найти тысячу ситуаций (искувственных и натуральных), где разница в способе размещения замыкания будет заметна. Взять хотя бы тот же расчет координат в GIS-ах. Да, точно! В таких нагруженных случаях пользоваться лямбдой вообще неуместно, потому говорить о разнице между размещением замыкания лямбды на стеке и хипе как-бы неуместно. Боюсь что больше будет заметна разница лямбд на делегатах (в C#) и лямбд на виртуальных функциях (Nemerle и F#).

Х>кстати вот лично у меня для трансформации используется функтор, который создаётся на стеке, но компиляторы С++ сейчас настолько умные что инлайнят всё и вся и оверхедов ноль, поетому в С++ я думаю лямбды в моём случае никак не повлияют на производительность.
Про инлайнить все и вся — заявление слишком сильное. Все равно там куча условий. Сомневаюсь, что инлайнится метод трансформации координат из геодезии в экранные. Но если скажешь, что точно инлайнится — поверю наслово.
Будет ли лямбда C++ так же эффективна как вручную заинлайненный код — тоже не уверен.

X>, а вот с C# вопрос не однозначен.

Но необходимость лямбды в таких узких местах контроллируется программистом как и выбор аллокатора в C++.
Re[89]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: samiushttp://sams-tricks.blogspot.com
Дата: 08.05.09 14:20
Здравствуйте, Хвост, Вы писали:

Х>ну что значит досчитывать? вот я смотрю на екран, вижу объекты, нажал на другое место на обзорной вьюхе — у меня совсем другие объекты на екране, их прийдётся пересчитывать в псевдо-екранные, а ведь можно сразу в екранные. Если активно скроллить — зумить, то объекты на екране сменяют друг друга почти так же быстро как и при клике на обзорной вьюхе, тут "досчитывать" придётся по пол-екрана на скролл-зум.


Одно дело считать каждый раз из геодезии в экранные. Другое — считать каждый раз из геодезии в недоэкранные (это меньше, чем в полностью экранные) а остальное сделает железо. Если активно зуммить, то большой шанс, что можно сделать реюз предрассчитанных псевдоэкранных координат просто изменением матрицы преобразования.
Re[76]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Хвост 
Дата: 08.05.09 14:23
Здравствуйте, samius, Вы писали:

S>Здравствуйте, Хвост, Вы писали:


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


S>>>Да не, можно найти тысячу ситуаций (искувственных и натуральных), где разница в способе размещения замыкания будет заметна. Взять хотя бы тот же расчет координат в GIS-ах. Да, точно! В таких нагруженных случаях пользоваться лямбдой вообще неуместно, потому говорить о разнице между размещением замыкания лямбды на стеке и хипе как-бы неуместно. Боюсь что больше будет заметна разница лямбд на делегатах (в C#) и лямбд на виртуальных функциях (Nemerle и F#).

Х>>кстати вот лично у меня для трансформации используется функтор, который создаётся на стеке, но компиляторы С++ сейчас настолько умные что инлайнят всё и вся и оверхедов ноль, поетому в С++ я думаю лямбды в моём случае никак не повлияют на производительность.
S>Про инлайнить все и вся — заявление слишком сильное. Все равно там куча условий. Сомневаюсь, что инлайнится метод трансформации координат из геодезии в экранные. Но если скажешь, что точно инлайнится — поверю наслово.
не, не из геодезии, в памяти лежат данные в виде, похожем на твои "псевдо-екранные", точнее что-то вроде промежуточных между екранными и геодезией, которые быстро конвертятся как в екранные так и в геодезию, поетому функтор на самом деле маленький, строк 10-15, из них половина — собственно вычисления.
People write code, programming languages don't.
Re[71]: Брависсимо! в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 08.05.09 15:18
Оценка: +1
Здравствуйте, VladD2, Вы писали:

ГВ>>>>Расскажи это лисперам. В лиспе исторически замыкания создавались копированием используемых переменных.

ГВ>>Ну, поскольку я знаю твою манеру ведения дискуссии, то обращаю внимание на слово "исторически". А если точно, то я отсылал к common lisp чёрт-те какой давности. В современных диалектах, AFAIK, это уже не так.
VD>Демагог, есть демагог. Нет никакого исторического наследния CL.

Дык. Наследия нет, а наблюдения очевидцев — есть (см. Э. Ховёнен, Й. Сеппянен, "Мир Лиспа", М.: 1986 — почему-то к этим славным финнам у меня доверия поболе, чем к даже к Грэхему). Это лишний раз доказывает, что интерпретация "единственно правильного поведения" замыкания сильно зависит от.

VD>CL — это стандарт вышедший таким каким он есть.


Диалект под названием "Common Lisp" существовал задолго до принятия стандарта ANSI.

VD>И вообще, твои слова банальная демонстрация некомпетентности. Лисп изначально имел сборщик мусора и стало быть делать урезанные в нем не имело никакого смысла.


ИМХО, очень даже имело смысл делать такие специфические замыкания. Напоминаю об "иммутабельной природе" функционального программирования.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[65]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 08.05.09 15:27
Здравствуйте, gandjustas, Вы писали:

G>Приведи парочку компиляторов С++ промышленного качества, в которых аллокация по кардинально другом алгоритму делается.


При чём тут компиляторы? Управление памятью — это библиотеки.

CC>>Там Per-thread pool с lock-free deferred алгоритмом на случай освобождения памяти из не-родного-потока.

G>Значит уже забыл. Пулы интересуют еще меньше, так как они требуют подгонки размеров блоков и пулов.
G>Как аллокатор общего назначения использовать смысла нету.

Что за вздор?!
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[72]: Брависсимо! в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 08.05.09 16:40
Оценка: +1 -3 :))
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Дык. Наследия нет, а наблюдения очевидцев — есть (см. Э. Ховёнен, Й. Сеппянен, c, М.: 1986 — почему-то к этим славным финнам у меня доверия поболе, чем к даже к Грэхему). Это лишний раз доказывает, что интерпретация "единственно правильного поведения" замыкания сильно зависит от.


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

Common Lisp, которому ты кого-то тут отсылал, во-первых, не может иметь черти какой давности, так как появился относительно недавно, а во-вторых он изначально был весьма строгой спецификацией с самого начала содержащей определение замыканий в том виде который есть и сейчас.

VD>>CL — это стандарт вышедший таким каким он есть.


ГВ>Диалект под названием "Common Lisp" существовал задолго до принятия стандарта ANSI.


Ты очередной раз бредишь. CL был создан с единственной целью — стандартизовать Лисп.

ГВ>ИМХО, очень даже имело смысл делать такие специфические замыкания. Напоминаю об "иммутабельной природе" функционального программирования.


Твое ИМХО мало кого волнует. Попробуй подтвердить его ссылками.

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

CL язык настолько же функциональный, как и императивный. Но замыкания в нем полноценные, в отличии от недоязыков авторы которых думают исключительно о производительности.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[73]: Брависсимо! в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 08.05.09 17:14
Оценка:2 (2)
Здравствуйте, VladD2, Вы писали:

ГВ>>Дык. Наследия нет, а наблюдения очевидцев — есть (см. Э. Ховёнен, Й. Сеппянен, c, М.: 1986 — почему-то к этим славным финнам у меня доверия поболе, чем к даже к Грэхему). Это лишний раз доказывает, что интерпретация "единственно правильного поведения" замыкания сильно зависит от.


VD>Ты в очередной раз сморозил глупость и пытаешься выйти сухим из воды. Не выйдет.


Узнаю старого доброго VladD2!

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


Изволь. Вот цитата из вышеупомянутой книги (т. 1, с. 261-262):

_(setq y 10)
10
_(setq s (function (lambda (x) (+ x y)))
(LEXICAL-CLOSURE ...)

Здесь переменной S присваивается в качестве значения замыкание, в котором переменная y свободна. Значение переменной y сохраняется в замыкании, и поэтому возможны более поздние присваивания на это значение не повлияют. Теперь замыкание можно использовать как функциональный аргумент вместо имени функции или лямбда-выражения. Его можно, например, вызвать с помощью формы FUNCALL:

_(funcall s 2) ; в замыкании y = 10
12
_(setq y 100)
100
_(funcall s 2) ; значения связей в
12 ; замыкании сохраняются


Обращаю твоё внимание, что этот пример не повторяется один-в-один на Allegro CL 8.1 — второй вызов даст 102.

Ещё одна цитата из того же, первого тома, но с.15-16:

Основой изложения нами выбран диалект Коммон Лисп, ставший "де-факто" промышленным стандартом языка Лисп. В книге представлены все важнейшие языковые формы и свойства конструкций Коммон Лиспа, а также типы функций и данных.


Лексика и транслитерации — как в оригинале.

VD>Common Lisp, которому ты кого-то тут отсылал, во-первых, не может иметь черти какой давности, так как появился относительно недавно, а во-вторых он изначально был весьма строгой спецификацией с самого начала содержащей определение замыканий в том виде который есть и сейчас.


Может быть. Языков без спецификаций не бывает. Факт остаётся фактом — стандарт ANSI Common Lisp принят в 1994, тогда как диалект под названием Common Lisp уже существовал на момент выхода в свет финского оригинала "Мира Лиспа" — где-то 85-86 гг. Как видишь, в случае Lisp комитет тоже не особо торопился.

VD>>>CL — это стандарт вышедший таким каким он есть.

ГВ>>Диалект под названием "Common Lisp" существовал задолго до принятия стандарта ANSI.
VD>Ты очередной раз бредишь. CL был создан с единственной целью — стандартизовать Лисп.

Разве это отменяет факт существования диалекта до того, как был принят стандарт?

ГВ>>ИМХО, очень даже имело смысл делать такие специфические замыкания. Напоминаю об "иммутабельной природе" функционального программирования.

VD>Твое ИМХО мало кого волнует. Попробуй подтвердить его ссылками.
VD>И кончай изворачиваться. Все твои попытки сделать вид, что ты не говорил глупость делают эту глупость только более четко видной.

VD>CL язык настолько же функциональный, как и императивный. Но замыкания в нем полноценные, в отличии от недоязыков авторы которых думают исключительно о производительности.


Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[74]: Небольшая опечатка в избранное  новое    модер. 
От: Геннадий Васильевhttp://www.livejournal.com/users/gesha_x
Дата: 08.05.09 18:35
ГВ>>>см. Э. Ховёнен, Й. Сеппянен, c, М.: 1986

В СССР книга вышла в 1990 г. 1986-й — это финское издание.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[63]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 08.05.09 18:45
Оценка:2 (1) +1
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Не совсем так. Дело в том, что GC для C++ не должен решать задачи управления абсолютно всеми объектами и никто ничего такого и не предлагает. Но для каких-то отдельных моментов он вполне может оказаться приемлемым решением, лучшим, чем reference counting. Ключевое слово: "какие-то отдельные моменты".


Пока в С++ не будет введено понятие "управляемого GC указателя/ссылки" ничего путного в С++ сделать не удастся. Только не строгий GC который крайне не практичен.

Проблема проста до банальности. С++ спроектирован в расчете на то, что адреса в указателях неизменны. А качественный GC предполагает, что как раз таки объекты можно перемещать, а значит их адреса изменятся. В этих условиях GC должен иметь возможность определить в каких ячейках памяти лежат адреса управляемых GC объектов, а в каких просто данные (возможно совпадающие по значению с адресами). GC Явы и дотнета спроектированы в расчете на использование метаданных генерируемых компиляторами и определенные ограничения в языках. Таких ограничений в С++ нет. Посему реализация эффективного GC для него невозможна.
Пример доработки С++ — это C++/CLI и Menaged C++. Там были введены специальные типы указателей которые описываются в метаданных и контролируются рантаймом. По другому никак.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[65]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 08.05.09 18:47
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Тут надо подумать, быстро не отвечу. Преимущества, по идее, должны быть в меньшем количестве lock (неизбежен при подсчёте ссылок) и соответственно — в меньшем количестве сбросов кэша процессора. Ну и конечно — в решении проблемы с циклическими ссылками.


На практике GC в С++ оказываются куда менее эффективными чем даже подсчет ссылок. Преимущество только одно. Нет проблем с зацикливанием.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[72]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 08.05.09 19:02
Здравствуйте, Хвост, Вы писали:

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


Х>>>Ну как, "мы наш, мы новый мир построим", HeapAlloc + ручное управление памятью, указатели, MyMemMgr.alloc() етц, только пользовать ето будет сложнее, смартпоинтеров то нет

G>>Ты прикалываешься или реально тупость говоришь?
G>>1)HeapAlloc работает медленнее, чем GC
G>>2)Даже если выделишь память с помощью unmanaged, то ты не сможешь создать .NET объект в ней.
G>>3)Ты не сможешь хранить ссылки на managed объекты в таком блоке памяти.
Х>я разве где-то утверждал обратное? а то что будет нелегко (пункты 2, 3) так етож C#, он такой)

G>>В итого это не будет ни быстрее, ни надежнее. Если ты серьезно считаешь что таким вообще стоит заниматься в каком либо случае, то тебе надо срочно обратиться к доктору.

Х>менежмент руками будет быстрее, надёжнее или нет
Сначала докажи это. В общем случае быстрее у тебя точно не выйдет. Можно в локальных случаях сделать пулы, но абсолютно тоже самое достуно и с GC.

Х>ето больше радиус кривизны рук решает.

Радиус кривизны рук определяет склонность к изобретению велосипедов.

Х>я считаю что таким действительно не стоит заниматься, C# для етого не предназначен, он высокоуровненвый и медленный, хочешь высокоуровневый и быстрый — бери С++.

Можешь конкретно показать чем он медленный?
Только ссылки на говнокод не надо.

Я показал что аллокатор в С++ медленно работает, покажи что-нить такое для C#
Re[75]: Небольшая опечатка в избранное  новое    модер. 
От: VladD2 rsdnwww.k-press.ru/cs
Дата: 08.05.09 19:03
Оценка: :)
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>>>см. Э. Ховёнен, Й. Сеппянен, c, М.: 1986


ГВ>В СССР книга вышла в 1990 г. 1986-й — это финское издание.


Ты бы еще на китайцев сослася бы. Вытянул какую-то бредятину и на ее основании с умным видом вывел целую теорию.

Лексические замыкания в CL появились из Схемы. И было это в 70-е.
Эти фины описывали черти-что сбоку бантик.
Вышел Nemerle 1.0


Все что нас не убивает, потом сильно об этом жалеет :).
Re[66]: Работа - с чего начать: С++ или С#? в избранное  новое    модер. 
От: gandjustashttp://gandjustas.blogspot.com/
Дата: 08.05.09 19:08
Здравствуйте, Геннадий Васильев, Вы писали:

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


G>>Приведи парочку компиляторов С++ промышленного качества, в которых аллокация по кардинально другом алгоритму делается.

ГВ>При чём тут компиляторы? Управление памятью — это библиотеки.
new и delete — часть языка. Неважно через что они реализуются.

CC>>>Там Per-thread pool с lock-free deferred алгоритмом на случай освобождения памяти из не-родного-потока.

G>>Значит уже забыл. Пулы интересуют еще меньше, так как они требуют подгонки размеров блоков и пулов.
G>>Как аллокатор общего назначения использовать смысла нету.
ГВ>Что за вздор?!
Чацкий прямо:
"Вон из Москвы, сюда я больше не ездун... не ездец... не ездюк..., тьфу сюда я я больше ни приеду".

А по сущству есть что сказать? Или ты честно считаешь что в своем проекте будешь вмеесто стандартных new, delete и всего что с ними связано применять тот код, который привел CreatorCray?
Re[75]: Небольшая опечатка в избранное  новое    модер.