Re[3]: Работа - с чего начать: С++ или С#?
От: StandAlone  
Дата: 15.03.09 20:28
Оценка: 21 (4) +4 :))) :))) :))) :))) :))
Здравствуйте, 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[2]: Работа - с чего начать: С++ или С#?
От: dotidot Россия  
Дата: 15.03.09 08:34
Оценка: +1 -20
Здравствуйте, niellune, Вы писали:

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

А вообще всё сложно(кризис), думаю надо сначала вообще найти живые вакансии, а потом уже решать. Успехов.
Re[4]: Работа - с чего начать: С++ или С#?
От: BulatZiganshin  
Дата: 15.03.09 10:59
Оценка: +5 -7 :))
Здравствуйте, shrecher, Вы писали:

S>MSOffice12, Microsoft Silverlight, Windows7, Vista,


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

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


массовые коробочные продукты действительно лучше написать на C++ — хоть время разработки в несколько раз выше, зато они требуют меньше памяти и работают быстрее. вот только где у нас в стране разрабатывают такие прогшраммы — с миллионами продаж? таких мест раз-два и обчёлся, добавь к этому массу legacy C++ программистов и ты получишь, что порог вхождения в эту область слишком высок, а к тому времени, когда человек станет квалифицированным C++ девелопером, потребность в них и вовсе исчезнет. словом, это всё равно что идти учиться на кучера в эпоху первых трамваев
Люди, я люблю вас! Будьте бдительны!!!
Re: Работа - с чего начать: С++ или С#?
От: SergeyT. США http://sergeyteplyakov.blogspot.com/
Дата: 25.04.09 10:41
Оценка: 27 (10) +1

Мне кажется, что языки, используемые нами для выражения своих идей, становятся частью нас самих, поэтому, если вы знаете только один язык, может показаться, будто сторонники других языков представляют опасность лично для вас. Мне представляется, что выход из этой ситуации – освоение других языков. Сомневаюсь, что можно быть профессионалом в области ПО и знать лишь один язык программирования. Может быть и экономическая причина: фундаментальные знания выходят за границы языка программирования в отличие от многих практических навыков. Поэтому, если я знаю только язык X и его наборы инструментов, а вы являетесь сторонником языка Y и его наборов инструментов, вы представляете угрозу для источника моего заработка. И вновь решение, как мне кажется, — в знании нескольких языков и наборов инструментов (а также твердое понимание фундаментальных концепций).

Интервью++: Бьерн Страуструп об эволюции языков

Портфелем знаний мы предпочитаем называть все факты, известные программистам об информатике, обалсти приложений, в которых они работают, и накопленный ими опыт. Управление портфелем знаний очень похоже на управление финансовыми портфелем.
Предложения по поддержке портфеля знаний:
— Учите (как минимум) по одному языку программирования каждый год.
— Читайте по одной технической книге ежеквартально.
— Читайте книги, не относящиеся к технической литературе.
— Экспериментируйте с различными операционными средами.
Важно продолжать инвестирование. Как только вы почувствуете, что освоили новый язык или фрагмент технологии, двигайтесь дальше. Изучайте другой.
Неважно, будете ли вы когда-либо использовать одну из этих технологий в проекте или даже не упомянете о них в своем резюме. Процесс обучения расширит ваше мышление, открывая вас для новых возможностей и новых путей в творчестве. "Перекрестное опыление" идей важно; попытайтесь применить выученные уроки к проекту, над которым вы работаете в настоящее время. Даже если в вашем проекте не используется некая технология, вы наверняка сможете позаимствовать некоторые идеи.

Эндрю Хант и Дэвид Томас. Программист-прагматик. Путь от подмастерья к мастеру

Как сказал Дэвид Грфйс (Gries) подход к программированию не должен определяться используемыми инструментами. В связи с этим он проводит различие между программированием на языке (programming in lanuage) и программирование с использованием языка (programming into language). Разработчики, программирующие «на» языке, ограничивают свое мышление конструкциями, непосредственно поддерживаемых языком. Если предоставляемые языком средства примитивны, мысли программистов будут столь же примитивными.
Разработчики, программирующие «с использованием» языка, сначала решают, какие мысли они хотят выразить, после чего определяют, как выразить их при помощи конкретного языка.

Стив Макконнелл. Совершенный код.

Я привел три цитаты, каждая из которых говорит о второстепенной роли языка программирования в жизни разработчика. Причем автор одной из них имеет непосредственное отношение к одному из языков программирования!
Конечно же, я не придерживаюсь мысли, что язык программирования не играет никакой роли. Нет, это не так. Я не считаю, что не нужно углублять свои знания в конкретном языке или технологии; не считаю, что нужно выбросить книги Герба Саттера и Андея Александреску, Джошуа Блоха и Билла Вагнера, и не зачитыватся этюдами nikov-а на этом форуме. Все это очень полезно. Но польза не только в том, что эти знания вы можете использовать сейчас на текущем проекте с текущим языком и технологией, а в том, что эти знания позволят перейти вам на следующий уровень своего развития и решать более сложные задачи в следующих проектах, уже на совершенно других языках программирования и совершенно других технологиях.

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

Эйнштейн неоднократно утверждал, что природа должна иметь простые объяснения, поскольку Богу не свойственны капризность и произвол. У программиста нет такого утешения: сложность, с которой он должен справиться, лежит в самой природе системы

а затем:

Сложность программного обеспечения – отнюдь не случайное его свойство. Сложность вызывается четырьмя основными причинами: сложностью реальной предметной области, из которой исходит заказ на разработку; турдностью управления процессом разработки; необходимостью обеспечить достаточную гибкость программы; неудовлетворительными способами описания поведения больших дискретных систем.


Как вы можете заметить, не один из этих пунктов не содержит фразы: «сложность программного обеспечения обусловлена неверным выбором языка программирования». Кроме того, вам будет довольно сложно найти цитату авторитетного автора, который бы сказал что-то вроде этого: «Изучение языка программирования А – это ваш путь к успеху. Благодаря ему уже через полгода его изучения вас ждет почет и уважение в среде разработчиков по всему миру, вы будете президентом корпорации и будете ездить на Bentley, а вот если ваш выбор остановится на языке программирования Б – вас ждет позор, забвение и жизнь на помойке».

На закуску, хочется привести еще одну цитату Ханта и Томаса:

Программирование – это прикладное искусство. Простейший его смысл заключается в следующем: заставить компьютер делать то, что вам нужно (или то, что нужно пользователю, работающему с вашей программой). Программист – он и слушатель, он и советник, он и переводчик и даже диктатор. Вы пытаетесь ухватить суть не совсем ясных требований и найти такой способ их выражения, что только машина сможет оценить их по достоинству. Вы пытаетесь задокументировать работу так, чтобы она была понятна другим, спроектировать ее так, чтобы другие могли на нее положиться. Кроме того, вы пытаетесь сделать все это вопреки безжалостному ходу стрелки часов, отсчитывающих время, отпущенное на проект. Каждый день вы совершаете по маленькому чуду.
Это непростая работа.
Многие предлагают вам помощь. Фирмы-поставщики инструментальных средств настойчиво говорят о чудесах, которые творят их программы. Мудрецы от методологии заверяют в том, что их средства гарантируют результаты. Каждый считает свой язык программирования лучшим из лучших, а операционную систему – панацеей.
Разумеется, эти утверждения неверны. Простых ответов не существует. Не существует такого понятия, как наилучшее решение, будь то инструментальное средство, язык или операционная система. Существует лишь некие системы, которые являются более приемлемыми при конкретном стечении обстоятельств.
И в этот момент на сцену выходит прагматизм. Стоит избегать обряда венчания с конкретной технологией, но при этом необходимо обладать подготовкой и опытом, настолько обширными, что это позволит выбрать верные решения в конкретных ситуациях. Ваша подготовка происходит из понимания основных принципов информатики, а опыт основывается на разнообразных практических проектах. Теория и практика сочетаются, придавая вам силу.


ЗЫ. топикпастеру (если он все еще читает это обсуждение): расценивай это обсуждение так, как будто оно находится в форуме «Коллеги, улыбнитесь». Главное – выбор интересного коллектива с интересной задачей, а язык программирования имеет второстепенное значение.
Re[2]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 15.03.09 14:20
Оценка: 1 (1) +2 -1 :))) :)))
Здравствуйте, JazzzMaster, Вы писали:

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


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


Происходит практически необратимая деградация...
Нужно разобрать угил.
Re[9]: Работа - с чего начать: С++ или С#?
От: Anton Batenev Россия https://github.com/abbat
Дата: 19.05.09 23:21
Оценка: 1 (1) +3 -2 :))) :)
Здравствуйте, VladD2, Вы писали:

VD>>> Что ты хочешь увидеть?

AB>>Мастер-класс, я же написал
VD>Это типа попрограммировать на публике чтобы все рты по открывали?

Да нет, Влад. От тебя мне будет достаточно, чтобы RSDN заработал на Nemerle под рантаймом Mono. Стабильно, без сбоев, быстро. Это будет высший мастер-класс.

VD>Да, давно пора. Слив, с твоей стороны, уже произошел. Что еще обсуждать?


* А пока что я вижу фаната-Влада, который носится с Nemerle как с писаной торбой;
* Я вижу сайт RSDN, который в течении полутора (или уже больше?) месяцев периодически или ложится или выдает HTTP-500 или тормозит безбожно;
* Я вижу насквозь сишный юниксойдный nginx, который поставили для латания брешей, с которыми не справляется IIS и начинка, и который бог знает сколько пытались настроить (хоть спасибо за сжатие — всего каких-то 740 килобайт сишного кода решили проблему, которую так долго не могли решить на IIS и Co);
* Я вижу лежащий уже с несколько недель поиск, который мало того, что лежит, так еще находится на стороннем ресурсе;
* Я вижу AndrewVK, который отдувается за всю команду и боится трогать код сайта от греха подальше (и в чем-то я его понимаю);
* Я вижу в форумах сообщения о том, что "безопасный" код сайта боятся открывать потому что в нем много дыр;
* Я вижу неработающие ссылки, которые отваливаются по таймауту и некому и нечему (и нечем, судя по всему) просматривать логи;
* Я не вижу Янус... впрочем, это уже другая история.

З.Ы. Да, я знаю, что это удар ниже пояса, но хотелось ответить по теме и без эмоций.
Re[2]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 15.03.09 15:50
Оценка: -6 :))) :)
Здравствуйте, astral_marine, Вы писали:

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


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

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

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

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

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

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

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

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

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

Слушай не смеши народ, а. "Опыт не пропьешь"
Re[23]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 16.03.09 18: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[62]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 08.05.09 13:19
Оценка: +1 -5 :)))
Здравствуйте, 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: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 15.03.09 21: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[35]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 21.05.09 12:35
Оценка: 4 (2) +3 -2 :)
Здравствуйте, criosray, Вы писали:

ГВ>>Ты с топика-то не съезжай. Я тебе тут давеча вопрос про тестирование задал. Ответ будет?

C>Я даю ответы только тем, кто хоть что-то понимает в теме. В Вашем случае не вижу смысла тратить время и силы, т.к. все-равно канут в лету.

Фи, как не интеллигентно.

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

Для справки: нормальная литература, это либо та, которая издана примерно до 1995 года (до бума доткомов), либо та, которая не содержит словесей "...-driven development". Если с первым ещё понятно, то про второе объясню, почему. Потому что development направляется всегда (абсолютно всегда, исключений нет) только одной вещью — требованиями к конечному продукту. Функциональными, эстетическими, приснившимися в пророческом сне — не важно. Не паттернами, не agile-ением, не XP-данутостью, ни тем более — тестами. Тестирование — составляющая development, которая нужна только для одного — доказать, что продукт соответствует выдвинутым требованиям. Я не знаю, какую траву нужно смалить и в каких количествах, чтобы всерьёз упирать на то, что заведомо подчинённая часть может управлять целым. То есть противоречие тут уже на уровне терминологии определений. Потому, вероятно, Фаулер и мечется между "приблизительно", "обычно" и "это надо объяснить на следующих трёхстах страницах".
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[33]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 29.04.09 17:22
Оценка: 2 (1) +1 -2 :))) :)
Здравствуйте, COFF, Вы писали:

S>>Дело не в том как написано и что тестируется и даже не в конкретном экспериментаторе (который думает что разница в контроле типов в рантайме), а в интерпретации результата.

S>>Победил C# — недоумение
S>>Победил С++ — значит C# — тормоз

COF>Не, ну все правильно. Победил C# значит надо разбираться где в C++ коде косяк



Совершенно верно. И пока программисты С++ ищут очередной косяк, программисты С# сдали проект в продакшн и занялись другим, получив свою денюжку.
Re[33]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 18.05.09 11:38
Оценка: +1 -5 :))
Здравствуйте, vdimas, Вы писали:

C>>Ответьте на этот вопрос:


C>>

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


V>Вопрос стоит вовсе не так, и я дважды пытался поправить постановку вопроса. Видя твою невнимательность, мне крайне неохота что-либо объяснять, ибо опять может уйти в космос... Тем не менее, для истории:


Ну вот и хорошо. Значит польза все-таки есть. Хорошо, что Вы это осознали. Ну а то, что способы тестирования различаются в виду убогости С++ и native кода — это и так понятно было.
Re: Работа - с чего начать: С++ или С#?
От: astral_marine  
Дата: 15.03.09 09:08
Оценка: +4 -2 :)
Главное что бы работа нравилась, а язык — второстепенен.

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

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

PHP — это рабочая лошадка веб-программиста, если не нравится разрабатывать дизайн сайтов, то не имеет смысла его трогать.
Re[4]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 15.03.09 15:55
Оценка: +1 -1 :))) :))
Здравствуйте, shrecher, Вы писали:

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

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

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


Полагаю, имелось в виду, что для изучения C++ как раз жизнь и понадобится..
Re[31]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 21:53
Оценка: -3 :))) :)
Здравствуйте, Erop, Вы писали:

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


G>>Круто, а фабричный метод так изобразите?

E>А зачем в данном случае фабричный метод?..
Действительно, ООП там толком нет, только пародия на него.

E>Но вообще-то возможно и изображу, правда тут надо бы уточнить, что ты понимаешь под "фабричный метод", так как может и изображу, а может и нет...

http://ru.wikipedia.org/wiki/Фабричный_метод_(шаблон_проектирования)

G>>ЗЫ. Передача указателя на стек до добра не доводит, большенство уязвимостей в ПО так и получаются.

E>А как можно было бы такой уязвимостью воспользоваться? Ну, хотя бы, гипотетически? Это же не буфер, а объект на стеке.
Я не говорю что это уязвимость. Это причина появления уязвимостей.
Например есть убрать возможность передавать указатель на стек (или сделать такую передачу безопасной), то многих уязвимостей переполнения буфера просто не появится. В managed языках как раз такой возможности нету.
И в C++ есть способ безопасной передачи указателя на стек — ссылки называется. Только на ссылках вообще ООП не сделаешь.

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

Re[72]: Брависсимо!
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.05.09 17:40
Оценка: +1 -4 :))
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Дык. Наследия нет, а наблюдения очевидцев — есть (см. Э. Ховёнен, Й. Сеппянен, c, М.: 1986 — почему-то к этим славным финнам у меня доверия поболе, чем к даже к Грэхему). Это лишний раз доказывает, что интерпретация "единственно правильного поведения" замыкания сильно зависит от.


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

Common Lisp, которому ты кого-то тут отсылал, во-первых, не может иметь черти какой давности, так как появился относительно недавно, а во-вторых он изначально был весьма строгой спецификацией с самого начала содержащей определение замыканий в том виде который есть и сейчас.

VD>>CL — это стандарт вышедший таким каким он есть.


ГВ>Диалект под названием "Common Lisp" существовал задолго до принятия стандарта ANSI.


Ты очередной раз бредишь. CL был создан с единственной целью — стандартизовать Лисп.

ГВ>ИМХО, очень даже имело смысл делать такие специфические замыкания. Напоминаю об "иммутабельной природе" функционального программирования.


Твое ИМХО мало кого волнует. Попробуй подтвердить его ссылками.

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

CL язык настолько же функциональный, как и императивный. Но замыкания в нем полноценные, в отличии от недоязыков авторы которых думают исключительно о производительности.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[44]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 19.05.09 14:57
Оценка: +3 -3 :)
Здравствуйте, samius, Вы писали:

NBN>>>>А уж разница в скорости разработки конечного продукта вообще становится малоактуальна по сравнению с другими факторами.

S>>>Скажи это заказчикам.
NBN>>Нормальным заказчикам мелкие программерские дрязги вообще пофигу.
S>я не про дрязги, а про скорость разработки.

Суммарная скорость разработки крайне мало зависит от выбранного высокоуровневого языка.
Нужно разобрать угил.
Re[63]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 07.05.09 18:56
Оценка: 4 (2) +3 :)
Здравствуйте, Хвост, Вы писали:

MK>>>Что за темы?

Х>>тебе дать ссылку на тему которую завёл ты сам?
Х>Кстати, глянул, забавная ета тема (http://www.rsdn.ru/forum/message/3379603.flat.aspx
Автор: MxKazan
Дата: 05.05.09
)

Х>Тут дотнет во всей красе, и тормозящий интерфейс, и утечки памяти, вобщем всё лучшее — детям :)))

Да уж, такое впечатление что дотнетчики живут в каком-то виртуальном мире, навеянном рекламными проспектами — в мире где нет утечек памяти, где программы летают, а критерием хорошести языка является то, насколько он поддерживает лямбды :) В конце-концов, ну не было в C++ лямбд — ну и черт с ними, вполне можно без них прожить. Что народ к ним привязался? А вот в C# нет деструкторов и переопределения операторов присваивания, например. Я конечно понимаю, что если чего-то нет в текущей версии C# — это не нужно, а если чего-то нет в C++ — это плохой дизайн языка, но все же :)
Re[29]: Работа - с чего начать: С++ или С#?
От: alsemm Россия  
Дата: 20.03.09 19:00
Оценка: 3 (1) +1 :))) :)
Здравствуйте, gandjustas, Вы писали:

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


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


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


G>>>>Думаете нельзя в C# на стеке данные размещать?

MK>>>Думаю конкретно esil имеет ввиду, что нельзя разместить в стеке произвольные данные.
MK>>>Массивы, например, туда не засунуть, ибо class

MK>>>А вот что имел ввиду minorlogic я, чесс говоря, тоже не понял.

MK>>>Но эт не страшно

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

G>Как будут работать виртуальные методы при размещении объектов на стеке?
После таких вопросов и появляются стереотипы, что С# отупляет

Алексей
Re[46]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 20.05.09 11:06
Оценка: 3 (1) :))) :))
Здравствуйте, criosray, Вы писали:

ГВ>>Рассмотрю предложение на вакансию Тьюринг-тестера.

C>Детский сад, вторая группа.

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

MK>- Изначально ты написал: "И еще забыл, что последние года 4 тактовая частота процов практически не растет, а обсуждаемого скачка оптимизации JIT-а при переходе на 3.0 версию не было ВООБЩЕ".

MK>- На что получил ответ, что рантайм по прежнему 2.0, что он не менялся со времен второго дотНета, ну нету CLR 3.0 и всё.

А откуда взялось слово CLR? Почему ты решил, что речь о CLR, а не о .Net Framework, например?

MK>- Тем не менее, как контраргумент ты выдвинул такое: "Тем не менее, сам рантайм и .Net-сборки от второго фреймворка обновлялись с выходом каждого последующего или их SP. Для интереса, вот список изменений только лишь для 2.0SP1 http://support.microsoft.com/kb/945757, остальное найти так же не трудно, если есть желание."


Человек дал понять, что там ничего и не могло поменяться, ввиду того, что версия CLR не менялась. Я попытался опровергнуть это "мнение", дав немного информации для затравки.

MK>Собственно отсюда и вывод, что сервис-паки каким-то магическим образом повышают версию.


А ну тогда ты прав, ведь .Net Framework 3.5SP1 — это следующая (более высокая) версия после .Net Framework 3.5

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

Ok, вот ложу еще и в рот:

В Windows версия файла состояит из 4-х полей: major, minor, build, revision. MS для версий своих продуктов тоже использует подобную маркировку, причем версии файлов старается маркировать так же как версии продуктов (не всегда правда, но не суть). Далее, хотя последние 2 поля давно используются по другому назначению, чем значит их перевод на русский, тем не менее для обозначения версии используюся именно целочисленных 4 поля (в классике было по 2 байта на каждое). Так вот, мой оппонент даже не потрудился открыть эксплорер и посмотреть на все 4 поля версии, про которую он так много говорил. Он бы тогда обнаружил, что последнее поле в версии постоянно изменяется, и оно вовсе не одинаковое у всех файлов. (Например сейчас последнее поле версии у разных файлов колеблется от 42 до 3053, а после первого выхода .Net 2.0SP1 номер в этом поле выше 926 не поднимался)

Итого: менялся сам рантайм, и, разумеется, менялись версии файлов, его составляющих (нельзя же было заменить файл, не обновив ему версию).

------------------
Для интереса — как это выглядит с моей стороны:
— я припомнил Владу те времена, когда он регулярно вещал не только про Немерле, но и про .Net, рассказывая как много и как просто будут делать будущие оптимизации. Потом это дело притихло, за год примерно перед выходом .Net 3.0 стала просачиваться сюда инсайдерская инфомация об возможных улучшениях рантайма, привязанная к выходу нового фреймворка, и опять же была куча разговоров о "перспективности" и оптимизациях и святого духа, Аминь.
— тут влазит некто, и озвучивает что-то про версию CLR и тут же озвучил мнение, что я не в курсе этого.
— я спрашиваю: и при чем тут?
— в ответ: ты даже не отличаешь CLR от .Net Framework и по той причине ламер.
Дабы не спугнуть, хотел аккуратными вопросами подвести человека к самостоятельному пониманию глубины поримой им... как бы это... невпопадицы, во.

Но не иначе там оказался кремень... по всему объему тела, не исключая жизненно важного для программиста органа, раз из-за такой, мягко говоря, муйни, вытекло столько постов.
Re: Работа - с чего начать: С++ или С#?
От: Pepel Беларусь  
Дата: 18.05.09 09:16
Оценка: -5 :)
весь пост не читал, только начало зацепил, вставлю свои 5 центов : тут чет про кросплатформенность много пишут там и прочий валюнтаризм .. мне кажется, дело в области применении задачи, наверное программу управления кардиодатчиком хирургического стола все же стоит писать на C++ ввиду сильного механизма проверок , а дрочилку отчетов овощной базы на рынке можно и на шарпах забомбить и она тож будет великолепна ..
Re[22]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 18.05.09 14:04
Оценка: 4 (2) +2 -1
Здравствуйте, VladD2, Вы писали:

VD>Не возьмусь оценить точные проценты применения, но почему-то мне кажется, что C#, а уж тем более Ява применяется гораздо чаще на сегодняшний день. И объясняется это тем, что он применяется для автоматизации предприятий и создания сайтов в интернет. В этих областях есть много нюансов и написать единый коробочный софт для них в принципе невозможно. А это ниша для огромных стад разработчиков.


Ну и? Писали раньше на VB/ASP, теперь C#/ASP.Net. Эти стада заняты разработкой, которую считалось плохим тоном делать на С++ во все времена.

VD>С++ же используется в последнее время больше частью для создания высокотиражных продуктов где стоимость разработки не так важна


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

VD>так как окупается количеством продаж (т.е. — игры, ОС, офисные приложения), а меньшее потребление компьютерных ресурсов может увеличить объем продаж.


Ты еще забыл кодеки, мультимедиа, реалтайм протоколы и т.д. И еще забыл, что последние года 4 тактовая частота процов практически не растет, а обсуждаемого скачка оптимизации JIT-а при переходе на 3.0 версию не было ВООБЩЕ
Re[17]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 16.03.09 15:44
Оценка: 3 (1) +4
Здравствуйте, BulatZiganshin, Вы писали:

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


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

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


Аналогия вещь хорошая, но обоюдоострая. Представь, что все начнут мусор не в урны кидать, а на землю — все равно дворник потом подберет :) Наверное, это будет не очень хорошо. Продуманная стратегия управления ресурсами в C++ позволяет не заботиться о памяти точно в такой же высокоуровневой манере.
Re[3]: Работа - с чего начать: С++ или С#?
От: shrecher  
Дата: 15.03.09 10: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[35]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.03.09 21: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[67]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 20.03.09 16: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[23]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.04.09 14:52
Оценка: 1 (1) +1 -3
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Замыкать можно ещё и значения. Значения указателей — в том числе и т.д., и т.п.


Ты бы лучше не говорил о том в чем не разбираемый. А то такой бред несешь, что просто смешно.
Замыкать значения невозможно. Это просто глупость. Значения на то и значения чтобы копироваться. Суть замыканий как раз в том, чтобы иметь доступ к значениям видимым в лексической области видимости. При этом все переменные и поля которые попали в замыкание должны жить не меньше чем область в которой они объявлены и не меньше чем живет замыкание. Любой указатель должен быть верным до момента когда замыкание перестанет существовать.
Это приводит к тому, что образуется граф взаимно-связанных объектов время жизни которых крайне сложно отследить. При наличии 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");
  }
}


И это простой случай без замыкания. С замыканием разница начинает расти намного сильнее.

ГВ>Так... Тогда объясни, что ты считаешь "прямыми", а что "побочными" эффектами шаблонов?


Прямой эффект — это параметрически полиморфизм, т.е. то ради чего шаблоны были введены. А вот вычисления во время компиляции основанные на том факте, что раскрытие шаблонов идет итеративно и может быть остановлено человеком описавшим частный случай шаблона — это использование побочного эффекта. Автор языка не предусматривал подобного использования шаблонов.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[46]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 03:11
Оценка: 1 (1) +2 -1 :)
Здравствуйте, gandjustas, Вы писали:

G>>>Может всетаки уже стоит признать что в С++ в обозримом будущем не будет нормальных лямбд.

ГВ>>Знаешь, это очень сильное колдунство — признавать отсутствие наличествующего. "Видишь суслика? А его нет!"
G>Точно, ты ведь до сих пор не признаешь что нету и не будет в С++ нормальных лямбд, а в других языках есть.

Круто, давно не встречал фраз, построенных таким образом. Ты меня, правда, за ребёнка держишь? Или за подчинённого, которого можно заставить верить в любую ахинею? Ладно, шутка, не обижайся.

Теперь — по топику.

Я признаю наличие в других языках других реализаций лямбд. Но я не считаю "единственно нормальной" реализацию лямбд в каком-то определённом языке, или их наборе. Например, то, что лямбды в "других" языках непременно требуют вовлечения GC я считаю изъяном их реализации, пусть и повсеместно встречающимся. Я, например, знаю, что использование лямбда-выражений не всегда требует отдельного управления жизненным циклом замкнутых переменных. Отсюда, я не думаю, что непременное привлечение GC — "нормально", т.е., сродни эталону.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re: Работа - с чего начать: С++ или С#?
От: landerhigh Пират  
Дата: 15.03.09 22:20
Оценка: +1 :))) :)
Здравствуйте, niellune, Вы писали:

Правильно тебе тут советуют (особенно те, кто не в курсе существования операционок не от MS), не ходи в C++, там все очень, очень плохо (с).
Re: Работа - с чего начать: С++ или С#?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.03.09 16:00
Оценка: +2 :)))
Здравствуйте, niellune, Вы писали:

Хороший топик для потенциальных работодателей. Участников холивара можно смело на должности выше сеньора не брать
... << RSDN@Home 1.2.0 alpha 4 rev. 1138 on Windows Vista 6.1.7000.0>>
AVK Blog
Re[2]: Работа - с чего начать: С++ или С#?
От: MescalitoPeyot Украина  
Дата: 17.03.09 17:55
Оценка: :))) :))
Здравствуйте, AndrewVK, Вы писали:

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


AVK>Хороший топик для потенциальных работодателей. Участников холивара можно смело на должности выше сеньора не брать


О, спасибо, пополнит мою коллекцию:
Писали ли вы в резюме "C/C++" через слеш?
Придерживаетесь ли вы code-style ядра виндовс?
Знаете формулу площади круга?
Ваше резюме помещается на одну страницу?
Ваше резюме не помещается на одну страницу?
Разберетесь с фиговиой а-ля // wtf????\ etc. ?
Разберетесь с фиговиной а-ля :> etc. ?
Имеете ли опыт работы в аутсорсе?
Отписывались ли вы на рсдн в форуме "О работе" в топике "Работа — с чего начать: С++ или С#?"
... << RSDN@Home 1.2.0 alpha 4 rev. 1138>>
Re[48]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 08:57
Оценка: -3 :))
Здравствуйте, 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]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 11:45
Оценка: +2 -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;
Х>}
Х>


Невопрос

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[20]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 27.04.09 09:46
Оценка: +3 :))
Здравствуйте, gandjustas, Вы писали:

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

G>Только ни один из этих факторов не говорит что С++ чем-то хорош.
просто удивительно, фраза одинаково верна для всех языков из мэйнстрима
People write code, programming languages don't.
Re[29]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 29.04.09 17:29
Оценка: +4 :)
Здравствуйте, COFF, Вы писали:

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

А можно ссылку на эту рекомендацию писать как можно меньше маленьких функций?
А то страшно стало! Быстрее всё всё всё в main переношу...
Re[64]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 08.05.09 13:47
Оценка: -4 :)
Здравствуйте, 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[34]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 18.05.09 11:59
Оценка: +2 :)))
Здравствуйте, criosray, Вы писали:

V>>Вопрос стоит вовсе не так, и я дважды пытался поправить постановку вопроса. Видя твою невнимательность, мне крайне неохота что-либо объяснять, ибо опять может уйти в космос... Тем не менее, для истории:

C>Ну вот и хорошо. Значит польза все-таки есть. Хорошо, что Вы это осознали. Ну а то, что способы тестирования различаются в виду убогости С++ и native кода — это и так понятно было.

Мда... С такими апологетами .Net в противниках не нуждается...
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[9]: Работа - с чего начать: С++ или С#?
От: Anton Batenev Россия https://github.com/abbat
Дата: 19.05.09 13:33
Оценка: +1 -4
Здравствуйте, MxKazan, Вы писали:

MK> Не, ну это как-то не хорошо с твоей стороны. Получается ты просто игнорируешь реальные примеры. Зачем тогда спрашивать


Я просто знаком с фанатизмом Влада, чтобы не тратить время на бесполезный для меня разговор (не в обиду Владу). Мастер класса на Nemerle по рантаймом Mono я все равно не дождусь — эта задачка будет посложнее, чем просто мастер-класс на Mono, а вот ресурсов потеряю изрядно.
avalon 1.0rc1 rev 244, zlib 1.2.3
Re[35]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.09 14:21
Оценка: +2 -2 :)
Здравствуйте, IID, Вы писали:

IID>Возьмём два абсолютно идентичных алгоритма. Что теперь у нас со скоростью ?


Получаются два абсолютно сферических коня в вакууме.

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

Если же вернуться к реальности (от сфероконей), то тут уже неоднократно замечали, что упрощение разработки позволяет в том числе потратить больше времени на тестирование, выбор подходящих алгоритмов и их оптимизацию.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[31]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 19.05.09 17:38
Оценка: :))) :))
Здравствуйте, hattab, Вы писали:

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


VD>>>>Из этой предпосылки можно сделать вывод, что если написать компилятор, скажем, С на Руби, то получаемые программы будут иметь "в определенном смысле" (не знаю что за этим скрывается) скорость Руби (т.е. будут тормозными).


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

S>>Из чего сделано выделенное предположение?

H>Это не предположение, это этакая параллель... .NET core библиотеки-то насквозь C++'сные.

(я бы сказал, что местами)
Так вот откуда ноги растут у тормознутости дотнета
Re[70]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 22.05.09 19:04
Оценка: +1 :))) :)
Здравствуйте, CreatorCray, Вы писали:

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


IID>>>У нас в проекте именно так, собственные new/delete, потому что в KernelMode аллокация вовсе не через HeapAlloc делается. Полёт нормальный.

G>>Разве C++ в ядре? А что там от C++ осталось то?
CC>А что в твоем понимании С++? Очень интересно, просвети.
Полиморфизм, наследование, шаблоны. В принципе если писать код на С для интеропа с другими языками, то и динамическое выделение памяти не нужно.

CC>А то ты в последнее время завел шарманку "в нейтиве С рулит, С++ не нужен", что наводит на некоторые интересные мысли о том, что ты понимаешь под С++.

В нейтиве рулит нэйтив. А в программировании — управляемые языки и мощные платформы.
Re[18]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 27.04.09 05: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[38]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 19.05.09 08:59
Оценка: 5 (2) +2
Здравствуйте, gandjustas, Вы писали:

V>>Садись, два.

V>>Роутеры и маршрутизаторы с этой же точки зрения тоже разные вещи, использующиеся в разных местах сети.

G>http://www.martinfowler.com/articles/mocksArentStubs.html — курить до просветления.


А головой возле иконы биться не надо?
Привести Фаулера, у которого по жизни большие сложности с формальными определениями и всегда "воды, еще воды" — это разве что с целью замылить любое обсуждение, большое спасибо.

Вот смотри, самое формальное, что у него там есть:

- Stubs provide canned answers to calls made during the test, usually not responding at all to anything outside what's programmed in for the test. Stubs may also record information about calls, such as an email gateway stub that remembers the messages it 'sent', or maybe only how many messages it 'sent'.
Mocks are what we are talking about here: objects pre-programmed with expectations which form a specification of the calls they are expected to receive.


Может ли мок не являться заглушкой даже в этой предложенной терминологии? После ответа на этот вопрос вышеприведённым уже можно подтереться...
Кстати, а как тебе выделенное курсивом? Товарищ явно сочуствует XP и TDD и не в состоянии скрыть этого факта даже в формулировках.

А вообще, странные пошли времена... Вместо кратких формулировок теперь надо давать ссылки на воду? Ты так хочешь чувствовать себя одним из миллионнов лемингов?

Свернув всю статью и убрав очередные его сопли о TDD, Фаулер просто предлагает называть моками класс тестовых объектов в которые встроены ассерты/логирования, работающие во время вызовов методов, а не постфактум. Использовали раньше эти приемы, до выхода мок-фреймворков? — разумеется, ни один более- менее сложный тест без этого не обходился и не обходится. И как нашей русскоязычной терминологии такие тестовые объекты назывались, так и называются заглушками. Так что, когда появится термин с формальным определением, приходи еще раз.

А пока можно лишь сублиммировать преценденты использования термина, что вовсе не сложно. Т.к. термин относительно новый, можно сказать, что только формируется, нужно "читать" его формирователей, а это доки к ср-вам автомокостроения, форумы и статьи по этим ср-вам. Очевидное в том, что эти ср-ва одинаково позволяют строить как moks так и stubs в терминологии Фаулера, причем явно и декларативно отличить одно от другого можно лишь по совокупности и характеру декларируемых ассертов (опять же в терминологии Фаулера ). Так же, наблюдая обсуждения по этой теме в Сети и просматривая множество статей на эту тему, убедился, что всевозможные авторы пользуются термином "мок" вовсе без того характерного отличия на котором настаивает автор по ссылке. Наиболее частое употребление термина мок на сегодня относится к тестовому объекту, построенному автоматически, имеющему бинарную совместимость с мимикрируемым объектом и снабженному возможностью декларативно/полудекларативно задавать поведение и проверки. ВсЁ, остальное — от лукавого, и разговоры в пользу бедных, по крайней в данный момент жизни этого термина.

Я лично могу поставить на то, что ключевым в формулировке останется "автоматически, имеющему совместимость с мимикрируемым ...", а то термин насколько пошел в массы, что рукописные заглушки стали называть рукописными моками, что малость бред. Бред хотя бы потому, что когда заглушки пишут руками (как было раньше), вот этих "характерных" отличий, на которых настаивает Фаулер просто быть не могло, ибо руками — оно и в Африке руками, т.е. можно написать всё, что необходимо — любые сценарии тестирования. А эти "характерности" сегодня идут от возможностей ср-в автоматизации тестирования, которые, в отличие от рукописного подхода, вовсе не безграничны. С другой стороны, перевод на русский "макет/подражание" — весьма неплох, так что возможна замена одного термина другим, но навряд ли одновременное использование в разных смыслах (ибо термин заглушки и так широк — шире не куда).


G>Как провсетление наступит можно выложить сюда реализацию моков на С++


Все замечания относительно реализации автомоков на С++ уже были сделаны здесь: http://www.rsdn.ru/forum/message/3393322.1.aspx
Автор: vdimas
Дата: 18.05.09


Для С++ нет проблем декларативно описать поведение и ассерты мока, есть проблемы с автоматическим построением бинарных заместителей. Могу еще раз упомянуть, что для COM возможно автоматическое построение "заместителей", если сигнатуры методов являются OLE-совместимыми. В остальных случаях, до принятия единого ABI, автоматическое построение заместителей возможно лишь в компайлтайм, либо глубоко завязанное на конкретный компилятор и формат его PDB. Так что, как я уже сказал — возможно, но пока что слишком трудозатратно. И говорил уже, что для С++ есть свои наработки для тестирования, т.к. есть возможности, которых нет у управляемых платформ, и обратно тоже верно. Поэтому никто идиотизмом не занимаются, а используют наиболее подходящие ср-ва для своей платформы.

Как я делаю иногда на С++, когда мне надо "вклиниться" в реальный объект в тестовых/проверочных целях? Пользуюсь тем, что декларация и реализация обычно лежат по разным файлам, реализация разных методов классов тоже может находится по разным cpp-файлам, и собирается это вместе только при линковке. Таким образом, в тестовый бинарник вполне можно частично или полностью прилинковывать тестовую имплементацию классов, вместо основной. Но и это не самая популярная мера, скорее вынужденная, когда тестовый код значителен и сложен. Самый популярный вид тестирования в С++ — это использование в качестве моков не заместителей, а самих реальных объектов, именно! Такая технология доступна из-за препроцессинга и условной компиляции. В нужных местах после каждого чиха может стоять куча проверок, которые работают, например, только в дебаг-конфигурации, но отсутствуют в релизе. Это могут быть проверки или логгирование или и то и другое и т.д. На какой стороне это работает? Что там получается, стабы или моки в терминологии Фаулера? Да на любой стороне это работает, на той стороне, где ТРЕБУЕТСЯ проверка. Как насчет изолированности при тестах? То бишь как насчет выключения лишнего "тяжелого" кода, не являющегося целевым для тестирования? Опять же, с помощью условной компиляции делается изоляция любого уровня.

Удобнее такой подход, в сравнении с подходом управляемых платформ или скриптовых языков? Фиг там можно сказать однозначно, можно найти кучу как плюсов, так и минусов и там и там, поэтому сами по себе подобные споры — чистейшей воды холивар. Мне, например, импонирует, что простые тесты можно писать прямо одновременно с кодом в С++, не размазывая функциональность. К тому же, подобные тесты прямо в строках кода являются своего рода документацией, задающей граничные или какие другие условия/ограничения. В общем, тема серьезная, и не на том уровне это надо обсуждать, какой навязывает criosray.
Re[24]: Работа - с чего начать: С++ или С#?
От: BulatZiganshin  
Дата: 16.03.09 20: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)
Люди, я люблю вас! Будьте бдительны!!!
Re[17]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.04.09 21: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-го года. Но, насколько мне известно до сих пор он так и не принят.
Так что ты просто выдаешь желаемое за действительное. На твоем месте я бы почитал об альтернативных решениях и перестал так бодро гнать пургу.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[28]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 29.04.09 08: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[15]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 16.03.09 11:00
Оценка: 1 (1) +3
Здравствуйте, gandjustas, Вы писали:

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


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

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

Codebase — это конечно да. Но 10 лет — это достаточный срок, чтобы переписать весь существующий codebase если это переписываение действительно даст преимущества. Я думаю, дело в другом, с одной стороны, управляемые языки не дают того рекламированного преимущества для действительно больших и сложных проектов. С другой стороны, они дают сильную зависимость от поставщика рантайма плюс немалую вероятность в один прекрасный момент упереться в какое-нибудь ограничение этого самого рантайма с неясной перспективой что делать дальше.
Re[24]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 24.04.09 19:36
Оценка: 1 (1) +1 :))
Здравствуйте, gandjustas, Вы писали:

G>Если C++ так хорош, то почему на нем не пишут тысячи бизнес-систем?


Сам пересчитывал?

G>Почему самые высоконагруженные сайты написаны не на С++?


Все переобмерил?

P.S.: Но это всё не аргументы. По устоявшейся RSDN-овской традиции Настоящие Весомые Аргументы Против C++ должны содержать слова из такого ряда: фобия, замшелость, стереотип, мемори лик, проход по памяти, миллионы программистов, википедия, тузик, тряпка, рвать, мозг, затычка, косность. Можно даже шпаргалку составить.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[36]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 04.05.09 14:46
Оценка: 1 (1) +2 -1
Вдогонку,
У меня был знакомый, который на C++ осознанно писал вот так — for( int i = 0; i < array.GetCount(); i++ ), типа компилятор должен сам такие ситуации разруливать. Ну и в других местах он поступал аналогично. Потом он уволился и мне пришлось в его коде разбираться и оптимизировать. Так вот без всяких алгоритмических штучек, просто вычищением лишних уровней косвенности и выпрямления интерфейсов, мне удалось ускорить его код в несколько раз.

Так что пессимизация кода в малом скорее всего значит и пессимизацию в большом. Это мое твердое убеждение.
Re[23]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 18.05.09 14:15
Оценка: 1 (1) +2 :)
Здравствуйте, vdimas, Вы писали:

V>[чушь всякая вырезана цензурой]


V>Ты еще забыл кодеки, мультимедиа, реалтайм протоколы и т.д. И еще забыл, что последние года 4 тактовая частота процов практически не растет, а обсуждаемого скачка оптимизации JIT-а при переходе на 3.0 версию не было ВООБЩЕ


Пример классического ламеризма. Может стоило бы для начала что-то узнать о предмете обсуждения? Например, что версия CLR все еще 2.0.х, а не 3.0
Re: Работа - с чего начать: С++ или С#?
От: minorlogic Украина  
Дата: 15.03.09 17:09
Оценка: +4
Я бы выбрал прикладную область которой хочется заниматься , а потом бы искал подходящий инструмент.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re: Работа - с чего начать: С++ или С#?
От: _Vasilyev Ниоткуда  
Дата: 15.03.09 17:35
Оценка: +2 :))
Здравствуйте, niellune, Вы писали:

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

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

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

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

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

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

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

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

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

По C++ : Не слушайте тех, кто пытается его похоронить, глупости это все субъективные. Съездите на конференцию "Параллельные вычисления"(можете заглянуть на parallel.ru), там мужики и не знают наверное, что есть языки другие, кроме C++.
Re[9]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 09: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[10]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 16.03.09 09: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[13]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 16.03.09 10:23
Оценка: +4
Здравствуйте, hattab, Вы писали:

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


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

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

Соответственно, автору топика, выбор зависит от того, чем хотелось бы заниматься. Если "хардкорным" программированием (коробочные продукты, игры, наукоемкие вещи) — то C++. Если бизнес программированием (веб, базы данных и т.п.) — то C#.
Re[27]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 16.03.09 17:42
Оценка: +2 -2
Здравствуйте, gandjustas, Вы писали:

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

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

NBN>>Я не понял — ты хочешь длинной померяться? Так сразу и говори

G>Не хочу меряться, хочу показать что на С++ далеко не все можно сделать с трудозатратами сравнимыми с управляемым языком.
Ага, можно сделать очень клёвую, но никому не нужную феньку (не удовлетворяет клиента) — это да
Нужно разобрать угил.
Re[35]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.03.09 21:52
Оценка: -3 :)
Здравствуйте, NikeByNike, Вы писали:

G>>>>Кстати Linq у вас уже появился?

NBN>>>Он довольно тормозявый.
G>>Я уже говорил что performance-critical код можно писать на C или юзать unsafe (почти тот же С).
NBN>Вот это — настоящее извращение, ка я уже говорил — показатель невладения С++, а следовательно бессмыслености спора.

NBN>>>Думаю, что на шарпе было бы невозможно обеспечить даже близкое качество)

G>>"Думаю" — слабый аргумент.
NBN>Достаточный. Это называется экспертная оценка

Ваши высказывания отлично иллюстрирует следующая картинка:

ЗЫ. Мопед не мой, привет QBitу
Re[26]: Работа - с чего начать: С++ или С#?
От: Игoрь Украина  
Дата: 18.03.09 22: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]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 19.03.09 08:31
Оценка: +3 -1
Здравствуйте, gandjustas, Вы писали:

E>>Скажем на С++ можно делать так
Автор: Erop
Дата: 27.02.07
...

G>В нормальных языках такого не нужно делать в принципе.

Что значит "не нужно"?
В С++ тоже не нужно, пока в каком-то месте не понадобится чтобы было реально быстро...
И вот тогда в том самом месте в С++ так сделать можно.
А в "нормальных" языках можно рассказать, что GC -- это уже верх совершенства, а память стоит дёшево...
А что можно сделать в тех самых "нормальных"?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[48]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 19: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[55]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 20.03.09 12: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[61]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 20.03.09 14: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[28]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 15:10
Оценка: :))) :)
Здравствуйте, esil, Вы писали:

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


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


G>>>Думаете нельзя в C# на стеке данные размещать?

MK>>Думаю конкретно esil имеет ввиду, что нельзя разместить в стеке произвольные данные.
MK>>Массивы, например, туда не засунуть, ибо class

MK>>А вот что имел ввиду minorlogic я, чесс говоря, тоже не понял.

MK>>Но эт не страшно

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

Как будут работать виртуальные методы при размещении объектов на стеке?
Re[56]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 20.03.09 15:14
Оценка: +2 -1 :)
Здравствуйте, Erop, Вы писали:

G>>Кстати, как на делфи с задачкой про все строки файла...

E>Если вдруг ты сможешь понятно описать чего тебе надобно, старче, то она очевидно решается на ЛЮБОМ АЛГОРИТМИЧЕСКОМ ЯЗЫКЕ, даже на FORTRAN И basic!
Ты не понял, это у шарпников новый фетиш такой: острое желание показать как можно выпендриться на шарпе. Синтаксический оверхедЪ у них там меньше.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[69]: ХиндиС -- мощнее любого компа!!! ;)))
От: Erop Россия  
Дата: 20.03.09 20:10
Оценка: +2 :))
Здравствуйте, criosray, Вы писали:

E>>Считаешь, что выделенное -- это "тяжёлый клиент".

C>Да, выделенное это тяжелый интерфейс.
Ну это ты продолжаешь "делать не так"... , то есть упорствовать в заблуждениях...
С какой поры построить график или показать диалог стало "тяжёлым интерфейсом"? А какой интерфейс, тогда, лёгкий?
Тебя не смущает, что показать график, таблицу, форму/диалог и т. п. комп, вроде ZX Spectrum мог МГНОВЕННО? То есть человек не мог заметить время в течении которого этот интерфейс работал? Тебе не кажется, что мощь компов с тех пор настолько возросла, что говорить о том, что "диалоговое окно, показ таблички, списка и графика" -- это "тяжёлый интерфейс" -- СМЕШНО.
Тяжёлый интерфейс -- это 3D отрисовка в кваке!

E>>Кстати, а данные вы из DB берёте, я надеюсь?

C>Из БД, вестимо.
Ну вот видишь, сделать запрос в БД, перелопатить и подготовить данные -- фигня вопрос, в в диалоге их показать -- тяжёлый интерфейс?..

Воистину!!! ХиндиС -- мощнее любого компа!!! В смысле как бы не был мощен ваш комп, ХиндиС тормозит ещё мощнее!!!
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[53]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 21.03.09 00:03
Оценка: +2 -1 :)
Здравствуйте, gandjustas, Вы писали:

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

G>Причем чаще всего прчиной оказывается применение неподходчщего алогоритма. Очень редко приходится нарываться на ситуацию когда низкая производительность вызвана особенностями платформы.

IMHO, такая ситуация, когда для ускорения надо менять алгоритм, часто говорит о том, что проектировали плохо.
Часто можно сразу выбирать оптимальный алгоритм. Не понятно зачем пессимизировать-то? В большинстве задач оптимальные алгоритмы давно уже известны...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[67]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 21.03.09 07:42
Оценка: +1 -2 :)
Здравствуйте, Sinclair, Вы писали:

S>О да. Анализатор логов — это конечно гораздо промышленнее сайта с дневной посещаемостью в сотню тысяч хитов.


S>На всякий случай напомню, что на каждую строчку лога, которую читает анализатор, этот самый сайт успевает авторизовать пользователя, сбегать в базу, раскрасить синтаксис, выдать HTML. И всё это "с GC и аллокацией на каждый чих", и стримами, и регекспами.

S>Но нет, конечно же авторы анализаторов логов считают себя гораздо более главными. Удачи.
авторизация — доступ в нативную rdbms, сбегать в базу — аналогично, раскрасить синтаксис — если ты говоришь об уровне расскраски как на рсдне то ето даже не смешно , выдать хтмл — нативный IIS.
где тут твой C#? позвать то, взять ответ, позвать другое и дать ему ответ предыдущего? клей, сопли, грусть. Ты сам-то в какой области на C# пишешь? а то я смотрю тут каждый второй на C# пишет только дальше сайтов и ентерпрайза никто своё рыльце не высовывает, потому что атата.
People write code, programming languages don't.
Re[54]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 22.03.09 18:47
Оценка: -2 :))
Здравствуйте, esil, Вы писали:

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


E>>>Лично мне комфортно от того, что можно пробовать строить различные архитекутры, не думая изначально о том, сколько каких мелких объектов где выделяется, потому что в случае чего можно расчехлить тяжёлую артиллерию.

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

E>Это не правда. Если бы GC позволял не думать о выделении и освобождении памяти, то какой смысл бы был сравнивать производительность GC и стандартного аллокатора С++? Или эти сравнения в топике были бессмысленными?

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

E>Как можно не думать о выделении и освобождении объектов, если из-за этого может оказаться очень низкая производительность приложения?

Спокойно, и произовдительность нормальная будет.

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

G>>Причем чаще всего прчиной оказывается применение неподходчщего алогоритма. Очень редко приходится нарываться на ситуацию когда низкая производительность вызвана особенностями платформы.

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

Я не об объектах говорил, а о производительности вообще.

E>А если я пишу программу на С++, то выбор доступных декомпозиций расширяется. Разве я не прав?

Неправ. Слабые выразительне способности C++ не позволяют мере проводить объектую декомпозицию так как хочется.
Re[4]: Работа - с чего начать: С++ или С#?
От: ppp222  
Дата: 17.04.09 03:34
Оценка: -1 :)))
Здравствуйте, Mamut, Вы писали:

p>> Что еще плохо в C#, это то, что все дотнетчики зависимы от воли левой пятки MS. MS будет выдумывать новые технологии каждые 5 лет. Соответственно участь дотнетчика — постоянное бессмысленное переучивание, освоение новых, перманентно новых технологий для решения одних и тех же задач.


M>Фигня, что дотнету уже 8 лет и он пока никуда не собирается исчезать?


За эти 8 лет вышло три различных дотнета: 1, 2 и 3. Между вторым и третим нет ничего общего, поменялось буквально все. Между первым и вторым различий не так много, но они тоже были. Предполагаю, что 4 дотнет будет доделкой третьего с половиной, после чего выйдет 5 дотнет, который будет кардинально отличаться от третьего, то есть будут преданы анафеме wpf, linq, wcf и так далее. 6 дотнет будет доделкой 5 с половиной, после чего выйдет 7 дотнет, которому сам бог велел кардинально отличаться от пятого дотнета. Предпологаю, что 7 дотнет чем — то будет напоминать первый...
Re[23]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 25.04.09 19: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> с возможностью биндить как аргументы, так и владельцев, так и чуваков


А можноо объяснить на пальцах, что здесь происходит? По-моему, тут написана какая-то реально нечитаемая фигня, в которой сам автор не разберется уже через полгода
avalon 1.0b rev 146


dmitriid.comGitHubLinkedIn
Re[19]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 27.04.09 08:52
Оценка: +1 -3
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Как ты правильно заметил, Тьюринг-полные языки, в общем, эквивалентны по своим возможностям в смысле выражения абстракций. Всё дело в итоговой цене на билет. Я не сомневаюсь, что абстракцию автоматического управления ресурсами вроде 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[41]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.05.09 11:45
Оценка: :))) :)
Здравствуйте, CreatorCray, Вы писали:

VD>>Для особо одаренных повторяю. Нет никакого С++0х. С++0х — это рабочее название черновика.

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

Есть он только в твоем воображении. То что кто-то использует черти что созданное на основе черновиков — это их личная инициатива. Не более того.

VD>>А в "кампилирах" есть еще свойства и поддержка COM. И что с того?

CC>Это к терапевту.

Умора, клиенты психиатров отправляют к терапевтам.
Ладно, разговоры в подобном ключе меня не интересуют.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[73]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 07.05.09 20:16
Оценка: +3 :)
Здравствуйте, gandjustas, Вы писали:

G>>>А с асинхронным вводом-выводом работал?

COF>>А причем тут это?
G>При том.
G>Асинхронный ввод-вывод ломает "линейную" структуры программы, это очень сильно сказывается на том как управлять ресурсами.

Ну и? Да я работал с асинхронным вводом-выводом, правда на C++, где он ничего не ломает. Странно...
Re[74]: Брависсимо!
От: Lloyd Россия  
Дата: 08.05.09 20:13
Оценка: :))) :)
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Может быть. Языков без спецификаций не бывает.


Из чего с необходимостью следует, что Nemerle не язык.
Re[37]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.09 13:55
Оценка: +1 -3
Здравствуйте, FR, Вы писали:

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


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

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


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

FR>Шарп и С++ по трудоемкости разработки в одном классе.


Это чушь. Трудоемкость на С++ выше очень значительно. Разница не такая огромная как в сравнении С++ и ассемблера, но тоже очень велика. А если учесть, что есть языки сильно мощнее C#, то она уже становится очень значительной. При этом с точки зрения скорости, для большинства задач разница как раз не велика (если вообще есть).

Посему если у тебя много бабла (проект высоко рентабельный), то С++ может быть подходящим, так как увеличение трудоемкости окупается конкретными преимуществами — меньшими требованиями к ресурсам компьютера, а значит расширением базы аудитории. Если же проект низкотиражный или вообще штучный, то разработка на С++ — это чистейшей воды идиотизм и бездарная трата ресурсов.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 19.05.09 14:05
Оценка: :))) :)
Здравствуйте, VladD2, Вы писали:

VD>Да, давно пора. Слив, с твоей стороны, уже произошел. Что еще обсуждать?


По поводу сливов...

Их где-то меняют на деньги, или это просто трофей на стену в туалете?
я просто не ф теме.
Re[39]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 19.05.09 14:18
Оценка: -2 :))
Здравствуйте, vdimas, Вы писали:


C>>Элементарно средствами RhinoMocks.


V>Во-первых, мне гораздо больше по душе TypeMock, по сравнению с которым рино курит, во вторых даже на нем это не элементарно.


Раньше у меня были сомнения, что Вы возможно имеете представление хоть примерно о сути разговора... Увидев ЭТО, понял, что я сильно ошибался.


Всего хорошего, г-н воинствующий ламер.
Re[42]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 19.05.09 15:04
Оценка: +2 -1 :)
Здравствуйте, VladD2, Вы писали:

VD>Чушь — твое ИМХО.

Твоё ИМХО бред.

VD>От уровня языка зависят и проектные решения

Чушь.

VD>и объем кода который требуется написать

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

VD>отладить

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

VD>и документировать.

Объём документации так же не зависит, если конечно какой-то не слишком грамотный ПМ не заставляет документировать собственно исполняемый код.
Объём интерфейсов и функциональности всёравно будут одинаковым и требовать схожего времени на документирование.
Нужно разобрать угил.
Re[34]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 21.05.09 11:16
Оценка: -2 :))
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Ты с топика-то не съезжай. Я тебе тут давеча вопрос про тестирование задал. Ответ будет?


Я даю ответы только тем, кто хоть что-то понимает в теме. В Вашем случае не вижу смысла тратить время и силы, т.к. все-равно канут в лету.
Re[35]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 21.05.09 12:42
Оценка: +2 :))
Здравствуйте, criosray, Вы писали:

ГВ>>Ты с топика-то не съезжай. Я тебе тут давеча вопрос про тестирование задал. Ответ будет?

C>Я даю ответы только тем, кто хоть что-то понимает в теме. В Вашем случае не вижу смысла тратить время и силы, т.к. все-равно канут в лету.

Шикарно!
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[12]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.05.09 19:05
Оценка: -3 :)
Здравствуйте, Anton Batenev, Вы писали:

AB>Судя по хамско-истеричному тону твоего сообщения и отсутсвию комментариев по очевидным тезисам, прилетело тебе кучно.


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

А что до истерик. Гы. Не умеешь ты диагнозы по почерку выставлять. Мне от твоих понтов ни тепло, ни холодно.

VD>> Ты слил спор и теперь бредишь пытаясь перевести разговор на что-то не относящееся к делу.


AB>Ты спрашивал, как показать мастер-класс — я тебе ответил. При чем, подобрал задачу как раз под тебя. Или я был слишком хорошего мнения?


Да причем тут мастер-класс? Я о другом говорил. Ты банально обосрался в споре и пытаться свести все к флэйму, перевести тему, перейти на личности и т.п. Ну, так тут таких как ты пруд пруди и на такие примитивные приемы я не поддаюсь.

VD>> При этом даже в теме на которую ты пытаешься перескочить ты не понимаешь ровным счетом ничего.


AB>Ты очень хочешь, но стесняешься мне поведать историю про rocket science сайта RSDN типа "каталог статей" + "форум" с суточным количеством хитов в районе 100-200 тыс и временем жизни кэша в районе минуты? Чтож, удиви меня.


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

VD>> В общем, сплошное ламерство и не умелая демагогия с твоей стороны. Постыдился бы.


AB>Мне-то почему за то, к чему я не имею никакого отношения, должно быть стыдно?


Тебе должно быть стыдно за свое ламерство и ту дерьмовую демагогию что ты тут разводишь.
В прочем, понятие совести для таких как ты вряд ли применимо, а значит разговоры о совести бессмысленны.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[34]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 20.03.09 23:04
Оценка: 5 (2) +1
Здравствуйте, esil, Вы писали:

E>А тут случаем баг не закрался?

E>CreateBySimilarityCasesensitive возвращает временный объект, на который потом берётся ссылка.
Нет, временный объект просуществует до конца видимости ссылки. С указателем такая фишка не сработает.
Нужно разобрать угил.
Re[33]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 19.05.09 09:26
Оценка: 5 (3)
Здравствуйте, IID, Вы писали:

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


S>>Ты просил пример, где программа на C++ сольет в разы. Я привел. Пример, где сольет дотнет я не просил.


IID>Ссылку с C# кодом подтрудись привести, в ворохе твоих сообщений сходу не нашёл. И учти, я не буду писать абсолютно идентичный вариант, если используется кодогенерация. Мне моё время дорого. Раз этого не хочешь сделать ты — я сам зафиксирую один (произвольный) вариант исполнения алгоритма. Не факт что он будет оптимальным для тебя.

Собрался доказывать что интерпретируемый вариант быстрее компилированного? Маньяк!
Ссылки на исходники небыло.

Вобщем так:
Примерно такого рода DSL, придуманный под string.Replace, чтобы без парсинга
function Сфера { return x*x + y*y + z*z; }
function XPlaneFunc { return x;}
function YPlaneFunc { return y;}
function ZZZFunc
{
    double xmy = x - y; return xmy - Math.Round(xmy, 1);
}
function Спираль
{
    double xk=x*20; double a=0.2; double b=1.5;
    double y1=y*b-a*Math.Sin(xk);
    double z1=z*b-a*Math.Cos(xk);
    return y1*y1 + z1*z1;
}
body Голова
{
    return XPlaneFunc(p) < 0.0 && Сфера(p) < 1.0 && !Шлиц;
}
body Spiral
{
    return  XPlaneFunc(p) > 0.0 && XPlaneFunc(p) < 1.75 && Math.Abs(Спираль(p)) < 0.5;
}
body Шлиц
{
    return XPlaneFunc(p) < -0.4 && YPlaneFunc(p) < 0.1 && YPlaneFunc(p) > -0.1;
}
body Strokes
{
    return (Math.Abs(0.5 - XPlaneFunc(p)) < 0.02
     || (XPlaneFunc(p) > 0.5 && Math.Abs(ZZZFunc(p)) < 0.005))
    && !Spiral && !Голова;
}
body All
{
    return Голова || Spiral || Strokes || Wall;
}
body Wall
{
    return XPlaneFunc(p) > 0.5 && !Strokes && !Spiral;
}
colors GetColor
{
    if(Голова) return Color.Blue;
    if(Spiral)return Color.Red;
    if(Strokes)return Color.Black;
    if(Wall)return Color.Gray;
    return Color.Transparent;
}


Далее рисуем на растре плоскость Z = 0 в квадрате -1<x<2; -1.5<y<1.5
Должно получиться что-то типа болта, вкрученного в стену.

Непременное условие — возможность изменения описания поверхностей в рантайме.

Примерная скорость реализации на шарпе 5.9 млн запросов по цвету в секунду на одном ядре.
На днях выложу картинку в блоге.

Учти, твое время я оплачивать не буду!

S>>Доказывать что md5 на С будет немного быстрее C# мне не надо.


IID>НЕМНОГО ?!! Ты уверен что это действительно будет НЕМНОГО? (кстати, что такое НЕМНОГО? пара процентов ? или, может быть, разы ?)

Уверен, что разница будет не такая, как между выполнением кода и интерпретацией
Re[61]: Поздравляю :D
От: hattab  
Дата: 23.03.09 11: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[30]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 19.05.09 12:02
Оценка: 3 (1) +2
Здравствуйте, gandjustas, Вы писали:

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


Я уже не первый раз вижу это мнение, но не могу понять мотивы, может объяснишь? Наилучшие по оптимизации компиляторы — это С++, и они умеют коомпилировать С-код. Вот смысл мне не пользоваться возможностями более высокоуровневого языка, если у мня все-равно будет использован компилятор, который прекрасно компилит оба языка. Смотри: в чистом С ссылочный тип не строго типизирован, нет инлайна, нет инициализации по месту, недоступна ОО-декомпозиция (а в этом миксере участвует около десятка классов, и кое-какая шаблонность есть, правда без претензий на МП) и т.д и т.п. Поэтому поинт не понятен совершенно, по мне С++ в стиле "С с классами" все равно гораздо мощнее С. Я бы советовал ровно наоборот, там где можно, вместо С использовать С++.

G>Для более высоких абстракций берем более подходящие языки.


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


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


Фиг его знает, что будет. При количестве ядер, больше 16/32/64, сам факт наличия GPU будет под вопросом. В любом случае, обсуждать сегодня то, что может быть завтра, в контексте сделанной вчера задачи — юморно.
Re[26]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 18.03.09 14: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>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[48]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 20.03.09 09: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[30]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 29.04.09 17: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[3]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 15.03.09 16:12
Оценка: 1 (1) +2
Здравствуйте, MxKazan, Вы писали:

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

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

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

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


Сначала пойди на С#, а потом даже не думай переходить на С++.
Русский военный корабль идёт ко дну!
Re[45]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 19.03.09 01: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[49]: Работа - с чего начать: С++ или С#?
От: esil  
Дата: 20.03.09 22: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[25]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 28.04.09 21:27
Оценка: 1 (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[2]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 14.05.09 09:52
Оценка: 1 (1) +1 :)
Здравствуйте, Farsight, Вы писали:

F>Достаточно провокационный вопрос для этого форума, Вы не находите?


Для этого - нормальный.
Re[42]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 19.05.09 17:22
Оценка: 1 (1) +1 :)
Здравствуйте, criosray, Вы писали:

ГВ>>Где сказано, что мок обязательно изолирует тестируемый объект от окружающих?

C>Даже и не знаю как Вам объяснить, что 2+2=4.

Никак, потому что в упомянутом мной фрагменте из фаулеровской писанины ни о каких изоляциях речи не было.

C>Даю наводящий вопрос: С какой целью создаются "objects pre-programmed with expectations which form a specification of the calls they are expected to receive"?


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

C>Можете мне не отвечать. Я ответ знаю. Ответьте себе. Если сможете, то поймете о чем идет речь. А не сможете — ну да и Бог с Вами.


Ну и как, смог?

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


ГВ>>Ну, если сводить "удобство тестирования" к автоматической генерации пустых объектов — соглашусь. А если не сводить, то тут очень сильно бабка надвое сказала.

C>Тестируются не пустые объекты, а поведение объектов в фиксированных (изолированных) условиях.

"Пустые объекты" в смысле "тестовое окружение из пустых объектов". Ну или вырожденные до шлюзов к стабам (фейкам) и другим объектам окружения.

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

C>>>И что тут сложного?

ГВ>>А я и не говорю, что это сложно. Я о сопоставлении сложности теста и тестируемого кода.

C>И? Не вижу к чему Вы клоните.

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

C>>> Элементраный тест (в условиях дотнет) с условно установленными моками.


ГВ>>Мммм... Дотнет его сам сгенерирует? Полностью? А за пивом он сгоняет?

C>Полностью. Сгенерирует. Не вижу причину сарказма.

Что он сгенерирует и на основе чего? Как сгенерировать пустой мок — понятно (пробежались по списку внешних вызовов и ссылок, и автоматом получили "пустой мок"). Вопрос — как сгенерировать наполнение этого мока, представляющее собой ту самую спецификацию, которую мок ожидает.

ГВ>>[...]


ГВ>>Даже если говорить о приведённом примере, то где здесь тестирование сети/жёсткого диска/...? Тестируется соответствие реального и предполагаемого протокола работы (form a specification, итить!). Или ты думаешь, что под sendMessage имеется в виду send в сокет?


C>Если не предполагается, то RhinoMocks прекрасно справится с мокингом в этом случае. В чем проблема?


Все нужные Expect(sendMessage ...) RhinoMocks сам напишет?

ГВ>>А потом, модульным тестированием называется тестирование модулей. Что именно мы так называем — зависит от структуры программы. Запросто может быть тестирование модуля по имени "модуль сетевого интерфейса", который запросто может предполагать одновременный запуск тестов на нескольких машинах и в то же время другой модульный тест может проверять одну-единственную функцию.

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

Интересно, откуда уверенность в оценке моих реальных знаний и опыта? Считай, что мне это просто любопытно.

C>Почитайте Мартина Фоулера, почитайте Бекка... Да хотя бы, потратьте 10 минут да прочтите http://en.wikipedia.org/wiki/Unit_testing


Хорошо. Википедия ближе всего для цитирования:

Модульное тестирование (англ. unit testing) — процесс в программировании, позволяющий проверить на корректность отдельные модули исходного кода программы. Идея состоит в том, чтобы писать тесты для каждой нетривиальной функции или метода.(Глупость в википедии никогда не надо искать долго, достаточно двух предложений. — прим. Г.В.) Это позволяет достаточно быстро проверить, не привело ли очередное изменение кода к регрессии, то есть к появлению ошибок в уже написанных и оттестированных местах программы, а также облегчает обнаружение и устранение таких ошибок.


Собственно, вот здесь даны несколько более корректные объяснения феномену модульного тестирования. Почитай на досуге.

ГВ>>Если TDD предполагает, что это неправильное употребление термина "модульное тестирование", то тем хуже для самого TDD.


C>Тем хуже для Вас, а не для TDD.


Да нет, именно что для TDD. Жонглирование и произвольная реинтерпретация терминов ещё никого до добра не доводила.

C>>>Да, тестируемые участки кода должны быть простыми. [...]

ГВ>>А если пользователь поставил задачу, которая не имеет простого решения?
C>Знакомы с понятием "декомпозиция"?

Я надеюсь, тебе не придёт в голову отсылать меня в википедию по этому поводу?

ГВ>>Значит, я не смогу написать простой тест и не смогу руководствоваться современными правилами программирования?

C>Сможете.

Группа маленьких модулей логически объединена в общий модуль, с которым программа работает через некоторый интерфейс. Этот сборный модуль тестируется отдельным набором тестов... Как называется это тестирование?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[36]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 21.05.09 07:14
Оценка: 1 (1) +2
Здравствуйте, gandjustas, Вы писали:

G>>>Кроме того, повышается переносимость кода. При удачном стечении обстоятельств можно взять код на С и запустить его на видеокарте с помощью CUDA.

CC>>Снимай уже розовые очки.
CC>>На CUDA перенести удается только хорошо параллелящиеся алгоритмы. Все остальное превращается в УГ.
G>Читай внимательнее выделенное.
Ты в выделенном забыл написать слово "очень" после "при".
Далеко не все алгоритмы ложатся на CUDA. Далеко не все объемы данных выгоднее считать на CUDA. Пока еще слишком много "но" в этой технологии.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[4]: Работа - с чего начать: С++ или С#?
От: Dog  
Дата: 15.03.09 13: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[7]: Работа - с чего начать: С++ или С#?
От: Roman Odaisky Украина  
Дата: 15.03.09 18:17
Оценка: :)))
Здравствуйте, MxKazan, Вы писали:

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

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

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

>:->
До последнего не верил в пирамиду Лебедева.
Re[10]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 15.03.09 18:36
Оценка: -1 :))
Здравствуйте, Геннадий Васильев, Вы писали:

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

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

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


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

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

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


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

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

И даже несмотря на все рассказы о "стабильности" С++ (хотя это уже признак деградации), постоянно выходят новые версии библиотек типа Qt, Boost и прочих, а тут еще следующий стандарт C++ на подходе.
Re[5]: Работа - с чего начать: С++ или С#?
От: StandAlone  
Дата: 15.03.09 21:18
Оценка: :)))
Здравствуйте, NikeByNike, Вы писали:

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

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

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

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

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

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

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


Ну, если xML — это путь кроссплатформенных GUI, то чем дальше C++/Qt от них, тем оно лучше.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[7]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 09:12
Оценка: :)))
Здравствуйте, NikeByNike, Вы писали:

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

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

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

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

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

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

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

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

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

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

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


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

в языках без gc расход памяти меньше в краткосрочном плане. а вот когда память выделяется, возвращается, снова выделяется — ты получаешь фрагментированную память и ничего с ней не поделаешь. поэтому для таких программ GC выгодней — есть хоть гарантии что расход памяти будет не более чем в три раза выше, нежели реальное использование. в c++ гарантий никаких
Люди, я люблю вас! Будьте бдительны!!!
Re[21]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 16.03.09 16:42
Оценка: +3
Здравствуйте, gandjustas, Вы писали:

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

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

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

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


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


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


Язык C++ не обладает возможностью описать алгоритм на высоком уровне.
Если не верите, то попробуйте написать алгоритм решения задачи: "вывести на экран все строки текстового файла, в которых более трех слов, отсортированные по алфавиту".
Причем это долно быть не наколеночное решение, а production-quality код, в котором можно без особых услий убрать условие, или сделать вывод только уникальных строк, или вывод строк через одну.
Re[24]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 17:16
Оценка: :)))
Здравствуйте, NikeByNike, Вы писали:

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


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


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

Я вот тут на днях написал на C# библиотеку для работы с конечными автоматами. Она генерирует в рантайме код автомата по описанию, а потом использует его.
На C++ такое получится?
Re[20]: Работа - с чего начать: С++ или С#?
От: minorlogic Украина  
Дата: 16.03.09 19:06
Оценка: +2 -1
Здравствуйте, gandjustas, Вы писали:

G>Такая ситуация существует и на практике. Множественные операции выделения-освобождения памяти происходят гораздо бытсрее в коде на .NET, чем в коде на C++.


Большая часть "выделения-освобождения памяти" на С++ не затрачивает никаких ресурсов, как может быть быстрее ?
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[27]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 16.03.09 22:33
Оценка: +2 -1
Здравствуйте, gandjustas, Вы писали:

H>>Это слишком просто Пул это блок определенного размера, в котором выделение памяти происходит так же порциями определенного размера: 12, 20, 28, 36, 44 (шаг меняется с увеличением размеров на которые ориентирован пул), есть еще и отдельные пулы для средних и крупных блоков. В твоем примере будут выделяться блоки из первого пула по 12 байт, и ни какой фрагментации. Эффективность использования пулов можно контролировать тем самым трекингом, и в случае необходимости внести коррективы в алгоритм. Надо заметить, что лично мне ни разу не приходилось затачивать алгоритмы под работу менеджера памяти.


G>Только общее увеличение потребления памяти получим.

G>А кто-то еще ругается что .NET много памяти жрет.

Конечно получим, куда же мы денемся. Только оверхед сильно меньше, чем у .Net . Это я про общий случай, и по реальным приложениям это видно.
Re[28]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 17.03.09 09:53
Оценка: +1 :))
Здравствуйте, NikeByNike, Вы писали:

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

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

ЗЫ: Щас конечно вылезет кто нить из святой кучки апологетов и начнет кричать что у языка Х возможности безграничны, а ограничения несущественны.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[24]: Работа - с чего начать: С++ или С#?
От: Игoрь Украина  
Дата: 18.03.09 13: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]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.03.09 13: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[26]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 18.03.09 17:18
Оценка: +3
Здравствуйте, gandjustas, Вы писали:

И>>c) на мелких объектах свет клином не сошелся — можно и без них обойтись в критичной к скорости части;

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

Такое предложение заставляет заподозрить недостаточное владение С++.
Нужно разобрать угил.
Re[42]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 18.03.09 23: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[37]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 19.03.09 08:34
Оценка: +1 -1 :)
Здравствуйте, gandjustas, Вы писали:

G>Посмотрел то что я писал, для программы показатель COMMITED памяти редко переваливает за 300 метров, это очень много?

От программы зависит. Для тачки с 512 Мб на борту это больше половины доступного RAM...
Так что, если прога -- это часы, например, то привет...

Но если проге реально нужно МНОГО памяти, то всё ещё хуже. Особенно если её надо много, но небольшими блоками. Вот в моих С++ прогах часто заканчивается адресное пространство 32-й винды, например. И всякие прототипы на С# показывают радикально худшую производительность/эффективность по памяти
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[21]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 19.03.09 11:36
Оценка: +3
Здравствуйте, gandjustas, Вы писали:

G>Да, в C++ надо думать о том когда и как выдеоять и освобожать память.

Нет, это нужно в С.
Ну или в С++ если программист им не владеет.

G>Обычно ручная возьня с ресурсами очень сильно увеличивает время разработки программ. Такую возьню могут позволить себе только очень крупные фирмы.

Не очень сильно.
Нужно разобрать угил.
Re[2]: Работа - с чего начать: С++ или С#?
От: ambel-vlad Беларусь  
Дата: 19.03.09 14:34
Оценка: +2 :)
Hi gandjustas

Начал читать это
G>2)Платформа .NET, на которой работает C# — это не только десктопные программы,

И сразу вспомнил:

Кролики — это не только ценный мех ...

Без обид. Я пишу не имея камня за пазухой. Просто само и сразу же всплыло в голове.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[36]: Кажется я начинаю понимать... ;)
От: Erop Россия  
Дата: 19.03.09 19:06
Оценка: +1 :))
Здравствуйте, gandjustas, Вы писали:

G>Незнаю во что у тебя меню упирается, только что проверил — все летает.

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

Ганджустас! (И как я раньше тайну ника-то не просёк!!!) Будь человеком, отсыпь кораблик?..
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[50]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 09: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[49]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 20.03.09 11: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[52]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 11:58
Оценка: -1 :))
Здравствуйте, Хвост, Вы писали:

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


G>>Невопрос


Х>
Х>static unsafe void Main(string[] args)
Х>


Х>ого! тебе осталось сделать совсем небольшой шаг до С++, решайся!

Зачем? Для запредельного перфоманса есть С, для надежного и красивого кода есть C#, F#.
А С++ в этом уравнении места нет.

Х>P.S. ну и что ты со своими байтами будешь делать? а как насчёт того чтобы классы на стеке инстанцировать?

Если уж очень надо стеке, то воспользуюсь структурами.
Re[52]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 20.03.09 12:07
Оценка: +2 -1
Здравствуйте, 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]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 12:42
Оценка: -1 :))
Здравствуйте, hattab, Вы писали:

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


H>>> New(Arr);

H>>> Dispose(Arr);

H>>>Pentium M 1.7GHz. Память PC2700. Время: 67ms.


C>>Если компилятор не дурак, то он вообще не станет выделять память по пусту, раз Вы ее не используете и пустой цикл тоже не станет крутить по чем зря.


C>>Впрочем, это ж Делфи.


H>Вай-вай, говнодельфи укопал мегашарпа... Смотри не лопни, от злости


Кстати, как на делфи с задачкой про все строки файла...
Re[59]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 20.03.09 13:52
Оценка: +1 :))
Здравствуйте, gandjustas, Вы писали:

Х>>Так вот, в С++ в стек можно положить как объект-инстанс класса, так и объект-инстанс POD-структуры, в сишарпе же только второе.

G>В C++ клас и структура — одно и тоже. В C# — разные вещи.

G>Вопрос возник видимо из-за непонимания этого факта.


Причём — тобой.
Нужно разобрать угил.
Re[62]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 20.03.09 14:38
Оценка: +1 -2
Здравствуйте, Хвост, Вы писали:

C>>Отличное от реальности?

Х>изначально разговор был о массиве структур на стеке, ликбез про боксинг/анбоксинг читать не стоило, читал давно, в зелёной книжке.

Да нет, стоило. Иначе Вы бы продолжали в пустую гонять воздух, не зная почти ничего о теме разговора.
Re[65]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 20.03.09 16: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 16:12
Оценка: +1 -1 :)
Здравствуйте, Хвост, Вы писали:

Х>ну, давай по-порядку, на С# я писал давно и немного, на С++ на порядок больше, и есстествено что-то могло забытся, к тому же если ты проследишь начало темы про структуры, то она была о размещении их в массиве, и тут без ансейфа вариант действительно только один — боксинг. Теперь по-поводу "подобный пост про тебя", пиши пожалуйста, ведь ето ты будешь писать обо мне как о разработчике на C#, что ещё раз подтвердит мои слова , C# (особенно в версии 3.5) ето очень мощный язык, но для приложений требующих производительности, малой затраты ресурсов, быстрой реакции интерфейса ето просто моветон. Прототипы писать одно удовольствие, но тут как говорится — хоть на питоне. Дотнетчики же говорят "ааа, да ты чего, купи 4 ядра, возьми 16 гб" меня просто умиляют, вы поймите, что достойная производительность ето дополнительный функционал, ето когда спеллчекер подчёркивает красным не через две секунды после набора слова а сразу, ето когда в CAD'ах скролл рабочей области работает плавно, ето когда скриптовый google docs интерфейс не лагает, ето когда ты можешь в корелдро видеть тридцать слоёв одновременно а не пять, или когда диаграмму в таблице можно увидеть не только в плоском виде а в 3д и повращать, т.е. ещё раз, дополнительные ресурсы — дополнительный функционал. Вся ета дотнетчина на десктопах ето от бедности, когда нет денег нанять высокопрофессиональных программистов на С++ чтобы сделать проект и планка качества невысока, сойдёт и сишарп. Ентерпрайз лично у меня никогда не ассоциировался с качественным кодом, имхо там главная цель — лишь бы правильно работало, а уж быстро ли, медленно ли, интерфейс кривой или прямой — ето уже волнует в пятую очередь. Что насчёт дотнета на серверах — я только за, там дотнет ето просто клей, логика, вся тяжёлая работа лежит на сиквел-серверах + если надо какие-либо нейтив компоненты для обработки чего-нить быстрого (звук/картинки/видео). Заменить слово C# например на Python и ничего не поменяется, абсолютно. C# это клей, полный аналог VB конца 90-х по своему назначению, и плз, не надо его пихать в десктопы, точнее у вас ничего не выйдет, т.к. вы десктопы на C# не пишете, если вы разумны или у вас разумный руководитель.


Стена текста и все не по делу...

У нас пользователи в госструктурах на компах, которым уже по 2-4 года работают с нашим клиентом на .NET уже больше года в production режиме. Клиент довольно тяжелый: диалоги, графики, отчеты, таблицы, формы — полный комплект. Нареканий на производительность до сих пор не было. "ЧЯДНТ?"
Re[53]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 21.03.09 00:31
Оценка: +1 :))
Здравствуйте, Erop, Вы писали:

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


E>>Лично мне комфортно от того, что можно пробовать строить различные архитекутры, не думая изначально о том, сколько каких мелких объектов где выделяется, потому что в случае чего можно расчехлить тяжёлую артиллерию. Кому-то такой подход кажется нормальным, кому-то нет. Но по крайней мере есть выбор. Хотя наличие выбора может кому-то тоже показаться плохой идеей. ))


E>Тут есть ещё одна тонкость. спец. аллокатор таки эффективнее для своей задачи. В этом нет ничего удивительного, так как специализированные решения часто лучше обобщённых

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

E>И вот ты разрабатываешь, разрабатываешь, и упираешься. С С++ у тебя будет ещё один шаг, практически до субмакисмльного быстродействия, а в GC архитектуре ты остановишься на просто большом быстродействии и всё. И в результате ракета у амеров летает на 250, а у РФ на 350 км... И привет арифметике...


Зато у амеров этих ракет хоть попой кушай

Вообще если готовы бабло платить, то можно написать суперкомпилятор, который будет специализировать программу под входные данные, тогда она будет лететь 3 раза вокруг земли.

Но для этиъ целей С++ точноне подойдет.
Re[54]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 21.03.09 00:34
Оценка: +1 -2
Здравствуйте, Erop, Вы писали:

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


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

G>>Причем чаще всего прчиной оказывается применение неподходчщего алогоритма. Очень редко приходится нарываться на ситуацию когда низкая производительность вызвана особенностями платформы.

E>IMHO, такая ситуация, когда для ускорения надо менять алгоритм, часто говорит о том, что проектировали плохо.

Обычно так и делают.

E>Часто можно сразу выбирать оптимальный алгоритм.

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

E>Не понятно зачем пессимизировать-то? В большинстве задач оптимальные алгоритмы давно уже известны...

Ну если у вас задачи такие что под нее сразу можно оптимальный алгоритм подобрать, то хорошо.
В реальной жизни приходит заказчик и говорит: "сделайте мне песдато!"
Re[63]: Поздравляю :D
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.03.09 18:55
Оценка: +3
Здравствуйте, Sinclair, Вы писали:

S>Вы перемешали логику реализации с логикой задачи. Конечно вы в итоге огребли. Это стопроцентная гарантия.


Она частенько перемешивается.

S>А вот если бы у вас маппинг был описан декларативно (см. XmlRootAttribute, XmlElementAttribute, XmlAttributeAttribute и т.п.), то вы бы легко заменили DOM-based serializer на SAX-based serializer.


Давай будем честными сами с собой. Реализовать оторванный от API парсинг ХМЛ-я очень не просто.

Как, например, описать такое отображение (маппинг) на Шарпе и потом связать его с реализациями на основе DOM и MxlReader?

Не получится ли код интерпретации отображения больше основной задачи (в несколько раз)?
Ведь очень легко сказать, что для решения задачи Х "просто" нужно создать подходящий фрэймворк или библиотеку, а потом "просто" использовать его. Но создание таких фрэймворков само по себе не простая задача. Особенно когда язык для этого не предоставляет должных средств.

S>Аналогичные примеры приводят всякие умники про "изначальный выбор алгоритма сортировки" и прочую ботву. Их проблемы — ровно аналогичны.


Не. Разные алгоритмы могут сортировки могут иметь общий интерфейс. А вот разные АПИ — нет.

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

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

Так что подумать перед реализацией было бы не лишним. Главное не зацикливаться на этом. А то может статься, что работа подвиснет на стадии оптимизаций и выбора самого оптимального решения.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.04.09 08:02
Оценка: +1 :))
Здравствуйте, ppp222, Вы писали:

P>Что еще плохо в C#, это то, что все дотнетчики зависимы от воли левой пятки MS. MS будет выдумывать новые технологии каждые 5 лет. Соответственно участь дотнетчика — постоянное бессмысленное переучивание, освоение новых, перманентно новых технологий для решения одних и тех же задач.

Это не плохо, это замечательно. зучать новые технологии интересно, они зачастую дают другой взгляд на решаемые проблемы, что очень положительно влияет на общий уровень развитя программиста.
Кроме того новые технологии зачастую позволяют применять существующие знания в новых областях.
Сейчас у .NET охват областей разработки значительно шире, чем у C++, и только продолжает расти. В это время C++ники все еще воюют с проблемами языка и утечек памяти и пользуются средствами десятилетней давности.
Re[6]: Работа - с чего начать: С++ или С#?
От: ppp222  
Дата: 17.04.09 04:36
Оценка: :)))
Здравствуйте, gandjustas, Вы писали:

G>Вышла новая версия стандарта? Появился сборщик мусора? Код на С++ стал верифицируемым? Появился вывод типов?


Сборщик мусора противопоказан С++. Стихия С++ — это эффективный код, где строки — это массив символов, завершающийся нулём, а не вызов библиотечных функций. И не потому, что стандарт С++ какой — то недоразвитый, а потому, что работая таким образом мы получаем прирост производительности от десятков до сотен процентов.
Re[17]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.04.09 22:25
Оценка: +1 -2
Здравствуйте, ollv, Вы писали:

O> Кроме того, на плюсах вполне реализуемы элементы не родственных стурктур, к примеру итерации for_each, find_if count_if, функторы, придают плюсам оттенки функциональных языков

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

O>но вообще метапрограммирование видоизменяет плюсы, а говорить, что это все можно реализовать в джава или дотнете — просто не знать плюсы

Рассказываю тайны, большенство программистов на C# достаточно долго программили на плюсах и отлично его знают.
А вот наоборот — редко бывает.

O>Даже простейший вызов из темплейтного метода непредопределенного класса с оператором () — уже недостижимая мечта для шарпа или жавы.

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

O>Впрочем практика показывает, базовый функционал крупных проектов требующих гибкой архитектуры реализуется чаще на плюсах (во всяком случае в моей практике это именно так)

Какой гибкой архитектуры? C++ не умеет интеропать ни с какими другими языками, даже при интеропе с другой либой на С++ могут возникнуть проблемы.

O>констрейны дают возможность предопределить поведение при компиляции. Да и еще, плюсы то развиваются, стандарт постоянно дополняется новыми фичами расширяюшими возможности, typeof это не последнее

За последние 5 лет какое развитие было?
Re[20]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 27.04.09 09:55
Оценка: +2 -1
Здравствуйте, criosray, Вы писали:

ГВ>>И это очень хорошо, что не нужно напряженно следить за настроениями в комитете. Нет, это (читай по буквам) О Ч Е Н Ь хорошо.

C>Это очень плохо. Язык должен развиваться. Посмотрите на С# — кому плохо, что за эти 7 лет на пороге уже 4ая версия языка, где каждая версия — серьезный шаг вперед?..
язык C++ в своей молодости тоже бурно развивался, почитай D&E, только вот когда количество программистов на нём выросло до миллионов, количество платформ и компиляторов до десятков, то тут уже начинает главенствовать принцип "не навреди". C#, дай бог ему здоровья, если обретёт такой же ареал то будет развиваться тоже не шустро, уж поверь.
People write code, programming languages don't.
Re[21]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.04.09 18: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>>Да, да, да. Зачем наука в программировании? Ты давно всем доказал, что программирование особая отрасль и мозг в ней не нужен. Главное трясти по сильнее. То ли дело автомобили. Вот там наука важна. Ведь на автомобилях ездеем мы сами, а софт используют какие-то ламеры.


ГВ>Да ну?! Вроде как я обычно доказываю прямо противоположное. Мозг как раз нужен и теоретическая подготовка — тоже. Так что, что-то ты перепутал.


Я перепутал? Ну, не знаю. Я тебя читал.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 28.04.09 19:43
Оценка: +3
Здравствуйте, 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[30]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 29.04.09 18: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[34]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 29.04.09 19: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[36]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 05.05.09 22:30
Оценка: +1 -1 :)
Здравствуйте, VladD2, Вы писали:

VD>Ты забыл добавить, что при этом отменяются высокая производительность и некоторые области применения. А как только данные начинают передоваться по ссылке, то здравствуй UB и море багов.

ой ли, ты часто передаёшь лямбды после выхода из scope? как раз таки остутствие гц и возможность захватывать контекст по ссылке обеспечивает экстремальную производительность (нет боксинга для стековых объектов как в дотнете, ага). Ещё раз, ето юмор такой или что? лямбды в с++ предлагают два варианта захвата контекста, причём можно гибко выбирать что захватывать по ссылке, что по значению. Таких гибких лямбд нет ни в одном языке программирования, назвать ето "недолямбдами" и "ограничением области применения" можно разве только по причине шаблонности мышления.
People write code, programming languages don't.
Re[41]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 06.05.09 15:09
Оценка: +1 -2
Здравствуйте, criosray, Вы писали:

ГВ>>Что даже не сильно удивляет. Длинные и многоярусные лямбды противоречат принципам реюзинга, "обычные" функторы могут быть предпочтительнее с этой точки зрения. Больше того, даже два использования какой-нибудь коротенькой лямбды типа "x >= SOMETHING_LOW && x <= SOMETHING_HIGH" уже побуждают сделать вместо неё обычную функцию или функтор, и обращаться к ним по собственному имени.


C>Это то о чем Вам говорил Влад. Лямбды С++ — неудобные недолямбды. Потому ими и не пользуются.


Дело не в удобстве, а в культуре программирования.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re: Работа - с чего начать: С++ или С#?
От: max-maxtor Россия www.rsdn.ru
Дата: 07.05.09 11:31
Оценка: :)))
Здравствуйте, niellune, Вы писали:

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

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

Купи надувную бабу.
Re[42]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 07.05.09 12:10
Оценка: +2 :)
Здравствуйте, VladD2, Вы писали:

VD>Умора, клиенты психиатров отправляют к терапевтам.

Во!
Теперь узнаю старого доброго ВладД2.

VD>Ладно, разговоры в подобном ключе меня не интересуют.

Симметрично.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re: Работа - с чего начать: С++ или С#?
От: max-maxtor Россия www.rsdn.ru
Дата: 07.05.09 13:04
Оценка: +1 :))
Здравствуйте, niellune, Вы писали:

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

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

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

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

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

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

Моё мнение C# не очень хорошее решение, если вы не собираетесь связать свою судьбу с виндовс на каком-то относительно непродолжительном участке времени. C++ поддерживается всеми платформами. Ждёт его судьба бейсика. Это моё виденье данной проблемы.
Re[53]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 14: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[45]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.05.09 14:45
Оценка: +1 -2
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>>А Microsoft с Intel-ом и не знают, что они отсебятину несут.

VD>>Можно ссылку на место где я могу купить компилятор от Microsoft реализующий черновик стандарта?

ГВ>Дык. Гугль тебя спасёт, ключевые слова "VC10 CTP download". Это действительно бета, как ты правильно заметил (вернее — CTP, я не знаю, как он соотносится с альфа/бета/RC по обычной классификации). Про интеловский компилятор спроси у CreatorCray.


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

VD>>Если нет, то предлагаю вам всем прекратить нести пургу.


ГВ>Чья б корова...


Твоя, твоя. Заняться тебе не чем. Разводишь демагогию.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[53]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 14:59
Оценка: +1 -1 :)
Здравствуйте, Геннадий Васильев, Вы писали:

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


ГВ>

G>>А то что ьты 14 лет на нем пишешь чести тебе не делает.

ГВ>В чьих глазах?


ГВ>Вопрос остаётся в силе.

В глазах тех, кто успел попользоваться не только С++, но и более современными языками.
Re[49]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.05.09 16:53
Оценка: +1 -2
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>>Нет такой ссылки, потому что компилятор от MS ещё не продаётся.

VD>>Значит и обсуждать не чего.

ГВ>Так и не обсуждай. Тебя кто-то заставляет?


Обсуждал, ты а теперь откровенно гонишь. Учись признавать свою неправоту.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[59]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 07.05.09 17: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[61]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 07.05.09 18:05
Оценка: +1 :))
Здравствуйте, MxKazan, Вы писали:

MK>Что за темы?

тебе дать ссылку на тему которую завёл ты сам?
People write code, programming languages don't.
Re[66]: Брависсимо!
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 20:03
Оценка: :)))
Здравствуйте, Геннадий Васильев, Вы писали:

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


Х>>>запомнил?

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

ГВ>Итак: "лямбды в C++ предусматривают возможность замыкания контекста по значению". Твой ответ? (Бис! Бис! Заранее аплодирую)

Не надо такие умные слова говорить. Говори честно — копирование значения. Копирование лексическим замыканием не является.
Re[74]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 20:41
Оценка: -2 :)
Здравствуйте, Хвост, Вы писали:

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


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


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


G>>>>>>Вот привели в пример какой-то пост, где с помощью WPF попытались нарисовать туеву хучу объектов. Интересно, на С++ аналогичное вообще заведется? (не говоря о том чтобы поехать)

Х>>>>>тут я уже упомянул что работаю над GIS, так вот, конечно не 10 тысяч объектов, а 20 тысяч, ну и не 1-4 секунды а 25 раз в секунду (чтобы глазу было приятно), похоже ты прав, ето пожалуй не едет, ето пожалуй летает
G>>>>20 тысяч векторных примитивов с прозрачностью?
Х>>>круто, да?
G>>Слабо верится.
Х>т.е. тебе и в современные 3д игры слабо верится, да? а там ведь покруче будет.
В играх многое делается на видеокарте, кроме того всегда стараются рисовать поменьше. В ГУИ фреймворках общего назначения так сделать не получится.
Re[26]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 17.05.09 21:25
Оценка: -2 :)
Здравствуйте, criosray, Вы писали:


C>Еще интересно было бы увидеть что-то вроде RhinoMocks — библиотеки для мокинга объектов (свойства, методы, события).


Нууу, просить генерировать код в рантайм не совсем корректно, хотя и для С++ таким макаром иногда поступают. И вообще, в С++ принятно тестировать в юнит-тестах сам код, а не бинарные сборки, что в свою очередь легко делается через инклюды и прочий развитый препроцессинг. В общем, подход к юнит-тестированию совсем другой и нет смысла тратить время на неприменимый и безбенифитный (для С++) способ юнит тестирования, предназначенный для совсем других условий.

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

C>Запредельное? Патерн IoC в управляемых языках реализуется на базовом уровне за минут 40-50 максимум неопытными студентами.

Рефлексия она и в африке рефлексия. Развитый подобный фреймворк под нейтив — это разве что COM и пляски вокруг typelib-ов и prog ID. ActiveX site — как раз своего рода "конфигурируемый" в рантайм IoC-контейнер, правда в ограниченном множестве интерфейсов.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[27]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 17.05.09 21:40
Оценка: +1 -1 :)
Здравствуйте, vdimas, Вы писали:

C>>Еще интересно было бы увидеть что-то вроде RhinoMocks — библиотеки для мокинга объектов (свойства, методы, события).


V>Нууу, просить генерировать код в рантайм не совсем корректно, хотя и для С++ таким макаром иногда поступают. И вообще, в С++ принятно тестировать в юнит-тестах сам код, а не бинарные сборки,


Вы вообще понимаете о чем говорите? Что такое модульное тестирование? Что значит "тестировать код, а не сборки"? Это, простите, бред.
Модульное тестирование подразумевает: а) тестирование состояния объектов, б) тестирование операбельности объектов. Препроцессингом ничто из перечисленного протестировать не возможно.

V>что в свою очередь легко делается через инклюды и прочий развитый препроцессинг. В общем, подход к юнит-тестированию совсем другой и нет смысла тратить время на неприменимый и безбенифитный (для С++) способ юнит тестирования, предназначенный для совсем других условий.


Почему он вдруг стал безбенефитным? Чем С++ такой особенный? Модульное тестирование программ на С++ как минимум не менее полезное, чем модульное тестирование программ на С#, Java, Python, и т.д.

Если код покрыт тестами, то его гораздо проще рефакторить и модифицировать.


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

C>>Запредельное? Патерн IoC в управляемых языках реализуется на базовом уровне за минут 40-50 максимум неопытными студентами.

V>Рефлексия она и в африке рефлексия. Развитый подобный фреймворк под нейтив — это разве что COM и пляски вокруг typelib-ов и prog ID.

А COM тут при чем вообще?

V>ActiveX site — как раз своего рода "конфигурируемый" в рантайм IoC-контейнер, правда в ограниченном множестве интерфейсов.

Я очень надеюсь, что Вы пошутили...
Re[28]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 18.05.09 01:23
Оценка: -2 :)
Здравствуйте, criosray, Вы писали:

C>Вы вообще понимаете о чем говорите? Что такое модульное тестирование? Что значит "тестировать код, а не сборки"? Это, простите, бред.

C>Модульное тестирование подразумевает: а) тестирование состояния объектов, б) тестирование операбельности объектов. Препроцессингом ничто из перечисленного протестировать не возможно.

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

V>>что в свою очередь легко делается через инклюды и прочий развитый препроцессинг. В общем, подход к юнит-тестированию совсем другой и нет смысла тратить время на неприменимый и безбенифитный (для С++) способ юнит тестирования, предназначенный для совсем других условий.


C>Почему он вдруг стал безбенефитным? Чем С++ такой особенный?


Моковский подход и не был для С++ никогда бенефитным. Вложения труда не окупятся, поэтому там немного по-другому.

C>Модульное тестирование программ на С++ как минимум не менее полезное, чем модульное тестирование программ на С#, Java, Python, и т.д.


А это ты кому и о чем? Просто лозунги?


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

C>>>Запредельное? Патерн IoC в управляемых языках реализуется на базовом уровне за минут 40-50 максимум неопытными студентами.

V>>Рефлексия она и в африке рефлексия. Развитый подобный фреймворк под нейтив — это разве что COM и пляски вокруг typelib-ов и prog ID.

C>А COM тут при чем вообще?

При том, что популярные IoC контейнеры для .Net до компиляции в глаза не видели оперируемые интерфейсы и конструкторы реализующих их классов. Такие шутки делаются лишь через метаинформацию, пример которой для нейтива есть typelib из COM, так же как и ср-ва для построения проксей для OLE-совместимых сигнатур.

V>>ActiveX site — как раз своего рода "конфигурируемый" в рантайм IoC-контейнер, правда в ограниченном множестве интерфейсов.

C>Я очень надеюсь, что Вы пошутили...

Не надейся.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[2]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 18.05.09 09:21
Оценка: +3
Здравствуйте, Pepel, Вы писали:

P> весь пост не читал, только начало зацепил, вставлю свои 5 центов : тут чет про кросплатформенность много пишут там и прочий валюнтаризм .. мне кажется, дело в области применении задачи, наверное программу управления кардиодатчиком хирургического стола все же стоит писать на C++ ввиду сильного механизма проверок


Чего-чего? 0_о
avalon 1.0rc1 rev 239, zlib 1.2.3


dmitriid.comGitHubLinkedIn
Re[5]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 18.05.09 11:21
Оценка: -2 :)
Здравствуйте, criosray, Вы писали:

C>Откройте для себя .NET CF и Mono.


И то и другое неполный отстой, даже близко не являющимся решением реальных проблем.
С++ тут монополист, это факт. Твои минусы это не испраят
Нужно разобрать угил.
Re[9]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 18.05.09 12:02
Оценка: -3
Здравствуйте, criosray, Вы писали:

NBN>>В принципе тоже — например: быстрое, кроссплатформенное и полнофункциональное приложение на C#.


C>Mono


Ни один из пунктов не решает.
Нужно разобрать угил.
Re[34]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 18.05.09 15:30
Оценка: +2 :)
Здравствуйте, samius, Вы писали:


S>А моки вообще не в почете?


Что-то слишком много чести им в последнее время... Хотя до сих пор наиболее популярные во всем мире моки — это ручные моки, они же заглушки и этому способу тестирования учат у нас вроде на 3-м курсе.

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

У нас в последней системе в центре тупой диспетчер сообщений, и все тупо шлют в систему сообщения, никто ни о ком не знает... что по одиночке, что в любой комбинации прекрасно все тестируется, и произвольные тестовые заглушки прекрасно пишутся с логикой произвольной сложности, которая автомокам и не снилась. Так что лично мне они как стразы на ж-пе, модно, но не практично.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[8]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 19.05.09 04:57
Оценка: +3
Здравствуйте, Anton Batenev, Вы писали:

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

MK>> Я только сразу оговорюсь, что сам на Mono не разрабатываю, т.к. мы пишем только под Windows.
AB>С этого было надо начинать... и этим надо было заканчивать (см. мое предыдущее
Автор: Anton Batenev
Дата: 19.05.09
сообщение).

Да брось. То, что в разделе КСВ форума RSDN нет людей, которые разрабатывают на Mono, совершенно не означает, что этот проект какой-то не юзабельный и его нельзя приводить в качестве аргументов. Тебе были даны все нужные ссылки. В форуме Работа встречалось обсуждение Mono и вакансии даже были. Я вот, например, и на Compact Framework не пишу, так что же, если меня спросят "что есть у .Net для мобильников", я должен буду отвечать "ничего"?
Re[29]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.05.09 08:42
Оценка: -1 :))
Здравствуйте, IID, Вы писали:

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


G>>Пример не приведу, ибо очень большо получится. Но основная суть в том, что в .NET можно генерировать код в рантайме.


IID>Неужели кратко продемонстрировать скоростные возможности языка никак не получается ?

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

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

Не надо жопой вилять. Как раз динамическая кодогенерация позволяет написать программу так чтобы она работала в общем случае быстрее нативной.
Если взять один конкретный случай (набор входных данных), то смотри выше про ассемблер.

ЗЫ. Я уже писал в этой теме тест, который меряет выделение памяти стандартным аллокатором. .NET выигрывает.
Re[10]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.09 14:02
Оценка: +1 -2
Здравствуйте, Anton Batenev, Вы писали:

AB>Я просто знаком с фанатизмом Влада,


Чья бы корова мычала. Споришь с очевидными фактами и при этом имеешь наглость обвинять других в фанатизме.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[38]: Работа - с чего начать: С++ или С#?
От: FR  
Дата: 19.05.09 14:59
Оценка: +2 :)
Здравствуйте, VladD2, Вы писали:

FR>>Да ладно меряли уже не раз, даже если писать шаблоный qsort один в один с сишным плюсовый все-равно выигрывает, за счет агрессивного инлайнинга.


VD>Это чушь хотя бы потому, что компиляторы С и С++ — это в большинстве случаев одни и те же компиляторы. По крайней мере лидеры MS и Intel поступают именно так.


Угу только в Си приходится пользоватся как параметром указателем на функцию, который умеют инлайнить только последние компиляторы и то не всегда, а в C++ параметр шаблона, который инлайнил даже VC 6.
Ну и частичную специализацию тоже не стоит сбрасывать со счетов.

VD>>>Кстати, на пример C vs. C++ можно можно спроецировать все сказанное о C++ vs. C#. Ведь на С всегда можно написать код не медленнее чем на С++. Проблема только в трудоемкости.


FR>>Можно, и кстати не мало пишут, но опять таки разница между C++ и Си тоже не так велика, хотя и больше чем между С++ и шарпом.


VD>Опять вопрос оценок. Я считаю, что ка раз разница примерно сравнима. В одном случае нам дают ООП и обобщенное программирование, в другом компонентность, автоматическое управление памяти, встроенные в язык запросы, полноценные лямбды.


Ну шаблоны многое компенсируют или хотя бы сглаживают.

VD>В прочем, важен сам факт, что ты согласился по существу и оспариваешь только коэффициенты влияния.


Ругатся лень
Re[12]: Работа - с чего начать: С++ или С#?
От: Anton Batenev Россия https://github.com/abbat
Дата: 19.05.09 15:17
Оценка: +2 -1
Здравствуйте, criosray, Вы писали:

c> Влад, я пришел к выводу, что спор с господами типа Антона Батенева, вдимаса, Геннадия Васильева и т.д. — местных аппологетов С++, это пустая трата времени и сил.


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

c> К тому же спорят-то они о вкусе устриц...


... вот кто бы это говорил из заводящих разговор про моно.
avalon 1.0rc1 rev 244, zlib 1.2.3
Re[11]: Работа - с чего начать: С++ или С#?
От: Anton Batenev Россия https://github.com/abbat
Дата: 20.05.09 19:22
Оценка: :)))
Здравствуйте, VladD2, Вы писали:

VD> Какой удар ниже какого пояса?


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

VD> Ты слил спор и теперь бредишь пытаясь перевести разговор на что-то не относящееся к делу.


Ты спрашивал, как показать мастер-класс — я тебе ответил. При чем, подобрал задачу как раз под тебя. Или я был слишком хорошего мнения?

VD> При этом даже в теме на которую ты пытаешься перескочить ты не понимаешь ровным счетом ничего.


Ты очень хочешь, но стесняешься мне поведать историю про rocket science сайта RSDN типа "каталог статей" + "форум" с суточным количеством хитов в районе 100-200 тыс и временем жизни кэша в районе минуты? Чтож, удиви меня.

VD> В общем, сплошное ламерство и не умелая демагогия с твоей стороны. Постыдился бы.


Мне-то почему за то, к чему я не имею никакого отношения, должно быть стыдно?
avalon 1.0rc1 rev 244, zlib 1.2.3
Re[32]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 21.05.09 07:15
Оценка: :)))
Здравствуйте, MxKazan, Вы писали:


MK>>>- Изначально ты написал: "И еще забыл, что последние года 4 тактовая частота процов практически не растет, а обсуждаемого скачка оптимизации JIT-а при переходе на 3.0 версию не было ВООБЩЕ".

MK>>>- На что получил ответ, что рантайм по прежнему 2.0, что он не менялся со времен второго дотНета, ну нету CLR 3.0 и всё.
V>>А откуда взялось слово CLR? Почему ты решил, что речь о CLR, а не о .Net Framework, например?
MK>Видимо, потому что ты говорил о JIT-е, который таки является частью именно CLR. Ты картинку то поглядел? Мы за последнее время привыкли к незнанию предмета со стороны *упорно голосующих*, так что подобное непонимание не удивительно.

Не тратье время на него. Человек привселюдно опозорился, теперь пытается "съехать", будучи не в состоянии признать свою неправоту. Классический юношеский максимализм на лицо...
Re[33]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 21.05.09 08:48
Оценка: +1 -1 :)
Здравствуйте, criosray, Вы писали:

C>Человек привселюдно опозорился...


Угу, а во рту "сладко, сладко, сладко".
Не в состоянии обосновать своих утверждений — расписался в бессилии.
Re[2]: Ты помнишь, как всё начиналось?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 17.03.09 21:49
Оценка: 6 (1) :)
Здравствуйте, AndrewVK,

Август 2002-го!
Автор: RSDNer
Дата: 09.08.02
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[50]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 23.03.09 09: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>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[17]: Что за статистика-то такая волшебная? ;)
От: Sansend Украина  
Дата: 19.03.09 15: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[43]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 06.05.09 12: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>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[39]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 19.05.09 12:36
Оценка: 4 (2)
Здравствуйте, Mamut, Вы писали:

g>> В итоге по-русски можно написать "сществуют программы, для которых реализация на С++ окажется не самой быстрой", что совсем по-русски звучит как "иногда программы на С++ медленее", а не то что ты придумал.



M>Кстати, а есть таки примеры, где это так? Вроде, где-то в КСВ приводили примеры, я сейчас не найду

Вот здесь на графиках видны примеры, где C++ уступает C#.
В исходниках не ковырялся
Re[70]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 11.05.09 09:20
Оценка: 3 (1) +1
Здравствуйте, CreatorCray, Вы писали:

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


G>>Если программист недостаточной квалификации, то само использование unmanaged становится большой проблемой (видел такое на Delphi), не говоря уже о С++ с его примудростями.

CC>Managed от идиотов все равно не спасает.
А кто-то говорил что спасает?
А самое главное что вообще ничего не спасает от идиотов-менеджеров, которые думают что managed спасает от идиотов-программистов.
Re[37]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 18.05.09 19:18
Оценка: 3 (1) +1
Здравствуйте, vdimas, Вы писали:

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


S>>Моки и заглушки — разные вещи, использующиеся в разных сценариях тестирования.

V>Садись, два.
Я спорить не буду, если мосье интересно в чем разница, он найдет где почитать.

S>>Разве речь о Вас в совокупности с тупым диспетчером сообщений?


V>Так не меня спросил?

Я спросил "А моки вообще не в почете?" в ответе на пост где Вы (не против если на ты?) отвечали как бы за всех:

Таким образом, в подавляющем большинстве случаев на С++ в юнит-тестах тестируется...

А ответ на мой вопрос перескочил на частности вроде

У нас в последней системе в центре тупой диспетчер сообщений

и про стразы, что цитировать я не буду.

V>и произвольные тестовые заглушки прекрасно пишутся с логикой произвольной сложности, которая автомокам и не снилась.

По поводу этого — я как бы не понял, как отсутствие автоматизированного инструмента ставится в преимущество.
На дотнете никто совать генераторы моков во все щели не заставляет. Нужен рукописный мок — пожалуйста. Но при наличии средств генерации моков, надобность в ручном мокировании практически отпала.
Следствием использования мокогенов является значительное сокращение времени на рефакторинг.
Да, кстати... рефакторинг тоже предпочитаете ручной, а не автоматические костыли?

Что касается теста с заглушкой с логикой произвольной сложности, которая не снилась — то это не предмет гордости.
Re[39]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 19.05.09 06:16
Оценка: 3 (2)
Здравствуйте, Геннадий Васильев, Вы писали:

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


C>>Так вот, ликбез: мокинг выполняется с целью изолировать тестируемый объект от внешних зависимостей.


ГВ>Ух ты! А я-то думал, что мокинг нужен для отслеживания последовательности внешних вызовов.

+1. Изоляция здесь в качестве средства. Но она сама-по себе хороша, потому изоляцию, достигнутую в целях обеспечения возможности тестирования возводят в бенефиты.

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

C>>Элементарно средствами RhinoMocks.

ГВ>И неужто будет проще, чем аналогичная заглушка? Это если учесть, то заглушка реализуется в естественном синтаксисе, а мок — перехватом вызовов. Второе будет почти гарантированно сложнее.


Здесь vdimas говорит о FAKE-двойниках. Только они обладают собственным поведением, и эта категория двойников ну никак не генерится мокогенами. Но никто их не запрещает использовать под дотнетом рукописные Fake-и.
Здесь же мы обсуждаем именно мокогены — фреймворки, генерящие двойники без логики, а именно dummy, stub-ы, spy, mock-и. Точнее генерят они как правило стабы и моки, которые можно использовать как dummy и spy. И даже как Fake, но для этого нужна некоторая акробатика:
Fake двойника можно надстроить над генерированным моком, но это оправдано только в том случае, когда объем кода, с помощью которого можно прикрутить логику fake-а к моку не превышает объем рукописного fake-а (Для средних и больших интерфейсов — почти всегда оправдан). Потом, логику fake-а можно поместить в TestFixture, а сгенерированный мок науськать на ту логику. Не обязательно все пихать в тело теста в синтаксисе накачивания двойника констрейнтами .

В чем прелесть мока, сгенерированного мокогеном по сравнению с рукописным? Рассказываю. В отличии от рукописного мока, сгенерированный не требуется писать руками; сгенерированный мок реализует все что надо для отслеживания фактов вызовов, их порядков, и их параметров.
Представим простой пример кода, работающего с интерфейсом IList<int>. Допустим, код работает только со свойством Count и индексатором (а так часто и бывает). Для создания рукописного мока требуется реализовать порядка 10 методов просто. Для каждого теста своих.
Да, можем создать ListMockBase и переопределять нужные методы для каждого теста. Теперь представим, что интерфейс меняется в процессе разработки (а так часто быывает с интерфейсами, не определенными в стандартной библиотеке). Потребуется переписывать все моки и/или карежить базовый рукописный мок. Мокогенератор решает эти проблемы + наполняет моки функциональностью для тестирования (уже говорил).

V>>>В декларативном синтаксисе мокков это выглядит как удаление гландов через Ж, и чем осмысленнее логика — тем более глубокое погружение в эту Ж. А если процедура внешняя, то это лишняя тестирующая сущность и все такое.

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

C>>Выглядит преотлично. На много лучше, чем то, что у вас есть (а точнее нет) в unmanaged C++. lambda выражения и fluent interface дают прекрасную читабельность.


C>>
C>>Expect.Call(file.Read(null, 0, 0))
C>>      .Constraints(Property.Value("Length", 4096), Is.Equal(0), Is.GreaterThan(0) && Is.LessThan(4096)); 
C>>


ГВ>Можно подумать, что в документации приводят сложные нечитабельные примеры. Наверное, там ещё должны были написать о нерешённых проблемах, в том числе — фундаментальных.


Я бы не согласился, что это выглядит отлично. Но создавать для проверки каждого параметра отдельное утверждение с логикой — кошмар.
Re[22]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 25.04.09 10: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[32]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 29.04.09 08:57
Оценка: 2 (1) :)
Здравствуйте, samius, Вы писали:

S>Дело не в том как написано и что тестируется и даже не в конкретном экспериментаторе (который думает что разница в контроле типов в рантайме), а в интерпретации результата.

S>Победил C# — недоумение
S>Победил С++ — значит C# — тормоз

Не, ну все правильно. Победил C# значит надо разбираться где в C++ коде косяк :)
Re[37]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 04.05.09 16:20
Оценка: 2 (2)
Здравствуйте, VladD2, Вы писали:

VD>Это махровое ламерство. Собственно данная беседа для меня потеряла всяческий интерес.


Для меня эта беседа потеряла интерес когда я покрутил приложение, которое (по словам одного из обвинителей меня в ламерстве) якобы летает. Оказалось, что мало того, что оно тормозит, так еще и память утекает, причем со свистом — так, что средней C++-ной программе надо постараться такую утечку организовать. В общем, гладко было на бумаге, да забыли про овраги — практика пока теорию не подтверждает. Лепите уважаемые свои лямбды дальше :)

Вообще, все это я могу объяснить только профессиональной абберацией у дот-нетчиков, которые настолько привыкли, что все тормозит, что просто перестают тормоза эти замечать. На данный эффект в будущем буду делать поправку, а может вообще спорить на эти темы не буду — бессмысленно :)
Re[39]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 05.05.09 18:08
Оценка: 2 (1) +1
Здравствуйте, criosray, Вы писали:

ГВ>>Судя по всему, не всё JIT оптимизирует и не всегда.


C>Вам не надоело кидаться какашками?


Хм. Уж, по-моему, если у кого резьбу и срывает, то это у хулителей C++. Тебе цитаты привести или сам найдёшь? И вообще говоря, называть рекомендации Microsoft "какашками" — это сильно, да. Учту, что ссылка на MSDN может быть приравнена к хулению.

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


Отлично, очень рад. Кто-то утверждал обратное (обратное "разумному компромиссу", а не "будущему за...", разумеется)?

C>Более того, я уверен, что нам предстоит еще увидеть полностью управляемые ОС типа Singularity.


Ну и отлично ещё раз, возьми с полки пирожок. Думаешь, я собираюсь спорить с твоей уверенностью?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[34]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 05.05.09 21: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[44]: Другой вариант
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 06.05.09 05: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[65]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 07.05.09 23: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[59]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 08.05.09 10:25
Оценка: 2 (1) :)
Здравствуйте, gandjustas, Вы писали:

G>Стандартные аллокаторы в С++ требуют прохода по списку свободных блоков памяти при выделении\освобождении, эта операция имеет алгоритмическую сложность O(n). При интенсивных операциях выделения\освобождения работает очеень медленно.

Ты пожалуйста ссылку дай на стандарт С++, где написано что именно так работает "стандартный аллокатор С++".

G>Не разводи демагогию, давай факты.

Симметрично!
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[73]: Брависсимо!
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 08.05.09 18: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[63]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.05.09 19:45
Оценка: 2 (1) +1
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Не совсем так. Дело в том, что GC для C++ не должен решать задачи управления абсолютно всеми объектами и никто ничего такого и не предлагает. Но для каких-то отдельных моментов он вполне может оказаться приемлемым решением, лучшим, чем reference counting. Ключевое слово: "какие-то отдельные моменты".


Пока в С++ не будет введено понятие "управляемого GC указателя/ссылки" ничего путного в С++ сделать не удастся. Только не строгий GC который крайне не практичен.

Проблема проста до банальности. С++ спроектирован в расчете на то, что адреса в указателях неизменны. А качественный GC предполагает, что как раз таки объекты можно перемещать, а значит их адреса изменятся. В этих условиях GC должен иметь возможность определить в каких ячейках памяти лежат адреса управляемых GC объектов, а в каких просто данные (возможно совпадающие по значению с адресами). GC Явы и дотнета спроектированы в расчете на использование метаданных генерируемых компиляторами и определенные ограничения в языках. Таких ограничений в С++ нет. Посему реализация эффективного GC для него невозможна.
Пример доработки С++ — это C++/CLI и Menaged C++. Там были введены специальные типы указателей которые описываются в метаданных и контролируются рантаймом. По другому никак.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[27]: П как правильно?
От: Sinix  
Дата: 25.05.09 01:33
Оценка: 2 (1) :)
Здравствуйте, Erop

VD>>утиная типизация.

E>А это что обозначает?
Если что-то крякает как утка — это можно зажарить, даже если это был дядя вася с манком.

Гуглить duck typing.

Если тупо на пальцах и неправда — то это динамическое приведение типов по совпадению имён/сигнатур членов класса.

Как-то так:

class HunterVasya
{
  void Cryack()
  {
    // ...
  }
  ...
}

class Duck
{
  void Cryack()
  {
    // ...
  }
  ...
}
...
void Main()
{
  HunterVasya vasya = new HunterVasya();

  Duck duck = (Duck)vasya; // The magic lives here.

  duck.Cryack();
}
Re[8]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 15.03.09 20:34
Оценка: 1 (1) +1
Здравствуйте, shrecher, Вы писали:

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

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

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

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

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

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

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

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

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

Игры, ембеддед, миддлеваре, шаровары. Ну и всё что с ними плотно пересекается — например сильно кросплатформенные программы требующие высокого качества исполнения.
Кроме того — части серверных решений требующие перформанса.
Нужно разобрать угил.
Re[25]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.03.09 12: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[21]: Что за статистика-то такая волшебная? ;)
От: Mamut Швеция http://dmitriid.com
Дата: 19.03.09 10:23
Оценка: 1 (1) +1
E> M>Известно, что количество ошибок на 100 строчек кода в среднем одинаково, вне зависимости от языка программирования. Вывод — надо писать на языке программирования, который помогает мысли выражать более коротко и ясно

E> Откуда это известно-то? Я в это не верю, например!


Надеюсь кто-то найдет ссылку и скинет. Проводила иследования то ли Моторолла, то ли Эрикссон.
avalon 1.0b rev 146


dmitriid.comGitHubLinkedIn
Re[62]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 07.05.09 18: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[64]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 07.05.09 18:51
Оценка: 1 (1) +1
Здравствуйте, Хвост, Вы писали:

Х>кстати про боксинг, будь добр расскажи, какой магией структуры на стеке, которые являются контекстом лямбды, продляют свою жизнь при возврате лямбды из метода?

Легко. Эти структуры размещаются не на стеке, а в полях класса, который и лямбду оборачивает.
Re[84]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 08.05.09 06:30
Оценка: 1 (1) +1
Здравствуйте, Хвост, Вы писали:

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

Еще раз. Если мы в "плоском" режиме, не проецируя геометрию на шарик, либо проецируя на шарик текстуру, то псевдо-экранные координаты считаются один раз. Сдвиг и масштабирование не потребует полного пересчета, т.к. позволит домножить на матрицу, что можно отдать железу. Для того чтобы понять, лежит объект на экране или нет, пересчитвать его координаты в экранные нет нужды! Достаточно иметь рамку экрана в псевдоэкранных координатах и пространственный индекс в родных координатах объекта.
В случае с шариком тоже поможет промежуточная система координат. Однако, она уже не будет аффинно преобразовываться в экранную, но экономия в расчетах все еще будет при повторе прорисовки объекта.

S>>А я говорил, что только промежуточные, а потом манипуляция матрицей. Потому 1000 раз зум-аут/зум-ин не повлияют на координаты. В любом случае координаты объекта при смене вида меняться не должны. Координаты примитива — пожалуйста. Объект неизменен при прорисовке.

Х>дык объект то и неизменен, вид примитива и меняется, т.к. матрица трансформации при 1000 раз зум-аут/зум-ин накапливает ошибку.
А, вона ты о чем Так- конечно. Тут и зумать не надо. Потаскал карту мышкой в режиме пана и объекты разбежались кто-куда (набежала погрешность на сдвигах).
Такой эффект решается запоминанием предыдущего положения и направления "наблюдателя" и применения коэффициентов к нему. Тогда при 1000 зумов или 1000 панах меняются туда-обратно не коэффициенты матрицы, а коэффициенты, которые требуется применить к предыдущему положению "наблюдателя", фактически к запомненной ранее матрице вида. Сразу про накопление ошибки в матрице на множестве итераций туда-обратно можно забыть.

S>>Но повторить худо-бедно такой пролет на векторных данных можно. Естественно, будет зависеть от обилия данных и способа проекции (либо проекция текстуры, либо плоский рендеринг по спроектированным с шарика на плоскость координатам). С шарика на плоскость тоже можно схалтурить и поручить железу.

Х>да, можно, если учесть неточности железки и соответственно с этим написать алгоритм пролёта.
Какие неточности железки? Пиксель туда-сюда?

S>>Софтовые трансформации тоже можно сократить введением промежуточной системы координат. Даже на шарике.

Х>про проблемы с промежуточную систему координат вроде написал
Нету там проблемы. Одна экономия в расчетах координат повторной прорисовки примитива при смене вида. Что на железе что на софте.

S>>Так что запас по производительности есть и значительный. Потому не вижу неподъемных для C# задачь.

Х>В принципе задачу можно реализовать и на C#, но куча визуальных ништяков отомрёт.
Например?
Re[40]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.05.09 20:04
Оценка: 1 (1) :)
Здравствуйте, NikeByNike, Вы писали:

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


S>>http://www.google.com/trends?q=c%2C+c%2B%2B%2C+c%23%2C+java&amp;ctab=0&amp;geo=all&amp;date=ytd&amp;sort=0


NBN>Ценность данного графика в контесте данного спора близка к нулю

NBN>Например, на том же RSDN вопросы по покетам задают восновном в контестке CF. Однако вопросы задают восновном нубы (создают статистику), а профи пишут на С++ (реальность).

Из этого утверждения следует:
1)Профи не задают вопросов
2)Все профи раньше писали на CF.
3)Пишуших софт на CF несоизмеримо больше, так как далеко не каждый нуб становится профи, а сами по себе профи не появляются
Re[28]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 20.05.09 11:56
Оценка: 1 (1) -1
Здравствуйте, gandjustas, Вы писали:


G>Это C++ники так пишут код на шарпе. Не надо так писать. Пишите нормально i<data.Length и будет счастье.


А мне надо именно i<buffLen.
Поймешь сейчас, или еще одну итерацию прогоним?

это для тех же числомолотилок, которые переливают из предвыделенных буферов в буфера нереальный сценарий


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

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


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

V>>Это зависит от характера вычислений. Например, фильтрация — это крайне примитивные вычисления, там затраты на проверку на границу цикла сопоставимы с полезными вычислениями (сопоставимы потому, что джиттер даже не кеширует в регистре длинну массива, а каждый раз лезет за ней через коссвенную адресацию), и вместо непосредственного приращения указателя каждый раз вычисляет адрес элемента (что вполне понятно, у нас же GC). Итого, мы сможем сделать таких простых вычислений в 2-3 раза меньше.

G>Фильтрация чего?

Ээээ... сигналов.

G>Еще раз нужен быстрый линейный проход по массиву — используйте unsafe.


Да понял, заклинило. Ты им пользовался "по-взрослому", или на форуме тут нахватался? Если последние, то ищи лучше мои посты о предмете и еще об интеропе за последние года 3, т.к. похоже больше меня тут с этим вряд ли кто возился.

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

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

И что сказать хотел? Что на наш двухядерник тысячи конкурентных вычислений мало, надо еще в несколько раз распарралелить и, соотвественно, еще уменьшить гранулярность блокировок? Ты хоть глубину это чуши понимаешь? Вот когда будет отношение кол-ва ядер к количеству конкурентных вычислений хотя бы 1/10, то тогда я шедуллеру с радостью всё и поручу, а пока что, только лишь пересмотрев сценарии и укрупнив гранулярность блокировок, повысил емкость системы раза в полтора (кол-во одновременно обслуживаемых абонентов).
Re[3]: Работа - с чего начать: С++ или С#?
От: shrecher  
Дата: 15.03.09 16:07
Оценка: +2
Здравствуйте, kochetkov.vladimir, Вы писали:

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


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


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


Вероятно, имеется ввиду, что Microsoft непререрывно "улучшает" платформу .net. Постоянно нужно что-то доучивать или переучивать, а это отвлекает от конечной задачи.
Re[5]: Работа - с чего начать: С++ или С#?
От: shrecher  
Дата: 15.03.09 16:21
Оценка: +2
Здравствуйте, MxKazan, Вы писали:

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

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

Заметь, "улучшает" в кавычках. Почему нельзя было сделать один раз, хорошо, и не заниматься переделками и так называемыми улучшениями? Где гарантия, что следующие 2-3 года не выдет новая версия радикально изменяющая предыдущие? Ведь MS — монополист и может навязывать любые условия.
Re[7]: Работа - с чего начать: С++ или С#?
От: shrecher  
Дата: 15.03.09 16: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[3]: Работа - с чего начать: С++ или С#?
От: ononim  
Дата: 15.03.09 17:11
Оценка: +2
_>>Главное что бы работа нравилась, а язык — второстепенен.
_>>C++ используется больше для системных задач и задач, требующих большей эффективности, межплатформенного программирования. А так же теми, кто не любят привычку Microsoft сливать в унитаз свои новые технологии.
MK> Про слив понравилось! Посмотрим как ты напишешь программу на C++ с графическим интерфейсом, но независимую от платформы.
Возьмет wxWidgets или Qt и напишет. А как вы напишете на C# что нить под мак?
Как много веселых ребят, и все делают велосипед...
Re[5]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 15.03.09 17:27
Оценка: :))
Здравствуйте, kochetkov.vladimir, Вы писали:

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

Щас пойдут стандартные мантры: маркетинг, домохозяйки, бла-бла-бла...
Re[2]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 15.03.09 21:53
Оценка: +1 -1
Здравствуйте, gandjustas, Вы писали:

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

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

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

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

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

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

NBN>ембеддед

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

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

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

NBN>шаровары

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

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

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

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

А примеры такого есть?
Re[8]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 15.03.09 22:30
Оценка: +2
Здравствуйте, gandjustas, Вы писали:

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

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

NBN>>ембеддед

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

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

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

NBN>>шаровары

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

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

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

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

G>А примеры такого есть?
Ну к примеру в одном из холиваров рассказывали про серверные решения для дойчебанка. Ищущий — да обрящет.
Нужно разобрать угил.
Re[11]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 09:45
Оценка: -1 :)
Здравствуйте, NikeByNike, Вы писали:

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

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

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

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

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

Что такое "реальная разработка"?
В то разработке с которой я хоть как-то сталкивался доля кодирования+отладки+тестирования гораздо больше 50% была и от трудозатраты языка сильно зависели.
Re[10]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 16.03.09 10:07
Оценка: +2
Здравствуйте, gandjustas, Вы писали:

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

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

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

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


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

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

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

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

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

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

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

Открою тайну. Любой язык чувствителен к квалификации программиста. Говно написать можнео на чем угодно, толко говно на C++ не запуститься или сразу упадет, а говно на .NET можно спокойно сделать чтобы оно не падало, но все равно не будет делать то что надо.
Re[16]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 11: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[15]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 16.03.09 14:55
Оценка: +2
Здравствуйте, MxKazan, Вы писали:

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

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

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

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

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


т.е. на писюки стали ставить макос вместо винды?
Люди, я люблю вас! Будьте бдительны!!!
Re[17]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 16.03.09 15:31
Оценка: +2
Здравствуйте, BulatZiganshin, Вы писали:

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


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

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


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


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

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


я в это не вкладываю какое-то идеологическое наполнение, просто мне не нравится термин "управляемые языки", поскольку ВМ я как раз считаю не самым важной в них вещью. мой опыт программирования говорит, что принципиальна как раз GC, поскольку он позволяет не задумываться о выделении и освобождении памяти и тем самым писать алгоритмы в более высокоуровневой манере. представь себе, что ты в док-ве мат. теоремы описываешь "а здесь мы освобождаем значение x, поскольку оно нам не понадобится в дальнейшем ходе док-ва"
Люди, я люблю вас! Будьте бдительны!!!
Re[19]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 16:06
Оценка: -2
Здравствуйте, gandjustas, Вы писали:

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


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


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


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


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


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


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

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

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

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

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


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

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

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

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

Потому что не сможет
Нужно разобрать угил.
Re[21]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 19:09
Оценка: :))
Здравствуйте, minorlogic, Вы писали:

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


G>>Такая ситуация существует и на практике. Множественные операции выделения-освобождения памяти происходят гораздо бытсрее в коде на .NET, чем в коде на C++.


M>Большая часть "выделения-освобождения памяти" на С++ не затрачивает никаких ресурсов, как может быть быстрее ?


Да ну?
Вым наверное стоит изучить как аллокаторы и GC работают.
Re[23]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 21: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[24]: Работа - с чего начать: С++ или С#?
От: alsemm Россия  
Дата: 17.03.09 09: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[30]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 17.03.09 11:35
Оценка: +2
Здравствуйте, NikeByNike, Вы писали:

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

CC>>Зависит от требований.
NBN>Нашим требованиям — создать лучший продукт. Я бы с радостью на шарпе писал, но он, как и ява недостаточно кроссплатформенны и слишком тормозявы на девайсах, для нашей достаточно сложной программы. Каждого из этих факторов достаточно, чтобы от них отказаться в пользу С++.
Это все понятно. Просто разные проекты — разные требования.
Есть такие проекты с такими требованиями (чаще это не коробочный продукт) в которых С# отлично подходит.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[14]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 17.03.09 14:48
Оценка: +1 :)
Здравствуйте, alsemm, Вы писали:

NBN>>Я писал под брю и его потомков — WIZE и PDK, там было много старого кода на С и не меньше нового на С++, в частности вся гуйня.

A>BREW — та еще радость: watch dog timer, ручная многозадачность, сказка, блин

Ага, я контужен мобильными платформами — с реальной многозадачностью почти не умею работать
Поэтому мне (противоестественно) нравится симбиан.
Нужно разобрать угил.
Re[29]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.03.09 17: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[35]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 18.03.09 08: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>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[3]: Работа - с чего начать: С++ или С#?
От: neFormal Россия  
Дата: 18.03.09 14:38
Оценка: +1 :)
Здравствуйте, dotidot, Вы писали:

D>А в геймдеве в хорошие времена денег не было для разработчиков, а сейчас вообще всё плохо думаю.


Вомгла(tm) захватила православный геймдев..
...coding for chaos...
Re[27]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.03.09 17: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[28]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 18.03.09 18:06
Оценка: +2
Здравствуйте, gandjustas, Вы писали:

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


NBN>>Такое предложение заставляет заподозрить недостаточное владение С++.

G>У меня кроме владения С++ есть еще и владение другими языками.

Я недавно прикинул, что забыл 7 языков (базик, паскаль (7&Delphi), асм, питон, луа, шарп и яву), на которых немного писал в практических целях.
Тем не менее, человек владеющий С++ врядли будет предлагать использовать С, когда можно использовать С++. А если вы владеете С++ недостаточно — то исчезает последняя почва для спора С++ — язык сложный и филиграный и использовать его в качестве лома действительно не стоит.
Нужно разобрать угил.
Re[29]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.03.09 18:15
Оценка: -1 :)
Здравствуйте, NikeByNike, Вы писали:

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


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


NBN>>>Такое предложение заставляет заподозрить недостаточное владение С++.

G>>У меня кроме владения С++ есть еще и владение другими языками.

NBN>Я недавно прикинул, что забыл 7 языков (базик, паскаль (7&Delphi), асм, питон, луа, шарп и яву), на которых немного писал в практических целях.

Если вы на этих языках "писали немного в практических целях", то можно сказать что и не знали их.

NBN>Тем не менее, человек владеющий С++ врядли будет предлагать использовать С, когда можно использовать С++.

Поправочка: знающий С++ и незнающий других, более выкосоуровневых языков.
Я сам считал C++ венцом творения программистской мысли пока не знал ничего другого.
А при таком подходе "когда в руках молоток все вокруг кажется гвоздями".

Много ли у вас кода на C++ (с классами, шаблонами, полиморфизмом, эксепшенами и динамической памятью) в тех местах где нужно высокое быстродействие?

NBN>А если вы владеете С++ недостаточно — то исчезает последняя почва для спора С++ — язык сложный и филиграный и использовать его в качестве лома действительно не стоит.

Вообще сложность C++ такова что его использовать почти нигде не стоит.
Re[35]: Работа - с чего начать: С++ или С#?
От: kuj  
Дата: 18.03.09 22: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[36]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 18.03.09 23:17
Оценка: +1 :)
Здравствуйте, gandjustas, Вы писали:

NBN>>>>Думаю, что на шарпе было бы невозможно обеспечить даже близкое качество)

G>>>"Думаю" — слабый аргумент.
NBN>>Достаточный. Это называется экспертная оценка

G>Ваши высказывания отлично иллюстрирует следующая картинка:

G>http://i41.tinypic.com/30vemo1.jpg
G>ЗЫ. Мопед не мой, привет QBitу

Переход на личности, слив защитан.
Нужно разобрать угил.
Re[43]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 19.03.09 00:02
Оценка: +2
Здравствуйте, MxKazan, Вы писали:

MK>Блин, вот что правда 100 или 200 мегов оперативы сейчас кому-то принципиально? Я когда приводил скриншот с Creative Docs, там еще Оракл светился. Жрал 250 мегов, но при этом он у меня вообще никак не юзается. Я его однажы установил и всё. И вот оно тяпает 200 мегов при запуске и оно нативное. Но чесс говоря, что есть оно, что нет, мне фиолетово. На компе 1 Гиг оперативы. Ххах. А было бы оно managed, наверняка бы и эти 200 мег припомнили


Во времена DOS'а, когда только начали появляться графические и псевдографические интерфейсы, а "мыши" были большой редкостью, в одном журнале прочитал интервью с каким-то разработчиком. Он отвечая на вопрос журналиста об использовании "мышки" в качестве единственного средства управления, ответил: "Если вы делаете "мышь" единственным средством управления, будьте готовы обеспечить им ваших пользователей". Вот, когда мне говорят о дешевых гигабайтах, я всегда эту фразу вспоминаю Не нужно забывать, что техника бывает очень разной, и часто бывает так, что купив ноутбук с распаянными на плате 512 метрами, заапгрейдить его можно только выкинув и купив новый.
Re[37]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 00: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[27]: 2 kuj
От: Erop Россия  
Дата: 19.03.09 08:55
Оценка: +1 :)
E>А что можно сделать в тех самых "нормальных"?

Видимо ты знаешь, что можно сделать? Да? От чего скрываешь?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[30]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 19.03.09 09: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>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[35]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 19.03.09 09:41
Оценка: -2
CC> NBN>>Помогают — облегчают рефакторинг и читаемость кода.
CC> G>Шаблоны улучшают читаемость только в самых простых случаях.
CC> Шаблоны это не только александреску-стайл. С ними можно писать читабельный и удобный код.

Который невозможно сопровождать и отлаживать?
avalon 1.0b rev 146


dmitriid.comGitHubLinkedIn
Re[18]: Что за статистика-то такая волшебная? ;)
От: Erop Россия  
Дата: 19.03.09 10: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[36]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 19.03.09 10:17
Оценка: +1 :)
Здравствуйте, gandjustas, Вы писали:

G>Например при ипользовании ФВП с помощью буста затайпдефить все функции не получися.

Функциональщину на С++ на данный момент я отношу к редкостным извращениям, полагая что если надо функциональщина — лучше взять другой язык.
Появится поддержка functional из С++0х в компилерах — будем посмотреть.
А пока это не для С++.

G>Я видел игры с бюждетом в несколько миллионов рублей, там для программиста работы на пару месяцев.

А ты, эксперт. (С)
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[37]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 10:23
Оценка: :))
Здравствуйте, CreatorCray, Вы писали:

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


G>>Например при ипользовании ФВП с помощью буста затайпдефить все функции не получися.

CC>Функциональщину на С++ на данный момент я отношу к редкостным извращениям, полагая что если надо функциональщина — лучше взять другой язык.
CC>Появится поддержка functional из С++0х в компилерах — будем посмотреть.
CC>А пока это не для С++.
То есть всетаки с++ недостаточно выразительный.
Что и требовалось доказать.

G>>Я видел игры с бюждетом в несколько миллионов рублей, там для программиста работы на пару месяцев.

CC>А ты, эксперт. (С)
Нет, там программист действительно за пару месяцев справился.
Re[35]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 19.03.09 11:36
Оценка: +2
Здравствуйте, Erop, Вы писали:

kuj>>Разработчика, который пытается использовать ВСЮ память надо бить сильно по рукам.


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


Не корми тролля
Нужно разобрать угил.
Re[45]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 19.03.09 18: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[46]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 18: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]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 18:54
Оценка: :))
Здравствуйте, hattab, Вы писали:

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

G>>Только в игрушках может исключение.

H>Скажи, а во что упирается меню в WLW, отзывчивость которого меня жутко печалит (при установке он прогоняется ngen'ом, так что это не JIT)?

Незнаю во что у тебя меню упирается, только что проверил — все летает.
Re[26]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 09:15
Оценка: +1 :)
Здравствуйте, Sheridan, Вы писали:

S>Sinclair wrote:


>> S>В англицком к примеру я не силен.

>> Как же ты живешь-то?
S>Да неплохо в общем то живу.

>> S>В трех словах пожалуйста опиши что там происходит. Насколько я понял — чел добился существенного увеличения производительности, или нет?

>>

...

S>Спасибо. Все правильно написано. Оптимизировать нужно в разумных пределах.

Самое главное

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

Тебе стоит это учесть.
Re[48]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 20.03.09 09: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[24]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 20.03.09 09:51
Оценка: +1 -1
Здравствуйте, Erop, Вы писали:

E>Кроме того, то, что он сразу же искал неэффективным образом (хотя, как я понял, это основная функциональность в проге!!!), говорит о том, что проектировать это дело он и не пытался. А пытался типа написать, потом профильнуть, потом трясти...

Совершенно верно. И это — единственный способ писать хорошие программы.

E>Что бы получилось, если бы он сначала таки подумал как сделать его прогу быстрой, потом это запроектировал, а только потом уже бомбил, не известно.

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

E>Мне так кажется, что 2 секунды для этой программки -- ЭТО ОЧЕНЬ ОЧЕНЬ ОЧЕНЬ ДОЛГО.

Напомню, что цели должны быть ориентированы на потребителя, а не высосаны из пальца. Сколько, по-твоему, должна работать эта программа? Почему?

E>А вот, если в дело вмешиваются клиенты и конкуренты, ситуация несколько меняется...

Читать последнюю строчку в его статье.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[26]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 20.03.09 10:07
Оценка: :))
Здравствуйте, Хвост, Вы писали:
Х>multiset
А он неявно сортирует??? Офигеть. Я как отвык от того, что для множества нужно задавать отношение частичного порядка.
Я надеюсь, уточнение сортировки в Case-insensitive/accent-sensitive для турецкой локали не усложнит эту безусловно прекрасную программу?
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[54]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 20.03.09 12:31
Оценка: +2
Здравствуйте, criosray, Вы писали:

C>Вообще все эти сравнения и пиписькомеренья весьма забавно выглядят.

Забавно, да.
Ну это ты предъявы к зачинщику
Автор: gandjustas
Дата: 19.03.09
предъявляй.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[54]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 12:32
Оценка: -1 :)
Здравствуйте, Хвост, Вы писали:

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

Х>>>ого! тебе осталось сделать совсем небольшой шаг до С++, решайся!
G>>Зачем? Для запредельного перфоманса есть С, для надежного и красивого кода есть C#, F#.
G>>А С++ в этом уравнении места нет.
Х>ну как же, C++ == запредельный перфоманс + надёжный и красивый код
И то и другое неправда.


Х>>>P.S. ну и что ты со своими байтами будешь делать? а как насчёт того чтобы классы на стеке инстанцировать?

G>>Если уж очень надо стеке, то воспользуюсь структурами.
Х>надеюсь ты понимаешь разницу между структурой и классом в дотнете, повторяюсь — инстанцировать классы
Я то как раз отлично понимаю, а вы — видимо нет.

Х>и на посошок, или я проглядел, или ты не ответил на вопрос — сколько у тебя установлено приложений уровня "десктоп", писаных на дотнете?

Сколько установлено — не считал, пользуюсь двумя — paint.NET и Windows Live Writer. Это треть софта, который я ставил и пользуюсь им.
Re[58]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 13:49
Оценка: +1 :)
Здравствуйте, Хвост, Вы писали:

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

G>>Ну если вы так думаете тогда объясните принципиальную разницу между классом на стеке и структурой на стеке.
Х>объясняю, struct в сишарпе ето семантически то что называется POD в С++, т.е. плоская структура данных, ни конструкторов, ни методов, ничего.
В структуре нет методов? Это точно на C#?

Х>Так вот, в С++ в стек можно положить как объект-инстанс класса, так и объект-инстанс POD-структуры, в сишарпе же только второе.

В C++ клас и структура — одно и тоже. В C# — разные вещи.

Вопрос возник видимо из-за непонимания этого факта.
Re[61]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 20.03.09 14:36
Оценка: -1 :)
Здравствуйте, criosray, Вы писали:

C>Отличное от реальности?

изначально разговор был о массиве структур на стеке, ликбез про боксинг/анбоксинг читать не стоило, читал давно, в зелёной книжке.
People write code, programming languages don't.
Re[26]: Работа - с чего начать: С++ или С#?
От: esil  
Дата: 20.03.09 15:02
Оценка: +1 -1
Здравствуйте, gandjustas, Вы писали:

E>>Да это как раз у Вас полнейший неадекват какой-то, постоянное съезжание с темы, ответы на посты в отрыве от обсуждаемого контекста.


E>>Там же написано, что подсказка. Додуматься, что очевидно имелось в виду то, что можно заменить int на произвольный класс, и никакого malloca/free не понадобится, не судьба?


E>>P. S. Даже попкорн полохо лезет под такой некачественный флейм.


G>Думаете нельзя в C# на стеке данные размещать?

G>Вот в Java нельзя, только элементарные типы, в C# есть стурктуры.

G>Не надо показывать свое незнание.


А вот обязательно было в моём утверждении подменять "произвольный класс" на "данные"? Именно это я и имел в виду, говоря про неадекват.
Re[65]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 20.03.09 15:14
Оценка: +1 -1
Здравствуйте, gandjustas, Вы писали:

G>
G>var stackArrayOfStruct = stackalloc SomeStruct[10];
G>


хы, ансейф, вперёд к С++?

просто вот когда дело доходит до новых апи — здравствуй интероп с нейтивом, хочешь массив на стеке — здравствуй ансейф, тот же пэйнт.нет афаир просто насквозь пропитан ансейфом, зачем тогда сишарп? хорошие вещи делаются только в нейтиве, вот тот же пример с выводом строк, для такой забавы как флейм на рсдн и стримы с регекспами не грех использовать, а вот если бы ето была программа промышленных маштабов — скажим анализатор логов, то здравствуй мем-маппед файлы да стейт-машины с отсутствием аллокаций, и писать етона си++ без ifstream и multiset, а не на сишарпе с gc и аллокацией на каждый чих.
People write code, programming languages don't.
Re[29]: Следуй своим же советам!
От: Erop Россия  
Дата: 20.03.09 16:49
Оценка: +1 -1
Здравствуйте, gandjustas, Вы писали:

G>Как будут работать виртуальные методы при размещении объектов на стеке?

Блин, следуй своим же советам! Заботай таки С++, а потом уже критикуй!
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[69]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 20.03.09 17: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[55]: нет, ну если ты настаиваешь... ;)
От: Erop Россия  
Дата: 20.03.09 17:34
Оценка: +1 -1
Здравствуйте, gandjustas, Вы писали:

E>>Нет, ну если ты настаиваешь, что быстрый код ОБЯЗАН БЫТЬ ненадёжным и некрасивым, то да, нет...

G>Если вы изначально занимаетесь быстротой кода, то вряд ли он будет нажедным и красивым. Наоборот — вполне.
Это всего лишь твоё неумение писать быстрый и качественный код...
Мне известны МНОГОЧИСЛЕННЫЕ контрпримеры, так что позволь не поверить твоему голословному утверждению...

G>Я не предлагал C использовать для красивого кода.

Я понимаю. То есть ты предлагал делать быстрый код некрасивой и ненадёжной помойкой?
А зачем? Потому, что С++ освоить не можешь (эта фраза обозначает тоже самое, что и фраза: "С++ слишком сложный") , или какие-то другие причины?

G>Ты как-то очеь интересно говоришь о том что C# позоляет писать хороший код с малыми затратами.

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

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

Про "лучше" -- не ясны критерии, про быстрее — не верю.

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

Ну вот есть такая т. з., что в случае массового потребителя, производительности не хватает практически ВЕЗДЕ. Ну ценят люди скорость...

G>ЗЫ. Ты думаешь на С++ индусы не пишут?

Пишут, конечно, хотя для них уже есть намного более подходящий ХиндиС...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[68]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 20.03.09 17:37
Оценка: :))
Здравствуйте, Erop, Вы писали:

C>>У нас пользователи в госструктурах на компах, которым уже по 2-4 года работают с нашим клиентом на .NET уже больше года в production режиме. Клиент довольно тяжелый: диалоги, графики, отчеты, таблицы, формы — полный комплект. Нареканий на производительность до сих пор не было. "ЧЯДНТ?"


E>Считаешь, что выделенное -- это "тяжёлый клиент".


Да, выделенное это тяжелый интерфейс.

E>Кстати, а данные вы из DB берёте, я надеюсь?


Из БД, вестимо.
Re[69]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 20.03.09 17:46
Оценка: +2
Здравствуйте, Mamut, Вы писали:

Х>> Качественного десктопного софта на C# нет.


M>С одной стороны виноват тот же С++. Потому что legacy и тот же ворд нет смысла переписывать с нуля

M>С другой стороны — а что такое десктопный софт?

Гуглохром например, и легаси нету и работает на десктопе
Re: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.03.09 18:04
Оценка: +1 :)
Здравствуйте, niellune, Вы писали:

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


Хорошая мысль. Воплоти ее в жизнь. А то, твои слова выдают в тебе э... как это по мягче сказать? Ну, не компетентность что ли...

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

Купи себе учебники по C++ и C#. Прочти их. Изучи языки. Потом еще какие-нибудь другие языки изучи (что-нибудь из ФП, например). Когда ты все это сделаешь, то поймешь какую чушь ты тут нес. А на вопрос каким языком пользоваться ты и само тогда ответить можешь.

ЗЫ

И вообще, что это за позиция — устроиться куда-то "на начальную позицию"?
Это значит ты будешь изучать что-то, а тебе за это еще и платить кто-то должен?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Работа - с чего начать: С++ или С#?
От: WolfHound  
Дата: 20.03.09 19:13
Оценка: +2
Здравствуйте, VladD2, Вы писали:

VD>А если серьезно, то уровень дискуссии действительно просто супер. Плинтус горами покажется.

Угу. Люди не знающие .НЕТ против людей не знающих С++.
Смешно читать и тех и других.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[69]: Работа - с чего начать: С++ или С#?
От: alsemm Россия  
Дата: 20.03.09 21: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&amp;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&amp;#6137033

Справедливости ради надо сказать, что пост там про AutoCAD2008. Но вряд-ли AutoCAD2009 что-то изменилось кардинально.

Так что AutoCAD из списка С# приложений вычеркивайте

Алексей
Re[70]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 20.03.09 21:27
Оценка: +1 :)
Здравствуйте, alsemm, Вы писали:

C>>Вы глубоко заблуждаетесь. Лучший тому пример — Microsoft Blend, и AutoCAD, последних версий.

A>Про AutoCAD это еще кто заблуждается:

Интерфейс AutoCAD 2009 написан на WPF (.NET). Не так давно обсуждалось.

Это к слову о "пластилиновости интерфейсов дотнет", как опровержение. И, кстати, для С++ нет аналогов WPF. Так что будущее десктоп софта под Windows таки за дотнет.
Re[70]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 21:44
Оценка: :))
Здравствуйте, hattab, Вы писали:

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


Х>>> Качественного десктопного софта на C# нет.


M>>С одной стороны виноват тот же С++. Потому что legacy и тот же ворд нет смысла переписывать с нуля

M>>С другой стороны — а что такое десктопный софт?

H>Гуглохром например, и легаси нету и работает на десктопе


У гугла столько ресурсов, что они могуть ОС в машинных кодах написать.
И если им будет надо — напишут.
Re[71]: Работа - с чего начать: С++ или С#?
От: alsemm Россия  
Дата: 20.03.09 21:54
Оценка: +1 :)
Здравствуйте, criosray, Вы писали:

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


C>>>Вы глубоко заблуждаетесь. Лучший тому пример — Microsoft Blend, и AutoCAD, последних версий.

A>>Про AutoCAD это еще кто заблуждается:

C>Интерфейс AutoCAD 2009 написан на WPF (.NET). Не так давно обсуждалось.

Почитал ветку. Ну так и правильно, GUI на С++ писать/поддерживать — это overkill, кто бы спорил. Но потроха-то там на c++ как были, так и остались. Из этого следует, то что тут неоднократно утверждалось — каждой задаче свой инструмент. GUI — С#, core — С++

Алексей
Re[72]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 22:02
Оценка: :))
Здравствуйте, alsemm, Вы писали:

A>GUI — С#, core — С++

надо разработчикам blend это рассказать, а то они не знают.

А что такое core ?
Re[72]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 22:56
Оценка: :))
Здравствуйте, Erop, Вы писали:

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


G>>У гугла столько ресурсов, что они могуть ОС в машинных кодах написать.

G>>И если им будет надо — напишут.

E>Не понимаю я вот этого аргумента! Если они такие лохи, что всё делают неверно и неэффективно, то почему у них всё так хорошо?


Гуглу гораздо сложнее будет нанять шатат разработчиков на Java наример, чем написать что-то на C++.
Исторические причины в крупных организациях играют немалую роль.
Re[52]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 23:40
Оценка: +2
Здравствуйте, esil, Вы писали:

E>Верным остаётся одно: на любой дурацкий синтетический тест найдёт столь же дурацкий аллокатор, который этот тест "уделает".

Так тест и был для стандартного аллокатора.
При страндартном аллокаторе операции выделения и освобождения памяти оказались не такими дешевыми как их считали некоторые.
Кроме этого тест и е должен был ничего показать.

E>Лично мне комфортно от того, что можно пробовать строить различные архитекутры, не думая изначально о том, сколько каких мелких объектов где выделяется, потому что в случае чего можно расчехлить тяжёлую артиллерию.

Отличная идея. GC как раз позволяет не думать о выделении и освобождении памяти вообще.
Если производительность окажется недостаточной то надо смотреть причны и бороться с ними.
Причем чаще всего прчиной оказывается применение неподходчщего алогоритма. Очень редко приходится нарываться на ситуацию когда низкая производительность вызвана особенностями платформы.
Re[59]: нет, ну если ты настаиваешь... ;)
От: Erop Россия  
Дата: 20.03.09 23:48
Оценка: +1 -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[55]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 21.03.09 00:54
Оценка: +2
Здравствуйте, gandjustas, Вы писали:

E>>IMHO, такая ситуация, когда для ускорения надо менять алгоритм, часто говорит о том, что проектировали плохо.

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

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

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

G>В реальной жизни приходит заказчик и говорит: "сделайте мне песдато!"

И что за алгоритм вы выбираете в качестве первого приближения в таком случае? Зовёте спецов по ублажению?

Вообще-то я имел в виду, что задачи обычно на подзадачи бьются, а подзадачи обычно имеет более менее стандартные решения... Я как-то не понимаю, если уж есть какой-то алгоритм, то что мешает проверить его на эффективность-то?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[66]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 21.03.09 07:15
Оценка: +2
Здравствуйте, Хвост, Вы писали:

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

По-прежнему неверно.
Даже при размещении массивов структур в хипе никакого боксинга нет.

Х>Теперь по-поводу "подобный пост про тебя", пиши пожалуйста, ведь ето ты будешь писать обо мне как о разработчике на C#, что ещё раз подтвердит мои слова , C# (особенно в версии 3.5) ето очень мощный язык, но для приложений требующих производительности, малой затраты ресурсов, быстрой реакции интерфейса ето просто моветон.

Ну, если писать на нём, не разбираясь в отличиях value-типов от reference-типов — то да. Но это вообще как бы моветон — писать приложение, требующее производительности, не зная при этом технических основ. Уверяю тебя, при аналогичном уровне знаний С++ результирующая программа будет еще медленнее и нестабильнее.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[58]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 22.03.09 20: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[62]: Поздравляю :D
От: Mamut Швеция http://dmitriid.com
Дата: 23.03.09 08:10
Оценка: +2
e> Документ состоит из абзацев. Абзац из "символов".

все дальше поскипано. в тх ж GoF, если мне не изеняет память, описано как надо делать для сложного форатирования и т.п. Никому не нужно иметь на каждый символ по классу/экземпляру класса.
avalon 1.0b rev 146


dmitriid.comGitHubLinkedIn
Re: Работа - с чего начать: С++ или С#?
От: ppp222  
Дата: 16.04.09 07:11
Оценка: -2
Здравствуйте, niellune, Вы писали:

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

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

Возможность есть. Более того, сейчас некоторые девелоперские конторы испытывают кадровый дефицит в области разработчиков на С++. Программистов на С# вежливо разворачивают, при этом интересуясь, а не пишите ли на плюсах?
Области использования плюсов прежние: системное и прикладное программирование. С системным все понятно. Там используется либо С, либо С++. С си шарпом туда дороги нет. В прикладном программировании также есть области, в которых используется исключительно С++. В частности, это CAD, CAM и CAE системы. Некоторые могут возразить, мол, автокад 2009 использует .net. Но это либо от незнания, либо от нечестности. На нете там только пользовательский интерфейс. Элемент, конечно, немаловажный, но отнюдь не ключевой в такого рода системах. Мне лично, кстати говоря, новое меню автокада ужасно не понравилось...

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

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

Не советую. С C# на С++ никогда не перейти. Это два разных мира. Сиди на своей работе пока и долбай прямо в цель — С++.
С# тебя ничему не научит.
Re[5]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.04.09 12:55
Оценка: :))
Здравствуйте, CreatorCray, Вы писали:

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


G>>В это время C++ники все еще воюют с проблемами языка и утечек памяти и пользуются средствами десятилетней давности.

CC>Ты изрядно отстал от жизни.

Вышла новая версия стандарта? Появился сборщик мусора? Код на С++ стал верифицируемым? Появился вывод типов?
Re[35]: Работа - с чего начать: С++ или С#?
От: snautSH Германия  
Дата: 20.04.09 12:39
Оценка: +1 -1
Здравствуйте, Sorantis, Вы писали:

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


M>>>В плюсах нуб просто не взлетит шутка конечно но ...

SH>>тоесть программистом С++ можно только родиться?

S>нет, но стать хорошим с++-ником гораздо сложнее чем СиШарпникомКопипастником.

S>Сам пишу на Шарпе в основном (хотя уже сам не пойму на чем...последнее время сишарп и джава в перемешку с плюсами),
S>до этого писал на плюсах. шарп люблю, но по плюсам скучаю.. вот такой я сентиментальный

так не пойдет. вы сравниваете разные уровни. это все равно что — стать С++ ником копипастником гораздо проще, чем хорошим C# программистом
Re[15]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.04.09 04:25
Оценка: +2
Здравствуйте, ollv, Вы писали:

O> Ну так и есть и ксамл WPF это хорошо иллюстрирует, и плюсам тянуться за гуями, мне кажется, вообще не стоит, за плюсами мегапреимущество в архитектурных и скоростных решениях, за счет высоких абстракций и шаблонов. Гуя же так ил иначе перекочует в XML подобное оформление, кстати при современных фреймворках с парсингом XML тандем его с плюсами мне кажется вполне приемлемым, даже удобным.

Неудачная шутка насчет высоких абстракций. Высокие абстракции, которые создаются в С++, являются костылями.
В большенстве современных языков теже возможности строены в самя изык или стандартные библиотеки.
Re[19]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.04.09 18:04
Оценка: -2
Здравствуйте, criosray, Вы писали:

C>Э-э, классы и объекты в процедурных языках? Шаблоны в Delphi language или VB6?..


А зачем в процедурных то?

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

Если уж речь пошла о фичах, то я с удовольствием погляжу на то чем ты заменишь лямбды с замыканиями (только не надо бустовских уродств, там замыкания не поддерживаются) и паттерн-матчинг.

ЗЫ

Не стоит даже заикаться на счет каких-то там преимуществ С++ в области языковых возможностей и тем более абстракций. Это чушь! Единственное преимущество С++ — это возможность низкоуровневых оптимизаций и относительная дешевизна имеющихся абстракций. Это позволяет, при желании, не хилых усилиях и отсутствии алгоритмических противопоказаний, написать программу обладающую высокой производительностью. Больше преимуществ у этого отсталого языка нет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Работа - с чего начать: С++ или С#?
От: catBasilio  
Дата: 24.04.09 18: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.
и никакие мемори лики не страшны.
UNIX way — это когда тебе вместо туалетной бумаги дают топор, рубанок и карту близлежащего леса
Re[21]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.04.09 18:39
Оценка: -2
Здравствуйте, Хвост, Вы писали:

Х>угу, ты ето говоришь года едак с 2002-го, когда C# был настолько убог что даже твой нелюбимый С++ обходил его с головой.


Начиная со 2-й версии С++ нервно курит в сторонке.
А начиная с 2006-го я вообще перешел на Nemerle до которого C# расти еще лет 10, а С++ уже никогда не дорастет.

Х>покажи как мне выразить такую простую абстракцию: параметр метода — как ссылка на константный объект,


Это чушь а не фича.

Х>или ммм... такую "фичу" как множественное наследование,


Когда есть нормальные средства композиции кода (особенно такие как миксины или макросы) оно не нужно. Оно скорее проблема нежели достоинство.

Х>или скажем, статический полиморфизм, слышал о таком?


О статическом не слышал. О параметрическом слышал. Можешь открыть новую страницу истории и поведать миру о статическом полиморфизме.

В общем, не стоит так напрягаться. Этому гнилью даже новый стандарт не поможет. Кстати, где он? (с)
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.04.09 18: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[8]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 24.04.09 19:05
Оценка: +1 :)
Здравствуйте, gandjustas, Вы писали:

G>ИМХО лучше вместо кривых костылей с самописными GC, "умными" указателями и прочей лабудой использовать нормальные языки.

"нормальные" языки дают оверхед на пустом месте, единственный высокоуровневый язык без оверхедов — С++
People write code, programming languages don't.
Re[24]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 24.04.09 19:36
Оценка: +1 -1
Здравствуйте, gandjustas, Вы писали:

G>Если C++ так хорош, то почему на нем не пишут тысячи бизнес-систем?

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

G>Из игрушек кстати Halo 3 вполне на C#.

Пруфлинк. Могу допустить что там игровая логика написана на C#, но движок — никогда.
People write code, programming languages don't.
Re[23]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.04.09 20:00
Оценка: +1 -1
Здравствуйте, Хвост, Вы писали:

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


Х>>>покажи как мне выразить такую простую абстракцию: параметр метода — как ссылка на константный объект

G>>Всю константность в С++ можно с успехом обмануть,
Х>не понял к чему было про "обмануть", ето тоже самое что грить C# небезопасен потому что есть ансейф
ансейф надо явно писать и можно запретить его запускать.
А попробуй запретить в С++ менять константные объекты.

G>>кроме того константность не является абстракцией

Х>называй как хочешь, но вот то что такой нужной вещи нет в C# ето просто поразительно.
Читать больше надо. От константности отказались как раз в силу сложности обеспечения честной константности.

Х>>>или ммм... такую "фичу" как множественное наследование

G>>Ага, еще скажи что виртуальный базовый класс — нереальная фича
Х>ты начинаешь говорить как заядлый холиварщик, "етого у нас нет потому что можно обойти окольными путями"
Это не надо обходить, этого надо избегать. Множественное наследование реализации является ошибкой дизайна, а множественное наследование интерфейсов и так есть в C#.

Х>>>или скажем, статический полиморфизм, слышал о таком?

G>>Перегрузка методов является одим из видов статического полиморфизма, она есть в C#
Х>перегрузка методов ето скорее ad-hoc полиморфизм, и до статического полиморфизма тут как раком до пекина, а вот статический полиморфизм в с++ ето скорее похоже на утиную типизацию, и заметь ноль оверхеда.
Ты путаешься в понятиях, статический полиморфизм — когда решение о вызываемом методе принимается в момент компиляции.

При наличии рантаймовой генерации кода можно получить все преимущества как статического, так и динамического полиморфизма. И утиной типизации тоже.
.NET это очень хорошо умеет.
Re[20]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 25.04.09 07:26
Оценка: +2
Здравствуйте, 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[6]: Работа - с чего начать: С++ или С#?
От: Silver_s Ниоткуда  
Дата: 25.04.09 15:44
Оценка: -2
Здравствуйте, shrecher, Вы писали:

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


Если массовым софтом считать софт о котором слышали(или щупали) 20% от общего числа юзеров в мире. Над разработкой такого софта трудится видимо меньше 1% от общнго числа программистов. Кому хочется в этот 1% видимо стоит ориентироваться на С++. Хотя, для опытного разработчика знание языка это вобще то мелочь, нужно на порядок больше чем просто знание языка и нескольких небольших универсальных библиотек.
Re[3]: Работа - с чего начать: С++ или С#?
От: Silver_s Ниоткуда  
Дата: 25.04.09 16:51
Оценка: +2
Здравствуйте, VladD2, Вы писали:

VD>Дык вокруг него такой ореол создали, что несколько лет назад плохое слово в сторону дизайна С++ сразу выливалось в анафему высказавшему эту мысль.


Если человек только начал изучать С++ и ему уже C++ больше нравится чем C# значит он только этот ореол и видел. По тому что на поверхностном уровне между этими языками практически никакой разницы.
Или "логическим" путем вывел : если на C++ писать сложнее => значит он круче.
Re[21]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 26.04.09 00: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[20]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 27.04.09 09: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[30]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 29.04.09 08:28
Оценка: +2
Здравствуйте, samius, Вы писали:

S>Тут снова вопрос производительности поднялся
Автор: void29091988
Дата: 29.04.09
.

S>Обращение не конкретно к ГВ, а к тем, кто пожелает защитить честь неуправляемого кода, или просто помочь человеку разобраться с тем, что он делает не так.

Это не сравнение управляемого и неуправляемого кода, а тестирование подсистем ввода-вывода :)
Re[31]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 29.04.09 15:20
Оценка: +1 -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]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 29.04.09 15: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[31]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 29.04.09 18:30
Оценка: -2
Здравствуйте, samius, Вы писали:

S>Если кто так не сделает, то его код будет работать медленнее, чем C++ и ему никак не догнать плюсы по перфомансу, что означает конец карьеры программиста :(


На самом деле, это все (и еще много чего другого) я делаю когда пишу на C++, если надо написать действительно быстрый код. То что Вас это забавляет показывает только то, что с задачами, критичными по скорости Вам сталкиваться не приходилось. Увы...
Re[35]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 30.04.09 08: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[35]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 04.05.09 14:38
Оценка: +1 -1
Здравствуйте, VladD2, Вы писали:

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


VD>Это полнейший лам. Ты ни грамма не ускоришь программу этими глупостями.


Это культура. Если одинаково просто написать ++j и j++, for( int j = count; j-- > 0; ) и for( int j = 0; j < count; j++ ), то при прочих равных надо выбирать оптимальный вариант — это и называется избегать пессимизации кода. Лам — это, с одной стороны, делать такие микрооптимизации в ущерб чему-то более важному, с другой стороны — осознанно на них забивать, типа и так сойдет.
Re[38]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 04.05.09 15:03
Оценка: +1 -1
Здравствуйте, gandjustas, Вы писали:

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


G>Кстати. Твой знакомый работал и никого не беспокоило быстродействие кода, а ты в первую очередь занялся "выпрямлением интерфейсов", что сократило простор для алгоритмической или архитектурной оптимизации.


Нет, мне надо было реализовать некую новую функциональность, в процессе выяснилось, что существующая реализация недостаточно для этого гибка. Поэтому пришлось сделать рефакторинг определенных интерфейсов и модулей. Как побочный эффект выросла и скорость. На ровном по сути месте. Вообще, я не верю в подход — сделай как-нибудь, потом запустим профайлер и посмотрим где тормозит. Скорее всего, окажется, что тормоза равномерно распределены по всей программе. Часто говорят, что о безопасности надо думать с самого начала и всегда, невозможно небезопасную программу сделать безопасной. Вот то же самое, я уверен, можно сказать и о производительности — о ней надо думать всегда.
Re[38]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 05.05.09 17:33
Оценка: +1 :)
Здравствуйте, Геннадий Васильев, Вы писали:

VD>>Нет таких ссылок и быть не может. Потому как это бред. Стоимость вызова микроспопически мала. Ее можно заметить на вызове методов-пустышек в цикле. А их то как раз отлично оптимизирует (инлайнит) JIT.


ГВ>Судя по всему, не всё JIT оптимизирует и не всегда.


Вам не надоело кидаться какашками? Вроде никто не утверждал, что управляемые языки есть серебрянной пулей, но они дают разумный компромис и с учетом того, что компьютерное время все более и более дешево в сравнении с человеко-часами, затрачиваемыми на разработку, будущее — однозначно за управляемыми языками. Более того, я уверен, что нам предстоит еще увидеть полностью управляемые ОС типа Singularity.
Re[40]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 05.05.09 18:16
Оценка: -2
Здравствуйте, Геннадий Васильев, Вы писали:

Продолжим общение, когда Вы смените хамский тон на нечто более цивилизованное.

ГВ>Хм. Уж, по-моему, если у кого резьбу и срывает, то это у хулителей C++. Тебе цитаты привести или сам найдёшь? И вообще говоря, называть рекомендации Microsoft "какашками" — это сильно, да. Учту, что ссылка на MSDN может быть приравнена к хулению.

ГВ>Отлично, очень рад. Кто-то утверждал обратное (обратное "разумному компромиссу", а не "будущему за...", разумеется)?
ГВ>Ну и отлично ещё раз, возьми с полки пирожок. Думаешь, я собираюсь спорить с твоей уверенностью?
Re[33]: Правильная ссылка
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.05.09 22:14
Оценка: -1 :)
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Я имел в виду Part 1.


Собственно, что и ожидалось. Недолямбды в недоязыке.

Of course, if a lambda function object outlives local variables that it has captured by reference, you get crashtrocity.


В прочем, это лучше чем есть сейчас. Лучше хоть что-то, чем ничего.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[35]: Правильная ссылка
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.05.09 22: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 — это недо-лямбда. Что в полне вписывается в концепции недоязыка — плевать на безопасность и удобсво ради производительности.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[37]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.05.09 23:26
Оценка: +1 -1
Здравствуйте, Хвост, Вы писали:

VD>>Ты забыл добавить, что при этом отменяются высокая производительность и некоторые области применения. А как только данные начинают передоваться по ссылке, то здравствуй UB и море багов.

Х>ой ли, ты часто передаёшь лямбды после выхода из scope?

Если ты хотел сказать возвращаешь лябды из функций, то таки — да. Например, весь linq реализован на идее отложенных вычислений и комбинирования лямбд.

Х> как раз таки остутствие гц и возможность захватывать контекст по ссылке обеспечивает экстремальную производительность...


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

А экстремальную производительность обеспечиваеют исключительно применение качественных алгоритмов и библиотек. Отсутствие GC затрудняет создание как первого, так и второго.

Х> (нет боксинга для стековых объектов как в дотнете, ага).


Ого какие слова ты знаешь!
Дело за малым, осталось понять что за ними скрывается и когда он происходит.

Х> Ещё раз, ето юмор такой или что? лямбды в с++ предлагают два варианта захвата контекста,


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

Х>причём можно гибко выбирать что захватывать по ссылке, что по значению. Таких гибких лямбд нет ни в одном языке программирования, назвать ето "недолямбдами" и "ограничением области применения" можно разве только по причине шаблонности мышления.


Да. Ты полностью прав. Такий лямбд нет ни в одном языке. Такое не пришло в голову даже изобретателям весьма экстравогантного Лиспа. Надо было писать стандарт 12 лет, чтобы тупо забить на безопасность и допускать UB в банальном коде.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[39]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 06.05.09 06:56
Оценка: +1 :)
Здравствуйте, Геннадий Васильев, Вы писали:

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


G>>Боксингом мугать никого не надо, для примитивных типов затраты на боксинг минимальны, а более сложные структуры и так передаются по ссылке.

ГВ>Тормозами тоже пугать никого не надо. (<- косность мозга, тузик, тряпка)
Хоспадя, да нет там боксинга. Один ни черта не разбирающийся ляпнул, другой зачем то ответил, третий зацепился...
Re[51]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 13:30
Оценка: :))
Здравствуйте, Геннадий Васильев, Вы писали:

G>>В более сложных случаях, когда требуется GC, подсчет ссылок дает оверхед, как и опциональный GC.

ГВ>Величина этого оверхеда — вопрос с трудно предсказуемым ответом.
Тем не менее он есть.

G>>Не получится сделать в C++ сборщик мусора, сравнимый по быстродействию с .NETовским.

ГВ>Ой, сомневаюсь.
Не сомневайся. Если бы можно было на С++ сделать хороший сборщик мусора, то его давно бы уже сделали.

G>>В итоге пришли к тому же: С++, даже в новом стандарте, позволяет эффективно использовать только подмножество лямбд.


ГВ>Угу, то есть тезис о неполноценности лямбд в C++ снимается повестки дня. Уже что-то.

Ничего не снимается. Лямбды и там и есть неполноценные. Возможность сымитировать полноценные лямбды эту ситуацию не меняют.

ГВ>А то, что там где-то что-то побыстрее, где-то что-то помедленнее — так на то они и разные языки: C++, C#, Java, Haskell... Чтобы где-то выигрывать по отношению друг к другу, где-то проигрывать.

Тут вопрос не только в скорости работы. Имитирование полноценных лямбд будет порождать громоздкий и\или ненадежный код.
Re[52]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 13: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[47]: Работа - с чего начать: С++ или С#?
От: minorlogic Украина  
Дата: 07.05.09 14: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[48]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 14: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[57]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 07.05.09 16:35
Оценка: -1 :)
Здравствуйте, gandjustas, Вы писали:

Х>>какие оверхеды? концепция с++: не плати за то что не используешь,

G>Да ну, а O(n) при выделении и освобождении памяти?
здесь поподробней пожалуйста, что имеется ввиду?

Х>>в случае с с++ лямбдами исполнено на 100%,

G>На 200%, лямбд просто нету Есть только жалкое подобие.
может ты найдёшь определение lambda в интернет и перестанешь нести ахинею?

Х>>в дотнете же оверхеды на ровном месте, т.е. беспричинно, в силу его устройства.

G>А примеры будут? или опять пердение в лужу?
да уж, дотнет действительно замазка для мозга. гц, метаданные, промежуточный код + jit, бесчисленные проверки кода на сейфанутость — всё ето есть даже тогда когда тебе етого не нужно, и ето всё в таком случае — не нужный оверхед.
People write code, programming languages don't.
Re[59]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 16:55
Оценка: +1 :)
Здравствуйте, gandjustas, Вы писали:

Х>>здесь поподробней пожалуйста, что имеется ввиду?

G>Стандартные аллокаторы в С++ требуют прохода по списку свободных блоков памяти при выделении\освобождении, эта операция имеет алгоритмическую сложность O(n). При интенсивных операциях выделения\освобождения работает очеень медленно.

Ключевое слово — пул.

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


Это что-то новенькое. Стандартные аллокаторы как раз вполне работают в многопоточном окружении.

G>Ты прочитай 3 предыдущие страницы. Нормальные лямбды подразумевают лексические замыкания, которых нету и не будет в С++.


Повторение тезиса, как известно, поднимает его истинность в геометрической прогрессии.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[62]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 17: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[63]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 07.05.09 19: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[69]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 19:51
Оценка: +1 :)
Здравствуйте, gandjustas, Вы писали:

G>Вот привели в пример какой-то пост, где с помощью WPF попытались нарисовать туеву хучу объектов. Интересно, на С++ аналогичное вообще заведется? (не говоря о том чтобы поехать)


Ясный пень — программы на C++ падают от одного слова: "туева хуча". Заклинание такое, хуже "мемори лика".
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[66]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 08.05.09 06: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[65]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 08.05.09 13:54
Оценка: -2
Здравствуйте, Хвост, Вы писали:

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


G>>>Твой наколенный непотокобезопасен.

CC>>
CC>>Жжошь!
CC>>Можно узнать с какого перепугу ты так решил?
Х>ну как же, ведь всё что быстрее гц ето заведомо непотокобезопасно и вообще UB
Х>кстати результат гц просто удручает, всего в полтора раза быстрее VC-шного CRT-аллокатора, и ето быстро??? абберация налицо
Мда.. 30% оверхеда на жоступ к массиву это ой какие тормоза (кстати где код?), а в полтора раза быстрее — это "всего".
Вам, батенька, в политику надо. Там двойные стандарты и подтасовки во всю используются.
Re[68]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 08.05.09 14:12
Оценка: -2
Здравствуйте, Хвост, Вы писали:

G>>Ты писал на C#?

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

Замазка Вам явно не помешала бы — чтоб поменьше сквозняков было.
Re[71]: Брависсимо!
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 08.05.09 16:18
Оценка: +2
Здравствуйте, VladD2, Вы писали:

ГВ>>>>Расскажи это лисперам. В лиспе исторически замыкания создавались копированием используемых переменных.

ГВ>>Ну, поскольку я знаю твою манеру ведения дискуссии, то обращаю внимание на слово "исторически". А если точно, то я отсылал к common lisp чёрт-те какой давности. В современных диалектах, AFAIK, это уже не так.
VD>Демагог, есть демагог. Нет никакого исторического наследния CL.

Дык. Наследия нет, а наблюдения очевидцев — есть (см. Э. Ховёнен, Й. Сеппянен, "Мир Лиспа", М.: 1986 — почему-то к этим славным финнам у меня доверия поболе, чем к даже к Грэхему). Это лишний раз доказывает, что интерпретация "единственно правильного поведения" замыкания сильно зависит от.

VD>CL — это стандарт вышедший таким каким он есть.


Диалект под названием "Common Lisp" существовал задолго до принятия стандарта ANSI.

VD>И вообще, твои слова банальная демонстрация некомпетентности. Лисп изначально имел сборщик мусора и стало быть делать урезанные в нем не имело никакого смысла.


ИМХО, очень даже имело смысл делать такие специфические замыкания. Напоминаю об "иммутабельной природе" функционального программирования.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[75]: Небольшая опечатка
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.05.09 20:03
Оценка: :))
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>>>см. Э. Ховёнен, Й. Сеппянен, c, М.: 1986


ГВ>В СССР книга вышла в 1990 г. 1986-й — это финское издание.


Ты бы еще на китайцев сослася бы. Вытянул какую-то бредятину и на ее основании с умным видом вывел целую теорию.

Лексические замыкания в CL появились из Схемы. И было это в 70-е.
Эти фины описывали черти-что сбоку бантик.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[79]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 11.05.09 13:48
Оценка: -1 :)
Здравствуйте, CreatorCray, Вы писали:

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


S>>Я ж написал, что не уверен в случае одноядерной машины. Но что в многоядерной его точно нет. А ты сказал, что все наоборот. Вот и рассказывай нафига интерлокед на многоядерной машине.

CC>Да потому, что интерлокед как таковой только для многоядерной и нужен.

CC>Безотносительно к принципам организации менеджера памяти в .NET


Ненене, вопрос конкретно в том, нафига интерлокед нужен многоядерному GC? Не виляй. Речь шла именно о GC. И "наоборот" писал ты!
Я допускаю, что в случае одноядерной системы я ляпнул что-то не то. Уже дважды написал, что не уверен! Но ты не написал что не уверен, когда писал что все наоборот. Вот давай, объясняйся
Re[76]: Какой угодно? Вообще любой?
От: Qbit86 Кипр
Дата: 11.05.09 14:27
Оценка: +1 :)
CC>Неправильно только одно: зачем на С++ реализовывать такой аллокатор?

Речь шла не об «зачем», а об «какой угодно» и «вообще любой».

CC>Неправильно только одно: зачем на С++ реализовывать такой аллокатор?


Чтобы ускорить аллокацию. В такой модели менеджер будет катастрофически быстро выделять память всегда в конце пула, а не искать в цепочках чанков дыры подходящего размера от освобождённых ранее объектов.

CC>Пользы от него будет меньше чем неудобств.


В C++, очевидно, да.

CC>Более того, зачем его реализовывать как глобальный?


Ок, пойдём на уступки. Не надо глобальный, пусть будет просто аллокатор, удовлетворяющий требованиям из пункта «Allocator Requirements» Стандарта.

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


Во-первых, совсем непросто вычленить такие алгоритмы, да и неблагодарное это дело.
Во-вторых, даже если мы сумели выделить такой алгоритм, мы не можем вызывать функции (в том числе стандартные), которые принимают аргумент по ссылке. (У меня крутятся мысли о том, как это можно было бы обойти, но это очень далеко от «какой угодно» и «вообще любой»).

CC>Еще раз говорю: не надо тупо копировать идеи и подходы из других платформ.


...в платформы, крайне плохо для того предназначенные.
Глаза у меня добрые, но рубашка — смирительная!
Re[3]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 18.05.09 11:15
Оценка: -2
Здравствуйте, Mamut, Вы писали:

V>> То, что делается на C++, на C# в принципе нельзя реализовать.


M>Так как оба языка Тьюринг-полные, то сомнительно


Языки то да. А костыли для шарпа не везде есть и не везде подходят.
См. те же игры, ембеддед/мобилы/покеты и кроссплатформенное программрование.
Нужно разобрать угил.
Re[4]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 18.05.09 11:18
Оценка: +2
Здравствуйте, NikeByNike, Вы писали:


V>>> То, что делается на C++, на C# в принципе нельзя реализовать.


M>>Так как оба языка Тьюринг-полные, то сомнительно


NBN>Языки то да. А костыли для шарпа не везде есть и не везде подходят.

NBN>См. те же игры, ембеддед/мобилы/покеты и кроссплатформенное программрование.

Откройте для себя .NET CF и Mono.
Re[8]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 18.05.09 12:23
Оценка: +2
NBN> M>Мы говорим про монополию или про утверждение
NBN> M>

NBN> M>То, что делается на C++, на C# в принципе нельзя реализовать.
NBN> M>

NBN> M>?
NBN> M>

NBN> В принципе тоже — например: быстрое, кроссплатформенное и полнофункциональное приложение на C#.


Вопрос времени. Огромное количество ниш занято другими языками — от С++ до Явы. Пока что С# в эти ниши только протискивается: от утилит типа iFolder до игр типа The Sims 3, (по слухам), до 3D-редакторов, до jabber-серверов. На Яве тоже вон «было невозможно сделать то же, что на С++», ага. C# идет той же дорогой.
avalon 1.0rc1 rev 239, zlib 1.2.3


dmitriid.comGitHubLinkedIn
Re[37]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 18.05.09 12:27
Оценка: -1 :)
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>А тут нельзя согласиться или не согласиться. Ты сам придумал и сам сделал какие-то выводы. С чем я тут могу соглашаться или не соглашаться?

ГВ>Ну, завелся патефон...
ГВ>Угу, угу — пластинка виниловая, потёртая и трещит.

И Вам сказать по сути нечего? К чему этот пустой трёп?
Re[39]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 18.05.09 12:32
Оценка: -1 :)
Здравствуйте, Геннадий Васильев, Вы писали:

C>>И Вам сказать по сути нечего? К чему этот пустой трёп?


ГВ>Тебе по сути vdimas всё сказал.


Ну если Вы считаете, что vdimas сказал что-то по сути, то вопросов больше не имею.
Re[39]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 18.05.09 12:54
Оценка: :))
Здравствуйте, samius, Вы писали:

S>http://www.google.com/trends?q=c%2C+c%2B%2B%2C+c%23%2C+java&amp;ctab=0&amp;geo=all&amp;date=ytd&amp;sort=0


Ценность данного графика в контесте данного спора близка к нулю
Например, на том же RSDN вопросы по покетам задают восновном в контестке CF. Однако вопросы задают восновном нубы (создают статистику), а профи пишут на С++ (реальность).
Нужно разобрать угил.
Re[18]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 18.05.09 13:45
Оценка: -2
Здравствуйте, VladD2, Вы писали:


VD>Теперь я тебе открою правду о шаблонах.

VD>1. Шаблон — это не более чем синтаксический препроцессор который позволяет во время компиляции подставить что-то вместо плэйсхолдеров. Так вот есть куда более мощьные системы типов (например, система типов Haskell) на фоне которых препроцессор вроде С++ просто меркнет.

С какой это радости система типов более мощная? ИМХО, гораздо более простая, в плане параметрических типов (мощная она по сравнению с Nemerle разве что). Или ты считаешь, что если пользовательские типы ограничить только до алгебраических, то система типов от этого мощнее становится? Она становится проще гораздо и ограниченнее.

VD>2. Есть куда более мощные синтаксические препроцессоры (например, Nemerle и Лисп) которые по возможностям и удобству рвут С++ как тузик грелку. К примеру, я воспроизвел linq из спецификации C# написав два макроса. С++ такое сделать не может в приципе.


И? 99.99% языков такое сделать не могут в принципе, ибо давать дорабатывать компилятор простым программистам — это спорное занятие. Не зря на Лиспе и Форте не так уж много людей лабали.

С# 5/6/7 тоже мочь не будет однозначно, эта фишка "не на каждый день", в массы его вряд ли выпустят.

VD>3. Кроме того шаблоны в С++ были задуманы как средство релизации параметрического полиморфизма. Оных намного лучше реализован почти во всех языках в которых он вообще реализован. И те же дженерики тоже лучше шаблонов за исключением пары неудобств.


Дженерики слабее на порядок примерно, не знаю, откуда ты берешь свое "лучше"? Банально хрен обобщишь алгоритм на float и на double, а тебе от этого лучше. Реально и с размахом эти дженерики используются только по одному назначению — улучшить статическую типизацию, дабы меньше было динамической или тупого боксинга на ровном месте — офигенная, однако, у нас разновидность полиморфизма-то.

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

VD>А уж параметрический полиморфизм в современных ФЯ сделан несравнимо лучше шаблонов С++.


Голословие. Если по возможностям — то так же или хуже (где есть явная специализация — то примерно так же, где нет — хуже). "Лучше" разве что по минималистическому синтаксису всего одного языка. Дык по этому критерию и Немерле — убожество еще то.


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


Ты то отсылаешь к Хаскелю и ОКамлу, то называешь языки без макросов убогими (значит и их тоже). А ведь системе типов Немерле даже до Хаскельной как до луны раком. В общем, более чем сумбурно.

VD>Если же серьезно говорить о метапрограммировании, то С++ тут откровенный лузер, если сравнивать его с такими языками, реализованными поверх дотнета, как Nemerle и Lisp. Вот где МП доведено до высшего пилотажа. Причем оно исходно предусмотрено в языка, а не достигается использованием побочных эффектов системы типов.


Не надо из МП делать священную корову, иногда и просто попрограммировать надо. У вас в том большом реальном проекте доля МП так себе, прямо скажем. А все остальные многие и многие тыщщи строк делать на Лиспе — увольте и в пример больше не приводите.

И что касается макросов, то Лисп тут проигрывает даже Форту, по удобству пользования этой фичей... Так что, отличное вышло у тебя пюре, надо сказать.
Re[35]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 18.05.09 15:44
Оценка: +2
Здравствуйте, vdimas, Вы писали:

S>>А моки вообще не в почете?


V>Что-то слишком много чести им в последнее время... Хотя до сих пор наиболее популярные во всем мире моки — это ручные моки, они же заглушки и этому способу тестирования учат у нас вроде на 3-м курсе.


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


С точностью до наоборот — нормальные моки и стабы генерируются автоматически. т.к. автоматическая генерация исключает возможность допустить ошибку или не учесть чего-то.

V>А так, там где можно обойтись в юнит-тестах классичесскими ассертами — это и синтаксис нагляднее, и проще поддерживать.


Вы вообще не понимаете что такое юнит-тесты. Не надоело показывать неграмотность?

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


Перечень того, что не возможно сделать средствами RhinoMocks + xUnit в студию, как говорится.
Re[36]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 18.05.09 18:49
Оценка: -2
Здравствуйте, samius, Вы писали:

S>Моки и заглушки — разные вещи, использующиеся в разных сценариях тестирования.


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

S>Разве речь о Вас в совокупности с тупым диспетчером сообщений?


Так не меня спросил?
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[31]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.05.09 09:32
Оценка: :))
Здравствуйте, hattab, Вы писали:

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


G>>ЗЫ. Я уже писал в этой теме тест, который меряет выделение памяти стандартным аллокатором. .NET выигрывает.


H>Ты так часто это повторяешь, что скоро и сам поверишь...


Зачем мне верить, у меня результаты тестов есть.

Это вот плюсистам надо верить что их код всегда быстрее.
Re[29]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.05.09 10:20
Оценка: -1 :)
Здравствуйте, vdimas, Вы писали:

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



V>>>Насчет порядка на Ruby? Тебе на заметку — простейший шумоподавитель на .Net работает в 3 раза медленнее, чем на С++, микшер конференции на C# — в 3-5 раз медленнее, чем на С++. Не думаю, что я сильно ошибся относительно Ruby.


G>>1)Ну приведи код на C++ и C#, дающий такой результат. Хотя сомневаюсь что будет C++, будет тупо С, обернутый в класс и никаких шаблонов, STL, полиморфизма.


V>Там и на C# варианте никаких генериков в этом месте, полиморфизма и System.Collection.Generic. Что сказать-то хотел?

То что С++ (именно с плюсами) нах не нужен. Для быстрых числомолотилок берем код на C и нормально зовем его из любого языка. Для более высоких абстракций берем более подходящие языки.
Кроме того уже не за горами запуск числомолотилок на GPU, там тоже высокоуровневые языки будут более уместны, так как позволят генерить код для GPU в рантайме.
Re[34]: Работа - с чего начать: С++ или С#?
От: FR  
Дата: 19.05.09 13:19
Оценка: +1 -1
Здравствуйте, gandjustas, Вы писали:

FR>>Шаблоны и классы нужны, позволяют получить более шустрый код чем чистый си.


G>Пример?


std::sort vs qsort
Re[29]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.09 14:05
Оценка: -1 :)
VD>>Ну, а главное, что есть софт который в условиях ограниченных ресурсов вообще нельзя реализовать на С++ (костьми ляжешь).
NBN>Оно же верно и для шарпа, поэтому я на него так и не перешёл

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

NBN>Игры, кроссплатформенные приложения, некоторые виды миддлеваре


Бредишь?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 19.05.09 14:12
Оценка: +2
Здравствуйте, VladD2, Вы писали:

AB>>Я просто знаком с фанатизмом Влада,


VD>Чья бы корова мычала. Споришь с очевидными фактами и при этом имеешь наглость обвинять других в фанатизме.


Влад, я пришел к выводу, что спор с господами типа Антона Батенева, вдимаса, Геннадия Васильева и т.д. — местных аппологетов С++, это пустая трата времени и сил. Аргументов Вы от них все-равно не услышите, а все даже самые простые факты они буду с завидным упорством отвергать. К тому же спорят-то они о вкусе устриц...

Не тратьте время. Они все-равно будут верить только в то, во что хотят верить. Переубедить их сможет только жизнь.
Re[29]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.09 14:17
Оценка: -2
Здравствуйте, FR, Вы писали:

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


Кстати, рассуждения о любви подкреплены какой-то статистикой или как всегда высасывание из пальца?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 19.05.09 14:20
Оценка: :))
Здравствуйте, samius, Вы писали:

C>>Не тратьте время. Они все-равно будут верить только в то, во что хотят верить. Переубедить их сможет только жизнь.

S>А как же трофеи?

Какашки? Нет, спасибо.
Re[37]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.09 14:34
Оценка: -2
Здравствуйте, FR, Вы писали:

FR>Да ладно меряли уже не раз, даже если писать шаблоный qsort один в один с сишным плюсовый все-равно выигрывает, за счет агрессивного инлайнинга.


Это чушь хотя бы потому, что компиляторы С и С++ — это в большинстве случаев одни и те же компиляторы. По крайней мере лидеры MS и Intel поступают именно так.

VD>>Кстати, на пример C vs. C++ можно можно спроецировать все сказанное о C++ vs. C#. Ведь на С всегда можно написать код не медленнее чем на С++. Проблема только в трудоемкости.


FR>Можно, и кстати не мало пишут, но опять таки разница между C++ и Си тоже не так велика, хотя и больше чем между С++ и шарпом.


Опять вопрос оценок. Я считаю, что ка раз разница примерно сравнима. В одном случае нам дают ООП и обобщенное программирование, в другом компонентность, автоматическое управление памяти, встроенные в язык запросы, полноценные лямбды.

В прочем, важен сам факт, что ты согласился по существу и оспариваешь только коэффициенты влияния.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[40]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 19.05.09 14:38
Оценка: +1 -1
Здравствуйте, VladD2, Вы писали:

VD>От размеров конечно зависит. Чем больше проект, тем менее рентабельно реализовывать его на С++. От сферы не зависит.

ИМХО чушь. Чем крупнее проект, тем меньше значение какого-то конкретного высокоуровневого языка. А уж разница в скорости разработки конечного продукта вообще становится малоактуальна по сравнению с другими факторами.
Нужно разобрать угил.
Re[41]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.09 14:52
Оценка: -2
Здравствуйте, NikeByNike, Вы писали:

NBN>ИМХО чушь. Чем крупнее проект, тем меньше значение какого-то конкретного высокоуровневого языка. А уж разница в скорости разработки конечного продукта вообще становится малоактуальна по сравнению с другими факторами.


Чушь — твое ИМХО. От уровня языка зависят и проектные решения, и объем кода который требуется написать, отладить и документировать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[29]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 19.05.09 16:02
Оценка: +2
Здравствуйте, hattab, Вы писали:

VD>>Из этой предпосылки можно сделать вывод, что если написать компилятор, скажем, С на Руби, то получаемые программы будут иметь "в определенном смысле" (не знаю что за этим скрывается) скорость Руби (т.е. будут тормозными).


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

Из чего сделано выделенное предположение?
Что мешает компилятору на Руби выдавать под LLVM, или сразу в машинные инструкции?
Re[33]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.05.09 16:59
Оценка: -1 :)
Здравствуйте, vdimas, Вы писали:

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


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

G>>Для числомолотилок оно и не нужно.

V>Во-первых, ты так и не объяснил мотивы, во-вторых, без нормального инлайна любая числомолотилка отсосет. Вот возьми класс complex, не представляю себе код для него без переопределённых инлайн операций. Вызывать что-ли ф-ии типа complex_add_double(arg1, arg2)? Это будет уже не числомолотилка, а тормозилка.


Если complex_add_double — макрос, то будет умеренно быстро с любым компилятором, кроме того никто не запрещает брать современный C++ компилятор и отключать манглинг для экспортируемыхметодов.
А мотив очень простой. Голый C интеропается с программой на любом языке. Если не использовать динамическое выделение памяти, указатели, наследование, полиморфизм и шаблоны и прочую высокоуровневую лабуду, то пропадают все проблемы, присущие C++.
Кроме того, повышается переносимость кода. При удачном стечении обстоятельств можно взять код на С и запустить его на видеокарте с помощью CUDA.
Re[43]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 20.05.09 06:30
Оценка: :))
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Группа маленьких модулей логически объединена в общий модуль, с которым программа работает через некоторый интерфейс. Этот сборный модуль тестируется отдельным набором тестов... Как называется это тестирование?


Если предположить, что ты общался с запрограммированным искуственным интеллектом, то этим вопросом ты разрушил его электронный моск.
Не знаю, что произойдет в случае с criosray.
Re[44]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 20.05.09 08:07
Оценка: :))
Здравствуйте, vdimas, Вы писали:

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


Рассмотрю предложение на вакансию Тьюринг-тестера.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[29]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.05.09 13:45
Оценка: :))
Здравствуйте, vdimas, Вы писали:

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



G>>Это C++ники так пишут код на шарпе. Не надо так писать. Пишите нормально i<data.Length и будет счастье.


V>А мне надо именно i<buffLen.

ССЗБ.

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

Как это "априори неизвестен"? покажи мне API которые возвращают "незивестно сколько данных".

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


V>Если я правильно тебя понял, ты предлагаешь выделить память и тут же навсегда запинить. А вот все соккеты работают через кратковременный пиннинг буферов, и, если я держу постоянно запиненными несколько тысяч буферов, то мои соккеты начнут тормозить (оно так и есть, кстати).

В таком случае надо большие буферы выделять в саом начале и кратковременно их пиннить. Известный рецепт.

V>>>Это зависит от характера вычислений. Например, фильтрация — это крайне примитивные вычисления, там затраты на проверку на границу цикла сопоставимы с полезными вычислениями (сопоставимы потому, что джиттер даже не кеширует в регистре длинну массива, а каждый раз лезет за ней через коссвенную адресацию), и вместо непосредственного приращения указателя каждый раз вычисляет адрес элемента (что вполне понятно, у нас же GC). Итого, мы сможем сделать таких простых вычислений в 2-3 раза меньше.

G>>Фильтрация чего?

V>Ээээ... сигналов.

Ну если это FIR-фильтрили что-то в том роде, то не думаю что накладные расходы доступ по индексу окажутся значимыми по сравнению с наложением фильтра.

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

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

V>И что сказать хотел? Что на наш двухядерник тысячи конкурентных вычислений мало, надо еще в несколько раз распарралелить и, соотвественно, еще уменьшить гранулярность блокировок? Ты хоть глубину это чуши понимаешь?

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

V>Вот когда будет отношение кол-ва ядер к количеству конкурентных вычислений хотя бы 1/10, то тогда я шедуллеру с радостью всё и поручу, а пока что, только лишь пересмотрев сценарии и укрупнив гранулярность блокировок, повысил емкость системы раза в полтора (кол-во одновременно обслуживаемых абонентов).

Ты лучше пересмотри свой взгляд на создание высоконагруженных систем. Например с либой типа CCR можно вообще без блокировок обходится при любом количестве входящих запросов
Re[10]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.05.09 14:14
Оценка: +2
Здравствуйте, Anton Batenev, Вы писали:

AB>З.Ы. Да, я знаю, что это удар ниже пояса, но хотелось ответить по теме и без эмоций.


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

В общем, сплошное ламерство и не умелая демагогия с твоей стороны. Постыдился бы.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[34]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 20.05.09 20:20
Оценка: +2
Здравствуйте, samius, Вы писали:

S>У нас соотношение managed/native порядка 250/1. Интеропа почти нет.


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


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


Во-первых, один в один не всегда просто переписать, в нашем случае мессейджинг на ГЦ немного развязывает руки и всё упрощает.
Во-вторых, ускорение этого или другого подобного кода в 1.5 раза не прибавит и 1% общей производительности, т.к. этот код выполняется относительно редко, в моменты изменения состояний канала. И хоть такие изменения в независимых каналах происходят в нагруженной системе хаотично несколько раз в секунду, это все-равно очень редко.
В-третьих, если кусок кода после переписывания не ускоряется хотя бы вдвое, то я его оставляю до лучших времен.
В-четвертых, мне приходилось переписывать даже некоторый нативный код (над кодеками работал) для получения всего 20%-25% выигрыша, и оно того стоило.

----------
В общем, топик был про C# vs С++, я считаю полезным и то и другое. Из дотнета можно черпать мощь библиотек, из нейтива — мощь железки, сочетать с умом, и будет всем щастье.
Re[3]: Работа - с чего начать: С++ или С#?
От: Pepel Беларусь  
Дата: 21.05.09 12:06
Оценка: :))
Здравствуйте, gandjustas, Вы писали:

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


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


G>Сильных проверок чего?


типов проверок !!!! ЧЕГО ..
мощная статическая проверка типов ..это 0 который делает из 1 десятку
Re[4]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 21.05.09 12:25
Оценка: :))
Здравствуйте, Pepel, Вы писали:

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

Dildo Framework, Vegetable Edition

P.S. Пардон...
Re[4]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 21.05.09 12:36
Оценка: +1 -1
Здравствуйте, Pepel, Вы писали:

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


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


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


G>>Сильных проверок чего?


P>типов проверок !!!! ЧЕГО ..

P> мощная статическая проверка типов ..это 0 который делает из 1 десятку

A a;
B* b = (B*)((void*)&a)

Где тут сильные проверки?

Лучше сразу напиши что был неправ иначе заклюют.
Re[5]: Работа - с чего начать: С++ или С#?
От: Pepel Беларусь  
Дата: 21.05.09 15:08
Оценка: :))
Здравствуйте, Mamut, Вы писали:

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


P>> G>Сильных проверок чего?


P>> типов проверок !!!! ЧЕГО ..

P>> мощная статическая проверка типов ..это 0 который делает из 1 десятку

M>Нет в С++ мощной статической проверки типов. С++ — это слаботипизированый язык со статической типизацией


вы гдет надергали каких т стереотипных лозунгов, спорить какт бесполезно

приговариваетесь к пожизненному чтению <The C++ Programming Language by Bjarne Stroustrup> с .. заменой на 3-х годичную установкe мелкософтовых патчей к MS.NET Framework

а человеку данную ветку родившему, по итогу все таки скажу не важно с чего вы начнете, с delphi к слову начинайте, и еще смотря как вы дальше планируете хлеб добывать :

— будете на себя работать — С++ в руки
— на контору планируете идти — шарп
Re[20]: Работа - с чего начать: С++ или С#?
От: -MyXa- Россия  
Дата: 22.05.09 16:05
Оценка: -2
Здравствуйте, criosray, Вы писали:

C>Здравствуйте, -MyXa-, Вы писали:


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


C>А необходимость возникает только тогда, когда продакшн билд начинает течь, как дырявое решето?


criosray, будьте, пожалуйста, повнимательнее, даже и в КСВ. Я этого не писал.

Вы вот мне лучше скажите — код, который находится этим запросом — его писали нормальные программисты или индусы (всё-таки не хочется делать далеко идущие выводы о языке на основе кода последних)? Если нормальные, то о какой высокоуровневости может идти речь? Тут как раз и получается "а здесь мы освобождаем значение x, поскольку оно нам не понадобится в дальнейшем ходе док-ва" (С) BulatZiganshin. В С++ подобного кода нет и не надо никогда.
Если не поможет, будем действовать током... 600 Вольт (C)
Re[13]: Работа - с чего начать: С++ или С#?
От: Anton Batenev Россия https://github.com/abbat
Дата: 22.05.09 16:21
Оценка: +1 -1
Здравствуйте, VladD2, Вы писали:

VD> Хамский тон? Дык я со всеми говорю тем тоном который они зауживают. Ты не стоишь того, чтобы проявлять к тебе уважение.


Определенно кучно пошло Однако, это твоя обычная манера ведения разговора.

VD> Да причем тут мастер-класс? Я о другом говорил.


А кто же спрашивал про мастер-класс? Инопланетяне?

VD> Я не вижу никакого отношения между твоим ламерством в обсуждаемых вопросах и нашим сайтом.


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

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


Только после того, как РСДН (хотя можно и Янус) будет переписан на немерле под рантаймом моно — так чтобы в споре оставался только один теорэтик

VD> Тебе должно быть стыдно за свое ламерство и ту дерьмовую демагогию что ты тут разводишь.

VD> В прочем, понятие совести для таких как ты вряд ли применимо, а значит разговоры о совести бессмысленны.

Ты бы сначала в своем глазу бревно нашел
avalon 1.0rc1 rev 244, zlib 1.2.3
Re[39]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 22.05.09 18:59
Оценка: -1 :)
Здравствуйте, vdimas, Вы писали:

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


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


V>Я тебя уже спрашивал, почему именно С, ты так и не смог предметно объясниться.

Еще раз обясняю. C — потому что низкоуровневый и быстрый. Там где нужны более сложные абстракции лучше юзать более безопасные языки, чем C++.
Re[9]: Работа - с чего начать: С++ или С#?
От: romangr Россия  
Дата: 25.04.09 04: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[39]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 04.05.09 13: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=&amp;showtopic=67951&amp;view=findpost&amp;p=2650476

Или я чего-то совсем не понимаю, или вот...
Re[64]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 07.05.09 19:16
Оценка: 3 (1)
Здравствуйте, COFF, Вы писали:

COF>Да уж, такое впечатление что дотнетчики живут в каком-то виртуальном мире, навеянном рекламными проспектами — в мире где нет утечек памяти, где программы летают, а критерием хорошести языка является то, насколько он поддерживает лямбды

С лямбдами однозначно лучше чем без них. Уверен, что если у дотнетчиков резко отнять лямбды и, следовательно linq, они пойдут революцией против M$!
COF>В конце-концов, ну не было в C++ лямбд — ну и черт с ними, вполне можно без них прожить. Что народ к ним привязался?
А кто спорит? Можно. Можно прожить и без рекурсии, и даже без виртуальных методов.

COF>А вот в C# нет деструкторов и переопределения операторов присваивания, например.

Очень много желающих добавить в дотнет что-то. Например, паттерн-матчинг. И очень мало желающих вставить в дотнет деструкторы и операторы присванивания. Они почему-то нужны только C++-никам.
COF>Я конечно понимаю, что если чего-то нет в текущей версии C# — это не нужно, а если чего-то нет в C++ — это плохой дизайн языка, но все же
В C# тоже многого нехватает. Те, кому этого очень сильно не хватает, используют Nemerle и F#.
Re[70]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 19:59
Оценка: 3 (1)
Здравствуйте, Геннадий Васильев, Вы писали:

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


G>>Вот привели в пример какой-то пост, где с помощью WPF попытались нарисовать туеву хучу объектов. Интересно, на С++ аналогичное вообще заведется? (не говоря о том чтобы поехать)

ГВ>Ясный пень — программы на C++ падают от одного слова: "туева хуча". Заклинание такое, хуже "мемори лика".
Не, такие программы на С++ просто не появляются.
Re[37]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.05.09 20:17
Оценка: 3 (1)
Здравствуйте, vdimas, Вы писали:

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


S>>Моки и заглушки — разные вещи, использующиеся в разных сценариях тестирования.


V>Садись, два.

V>Роутеры и маршрутизаторы с этой же точки зрения тоже разные вещи, использующиеся в разных местах сети.

http://www.martinfowler.com/articles/mocksArentStubs.html — курить до просветления.
Как провсетление наступит можно выложить сюда реализацию моков на С++
Re[33]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.09 12:51
Оценка: 3 (1)
Здравствуйте, IID, Вы писали:

IID>Не уводите тему в сторону. Мы сейчас рассуждаем только о скорости получившегося кода.


А тебе о скорости получаемых приложений. Она определяется не только, да и не столько скоростью выполняемого кода сколько качеством и скоростными характеристиками используемых алгоритмов.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[23]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 17.03.09 11:05
Оценка: 2 (1)
Здравствуйте, sergey2b, Вы писали:

S>Скажите пожалуйста на каких компиляторах вы тестировали и если это VS начиная с какой версии компилятор/crt нет проблем с фрагментацией.


У шестёрки в первых версиях был галимый аллокатор, точно помню...
Нужно разобрать угил.
Re[23]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 17.03.09 11: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>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[26]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 17.03.09 18:10
Оценка: 2 (1)
Здравствуйте, CreatorCray, Вы писали:

CC>Если не забуду то приволоку завтра тул, который карту строит — поиграешься, посмотришь.

Тут: http://creatorcray.googlepages.com/MemMon.rar

Гуй в нем делался на скорую руку бо сильно нужны были результаты замеров.
вкратце основные кнопы:
+- — зум
курсорные стрелки + ins/del — перемещение.
В силу особенностей перехвата работает не до абсолютной смерти проги, отключается несколько раньше, но позже завершения main.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[28]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 18.03.09 00:56
Оценка: 2 (1)
Здравствуйте, hattab, Вы писали:

H>Чего-то не запустилась у меня Вообще по тихому, ни сообщений, ни записей в евентлоге. Windows XP SP3.

Там просто если ICC считает что твой проц не поддерживает нужные фичи то он делает printf и exit
Прога не консольная, посему в консоль ничего не пишет, а printf этот происходит до winmain.
Выложил собранные без оптимизаций вообще. Вообще удивлён что сей сурс собрался с первой попытки и даже без ворнингов, как никак года три ему наверное, и кинут был на полпути.
У меня самый старый комп что могу найти это P4 820, на нем работало и в первом случае.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[24]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 20.03.09 08: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[39]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 20.03.09 14: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[32]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 25.04.09 10:32
Оценка: 2 (1)
Здравствуйте, Anton Batenev, Вы писали:

AB> M> Чектого определения нет. Обычно просто обозначает высококачественную игру с большим бюдэетом.


AB> А предполагается, что качество напрямую коррелирует с размером бюджета?


Неа Тут все типа вилами по воде. Если игра огромнобюджетная + качественная + «не провалилась в прокате» (по аналогии с фильмами ), то это — ААА
avalon 1.0b rev 146


dmitriid.comGitHubLinkedIn
Re[26]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 26.04.09 07: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[30]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 05.05.09 17:29
Оценка: 2 (1)
Здравствуйте, Sinclair, Вы писали:
ГВ>> C++ предполагает три различных способа передачи параметров: значение, ссылка, указатель. "Нормальные" замыкания, судя по твоему высказыванию — это только ссылка, контролируемая GC.
S>Нет, это "только ссылка". Потому что семантика передачи ссылки принципиально отличается от передачи по значению, и именно она нужна. GC — второстепенная деталь реализации, без которой всё вместе трудно заставить работать.
спасибо, Капитан, за ликбез про семантику, а "мужики то не знали". Только с чего ты взял что нужна именно она? С++ предоставляет вариант — замыкать контекст по ссылке или по значению (кстати некотороые из lisp'ов таки замыкания реализуют через копирование, ага). Очевидно ето плюс, т.к. программист не ограничен "единственно правильным решением".

ГВ>> Я не хочу сказать, что такая точка зрения не имеет права на существование, но это никак не противоречит копированиям и прочим тра-ля-ля.

S>Геннадий, не надо придуриваться. Есть общепринятая трактовка замыкания, в которой замыкается полный лексический контекст. И плюсы не в состоянии обеспечить реализацию этой трактовки. А говорить "вот мы изобрели некоторое малополезное подмножество вашей функциональности, и назвали его точно так же, как полное — вот вам и замыкания" — это нечестно.
не надо выдумывать, в новом с++ именно замыкание, аргументов против так и не увидел, разве отсутствует "замыкание на полный лексический контекст", али что?
People write code, programming languages don't.
Re[32]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 06.05.09 03: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[68]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 07.05.09 19:24
Оценка: 2 (1)
Здравствуйте, Хвост, Вы писали:

Х>... я написал в ответ на сообщение samius'а, в котором написано что структуры, попадающие в scope лямбды никогда не лежат на стеке, так как всё-таки верно? если верно второе то ето вообще удивительно, получается что там где в C# вызывается лямбда стековых структур не может быть в принципе, а ето просто неимоверный оверхед.

Не совсем верно. Лямбда не исключает стековых структур. А лексическое замыкание переменных (структур в том числе) реализуется через размещение переменных в классе, который в хипе.
Оверхед — да. Неимоверный — смотря для чего. Хочешь выжать пару тактов — забудь про лямбды и занимайся ручным инлайнингом. А в общем случае — удобно и красиво.
Re[72]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 08.05.09 04: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[26]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 20.05.09 07:02
Оценка: 2 (1)
Здравствуйте, gandjustas, Вы писали:

G>Проснись, оптимизация дотупа к массивам давно сущесвует.


То, что ты привел, работает только для i<array.Length, а это для тех же числомолотилок, которые переливают из предвыделенных буферов в буфера нереальный сценарий. Я уже как-то писал на эту тему, но могу еще раз.
uint[] data = _data;
for(int i=0, e=_buffLen; i<e; i++)
{
  SomeProccess(data[i]);
}

_data и _buffLen — члены класса, data и buffLen — локальные переменные, на них нет ссылок по ref, а из алгоритма видно, что значения неизменяемые в теле цикла, поэтому проверить можно buffLen лишь однажды при инициализации цикла, а затем уже не проверять границы. Однако, эту оптимизацию не делают.

G>Если нужет произвольный быстрый доступ, то есть unsafe.


Если использовать пиннинг — то тормозно (чем больше одновременных пинов, тем дороже каждый следующий), если же самостоятельно выделять память через всякие Marshal.AllocXXX, то смысл в управляемой платформе вообще исчезает, да и проблемы с ClickOnce для unsafe сборок. Вывод сделаешь сам.


G>Что касает числомолотилок, то в самых тупых линейных случаях (как md5 например), при использовании uncheked, .NET будет проигрывать на проценты. Что в реальной программе погоды не сделает.


Это зависит от характера вычислений. Например, фильтрация — это крайне примитивные вычисления, там затраты на проверку на границу цикла сопоставимы с полезными вычислениями (сопоставимы потому, что джиттер даже не кеширует в регистре длинну массива, а каждый раз лезет за ней через коссвенную адресацию), и вместо непосредственного приращения указателя каждый раз вычисляет адрес элемента (что вполне понятно, у нас же GC). Итого, мы сможем сделать таких простых вычислений в 2-3 раза меньше.

G>Кроме того такие случаи элементарно оптимизируются заменой на Сшный код или распараллеливаются (в .NET далется очень легко).


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

G>ЗЫ. Я ещ не упоминул такие оптимизации, которые делает mono. См Mono.Simd


Спасибо, интересно. На С++ мы делаем разные сборки для без SSE, и отдельно для SSE1/2/3, которые будем подгружать динамически, в зависимости от возможностей проца. Если джиттер научится делать это сам, то кое-что можно будет пересмотреть. Однако, вот тот доступ к массивам — это затык №1 для нас, ибо обычные вычисления действительно неплохо выглядят после джиттера.
Re[30]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 20.05.09 20:20
Оценка: 2 (1)
Здравствуйте, MxKazan, Вы писали:

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


V>>Тогда встречный ликбез для тебя: рантайм и основные .Net сборки (mscorlib, System) постоянно обновлялись после выхода второго фреймворка (когда я говорю второй фреймворк, то это именно релиз Microsoft .Net Framework 2.0, который действительно 2.0.50727). Одни из самых заметных обновлений рантайма, пришедшее с .Net 3.0 — это доработка GC, самое заметное изменение сборок версии 2.0.50727, пришедшее с .Net 3.5 — это интерфейс класса Socket из System.dll. А так по мелочи доработок была куча (начни от ссылки в пред. посте), от внутренних кишок System.Data, до дублирования и переноса по неймспейсам объявлений наиболее популярных интеропных COM структур и интерфейсов.

И для порядку, так сказать:

из презенташки Микрософта по 2010-й Студии...
Re[32]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 22.05.09 08:27
Оценка: 2 (1)
Здравствуйте, vdimas, Вы писали:

V>Как насчет параллельного расчета многих задач, т.е. код один и тот же, но нужны сотни одновременных потоков, обрабатывающих свои данные этим кодом (например, это будут аудио-кодеки).

А там как раз такой принцип и есть: грубо говоря много простых процессоров, одновременно выполняющие одну и ту же программу но каждый на своем наборе данных.
Скачай SDK и почитай доки из комплекта. Станет ясно как оно работает и как надо раскладывать задачи на железо.

V>Какой примерно выигрыш?

Зависит от алгоритма и имплементации. В сравнении с C2D 2.2 у нас некоторые расчеты отрабатывали в раз 20-30 быстрее. Но это финрасчеты.

V>Какое железо и тулы посоветуешь?

У нас CUDA SDK 2.1 и Tesla C1060
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[25]: П как правильно?
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.05.09 22:36
Оценка: 2 (1)
Здравствуйте, Erop, Вы писали:

VD>>Погугли и почитай, что за бред там пишется. Все про С++. Это локальная терминалогия отдельных идиотов. Научного понятия статического полиморфизма нет. Есть статическая типизация и разные виды полиморфизма. Но любой из них может отрабатывать в рантайме.


E>А как называется сод, вроде std::sort, который можно натравить на данные разного типа, удовлетворяющие каким-то формальным требованиям, и получить соответсвующий результат?


Параметрический полиморфизм и утиная типизация.

E> Пусть члово полиморфизм не годится. Какое таки годится?


Слово "полиморфизм" годится. Только тип используемого в шаблонах С++ полиморфизма называется "параметрическим".
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[34]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 27.05.09 16:38
Оценка: 2 (1)
Здравствуйте, Sinclair, Вы писали:



V>>Ансейф без пиннинга никак, а насчет пиннинга отсылаю к своим сообщениям чуть выше или к статье по твоей ссылке.

S>Так штука в том, что сеть вообще без пиннинга никак — даже если сам его не делаешь, запись в сокет автоматически пинит буфер за тебя. Поэтому ансейфом больше/ансейфом меньше — особенной роли не играет.

Правильно, поэтому мы используем класс Socket только для инициализации (бо удобно очень), а потом берем хендл, и по UDP работаем не через класс сокета.


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

S>Не очень понятно, где там будет экономия — как только в цикле осталось только одно обращение к массиву, дальше начинается математика, и никаких указателей не остаётся.
S>Значит, джит лажает в математике, а не в указателях и GC.

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


V>>Учитывая, что голосовой буффер — это вполне счетное кол-во сэмплов (обычно 160 или 320), то неплохо на С++ на шаблонах смотрится раскрутка цикла "в плоскость".

S>Ну, это верно. Шаблоны и раскрутка на С++ — это просто классика кун-фу.
S>Опытные падаваны делают это на шарпе вручную с ансейфом (ковыряния рефлектором в районе System.String и System.Array дают порой потрясающие впечатления).

Разве не проще на С/С++?
Согласен, для первого такого случая это же так муторно: надо еще один проект создать, в нем файл export.def, завести у себя класс NativeMethods
Зато каждый следующий случай добавляется за считанные секунды без этих "звездных войн". По крайней мере отдача адекватна вложенному результату.

S>Путь джедая — это разработка обобщенного фреймворка развертки циклов в рантайме. Путь полного джедая — это, конечно же, доработка этого обобщенного фреймворка до развёртки циклов в GPU


Ха-ха по последнему.
Это должен быть путь не одинокого джедая, а как минимум серьёзного коллектива, т.к. сами оптимизации/развороты и прочее хоть и просты каждый в отдельности, но их охренительное кол-во, т.е. база знаний должна быть приличная.



S>Да это всё более-менее понятно. Можешь привести код такого фильтра, чтоб стало понятнее, куда оптимизировать?


нерекурсивный примерно такой (без оптимизаций):
// смещаем окно вдоль последовательности
// развернутый вариант
for(int i=0; i<buffLen-windowN; i++)
{
  float result = 
        array[i] * С1 +
        array[i+1] * С2 +
        ...
        array[i+N-1] * СN;
}


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

Рекурсивный более скромен в плане ресурсов:
// мемберы, линия задержки
float _z1;
float _z2;
float _z3;
flozt _z4;
...
for(int i=0; i<buffLen; i++)
{
    _z4 = _z1;
    _z3 = _z2 * C3;
    _z2 = _z1 * C2;
    _z1 = array[i] * C1;
    float result = z4 * C4 + _z1;
}



S>И как результат сравнения? Дает ли переход в ансейф прирост? Насколько переход в нейтив бъет ансейф?


Дабы не разбрасываться голословно, подготовлю и выложу тесты.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[12]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 15.03.09 21: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[18]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 16.03.09 20:16
Оценка: 1 (1)
Здравствуйте, ameshkov, Вы писали:

A>Ну раз такая пьянка пошла, я тогда против огульного охаивания VB и приравнивания его к... ну пусть к Дельфям

Я тоже. Делфи круче. Ваше здоровье !
Re[32]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 19.03.09 08:21
Оценка: 1 (1)
Здравствуйте, hattab, Вы писали:

H>Ага, заметил некоторые траблы с использованием.

Там траблов на самом деле еще много Например никак не делалась обработка динамически подгружаемых DLL и т.п.
Писалась "под задачу" и "надо вчера", потому остановилась на этапе как тока на требуемом exe стала показывать результаты аллокаций.

H> Но вообще, интересная софтинка

Надо будет как нить ее доделать. Там самое полезное — DLL. EXE занимается инжектом DLL в процесс, приемом от нее данных с записью в файл и потом показ намерянного.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[24]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 20.03.09 06:28
Оценка: 1 (1)
Здравствуйте, Хвост, Вы писали:
Х>немного непонятно что ты в етой задаче нашёл такого "сложноописуемого" на с++
Не вижу сортировки по алфавиту.

Кстати, про С# и прочее. Немного другая задача, но похожая: здесь
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[26]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 24.04.09 20:02
Оценка: 1 (1)
Здравствуйте, criosray, Вы писали:

C>Здравствуйте, Хвост, Вы писали:


G>>>Почему самые высоконагруженные сайты написаны не на С++?

Х>>для сайтов легче купить несколько серверных стоек, чем заплатить программистам на С++ выше рынка, к сайтам скорее требование к масшабированию чем к производительности, хотя в гугле и в яндексе афаик ядро поиска написано на С++, наверное потому что им уже есть резон економить на серверах.
C>Откуда информация? Дайте ссылку на авторитетный источник.
про гугл с ходу не нашёл, а яндекс дык http://company.yandex.ru/inside/job/ раздел "Разработчики"
People write code, programming languages don't.
Re[30]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 24.04.09 22:29
Оценка: 1 (1)
AB> Х> Short answer:
AB> Х> High-quality games with high budget.

AB> Не, хотелось бы для саморазвития. Что есть ААА, что есть BBB. В смысле какую-нибудь табличку сравнительную с приблизительными числовыми характеристиками.


Чектого определения нет. Обычно просто обозначает высококачественную игру с большим бюдэетом. Предположительно, стоимость разработки AAA-игр сейчас начинается от 4 илиионов долларов (ссылку не найду, читал еще в прошлом году)
avalon 1.0b rev 146


dmitriid.comGitHubLinkedIn
Re[31]: Работа - с чего начать: С++ или С#?
От: Sorantis Швеция  
Дата: 24.04.09 22: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[28]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 25.04.09 08: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>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[29]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 27.04.09 13: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[42]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 05.05.09 23: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[38]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 06.05.09 12:36
Оценка: 1 (1)
Здравствуйте, VladD2, Вы писали:

VD>Ага. Причем юмор начинается со слов "лямбды в с++" ибо на сегодня в С++ нет даже тех недолямбд которые описаны в С++ох (читать как си-плюс-плюс ох).

Ну в С++0х они есть. Компилеры с лямбдами тоже есть (ICC).
Удивительно, но из всего что появилось в ICC из С++0х применения в живых проектах не нашли только лямбды.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[39]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 06.05.09 14:38
Оценка: 1 (1)
Здравствуйте, CreatorCray, Вы писали:

CC>Удивительно, но из всего что появилось в ICC из С++0х применения в живых проектах не нашли только лямбды.


Что даже не сильно удивляет. Длинные и многоярусные лямбды противоречат принципам реюзинга, "обычные" функторы могут быть предпочтительнее с этой точки зрения. Больше того, даже два использования какой-нибудь коротенькой лямбды типа "x >= SOMETHING_LOW && x <= SOMETHING_HIGH" уже побуждают сделать вместо неё обычную функцию или функтор, и обращаться к ним по собственному имени.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[48]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 07.05.09 14:22
Оценка: 1 (1)
Здравствуйте, minorlogic, Вы писали:

M>"Лямбды удобнее тем, что их можно сочетать вместе с замыканиями в то время когда функцию придется передавать толпу параметров." не всегда является достаточным аргументом, например


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


А GOTO удобнее функций. Из любого места в любое и без параметров!
(я так не считаю, только проиронизировал аналогию)
Re[69]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 07.05.09 19:30
Оценка: 1 (1)
Здравствуйте, samius, Вы писали:

S>Оверхед — да. Неимоверный — смотря для чего. Хочешь выжать пару тактов — забудь про лямбды и занимайся ручным инлайнингом. А в общем случае — удобно и красиво.


Погодите, тут пару десятков страниц назад меня клеймили за то, что я привел рекомендацию избегать маленьких функций. Сейчас мне отчего-то кажется, что ручной инлайнинг — это тоже самое, но другими словами, нет?
Re[72]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 07.05.09 19:54
Оценка: 1 (1)
Здравствуйте, Геннадий Васильев, Вы писали:

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


MK>>Я напишу про общий случай, т.к. спецификацию на язык не читал. Так вот, копирования никакого нет. Компилятор превращает лямбду в класс, у которого поля — это замкнутые переменные, а единственный метод — тело (или как там оно называется) лямбды. Все операторы работающие с замкнутой переменной вне лямбды, переписываются на обращение к полю класса.


ГВ>Примерно то же самое, кстати, должен делать и компилятор C++. Лямбда тоже преобразуется в класс с единственным методом (не считая конструктора копии, кажется) — "operator()(сигнатура, выведенная из параметров лямбды)".

дотнет этот класс распологает изначально в хипе, а C++ на стеке. дотнетчики с классом ассоциируют хип если не оговорено "класс на стеке", что означает структуру в дотнете.
Потому то же самое, но лишь условно примерно.
Re[82]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 07.05.09 23:32
Оценка: 1 (1)
Здравствуйте, Хвост, Вы писали:

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


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

Х>но ведь при скролле/зуме, когда во вьюху попадают новые области, необходимо их заново трансформировать в промежуточную форму, поетому с таким же успехом можно трансформировать сразу в екранную.
Зло. Вьюх может быть несколько (+обзорная, например) с разными экранными координатами. При активной работе с зумом или изменением размеров окна перерисовывать объекты требуется часто, потому софтовый пересчет каждый раз из геодезии в экранные дорог. А из геодезии в промежуточные псевдо-экранные можно считать только однажны.

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

S>>А отрисовке — пофик на точность. Там на пиксель набежит больше любой погрешности.
Х>ну собственно я про точность отрисовки и говорил, например последовательный зум-аут/зум ин на одну и ту же величину и мы видим уже не то что в начале
А я говорил, что только промежуточные, а потом манипуляция матрицей. Потому 1000 раз зум-аут/зум-ин не повлияют на координаты. В любом случае координаты объекта при смене вида меняться не должны. Координаты примитива — пожалуйста. Объект неизменен при прорисовке.

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

Как или конкретно как в гуглёрсе? AFAIK там рисуются не примитивы во время таких эффектов. Во всяком случае не десятками тысяч.
Но повторить худо-бедно такой пролет на векторных данных можно. Естественно, будет зависеть от обилия данных и способа проекции (либо проекция текстуры, либо плоский рендеринг по спроектированным с шарика на плоскость координатам). С шарика на плоскость тоже можно схалтурить и поручить железу.

X>В принципе все ети неточности несложно обходятся, но дело в том что незачем, т.к. на данный момент все трансформации в софте.

Софтовые трансформации тоже можно сократить введением промежуточной системы координат. Даже на шарике.

Так что запас по производительности есть и значительный. Потому не вижу неподъемных для C# задачь.
Re[86]: Работа - с чего начать: С++ или С#?
От: minorlogic Украина  
Дата: 08.05.09 11: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[61]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 08.05.09 12: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>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[63]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 08.05.09 13: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>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[76]: Небольшая опечатка
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.05.09 20:25
Оценка: 1 (1)
Здравствуйте, VladD2, Вы писали:

ГВ>>>>>см. Э. Ховёнен, Й. Сеппянен, c, М.: 1986

ГВ>>В СССР книга вышла в 1990 г. 1986-й — это финское издание.

VD>Короче, вот реальная история CL.


Извиняюсь, не дал саму ссылку:
http://www.franz.com/support/documentation/6.2/ansicl/subsecti/history.htm

Примечателен последний абзац:

In 1986 X3J13 was formed as a technical working group to produce a draft for an ANSI Common Lisp standard. Because of the acceptance of Common Lisp, the goals of this group differed from those of the original designers. These new goals included stricter standardization for portability, an object-oriented programming system, a condition system, iteration facilities, and a way to handle large character sets. To accommodate those goals, a new language specification, this document, was developed.


То есть в 86-ом была только только сформирована группа по работе над CL. Учитывая, что на книгу нужно было потратить хотя бы пол года, я никак не могут понять что же описывали эти горячие финские парни, если в MIT и CMU только сели за составление стандарта.
А уж фраза:

Основой изложения нами выбран диалект Коммон Лисп, ставший "де-факто" промышленным стандартом языка Лисп. В книге представлены все важнейшие языковые формы и свойства конструкций Коммон Лиспа, а также типы функций и данных.

вообще выглядит как издевка. Может это текст из предисловия на русском языке написанный в 1990-м?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[78]: Небольшая опечатка
От: Хвост  
Дата: 08.05.09 20:47
Оценка: 1 (1)
Здравствуйте, VladD2, Вы писали:

ГВ>>Как видишь, горячим финским парням было что описывать в 1986-м.


VD>Как раз не вижу. Это все равно, что описывать С++ в 1979-ом.


ты б хотя бы повикипедил бы, вот тебе такая книга (1984-й)
http://en.wikipedia.org/wiki/Common_Lisp_the_Language
по последним постам видно что не в теме как раз таки ты, и, как ты там говорил, "пытаешься выйти сухим из воды".
People write code, programming languages don't.
Re[80]: Небольшая опечатка
От: vdimas Россия  
Дата: 13.05.09 10:43
Оценка: 1 (1)
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Здесь два соображения. Первое — что какими бы "какими-то" эти финны ни были, но их книга издана и в Финляндии, и в СССР. Второе — что описанный подход вполне соответствует идее об устранении побочных эффектов (чистоты) в функциональных программах. По-моему, вполне достаточные основания считать, что подобная реализация замыканий имела место быть в определённом историческом периоде и можно даже допустить, что серьёзно обсуждалась в качестве "правильной".


При наличии возможностей изменять значения переменных byvalue и есть "единственно-правильный" вид замыканий. А вообще, там приемов несколько — например есть реализации лиспов/схем, где после присвоения нового значения переменной создается новая одноименная переменная, которой оперирует текущий контекст исполнения, т.е. даже используя механизм byname как более "легковесный", получается поведения как при byvalue.
Re[77]: Состояние
От: Qbit86 Кипр
Дата: 18.05.09 12:17
Оценка: 1 (1)
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Парадоксально, что как раз иммутабельность переменных (и её вариация — замыкание byvalue) нередко подаётся апологетами ФП как несомненное преимущество. Вот и думай тут, где истинные ФП-шники, а где — падшие вероотступники. :maniac:


Изменяемое состояние даже «истинным ФП-шникам» не чуждо: http://docs.google.com/Doc?id=dv682st_19hnpc94cm (via lj-user antilamer aka rsdn-user jkff).
Глаза у меня добрые, но рубашка — смирительная!
Re[39]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 18.05.09 12:58
Оценка: 1 (1)
Здравствуйте, samius, Вы писали:

S>2 All


S>Не устали?


S>http://www.google.com/trends?q=c%2C+c%2B%2B%2C+c%23%2C+java&amp;ctab=0&amp;geo=all&amp;date=ytd&amp;sort=0


Еще предлагаю посмотреть сюда.

А потом конкретно сюда и сюда чтобы оценить тенденции.
Re[37]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 18.05.09 20:18
Оценка: 1 (1)
Здравствуйте, vdimas, Вы писали:

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


C>>С точностью до наоборот — нормальные моки и стабы генерируются автоматически. т.к. автоматическая генерация исключает возможность допустить ошибку или не учесть чего-то.


V>Расшифруй, пожалуйста, слово "нормально" и слово "автоматически", а так же набор возможностей этого "автоматически".


Откройте документацию по xUnit.NET, откройте документацию по RhinoMocks и почитайте. Заниматься восполнением пробелов в Вашем образовании не намерен.

V>>>А так, там где можно обойтись в юнит-тестах классичесскими ассертами — это и синтаксис нагляднее, и проще поддерживать.

C>>
C>>Вы вообще не понимаете что такое юнит-тесты. Не надоело показывать неграмотность?

V>А да, что такое юнит-тесты требуется еще и понимать...


Требуется. Представьте себе, может для Вас это и в новость, но предмет обсуждения требуется понимать, иначе обсуждать особо и нечего становится. Иначе все-равно что спорить с ребенком о корпускулярно-волновом дуализме.

V>Не надоело рефлексировать и показывать в очередной раз свой поверхностный взгляд? Все твои вызовы мокков ради ассертов, собственно и сделаны. И хоть они теперь не в фас, а в профиль — они были и есть цель любого автоматического теста (не обязательно юнит...)

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

Так вот, ликбез: мокинг выполняется с целью изолировать тестируемый объект от внешних зависимостей.

Пример мокинга:

using(mocks.Ordered()) 
{ 
  Expect.Call(databaseManager.BeginTransaction()); 
  using(mocks.Unordered()) 
  { 
    Expect.Call(accountOne.Withdraw(1000)); 
    Expect.Call(accountTwo.Deposit(1000)); 
  } 
}


Что означает, что ожидается, что будет вызван databaseManager.BeginTransaction(), а потом в любом порядке будут вызваны Withdraw и Deposit.

Ассерты это всего-лишь предикат, который по-определению всегда true.

Assert.Equals(10, someObj.SomeIntProperty);
Assert.IsTrue(someObj.SomeBoolProperty);
и т.д. и т.п.

Ассерты и моки не цель. Это средство и ключевой механизм реализации юнит тестов.

При чем тесты ни коим образом не захламляют код. Все тесты находятся в отдельной сборке, которая "видит" (и только она одна) внутренности тестируемых сборок.

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


C>>Перечень того, что не возможно сделать средствами RhinoMocks + xUnit в студию, как говорится.


V>Любую динамическую среду/заглушки, которые генерят переменный по насыщенности траффик или сообщения с разной задержкой и произвольным наполнением. Фишка в том, что реальных задержек-то и нет, текущее время эмулируется, но тестирующая последовательность слишком длинная, чтобы записывать её ручками, она генерируется программой. А таких последовательностей/программ у меня — мама не горюй.


Еще один ликбез: описанное Вами не является модульными тестами. Это т.н. integration tests. При чем ничего невозможного в реализации этого нет — описанное реализуется элементарно в .NET.

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

Элементарно средствами RhinoMocks.

V>В декларативном синтаксисе мокков это выглядит как удаление гландов через Ж, и чем осмысленнее логика — тем более глубокое погружение в эту Ж. А если процедура внешняя, то это лишняя тестирующая сущность и все такое.


Демагогия.

Выглядит преотлично. На много лучше, чем то, что у вас есть (а точнее нет) в unmanaged C++. lambda выражения и fluent interface дают прекрасную читабельность.


Expect.Call(file.Read(null, 0, 0))
      .Constraints(Property.Value("Length", 4096), Is.Equal(0), Is.GreaterThan(0) && Is.LessThan(4096));



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

Модульные или unit тесты ОБЯЗАНЫ быть несложными. В этом их СУТЬ.

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

Нет, не для них. Вам не надоело ламерствовать?
Re[6]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 18.05.09 23:26
Оценка: 1 (1)
Здравствуйте, Anton Batenev, Вы писали:

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

c>> Откройте для себя .NET CF и Mono.
AB>Вот тут все про моно да про моно. Но хоть бы кто-нибудь показал мастер-класс на оном, а то складывается впечатление, что его защитники видели его только на картинках, а те, кто его пользовал, молчат, дабы не было стыдно.
Не, ну если интересно, то можно на официальном сайте глянуть.

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

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


почему он тебе нравится? то, что он красиво выглядит на бумаге, не гарантирует, что тебе понравится на нём программировать реальные большие задачи
Люди, я люблю вас! Будьте бдительны!!!
Re[2]: Работа - с чего начать: С++ или С#?
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 15.03.09 16:01
Оценка: :)
Здравствуйте, astral_marine, Вы писали:

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


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

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[3]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 15.03.09 16: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[7]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 15.03.09 17:10
Оценка: +1
Здравствуйте, MxKazan, Вы писали:

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


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

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

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

A>Алексей

Марат
Re[6]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 15.03.09 17:38
Оценка: :)
Здравствуйте, ononim, Вы писали:

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

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

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

O>Ой насмешили Нету такого — Qt Software. Есть лишь библиотека Qt, написанная Trolltech.
Люблю доставлять людям радость
Re[7]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 15.03.09 17:49
Оценка: +1
Здравствуйте, MxKazan, Вы писали:

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


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

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

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

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


Особенно, если учесть статическую линковку.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[3]: Работа - с чего начать: С++ или С#?
От: Vetal_ca Канада http://vetal.ca
Дата: 15.03.09 19:08
Оценка: :)
Здравствуйте, dotidot, Вы писали:

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


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


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

"Дяденька, возьмите меня поработать в вашу поднебесную распрекрасную контору. Ну если не тестером, то хоть уборщицей возьмите!!!"
Re[3]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 15.03.09 19:23
Оценка: +1
Здравствуйте, MxKazan, Вы писали:

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

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

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

А для другого софта, особенно коробочного — задачи написать единый интерфейс вообще не должно стоять. ИМХО.
Нужно разобрать угил.
Re[9]: Работа - с чего начать: С++ или С#?
От: shrecher  
Дата: 15.03.09 19: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[4]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 15.03.09 20:35
Оценка: +1
Здравствуйте, ononim, Вы писали:

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

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

Mono
Re[10]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 15.03.09 20:43
Оценка: :)
Здравствуйте, Геннадий Васильев, Вы писали:

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


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

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

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


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

При этом C++ как язык меняется с каждо версией компилятора от Intel\Microsoft\gcc.
Re[4]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 15.03.09 20: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[6]: Работа - с чего начать: С++ или С#?
От: Niemand Австралия  
Дата: 15.03.09 21:00
Оценка: :)
Здравствуйте, NikeByNike, Вы писали:

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


да я не при делах в вашем холиворе, мне фраза понравилась
If the message above is in English — means I'm wasting my work time and work computer to post here. No hard feelings
Re[5]: Работа - с чего начать: С++ или С#?
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 15.03.09 21:01
Оценка: :)
Здравствуйте, NikeByNike, Вы писали:

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


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

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[4]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 15.03.09 22: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[10]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 15.03.09 23: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 23: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[9]: Работа - с чего начать: С++ или С#?
От: Ovl Россия  
Дата: 16.03.09 09:22
Оценка: +1
NBN>Нельзя. Просто нельзя сделать на яве/шарпе более качественно чем на С++ при прочих равных.

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


вы действительно во все это верите?
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re[11]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 10: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[12]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 16.03.09 10:20
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

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

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

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

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

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

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

Вообще — С++ чувствителен к квалификации программиста. Например, у меня на проект с годовым сроком разработки, по результатам финального тестирования не было ни одного меморилика, хотя до конца проекта этих тестирований не проводилось вообще.
Нужно разобрать угил.
Re[13]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 10:25
Оценка: :)
Здравствуйте, hattab, Вы писали:

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


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


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

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

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

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

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

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

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


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


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

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

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

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

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

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

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

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

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

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


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

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

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

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

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

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

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


1979
Люди, я люблю вас! Будьте бдительны!!!
Re[12]: Работа - с чего начать: С++ или С#?
От: BulatZiganshin  
Дата: 16.03.09 15:12
Оценка: +1
Здравствуйте, hattab, Вы писали:

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


ещё пример — peazip. вообще, vcl в их реализации вполне кроссплатформенна
Люди, я люблю вас! Будьте бдительны!!!
Re[9]: Работа - с чего начать: С++ или С#?
От: Unhandled_Exception Россия  
Дата: 16.03.09 15:39
Оценка: :)
Здравствуйте, MxKazan, Вы писали:

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


компоненты WPF не используют WinAPI?...
Re[18]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 15:58
Оценка: :)
Здравствуйте, COFF, Вы писали:

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


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


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


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


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


В такой аналогии нужно больше деталей.
GC не собирает память пока это никому не мешает, как только заполнится первое поколение — сразу же уберет, а то что не успел удбрать — сложит в другое полколение.
Вот так и с дворником — пока мусор никому не мешает, он его убирать не будет, перед тем как кому-то он сможет помешать — сразу же уберет.
Re[21]: Работа - с чего начать: С++ или С#?
От: denisko http://sdeniskos.blogspot.com/
Дата: 16.03.09 16:19
Оценка: +1
Здравствуйте, BulatZiganshin, Вы писали:

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


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


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


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

Обычно, для однотипных данных, которых много, выделяют тем или иным способ свой уже фрагментированный пул. Это позволяет 1) контролировать тех, кто не отдал память вовремя 2) работать быстро и со строго ограниченным сверху размером выделенной памяти.
Кто сказал, что GC ГАРАНТИРУЕТ выделение памяти не более чем три раза больше чем в данный момент используется системой?
<Подпись удалена модератором>
Re[20]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 16:28
Оценка: :)
Здравствуйте, NikeByNike, Вы писали:

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


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

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

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

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

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


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

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


Вообще, изначально вопрос стоял так — стоит ли учить C++ или C#? Я так понимаю, что все-таки C++? ;)
Re[22]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 17:08
Оценка: :)
Здравствуйте, COFF, Вы писали:

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


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

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

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

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

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

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

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


Потому что их несравнимо больше
Нужно разобрать угил.
Re: Работа - с чего начать: С++ или С#?
От: x64 Россия  
Дата: 16.03.09 17:38
Оценка: +1
Однозначно C#.
Re[20]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 16.03.09 18:00
Оценка: -1
Здравствуйте, gandjustas, Вы писали:

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

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

Я вчера решил помониторить сборку xmlrpc для .Net (http://www.xml-rpc.net/). В общем, на каждый вызов метода через XML-RPC (метод принимает два параметра и возвращает бинарник на ~200Kb) происходит 3 вызова сборщика мусора (мониторил ProcessExplorer'ом). Я на перформанс даже тестировать не стал...
Re[10]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 16.03.09 18:14
Оценка: :)
Здравствуйте, alsemm, Вы писали:

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

A>Любая встравиваемая real-life JVM — это только C.
A>Телефонный софт (OS, стандартные приложения) — только C.

Это далеко не так, хотя этой нечисти там действительно хватает
Нужно разобрать угил.
Re[23]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 16.03.09 18: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[25]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 16.03.09 18:43
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

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


H>>О-о-о! Их есть у меня Это чудо называется Creative Docs .NET. После запуска, без открытого документа, мило кушает 192 метра + виртуалки в районе 180 (по показаниям ProcessExplorer'a). Скорость работы с документом тоже потрясная: при скроллинге сперва прокручиваются линейки, а потом, неспешно, за ними ползет содержимое документа. Терпения хватает только на посмотреть. PM 1.7 512Mb NVidia GeForceFX Go5200.


G>Ну напишите получше на C+ или на вашем любимом Delphi.


Не нужно обижаться, ты сам примеры просил...

G>Или просто не пользуйтесь тормознутым барахлом.


Я и не пользуюсь
Re[23]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 18: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[22]: Работа - с чего начать: С++ или С#?
От: minorlogic Украина  
Дата: 16.03.09 19: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 19:16
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

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

G>Этого не гарантирует даже аллокатор ОС, в принципе этого не может гарантировать никто.

Рекомендую ознакомиться с алгоритмами алокаторов более подробно .
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[17]: Работа - с чего начать: С++ или С#?
От: ameshkov Россия  
Дата: 16.03.09 20:09
Оценка: +1
Здравствуйте, MxKazan, Вы писали:

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


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

MK>Вот тут я тебя полностью понимаю. И я тоже против огульного охаивания .Net и его приравнивания к VB.

Ну раз такая пьянка пошла, я тогда против огульного охаивания VB и приравнивания его к... ну пусть к Дельфям
Re[22]: Работа - с чего начать: С++ или С#?
От: BulatZiganshin  
Дата: 16.03.09 20: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 это вписать — не подскажешь?
Люди, я люблю вас! Будьте бдительны!!!
Re[24]: Работа - с чего начать: С++ или С#?
От: BulatZiganshin  
Дата: 16.03.09 20:51
Оценка: +1
Здравствуйте, MxKazan, Вы писали:

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


H>>3 раза на один вызов это иногда? Несколько последовательных вызовов сразу задирают тактовую частоту с 600 до 1700, при том, что при аналогичных действиях из нативного клиента частота поднимается максимум до 800. Тут нужно пояснить, что вся тяжелая работа (линейный скаллинг картинки) делается в нативном сервере (он запущен локально), клиентская часть лишь формирует запрос и получает ответ т.е. ее работа минимальна.

MK>Ну мало ли что там делает это один вызов. Ты не на число запусков сборщика смотри, а на общий перформанс. При этом я ничего не обещаю, просто хочу сказать, что не стоит так сильно заморачиваться почему происходит вызов GC. В конце концов тот же rpc-xml может это сам явно делать по каким-то своим умозаключениям. У меня вот в WPF'ной проге, окна иной раз не собираются по 10-20 минут. Можно ли быть уверенным, что моя прога в сто раз быстрее твоей?

я не знаю насчёт net, но в ахскеле и по слузам в яве тоже двухпоколенный сборщик мусора. так он делает малую сборку через каждые 256кб выделенной памяти и никому это не мешает. так что ваозможно тут проблема только в прокладке
Люди, я люблю вас! Будьте бдительны!!!
Re[24]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 21:08
Оценка: :)
Здравствуйте, minorlogic, Вы писали:

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


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

G>>Этого не гарантирует даже аллокатор ОС, в принципе этого не может гарантировать никто.

M>Рекомендую ознакомиться с алгоритмами алокаторов более подробно.

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

BZ>>>ага. и как можно устранить дефрагментацию памяти, а не просто в description это вписать — не подскажешь?


H>>Собственно, я уже написал -- пулами.


BZ>это не гарантирует пропадания фрагментации. представь выделение миллиона 7-байтовых ячеек, освобожддение каждой второй из них и затем выделение миллиона 8-байтовых


Это слишком просто Пул это блок определенного размера, в котором выделение памяти происходит так же порциями определенного размера: 12, 20, 28, 36, 44 (шаг меняется с увеличением размеров на которые ориентирован пул), есть еще и отдельные пулы для средних и крупных блоков. В твоем примере будут выделяться блоки из первого пула по 12 байт, и ни какой фрагментации. Эффективность использования пулов можно контролировать тем самым трекингом, и в случае необходимости внести коррективы в алгоритм. Надо заметить, что лично мне ни разу не приходилось затачивать алгоритмы под работу менеджера памяти.
Re[25]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 16.03.09 22:48
Оценка: +1
Здравствуйте, BulatZiganshin, Вы писали:

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


BZ>асм ещё универсальней. подумай, почему с 80-х годов им перестали пользоваться


Потому что есть не менее эффективный С++, а что?
Нужно разобрать угил.
Re[26]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 16.03.09 23:00
Оценка: +1
Здравствуйте, BulatZiganshin, Вы писали:

BZ>вот то-то и оно, что C++ почитай описание GC. ведь это очень просто — если последний большой GC нашёл 10 мб реальных объектов, то следующий GC можно сделать когда общий объём распределённой памяти будет 20 мб или даже 11 мб. это и даёт гарантии


GC не используется в С++ только по причине отсутствия реальной необходимости в нем.
Если сильно приспичит — ничего не мешает использовать GC и в C++, это даже имеет смысл в движках активно работающих с графами.
Я (и не только я) когда-то писал
Автор: NikeByNike
Дата: 19.06.08
свой GC, но забросил — он просто недостаточно востребован.
Нужно разобрать угил.
Re[29]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 16.03.09 23:39
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

H>>>>Это слишком просто Пул это блок определенного размера, в котором выделение памяти происходит так же порциями определенного размера: 12, 20, 28, 36, 44 (шаг меняется с увеличением размеров на которые ориентирован пул), есть еще и отдельные пулы для средних и крупных блоков. В твоем примере будут выделяться блоки из первого пула по 12 байт, и ни какой фрагментации. Эффективность использования пулов можно контролировать тем самым трекингом, и в случае необходимости внести коррективы в алгоритм. Надо заметить, что лично мне ни разу не приходилось затачивать алгоритмы под работу менеджера памяти.


G>>>Только общее увеличение потребления памяти получим.

G>>>А кто-то еще ругается что .NET много памяти жрет.

H>>Конечно получим, куда же мы денемся. Только оверхед сильно меньше, чем у .Net . Это я про общий случай, и по реальным приложениям это видно.

G>И по какой причине он станет "сильно меньше"?

Ты сейчас о чем говоришь, об общих случаях или о той синтетике с 7-8 байтовыми ячейками? Если о синтетике, то там выделение нафиг не нужно, достаточно динамического массива с размером ячейки в 8 байт. Получим при этом оверхед в 1 байт на ячейку. Если же ты об общих случаях, то тут существующий софт тому доказательство.
Re[22]: Работа - с чего начать: С++ или С#?
От: minorlogic Украина  
Дата: 17.03.09 06: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[21]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 17.03.09 09:53
Оценка: +1
Здравствуйте, BulatZiganshin, Вы писали:

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

Написал я как то монитор выделяемой произвольным процессом памяти. Дабы значицца, посмотреть что там да как происходит в закулисье.
И что я только не гонял сей прогой, но пресловутой фрагментации увидеть так и не удалось.
HeapAlloc, который уже давным давно используется вместо говноаллокатора ранних версий CRT, отлично справлялся сам.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[32]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.03.09 11: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[25]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 17.03.09 12:48
Оценка: +1
Здравствуйте, sergey2b, Вы писали:

NBN>>У шестёрки в первых версиях был галимый аллокатор, точно помню...

S>Большое спасибо за ответ.
S>Может вы вкурсе, они его исправили в sp5 or sp6 или нет?

Дык свой напиши на HeapAlloc, если сомневаешься в качестве стандартных.
Перекрой глобальные new/delete если на С++
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[33]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 17.03.09 12: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[14]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.03.09 18:58
Оценка: -1
Здравствуйте, Геннадий Васильев, Вы писали:

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


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

G>>Ну и в чем различия?

ГВ>Скажи пожалуйста, ты правда не понимаешь разницу между стандартом ANSI и реализацией стандарта тем или иным компилятором? Или просто хочешь развести меня на очередной виток объяснения очевидных вещей?


Меня не это интересует.
Меня интересует чем отличается "сам язык" (не его стандарт) от реализации этого языка в конкретном компиляторе.

Все программисты на C++ знают что стандартный C++ это далеко не тот C++ на котором пишут программы. Так что в этом контексте "сам язык"?
Re[30]: Работа - с чего начать: С++ или С#?
От: landerhigh Пират  
Дата: 17.03.09 21:28
Оценка: :)
Здравствуйте, gandjustas, Вы писали:

G>Можете посмотреть Windows Live Writer, но анлогов вообще нет, Windows Media Center — аналогично.


Совершенно верно, аналогов этому, гхм, и правда нет.
Re[36]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.03.09 22: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]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.03.09 22: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[38]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.03.09 03: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[39]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 18.03.09 09: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 09: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[25]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 18.03.09 17:12
Оценка: +1
Здравствуйте, Игoрь, Вы писали:

И>PS

И>существенное преимущество GC — не надо следить за уничтожением объектов, что облегчает программирование, позволяет использовать всякие инетересные техники программирования, вроде замыканий. Но за эти удобства мы платим скоростью исполнения и большим расходом памяти. Вот собственно и все.

А я и на С++ фактически не слежу за уничтожением...
Нужно разобрать угил.
Re[32]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 18.03.09 19: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]: Работа - с чего начать: С++ или С#?
От: kuj  
Дата: 18.03.09 20:01
Оценка: -1
Здравствуйте, NikeByNike, Вы писали:


G>>Кстати Linq у вас уже появился?

NBN>Он довольно тормозявый.
В каком месте?
NBN>А в шарпе уже появилась возможность с пользой использовать всю доступную память? (а то в текущем проекте пришлось поизвращаться и залазить в узкие рамки Думаю, что на шарпе было бы невозможно обеспечить даже близкое качество)
Разработчика, который пытается использовать ВСЮ память надо бить сильно по рукам.


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

Чушь полная.
Re[34]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 18.03.09 20: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[26]: Работа - с чего начать: С++ или С#?
От: Игoрь Украина  
Дата: 18.03.09 22:47
Оценка: +1
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, Игoрь, Вы писали:


G>>>3)Выделение памяти таким алгоритмом создет фрагментацию памяти, то есть остаются блоки невыделенной памяти малых размеров.

И>>Угу, только проблема фрагментации кучи есть и в .net, кстати, как и мемори лики.
CC>Тока мемлики там другие, не такие как в unmanaged. Ну и фрагментация скорее pin-анием вызывается. Обычную кучу GC утаптывать умеет.
Не, я имел ввиду Large Object Heap (LOH), которая работает как сишная куча, и для нее дефрагментация не осуществляется из-за трудоемкости процесса.
Re[37]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 18.03.09 23:37
Оценка: :)
Здравствуйте, NikeByNike, Вы писали:

NBN>Не беспокойся — с нуля на шарпе тоже не пишут Точнее пишут! Ещё как пишут, ведутся на рекламу.

Так это получается, что все в форумах NET и NET GUI просто дебилы какие-то, выбирающие инструмент по рекламкам.
Считай это как призыв не юзать подобные аргументы. Все же в деле заняты, а не в бирюльках.
Re[27]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 00: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[43]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 19.03.09 01: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[20]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 01:44
Оценка: -1
Здравствуйте, Erop, Вы писали:

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


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


E>Это всего лишь эффект масштаба. Для С++ схему владения надо продумывать уже для довольно небольших задач (для совсем простых можно ничего не освобождать, да и всё), а для GC для задач побольше. Зато управлять GC посложнее...

На чем основано такое мнение? Уж точно не на длительном использовании .NET и профилировании программ.

E>Есть некоторая ниша по сложности задачи, где GC работает хорошо, но и только...

Вам наверное стоит почитать на каких допущениях работает GC. И на основе каких программ эти допущения получены.

E>Кстати, в C++ наработано много всяких подходов к этому месту, так что обычно можно быть по крайней мере не хуже в области массовых аллокаций, чем GC...

Да, в C++ надо думать о том когда и как выдеоять и освобожать память.
В .NET об этом думать не надо. Если будет тормозить тогда смотреть профайлером.

E>Например, можно на каждый запрос на каждой нити создавать отдельный стековый аллокатор, и на нём ничего не освобождать, а только выделять. По окончании запроса данные, которые нужно сохранить мигрируют на обычный аллокатор, а стековый грохается целиком в начальное состояние, и мы снова готовы обработать запрос. В целом для очень многих задач такая стратегия аллокации НАМНОГО ЭФФЕКТИВНЕЕ GC...

Это теория, покажите такие программы на практике.
Обычно ручная возьня с ресурсами очень сильно увеличивает время разработки программ. Такую возьню могут позволить себе только очень крупные фирмы.
Re[11]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 19.03.09 03:01
Оценка: :)
Здравствуйте, CreatorCray, Вы писали:

CC>Лично участвовал в С++ серверном проекте для унесённого ныне кризисом Lehman Brothers.


Вот именно! Видишь до чего С++ доводит?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[25]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 07:36
Оценка: :)
Здравствуйте, Erop, Вы писали:

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


G>>Не поверите, такие же переменные есть в .NET

E>Почему не поверю? Я советовал ведь не "проверить, есть ли в С++ автоматические переменные", а изучить, что это такое...

E>Скажем на С++ можно делать так
Автор: Erop
Дата: 27.02.07
...



В нормальных языках такого не нужно делать в принципе.
Re[28]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 19.03.09 08: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>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[23]: "С#" =def= "ХиндиС"? :)))
От: Erop Россия  
Дата: 19.03.09 08: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 08:50
Оценка: :)
Здравствуйте, gandjustas, Вы писали:

E>>А подробности будут?

E>>Я всё равно не верю, что, Ada и С++ имеют одинаковый показатель.
G>Можете не верить.
Дык данные-то есть? Методика, что и как измеряли? На каких примерах? Какая получилась статистика?

E>>Кроме того, на чём же тогда статистика для С# собрана, если только КРУПНЫЕ проекты идут в счёт? На сингулярити, что ли?

G>На C# очень много крупных проектов, с миллионами строк кода.
"Очень много" -- это наверное больше 10? Не затруднит привести 5 C# проектов, которые на миллион строк тянут?
Кстати, миллион строк кода -- это не очень крупный проект...
Крупный проект, это от 100-300 человеколет, например...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[17]: Что за статистика-то такая волшебная? ;)
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 09:17
Оценка: :)
Здравствуйте, Erop, Вы писали:

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


E>>>А подробности будут?

E>>>Я всё равно не верю, что, Ada и С++ имеют одинаковый показатель.
G>>Можете не верить.
E>Дык данные-то есть? Методика, что и как измеряли? На каких примерах? Какая получилась статистика?
Не я мерял, во многих книгах и статьях читал упоминания этого факта.

E>>>Кроме того, на чём же тогда статистика для С# собрана, если только КРУПНЫЕ проекты идут в счёт? На сингулярити, что ли?

G>>На C# очень много крупных проектов, с миллионами строк кода.
E>"Очень много" -- это наверное больше 10? Не затруднит привести 5 C# проектов, которые на миллион строк тянут?
MySpace вас устроит?
Лениво узнавать сколько где строк
Re[17]: Что за статистика-то такая волшебная? ;)
От: Mamut Швеция http://dmitriid.com
Дата: 19.03.09 09:33
Оценка: +1
E> Кстати, миллион строк кода -- это не очень крупный проект...

Смотря, на чем писать
avalon 1.0b rev 146


dmitriid.comGitHubLinkedIn
Re[18]: Что за статистика-то такая волшебная? ;)
От: Erop Россия  
Дата: 19.03.09 09:58
Оценка: :)
Здравствуйте, gandjustas, Вы писали:

G>>>На C# очень много крупных проектов, с миллионами строк кода.

E>>"Очень много" -- это наверное больше 10? Не затруднит привести 5 C# проектов, которые на миллион строк тянут?
G>MySpace вас устроит?
G>Лениво узнавать сколько где строк
))

MySpace -- это аналог "одноклассников", что ли?
Если аналог, то не устроит. Даже на 30 человеко-лет оно не тянет, IMHO...
Да и на миллионы строк, тоже что-то не очень верится. Разве что они базу данных сами писали.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[35]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 10:15
Оценка: :)
Здравствуйте, _d_m_, Вы писали:

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


G>>Я сталкивался с пользователями, которые вполне нормально мирились с генерацияей отчета на 1с (которая на С++) которая длилась двадцать минут.


___>1С — УГ.

___>Я знаю программу — Супермаг 2000, написанную на Оракле, отчет пару часов для небольшого магазина. И причем здесь Оракл? Хреновую программу можно написать на любом языке.
Я про это и говорю.
Самое главное что пользователи могут и пару часов подождать.
Re[36]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 19.03.09 10:20
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>Самое главное что пользователи могут и пару часов подождать.

Это только в двух случаях.
1) Если решают что купить одни, а "подождать" -- другие.
2) Если совсем нет конкурентов
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[29]: "С#" =def= "ХиндиС"? :)))
От: Erop Россия  
Дата: 19.03.09 10:21
Оценка: -1
Здравствуйте, gandjustas, Вы писали:

G>Покажите мне программу где все это нужно одновременно.

Почти весь сложный софт. От базы данных, до фотошопа...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[34]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 19.03.09 12:09
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>Я сталкивался с пользователями, которые вполне нормально мирились с генерацияей отчета на 1с (которая на С++) которая длилась двадцать минут.

Вообще-то на васике.
Нужно разобрать угил.
Re[48]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 12: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 12:34
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

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

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

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

G>>>С играми отдельная песня — там сейчас во всю идет перенос тяжелых вычислений на аппартаные ускорители.
CC>>Да ты еще и геймдевелопер я смотрю И спец по переносу расчетов на GPU.
CC>>Ну-ка расскажи что там и как в геймдеве, а я послушаю.
G>Не, я с геймдевом сталкивался всего пару раз и обра раза впечатления неочень.
Т.е. ты не в курсе.
Но мнение, как полагается, имеешь.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[36]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 19.03.09 12:34
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>>>Я сталкивался с пользователями, которые вполне нормально мирились с генерацияей отчета на 1с (которая на С++) которая длилась двадцать минут.

___>>1С — УГ.
___>>Я знаю программу — Супермаг 2000, написанную на Оракле, отчет пару часов для небольшого магазина. И причем здесь Оракл? Хреновую программу можно написать на любом языке.
G>Я про это и говорю.
G>Самое главное что пользователи могут и пару часов подождать.
Значит нужно писать хреновые программы?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[39]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 12:59
Оценка: -1
Здравствуйте, CreatorCray, Вы писали:

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


G>>>>Например при ипользовании ФВП с помощью буста затайпдефить все функции не получися.

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

G>>Что и требовалось доказать.

CC>Сам себе придумал, сам себе доказал. Как тебе жить просто, а.
Ну почему же, вы тут упорно доказываете что все надо писать на С++.
А оказывается что там где требуется производительность там пишется все на С (или на подмножестве С++), а там где производительность не требуется выразительности плюсов не хватает.
Re[40]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 19.03.09 13:18
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>>>То есть всетаки с++ недостаточно выразительный.

CC>>В сравнении с С, про который речь в этой ветке?
G>В сравнении с другими языками, поддерживающими ФВП например.
А они откуда взялись в обсуждении "С или С++"?
Ты с темы не съезжай, будь так любезен.

G>>>Что и требовалось доказать.

CC>>Сам себе придумал, сам себе доказал. Как тебе жить просто, а.
G>Ну почему же, вы тут упорно доказываете что все надо писать на С++.
Примеры моих постов, где говорится "что все надо писать на С++" в студию. Причем там должно говориться "все надо писать на С++" и никак иначе.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[38]: Когда же тебя отпустит-то? :)
От: Erop Россия  
Дата: 19.03.09 19:33
Оценка: :)
Здравствуйте, gandjustas, Вы писали:

E>>Ганджустас! (И как я раньше тайну ника-то не просёк!!!) Будь человеком, отсыпь кораблик?..

G>Я уже бросил
Пока не долетело ;(
Ждёмс...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[22]: Работа - с чего начать: С++ или С#?
От: WolfHound  
Дата: 19.03.09 19:34
Оценка: +1
Здравствуйте, NikeByNike, Вы писали:

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

G>>И GC не будет.
NBN>Потому что не сможет
Не только может но и делает.
Подумай на досуге зачем приложения на .NET мониторят \KernelObjects\LowMemoryCondition
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[35]: Работа - с чего начать: С++ или С#?
От: _d_m_  
Дата: 20.03.09 02:46
Оценка: -1
Здравствуйте, NikeByNike, Вы писали:

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


G>>Я сталкивался с пользователями, которые вполне нормально мирились с генерацияей отчета на 1с (которая на С++) которая длилась двадцать минут.

NBN>Вообще-то на васике.

Ложь.
Re[23]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 20.03.09 09:31
Оценка: -1
Здравствуйте, Sinclair, Вы писали:

S>Я понимаю, головой думать — это тяжелая работа.

А переход на личности -- это такой способ ведения дискуссий от MVP?

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


Это всё конечно очень интересно, но при чём тут GC?

Кроме того, то, что он сразу же искал неэффективным образом (хотя, как я понял, это основная функциональность в проге!!!), говорит о том, что проектировать это дело он и не пытался. А пытался типа написать, потом профильнуть, потом трясти...

Что бы получилось, если бы он сначала таки подумал как сделать его прогу быстрой, потом это запроектировал, а только потом уже бомбил, не известно. Мне так кажется, что 2 секунды для этой программки -- ЭТО ОЧЕНЬ ОЧЕНЬ ОЧЕНЬ ДОЛГО.
Правда он сам себе выдал ТЗ, что "и так сойдёт", исправил грубую ошибку проектирования и получил в результате "саксесс стори". Но когда ты сам себе орбитр не трудно всегда побеждать.
А вот, если в дело вмешиваются клиенты и конкуренты, ситуация несколько меняется...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[49]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 20.03.09 10: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[52]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 20.03.09 12:16
Оценка: :)
Здравствуйте, hattab, Вы писали:



H> New(Arr);

H> Dispose(Arr);

H>Pentium M 1.7GHz. Память PC2700. Время: 67ms.


Если компилятор не дурак, то он вообще не станет выделять память по пусту, раз Вы ее не используете и пустой цикл тоже не станет крутить по чем зря.

Впрочем, это ж Делфи.
Re[50]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 20.03.09 12: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[56]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 13: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[54]: нет, ну если ты настаиваешь... ;)
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 13:28
Оценка: +1
Здравствуйте, Erop, Вы писали:

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


G>>Зачем? Для запредельного перфоманса есть С, для надежного и красивого кода есть C#, F#.

G>>А С++ в этом уравнении места нет.

E>Нет, ну если ты настаиваешь, что быстрый код ОБЯЗАН БЫТЬ ненадёжным и некрасивым, то да, нет...

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

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

Я не предлагал C использовать для красивого кода.

E>Кстати, если так взглянуть на это дело, то окажется, что и для С# место сожмётся, так как если в твоей проге самая нагруженная часть на С++, то не ясно, зачем оболочку-то на ХиндиС делать? У ХиндиС есть неомненный плюс -- дешёвая и быстрая разработка бригадой гастарбайтеров, в смысле индусов. Если в твоём проекте есть такие компоненты, то супер, С# твой выбор...

Ты как-то очеь интересно говоришь о том что C# позоляет писать хороший код с малыми затратами.

E>Да, то, что между черт -- это стёб... Но в каждой шутке есть таки доля шутки...

Все что ты написал в предыдущем абзаце — правда.
Когда вместо индусов пишут нормальные программисты код у них получается гораздо лучше и быстрее, чем на С++.
И только там где не хватает производительности может быть использован C.

ЗЫ. Ты думаешь на С++ индусы не пишут?
Re[60]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 14:08
Оценка: +1
Здравствуйте, Хвост, Вы писали:

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


G>>В структуре нет методов? Это точно на C#?

Х>ммм...статические есть, но ето немного не то, правда?
http://msdn.microsoft.com/en-us/library/ah19swz4.aspx

G>>Вопрос возник видимо из-за непонимания этого факта.

Х>у меня отличное понимание факта.
Вы показываете обратное.

ЗЫ. Вообзе говоря не верится что вы писали enterprise систему на C# и ни разу не пользовались структурой DateTime.
Re[25]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 14: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[63]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 20.03.09 14:54
Оценка: :)
Здравствуйте, MxKazan, Вы писали:

MK>Непонятно к чему тогда было следующее:

потому что я был уверен что struct в C# ето только данные и все операции с ним аля положить в массив и вызвать метод происходят только в его боксовом представлении
People write code, programming languages don't.
Re[27]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 15:04
Оценка: :)
Здравствуйте, esil, Вы писали:

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


E>>>Да это как раз у Вас полнейший неадекват какой-то, постоянное съезжание с темы, ответы на посты в отрыве от обсуждаемого контекста.


E>>>Там же написано, что подсказка. Додуматься, что очевидно имелось в виду то, что можно заменить int на произвольный класс, и никакого malloca/free не понадобится, не судьба?


E>>>P. S. Даже попкорн полохо лезет под такой некачественный флейм.


G>>Думаете нельзя в C# на стеке данные размещать?

G>>Вот в Java нельзя, только элементарные типы, в C# есть стурктуры.

G>>Не надо показывать свое незнание.


E>А вот обязательно было в моём утверждении подменять "произвольный класс" на "данные"? Именно это я и имел в виду, говоря про неадекват.

А вы можете объяснить разницу?
Re[29]: Работа - с чего начать: С++ или С#?
От: esil  
Дата: 20.03.09 15:26
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>>>>Думаете нельзя в C# на стеке данные размещать?

MK>>>Думаю конкретно esil имеет ввиду, что нельзя разместить в стеке произвольные данные.
MK>>>Массивы, например, туда не засунуть, ибо class

MK>>>А вот что имел ввиду minorlogic я, чесс говоря, тоже не понял.

MK>>>Но эт не страшно

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

G>Как будут работать виртуальные методы при размещении объектов на стеке?

Точно так же, как и при размещении в куче. По указателю на базовый класс можно получить таблицу виртуальных функций, а где в памяти объект этого класса расположен — не важно. Приме ниже привёл.
Re[3]: Работа - с чего начать: С++ или С#?
От: Regulus  
Дата: 20.03.09 15:55
Оценка: :)
Здравствуйте, MxKazan, Вы писали:

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


QT слыхал о таком?
Re[26]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 20.03.09 17:43
Оценка: -1
Здравствуйте, 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[2]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.03.09 18:08
Оценка: :)
Здравствуйте, BulatZiganshin, Вы писали:

BZ>почему он тебе нравится? то, что он красиво выглядит на бумаге, не гарантирует, что тебе понравится на нём программировать реальные большие задачи


Дык вокруг него такой ореол создали, что несколько лет назад плохое слово в сторону дизайна С++ сразу выливалось в анафему высказавшему эту мысль.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[2]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.03.09 18:17
Оценка: -1
Здравствуйте, AndrewVK, Вы писали:

AVK>Хороший топик для потенциальных работодателей. Участников холивара можно смело на должности выше сеньора не брать


Кабздец тебе Андрюха. Заложат тебя в Джетбрэйн. Как пить дать заложат.

А если серьезно, то уровень дискуссии действительно просто супер. Плинтус горами покажется.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.03.09 19:04
Оценка: :)
Здравствуйте, Mamut, Вы писали:

M>Просто так, по учебникам, изучить не получится. Надо на каждом из них селать пусть п менькому, пусть для себя, но проекту


(куча мата) ... Да хотя бы начал с учебника. А ведь он начал с вопроса "где найти идиотов которые его возьмут на работу и будут платить ему за обучение".

Само собой, что теория без практики — деньги на ветер.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[71]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 20.03.09 19:31
Оценка: +1
Здравствуйте, Mamut, Вы писали:

h>> Гуглохром например, и легаси нету и работает на десктопе


M>О, кстати. [holywar offtop on] как это так — написан на кроссплатформенном С++, а кроссплатфоренной версии нет, и в ближайшем будущем не предвидится? 0_o [holywar offtop off]


Дык не под QT написан то А если серьезно, то МакОС и Линукс версии сейчас готовятся.

M>Гуглохром хороший пример нового приложения. Толкьо вот там С++ изначально — куча. Это и вебкит, и V8.


Ну и что? Никого же не смущает использование в .Net софте нативно Трайдента
Re[4]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 20.03.09 19:31
Оценка: :)
Здравствуйте, WolfHound, Вы писали:

VD>>А если серьезно, то уровень дискуссии действительно просто супер. Плинтус горами покажется.

WH>Угу. Люди не знающие .НЕТ против людей не знающих С++.

И дельфист, не знающий ни того, ни другого
Re[30]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 20.03.09 21:08
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>Круто, а фабричный метод так изобразите?

А зачем в данном случае фабричный метод?..
Но вообще-то возможно и изображу, правда тут надо бы уточнить, что ты понимаешь под "фабричный метод", так как может и изображу, а может и нет...

G>ЗЫ. Передача указателя на стек до добра не доводит, большенство уязвимостей в ПО так и получаются.

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

Про то, что в больших программах 99% кода достаточно глубоко запрятаны для того, чтобы не смочь породить уязвимость, я и не говорю..
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[66]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 21: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[4]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 20.03.09 22:05
Оценка: +1
Здравствуйте, WolfHound, Вы писали:

VD>>А если серьезно, то уровень дискуссии действительно просто супер. Плинтус горами покажется.

WH>Угу. Люди не знающие .НЕТ против людей не знающих С++.
WH>Смешно читать и тех и других.

Не только, люди ещё специализируются на разных направлениях.
Нужно разобрать угил.
Re[71]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 20.03.09 22:15
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>У гугла столько ресурсов, что они могуть ОС в машинных кодах написать.

G>И если им будет надо — напишут.

Не понимаю я вот этого аргумента! Если они такие лохи, что всё делают неверно и неэффективно, то почему у них всё так хорошо?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[57]: нет, ну если ты настаиваешь... ;)
От: Erop Россия  
Дата: 20.03.09 22:26
Оценка: +1
Здравствуйте, 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 22:35
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>Круто, а фабричный метод так изобразите?

G>ЗЫ. Передача указателя на стек до добра не доводит, большенство уязвимостей в ПО так и получаются.

Я заню, что круто ))
Нет, фабричный метод так не изображу. Только не надо говорить "ну тогда и нет никакого ООП на стэке". Естественно одним стэком не обойдёшься. Но стэк позволяет убрать очень много выделений памяти.

P. S. Указатель не был заменён на ссылку по соображениям наглядности для участвующих в дискуссии, которые быть может не сильно разбираются в С++.
Re[50]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 22:53
Оценка: -1
Здравствуйте, esil, Вы писали:

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


G>>Стоит учесть что каждый проход GC в программе на C# очищает вс первое поколение в таком случа и двигание объектов не происходит, то немного исправляет результат в пользу C#, но даже если бы код на C# работал в 2 раза медленее, то он оказался бы в 3 раза быстрее стандартного аллокатора для C++.


E>И вот таки да, предположим у нас получилость так, что из-за частых выделений/освобождений памяти наш продукт на С++ работает недопустимо медленно. Что можно с этим сделать? Для начала собрать профиль размеров выделяемых блоков, который нам покажет, что большинство выделяемых блоков имеют размер 256 байт. А дальше можно сделать например так:


E>
E>//поскипано
E>


Только делать так не нужно. В первую очередь стоит заняться алгоритмический оптимизацией или даже архитектурной, а не кидаться писать кастомный аллокатор.
Причем этот подход работает для любых языков.
Re[51]: Работа - с чего начать: С++ или С#?
От: esil  
Дата: 20.03.09 23:10
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

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


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


G>>>Стоит учесть что каждый проход GC в программе на C# очищает вс первое поколение в таком случа и двигание объектов не происходит, то немного исправляет результат в пользу C#, но даже если бы код на C# работал в 2 раза медленее, то он оказался бы в 3 раза быстрее стандартного аллокатора для C++.


E>>И вот таки да, предположим у нас получилость так, что из-за частых выделений/освобождений памяти наш продукт на С++ работает недопустимо медленно. Что можно с этим сделать? Для начала собрать профиль размеров выделяемых блоков, который нам покажет, что большинство выделяемых блоков имеют размер 256 байт. А дальше можно сделать например так:


E>>
E>>//поскипано
E>>


G>Только делать так не нужно. В первую очередь стоит заняться алгоритмический оптимизацией или даже архитектурной, а не кидаться писать кастомный аллокатор.

G>Причем этот подход работает для любых языков.

Может быть да, может быть нет. Может быть архитектура крива, а может быть она правильна, хотя в ней аллоцируется куча мелких объектов. Это вопрос чего угодно (религии, политики, философии), но только не сравнения аллокаторов.
Верным остаётся одно: на любой дурацкий синтетический тест найдёт столь же дурацкий аллокатор, который этот тест "уделает".

Лично мне комфортно от того, что можно пробовать строить различные архитекутры, не думая изначально о том, сколько каких мелких объектов где выделяется, потому что в случае чего можно расчехлить тяжёлую артиллерию. Кому-то такой подход кажется нормальным, кому-то нет. Но по крайней мере есть выбор. Хотя наличие выбора может кому-то тоже показаться плохой идеей. ))
Re[74]: Плохому танцору на С++ лучше не прогать...
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 21.03.09 00: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 Россия  
Дата: 21.03.09 00:23
Оценка: -1
Здравствуйте, gandjustas, Вы писали:

E>>а скорость разработки, на уровне "надо ещё вчера" -- нет...

G>При разработке для заказчика только так и можно работать.
IMHO, при разработке для заказчика надо работать так, как надо заказчику

G>Причем заказной софт — гораздо большая часть разработки.

Ну и что? Индусов больше всего, потом наверное код на коболе идёт...
ХиндиС -- тут очень даже к месту. Если всё, кроме сроков разработки и реакции на изменения требований, не важно, то C# -- твой выбор. Я с этим и не спорю.
И проектировать тоже тогда не надо, потому что время терять. Надо писать как можно быстрее, а если потом заказчик, или тот, кто думает, что знает нужды заказчика, это дело завернёт, попрофилять и допилить как-то побыстрее...

Всё верно. Да так и надо вести разработку в таких условиях!
Но это один такой специфический подход к программированию.

Есть и другие ниши. Скажем ретейл. Обычно коробочный софт разрабатывают по какому-то графику, есть цикл выпуска версий там, то, сё, есть время на проектирование, на тестирование, на качество разработки, короче. Если ты будешь выпускать версии раз в месяц, ты только проиграешь! Так что выгодно выпускать версии пореже, но покруче...

А ещё есть разработка технологий и моторов всяких. Скажем сидят люди из 17-й версии СУБД делают 18-ю. Там своя специфика, и C# ещё меньше в тему. Ну и т. д.
Или, наоборот, сидят люди и пишут то, что никто ещё не писал и как это писать не знает. Тоже интересная, и тоже особенная работа...

При этом все эти активности -- программирование. Но они все разные. И кому-то нравится одно, а кому-то другое...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[5]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.03.09 02:44
Оценка: +1
Здравствуйте, Erop, Вы писали:

VD>>Почему всем будет смешно, если им расскажут о подмастерьи физика, химика или врача. Так почему же подмастерья программистов обсуждаются серьезно?

E>Ну посмейся. Слова "аспирант", "ординатура" и "научный руководитель диплома" и "производственная практика" для тебя новы?

Очень смешно. До аспирантуры или ординатура человек обязан отучиться минимум 4 года в профильном институте. В лучшем случае за бесплатно. Сейчас многие деньги уже платят. Тут же человек хочет со знанием ПХП без какой бы то ни было подготовки идти работать С++-программистом.

Вот пусть пойдет по учится 4 годика, а потом можно будет о подмостерье говорить. А не хочет 4 годика, так пусть хотя бы месяца три книжки почитает и примерчики по решает... дома. Глядишь вопросы сами собой отпадут, и разговоры перестанут быть такими детскими и наивными.

Я сутки работал, трое учился, а по вечерам еще с тем же С++ разбирался. Просить у кого-то за это деньги мне даже в голову не приходило.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[28]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 21.03.09 05:33
Оценка: :)
Здравствуйте, Erop, Вы писали:
E>Может уважаемый MVP снизойдёт к нам, сирым и убогим и вспомнит таки азы, а уже потом будет позориться?
А что вы назыаете "азами"? Я на плюсах в последний раз писал, афаик, в 2002. И не считаю знания таких деталей "азами". Азы — это, к примеру, понимание того, в каком порядке пишутся программы
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[29]: Дык известное дело: поспешишь - людей наспешишь ;)
От: Erop Россия  
Дата: 21.03.09 07:00
Оценка: +1
Здравствуйте, Sinclair, Вы писали:

S>А что вы назыаете "азами"? Я на плюсах в последний раз писал, афаик, в 2002. И не считаю знания таких деталей "азами". Азы — это, к примеру, понимание того, в каком порядке пишутся программы


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

Не вижу сортировки по алфавиту.

и

А он неявно сортирует??? Офигеть. Я как отвык от того, что для множества нужно задавать отношение частичного порядка.
Я надеюсь, уточнение сортировки в Case-insensitive/accent-sensitive для турецкой локали не усложнит эту безусловно прекрасную программу?

твои же слова?

Вот таки они довольно смешно звучат, особенно если сравнить твой тон и твою эрудированность в вопросе
Так что я и советую таки, перед тем как в след. раз людей смешить, разобраться таки в вопросе СНАЧАЛА...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[66]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 21.03.09 07:15
Оценка: +1
Здравствуйте, Хвост, Вы писали:
Х>просто вот когда дело доходит до новых апи — здравствуй интероп с нейтивом, хочешь массив на стеке — здравствуй ансейф, тот же пэйнт.нет афаир просто насквозь пропитан ансейфом, зачем тогда сишарп? хорошие вещи делаются только в нейтиве, вот тот же пример с выводом строк, для такой забавы как флейм на рсдн и стримы с регекспами не грех использовать, а вот если бы ето была программа промышленных маштабов — скажим анализатор логов, то здравствуй мем-маппед файлы да стейт-машины с отсутствием аллокаций, и писать етона си++ без ifstream и multiset, а не на сишарпе с gc и аллокацией на каждый чих.
О да. Анализатор логов — это конечно гораздо промышленнее сайта с дневной посещаемостью в сотню тысяч хитов.

На всякий случай напомню, что на каждую строчку лога, которую читает анализатор, этот самый сайт успевает авторизовать пользователя, сбегать в базу, раскрасить синтаксис, выдать HTML. И всё это "с GC и аллокацией на каждый чих", и стримами, и регекспами.
Но нет, конечно же авторы анализаторов логов считают себя гораздо более главными. Удачи.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[30]: Работа - с чего начать: С++ или С#?
От: minorlogic Украина  
Дата: 21.03.09 07:56
Оценка: -1
Здравствуйте, alsemm, Вы писали:

A>После таких вопросов и появляются стереотипы, что С# отупляет


Неа , правильно выражение "разжижает мозг"
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[68]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 21.03.09 19: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]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 21.03.09 19:53
Оценка: :)
Здравствуйте, hattab, Вы писали:

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


G>>Только делать так не нужно. В первую очередь стоит заняться алгоритмический оптимизацией или даже архитектурной, а не кидаться писать кастомный аллокатор.

G>>Причем этот подход работает для любых языков.

H>Ты сам недавно писал, что архитектура ортоганальна перформансу

Да.
Архитектурная оптимизация — когда вы избавляетесь от части ненужных вычислений или делаете так что длительные вычисления не оказывают влияния на наблюдаемый перфоманс.
Re[53]: Работа - с чего начать: С++ или С#?
От: esil  
Дата: 22.03.09 18:18
Оценка: :)
Здравствуйте, gandjustas, Вы писали:

E>>Лично мне комфортно от того, что можно пробовать строить различные архитекутры, не думая изначально о том, сколько каких мелких объектов где выделяется, потому что в случае чего можно расчехлить тяжёлую артиллерию.

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

Это не правда. Если бы GC позволял не думать о выделении и освобождении памяти, то какой смысл бы был сравнивать производительность GC и стандартного аллокатора С++? Или эти сравнения в топике были бессмысленными?
Как можно не думать о выделении и освобождении объектов, если из-за этого может оказаться очень низкая производительность приложения?

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

G>Причем чаще всего прчиной оказывается применение неподходчщего алогоритма. Очень редко приходится нарываться на ситуацию когда низкая производительность вызвана особенностями платформы.

А причём здесь алгоритмы, если речь идёт о декомпозиции на объекты? Если бы дело было только в алгоритмах, то тогда не применяли бы ООП, а так бы и писали эти алгоритмы на структурных языках. Алгоритм может быть одним и тем же, но по-разному представляться с помощью объектов, работать с разными объектами. По вашим словам один и тот же алгоритм может быть одновременно "подходящим" и "неподходящим" в зависимости от используемой объектной модели задачи. А если Вы подразумеваете под разными алгоритмами использование разных объектных декомпозиций, то тогда Вы просто ограничиваете доступный набор этих декомпозиций, с помощью которых можно решить задачу, просто называя такие декомпозиции неподходящими из-за скорости выделения памяти. А если я пишу программу на С++, то выбор доступных декомпозиций расширяется. Разве я не прав?
Re: Работа - с чего начать: С++ или С#?
От: les_paul  
Дата: 22.03.09 19: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]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 22.03.09 19:40
Оценка: :)
Здравствуйте, esil, Вы писали:

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


E>>>Как можно не думать о выделении и освобождении объектов, если из-за этого может оказаться очень низкая производительность приложения?

G>>Спокойно, и произовдительность нормальная будет.

E>Т. е. Вы утверждаете, что при правильно выбранном алгоритме независимо от объектной декомпозиции производительность будет одного порядка?

Для систем с GC — да. Это и позволяет концентрироваться на алгоритме.
Для C++ — нет. Там надо думать о том как распределяется память под объекты.

E>>>А если я пишу программу на С++, то выбор доступных декомпозиций расширяется. Разве я не прав?

G>>Неправ. Слабые выразительне способности C++ не позволяют мере проводить объектую декомпозицию так как хочется.
E>Примеры?
1)Как минимум нельзя просто вернуть динамический объект из метода, потому что неизвестно освободят ли его.
2)Осутствуют многие языковые конструкции как yield, ФВП, делегаты, события.
3)Отсуствие метаинформации о типах не позволяет создавать решения вроде IoC контейнеров, OR-мапперов, связывания данных (binding) и других полезных фишек.

Я знаю что некоторые недостатки исправляются бустом, но обычно это порождает сложночитемый код.
Re[60]: Поздравляю :D
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 22.03.09 21: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[2]: Работа - с чего начать: С++ или С#?
От: ppp222  
Дата: 16.04.09 07: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[6]: Работа - с чего начать: С++ или С#?
От: ppp222  
Дата: 17.04.09 04:23
Оценка: +1
Здравствуйте, anton_t, Вы писали:

_>Не поменялось, а добавилось. Хочешь в 3,5-м дотнете пользоваться WinForms — пользуйся, никто не запрещает.


Я тебя умоляю, мне — то эти сказочки не рассказывай. Если MS чего решит, то выпьет обязательно, только я к этим шуточкам отношусь крайне отрицательно
Re[7]: Работа - с чего начать: С++ или С#?
От: WFrag США  
Дата: 17.04.09 05:02
Оценка: +1
Здравствуйте, ppp222, Вы писали:

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


Во-первых, если говорить о строках в применении к C++, то это скорее std:string, нет?

А во-вторых, о какой эффективности идёт речь, если «строки — это массив символов, завершающийся нулём»?
Re[7]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.04.09 05:14
Оценка: +1
Здравствуйте, ppp222, Вы писали:

P>Стихия С++ — это эффективный код, где строки — это массив символов, завершающийся нулём, а не вызов библиотечных функций.


Этот перл достоин отдельго осмеяния.

Если строки — это массив символов, завершающийся нулём, то насколько эффективно получение длины строки?

Да и вообще-то строки как массивы символов используются в C, а не С++
Re[7]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 20.04.09 03:29
Оценка: :)
Здравствуйте, ppp222, Вы писали:
P>Сборщик мусора противопоказан С++. Стихия С++ — это эффективный код, где строки — это массив символов, завершающийся нулём, а не вызов библиотечных функций. И не потому, что стандарт С++ какой — то недоразвитый, а потому, что работая таким образом мы получаем прирост производительности от десятков до сотен процентов.
Юморист. Пиши еще. Строки без длины — это конечно прирост производительности, это да.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[12]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.04.09 19:16
Оценка: :)
Здравствуйте, criosray, Вы писали:

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


G>>>>>Не далее как вчера написал на F# код, который эффективнее C++-ного варианта в 8 раз.

Х>>>>смешно
G>>>Ага, я тоже от души поржал когда резщультаты тестов смотрел.

SD>>а потом мы все от души поржем когда кто-нибудь знающий покажет вам результаты F... Fortran'а


C>А что мы там увидим? Неужто еще больший прирост производительности?


C>Я думаю, что gandjustas подразумевает, что на F# получается более эффективный код по критерию (лаконичность+читабельность) / производительность.


Да вот в этот раз нет. Именно по замерам времени выполнения код на F# оказался быстрее C++_ного варианта в 8 раз.

Правда никто мегаоптимизацией на С++ не занимался.
Вот и хочется увидеть вариант решения задачи на С++ от крутых перцев из КСВ.
Re[15]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 23.04.09 22: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[18]: Работа - с чего начать: С++ или С#?
От: catBasilio  
Дата: 24.04.09 17:50
Оценка: :)
Здравствуйте, Sorantis, Вы писали:

S>Можно конкретный пример? Очень интересно, что за абстракцию можно сделать на плюсах которая будет невозможна на Java например?


ну например std::auto_ptr.
UNIX way — это когда тебе вместо туалетной бумаги дают топор, рубанок и карту близлежащего леса
Re[19]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.04.09 17:59
Оценка: +1
Здравствуйте, catBasilio, Вы писали:

S>>Можно конкретный пример? Очень интересно, что за абстракцию можно сделать на плюсах которая будет невозможна на Java например?


B>ну например std::auto_ptr.


Это абстракция? Это костыль помогающий ходить без одной ноги в условиях когда нет автоматического управления памятью.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.04.09 19:19
Оценка: -1
Здравствуйте, Хвост, Вы писали:

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


G>>ИМХО лучше вместо кривых костылей с самописными GC, "умными" указателями и прочей лабудой использовать нормальные языки.

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

Кстати тесты по быстродействию операций выделения-освобождения памяти в с++ и .NET я приводил — C++ сливает.
И это без умных указателей и прочей лабуды, с ними банальная вещь — работа с памятью — будет еще медленнее.
Re[9]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 24.04.09 19:19
Оценка: +1
Здравствуйте, Хвост, Вы писали:

G>>ИМХО лучше вместо кривых костылей с самописными GC, "умными" указателями и прочей лабудой использовать нормальные языки.

Х>"нормальные" языки дают оверхед на пустом месте, единственный высокоуровневый язык без оверхедов — С++
Очень смешно.
Re[23]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.04.09 19:23
Оценка: -1
Здравствуйте, catBasilio, Вы писали:

B>Если С# так хорош, то почему всякие Crysis, Quake, FarCry и прочее на нем не пишут?


Если C++ так хорош, то почему на нем не пишут тысячи бизнес-систем?
Почему самые высоконагруженные сайты написаны не на С++?

Из игрушек кстати Halo 3 вполне на C#.
Re[22]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 24.04.09 19:43
Оценка: +1
Здравствуйте, criosray, Вы писали:

Х>>или ммм... такую "фичу" как множественное наследование,

C>Множественное наследование — моветон, сродни goto. Это ХОРОШО, что его нету, иначе количество граблей, генерируемых индусами возразло бы экспоненциально.

Ты уверен, что апелляция к "индусам" в этом контексте выглядит позитивно?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[25]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.04.09 20:07
Оценка: :)
Здравствуйте, Хвост, Вы писали:

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


G>>Если C++ так хорош, то почему на нем не пишут тысячи бизнес-систем?

Х>потому что бизнес-логика может писатся хоть на скриптах, всем начхать на оверхед, упирается в базу обычно. То что интерфейс лагает слегка — не имеет ни для кого значения. Обсуждалось уже вроде.
так С++ такой крутой, с высокоуровневыми абстракциями и прочей лабудой, чего бы на нем не писать все это?

G>>Из игрушек кстати Halo 3 вполне на C#.

Х>Пруфлинк. Могу допустить что там игровая логика написана на C#, но движок — никогда.
Движок — XNA, набери в гугле — сразу все увидишь.
Re[26]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 24.04.09 21: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]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.04.09 22:11
Оценка: -1
Здравствуйте, Хвост, Вы писали:

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


G>>>>Если C++ так хорош, то почему на нем не пишут тысячи бизнес-систем?

Х>>>потому что бизнес-логика может писатся хоть на скриптах, всем начхать на оверхед, упирается в базу обычно. То что интерфейс лагает слегка — не имеет ни для кого значения. Обсуждалось уже вроде.
G>>так С++ такой крутой, с высокоуровневыми абстракциями и прочей лабудой, чего бы на нем не писать все это?
Х>дык потому что мало C++ программистов, дорого они стоят, а бизнес-систем много. и поддерживать их будут программеры "на местах", а им лучше язык попроще дать, без острых углов.
Судя по форуму — совсем немало. А судя по вакансиям хорошему программисту на шарпе платят больше, чем хорошему программисту на С++.

G>>>>Из игрушек кстати Halo 3 вполне на C#.

G>>Движок — XNA, набери в гугле — сразу все увидишь.
Х>я вот призадумался, ты или не знаешь что такое движок, или толком не понимаешь что такое XNA, или ты так далёк от игростроя что почитав "интернеты" придумал свой мир где дотнет захватил игрострой :-D
Я отлично знаю что такое движок, даже сам писал что-то подобное, и даже дописал. А потом понял что херней занимался долго время.

Х>p.s.

Х>погуглил
Х>Halo 3 вообще никаким боком к XNA не касается, что и не удивительно для игры класса AAA.
Да ну. И на чем ты напишешь игру для XBox 360?
Re[18]: Работа - с чего начать: С++ или С#?
От: ollv СССР https://youtu.be/DQDoYs6wHoo
Дата: 24.04.09 22: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]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.04.09 22: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]: Работа - с чего начать: С++ или С#?
От: Sorantis Швеция  
Дата: 24.04.09 22: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 23:04
Оценка: :)
Здравствуйте, gandjustas, Вы писали:
G>Читать больше надо. От константности отказались как раз в силу сложности обеспечения честной константности.
а теперь расскажи мне, в чём сложность обеспечения четной константности, если даже C++ ето отлавливает на етапе компиляции? если в с++ запретить касты, разрушающие константность то окромя прямой работы с памятью возможностей изменить константный объект нет, почему же весь такой сейфанутый C# не одолел модификатор const?
People write code, programming languages don't.
Re[30]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 24.04.09 23:28
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>А я вот специально задался вопросом как писать для XBox 360 без XNA. Вообще материалов в сети по этой теме нету.

G>Никаких средств разрабтки без XNA не нашел.
ну как, есть железка для дебага — xbox 360 dev kit, ето тотже ящик только с возможностью подключения к нему с персоналки и дебага всех потрохов, разработка ведётся так — на свой компутер ставишь студию, ставишь дхсдк, рядом ставишь хящик девкит, девкитовский софт ставишь себе на компутер. И всё, здравствуй С++ и Direct3D, фигач — заливай в девкит, дебажь в студии как обычный C++ код (вроде удалённой отладки), радуйся жизни. XNA ето такой небольшой фреймворк для создания казуальных игр скорее, или прототипирования идей, но на хне производительности не добиться, на платформах где игры в целях оптимизации работы аллоцируют динамическую память только один раз за сеанс — гц, дотнет, сишарп, хны пролетают.
People write code, programming languages don't.
Re[26]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 25.04.09 10:28
Оценка: +1
Здравствуйте, criosray, Вы писали:

C>Откуда информация? Дайте ссылку на авторитетный источник.


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

Отдельное спасибо за удачную подборку саму по себе.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[21]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.04.09 12: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 12: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[23]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.04.09 17: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[23]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 25.04.09 23:51
Оценка: +1
Здравствуйте, ollv, Вы писали:

Я уже много лет как ушел с С++, и как же я рад этому... Глядя на ЭТО понимаю на сколько правильным оказался мой выбор.

O>task<_1call, task<_2call > > t (bind(&_1call::m<dyadya_vasya>), task<_2call, task<_3call >... >... );


Re[23]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.04.09 20:11
Оценка: :)
Здравствуйте, catBasilio, Вы писали:

B>Если С# так хорош, то почему всякие Crysis, Quake, FarCry и прочее на нем не пишут?


Банально выжимают производительность. Тот же Quake писался на С. Кормак ООП в принципе не приветствовал никогда.
Кстати, большой объем кода в играх — это логика игры. И его ни один идиот на С не пишет.
Есть и игры написанные на 90% на управляемом коде. Так что выигрышь от применения С++ и С не велик.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 26.04.09 20:19
Оценка: :)
Здравствуйте, VladD2, Вы писали:

VD>Не, так не честно. Слюноотделение есть, а вкуса нет.


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

VD>>>Ой не верю. Для этого нужно GC.

ГВ>>Нет. GC для этого не обязателен.
VD>Из известных мне вариантов есть еще только подсчет ссылок. [...]

Повторю: ни GC, ни подсчёт ссылок для ФП-стиля не обязательны.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[21]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 27.04.09 10:23
Оценка: :)
Здравствуйте, Хвост, Вы писали:

ГВ>>>И это очень хорошо, что не нужно напряженно следить за настроениями в комитете. Нет, это (читай по буквам) О Ч Е Н Ь хорошо.

C>>Это очень плохо. Язык должен развиваться. Посмотрите на С# — кому плохо, что за эти 7 лет на пороге уже 4ая версия языка, где каждая версия — серьезный шаг вперед?..
Х>язык C++ в своей молодости тоже бурно развивался, почитай D&E, только вот когда количество программистов на нём выросло до миллионов, количество платформ и компиляторов до десятков, то тут уже начинает главенствовать принцип "не навреди". C#, дай бог ему здоровья, если обретёт такой же ареал то будет развиваться тоже не шустро, уж поверь.

Если бы Вы что-то знали о С# и об Андерсоне, Вы бы не писали такой чуши.
Re[23]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 27.04.09 10:46
Оценка: :)
Здравствуйте, Хвост, Вы писали:

Х>>>язык C++ в своей молодости тоже бурно развивался, почитай D&E, только вот когда количество программистов на нём выросло до миллионов, количество платформ и компиляторов до десятков, то тут уже начинает главенствовать принцип "не навреди". C#, дай бог ему здоровья, если обретёт такой же ареал то будет развиваться тоже не шустро, уж поверь.

C>>Если бы Вы что-то знали о С# и об Андерсоне, Вы бы не писали такой чуши.

Х>Ганс Христиан? Как же, знаком, знаком. "Принцесса на горошине", "Дюймовочка", "Гадкий утёнок", да что там, "Стойкий оловянный солдатик", ето же всё классика и знакома каждому.

Опечатка. Подразумевался Андерс. Андерс Хайлсберг.
Х>А по существу, в чём чушь? Удиви меня.
В том, что для С# никогда не будет "десятков компиляторов и платформ" — язык будет продолжать развиваться во много раз быстрее С++ до тех пор, пока будет куда развиваться, а путей развития для него все еще — море.
Re[22]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 27.04.09 11: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]: опечатка
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 29.04.09 07: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[31]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 29.04.09 08:53
Оценка: +1
Здравствуйте, COFF, Вы писали:

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


S>>Тут снова вопрос производительности поднялся
Автор: void29091988
Дата: 29.04.09
.

S>>Обращение не конкретно к ГВ, а к тем, кто пожелает защитить честь неуправляемого кода, или просто помочь человеку разобраться с тем, что он делает не так.

COF>Это не сравнение управляемого и неуправляемого кода, а тестирование подсистем ввода-вывода


Дело не в том как написано и что тестируется и даже не в конкретном экспериментаторе (который думает что разница в контроле типов в рантайме), а в интерпретации результата.
Победил C# — недоумение
Победил С++ — значит C# — тормоз

Притом человеку не важно, что тесты заняли около 3х секунд, если бы и 30 в обоих случаях, он бы не удивился. Ему важно что на такой синтетике (10 тыс. раз по 10 тыс символов) что-то быстрее, притом что он гораздо больше потеряет в эффективности принимая непутевые решения.
Re[20]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 29.04.09 11:46
Оценка: :)
Здравствуйте, criosray, Вы писали:

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

Лишь только NDA останавливает меня от постинга особо смачных кусков проекта на C# писанного индусами с гринкартой.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[32]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 29.04.09 15:53
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

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


ГВ>>- арифметикой указателей можно и не пользоваться;

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

В пору, когда я писал на C++ мне были абсолютны чужды и непонятны лозунги о безопасности управляемого кода. У меня в руках был мощный инструмент, использовать который я знал как (к сожалению, в прошедшем времени). Тогда казалось: неумеешь писать надежный код на небезопасном языке — не берись, а умеешь — так если что, все под рукой.

Теперь я немного другого мнения о безопасности кода: Это как ABS! Если умеешь эффективно пользоваться тормозами и регулярно оттачиваешь свои навыки — ABS не нужен. Если ездишь из точки A в точку B без жажды адреналина, или за руль эпизодически садится жена — лучше бы ABS иметь чем не иметь. Пристегиваешь ремень безопасности, потому как не уверен за джигитов, которые носятся вокруг.
И убеждать водителей, не привыкших к ABS, что они без ABS не смогут ездить, дохлый помер...

Так и с unsafe кодом. Боишься не за себя, а за соседа, у которого нет нужных навыков. А раз компилятор ограничивает от потенциально опасных действий всех одинаково, можно внимание, необходимое для контроля за этим, направить в другое русло.
Re[29]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 29.04.09 17:27
Оценка: +1
Здравствуйте, COFF, Вы писали:

ГВ>>>Да он почти всегда к одному сводится: к куче вложенных вызовов "абстрактных слоёв".

G>>И что? 2-3 виртуальных вызова вообще незаметны будут ни при каком раскладе.
G>>Давай конкретно, о каком penality идет речь?

COF>Так скажем, не будут заметны в большинстве случаев. Однако, опираясь на практику как критерий истины , я могу однозначно сказать, что не только виртуальные, но и обычные вызовы влияют на производительность. Проверяется это очень просто — я интенсивно использую инлайны в проектах на C++, так вот время отклика для релизной версии в несколько раз (если не на порядок) лучше чем в отладочной — скажем 40-50 мс и 300-400 мс. Что это значит для пользователя я думаю объяснять не надо. Да что там говорить, достаточно почитать рекомендации по написанию производительного кода на яве или .нет — как можно меньше маленьких функций, объектов, все вычисления выносить в одну большую простыню, тогда может jit что-то и сделает. На C++ так извращаться не надо — в итоге программы получаются эффективными, но асбсолютно не теряют в читаемости.

Сложно потерять то, чего изначально не было.

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

Достигнута.

COF>У C++ конечно есть недостатки и наверное можно придумать язык лучше, но по моему проблема в том, что вместо лучшего навязывается другое. Скажем, лисп — это отличный язык, но он не лучше и не хуже C++, он просто другой. То же самое с C# и явой.


Ну давайте разовьем мысль:
С++ не лучше Паскаля — он просто другой
С++ не лучше Бейсика — он просто другой
...
Вы хоть понимаете, что это демагогия и софистика? Да С++ не лучше лиспа, а хуже. С++ не лучше С#, а хуже. С++ не лучше явы, а хуже. Если Вы скажете что это тоже демагогия, то будете правы потому, что любое сравнение не имеет смысла, если проводится в отрыве от контекста реальных задач программиста, и если не указаны критерии сравнения.
Re[32]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 29.04.09 18:45
Оценка: +1
Здравствуйте, COFF, Вы писали:


S>>Если кто так не сделает, то его код будет работать медленнее, чем C++ и ему никак не догнать плюсы по перфомансу, что означает конец карьеры программиста


COF>На самом деле, это все (и еще много чего другого) я делаю когда пишу на C++, если надо написать действительно быстрый код. То что Вас это забавляет показывает только то, что с задачами, критичными по скорости Вам сталкиваться не приходилось. Увы...


Быстрый код получается не тогда, когда Вы тратите 90% времени на техническую оптимизацию кода и 10% на алгоритмизацию, а 90% на алгоритмизацию, 10% на техническую оптимизацию.
Re[34]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 29.04.09 19:02
Оценка: :)
Здравствуйте, criosray, Вы писали:

C>Ну во-первых, очень многое поменялось и сейчас 99% WM устройств с .NET CF 3.5

C>Во-вторых, Вы не видитте разницы между CLR для мобильных телефонов и CLR для полноценных компьютеров?

Нет, не вижу разницы. Серьезно
Re[36]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 29.04.09 19:28
Оценка: +1
Здравствуйте, COFF, Вы писали:

COF>Хорошо, вот более релевантная ссылка — просто не имею привычки (к сожалению) локально сохранять все статьи, которые я прочитал, чтобы при случае была возможность блеснуть на rsdn Поэтому пришлось погуглить немного

COF>http://xman892.blogspot.com/2005/11/compact-framework-performance-hints.html
И где там про то, что всё нужно пихать в один большой метод? Наоборот вот на инлайнинг указывают...
Я так и не понял, причем здесь рекомендации по Компакт FW и обычный PC'шный FW?
А так списочек вполне стандартный, но он лишь указывает на возможные узкие места.
Кстати, в С++ нет виртуальных методов? А, просматривая, например, исходники Гугл Хрома, не смущает что и там есть всякие set/get а-ля свойства?
Re[35]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 30.04.09 02: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[34]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 30.04.09 08:33
Оценка: -1
Здравствуйте, COFF, Вы писали:

VD>>На самом деле это многое говорит... о тебе.


COF>Я просто стараюсь избегать преждевременной пессимизации кода.


Так это и есть пессимизация кода, если Вы во время написания кода стараетесь экономить на количестве тактов процессора и байтов памяти, там, где это абсолютно не принципиально и только отвлекает Вас от, собственно, решения поставленной задачи.
Re[37]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 30.04.09 10: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[31]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 04.05.09 14:35
Оценка: :)
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ> ГВ>> C++ предполагает три различных способа передачи параметров: значение, ссылка, указатель.


ГВ> M>Учитывая, что два последних — это, по сути, одно и то же...


ГВ> Все они одно и то же — значение чего-то.


Я имею в виду — что ссылка _ это адрес чего-то, что указатель — это адрес чего-то
avalon 1.0b rev 146


dmitriid.comGitHubLinkedIn
Re[39]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 04.05.09 15:36
Оценка: +1
Здравствуйте, COFF, Вы писали:

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


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


G>>Кстати. Твой знакомый работал и никого не беспокоило быстродействие кода, а ты в первую очередь занялся "выпрямлением интерфейсов", что сократило простор для алгоритмической или архитектурной оптимизации.


COF>Вообще, я не верю в подход — сделай как-нибудь, потом запустим профайлер и посмотрим где тормозит.

Зря. Это единственный возможный подход. В люом нетривиальном случае только профайлер может сказать где тормозит.

COF>Скорее всего, окажется, что тормоза равномерно распределены по всей программе.

Ты ни разу профайлером не пользовался? Почти всегда тормоза сосредоточены в 10% кода. Только без профайлера не узнаешь что это за 10%.

COF>Часто говорят, что о безопасности надо думать с самого начала и всегда, невозможно небезопасную программу сделать безопасной.

В большенстве случаев это верно. Вопрсы безопасности влияют на архитектуру.

COF>Вот то же самое, я уверен, можно сказать и о производительности — о ней надо думать всегда.

В большенстве случаев это неверно. Вопросы производительности, касающиеся вычислений, рекдо влияют на архитектуру.
Вопросы производительности, связанные с IO и многопоточностью, которые как раз влияют на архитектуру, "выпрямлением интерфейсов" не решаются.
Re[36]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.05.09 15:53
Оценка: +1
Здравствуйте, COFF, Вы писали:

COF>Это культура. Если одинаково просто написать ++j и j++, for( int j = count; j-- > 0; ) и for( int j = 0; j < count; j++ ), то при прочих равных надо выбирать оптимальный вариант — это и называется избегать пессимизации кода.


Это махровое ламерство. Собственно данная беседа для меня потеряла всяческий интерес.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[34]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 05.05.09 21:19
Оценка: +1
Здравствуйте, samius, Вы писали:

S>Срок жизни такого замыкания ограничен блоком, в котором объявлена лямбда. А значит за пределами этого блока при обращении к лямбде ждет UB. Т.е. лямбду можно передать аргументом, но вернуть в качестве результата ни лямбду, ни что-то ее использующее нельзя. Как можно говорить о классическом замыкании то что работает как замыкание только в одну сторону?

в с++ лямбда может копировать контекст по значению, тогда UB отменяется.
People write code, programming languages don't.
Re[34]: Правильная ссылка
От: Хвост  
Дата: 05.05.09 22: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[35]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 05.05.09 22: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[39]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.05.09 23:31
Оценка: -1
Здравствуйте, Геннадий Васильев, Вы писали:

VD>>>>Еще как стаовится. Исчезает целый класс применения.


ГВ>>>Да ну? И какой же это класс?

S>>http://en.wikipedia.org/wiki/Closure_(computer_science)#Closures_and_first-class_functions

ГВ>Э... Ты хочешь сказать, что наличие замыканий в C++0x свидетельствует об отсутствии замыканий в C++0x? Я в самом деле тебя не понимаю.


Редкосная демагогия. Просто противно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[40]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 05.05.09 23:33
Оценка: +1
Здравствуйте, VladD2, Вы писали:

ГВ>>Э... Ты хочешь сказать, что наличие замыканий в C++0x свидетельствует об отсутствии замыканий в C++0x? Я в самом деле тебя не понимаю.

VD>Редкосная демагогия. Просто противно.

Последи лучше за собой. O'K?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[37]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.05.09 23:38
Оценка: -1
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Я думаю, замкнуть контекст надо по значению. Ну, или через shared_ptr — всё как обычно.


Именно! Как обычно — закат солнца вручную...
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[39]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 06.05.09 06:29
Оценка: -1
Здравствуйте, Геннадий Васильев, Вы писали:

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


Х>>>как раз таки остутствие гц и возможность захватывать контекст по ссылке обеспечивает экстремальную производительность (нет боксинга для стековых объектов как в дотнете, ага).

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

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

Ага, "контроль жазненного цикла" обычно как делается? shared_ptr или другой подсчет ссылок. Иначе получаете трудноуловимые баги при изменениях.
А shared_ptr — дополнительный оверхед к распределению памяти в куче.
Очень странная ситуация для "языка без оверхедов"

Х>>>Ещё раз, ето юмор такой или что? лямбды в с++ предлагают два варианта захвата контекста, причём можно гибко выбирать что захватывать по ссылке, что по значению. Таких гибких лямбд нет ни в одном языке программирования, назвать ето "недолямбдами" и "ограничением области применения" можно разве только по причине шаблонности мышления.

G>>Это правда жизни, в С++ — недолямбды, потому что оба варианта, из которых еще надо выбирать, не позволяют решть все задачи, доступные обычным лямбдам.
ГВ>Похоже, что ты не прав. Хотя, конечно, никто тебе не запретит называть C++-ные лямбды "недолямбдами".
Ну также как другим никто не запретит называть недолямбды С++ (которых пока еще нету) лямбдами.
Re[40]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 06.05.09 06:42
Оценка: :)
Здравствуйте, gandjustas, Вы писали:

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


Обычно он делается по-разному, это раз. Баги согласования жизненных циклов ловятся не труднее, чем любые другие — это два.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[40]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 06.05.09 14:50
Оценка: -1
Здравствуйте, Геннадий Васильев, Вы писали:

CC>>Удивительно, но из всего что появилось в ICC из С++0х применения в живых проектах не нашли только лямбды.


ГВ>Что даже не сильно удивляет. Длинные и многоярусные лямбды противоречат принципам реюзинга, "обычные" функторы могут быть предпочтительнее с этой точки зрения. Больше того, даже два использования какой-нибудь коротенькой лямбды типа "x >= SOMETHING_LOW && x <= SOMETHING_HIGH" уже побуждают сделать вместо неё обычную функцию или функтор, и обращаться к ним по собственному имени.


Это то о чем Вам говорил Влад. Лямбды С++ — неудобные недолямбды. Потому ими и не пользуются.
Re[39]: Правильная ссылка
От: criosray  
Дата: 06.05.09 14:55
Оценка: +1
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>По-моему, явление по имени "C++" нужно рассматривать в комплексе с такими штуками, как куча производителей, которые реализовывали язык, как заблагорассудится, неторопливой активностью комитета и тем фактом, что некоего единого владельца С++ нет в природе. В отличие от десятков других языков, у которых есть владелец, есть узкий круг лиц, занимающихся развитием и нет "отвязного" комитета. Я не хочу сказать, что второе — плохо, но это главным образом определяет отличия динамики развития C++ от Java, C# и иже с ними.


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

ГВ>Так что, как бы там что-то во что-то ни перерастало, и какими бы метафизическими свойствами C++ ни наделялся, но он как раз является плодом объёмного договорного процесса очень разных разработчиков программного обеспечения. "Какой-то там" стандарт можно принимать хоть по десять раз на дню, а такой, что удовлетворит кучу разных участников и принимается не для проформы, вырабатывать, всё же, посложнее. 10-12 лет для таких взаимодействий — не то, что мелочь, а так, цветочек понюхать не успеешь.


Ой, ну может хватит чушь молоть-то? 10-12 лет это МОРЕ времени. Посмотрите на С# и Nemerle, которых 12 лет тому назад еще и в планах не было.
Re[40]: Правильная ссылка
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 06.05.09 15:32
Оценка: +1
Здравствуйте, 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[43]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.05.09 22:48
Оценка: -1
Здравствуйте, Геннадий Васильев, Вы писали:

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


Еще как будут, как убирали несоответствия с 98-ым стандартом.

ГВ>Поэтому с формальной точки зрения ты прав — стандарта ещё нет, и казалось бы, обсуждать нечего, но коль скоро на практике фичи в компиляторах уже есть (больше того, описание фич прямо ссылается на драфт стандарта), следовательно, утверждать, что их нет — абсурд. И следовательно, нам вполне есть, что обсуждать.


Никаких расширений пока нет. Речь идет о бэтах которые не зарелизятся до 2010 года.

Мне кажется, что включение фич из черновика стандарта является своеобразным протестом против глупого затягивания его принятия и способом подтолкнуть его принятие хоть в каком-то виде, потому как комитет давно живет ради собственного развлечения.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[45]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 02:41
Оценка: :)
Здравствуйте, Геннадий Васильев, Вы писали:

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


ГВ>>>Есть ещё совсем ничего не подсчитывающий auto_ptr. Как минимум.

G>>Семантика владения в лямбде никак не подойдет. Еще варианты есть?
ГВ>Почему не подойдёт? Как по мне, так вполне подойдёт.


G>>Может всетаки уже стоит признать что в С++ в обозримом будущем не будет нормальных лямбд.

ГВ>Знаешь, это очень сильное колдунство — признавать отсутствие наличествующего. "Видишь суслика? А его нет!"
Точно, ты ведь до сих пор не признаешь что нету и не будет в С++ нормальных лямбд, а в других языках есть.
Re[47]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 05:33
Оценка: +1
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Я признаю наличие в других языках других реализаций лямбд. Но я не считаю "единственно нормальной" реализацию лямбд в каком-то определённом языке, или их наборе. Например, то, что лямбды в "других" языках непременно требуют вовлечения GC я считаю изъяном их реализации, пусть и повсеместно встречающимся. Я, например, знаю, что использование лямбда-выражений не всегда требует отдельного управления жизненным циклом замкнутых переменных. Отсюда, я не думаю, что непременное привлечение GC — "нормально", т.е., сродни эталону.

А другие варианты есть? Явное управление временем жизни не подойдет, надеюсь это понятно.
Re[40]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 07.05.09 09:14
Оценка: :)
Здравствуйте, VladD2, Вы писали:

VD>Для особо одаренных повторяю. Нет никакого С++0х. С++0х — это рабочее название черновика.

Камрад, от того, что ты твердишь "нету его" он не исчезнет.
Он есть, и используется. Это факт.

VD>А в "кампилирах" есть еще свойства и поддержка COM. И что с того?

Это к терапевту.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[44]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 07.05.09 09:14
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Никаких расширений пока нет. Речь идет о бэтах которые не зарелизятся до 2010 года.

Ты это интелу расскажи, а то пацаны не в курсе.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[42]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 13:06
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Есть он только в твоем воображении. То что кто-то использует черти что созданное на основе черновиков — это их личная инициатива. Не более того.


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

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

M>А ведб не все так просто. Я некоторое время размышлял над полезностью и вредом при использовании лямбд. Использование функторов и функций ненавязчиво подталкивает к обобщенному коду и переиспользованию.

Угу, об этом и речь.

M>"Лямбды удобнее тем, что их можно сочетать вместе с замыканиями в то время когда функцию придется передавать толпу параметров." не всегда является достаточным аргументом, например


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


Глобальные переменные — это зараза ещё та, надо тебе сказать. Я когда-то (по очень синеглазой юности) сознательно приучал себя не пользоваться глобальными переменными — в противном случае сопровождаемость рискует упасть ниже плинтуса.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[55]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 14:22
Оценка: :)
Здравствуйте, Геннадий Васильев, Вы писали:


G>>Ну раз shared_ptr придумали, и они пользуются значительным успхом, то можно предположить что GC очень нужен.

ГВ>ИМХО, нельзя.
Обоснования?

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

ГВ>Опять двадцать пять.

G>>Так действительно на С++ все глюкаво и ненадежно.

ГВ>Во-во, слово в слово. Все 14 лет.
Так за 14 лет ничего не поменялось

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

M>>А ведб не все так просто. Я некоторое время размышлял над полезностью и вредом при использовании лямбд. Использование функторов и функций ненавязчиво подталкивает к обобщенному коду и переиспользованию.

G>
G>Ну прям мыслитель.
G>Как поможет обобщенный код в процитированном примере, если SOMETHING_LOW и SOMETHING_HIGH зависят от контекста?

Буду предельно откровенен: в случае, когда SOMETHING_LOW и SOMETHING_HIGH зависят от контекста (2/3 параметров), этому коду поможет только Delete. Не знаю уж, обобщённый это будет Delete или нет.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[45]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.05.09 14:50
Оценка: +1
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Это действительно бета, как ты правильно заметил (вернее — CTP, я не знаю, как он соотносится с альфа/бета/RC по обычной классификации).


CTP — значит Community Technology Preview. Что по-русски значит — сделали промежуточную сборку и почти не тестируя отдали поиграться народу. То есть, это может быть даже не бэта. Это может быть продукт который еще 5 раз изменится до выхода.

Собственно я не сомневаюсь, что эти недолямбды попадут в релиз. Просто релиза не будет до конца года, а стало быть говорить в общем-то не о чем.
Если же стандарта не будет до конца года, то это будет еще одно нестандартное расширение толку от которого будет не много, так как не все захотят воспроизводить неизвестно что, что есть у МС.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[55]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 07.05.09 16:06
Оценка: :)
Здравствуйте, criosray, Вы писали:

G>>О как, а только пару страниц назад было утверждение что в С++ нет оверхедов.

C>Все правильно: пару страниц назад в С++ не было оверхедов, но язык развивается — успел обрасти оверхедами, понимаете ли какое дело...
какие оверхеды? концепция с++: не плати за то что не используешь, в случае с с++ лямбдами исполнено на 100%, в дотнете же оверхеды на ровном месте, т.е. беспричинно, в силу его устройства.
People write code, programming languages don't.
Re[56]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 16:25
Оценка: -1
Здравствуйте, Хвост, Вы писали:

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


G>>>О как, а только пару страниц назад было утверждение что в С++ нет оверхедов.

C>>Все правильно: пару страниц назад в С++ не было оверхедов, но язык развивается — успел обрасти оверхедами, понимаете ли какое дело...
Х>какие оверхеды? концепция с++: не плати за то что не используешь,
Да ну, а O(n) при выделении и освобождении памяти?

Х>в случае с с++ лямбдами исполнено на 100%,

На 200%, лямбд просто нету Есть только жалкое подобие.

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

Х>в дотнете же оверхеды на ровном месте, т.е. беспричинно, в силу его устройства.

А примеры будут? или опять пердение в лужу?
Re[58]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 16: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 16:51
Оценка: +1
Здравствуйте, VladD2, Вы писали:

ГВ>>Нет такой ссылки, потому что компилятор от MS ещё не продаётся.

VD>Значит и обсуждать не чего.

Так и не обсуждай. Тебя кто-то заставляет?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[61]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 16:56
Оценка: +1
Здравствуйте, Геннадий Васильев, Вы писали:

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


ГВ>>>А что за недостатки (кроме синхронного подсчёта количества ссылок)?

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

ГВ>OK, принято. ИМХО, самый серьёзный недостаток такого способа — потенциальные заморочки с циклическими зависимостями. Ну что же, действительно, опциональный (библиотечный) GC иной раз не помешал бы. В принципе — не помешал бы. Другое дело, что острота потребности в GC, ИМХО, невероятно преувеличена. Вот тут, честно тебе скажу, доказать ты её (острую потребность) не сможешь. Потому что придётся доказывать, исходя из субъективных моментов, а субъективно как раз таких проблем нет — C++-ники привыкли управлять своими объектами и им это вполне удаётся. Хорошим C++-никам — удаётся, а кто не умеет — тот плохой C++-ник, и к его мнению не особо прислушиваются.

Как раз таки привычки субъективны. А потребность в высокоуровневых языках в большенстве задач очень объективна.
Но при этом существует достаточно много программистов на С++ со своим субъективным мнением.

ГВ>ИМХО, потому про GC хоть и поговаривают, но не особо.

Еще раз. Не получится на C++ сделать CG с характеристиками, близкими к .NETовскому.
Сам язык должен быть рассчитан на работу GC.
Практически любая реализация GC на C++ будет вносить достаточно большой оверхед чтобы отказаться от его использования.
Re[62]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 18:04
Оценка: :)
Здравствуйте, Геннадий Васильев, Вы писали:

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


ГВ>>>Ключевое слово — пул.

G>>Угу, очередной "закат солнца вручную". Кроме того с пулом возникают дополнительные проблемы управления временем жизни.

ГВ>Это какие такие проблемы? Что объекты должны быть уничтожены до уничтожения самого пула? Так это — то же самое, что и общее предотвращение утечек памяти.

Опять возвращаемся к ручному управлнию памятью, никаких shred_ptr и прочего.

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

ГВ>>>Это что-то новенькое. Стандартные аллокаторы как раз вполне работают в многопоточном окружении.
G>>Угу, но работают медленно. Даже при однопоточном выделении. Блокировки небесплатные.
ГВ>Ты уж определись: работают стандартные аллокаторы в многопоточном окружении или нет.
Раьотают, но медленно
Re[62]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 07.05.09 18:14
Оценка: :)
Здравствуйте, Хвост, Вы писали:

MK>>Что за темы?

Х>тебе дать ссылку на тему которую завёл ты сам?
Я, конечно, предполагал, что ты так можешь облажаться, но что Геннадий туда же... Это прямо как про боксинг!
Re[63]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 18: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[65]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 18:44
Оценка: -1
Здравствуйте, gandjustas, Вы писали:

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

G>Ох ё....

А по сути?

ГВ>>То есть, "нормальная" в твоей терминологии работа — это работа без блокировок, я прав?

G>Правильная работа — это когда не надо думать выделять память или нет.

Понятно. Всё, что не C# — неправильно. Так бы сразу и сказал.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[65]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 07.05.09 18:56
Оценка: :)
Здравствуйте, samius, Вы писали:

Х>>кстати про боксинг, будь добр расскажи, какой магией структуры на стеке, которые являются контекстом лямбды, продляют свою жизнь при возврате лямбды из метода?

MK>Легко. Эти структуры размещаются не на стеке, а в полях класса, который и лямбду оборачивает.

Х>>кстати про боксинг, будь добр расскажи, какой магией структуры на стеке, которые являются контекстом лямбды, продляют свою жизнь при возврате лямбды из метода?

S>Структуры, являющиеся контекстом лямбды изначально расположены не на стеке, а в хипе вместе со всем контекстом лямбды. Потому боксинга здесь нет.
эээ, ребят, вы таки определитесь как оно работает
People write code, programming languages don't.
Re[66]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 07.05.09 18:59
Оценка: +1
Здравствуйте, Хвост, Вы писали:

Х>эээ, ребят, вы таки определитесь как оно работает

Написали одно и то же разными словами.
Re[69]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 07.05.09 19:48
Оценка: -1
Здравствуйте, gandjustas, Вы писали:

COF>>Они позволяют реализовывать осмысленные стратегии управления ресурсами, в том числе отличными от памяти.

G>Осмысленное в твоем понимании — ручное?

Осмысленное — это значит сделал один раз и забыл, все работает. А ручное — это как-раз подход C#, присвоил переменную, не забудь вызвать функцию типа SubscribeResource, обнулил — UnsubscribeResource ну и так далее.
Re[64]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 19: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[64]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 20:00
Оценка: :)
Здравствуйте, Геннадий Васильев, Вы писали:

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


G>>Есть переменная на стеке, надо построить честное замыкание для лямбды. Время жизни лямбды больше текущего скоупа. Что С++ предлагает? Ничего.


ГВ>Да ёлки ж зелёные! Значения (синоним в данном контексте: копия переменной) плюсовыми лямбдами замыкаются с лёгкостью неимоверной. А дальше — хоть выводи функцию из скопа, хоть прихлопывай.

Нет. Нужно лексическое замыкание (не копирование значения).
Re[67]: Брависсимо!
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 20:10
Оценка: -1
Здравствуйте, gandjustas, Вы писали:

ГВ>>Итак: "лямбды в C++ предусматривают возможность замыкания контекста по значению". Твой ответ? (Бис! Бис! Заранее аплодирую)

G>Не надо такие умные слова говорить. Говори честно — копирование значения. Копирование лексическим замыканием не является.

Расскажи это лисперам. В лиспе исторически замыкания создавались копированием используемых переменных.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[69]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 07.05.09 20: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 20:15
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

ГВ>>Да ёлки ж зелёные! Значения (синоним в данном контексте: копия переменной) плюсовыми лямбдами замыкаются с лёгкостью неимоверной. А дальше — хоть выводи функцию из скопа, хоть прихлопывай.

G>Нет. Нужно лексическое замыкание (не копирование значения).

"Лексическое замыкание" — это обобщённое название всей операции объединения лямбда-выражения и переменных контекста, в котором порождена лямбда. Копирование значений — способ реализации.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[72]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 20:34
Оценка: :)
Здравствуйте, Хвост, Вы писали:

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


G>>>>Вот привели в пример какой-то пост, где с помощью WPF попытались нарисовать туеву хучу объектов. Интересно, на С++ аналогичное вообще заведется? (не говоря о том чтобы поехать)

Х>>>тут я уже упомянул что работаю над GIS, так вот, конечно не 10 тысяч объектов, а 20 тысяч, ну и не 1-4 секунды а 25 раз в секунду (чтобы глазу было приятно), похоже ты прав, ето пожалуй не едет, ето пожалуй летает
G>>20 тысяч векторных примитивов с прозрачностью?
Х>круто, да?
Слабо верится.
Re[69]: Брависсимо!
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 20:44
Оценка: -1
Здравствуйте, VladD2, Вы писали:

ГВ>>Расскажи это лисперам. В лиспе исторически замыкания создавались копированием используемых переменных.


Ну, поскольку я знаю твою манеру ведения дискуссии, то обращаю внимание на слово "исторически". А если точно, то я отсылал к common lisp чёрт-те какой давности. В современных диалектах, AFAIK, это уже не так.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[77]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 07.05.09 20:52
Оценка: :)
Здравствуйте, MxKazan, Вы писали:

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


Х>>тут недостижимого на C# то что отрисовка на акселлераторе занимает меньшую часть времени отрисовки кадра, основное время — трансформация примитивов из одной координатной системы в другую, тут даже такая вещь как проверка индекса на допустимый диапазон при обращению к массиву даёт проседание в 30%, куда здесь C# тулить?

MK>Ой да ладно. Ты пробовал или снова "боксинг"?
что да ладно? про индексы ето факт, если ты про C# то ессно не пробовал, потому как не взлетит очевидно.
People write code, programming languages don't.
Re[78]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 07.05.09 21:07
Оценка: +1
Здравствуйте, Хвост, Вы писали:

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


S>>Координатная система тоже 25 раз в секунду меняется?

Х>не понял что имелось ввиду. Координаты подавляющего большинства примитивов хранятся всегда в неизменном виде, и их при каждом скролле или зуме необходимо пересчитывать в екранные координаты.
Вообще OpenGL и сам умеет пересчитывать координаты, правда только афинные и почти афинные преобразования, те что можно описать матрицей.
Знаю, что хранятся другие координаты, например, геодезические. Но, их ведь можно преобразовать единожды при чтении в "почти экранные", т.е. в такие координаты, которые легко преобразуются как GDI так и OpenGL-ем. Естественно, все операции с координатами следует проводит с оригинальными координатами, а "почти экранные" хороши для рендеринга. Тогда преобразование координат (кроме первоначального) полностью ляжет на железо.
Re[80]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 07.05.09 21:39
Оценка: +1
Здравствуйте, Хвост, Вы писали:

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


S>>Знаю, что хранятся другие координаты, например, геодезические. Но, их ведь можно преобразовать единожды при чтении в "почти экранные", т.е. в такие координаты, которые легко преобразуются как GDI так и OpenGL-ем. Естественно, все операции с координатами следует проводит с оригинальными координатами, а "почти экранные" хороши для рендеринга. Тогда преобразование координат (кроме первоначального) полностью ляжет на железо.


Х>абсолютно верно, но ето к сожалению шило на мыло, потому как видимых елементов на екране на порядок/порядки меньше чем есть на самом деле, а для возможности акселлерации прийдётся их трансформировать все, а не только видимые, в случае с GDI ето просто смертельно. Что немаловажно, постоянные трансформации вносят ошибки, поетому оказалось проще и еффективней реализовать схему которая есть.


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

Порядки не важны, т.к. есть набор видимых элементов, который обновляется в зависимости от позиции и масштаба вьюхи. Есть эффективные алгоритмы пространственного индексирования объектов, которыми можно пользоваться для того, чтобы читать только те объекты, которые требуется отображать. Потому ни трансформировать все объекты ни читать их в память для отрисовки не обязательно. Те что прочитаны — трансформируются один раз софтом в промежуточную систему координат, все остальные разы железом.
Постоянные трансформации не могут вносить ошибки если эти трансформации не туда-обратно. Всегда есть правильные (родные координаты объекта) и все остальные, полученые из них. Вся логика типа кадастра работает с родными координатами, либо непосредственно полученными из родных.
А отрисовке — пофик на точность. Там на пиксель набежит больше любой погрешности.
Re[66]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 08.05.09 06:32
Оценка: +1
Х> G>И что есть в с++ для управления ресурсами? Наверное хорошый пул потоков или "зеленые" треды? А может там есть выделение памяти в хипе за O(1)?

Х> пул потоков обычно нативный, причём здесь С++? зелёные треды очень хороши для серверов, ага)))


Они гениальны для серверов. Erlang это только доказывает. Возможность ненапряжно выделить несколько тысяч процессов/потоков, если надо, рулит
avalon 1.0rc1 rev 239, zlib 1.2.3


dmitriid.comGitHubLinkedIn
Re[85]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 08.05.09 10: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[60]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 08.05.09 11:34
Оценка: -1
Здравствуйте, CreatorCray, Вы писали:

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


G>>Стандартные аллокаторы в С++ требуют прохода по списку свободных блоков памяти при выделении\освобождении, эта операция имеет алгоритмическую сложность O(n). При интенсивных операциях выделения\освобождения работает очеень медленно.

CC>Ты пожалуйста ссылку дай на стандарт С++, где написано что именно так работает "стандартный аллокатор С++".
Стандарт C++ не определяет реализацию выделения памяти. Во всех известных мне реализациях С++ работает именно так.

G>>Не разводи демагогию, давай факты.

CC>Симметрично!
Я уже приводил код, где GC работает быстрее алокатора С++.
Re[70]: Брависсимо!
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.05.09 11:42
Оценка: -1
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>>Расскажи это лисперам. В лиспе исторически замыкания создавались копированием используемых переменных.


ГВ>Ну, поскольку я знаю твою манеру ведения дискуссии, то обращаю внимание на слово "исторически". А если точно, то я отсылал к common lisp чёрт-те какой давности. В современных диалектах, AFAIK, это уже не так.


Демагог, есть демагог. Нет никакого исторического наследния CL. CL — это стандарт вышедший таким каким он есть.

И вообще, твои слова банальная демонстрация некомпетентности. Лисп изначально имел сборщик мусора и стало быть делать урезанные в нем не имело никакого смысла.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[64]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 08.05.09 13:52
Оценка: :)
Здравствуйте, CreatorCray, Вы писали:

CC>Там Per-thread pool с lock-free deferred алгоритмом на случай освобождения памяти из не-родного-потока.


Кстати с явным Free тоже бльшая попа. Все это придется оборачивать в очередные умные указатели чтобы не было утечек.

Заметь что код на C#, такой как в тесте, не требует никаких усилий чтобы работать быстро. Чтобы работал быстро аналогичный код на С++ требуется немало усилий.
Re[71]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 08.05.09 14: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[72]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 08.05.09 15:13
Оценка: +1
Здравствуйте, Хвост, Вы писали:

Х>высокоуровневый и быстрый — бери С++.


Смешная шутка.

PS: а с каких пор язык программирования получил "скоростной" параметр? Или быстро это в смысле "тяп ляп и готово"?
Re[66]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 08.05.09 20:08
Оценка: :)
Здравствуйте, Геннадий Васильев, Вы писали:

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


G>>Приведи парочку компиляторов С++ промышленного качества, в которых аллокация по кардинально другом алгоритму делается.

ГВ>При чём тут компиляторы? Управление памятью — это библиотеки.
new и delete — часть языка. Неважно через что они реализуются.

CC>>>Там Per-thread pool с lock-free deferred алгоритмом на случай освобождения памяти из не-родного-потока.

G>>Значит уже забыл. Пулы интересуют еще меньше, так как они требуют подгонки размеров блоков и пулов.
G>>Как аллокатор общего назначения использовать смысла нету.
ГВ>Что за вздор?!
Чацкий прямо:
"Вон из Москвы, сюда я больше не ездун... не ездец... не ездюк..., тьфу сюда я я больше ни приеду".

А по сущству есть что сказать? Или ты честно считаешь что в своем проекте будешь вмеесто стандартных new, delete и всего что с ними связано применять тот код, который привел CreatorCray?
Re[64]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 08.05.09 20:26
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Пока в С++ не будет введено понятие "управляемого GC указателя/ссылки" ничего путного в С++ сделать не удастся. Только не строгий GC который крайне не практичен.


Мне пока видится, что возможный GC для C++ должен быть сопряжён с каким-то особым указателем, вроде gc_ptr<T>. В любом случае использование обычных указателей C++ будет отличаться от использования GC-указателей.

VD>Проблема проста до банальности. С++ спроектирован в расчете на то, что адреса в указателях неизменны. А качественный GC предполагает, что как раз таки объекты можно перемещать, а значит их адреса изменятся. [...]


VD>Пример доработки С++ — это C++/CLI и Menaged C++. Там были введены специальные типы указателей которые описываются в метаданных и контролируются рантаймом. По другому никак.


Согласен, что это подходит в качестве примера подключения GC к C++.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[79]: Небольшая опечатка
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 08.05.09 21:29
Оценка: -1
Здравствуйте, VladD2, Вы писали:

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


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

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

G>>>Приведи парочку компиляторов С++ промышленного качества, в которых аллокация по кардинально другом алгоритму делается.

ГВ>>При чём тут компиляторы? Управление памятью — это библиотеки.
G>new и delete — часть языка. Неважно через что они реализуются.

Именно. А реализуются они библиотечными функциями. new/delete — конструкции языка, а то, что под ними лежит на самом деле — вопрос библиотек.

G>А по сущству есть что сказать? Или ты честно считаешь что в своем проекте будешь вмеесто стандартных new, delete и всего что с ними связано применять тот код, который привел CreatorCray?


Если мне приспичит подменить реализацию всех new/delete я просто заменю RTL-ные malloc/realloc/free. Это первый вариант. Второй вариант — переопределю глобальные new/delete. Третий вариант — определю нужные new/delete для необходимых классов. И ты знаешь, во всех этих случаях даже shared_ptr останутся работоспособными. Непосредственно ThreadPoolAlloc::Alloc/Free само собой, я везде писать не буду.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[66]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 11.05.09 07:22
Оценка: :)
Здравствуйте, CreatorCray, Вы писали:

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


CC>>>>>Ну так какого ты ляда утверждаешь что "Стандартные аллокаторы в С++ требуют прохода блаблабла"?

G>>>>Еще раз: все известные мне реализации так работают.
CC>>>Мы о С++ либо об известных тебе реализациях?
G>>Думаешь я мало компиляторов видел?
CC>Ты с темы не съезжай.
Это ты не съезжай. Кивать на стандарт в случае С++ не стоит. Его мало кто реализует.

G>>>>Твой наколенный непотокобезопасен.

CC>>>Можно узнать с какого перепугу ты так решил?
CC>>>Там Per-thread pool с lock-free deferred алгоритмом на случай освобождения памяти из не-родного-потока.
G>>Значит уже забыл. Пулы интересуют еще меньше, так как они требуют подгонки размеров блоков и пулов.
CC>Ясно. Как работают пулы ты тоже не в курсе.
CC>Известно ли тебе что HeapAlloc в LFH режиме тоже на пулах?
Еще раз: меня это вообще не интересует.

G>>Как аллокатор общего назначения использовать смысла нету.

CC>Расскажи это разработчикам Hoard, TBB и того же Windows Heap
А это тут причем? Ты будешь на задумываясь использовать свой аллокатор в продакш коде?

Кстати, получилось что GC порвал в 5 раз виндовый аллокатор, который на пулах, так?
Re[66]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 11.05.09 07:29
Оценка: :)
Здравствуйте, CreatorCray, Вы писали:

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


CC>>>Там Per-thread pool с lock-free deferred алгоритмом на случай освобождения памяти из не-родного-потока.

G>>Кстати с явным Free тоже бльшая попа. Все это придется оборачивать в очередные умные указатели чтобы не было утечек.
CC>А вот ты никак не можешь прожить без того, чтоб за тобой кто нить не прибирал твои выделения.
CC>Никакой попы там нет. Работает простой жизненный принцип: убирай за собой. Это нормально.
Не смеши. Если это нормально, то почему сейчас такое засилие "умных указателей"? Как раз для того чтобы програамист не думал что и когда ему надо убирать.

G>>Заметь что код на C#, такой как в тесте, не требует никаких усилий чтобы работать быстро. Чтобы работал быстро аналогичный код на С++ требуется немало усилий.

CC>Каких усилий?
CC>Все потери на твоем С++ тесте исключительно в системной функции HeapAlloc.
CC>Это многопоточный аллокатор общего назначения. Синхронизация в нем через критическую секцию, что медленно.
CC>Пул в моем аллокаторе постольку поскольку, меня больше интересовало насколько будет быстрее если убрать тормоза критической секции.
Ты до сих пор не понял что создание таких аллокаторов — нетривиальная задача. Далеко не каждый программист сможет справиться. В тоже время GC работает достаточно быстро, а программисту при этом даже не требуется заботиться об освобождении памяти.
Re[74]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 11.05.09 12:37
Оценка: :)
Здравствуйте, samius, Вы писали:

S>Насколько я понимаю, interlocked add работает только для одноядерной машины. И то я не уверен... Тут надо курить семантику освобождения. На многоядерной машине и intelocked не нужен. Просто add. Ну и проверка на достижение границы 256Kb куска.

Вааааау!

Всё совсем наоборот.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[74]: Какой угодно? Вообще любой?
От: Qbit86 Кипр
Дата: 11.05.09 12:45
Оценка: +1
Q>>Как на C++ реализуется перемещающий менеджер памяти?
CC>Можно. Но с заменой указателей на обёртки...

Я правильно понимаю, что:
1) Такой менеджер нельзя внедрить прозрачно — сломается код как твоей библиотеки, так и пользовательский код.
2) Увеличится расход памяти на каждый указатель.
3) Добавится лишний уровень косвенности при вызове.
4) Ухудшится cache locality, как пространственная, так и временная?

Насколько просто будет реализовать такую обёртку, с корректным учётом квалификаторов const и volatile и их комбинаций?

CC>...и вводом ограничений на использование сырых указателей.


Это как? Написать в хэдере комментарий «Сырые указатели — ни-ни!»
Обычные ссылки тоже нельзя будет использовать? И функции, принимающие что-нибудь по ссылке (на константу)?
Глаза у меня добрые, но рубашка — смирительная!
Re[75]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 11.05.09 13:10
Оценка: :)
Здравствуйте, CreatorCray, Вы писали:

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


S>>Насколько я понимаю, interlocked add работает только для одноядерной машины. И то я не уверен... Тут надо курить семантику освобождения. На многоядерной машине и intelocked не нужен. Просто add. Ну и проверка на достижение границы 256Kb куска.

CC>Вааааау!

CC>Всё совсем наоборот.


Ну тогда уж просвети, кому нужно наоборот, если

В многопроцессорной системе поколение 0 управляемой кучи разделено на несколько арен памяти — по одной на каждый поток. (С) Рихтер. CLR via C#

Нафига там interlocked?

Ох блин, знатоки-теоретики
Re: Работа - с чего начать: С++ или С#?
От: Farsight СССР  
Дата: 14.05.09 09:31
Оценка: +1
Здравствуйте, niellune, Вы писали:

Достаточно провокационный вопрос для этого форума, Вы не находите? Надо ведь понимать, что у этих языков разные сферы применения.
</farsight>
Re[19]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 14.05.09 14:18
Оценка: :)
Здравствуйте, -MyXa-, Вы писали:

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


А необходимость возникает только тогда, когда продакшн билд начинает течь, как дырявое решето?
Re[75]: Брависсимо!
От: vdimas Россия  
Дата: 17.05.09 21:25
Оценка: +1
Здравствуйте, VladD2, Вы писали:


VD>Спорить с тем, что есть можество разных реализаций языка которому 50 лет я не буду. К не буду спорить о том, что если в языке есть императивное присвоение и замыкания, то полноценным замыканием будет только то, что позволяет изменять захваченые переменные из замыкания.


Что-то я логики не понимаю относительно "полноценности". Один из самых популярных сценариев замыканий — это просто карринг, некая "параметризация" ф-ии. И вот мы, типа, параметризировали ф-ию одним из аргументов, а потом, ввиду передачи этого параметра по ссылке, можем получить абсолютно непредсказуемые эффекты в моменты вызова этой ф-ии. Что, собственно, частенько и происходит. Где уж тут полноценность? ИМХО, полноценность — это когда мы можем явно указать требуемую семантику, и сдается мне, что семантикой по-умолчанию должна быть, разумеется, byvalue, как наименее "граблястая".
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[2]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 18.05.09 10:38
Оценка: +1
V> По C++ : Не слушайте тех, кто пытается его похоронить, глупости это все субъективные. Съездите на конференцию "Параллельные вычисления"(можете заглянуть на parallel.ru), там мужики и не знают наверное, что есть языки другие, кроме C++.

Это в минус мужикам, а не в плюс языку, кстати
avalon 1.0rc1 rev 239, zlib 1.2.3


dmitriid.comGitHubLinkedIn
Re[4]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 18.05.09 11:17
Оценка: +1
NBN> M>Так как оба языка Тьюринг-полные, то сомнительно

NBN> Языки то да. А костыли для шарпа не везде есть и не везде подходят.

NBN> См. те же игры, ембеддед/мобилы/покеты и кроссплатформенное программрование.

Во всем этом есть .NET и, следовательно, C#.
avalon 1.0rc1 rev 239, zlib 1.2.3


dmitriid.comGitHubLinkedIn
Re[5]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 18.05.09 11:23
Оценка: -1
Здравствуйте, Mamut, Вы писали:

NBN>> M>Так как оба языка Тьюринг-полные, то сомнительно


NBN>> Языки то да. А костыли для шарпа не везде есть и не везде подходят.

NBN>> См. те же игры, ембеддед/мобилы/покеты и кроссплатформенное программрование.

M>Во всем этом есть .NET и, следовательно, C#.


Гы.гы.гы. Либо не везде, либо реальное использование сопровождается множеством оговорок
Как следствие — С++ монополист и надолго им останется.
Нужно разобрать угил.
Re[32]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 18.05.09 11:35
Оценка: +1
Здравствуйте, criosray, Вы писали:

C>Ответьте на этот вопрос:


C>

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


Вопрос стоит вовсе не так, и я дважды пытался поправить постановку вопроса. Видя твою невнимательность, мне крайне неохота что-либо объяснять, ибо опять может уйти в космос... Тем не менее, для истории:

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

Основное отличие в том, что нативный код — это черный ящик. Например, у нас результатом компиляции явилась некая DLL в которой одна точка входа "GetPlugin", и через эту точку входа доступна функциональность некоего плагина, заметь, самый высокий уровень функцинальности, где класические юнит тесты закончились еще на пару уровней ниже. А сам этот некий плагин в исходниках состоит из где-то трех сотен классов, которые тоже охота погонять на тестах, начиная от юнит, и заканчивая интеграционными, но раздельного доступа к этим классам в этой ДЛЛ, понятное дело, нет. И вот специально для тестов собирают совсем другой бинарный образ(ы), вовсе не такой, какой пойдет в релиз. В этом бинарном образе содержится некий тестовый фреймворк (ииногда самописный, но и сценарии применения С++ не в пример богаче, чем у управляемых платформ), и некий тестовый код, осуществляющий вызовы тестируемых классов/функций внутри этого тестового бинарного образа.

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

-------
А вообще, я ведь не настаиваю, просто рассказываю как дела обстоят в других областях.
Re[32]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 18.05.09 11:50
Оценка: +1
Здравствуйте, criosray, Вы писали:

V>>Я даже не знаю на что отвечать, настолько ты не понимаешь о чем речь.


C>Ответьте на этот вопрос:

C>

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


C>Даю слово, что приложу максимум усилий, чтоб понять о чем речь.


Да... Боюсь, что усилий придётся прикладывать много. Но я тебе подскажу. Сначала обрати внимание на то, что ты сам придумал тезис, текст которого я отметил полужирным шрифтом, в сообщении vdimas его не было. Ну а дальше, думаю, всё просто.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[76]: Брависсимо!
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 18.05.09 11:57
Оценка: +1
Здравствуйте, vdimas, Вы писали:

VD>>Спорить с тем, что есть можество разных реализаций языка которому 50 лет я не буду. К не буду спорить о том, что если в языке есть императивное присвоение и замыкания, то полноценным замыканием будет только то, что позволяет изменять захваченые переменные из замыкания.

V>Что-то я логики не понимаю относительно "полноценности". [...]

Парадоксально, что как раз иммутабельность переменных (и её вариация — замыкание byvalue) нередко подаётся апологетами ФП как несомненное преимущество. Вот и думай тут, где истинные ФП-шники, а где — падшие вероотступники.

P.S.: В прочем, конечно, если смотреть на "парадигму ФП" как на ещё один вариант "anything but C++", то... То всё как всегда.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[8]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 18.05.09 11:59
Оценка: :)
Здравствуйте, NikeByNike, Вы писали:

M>>Мы говорим про монополию или про утверждение

M>>

M>>То, что делается на C++, на C# в принципе нельзя реализовать.

M>>?
M>>

NBN>В принципе тоже — например: быстрое, кроссплатформенное и полнофункциональное приложение на C#.


Mono
Re[7]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 18.05.09 11:59
Оценка: -1
Здравствуйте, criosray, Вы писали:

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


C>Понятно... еще один неграмотный тролль. Вы даже сформулировать не сможете в чем заключается неполнота.


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

NBN>>С++ тут монополист, это факт. Твои минусы это не испраят


C>Да-да, именно по тому у меня из 10 приложений на мобилке почти половина на .NET CF.


Ага, из тех что написали китайцы из ОЕМов?
Нужно разобрать угил.
Re[38]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 18.05.09 12:35
Оценка: :)
2 All

Не устали?

По сути группа поклонников не самого популярного языка доказывает группе поклонников другого не самого популярного языка, но примерно равному по популярности, что язык противников тухлый.


http://www.google.com/trends?q=c%2C+c%2B%2B%2C+c%23%2C+java&amp;ctab=0&amp;geo=all&amp;date=ytd&amp;sort=0
Re[42]: Работа - с чего начать: С++ или С#?
От: Sorantis Швеция  
Дата: 18.05.09 15:20
Оценка: :)
Харош обсуждать!
Все мы мимо тазика
Во
http://www.google.com/trends?q=c%2B%2B%2C+C%23%2C++php&amp;ctab=0&amp;geo=all&amp;date=ytd&amp;sort=1

А вы тут Си, СиШарпы.. Аж смешно
As long as there is life, there is hope
Re[35]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 18.05.09 15:41
Оценка: -1
Здравствуйте, vdimas, Вы писали:

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



S>>А моки вообще не в почете?


V>Что-то слишком много чести им в последнее время... Хотя до сих пор наиболее популярные во всем мире моки — это ручные моки, они же заглушки и этому способу тестирования учат у нас вроде на 3-м курсе.

Моки и заглушки — разные вещи, использующиеся в разных сценариях тестирования.

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



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

Разве речь о Вас в совокупности с тупым диспетчером сообщений?
Re[24]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 18.05.09 15:52
Оценка: :)
Здравствуйте, criosray, Вы писали:

V>>Ты еще забыл кодеки, мультимедиа, реалтайм протоколы и т.д. И еще забыл, что последние года 4 тактовая частота процов практически не растет, а обсуждаемого скачка оптимизации JIT-а при переходе на 3.0 версию не было ВООБЩЕ


C>Пример классического ламеризма. Может стоило бы для начала что-то узнать о предмете обсуждения? Например, что версия CLR все еще 2.0.х, а не 3.0


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

И вот это твое замечание насчет версий фреймворков... неожиданный ход, прямо скажем.
Я только не понял, какую мою мысль должен был опровергнуть твой выпад, не пояснишь нам, убогим?
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[36]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 18.05.09 17:13
Оценка: +1
Здравствуйте, criosray, Вы писали:

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


C>С точностью до наоборот — нормальные моки и стабы генерируются автоматически. т.к. автоматическая генерация исключает возможность допустить ошибку или не учесть чего-то.


Расшифруй, пожалуйста, слово "нормально" и слово "автоматически", а так же набор возможностей этого "автоматически".


V>>А так, там где можно обойтись в юнит-тестах классичесскими ассертами — это и синтаксис нагляднее, и проще поддерживать.

C>
C>Вы вообще не понимаете что такое юнит-тесты. Не надоело показывать неграмотность?

А да, что такое юнит-тесты требуется еще и понимать... Не надоело рефлексировать и показывать в очередной раз свой поверхностный взгляд? Все твои вызовы мокков ради ассертов, собственно и сделаны. И хоть они теперь не в фас, а в профиль — они были и есть цель любого автоматического теста (не обязательно юнит...)


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


C>Перечень того, что не возможно сделать средствами RhinoMocks + xUnit в студию, как говорится.


Любую динамическую среду/заглушки, которые генерят переменный по насыщенности траффик или сообщения с разной задержкой и произвольным наполнением. Фишка в том, что реальных задержек-то и нет, текущее время эмулируется, но тестирующая последовательность слишком длинная, чтобы записывать её ручками, она генерируется программой. А таких последовательностей/программ у меня — мама не горюй.

Далее, обмен сложными структурами данных заглушки и тестируемого объекта, у объекта приличное пространство состояний, на что заглушка должна грамотно реагировать, т.е. приличная иногда логика на if-ах и case-ах. В декларативном синтаксисе мокков это выглядит как удаление гландов через Ж, и чем осмысленнее логика — тем более глубокое погружение в эту Ж. А если процедура внешняя, то это лишняя тестирующая сущность и все такое.

А теперь смотри что получается: автомоками удобно пользоваться для оформления относительно несложных тестов, где внешние условия и реакцию на них вполне можно описать декларативно и синтаксис все еще не будет раздражать. Т.е. типа, сказали ему "открой рот", убедились что рот открыт, далее "скажи А", убедились, что сказал А. Не много ли чести для подобной возни? У меня в одном методе юнит-теста дружно открывают рты сразу два десятка подобных объектов. Найди мне смысл оформлять отдельный юнит-тест, если затраты на оформление сравнимы со сложностью теста. Тоже самое с автомоками, я слишком часто вижу, что их используют в тех самых случаях, где одно-дву-строчного Assert из nUnit более чем достаточно.

Ах да, чуть не забыл... разумеется без них практически никак, если у кого-то был неудержимый понос на Ынтерфейсы в период дизайна. Собственно для них в первую очередь оно и есть.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[5]: Работа - с чего начать: С++ или С#?
От: Anton Batenev Россия https://github.com/abbat
Дата: 18.05.09 23:05
Оценка: -1
Здравствуйте, criosray, Вы писали:

c> Откройте для себя .NET CF и Mono.


Вот тут все про моно да про моно. Но хоть бы кто-нибудь показал мастер-класс на оном, а то складывается впечатление, что его защитники видели его только на картинках, а те, кто его пользовал, молчат, дабы не было стыдно.
avalon 1.0rc1 rev 244, zlib 1.2.3
Re[38]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 18.05.09 23:57
Оценка: -1
Здравствуйте, criosray, Вы писали:

V>>Не надоело рефлексировать и показывать в очередной раз свой поверхностный взгляд? Все твои вызовы мокков ради ассертов, собственно и сделаны. И хоть они теперь не в фас, а в профиль — они были и есть цель любого автоматического теста (не обязательно юнит...)

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

C>Так вот, ликбез: мокинг выполняется с целью изолировать тестируемый объект от внешних зависимостей.


Ух ты! А я-то думал, что мокинг нужен для отслеживания последовательности внешних вызовов.

C>Пример мокинга:


C>
C>using(mocks.Ordered()) 
C>{ 
C>  Expect.Call(databaseManager.BeginTransaction()); 
C>  using(mocks.Unordered()) 
C>  { 
C>    Expect.Call(accountOne.Withdraw(1000)); 
C>    Expect.Call(accountTwo.Deposit(1000)); 
C>  } 
C>} 
C>


C>Что означает, что ожидается, что будет вызван databaseManager.BeginTransaction(), а потом в любом порядке будут вызваны Withdraw и Deposit.


C>Ассерты это всего-лишь предикат, который по-определению всегда true.


C>Assert.Equals(10, someObj.SomeIntProperty);

C>Assert.IsTrue(someObj.SomeBoolProperty);
C>и т.д. и т.п.

А по-твоему, Expect — это не тот же самый Assert в профиль? Assert — утверждение, Expect — утверждение о некотором ожидаемом событии. Тот же Assert, только специализированный.

C>Ассерты и моки не цель. Это средство и ключевой механизм реализации юнит тестов.


Любое автоматическое тестирование сводится к проверке последовательности утверждений. Иначе оно совсем не нужно. Дальше только вариации способов записи этих утверждений. vdimas прав в том смысле, что если логика достаточно сложная, то и полные тесты достаточно трудно записывать. Вот тебе простейший пример (псевдокод):

{ Тестируемый код }
if (incomingMessage(channel0) is Message1)
  sendMessage(channelA, MessageA);
else
{
  sendMessage(channelX, MessageX);
  sendMessage(channelB, MessageB);
}

{ приблизительный код теста }
when(incomingMessage(channel0) is Message1)
{
  check(sentMessage(channelA, MessageA))
}
else
{
    check(sentMessage(channelX, MessageX))
    check(sentMessage(channelB, MessageB))
}


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

Но собственно, я отклонился. Так вот, по сути дела всё, что делает тест — проверяет соответствие программы сложному утверждению, включающему, в том числе, утверждения о последовательности событий. Так что, формально vdimas прав по части assert-ов.

C>При чем тесты ни коим образом не захламляют код. Все тесты находятся в отдельной сборке, которая "видит" (и только она одна) внутренности тестируемых сборок.


Очень рад за вас.

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


C>>>Перечень того, что не возможно сделать средствами RhinoMocks + xUnit в студию, как говорится.

V>>Любую динамическую среду/заглушки, которые генерят переменный по насыщенности траффик или сообщения с разной задержкой и произвольным наполнением. Фишка в том, что реальных задержек-то и нет, текущее время эмулируется, но тестирующая последовательность слишком длинная, чтобы записывать её ручками, она генерируется программой. А таких последовательностей/программ у меня — мама не горюй.
C>Еще один ликбез: описанное Вами не является модульными тестами. Это т.н. integration tests.

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

C>При чем ничего невозможного в реализации этого нет — описанное реализуется элементарно в .NET.


А разве кто-то говорил, что такое тестирование невозможно реализовать средствами .Net? Вопрос в автоматической генерации.

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

C>Элементарно средствами RhinoMocks.

И неужто будет проще, чем аналогичная заглушка? Это если учесть, то заглушка реализуется в естественном синтаксисе, а мок — перехватом вызовов. Второе будет почти гарантированно сложнее.

V>>В декларативном синтаксисе мокков это выглядит как удаление гландов через Ж, и чем осмысленнее логика — тем более глубокое погружение в эту Ж. А если процедура внешняя, то это лишняя тестирующая сущность и все такое.

C>Демагогия.

Боюсь, что реальность. Хотя я в курсе, разумеется, что самая надёжная основа своей позиции — искусное отрицание очевидного.

C>Выглядит преотлично. На много лучше, чем то, что у вас есть (а точнее нет) в unmanaged C++. lambda выражения и fluent interface дают прекрасную читабельность.


C>
C>Expect.Call(file.Read(null, 0, 0))
C>      .Constraints(Property.Value("Length", 4096), Is.Equal(0), Is.GreaterThan(0) && Is.LessThan(4096)); 
C>


Можно подумать, что в документации приводят сложные нечитабельные примеры. Наверное, там ещё должны были написать о нерешённых проблемах, в том числе — фундаментальных.

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

C>Модульные или unit тесты ОБЯЗАНЫ быть несложными. В этом их СУТЬ.

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

V>>Ах да, чуть не забыл... разумеется без них практически никак, если у кого-то был неудержимый понос на Ынтерфейсы в период дизайна.

Собственно для них в первую очередь оно и есть.
C>Нет, не для них. Вам не надоело ламерствовать?

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

IID>P.S.: подсказка: сам CLR написан на C/С++, и скорость выполнения .NET кода это, в определённом смысле, скорость выполнения некоторой С++ программы. Которую всегда можно, как минимум, не замедлить.

И тебе подсказка: код на промежуточном языке компилируется при первом вызове, после чего скорость его исполнения в определенной степени перестаёт зависить от "выполнения некоторой С++ программы".
Re[27]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.05.09 05:07
Оценка: :)
Здравствуйте, IID, Вы писали:

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


G>>Самообман — думать что C++ всегда быстрее.


IID>Можно пример программы на .NET, которую невозможно будет обогнать программой на С++ ? Желательно не скатываться на I/O, т.к. в этом случае будем мерять скорость работы сервисов ОС, и отставание .NET станет менее заметным. Под программой на С++ понимаем любой код, компилирующийся современным С++ компилятором, и дающий аналогичный результат работы.


IID>P.S.: подсказка: сам CLR написан на C/С++, и скорость выполнения .NET кода это, в определённом смысле, скорость выполнения некоторой С++ программы. Которую всегда можно, как минимум, не замедлить.


Пример не приведу, ибо очень большо получится. Но основная суть в том, что в .NET можно генерировать код в рантайме.
Re[28]: Работа - с чего начать: С++ или С#?
От: IID Россия  
Дата: 19.05.09 06:31
Оценка: +1
Здравствуйте, MxKazan, Вы писали:

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


IID>>P.S.: подсказка: сам CLR написан на C/С++, и скорость выполнения .NET кода это, в определённом смысле, скорость выполнения некоторой С++ программы. Которую всегда можно, как минимум, не замедлить.

MK>И тебе подсказка: код на промежуточном языке компилируется при первом вызове, после чего скорость его исполнения в определенной степени перестаёт зависить от "выполнения некоторой С++ программы".

Отвечу в этом месте обоим: JIT связан по рукам и ногам временными ограничениям. У С++ компилятора свободы (времени) гораздо больше. Насколько я понимаю, кода никто не приведёт, и можно засчитывать слив ?
kalsarikännit
Re[8]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 19.05.09 07:08
Оценка: :)
Здравствуйте, Mamut, Вы писали:

MK>> Например, "WikiPedia uses Mono for its search facilities. The indexing and the actual searching is done by Mono-based applications".

M>Уже нет. Уже Java + Lucene
Мотороллер не мой
Re[39]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 19.05.09 07:32
Оценка: -1
Здравствуйте, Геннадий Васильев, Вы писали:

V>>>Не надоело рефлексировать и показывать в очередной раз свой поверхностный взгляд? Все твои вызовы мокков ради ассертов, собственно и сделаны. И хоть они теперь не в фас, а в профиль — они были и есть цель любого автоматического теста (не обязательно юнит...)

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

C>>Так вот, ликбез: мокинг выполняется с целью изолировать тестируемый объект от внешних зависимостей.


ГВ>Ух ты! А я-то думал, что мокинг нужен для отслеживания последовательности внешних вызовов.


Неправильно думали. Мокинг нужен в первую очередь для изоляции тестируемого объекта. Чтоб сделать возможной эту изоляцию возможной необходимо симулировать поведение внешних зависимостей тестируемого объекта.

C>>Ассерты это всего-лишь предикат, который по-определению всегда true.


C>>Assert.Equals(10, someObj.SomeIntProperty);

C>>Assert.IsTrue(someObj.SomeBoolProperty);
C>>и т.д. и т.п.

ГВ>А по-твоему, Expect — это не тот же самый Assert в профиль? Assert — утверждение, Expect — утверждение о некотором ожидаемом событии. Тот же Assert, только специализированный.


К чему вопрос?

C>>Ассерты и моки не цель. Это средство и ключевой механизм реализации юнит тестов.


ГВ>Любое автоматическое тестирование сводится к проверке последовательности утверждений. Иначе оно совсем не нужно. Дальше только вариации способов записи этих утверждений.


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

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

И что тут сложного? Элементраный тест (в условиях дотнет) с условно установленными моками.

ГВ>
ГВ>{ Тестируемый код }
ГВ>if (incomingMessage(channel0) is Message1)
ГВ>  sendMessage(channelA, MessageA);
ГВ>else
ГВ>{
ГВ>  sendMessage(channelX, MessageX);
ГВ>  sendMessage(channelB, MessageB);
ГВ>}

ГВ>{ приблизительный код теста }
ГВ>when(incomingMessage(channel0) is Message1)
ГВ>{
ГВ>  check(sentMessage(channelA, MessageA))
ГВ>}
ГВ>else
ГВ>{
ГВ>    check(sentMessage(channelX, MessageX))
ГВ>    check(sentMessage(channelB, MessageB))
ГВ>}
ГВ>


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


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

C>>При чем тесты ни коим образом не захламляют код. Все тесты находятся в отдельной сборке, которая "видит" (и только она одна) внутренности тестируемых сборок.


ГВ>Очень рад за вас.


А я очень опечален за вас.

C>>Еще один ликбез: описанное Вами не является модульными тестами. Это т.н. integration tests.


ГВ>Это зависит от того, что в данной конфигурации полагается модулем, а что — интеграцией. Поскольку структура любой сложной программы иерархическая, то модуль на одном уровне — это сборная конструкция на другом.


Нет, не зависит. RTFM, как говорится.

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

C>>Элементарно средствами RhinoMocks.

ГВ>И неужто будет проще, чем аналогичная заглушка? Это если учесть, то заглушка реализуется в естественном синтаксисе, а мок — перехватом вызовов. Второе будет почти гарантированно сложнее.


С этой глупостью я даже спорить не стану.

V>>>В декларативном синтаксисе мокков это выглядит как удаление гландов через Ж, и чем осмысленнее логика — тем более глубокое погружение в эту Ж. А если процедура внешняя, то это лишняя тестирующая сущность и все такое.

C>>Демагогия.

ГВ>Боюсь, что реальность. Хотя я в курсе, разумеется, что самая надёжная основа своей позиции — искусное отрицание очевидного.


Можете продолжать бояться. Как все-таки доберетесь до RTFM`а, то поймете, что я был прав.

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

C>>Модульные или unit тесты ОБЯЗАНЫ быть несложными. В этом их СУТЬ.

ГВ>Угу. А ещё программы должны быть простыми. Это и называется искать решение сложных проблем простыми средствами, сиречь — руководствоваться лозунгами.


Да, тестируемые участки кода должны быть простыми. В этом суть дизайна под названием Test Driven Development. Используя алгоритм write failing test -> write code -> until test succeed -> refactor ... добиваемся прекрасного качества кода с соблюдением всех правил современного программирования: DRY, SRP, и т.д.
Если Ваш код на столько сложный и запутанный, что Вы не можете написать серию простых тестов для него, значит Ваш код — плохой. Вот Вам и пища для размышлений.
Re[30]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 19.05.09 08:51
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>ЗЫ. Я уже писал в этой теме тест, который меряет выделение памяти стандартным аллокатором. .NET выигрывает.


Ты так часто это повторяешь, что скоро и сам поверишь...
Re[31]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 19.05.09 08:52
Оценка: +1
Здравствуйте, IID, Вы писали:

IID>Давай тогда я пример приведу, раз от тебя внятного и короткого семпла не добиться: будем мерять скорость md5. По 64 раунда стандартного алгоритма на блок. Сложностей это закодить нет никаких, не надо ни парсеры писать, ни предметную область изучать. Жду реализацию на .NET


Ты просил пример, где программа на C++ сольет в разы. Я привел. Пример, где сольет дотнет я не просил. Доказывать что md5 на С будет немного быстрее C# мне не надо.
Re[9]: Работа - с чего начать: С++ или С#?
От: Anton Batenev Россия https://github.com/abbat
Дата: 19.05.09 10:17
Оценка: -1
Здравствуйте, MxKazan, Вы писали:

MK> Да брось. То, что в разделе КСВ форума RSDN нет людей, которые разрабатывают на Mono, совершенно не означает, что этот проект какой-то не юзабельный и его нельзя приводить в качестве аргументов.


Думаю, что их как раз есть. Они-то и плюются на моно. А вот защищают его те, кто на нем даже hello word не сотворил, ИМХО. Вот этим защитникам я сначала и предлагаю попробовать написать на нем что-то вменяемое и, если не произойдет промывания желудка, защищать его, так сказать, уже во всеоружии. Моя уверенность строится на том, что после C# я пытался подходить к этому снаряду под линуксом уже раз не помню сколько — с каждым разом Qt мне нравится все больше и больше по сравнению с ним.
avalon 1.0rc1 rev 244, zlib 1.2.3
Re[33]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.05.09 10:22
Оценка: +1
Здравствуйте, IID, Вы писали:

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


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


IID>>>Т.е. товарищ всеръез считает, что можно написать на .NET программу, которая окажется быстрее чем С++. Мой же поинт в том, что С++ всё-таки быстрее (уж во всяком случае точно не медленнее).


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


IID>Не уводите тему в сторону. Мы сейчас рассуждаем только о скорости получившегося кода.


Если не рассматривать способ получения этого кода, то такие рассуждения не нужны.
Это сродни тому что на ассемблере можно написать программу которая будет быстрее любой программы на любом языке.
Тольео практика этот тезис не подтверждает.
Re[34]: Работа - с чего начать: С++ или С#?
От: IID Россия  
Дата: 19.05.09 10:33
Оценка: -1
Здравствуйте, gandjustas, Вы писали:

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

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

Именно! Поэтому изначальная фраза, про то что С++ не может оказаться быстрее — глупость. Иными словами C++ всегда может работать НЕ МЕДЛЕНЕЕ дотнета.
Любопытно другое — на С++ можно написать код, который как не пыжься, на дотнете с одинаковой производительностью не повторить. (md5 например)

G>Тольео практика этот тезис не подтверждает.


Философствование насчёт практики — это выше по треду, когда коробочные продукты просили .NETовские показать. И пришли к выводу что практика это всё-таки С++. (VladD2 даже ввёл атрибут "тиражируемый" для С++ софта). Хотя у каждого "практика" может иметь собственный смысл.

В любом случае, мне рассуждения в таком ключе не интересны. Было желание увидеть "волшебный" .NET код, обгоняющий C++. А в итоге скатились на банальщину. И ещё раз подтвердили тот факт что С++ таки уделывает .NET по скорости.
kalsarikännit
Re[36]: Работа - с чего начать: С++ или С#?
От: IID Россия  
Дата: 19.05.09 11:05
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

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


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


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

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

IID>>Именно! Поэтому изначальная фраза, про то что С++ не может оказаться быстрее — глупость.

G>А кто такое говорил?

ты говорил =) вот здесь
Автор: gandjustas
Дата: 18.03.09
:

G>Самообман — думать что C++ всегда быстрее.


IID>> Иными словами C++ всегда может работать НЕ МЕДЛЕНЕЕ дотнета.

G>Не всегда, за счет динамической кодогенерации прога на .NET может работать быстрее аналогичной прогри на C++.

Ну вот давай возьмём некоторый конкретный выхлоп этой кодогенерации, перепишем на С++, и удивимся, что он работает быстрее.
Если рассматривать С# как быстрый скриптер — то очень близко к правде, он правда быстр. Но это не единственный возможный вариант для скриптинга. Например, Lua + JIT не сильно отстаёт по скорости, а по расходу памяти так и вообще впереди C#. Оставим пока скриптинг в стороне. Это, конечно, важная штука, но не везде она юзается и уж точно в одну кучу всё мешать не нужно.

G>А вообще второе твое утверждение не эквивалентно первому, изучай логику.


Первое выражение (твоё, кстати) — ложно. Чтобы сделать его истинным — применим отрицание. Что получим ?
!(C++ _никогда_ _не может_ _быстрее_) == С++ _всегда_ _может_ _не медленнее_
Или ты отрицание от С++ пытаешься взять ? :D


IID>>Любопытно другое — на С++ можно написать код, который как не пыжься, на дотнете с одинаковой производительностью не повторить. (md5 например)

G>Только это будет не C++, а голый С. Все фичи, которые тут обсасываются сторонниками С++ идут лесом.
голый С это подмножество С++. Так что "это будет не С++", мягко говоря, ложь.

G>>>Тольео практика этот тезис не подтверждает.


IID>>Философствование насчёт практики — это выше по треду, когда коробочные продукты просили .NETовские показать. И пришли к выводу что практика это всё-таки С++. (VladD2 даже ввёл атрибут "тиражируемый" для С++ софта). Хотя у каждого "практика" может иметь собственный смысл.

G>Почитай еще раз тему, очень много объяснений почему тиражируемый софт на С++ делается.
Была где-то хорошая мысль: если бы преимущества управляемой среды были бы действительно значимыми — переписали бы. Получается их значимость, как минимум, недостаточна.
kalsarikännit
Re[37]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.05.09 11:27
Оценка: +1
Здравствуйте, IID, Вы писали:

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


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


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


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

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

IID>>>Именно! Поэтому изначальная фраза, про то что С++ не может оказаться быстрее — глупость.

G>>А кто такое говорил?

IID>ты говорил =) вот здесь
Автор: gandjustas
Дата: 18.03.09
:

IID>

G>>Самообман — думать что C++ всегда быстрее.

Ну тупи. "Не всегда быстрее" = "иногда медленее". Сам себе что-то придумываешь, а потом непонятно кому доказываешь.

IID>>> Иными словами C++ всегда может работать НЕ МЕДЛЕНЕЕ дотнета.

G>>Не всегда, за счет динамической кодогенерации прога на .NET может работать быстрее аналогичной прогри на C++.

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

Ну и что?

G>>А вообще второе твое утверждение не эквивалентно первому, изучай логику.


IID>Первое выражение (твоё, кстати) — ложно. Чтобы сделать его истинным — применим отрицание. Что получим ?

IID>!(C++ _никогда_ _не может_ _быстрее_) == С++ _всегда_ _может_ _не медленнее_
IID>Или ты отрицание от С++ пытаешься взять ? :D
Бред ты пишешь.

Если формально рассуждать, что мое утверждение выглядит как: !(ForAll(программы) реализация на C++ -> самая быстрая), ! — отрицание, -> — импликация, ForAll(программы) — квантор всеобщности.
Если спустить отрицание, то получится (Exists(программы) !(реализация на С++ -> самая быстрая)), где Exists — квантор существования.
Отрицание имликации истинно (сама импликация ложна) только в том случае, когда посылка истина, а следствие ложно.
В итоге по-русски можно написать "сществуют программы, для которых реализация на С++ окажется не самой быстрой", что совсем по-русски звучит как "иногда программы на С++ медленее", а не то что ты придумал.

Иди ботай логику, потом возвращайся. А то тебя в КСВ будут за шеридана держать.

IID>>>Любопытно другое — на С++ можно написать код, который как не пыжься, на дотнете с одинаковой производительностью не повторить. (md5 например)

G>>Только это будет не C++, а голый С. Все фичи, которые тут обсасываются сторонниками С++ идут лесом.
IID>голый С это подмножество С++. Так что "это будет не С++", мягко говоря, ложь.
Это как раз правда.
Более того, голый C практически является подмножеством C#, за исключением некоторых детаей работы с указателями.

IID>Была где-то хорошая мысль: если бы преимущества управляемой среды были бы действительно значимыми — переписали бы. Получается их значимость, как минимум, недостаточна.


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

А вообще если бы С++ был так крут как о нем тут пишут, то .NET даже не появился бы.
Re[31]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.05.09 12:36
Оценка: -1
Здравствуйте, vdimas, Вы писали:

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


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


V>Я уже не первый раз вижу это мнение, но не могу понять мотивы, может объяснишь? Наилучшие по оптимизации компиляторы — это С++, и они умеют коомпилировать С-код. Вот смысл мне не пользоваться возможностями более высокоуровневого языка, если у мня все-равно будет использован компилятор, который прекрасно компилит оба языка. Смотри: в чистом С ссылочный тип не строго типизирован, нет инлайна, нет инициализации по месту, недоступна ОО-декомпозиция (а в этом миксере участвует около десятка классов, и кое-какая шаблонность есть, правда без претензий на МП) и т.д и т.п. Поэтому поинт не понятен совершенно, по мне С++ в стиле "С с классами" все равно гораздо мощнее С. Я бы советовал ровно наоборот, там где можно, вместо С использовать С++.

Я имею ввиду не использование компилятора С, а неиспользование возможностей C++ — классов, шаблонов, динамической памяти и прочего.
Для числомолотилок оно и не нужно.
Re[36]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 19.05.09 12:53
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

IID>> Иными словами C++ всегда может работать НЕ МЕДЛЕНЕЕ дотнета.

G>Не всегда, за счет динамической кодогенерации
При всех этих динамических компиляциях и кешированиях, Генка Риггер как то пожаловался что им скоро придётся вместе со своими продуктами продавать пакетики травы — чтобы визуально сглаживать постоянные рывки производительности

G>прога на .NET может работать быстрее аналогичной прогри на C++.

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

G>А вообще второе твое утверждение не эквивалентно первому, изучай логику.

Не тебе говорить о логике

IID>>Любопытно другое — на С++ можно написать код, который как не пыжься, на дотнете с одинаковой производительностью не повторить. (md5 например)

G>Только это будет не C++, а голый С. Все фичи, которые тут обсасываются сторонниками С++ идут лесом.
Ты не знаешь С++ иначе бы не нёс ересь про С
Нужно разобрать угил.
Re[32]: Работа - с чего начать: С++ или С#?
От: FR  
Дата: 19.05.09 13:05
Оценка: +1
Здравствуйте, gandjustas, Вы писали:


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

G>Для числомолотилок оно и не нужно.

Шаблоны и классы нужны, позволяют получить более шустрый код чем чистый си.
Re[37]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.05.09 13:11
Оценка: :)
Здравствуйте, NikeByNike, Вы писали:

G>>прога на .NET может работать быстрее аналогичной прогри на C++.

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

На С++ значит динамическая кодогенерация не нужна так как код близкий к оптимальному. А динамическая генерация кода на .NET позволяет C++ уделывать.

G>>А вообще второе твое утверждение не эквивалентно первому, изучай логику.

NBN>Не тебе говорить о логике
И не тебе. Так что не влазь.

IID>>>Любопытно другое — на С++ можно написать код, который как не пыжься, на дотнете с одинаковой производительностью не повторить. (md5 например)

G>>Только это будет не C++, а голый С. Все фичи, которые тут обсасываются сторонниками С++ идут лесом.

NBN>Ты не знаешь С++ иначе бы не нёс ересь про С

Ты о чем? Исходники md5 отлично собираются голым C компилятором.
Re[36]: Работа - с чего начать: С++ или С#?
От: FR  
Дата: 19.05.09 13:38
Оценка: -1
Здравствуйте, gandjustas, Вы писали:


G>Как шаблоны как compile-time кодогенерация действительно хорошо работает. Я там образом оптимизировал библиотеку для нейронных сетей на крусовую.

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

G>А классы каким образом позволяют получить более быстрый код, на примере числомолотилки типа md5?


Функторы в виде классов лучше инлайнятся чем свободные функции. Хотя современные компиляторы уже и одиночные функции инлайнить умеют, но функторы все-равно позволяют большую гибкость не теряя в скорости.
Re[35]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.09 14:12
Оценка: +1
Здравствуйте, FR, Вы писали:

G>>Пример?


FR>std::sort vs qsort


Подлог! Это разные алгоритмы.

Кстати, на пример C vs. C++ можно можно спроецировать все сказанное о C++ vs. C#. Ведь на С всегда можно написать код не медленнее чем на С++. Проблема только в трудоемкости.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[37]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.09 14:14
Оценка: -1
Здравствуйте, FR, Вы писали:

FR>Функторы в виде классов лучше инлайнятся чем свободные функции. Хотя современные компиляторы уже и одиночные функции инлайнить умеют, но функторы все-равно позволяют большую гибкость не теряя в скорости.


Махровый бред!
Не потрудишься его обосновать?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[29]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.09 14:16
Оценка: :)
Здравствуйте, FR, Вы писали:

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


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

Что не так?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[39]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.09 14:30
Оценка: -1
Здравствуйте, FR, Вы писали:

VD>>Это чушь. По той же логике, что предъявляют фанаты С++ ассемблер как раз дает больше возможностей для оптимизаций. Например, самые новые инструкции можно заюзать и т.п. Когда там компиляторы до них подтянутся.


FR>Логика таже только ступенька на порядок выше.


Кто измерял этот порядок?

FR>Разница принципиальная между ассемблером и ЯВУ это порядок, внутри майнстримовых языков в лучшем случае разы.


Между С++ и теми же Немерле или Хаскель тот же порядок. Конечно если всеми тремя инструментами хорошо владеть.

С другой стороны это уже сближение позиций. Разница уже заключается только в оценке степени превосходства в уровне и отстования в скорости. Так?

FR>Зависит еще от размеров проекта, его сферы применения и квалификации исполнителей.


От размеров конечно зависит. Чем больше проект, тем менее рентабельно реализовывать его на С++. От сферы не зависит. По крайней мере я эту зависимость не ощущаю. Квалификация вообще показатель отдельный. Сравнивать нужно только при условии, что квалификация идентична. Иначе к затратам нужно прибавлять затраты на обучение или формирование новой команды разработчиков.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[30]: Работа - с чего начать: С++ или С#?
От: FR  
Дата: 19.05.09 14:47
Оценка: :)
Здравствуйте, VladD2, Вы писали:

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


VD>Кстати, рассуждения о любви подкреплены какой-то статистикой или как всегда высасывание из пальца?


Влад ты перестал пить коньяк и бить жену по утрам?
Re[40]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 19.05.09 15:10
Оценка: :)
Здравствуйте, VladD2, Вы писали:

FR>>Влад ты слишком давно не писал на C++


VD>Он что с тех пор изменился?


Ну как же! С++ почти (совсем чуть-чуть осталось) научился псевдо-замыканиям.
Re[40]: Работа - с чего начать: С++ или С#?
От: FR  
Дата: 19.05.09 15:16
Оценка: +1
Здравствуйте, VladD2, Вы писали:

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


FR>>Влад ты слишком давно не писал на C++


VD>Он что с тех пор изменился?


VD>ЗЫ


VD>Хотелось бы все же услышать обоснование.


Компиляторы Си/С++ до недавнего времени не умели инлайнить по указателю на функцию,
шаблоный же параметр инлайнят компиляторы даже 10 летней давности.
Re[41]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 19.05.09 15:46
Оценка: :)
Здравствуйте, Геннадий Васильев, Вы писали:


ГВ>>>Ух ты! А я-то думал, что мокинг нужен для отслеживания последовательности внешних вызовов.

C>>Неправильно думали. Мокинг нужен в первую очередь для изоляции тестируемого объекта. Чтоб сделать возможной эту изоляцию возможной необходимо симулировать поведение внешних зависимостей тестируемого объекта.

ГВ>Так. Обратимся к первоисточникам:


ГВ>

Mocks [...] objects pre-programmed with expectations which form a specification of the calls they are expected to receive.

ГВ>Моки — запрограммированы на ожидание вызовов в соответствии с определённой спецификацией. (Буквально: формируют спецификацию своими ожиданиями)


ГВ>Где сказано, что мок обязательно изолирует тестируемый объект от окружающих?


Даже и не знаю как Вам объяснить, что 2+2=4.

Даю наводящий вопрос: С какой целью создаются "objects pre-programmed with expectations which form a specification of the calls they are expected to receive"?

Можете мне не отвечать. Я ответ знаю. Ответьте себе. Если сможете, то поймете о чем идет речь. А не сможете — ну да и Бог с Вами.

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


ГВ>Ну, если сводить "удобство тестирования" к автоматической генерации пустых объектов — соглашусь. А если не сводить, то тут очень сильно бабка надвое сказала.


Тестируются не пустые объекты, а поведение объектов в фиксированных (изолированных) условиях.

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

C>>И что тут сложного?

ГВ>А я и не говорю, что это сложно. Я о сопоставлении сложности теста и тестируемого кода.


И? Не вижу к чему Вы клоните.

C>> Элементраный тест (в условиях дотнет) с условно установленными моками.


ГВ>Мммм... Дотнет его сам сгенерирует? Полностью? А за пивом он сгоняет?


Полностью. Сгенерирует. Не вижу причину сарказма.

ГВ>[...]


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


C>>Вы опять же путаете модульные тесты с интеграционными тестами. Модульные тесты не тестируют работу сети/жесткого диска/клавиатуры/мыши и т.д. Модульные тесты не тестируют взаимодействие подсистем. ит.д. и т.д. Короче, разберитесь в вопросе для начала, ок?


ГВ>Даже если говорить о приведённом примере, то где здесь тестирование сети/жёсткого диска/...? Тестируется соответствие реального и предполагаемого протокола работы (form a specification, итить!). Или ты думаешь, что под sendMessage имеется в виду send в сокет?


Если не предполагается, то RhinoMocks прекрасно справится с мокингом в этом случае. В чем проблема?

ГВ>А потом, модульным тестированием называется тестирование модулей. Что именно мы так называем — зависит от структуры программы. Запросто может быть тестирование модуля по имени "модуль сетевого интерфейса", который запросто может предполагать одновременный запуск тестов на нескольких машинах и в то же время другой модульный тест может проверять одну-единственную функцию.

Демагогия. Вы пытаетесь рассуждать логически, строя ложные выводы, основываясь не на реальных знаниях и опыте, а на дедукции и том, что Вы считаете логичным в меру Ваших познаний.
Почитайте Мартина Фоулера, почитайте Бекка... Да хотя бы, потратьте 10 минут да прочтите http://en.wikipedia.org/wiki/Unit_testing


ГВ>Если TDD предполагает, что это неправильное употребление термина "модульное тестирование", то тем хуже для самого TDD.


Тем хуже для Вас, а не для TDD.


C>>>>Еще один ликбез: описанное Вами не является модульными тестами. Это т.н. integration tests.

ГВ>>>Это зависит от того, что в данной конфигурации полагается модулем, а что — интеграцией. Поскольку структура любой сложной программы иерархическая, то модуль на одном уровне — это сборная конструкция на другом.
C>>Нет, не зависит. RTFM, как говорится.

ГВ>Какой M нужно R?


Смотрите выше.

ГВ>>>Угу. А ещё программы должны быть простыми. Это и называется искать решение сложных проблем простыми средствами, сиречь — руководствоваться лозунгами.


C>>Да, тестируемые участки кода должны быть простыми. В этом суть дизайна под названием Test Driven Development. Используя алгоритм write failing test -> write code -> until test succeed -> refactor ... добиваемся прекрасного качества кода с соблюдением всех правил современного программирования: DRY, SRP, и т.д. Если Ваш код на столько сложный и запутанный, что Вы не можете написать серию простых тестов для него, значит Ваш код — плохой. Вот Вам и пища для размышлений.


ГВ>А если пользователь поставил задачу, которая не имеет простого решения?


Знакомы с понятием "декомпозиция"?

ГВ>Значит, я не смогу написать простой тест и не смогу руководствоваться современными правилами программирования?


Сможете.
Re[28]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 19.05.09 15:53
Оценка: :)
Здравствуйте, VladD2, Вы писали:

IID>>P.S.: подсказка: сам CLR написан на C/С++, и скорость выполнения .NET кода это, в определённом смысле, скорость выполнения некоторой С++ программы. Которую всегда можно, как минимум, не замедлить.


VD>Замечательная логика! Точнее ее полное отсутствие.


VD>Из этой предпосылки можно сделать вывод, что если написать компилятор, скажем, С на Руби, то получаемые программы будут иметь "в определенном смысле" (не знаю что за этим скрывается) скорость Руби (т.е. будут тормозными).


Ну, если исполняющей средой для таким образом скомпилированных приложений будет выступать Руби, то таки да, логично, что они будут тормозами.
Re[27]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.05.09 07:26
Оценка: :)
Здравствуйте, vdimas, Вы писали:

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


G>>Проснись, оптимизация дотупа к массивам давно сущесвует.


V>То, что ты привел, работает только для i<array.Length, а это для тех же числомолотилок, которые переливают из предвыделенных буферов в буфера нереальный сценарий. Я уже как-то писал на эту тему, но могу еще раз.

V>
V>uint[] data = _data;
V>for(int i=0, e=_buffLen; i<e; i++)
V>{
V>  SomeProccess(data[i]);
V>}
V>

V>_data и _buffLen — члены класса, data и buffLen — локальные переменные, на них нет ссылок по ref, а из алгоритма видно, что значения неизменяемые в теле цикла, поэтому проверить можно buffLen лишь однажды при инициализации цикла, а затем уже не проверять границы. Однако, эту оптимизацию не делают.
Это C++ники так пишут код на шарпе. Не надо так писать. Пишите нормально i<data.Length и будет счастье.

G>>Если нужет произвольный быстрый доступ, то есть unsafe.


V>Если использовать пиннинг — то тормозно (чем больше одновременных пинов, тем дороже каждый следующий), если же самостоятельно выделять память через всякие Marshal.AllocXXX, то смысл в управляемой платформе вообще исчезает, да и проблемы с ClickOnce для unsafe сборок. Вывод сделаешь сам.

А причем тут пиннинг, он имеет значние только когда выделяется память. Есть хоть один числомолотильный алгоритм, в котором удно выделять память в процессе прохода по массиву?
Такая операция в С++ взовет большие тормоза, чем проверки границ в .NET.


G>>Что касает числомолотилок, то в самых тупых линейных случаях (как md5 например), при использовании uncheked, .NET будет проигрывать на проценты. Что в реальной программе погоды не сделает.


V>Это зависит от характера вычислений. Например, фильтрация — это крайне примитивные вычисления, там затраты на проверку на границу цикла сопоставимы с полезными вычислениями (сопоставимы потому, что джиттер даже не кеширует в регистре длинну массива, а каждый раз лезет за ней через коссвенную адресацию), и вместо непосредственного приращения указателя каждый раз вычисляет адрес элемента (что вполне понятно, у нас же GC). Итого, мы сможем сделать таких простых вычислений в 2-3 раза меньше.

Фильтрация чего?
Еще раз нужен быстрый линейный проход по массиву — используйте unsafe.

G>>Кроме того такие случаи элементарно оптимизируются заменой на Сшный код или распараллеливаются (в .NET далется очень легко).

V>В моей задаче распараллеливание одного вычисления не нужно, у меня их и так конкуррентно тысячи идут, я борюсь за эффективность каждого из них.
Будешь бороться за каждого — производительности не будет. Компутер гораздо лучше умеет шедулить задания, чем ты сам.

G>>ЗЫ. Я ещ не упоминул такие оптимизации, которые делает mono. См Mono.Simd


V>Спасибо, интересно. На С++ мы делаем разные сборки для без SSE, и отдельно для SSE1/2/3, которые будем подгружать динамически, в зависимости от возможностей проца. Если джиттер научится делать это сам, то кое-что можно будет пересмотреть. Однако, вот тот доступ к массивам — это затык №1 для нас, ибо обычные вычисления действительно неплохо выглядят после джиттера.

Дык используйте unsafe и указатели.
Re[30]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 20.05.09 13:22
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

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

Занимаюсь я щас как раз GPU числомолотильней для финансовых расчетов.
Там пока всё мрачно и сурово.
Язык вообще роли не играет — хоть на ассемблере пиши. Все равно везде упираешься в особенности и ограничения самого железа.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[34]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 20.05.09 13:22
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

G>А мотив очень простой. Голый C интеропается с программой на любом языке.

Ну и толку с того что он интеропается?

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

Это вообще то всё есть и в С.

G> наследование, полиморфизм и шаблоны и прочую высокоуровневую лабуду, то пропадают все проблемы, присущие C++.

И какие же проблемы, кроме кривых рук говнокодера с вышеперечисленным связаны?

G>Кроме того, повышается переносимость кода. При удачном стечении обстоятельств можно взять код на С и запустить его на видеокарте с помощью CUDA.

Снимай уже розовые очки.
На CUDA перенести удается только хорошо параллелящиеся алгоритмы. Все остальное превращается в УГ.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[33]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 20.05.09 13:22
Оценка: +1
Здравствуйте, hattab, Вы писали:

G>>Зачем мне верить, у меня результаты тестов есть.

H>У тебя тест не правильный Померял непонятно что у MSVC++ и экстраполируешь на весь С++

Померял он дефакто WinHeap а не C++ аллокацию.
Зато щастлив как ребенок, что пописал.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[35]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.05.09 15:19
Оценка: +1
Здравствуйте, CreatorCray, Вы писали:

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


G>>А мотив очень простой. Голый C интеропается с программой на любом языке.

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

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

CC>Это вообще то всё есть и в С.
Кто-тоговорил что нет?

G>> наследование, полиморфизм и шаблоны и прочую высокоуровневую лабуду, то пропадают все проблемы, присущие C++.

CC>И какие же проблемы, кроме кривых рук говнокодера с вышеперечисленным связаны?
Все проблемы разработки ПО так или иначе связаны с криворукостью. Это вообще свойство человека — ошибаться.
Нормальные языки должны не допускать грубых ошибок и прощать мелкие. С++ так не умеет, невнимательное кодирование приведет к тому, что программа начнет падать в самый неожиданный момент.

G>>Кроме того, повышается переносимость кода. При удачном стечении обстоятельств можно взять код на С и запустить его на видеокарте с помощью CUDA.

CC>Снимай уже розовые очки.
CC>На CUDA перенести удается только хорошо параллелящиеся алгоритмы. Все остальное превращается в УГ.
Читай внимательнее выделенное.
Re[30]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 20.05.09 17:27
Оценка: +1
Здравствуйте, gandjustas, Вы писали:

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

В общем, сервер конференций, видео, VoIP и вся лабуда типа шаринга приложений и прочие примочки. Основная реалтаймовая и одновременно нагрузочная вещь — это именно VoIP, остальное реалтаймом можно назвать лишь условно. Что есть VoIP: это 50 пакетов в секунду на абонента в одну только сторону, т.е. итого 100 пакетов на абонента. Железка должна держать их несколько сотен, желательно под тысячу. В общем, у меня такой сценарий, что я даже не могу позволить себе такую мелочь, как лишнее копирование данных и тем паче ни о каких 100тыс выделений буферов в секунду не может быть и речи.

G>Как это "априори неизвестен"? покажи мне API которые возвращают "незивестно сколько данных".


Оно не возвращает, оно читает из сокета в наш предвыделенный буфер. После прочтения возвращает кол-во прочитанных байт. В пакете заголовок и собственно сами данные с неким смещением (зависит от заголовка). Данные обрабатываются прямо из этого буфера по указанной выше причине.

G>В таком случае надо большие буферы выделять в саом начале и кратковременно их пиннить. Известный рецепт.


Там в среднем 6 буферов на абонента, под миллион пинов в секунду — это даже на моей "сиротской" железке просто так выкинуть около 15% производительности.


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


Обычная там фильтрация, ФНЧ/ФВЧ, алгоритм рекурсивного фильтра примитивен — это просто вычисление многочленов z1*a1+z2*a2+z3*a3+..., zi — элементы последовательности, ai — константы. Думаешь, я тебе вру о том, что затраты на доступ к массиву сопоставимы с полезными вычислениями?

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


Да почитал, почитал. Сейчас я тебе контекст обрисовал, ты и сам видишь, что дополнительно параллелить там нечего. Вся система асинхронная, по приходу UDP-пакета стоит задача максимально быстро его обработать и освободить тред для следующего. Кол-во таких VoIP-тредов сейчас в 4-6 раз больше, чем ядер, еще больше делать смысла нет, т.к. производительность больше не растет.

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


Прежде чем советовать что-либо пересмотреть, неплохо бы выяснить как оно сейчас есть... нет?
Чтобы два раза не ходить, скажу что по максимум и это у нас есть, кроме тех сценариев, для которых безблокировочные алгоритмы еще не придуманы. Если быть более точным — то некоторые существующие просто не всегда подходят, ввиду требований выделения динамической памяти для каждой порции данных.
Re[29]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 20.05.09 18:45
Оценка: :)
Здравствуйте, vdimas, Вы писали:

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

MK>>Ну т.е. в принципе, при наличии двух сервис-паков, Photoshop CS2 можно смело назвать Photoshop CS4???
V>Откуда такой вывод?
Ну как...
— Изначально ты написал: "И еще забыл, что последние года 4 тактовая частота процов практически не растет, а обсуждаемого скачка оптимизации JIT-а при переходе на 3.0 версию не было ВООБЩЕ".
— На что получил ответ, что рантайм по прежнему 2.0, что он не менялся со времен второго дотНета, ну нету CLR 3.0 и всё.
— Тем не менее, как контраргумент ты выдвинул такое: "Тем не менее, сам рантайм и .Net-сборки от второго фреймворка обновлялись с выходом каждого последующего или их SP. Для интереса, вот список изменений только лишь для 2.0SP1 http://support.microsoft.com/kb/945757, остальное найти так же не трудно, если есть желание."

Собственно отсюда и вывод, что сервис-паки каким-то магическим образом повышают версию.
Re[30]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 20.05.09 21:23
Оценка: +1
Здравствуйте, MxKazan, Вы писали:

V>>Тогда встречный ликбез для тебя: рантайм и основные .Net сборки (mscorlib, System) постоянно обновлялись после выхода второго фреймворка (когда я говорю второй фреймворк, то это именно релиз Microsoft .Net Framework 2.0, который действительно 2.0.50727). Одни из самых заметных обновлений рантайма, пришедшее с .Net 3.0 — это доработка GC, самое заметное изменение сборок версии 2.0.50727, пришедшее с .Net 3.5 — это интерфейс класса Socket из System.dll. А так по мелочи доработок была куча (начни от ссылки в пред. посте), от внутренних кишок System.Data, до дублирования и переноса по неймспейсам объявлений наиболее популярных интеропных COM структур и интерфейсов.

MK>Короче это. Не сошлись вы в том, что один понял 3.0 как версию CLR, другой говорил о CLR, который шел вместе с 3-м FW. Вот и всё, рабочие моменты Кстати, я пару раз на собеседованиях слышал, что некоторые так и не перешли на третий FW, потому что ждут полноценно нового рантайма.

Очень глупо. 3.0 и особенно 3.5 это очень большой шаг вперед в сравнении с 2.0. CLR мало на что влияет как таковой.
Re[31]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 21.05.09 02:40
Оценка: -1
Здравствуйте, vdimas, Вы писали:

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


MK>>- Изначально ты написал: "И еще забыл, что последние года 4 тактовая частота процов практически не растет, а обсуждаемого скачка оптимизации JIT-а при переходе на 3.0 версию не было ВООБЩЕ".

MK>>- На что получил ответ, что рантайм по прежнему 2.0, что он не менялся со времен второго дотНета, ну нету CLR 3.0 и всё.
V>А откуда взялось слово CLR? Почему ты решил, что речь о CLR, а не о .Net Framework, например?
Видимо, потому что ты говорил о JIT-е, который таки является частью именно CLR. Ты картинку то поглядел? Мы за последнее время привыкли к незнанию предмета со стороны *упорно голосующих*, так что подобное непонимание не удивительно.
Re[46]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 21.05.09 08:04
Оценка: +1
Здравствуйте, criosray, Вы писали:

C>Детский сад, вторая группа.


Да понимаешь...
В нашей профессии ничего сакрального быть не может по-определнию, и любая Методология не сложнее Алгоритма. Не понял? Прочти еще раз.

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

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

Как итог, немного чувствуем себя в роли тех самых новых ворот, которым взбрендилось разговорить своего известного созерцателя... Абыдно за потраченное ни на что время... Либо еще можно махнуть рукой и откровенно развлекаться.
Re[34]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 21.05.09 11:13
Оценка: :)
Здравствуйте, MxKazan, Вы писали:


V>>А CLR у нас теперь отдельно от фреймворков идёт?

MK>А что это меняет?

Упорядочивает логику рассуждений, очевидно.

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


Ну я-то разобрался сразу, просто интересно понять, откуда был взято утверждение о моем незнании насчет версий CLR. Считай, что формат "Священных войн" позволяет мне экспериментировать с оппонентами. Просто в исходный топик можно подставить утверждение, что я не знал обсуждаемое, или же противоположное — логика-то в итоге не меняется, и даже к обсуждаемому там вопросу не относится. Так что позволю себе быть в полной уверенности, что этот всплеск эмоций был по самой банальной низменной причине — из желания назвать ламером оппонента. (такая вот месть, за то, что потрепали в другом разделе форума )
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[37]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 21.05.09 12:20
Оценка: :)
Здравствуйте, criosray, Вы писали:

C>


И еще один последний ликбез для Вас: рантайм о котором Вы твердите это и есть CLR — common language runtime и он НЕ обновлялся с 2005го года — со времен выхода дотнет 2.0

Повторяю: жду от Вас, вдимас, публичного признания своей неправоты и извинений.
Re[37]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 21.05.09 12:27
Оценка: :)
Точки над i

Re[37]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 21.05.09 14:12
Оценка: :)
Здравствуйте, vdimas, Вы писали:

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


V>>>Поэтому, в спецификациях требований к окружению такой программы надо писать не <CLR 2.0.х>, а <.Net 3.5 SP1>. Разницу ощутил?

S>>А как же multitargeting при разработке?
S>>Скопиленное на платформе .Net3.5sp1 под 2.0 пойдет на 2.0 гарантированно? Или к 2.0 надо свои другие фиксы ставить?

V>Именно привел пример, когда гарантированно не пойдет. Конкретные классы и методы:

V>Socket.AcceptSync(), Socket.ConnectSync(), и прочие xxxAsync() а так же сам класс SocketAsyncEventArgs.

Очевидно речь идет о методах Socket.AcceptAsync, Socket.ConnectAsync и т.п. Потому как об AcceptSync нет никаких упоминаний.
Эти новые методы были введены в
Supported in: 3.5, 3.0 SP1, 2.0 SP1
Т.е. разрабатывая под 3.0 SP1 и используя эти методы мы получаем бинарник, которому нужен 2.0 SP1 для запуска. Если мы не хотим терять совместимость с 2.0 без sp1, то не используем. И все дела.

V>Была еще куча мелких примеров, но мы не записывали, а просто написали в требованиях <MS .Net FW 3.5 SP1>.

?
Если можно конкретнее...
Re[6]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 21.05.09 14:31
Оценка: +1
P> P>>типов проверок !!!! ЧЕГО ..
P> P>> мощная статическая проверка типов ..это 0 который делает из 1 десятку

P> G>
P> G>A a;
P> G>B* b = (B*)((void*)&a)
P> G>

P> G>Где тут сильные проверки?

P> G>Лучше сразу напиши что был неправ иначе заклюют.


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



Мощная система проверки типов просто не позволила бы сделать такой финт ушами

P> есть полноценные указатели


Что такое полноценные указатели?

P> и void*


Который нужен зачем?

P> , совместимость с С и это здоровская вещь на самом деле ...


Любой современный язык имеет возможность вызывать функции из С-кода


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


Демагогия
avalon 1.0rc1 rev 239, zlib 1.2.3


dmitriid.comGitHubLinkedIn
Re[46]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 21.05.09 17:30
Оценка: :)
Здравствуйте, Serginio1, Вы писали:


S>И зачем тогда на 1С пишут? (возможностей то мало, но и их хватает большинству хватает)


Из-за оху..., т.е. хьюговой (huge) прикладной базы.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[8]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 21.05.09 19:21
Оценка: +1
Здравствуйте, NikeByNike, Вы писали:

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


G>>>>
G>>>>A a;
G>>>>B* b = (B*)((void*)&a)
G>>>>

G>>>>Где тут сильные проверки?

G>>Не надо объяснять. Не такая уж сильная типизация как тебе кажется.

G>>Пример с union_ами приводить?

NBN>А чего ты всё про С да про С? Мы тут вроде про С++ говорили.


C++ в полной мере наследует все проблемы и ошибки С и добавляет свои до кучи.


dmitriid.comGitHubLinkedIn
Re[28]: Работа - с чего начать: С++ или С#?
От: landerhigh Пират  
Дата: 22.05.09 01:25
Оценка: :)
Здравствуйте, criosray, Вы писали:

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



C>>>На детские болезни программистов и прочие грабли я налетал примерно 11 лет тому назад, когда работал С/С++ программистом. Так что Ваш комментарий, молодой человек, несколько "мимо тазика".

L>>Так и работал, C/C++ программистом? А это ничего, что такого языка нет и не было?
C>В каком месте при чтении Вашего ответа следует начинать смеяться?
Смотри выделенное.
Засим откланиваюсь.
Re[5]: Работа - с чего начать: С++ или С#?
От: _d_m_  
Дата: 22.05.09 02:26
Оценка: :)
Здравствуйте, MxKazan, Вы писали:

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


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

MK>Dildo Framework, Vegetable Edition

Остается окрытым вопрос: а как быть мясному рынку?
Re[37]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 22.05.09 04:55
Оценка: -1
Здравствуйте, vdimas, Вы писали:

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


V>>>На С++ тоже уже на днях станет можно.

G>>А смысл?

V>Совсем предлагаешь без нативных языков обходиться?

Смотря в какой области. В системном программировании не сильно получится без нативных языков, байтики ворочить без C мало получится. C++ в такой задаче ни к чему. Аналогично для числомолотилок.
Re[47]: Работа - с чего начать: С++ или С#?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 22.05.09 07:52
Оценка: +1
Здравствуйте, vdimas, Вы писали:

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



S>>И зачем тогда на 1С пишут? (возможностей то мало, но и их хватает большинству хватает)


V>Из-за оху..., т.е. хьюговой (huge) прикладной базы.

//Суммарная скорость разработки крайне мало зависит от выбранного высокоуровневого языка
Для каждой задачи свой инструмент. Невозможно создать универсальный иснструмент, даже из С# (хотя в Net 4 динамики добавят ещё большей гибкости). Но универсальный, не значит оптимальный для определенного круга задач.
Выбрать оптимальный инструмент, главная задача производителя
и солнце б утром не вставало, когда бы не было меня
Re[13]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 22.05.09 08:27
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Хамский тон? Дык я со всеми говорю тем тоном который они зауживают. Ты не стоишь того, чтобы проявлять к тебе уважение.

VD>Ты банально обосрался в споре и пытаться свести все к флэйму, перевести тему, перейти на личности и т.п.
VD>Я не вижу никакого отношения между твоим ламерством в обсуждаемых вопросах и нашим сайтом.
VD>Ну, и разговаривать о проблемах сайта с теоретиками мне по-попросту не интересно. Когда создашь сайт хотя бы в десять раз меньше популярный можно будет поговорить.
VD>Тебе должно быть стыдно за свое ламерство и ту дерьмовую демагогию что ты тут разводишь.
VD>В прочем, понятие совести для таких как ты вряд ли применимо, а значит разговоры о совести бессмысленны.

Старый добрый влад.
Забань себя чтоль за оскорбление пользователя.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[14]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 22.05.09 10:00
Оценка: :)
Здравствуйте, CreatorCray, Вы писали:

VD>>Хамский тон? Дык я со всеми говорю тем тоном который они зауживают. Ты не стоишь того, чтобы проявлять к тебе уважение.

VD>>Ты банально обосрался в споре и пытаться свести все к флэйму, перевести тему, перейти на личности и т.п.
VD>>Я не вижу никакого отношения между твоим ламерством в обсуждаемых вопросах и нашим сайтом.
VD>>Ну, и разговаривать о проблемах сайта с теоретиками мне по-попросту не интересно. Когда создашь сайт хотя бы в десять раз меньше популярный можно будет поговорить.
VD>>Тебе должно быть стыдно за свое ламерство и ту дерьмовую демагогию что ты тут разводишь.
VD>>В прочем, понятие совести для таких как ты вряд ли применимо, а значит разговоры о совести бессмысленны.

CC>Старый добрый влад.

CC>Забань себя чтоль за оскорбление пользователя.

Жаль, что на КСВ не банят за провокационное поведение, троллинг и ламерство.
Re[21]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 22.05.09 17:04
Оценка: -1
Здравствуйте, -MyXa-, Вы писали:


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

C>>А необходимость возникает только тогда, когда продакшн билд начинает течь, как дырявое решето?


MX>criosray, будьте, пожалуйста, повнимательнее, даже и в КСВ. Я этого не писал.


А я Вас и не квотил.

MX>Вы вот мне лучше скажите — код, который находится этим запросом — его писали нормальные программисты или индусы (всё-таки не хочется делать далеко идущие выводы о языке на основе кода последних)? Если нормальные, то о какой высокоуровневости может идти речь? Тут как раз и получается "а здесь мы освобождаем значение x, поскольку оно нам не понадобится в дальнейшем ходе док-ва" (С) BulatZiganshin. В С++ подобного кода нет и не надо никогда.


Ваши наивные иллюзии вызывают улыбку.

Слаботипизированный С++ с абсолютно нечитабельным отвратительным синтаксисом позволяет допускать ТАКИЕ ляпы, что в С# даже индус написать не сумеет.
Re[24]: Работа - с чего начать: С++ или С#?
От: IID Россия  
Дата: 23.05.09 10:17
Оценка: +1
Здравствуйте, VladD2, Вы писали:

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


B>>Если С# так хорош, то почему всякие Crysis, Quake, FarCry и прочее на нем не пишут?


VD>Банально выжимают производительность. Тот же Quake писался на С. Кормак ООП в принципе не приветствовал никогда.

Последний pure-C движок Кармака — для Q3 (1999, т.е. 10 лет назад). Потом только С++:
Doom 3 — C++

Другие известные C++ движки:
Source — C++
UE3 — C++

VD>Кстати, большой объем кода в играх — это логика игры. И его ни один идиот на С не пишет.

Смотря что и как мерять. По объёму — может и большой. А по % времени исполнения — незначительный.

VD>Есть и игры написанные на 90% на управляемом коде.

Ага, казуалки И опять же, что меряем ? Если время исполнения — ни в одной игре с навороченной графикой больше единиц процентов не получим этого времени.

VD>Так что выигрышь от применения С++ и С не велик.

А игроделы-то и не в курсе...
kalsarikännit
Re[41]: Работа - с чего начать: С++ или С#?
От: Qbit86 Кипр
Дата: 27.05.09 10:02
Оценка: +1
Здравствуйте, vdimas, Вы писали:

V>С++ такой же низкоуровневый, быстрее в общем случае, чем С.


Насчёт быстрее в общем случае, чем Си — это вряд ли. В некоторых случаях может быть быстрее кода на Си, в этом месте как правило спешат привести хрестоматийный пример qsort vs. std::sort. Собственно, это была одной из целей Страуструпа — не сильно потерять в производительности. Но совсем этого избежать не получилось.

V>И что за повторяющаяся ахинея насчет "более сложных абстракций"?


Исключения, например, сильно мешают некоторым оптимизациям, приводят к громоздкому бинарному коду. Совсем же без исключений на C++ писать трудно, тем более что даже простой new может бросить std::bad_alloc.

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

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

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

18.03.09 16:41: Перенесено из 'О работе'
Re: Работа - с чего начать: С++ или С#?
От: niellune Россия  
Дата: 15.03.09 08:00
Оценка:
P.S. зарплата не особо критична
Re[5]: Работа - с чего начать: С++ или С#?
От: shrecher  
Дата: 15.03.09 11:18
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

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


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


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


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


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

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

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

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

Это где "у нас в стране". В России? Я не знаю, т.к. давно там не был, но в мире полно компаний с миллионами продаж.
Re: Работа - с чего начать: С++ или С#?
От: JazzzMaster Россия  
Дата: 15.03.09 14:00
Оценка:
Здравствуйте, niellune, Вы писали:

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


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


Это самообман! "Оттуда" не возвращаются
... << RSDN@Home 1.2.0 alpha 4 rev. 1138>>
Re[5]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 15.03.09 15:36
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

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


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

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


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

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


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

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

_>>>Знаний для работы под С++ надо больше, но это изучается один раз в жизни.
KV>>Гениальная фраза. А можешь дать пример знаний, которые необходимо получать дважды, трижды и т.д?
S>Вероятно, имеется ввиду, что Microsoft непререрывно "улучшает" платформу .net. Постоянно нужно что-то доучивать или переучивать, а это отвлекает от конечной задачи.
Какие только претензии к .Net я не встречал, но чтобы раздражало улучшение платформы, такого еще не было
Re[4]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 15.03.09 16: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 16:40
Оценка:
Здравствуйте, MxKazan, Вы писали:

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

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

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

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

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


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

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

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


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

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

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


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

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

Алексей
Re[8]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 15.03.09 17: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[4]: Работа - с чего начать: С++ или С#?
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 15.03.09 17:20
Оценка:
Здравствуйте, shrecher, Вы писали:

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


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


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


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


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


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

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[4]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 15.03.09 17:24
Оценка:
Здравствуйте, ononim, Вы писали:

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

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

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

Ой насмешили Нету такого — Qt Software. Есть лишь библиотека Qt, написанная Trolltech.
Как много веселых ребят, и все делают велосипед...
Re[7]: Работа - с чего начать: С++ или С#?
От: ononim  
Дата: 15.03.09 17: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 17:45
Оценка:
Здравствуйте, MxKazan, Вы писали:

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

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

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

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

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

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


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

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

Не-не-не, он в конце-концов сдался и написал, что "конца С# не будет и никуда он не денется" Re: Сишарпкапец наступает
Автор: Pavel Dvorkin
Дата: 10.03.09

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[8]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 15.03.09 18:05
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

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

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

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

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

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

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

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

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

сам ездил? C и Fortran, плюсы в ж..е.
Re[7]: Работа - с чего начать: С++ или С#?
От: alsemm Россия  
Дата: 15.03.09 18:33
Оценка:
Здравствуйте, MxKazan, Вы писали:

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


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

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

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

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

A>>Алексей

MK>Марат
Re[11]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 15.03.09 19: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[12]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 15.03.09 19:49
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

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

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

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

ГВ>С .Net та же история и те же принципиальные ограничения. Притом, обрати внимание, Mono реализует дотнетовские API с некоторым запозданием. Как раз иллюстрация к твоим словам.
Именно этого я и добивался. Спасибо
Re[8]: Работа - с чего начать: С++ или С#?
От: mrTwister Россия  
Дата: 15.03.09 20:37
Оценка:
Здравствуйте, alsemm, Вы писали:


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


Во-первых, о каком пути VB идет речь? О том, что он помирает? Ну дак и С++ не вечен и в конце-концов тоже "повторит путь VB"
Во-вторых, С# стандартизован.
лэт ми спик фром май харт
Re[4]: Работа - с чего начать: С++ или С#?
От: Niemand Австралия  
Дата: 15.03.09 20:43
Оценка:
Здравствуйте, NikeByNike, Вы писали:

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


непереводимая игра слов (с)
If the message above is in English — means I'm wasting my work time and work computer to post here. No hard feelings
Re[8]: Работа - с чего начать: С++ или С#?
От: Ovl Россия  
Дата: 15.03.09 20:52
Оценка:
S>Ха, ошибочное мнение. Так или иначе, с выходом новой версии, чтобы продуктивно работать, к примеру поддержка, выход обновлений и пр, требуется переход на последнюю версию.

ничего подобного
Read or Die!
Как правильно задавать вопросы
Как правильно оформить свой вопрос
Автор: anvaka
Дата: 15.05.06
Re[5]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 15.03.09 20:53
Оценка:
Здравствуйте, Niemand, Вы писали:

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


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


Рассказать, чем теория от практики отличается?
Нужно разобрать угил.
Re[8]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 15.03.09 20: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]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 15.03.09 21:09
Оценка:
Здравствуйте, kochetkov.vladimir, Вы писали:

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


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


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

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


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

MK>>>>>Ну и что? Специально же уточнил — "сами". Внутри они точно также зависят от операционки. От ОС не зависят только те, кто юзают Qt, но не сама Qt.
ГВ>>>>И чем это не ответ на вопрос: как ты напишешь программу на C++ с графическим интерфейсом, но независимую от платформы?
MK>>>А тем, что она все-равно зависима.
ГВ>>Начинаем спор о словах. Что такое "платформа"? Традиционное понимание — это что-то масштаба операционной системы. В этом смысле Qt предоставляет вполне приличную переносимость, в отличие от.
MK>И тем не менее мы приходим к тому, что ваша "независимая" Qt'шная прога так или иначе, но зависит от библиотек и от API ОС. Реши производитель операционки радикально что-то поменять, вся ваша платформонезависимость полетит к чертям, пока та же Qt не будет доведена до поддержки нового API. Так вот тоже самое и с утверждениями про зависимость .Net от MS.
Re[3]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 15.03.09 22: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[9]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 15.03.09 23: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]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 15.03.09 23: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[6]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 15.03.09 23: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 23:40
Оценка:
Здравствуйте, gandjustas, Вы писали:

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

Хахаха.

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

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

Подавляющее меньшинство игр. Особенно если брать не по количеству игр вообще, а по продаваемости — хлама-то много
Re[13]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 16.03.09 01: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 01:30
Оценка:
Здравствуйте, gandjustas, Вы писали:

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

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

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


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


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

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


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

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


Да

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


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

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


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


T>Да


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


T>Да


Значит для програм написанных на первом можно поставить на машину только второй и не ставить первый. Я правильно понял?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: Работа - с чего начать: С++ или С#?
От: hrensgory Россия  
Дата: 16.03.09 08: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 08: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[12]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 09:30
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

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


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

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

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

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

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

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

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

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


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

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

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

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

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


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


В абстрактно случае — да. В практическом — где ты возмёшь программистов, где примеры/фрагменты/куски кода и т.п. вещи?
Нужно разобрать угил.
Re[11]: Работа - с чего начать: С++ или С#?
От: hrensgory Россия  
Дата: 16.03.09 10: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[14]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 16.03.09 11:56
Оценка:
Здравствуйте, COFF, Вы писали:

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

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

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

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

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

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

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


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

90% кода отнюдь не формочки и просто так его под VB.NET не втащить.
Re[18]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 13: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 13: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 13:41
Оценка:
Здравствуйте, gandjustas, Вы писали:

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

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

NBN>>Игры

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

NBN>>шаровары

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

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

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

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

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

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

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

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

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

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

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


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

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


BZ>1979


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

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

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


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

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


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

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

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


и конечно, в этом виноват C#, а не таланты Джобса
Люди, я люблю вас! Будьте бдительны!!!
Re[15]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 16.03.09 15:28
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

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


Я смогу назвать язык более современным чем C++ только если этот язык будет позволять сделать все то же самое что и C++ (в том числе и в плане эффективности), будет позволять сделать что-то, что C++ не позволяет, возможно избавится от косяков C++. Вот это и будет более современный язык. А назвать язык более современным только потому, что там есть сборка мусора я не могу. Это просто другой язык.
Re[10]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 16:00
Оценка:
Здравствуйте, Unhandled_Exception, Вы писали:

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


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


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

Не-а, рни с помощью directx рисуются
Re[18]: Работа - с чего начать: С++ или С#?
От: BulatZiganshin  
Дата: 16.03.09 16:06
Оценка:
Здравствуйте, COFF, Вы писали:

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


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


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


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

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


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


точно. а продуманная структура управления регистрами и явное использование адресов памяти в программе ещё круче, вот только несколько дороговато в разработке. язык — это средство описания алгоритма, а не детального расписывания того, что должен процессор делать каждый из 3 миллиардов циклов в секунду если ты так нацелен контролировать свой процессор, то тебе нужны машкоды и что-нибудь неспекулятивное
Люди, я люблю вас! Будьте бдительны!!!
Re[16]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 16: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 16:07
Оценка:
Здравствуйте, gandjustas, Вы писали:

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

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

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

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


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

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


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


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

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

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

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

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

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


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

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


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

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


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


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

NBN>Мемориликов в годовалом проекте нет, хотя в ходе разработки тестирования на лики не производилось.

на фортране вообще не было распределения памяти, вопрос только в том, в каком стиле при этом приходится программировать и за какими ограничениями следить, чтобы не дай бог не потерять память
Люди, я люблю вас! Будьте бдительны!!!
Re[22]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 16: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 16:32
Оценка:
Здравствуйте, COFF, Вы писали:

COF>Язык должен быть в состоянии и описать алгоритм на высоком уровне, и дать возможность распределить регистры если это нужно (а это иногда бывает нужно). Дать возможность использовать сборку мусора, где удобно, или отказаться от нее. Вот это идеал, с моей точки зрения. Сейчас C++ по сравнению с другими распространенными языками наиболее близко подходит к нему, поэтому и популярен. А когда говорят, что ручное распределение памяти вам не нужно, регистры вам не нужны, ваше дело высокоуровнево алгоритмы описывать, то сразу же возникает вопрос, а как тогда эти задачи решать и кто их будет решать? Инопланетяне?


я их и решаю на C++. когда это необходимо. а остальное пишу на хаскеле. учитывая, что >90% кода не нуждается в ассемблерной эффективности, писать всё на С++ — это всё равно что всюду таскать с собой ружьё на случай нападения медведя из ЕР
Люди, я люблю вас! Будьте бдительны!!!
Re[20]: Работа - с чего начать: С++ или С#?
От: BulatZiganshin  
Дата: 16.03.09 16:35
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>И тут вжииик, и оказывается что у меня на компе мало памяти... Всего гиг. Пока не поставил серьёзное ява приложение не догадывался, что у меня мало памяти.


у меня столько один firefox сейчас жрёт

G>>Вот так и с дворником — пока мусор никому не мешает, он его убирать не будет, перед тем как кому-то он сможет помешать — сразу же уберет.

NBN>Ага, особенно это интересно на телефоне, где тебе приходится заниматься колдовством, вместо нормального распределения ограниченного ресурса

вот на телефоне и занимайся шаманством с памятью на С, в 80-х годах мы как-то умещались в 640 кб
Люди, я люблю вас! Будьте бдительны!!!
Re[23]: Работа - с чего начать: С++ или С#?
От: denisko http://sdeniskos.blogspot.com/
Дата: 16.03.09 16:36
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>А некоторые вообще пишут свой GC...

Выделить пулы не требует написания кода практически.


D>>Кто сказал, что GC ГАРАНТИРУЕТ выделение памяти не более чем три раза больше чем в данный момент используется системой?

G>Этого не гарантирует даже аллокатор ОС, в принципе этого не может гарантировать никто.
А два сообщения выше вы написали, что гарантия 3x Врать не ходошо
<Подпись удалена модератором>
Re[22]: Работа - с чего начать: С++ или С#?
От: BulatZiganshin  
Дата: 16.03.09 16:36
Оценка:
Здравствуйте, denisko, Вы писали:

D>Обычно, для однотипных данных, которых много, выделяют тем или иным способ свой уже фрагментированный пул. Это позволяет 1) контролировать тех, кто не отдал память вовремя 2) работать быстро и со строго ограниченным сверху размером выделенной памяти.


ага. когда у тебя 10 библиотек, они вилимо собираются вместе и договариваются об общем пуле

D>Кто сказал, что GC ГАРАНТИРУЕТ выделение памяти не более чем три раза больше чем в данный момент используется системой?


Я!
Люди, я люблю вас! Будьте бдительны!!!
Re[20]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 16:37
Оценка:
Здравствуйте, COFF, Вы писали:

COF>Здравствуйте, gandjustas, Вы писали:


G>>В такой аналогии нужно больше деталей.

G>>GC не собирает память пока это никому не мешает, как только заполнится первое поколение — сразу же уберет, а то что не успел удбрать — сложит в другое полколение.
G>>Вот так и с дворником — пока мусор никому не мешает, он его убирать не будет, перед тем как кому-то он сможет помешать — сразу же уберет.

COF>Так вот дворник сидит и смотрит — вроде пока мусор никому не мешает ходить, можно еще покурить или даже поспать А то что людям может быть неприятно, когда мусор на улице валяется так это не дворника дело. С GC ситуация та же — в рамках процесса он может и понимает что мусор может кому-то помешать, а если таких процессов в системе пара десятков?

А программа на C++ будет корректировать выделние памяти в зависимости от загруженности компьютера? Конечно нет. И GC не будет.
А если кончится реальная физическая память, то страницы будут вытеснены, а освободившая память отдастся тому кому оно нужно.
Re[21]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 16.03.09 16:42
Оценка:
Здравствуйте, gandjustas, Вы писали:

COF>>Так вот дворник сидит и смотрит — вроде пока мусор никому не мешает ходить, можно еще покурить или даже поспать А то что людям может быть неприятно, когда мусор на улице валяется так это не дворника дело. С GC ситуация та же — в рамках процесса он может и понимает что мусор может кому-то помешать, а если таких процессов в системе пара десятков?

G>А программа на C++ будет корректировать выделние памяти в зависимости от загруженности компьютера? Конечно нет. И GC не будет.
G>А если кончится реальная физическая память, то страницы будут вытеснены, а освободившая память отдастся тому кому оно нужно.

И тут можно доставать травку, чтобы картинка на мониторе выглядела более плавной
Нужно разобрать угил.
Re[23]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 16.03.09 16:46
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>читай внимательно. в языках с gc гарантия — на 3x, можно и меньше. в C++ — гарантий никаких, расход может быть каким угодно прсто потому что память усеяна мелкими дырками


C++ очень универсальный язык Он позволяет писать так как тебе нужно. В частности обеспечить все гарантии по чему хочешь, чем я, кстати, на днях воспользовался.
Нужно разобрать угил.
Re[16]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 16.03.09 16:51
Оценка:
Здравствуйте, COFF, Вы писали:

COF>Ну, беты появились года за два до релиза — вот и выходит почти 10 лет.

Ну, отсчитывать от бет неприлично. Не думаешь же ты, что кто-то начинал переводить проекты при бете

COF>Потом, почему именно 2.0? Где гарантия, что завтра не будешь говорить то же самое про 3.5?

Черт. Я знал, что так напишешь

COF>Вообще, я же не против .нет, я против огульного охаивания C++ определенными дот-нетчиками

Вот тут я тебя полностью понимаю. И я тоже против огульного охаивания .Net и его приравнивания к VB.
Re[22]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 17:10
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>Здравствуйте, gandjustas, Вы писали:


G>>А программа на C++ будет корректировать выделние памяти в зависимости от загруженности компьютера? Конечно нет.

NBN>При необходимости? Конечно да!
И каким образом?

G>>И GC не будет.

NBN>Потому что не сможет
При необходимости? Конечно сможет, только это не надо никому.

Если память нужна, а её не хватает, то уже надо программу переписывать.
Re[22]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 17:14
Оценка:
Здравствуйте, COFF, Вы писали:

COF>Здравствуйте, BulatZiganshin, Вы писали:


BZ>>я их и решаю на C++. когда это необходимо. а остальное пишу на хаскеле. учитывая, что >90% кода не нуждается в ассемблерной эффективности, писать всё на С++ — это всё равно что всюду таскать с собой ружьё на случай нападения медведя из ЕР


COF>Вообще, изначально вопрос стоял так — стоит ли учить C++ или C#? Я так понимаю, что все-таки C++?


неправльно понимаешь. C++ это для тех кто хочет заниматься "хардкором" в программировании. Это примерно как в "хардкорных" фильмах про то как четыре негра, размером со шкаф, трахают девушку во все мыслимые и немыслимые отверстия, только в программировании.

Изначально вопрос стоял какой язык учить для дальнейшего развития.
Re[21]: Работа - с чего начать: С++ или С#?
От: MescalitoPeyot Украина  
Дата: 16.03.09 17:15
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, COFF, Вы писали:


G>Язык C++ не обладает возможностью описать алгоритм на высоком уровне.

G>Если не верите, то попробуйте написать алгоритм решения задачи: "вывести на экран все строки текстового файла, в которых более трех слов, отсортированные по алфавиту".
G>Причем это долно быть не наколеночное решение, а production-quality код, в котором можно без особых услий убрать условие, или сделать вывод только уникальных строк, или вывод строк через одну.

А чем C# на этой задаче лучше?
... << RSDN@Home 1.2.0 alpha 4 rev. 1138>>
Re[22]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 17:18
Оценка:
Здравствуйте, MescalitoPeyot, Вы писали:

MP>Здравствуйте, gandjustas, Вы писали:


G>>Здравствуйте, COFF, Вы писали:


G>>Язык C++ не обладает возможностью описать алгоритм на высоком уровне.

G>>Если не верите, то попробуйте написать алгоритм решения задачи: "вывести на экран все строки текстового файла, в которых более трех слов, отсортированные по алфавиту".
G>>Причем это долно быть не наколеночное решение, а production-quality код, в котором можно без особых услий убрать условие, или сделать вывод только уникальных строк, или вывод строк через одну.

MP>А чем C# на этой задаче лучше?

Linq + yield
Можете запостить сюда код решения на C++
Re[23]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 16.03.09 17:18
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>неправльно понимаешь. C++ это для тех кто хочет заниматься "хардкором" в программировании. Это примерно как в "хардкорных" фильмах про то как четыре негра, размером со шкаф, трахают девушку во все мыслимые и немыслимые отверстия, только в программировании.


У каждого свои ассоциации, уж извини :)
Re[25]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 16.03.09 17:19
Оценка:
Здравствуйте, gandjustas, Вы писали:

NBN>>C++ очень универсальный язык Он позволяет писать так как тебе нужно. В частности обеспечить все гарантии по чему хочешь, чем я, кстати, на днях воспользовался.

G>Я вот тут на днях написал на C# библиотеку для работы с конечными автоматами. Она генерирует в рантайме код автомата по описанию, а потом использует его.
G>На C++ такое получится?

Я тут на днях написал программку которая сейчас находится топе5 продаж.

P.S.
Я не понял — ты хочешь длинной померяться? Так сразу и говори
Нужно разобрать угил.
Re[26]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 17:36
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>Здравствуйте, gandjustas, Вы писали:


NBN>>>C++ очень универсальный язык Он позволяет писать так как тебе нужно. В частности обеспечить все гарантии по чему хочешь, чем я, кстати, на днях воспользовался.

G>>Я вот тут на днях написал на C# библиотеку для работы с конечными автоматами. Она генерирует в рантайме код автомата по описанию, а потом использует его.
G>>На C++ такое получится?

NBN>Я тут на днях написал программку которая сейчас находится топе5 продаж.

Продажи к свойствамя языка никакого отношения не имеют.

NBN>P.S.

NBN>Я не понял — ты хочешь длинной померяться? Так сразу и говори
Не хочу меряться, хочу показать что на С++ далеко не все можно сделать с трудозатратами сравнимыми с управляемым языком.
Re: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 16.03.09 17:42
Оценка:
Здравствуйте, niellune, Вы писали:

N>Здравствуйте! Нужен ваш совет))

N>Дело в том что мне нравится язык C++ и меня интересует есть ли сейчас возможность устроиться куда-нибудь на начальную позицию?
N>В каких областях сейчас применяется C++?

Везде, куда ни кинь, просто где-то чаще, где-то реже. И положение ещё долго не изменится, хотя история похорон C++ насчитывает едва ли не больше времени, чем история его развиия.

N>Может легче сначала пойти на С#, а потом перейти на С++ или сразу искать вакансии С++

N>Просто мне кажется, что объем знаний С++ требуется гораздо больший, а хочется работать и набираться опыта..

Тут дело вот в чём: на C/C++ так или иначе реализовано практически всё, с чем ты работаешь, от Web-серверов до компиляторов. Но это не означает, что заняв вакансию C++-разработчика тебе понадобится весь тот же багаж знаний, который нужен, скажем, разработчику компилятора. И следовательно, это не означает, что эти самые знания у тебя появятся по ходу работы: работа на С++ тоже может оказаться унылой и монотонной. Больше того, тебе могут запретить использовать даже какие-то аспекты C++ (встречается и такая альтернативная одарённость).

N>У меня есть опыт работы на php, причем не только web, а еще что-то вроде создания системы документооборота)

N>Но php мне уже мало и он мне порядком надоел, хочется развиваться дальше.

Развиваться — куда?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[9]: Работа - с чего начать: С++ или С#?
От: alsemm Россия  
Дата: 16.03.09 17:55
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>Ага, а в задачу входит создание красивого, быстрого и кроссплатформенного кода и софта — это решаемо _только_ на С++. Даже ущербный С с этим не спрвится.

Любая встравиваемая real-life JVM — это только C.
Телефонный софт (OS, стандартные приложения) — только C.

Алексей
Re[21]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 16.03.09 18: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]: Работа - с чего начать: С++ или С#?
От: alsemm Россия  
Дата: 16.03.09 18:09
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>Здравствуйте, COFF, Вы писали:


COF>>Именно, стали продавать писюки с макос. Называются imac и ibook Их доля хотя сравнительно невелика, но постоянно растет. Маки стали продавать в обычных компьютерных магазинах типа Кея в Питере, раньше такого не было.


BZ>и конечно, в этом виноват C#, а не таланты Джобса

Талантами Джобса Apple сидел на PowerPC пока не стало 100% ясно, что если так будет продолжаться, то они совсем рынок потеряют.
Так что талант тут может и не причем, может просто в этот раз M$ слажал.

Алексей
Re[28]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 18:24
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>Здравствуйте, gandjustas, Вы писали:


NBN>>>Я тут на днях написал программку которая сейчас находится топе5 продаж.

G>>Продажи к свойствамя языка никакого отношения не имеют.
NBN>Имеют достаточно прямые. На яве и шарпе нельзя написать качественный продукт удовлетворяющий требованиям
Черт, а я писал, наверное не так что-то делал.
Re[21]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 18:27
Оценка:
Здравствуйте, hattab, Вы писали:

H>Здравствуйте, gandjustas, Вы писали:


G>>>GC не собирает память пока это никому не мешает, как только заполнится первое поколение — сразу же уберет, а то что не успел удбрать — сложит в другое полколение.

G>>>Вот так и с дворником — пока мусор никому не мешает, он его убирать не будет, перед тем как кому-то он сможет помешать — сразу же уберет.

H>Я вчера решил помониторить сборку xmlrpc для .Net (http://www.xml-rpc.net/). В общем, на каждый вызов метода через XML-RPC (метод принимает два параметра и возвращает бинарник на ~200Kb) происходит 3 вызова сборщика мусора (мониторил ProcessExplorer'ом). Я на перформанс даже тестировать не стал...


Сборка мусора иногда происходит и что?
Re[24]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 18: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 18:34
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>>Продажи к свойствамя языка никакого отношения не имеют.

NBN>>Имеют достаточно прямые. На яве и шарпе нельзя написать качественный продукт удовлетворяющий требованиям
G>Черт, а я писал, наверное не так что-то делал.

Ты всё время забываешь про такую штуку как требования
Нужно разобрать угил.
Re[22]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 16.03.09 18:42
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>>>Вот так и с дворником — пока мусор никому не мешает, он его убирать не будет, перед тем как кому-то он сможет помешать — сразу же уберет.


H>>Я вчера решил помониторить сборку xmlrpc для .Net (http://www.xml-rpc.net/). В общем, на каждый вызов метода через XML-RPC (метод принимает два параметра и возвращает бинарник на ~200Kb) происходит 3 вызова сборщика мусора (мониторил ProcessExplorer'ом). Я на перформанс даже тестировать не стал...


G>Сборка мусора иногда происходит и что?


3 раза на один вызов это иногда? Несколько последовательных вызовов сразу задирают тактовую частоту с 600 до 1700, при том, что при аналогичных действиях из нативного клиента частота поднимается максимум до 800. Тут нужно пояснить, что вся тяжелая работа (линейный скаллинг картинки) делается в нативном сервере (он запущен локально), клиентская часть лишь формирует запрос и получает ответ т.е. ее работа минимальна.
Re[24]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 16.03.09 18:54
Оценка:
Здравствуйте, hattab, Вы писали:

H>О-о-о! Их есть у меня Это чудо называется Creative Docs .NET. После запуска, без открытого документа, мило кушает 192 метра + виртуалки в районе 180 (по показаниям ProcessExplorer'a). Скорость работы с документом тоже потрясная: при скроллинге сперва прокручиваются линейки, а потом, неспешно, за ними ползет содержимое документа. Терпения хватает только на посмотреть. PM 1.7 512Mb NVidia GeForceFX Go5200.

Creative Docs .Net словно на бете WPF делали — жуткие шрифты какие-то
И всё же там не 192 и даже с открытым документом:
Re[30]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 18:55
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>Здравствуйте, gandjustas, Вы писали:


G>>>>Продажи к свойствамя языка никакого отношения не имеют.

NBN>>>Имеют достаточно прямые. На яве и шарпе нельзя написать качественный продукт удовлетворяющий требованиям
G>>Черт, а я писал, наверное не так что-то делал.

NBN>Ты всё время забываешь про такую штуку как требования

Я про требования ни разу не забывал.
Re[23]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 16.03.09 18:57
Оценка:
Здравствуйте, hattab, Вы писали:

H>3 раза на один вызов это иногда? Несколько последовательных вызовов сразу задирают тактовую частоту с 600 до 1700, при том, что при аналогичных действиях из нативного клиента частота поднимается максимум до 800. Тут нужно пояснить, что вся тяжелая работа (линейный скаллинг картинки) делается в нативном сервере (он запущен локально), клиентская часть лишь формирует запрос и получает ответ т.е. ее работа минимальна.

Ну мало ли что там делает это один вызов. Ты не на число запусков сборщика смотри, а на общий перформанс. При этом я ничего не обещаю, просто хочу сказать, что не стоит так сильно заморачиваться почему происходит вызов GC. В конце концов тот же rpc-xml может это сам явно делать по каким-то своим умозаключениям. У меня вот в WPF'ной проге, окна иной раз не собираются по 10-20 минут. Можно ли быть уверенным, что моя прога в сто раз быстрее твоей?
Re[25]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 16.03.09 18: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]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 16.03.09 19:05
Оценка:
Здравствуйте, hattab, Вы писали:

H>У меня отложилось 192, я пробовал, когда его упомянули в теме о продуктах МС.

Я, кстати, обратил внимание, что подобное было при первом запуске. Отодрал не 192, около 112 болтался.
Но все последующие запуски держались в районе 70-80 после всяких прокруток и зумов сэмпловых документов.
Re[24]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 16.03.09 19: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 19:06
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Почему это? На C++ в среднем надо написать больше кода для получения того же функционала, значит больше трудозатраты, значит увеличивается делитель в формуле, а следовательно уменьшается качество.


Странные мотивы движут вами писать подобный бред.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[24]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 16.03.09 19: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[22]: Работа - с чего начать: С++ или С#?
От: BulatZiganshin  
Дата: 16.03.09 20:42
Оценка:
Здравствуйте, COFF, Вы писали:

BZ>>я их и решаю на C++. когда это необходимо. а остальное пишу на хаскеле. учитывая, что >90% кода не нуждается в ассемблерной эффективности, писать всё на С++ — это всё равно что всюду таскать с собой ружьё на случай нападения медведя из ЕР


COF>Вообще, изначально вопрос стоял так — стоит ли учить C++ или C#? Я так понимаю, что все-таки C++?


я ему ответил — смотря что делать собираешься. если готов лет 5 ходить в подмастерьях и затем заниматься какими-то узконишевыми вещами — можно рискнуть
Люди, я люблю вас! Будьте бдительны!!!
Re[24]: Работа - с чего начать: С++ или С#?
От: BulatZiganshin  
Дата: 16.03.09 20:43
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>C++ очень универсальный язык Он позволяет писать так как тебе нужно. В частности обеспечить все гарантии по чему хочешь, чем я, кстати, на днях воспользовался.


асм ещё универсальней. подумай, почему с 80-х годов им перестали пользоваться
Люди, я люблю вас! Будьте бдительны!!!
Re[21]: Работа - с чего начать: С++ или С#?
От: BulatZiganshin  
Дата: 16.03.09 20:53
Оценка:
Здравствуйте, minorlogic, Вы писали:

M>Здравствуйте, gandjustas, Вы писали:


G>>Такая ситуация существует и на практике. Множественные операции выделения-освобождения памяти происходят гораздо бытсрее в коде на .NET, чем в коде на C++.


M>Большая часть "выделения-освобождения памяти" на С++ не затрачивает никаких ресурсов, как может быть быстрее ?


потому, что malloc/free на каждый глобальный объект может быть медленней, чем последовательное выделение памяти и затем gc, который за один раз собирает весь мусор
Люди, я люблю вас! Будьте бдительны!!!
Re[25]: Работа - с чего начать: С++ или С#?
От: BulatZiganshin  
Дата: 16.03.09 20:55
Оценка:
Здравствуйте, hattab, Вы писали:

H>Большое количество вызовов GC это прямой урон перформансу, он же не просто так дергается, он собирает чего-то. К тому же счетчик %Time In GC совсем не нулевой, да еще и на таком коротком отрезке времени (чему я был сильно удивлен). Я сейчас не говорю о каких-то цифрах, я об общем поведении.


а причём тут короткий отрезок? малые gc достаточно равномерно по ходу выполнения распределены, если бы большие gc с такой счастотой выделялись, то >90% времени только на них бы уходило
Люди, я люблю вас! Будьте бдительны!!!
Re[23]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 16.03.09 20: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 21:05
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

H>>Большое количество вызовов GC это прямой урон перформансу, он же не просто так дергается, он собирает чего-то. К тому же счетчик %Time In GC совсем не нулевой, да еще и на таком коротком отрезке времени (чему я был сильно удивлен). Я сейчас не говорю о каких-то цифрах, я об общем поведении.


BZ>а причём тут короткий отрезок? малые gc достаточно равномерно по ходу выполнения распределены, если бы большие gc с такой счастотой выделялись, то >90% времени только на них бы уходило


Я о коротком отрезке к тому говорю, что МС описывает счетчик %Time In GC не, как среднюю величину за отрезок времени, а с момента последнего цикла GC, коих за кратковременный вызов 3 штуки.
Re[24]: Работа - с чего начать: С++ или С#?
От: BulatZiganshin  
Дата: 16.03.09 21:12
Оценка:
Здравствуйте, hattab, Вы писали:

BZ>>ага. и как можно устранить дефрагментацию памяти, а не просто в description это вписать — не подскажешь?


H>Собственно, я уже написал -- пулами.


это не гарантирует пропадания фрагментации. представь выделение миллиона 7-байтовых ячеек, освобожддение каждой второй из них и затем выделение миллиона 8-байтовых
Люди, я люблю вас! Будьте бдительны!!!
Re[25]: Работа - с чего начать: С++ или С#?
От: BulatZiganshin  
Дата: 16.03.09 21:16
Оценка:
Здравствуйте, gandjustas, Вы писали:

D>>>>Кто сказал, что GC ГАРАНТИРУЕТ выделение памяти не более чем три раза больше чем в данный момент используется системой?

G>>>Этого не гарантирует даже аллокатор ОС, в принципе этого не может гарантировать никто.

M>>Рекомендую ознакомиться с алгоритмами алокаторов более подробно.

G>А с ними достаточно подробно знаком, сам писал аллокаторы на ассемблере и несколько разных для С++

вот то-то и оно, что C++ почитай описание GC. ведь это очень просто — если последний большой GC нашёл 10 мб реальных объектов, то следующий GC можно сделать когда общий объём распределённой памяти будет 20 мб или даже 11 мб. это и даёт гарантии
Люди, я люблю вас! Будьте бдительны!!!
Re[25]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 16.03.09 21:33
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>сравни с


BZ>main = interact (unlines . sort . filter ((>3) . length . words) . lines)


выглядит неплохо , но к сожалению в мой production это не пролезет
People write code, programming languages don't.
Re[26]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 22:24
Оценка:
Здравствуйте, hattab, Вы писали:

H>Здравствуйте, BulatZiganshin, Вы писали:


BZ>>>>ага. и как можно устранить дефрагментацию памяти, а не просто в description это вписать — не подскажешь?


H>>>Собственно, я уже написал -- пулами.


BZ>>это не гарантирует пропадания фрагментации. представь выделение миллиона 7-байтовых ячеек, освобожддение каждой второй из них и затем выделение миллиона 8-байтовых


H>Это слишком просто Пул это блок определенного размера, в котором выделение памяти происходит так же порциями определенного размера: 12, 20, 28, 36, 44 (шаг меняется с увеличением размеров на которые ориентирован пул), есть еще и отдельные пулы для средних и крупных блоков. В твоем примере будут выделяться блоки из первого пула по 12 байт, и ни какой фрагментации. Эффективность использования пулов можно контролировать тем самым трекингом, и в случае необходимости внести коррективы в алгоритм. Надо заметить, что лично мне ни разу не приходилось затачивать алгоритмы под работу менеджера памяти.


Только общее увеличение потребления памяти получим.
А кто-то еще ругается что .NET много памяти жрет.
Re[22]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 16.03.09 22:51
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

M>>Большая часть "выделения-освобождения памяти" на С++ не затрачивает никаких ресурсов, как может быть быстрее ?


BZ>потому, что malloc/free на каждый глобальный объект может быть медленней, чем последовательное выделение памяти и затем gc, который за один раз собирает весь мусор


В сумме — может быть и быстрее, у GC есть свои плюсы
Однако сам должен понимать, что управляемых аллокаторов есть свои многочисленные плюсы, в том числе равномерность работы
Нужно разобрать угил.
Re[26]: Работа - с чего начать: С++ или С#?
От: BulatZiganshin  
Дата: 16.03.09 22:59
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>>>C++ очень универсальный язык Он позволяет писать так как тебе нужно. В частности обеспечить все гарантии по чему хочешь, чем я, кстати, на днях воспользовался.


BZ>>асм ещё универсальней. подумай, почему с 80-х годов им перестали пользоваться


NBN>Потому что есть не менее эффективный С++, а что?


не было в 80-х годах ни C++, ни эффективных оптимизирующих компиляторов. тем не менее полчему-то люди обходились пессимизирующими С-компляторами. садись, опять двойка
Люди, я люблю вас! Будьте бдительны!!!
Re[27]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 16.03.09 23:11
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

NBN>>Потому что есть не менее эффективный С++, а что?


BZ>не было в 80-х годах ни C++, ни эффективных оптимизирующих компиляторов. тем не менее полчему-то люди обходились пессимизирующими С-компляторами. садись, опять двойка


Ты сам ответил совсем неполно, а следовательно не верно
Нужно разобрать угил.
Re[28]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 23:23
Оценка:
Здравствуйте, hattab, Вы писали:

H>Здравствуйте, gandjustas, Вы писали:


H>>>Это слишком просто Пул это блок определенного размера, в котором выделение памяти происходит так же порциями определенного размера: 12, 20, 28, 36, 44 (шаг меняется с увеличением размеров на которые ориентирован пул), есть еще и отдельные пулы для средних и крупных блоков. В твоем примере будут выделяться блоки из первого пула по 12 байт, и ни какой фрагментации. Эффективность использования пулов можно контролировать тем самым трекингом, и в случае необходимости внести коррективы в алгоритм. Надо заметить, что лично мне ни разу не приходилось затачивать алгоритмы под работу менеджера памяти.


G>>Только общее увеличение потребления памяти получим.

G>>А кто-то еще ругается что .NET много памяти жрет.

H>Конечно получим, куда же мы денемся. Только оверхед сильно меньше, чем у .Net . Это я про общий случай, и по реальным приложениям это видно.

И по какой причине он станет "сильно меньше"?
Re[30]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 16.03.09 23: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 05:59
Оценка:
Понятно , значит незнание.

Задумайтесь почему программы на С++ быстрее с таким плохим аллокатором?
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[31]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 17.03.09 07:23
Оценка:
Здравствуйте, gandjustas, Вы писали:

H>>Ты сейчас о чем говоришь, об общих случаях или о той синтетике с 7-8 байтовыми ячейками? Если о синтетике, то там выделение нафиг не нужно, достаточно динамического массива с размером ячейки в 8 байт. Получим при этом оверхед в 1 байт на ячейку. Если же ты об общих случаях, то тут существующий софт тому доказательство.


G>Почитай как работает выделение памяти в .NET. Там нету никакого оверхеда.


Рихтер:

У каждого объекта есть пара таких полей: указатель на
таблицу методов и SyncBlocklndex. В 32-разрядной системе для каждого из них
требуется 32 бита, что увеличивает размер каждого объекта на 8 байтов, а в
64-разрядной системе каждое поле занимает 64 бита, добавляя к каждому объекту
по 16 байт


Это оверхед не аллокатора, а организации данных. Но тем не менее.

G>Оверхед может возникнуть из-за того что создается больше обеъктов, но это уже зависит от программы, а не от аллокатора.


На практике мы видим, что .Net софт потребляет больше нежели нативный со всеми его пулами. Это позволяет говорить о том, что вся инфраструктура управления памятью в .Net имеет больший оверхед нежели в нативном софте.
Re[11]: Работа - с чего начать: С++ или С#?
От: alsemm Россия  
Дата: 17.03.09 07:29
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>Здравствуйте, alsemm, Вы писали:


NBN>>>Ага, а в задачу входит создание красивого, быстрого и кроссплатформенного кода и софта — это решаемо _только_ на С++. Даже ущербный С с этим не спрвится.

A>>Любая встравиваемая real-life JVM — это только C.
A>>Телефонный софт (OS, стандартные приложения) — только C.

NBN>Это далеко не так, хотя этой нечисти там действительно хватает

"Далеко не так" что?
Что JVM написан на C? А на чем их еще писать, если их надо запихивать черте куда, где вменяемого C++ компилятора и не стояло?
Телефонный софт — это как правило море legacy кода, древнего как, даже и не знаю что
Symbian — формально там конечно есть C++, но какой-то он на вид своеобразный.

Алексей
Re[32]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 17.03.09 07:50
Оценка:
Здравствуйте, hattab, Вы писали:

H>Рихтер:

H>У каждого объекта есть пара таких полей: указатель на
H>таблицу методов и SyncBlocklndex. В 32-разрядной системе для каждого из них
H>требуется 32 бита, что увеличивает размер каждого объекта на 8 байтов, а в
H>64-разрядной системе каждое поле занимает 64 бита, добавляя к каждому объекту
H>по 16 байт

H>Это оверхед не аллокатора, а организации данных. Но тем не менее.

Ну без указателя на таблицу виртуальных методов врядли какой ООП язык обходится и в той же Делфи, если мне не изменяет память, функция New неявно по смещению сохраняет еще и объем выделенной памяти.
Re[33]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 17.03.09 07:58
Оценка:
Здравствуйте, MxKazan, Вы писали:

H>>Рихтер:

H>>У каждого объекта есть пара таких полей: указатель на
H>>таблицу методов и SyncBlocklndex. В 32-разрядной системе для каждого из них
H>>требуется 32 бита, что увеличивает размер каждого объекта на 8 байтов, а в
H>>64-разрядной системе каждое поле занимает 64 бита, добавляя к каждому объекту
H>>по 16 байт

H>>Это оверхед не аллокатора, а организации данных. Но тем не менее.

MK>Ну без указателя на таблицу виртуальных методов врядли какой ООП язык обходится и в той же Делфи, если мне не изменяет память, функция New неявно по смещению сохраняет еще и объем выделенной памяти.

Я ведь не сказал, что в Delphi нет оверхеда Это была фраза на отсутствие оверхеда в .Net. В Delphi еще можно вспомнить о выравнивании, пусть и отключаемом, которое тоже увеличивает оверхед но положительно влияет на производительность. Но не смотря на все это, мы имеем то о чем я уже написал
Re[25]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 17.03.09 09:53
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>это не гарантирует пропадания фрагментации. представь выделение миллиона 7-байтовых ячеек, освобожддение каждой второй из них и затем выделение миллиона 8-байтовых

Напиши сам себе пример и выведи на карту расположение фактически выделенных тебе ячеек.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[25]: Работа - с чего начать: С++ или С#?
От: alvo Россия http://www.alvosoft.com/itlife
Дата: 17.03.09 09: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 10:38
Оценка:
Здравствуйте, alsemm, Вы писали:

A>Что JVM написан на C? А на чем их еще писать, если их надо запихивать черте куда, где вменяемого C++ компилятора и не стояло?

A>Телефонный софт — это как правило море legacy кода, древнего как, даже и не знаю что
A>Symbian — формально там конечно есть C++, но какой-то он на вид своеобразный.

Я писал под брю и его потомков — WIZE и PDK, там было много старого кода на С и не меньше нового на С++, в частности вся гуйня.
Нужно разобрать угил.
Re[29]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 17.03.09 10:47
Оценка:
Здравствуйте, CreatorCray, Вы писали:

NBN>>На яве и шарпе нельзя написать качественный продукт удовлетворяющий требованиям

CC>Зависит от требований.
Нашим требованиям — создать лучший продукт. Я бы с радостью на шарпе писал, но он, как и ява недостаточно кроссплатформенны и слишком тормозявы на девайсах, для нашей достаточно сложной программы. Каждого из этих факторов достаточно, чтобы от них отказаться в пользу С++.
Нужно разобрать угил.
Re[22]: Работа - с чего начать: С++ или С#?
От: sergey2b ЮАР  
Дата: 17.03.09 10:55
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Написал я как то монитор выделяемой произвольным процессом памяти. Дабы значицца, посмотреть что там да как происходит в закулисье.

CC>И что я только не гонял сей прогой, но пресловутой фрагментации увидеть так и не удалось.
CC>HeapAlloc, который уже давным давно используется вместо говноаллокатора ранних версий CRT, отлично справлялся сам.

Скажите пожалуйста на каких компиляторах вы тестировали и если это VS начиная с какой версии компилятор/crt нет проблем с фрагментацией.

Спасибо
Re[24]: Работа - с чего начать: С++ или С#?
От: sergey2b ЮАР  
Дата: 17.03.09 11:50
Оценка:
Здравствуйте, NikeByNike, Вы писали:

S>>Скажите пожалуйста на каких компиляторах вы тестировали и если это VS начиная с какой версии компилятор/crt нет проблем с фрагментацией.


NBN>У шестёрки в первых версиях был галимый аллокатор, точно помню...


Большое спасибо за ответ.

Может вы вкурсе, они его исправили в sp5 or sp6 или нет?
Re[34]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.03.09 12: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]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.03.09 12: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 12:07
Оценка:
Здравствуйте, sergey2b, Вы писали:

NBN>>У шестёрки в первых версиях был галимый аллокатор, точно помню...


S>Большое спасибо за ответ.


S>Может вы вкурсе, они его исправили в sp5 or sp6 или нет?


Да. В первых версиях деаллокация работала с линейной скоростью, а к SP5 — уже нет.
Нужно разобрать угил.
Re[25]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.03.09 12:10
Оценка:
Здравствуйте, minorlogic, Вы писали:

M>Понятно , значит незнание.


M>Задумайтесь почему программы на С++ быстрее с таким плохим аллокатором?


С чего вы взяли что программы на C++ всегда быстрее работают?
Я например видел много обратных примеров.
Re[24]: Работа - с чего начать: С++ или С#?
От: sergey2b ЮАР  
Дата: 17.03.09 12: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[26]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 17.03.09 12: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[35]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 17.03.09 12:54
Оценка:
Здравствуйте, gandjustas, Вы писали:

H>>>>Это оверхед не аллокатора, а организации данных. Но тем не менее.

MK>>>Ну без указателя на таблицу виртуальных методов врядли какой ООП язык обходится и в той же Делфи, если мне не изменяет память, функция New неявно по смещению сохраняет еще и объем выделенной памяти.

H>>Я ведь не сказал, что в Delphi нет оверхеда Это была фраза на отсутствие оверхеда в .Net. В Delphi еще можно вспомнить о выравнивании, пусть и отключаемом, которое тоже увеличивает оверхед но положительно влияет на производительность. Но не смотря на все это, мы имеем то о чем я уже написал

G>В Delphi вообще много чего есть, например аналог сборшика мусора, который работает для строк и динамических массивов.

Это далеко не аналог сборщика мусора Это автоматическая расстановка финализирующих блоков

G>Причем эта фигня глючит при интеропе с DLL.


Это сведения из далекого прошлого С 2005/2006 FastMM, используемый по умолчанию, обеспечивает свободный шаринг.
Re[25]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 17.03.09 12:58
Оценка:
Здравствуйте, sergey2b, Вы писали:

CC>>Т.е. вся аллокация в ОС начиная от W2k производится через HeapAlloc, который является WinAPI функцией и к С/С++ уже никакого отношения не имеет.

CC>>А судя по картам аллокаций, которые я наблюдал на реальных приложениях фрагментации не наблюдается.

S>Большое спасибо за ваш ответ.

Носи на здоровье.
Если не забуду то приволоку завтра тул, который карту строит — поиграешься, посмотришь.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[26]: Работа - с чего начать: С++ или С#?
От: alsemm Россия  
Дата: 17.03.09 13: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]: Работа - с чего начать: С++ или С#?
От: alsemm Россия  
Дата: 17.03.09 14:40
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>Здравствуйте, alsemm, Вы писали:


A>>Что JVM написан на C? А на чем их еще писать, если их надо запихивать черте куда, где вменяемого C++ компилятора и не стояло?

A>>Телефонный софт — это как правило море legacy кода, древнего как, даже и не знаю что
A>>Symbian — формально там конечно есть C++, но какой-то он на вид своеобразный.

NBN>Я писал под брю и его потомков — WIZE и PDK, там было много старого кода на С и не меньше нового на С++, в частности вся гуйня.

BREW — та еще радость: watch dog timer, ручная многозадачность, сказка, блин

Алексей
Re[35]: Работа - с чего начать: С++ или С#?
От: mrTwister Россия  
Дата: 17.03.09 15:33
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>В Delphi вообще много чего есть, например аналог сборшика мусора, который работает для строк и динамических массивов.

G>Причем эта фигня глючит при интеропе с DLL.

А там разве не подсчет ссылок?
лэт ми спик фром май харт
Re[6]: Работа - с чего начать: С++ или С#?
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 17.03.09 16:00
Оценка:
Здравствуйте, shrecher, Вы писали:

S> Где гарантия, что следующие 2-3 года не выдет новая версия радикально изменяющая предыдущие? Ведь MS — монополист и может навязывать любые условия.


Есть такая гарантия. Они за 3 года новую студию не напишут.
... << RSDN@Home 1.2.0 alpha 4 rev. 1138 on Windows Vista 6.1.7000.0>>
AVK Blog
Re[34]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.03.09 16: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]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.03.09 16: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 16:55
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Хороший топик для потенциальных работодателей. Участников холивара можно смело на должности выше сеньора не брать


зря написал. теперь последует ещё на 28 страниц холивар о правильных работодателях
Люди, я люблю вас! Будьте бдительны!!!
Re[28]: Работа - с чего начать: С++ или С#?
От: alsemm Россия  
Дата: 17.03.09 17:29
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>В предыдущем посте вы обвиняли что нету средств контроля GC, вам показали средства, а теперь говорите что он должен незаметно работать. Вы определитесь уже.

В этом не противоречия. Либо GC должен быть так хорош, чтобы в не надо было ничего "подкручивать", либо, если, им все-таки можно и нужно управлять должны быть для этого адекватные средства.
...
G>>>Странные у вас представления о CG.
A>>Расскажите как должно быть по вашему.
G>Меня устраивает так как сейчас есть. И я быб лы очень недоволен если бы работа GC давала постоянный тормозняк.
Постоянный предсказуемый тормозняк это лучше чем неожиданный непредсказуемый тормозняк

G>>>Кстати описанный вами GC вполне можно сделать на C++, почему до сих пор не применяют?

A>>В С++ GC не нужен.
G>Я много раз видел как пишут аллокаторы, которые по свойствам похожы на GC, значит нужны всетаки.
...
G>Вот и пытаюсь разрушить стериотипы.
G>Ведь можно написать эффективную программу на Java/.NET, но некоторые почему-то свято верят что можно писать толко на С++.
Живая эффективная программа на Java/.NET быстро порушит стереотипы. Где такую можно посмотреть?

Алексей
Re[13]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 17.03.09 18:49
Оценка:
Здравствуйте, gandjustas, Вы писали:

ГВ>>Меняется не столько сам C++, сколько его реализация. Не одно и то же, однако.

G>Ну и в чем различия?

Скажи пожалуйста, ты правда не понимаешь разницу между стандартом ANSI и реализацией стандарта тем или иным компилятором? Или просто хочешь развести меня на очередной виток объяснения очевидных вещей?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[15]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 17.03.09 21:33
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Меня интересует чем отличается "сам язык" (не его стандарт) от реализации этого языка в конкретном компиляторе.


Неправильно ставишь вопрос: "сам язык" от стандарта не отличается. Стандарт (в виде документа) для того и нужен, вообще говоря, чтобы зафиксировать определение языка.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[36]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 17.03.09 22:00
Оценка:
Здравствуйте, mrTwister, Вы писали:

T>А там разве не подсчет ссылок?


Он самый.
Re[35]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 17.03.09 22: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 22:10
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Возьмите Paint.NET — на многих задачах работает быстрее фотошопа, но это разные весовые категории.


Дельфовый PhotoFiltre разрывает Paint.NET на куски

G>Можете посмотреть Windows Live Writer, но анлогов вообще нет


Дельфовый BlogJet... Ну ты понял

G>Autocad 2009 можно сравнить только с предыдущей версией, но бессмысленно это.


Особенно если учесть, что там только риббон нуждается в двухсотметровом довесочке
Re[37]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 17.03.09 22: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 23: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 23: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
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[27]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 17.03.09 23:44
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Тут: http://creatorcray.googlepages.com/MemMon.rar


CC>Гуй в нем делался на скорую руку бо сильно нужны были результаты замеров.

CC>вкратце основные кнопы:
CC>+- — зум
CC>курсорные стрелки + ins/del — перемещение.
CC>В силу особенностей перехвата работает не до абсолютной смерти проги, отключается несколько раньше, но позже завершения main.

Чего-то не запустилась у меня Вообще по тихому, ни сообщений, ни записей в евентлоге. Windows XP SP3.
Re[28]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 18.03.09 00:47
Оценка:
Здравствуйте, hattab, Вы писали:

H>Чего-то не запустилась у меня Вообще по тихому, ни сообщений, ни записей в евентлоге. Windows XP SP3.

Небось Athlon?

Собиралась ICC 11 с опцией /QxSSE3. Я то могу вырубить, но там либа используется, которая уже с SSE3 собрана.
Попробую перевыложить.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[28]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 18.03.09 00: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 чем без него.
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[33]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.03.09 04: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[29]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 18.03.09 09:57
Оценка:
Здравствуйте, CreatorCray, Вы писали:

H>>Чего-то не запустилась у меня Вообще по тихому, ни сообщений, ни записей в евентлоге. Windows XP SP3.

CC>Небось Athlon?

Pentium M 735 (1.7) (Dothan)
Re[29]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 18.03.09 09:57
Оценка:
Здравствуйте, CreatorCray, Вы писали:

H>>Чего-то не запустилась у меня Вообще по тихому, ни сообщений, ни записей в евентлоге. Windows XP SP3.

CC>Там просто если ICC считает что твой проц не поддерживает нужные фичи то он делает printf и exit
CC>Прога не консольная, посему в консоль ничего не пишет, а printf этот происходит до winmain.
CC>Выложил собранные без оптимизаций вообще. Вообще удивлён что сей сурс собрался с первой попытки и даже без ворнингов, как никак года три ему наверное, и кинут был на полпути.
CC>У меня самый старый комп что могу найти это P4 820, на нем работало и в первом случае.

Новая работает
Re[30]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 18.03.09 11: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>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[30]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 18.03.09 11: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>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[40]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.03.09 13: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]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.03.09 14:13
Оценка:
Здравствуйте, hattab, Вы писали:

G>>>>При выделении с помощью magic wand изображение мелькает и начинает тормозить интерфейс, в отличие от Paint.NET

H>>>Это ты вероятно с Paint.Net спутал В нем действительно, при выделении (Magic Wand) изображения на картинке 400x647 начинаются тормоза: загрузка CPU в районе 100%, частота подскакивает до своего максимума в 1700MHz. PhotoFiltre при этом спокойно работает на минимуме в 600MHz не нагружая процессор выше 8%.
G>>Я проверил на одинаковых картинках, жрет процессор одинаково, но у PhotoFiltre при этом торможит интерфейс

H>Я тоже проверил на одинаковых, и результат изложил выше, а посему позволь тебе не поверить.

У тебя видимо плохая карма что все .NET программы тормозят.
Re[36]: Работа - с чего начать: С++ или С#?
От: kuj  
Дата: 18.03.09 14: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 14:43
Оценка:
Здравствуйте, Игoрь, Вы писали:

G>>3)Выделение памяти таким алгоритмом создет фрагментацию памяти, то есть остаются блоки невыделенной памяти малых размеров.

И>Угу, только проблема фрагментации кучи есть и в .net, кстати, как и мемори лики.
Тока мемлики там другие, не такие как в unmanaged. Ну и фрагментация скорее pin-анием вызывается. Обычную кучу GC утаптывать умеет.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 18.03.09 15: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[26]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 18.03.09 17:13
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>>9)такое распределение памяти увелиичивает cache-locality

И>>стандартные аллокаторы windows тоже оптимизированы на это дело
G>Рад за аллокатор Windows, только зачем он нужен если можно выделять память смещением указателя. Быстрее просто нечего придумать.

Можно придумать — стек С++ — у него нет сборки мусора
Нужно разобрать угил.
Re[27]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.03.09 17:41
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>Здравствуйте, gandjustas, Вы писали:


G>>>>9)такое распределение памяти увелиичивает cache-locality

И>>>стандартные аллокаторы windows тоже оптимизированы на это дело
G>>Рад за аллокатор Windows, только зачем он нужен если можно выделять память смещением указателя. Быстрее просто нечего придумать.

NBN>Можно придумать — стек С++ — у него нет сборки мусора


Только многие высокоуровневые конструкции станут недоступны.
Re[27]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.03.09 17:45
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>Здравствуйте, gandjustas, Вы писали:


И>>>c) на мелких объектах свет клином не сошелся — можно и без них обойтись в критичной к скорости части;

G>>Я тоже говорю что критичные по скорости вещи надо писать на C, а некритичные, на более высокоуровневых языках. C++ в таком раскладе места нет.

NBN>Такое предложение заставляет заподозрить недостаточное владение С++.

У меня кроме владения С++ есть еще и владение другими языками.
Re[30]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 18.03.09 18:33
Оценка:
Здравствуйте, gandjustas, Вы писали:

NBN>>Я недавно прикинул, что забыл 7 языков (базик, паскаль (7&Delphi), асм, питон, луа, шарп и яву), на которых немного писал в практических целях.

G>Если вы на этих языках "писали немного в практических целях", то можно сказать что и не знали их.
Гы

NBN>>Тем не менее, человек владеющий С++ врядли будет предлагать использовать С, когда можно использовать С++.

G>Поправочка: знающий С++ и незнающий других, более выкосоуровневых языков.
G>Я сам считал C++ венцом творения программистской мысли пока не знал ничего другого.
Я хорошо помню их возможности

G>Много ли у вас кода на C++ (с классами, шаблонами, полиморфизмом, эксепшенами и динамической памятью) в тех местах где нужно высокое быстродействие?

Я использую то что нужно там где оно нужно
А чем мешают шаблоны и классы там где нужна высокая производительность?

NBN>>А если вы владеете С++ недостаточно — то исчезает последняя почва для спора С++ — язык сложный и филиграный и использовать его в качестве лома действительно не стоит.

G>Вообще сложность C++ такова что его использовать почти нигде не стоит.
Ага, кроме как для игр, приложений затрагивающих эмбеддед сложнее простейших контроллеров, кроссплатформенных приложений которым требуется шустрая работа.

Кстати, если ты считаешь, что можно писать приложения для WM, которые будут жить в конкурентной среде на шарпе — ты сильно ошибаешься

Кстати, люди ратующие за С и шарп неоднократно обвиняли меня, что я пишу на С++ в шарп стиле
Нужно разобрать угил.
Re[31]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.03.09 19:00
Оценка:
Здравствуйте, NikeByNike, Вы писали:

G>>Много ли у вас кода на C++ (с классами, шаблонами, полиморфизмом, эксепшенами и динамической памятью) в тех местах где нужно высокое быстродействие?

NBN>Я использую то что нужно там где оно нужно
Это не ответ на вопрос.

NBN>А чем мешают шаблоны и классы там где нужна высокая производительность?

Вряд ли они там мешают, но не помогают — это точно.

NBN>>>А если вы владеете С++ недостаточно — то исчезает последняя почва для спора С++ — язык сложный и филиграный и использовать его в качестве лома действительно не стоит.

G>>Вообще сложность C++ такова что его использовать почти нигде не стоит.
NBN>Ага, кроме как для игр, приложений затрагивающих эмбеддед сложнее простейших контроллеров, кроссплатформенных приложений которым требуется шустрая работа.
С играми отдельная песня — там сейчас во всю идет перенос тяжелых вычислений на аппартаные ускорители. А все части игры, которе тяжелых вычислений не касаются вполне можно писать на высокоуровневых средствах. Кроме того .NET не такой медленный как тут некоторые пытаются показать.

Про ембед не знаю, сильно с ним не сталкивался.

А многим ли приложениям на десктопе нужная шустрая работа?
У меня таких только два — браузер и среда разработки. Причем опера (которая на C++) тормозит гораздо сильнее чем VS (которая на треть из managed модулей).

NBN>Кстати, если ты считаешь, что можно писать приложения для WM, которые будут жить в конкурентной среде на шарпе — ты сильно ошибаешься

Почему?

NBN>Кстати, люди ратующие за С и шарп неоднократно обвиняли меня, что я пишу на С++ в шарп стиле

Да вы, батенька, извращенец.
Кстати Linq у вас уже появился?
Re[33]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.03.09 19: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[36]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 18.03.09 23: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[27]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 18.03.09 23: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[41]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 18.03.09 23: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[28]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 18.03.09 23:50
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>В .Net ведь стек тоже вполне себе используется. И если объект выгоднее размещать в стеке, то можно его просто сделать структурой. Единственное, можно попенять на то, что уже готовые конструкции, такие как, например массив, фиг запихнешь в стек. Т.е. я к чему. Связку "стек + хип" вполне можно и в C# юзать, если почти все эти классы сам пишешь. И, чесс говоря, есть ощущение, что это преимущество C++ высосано из пальца.


Я тоже сильной применимости не вижу, но вещь определенно не плохая.

И>>В unamanaged коде лик легко обнаружить и избавиться от него, в managed его получить гораздо сложнее, но и найти и избавиться сложнее. мемлики в С++ — страшилки для детей. Я вот сейчас глянул в С++ проект — на 10МБ кода 16 явных вызовов new.

MK>Если бы в unmanaged всё было так легко, про GC ничего бы не говорили. Теоретически в unmanaged утечку можно вообще не обнаружить. В managed такие вещи решаются на ура при помощи профайлеров.

Нативный FastMM умеет рапортовать об утечках (с адресами, с типами). Плюс есть различные тулы для контроля.
Re[31]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 18.03.09 23:52
Оценка:
Здравствуйте, CreatorCray, Вы писали:

H>>Новая работает

CC>Надо будет как нить ее доработать.
CC>К примеру она не "видит" аллокации из динамически подгружаемых DLL, только из статики. Не будет работать с упакованными/защищенными EXE и т.п. Как нить сделать чтобы можно было отловить откуда была выделена/освобождена память (StackWalk), правда глядя на объем данных, получаемый с простой программки (~200Mb) становится понятно что stackwalk на каждый alloc/free — это будет черезчур.
CC>Плюс почему то к моменту выгрузки DLL не на все аллокации приходит освобождение, причем часто строго на определенном блоке заканчивается работа.

Ага, заметил некоторые траблы с использованием. Но вообще, интересная софтинка
Re[44]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 19.03.09 00:33
Оценка:
Здравствуйте, hattab, Вы писали:

H>Во времена DOS'а, когда только начали появляться графические и псевдографические интерфейсы, а "мыши" были большой редкостью, в одном журнале прочитал интервью с каким-то разработчиком. Он отвечая на вопрос журналиста об использовании "мышки" в качестве единственного средства управления, ответил: "Если вы делаете "мышь" единственным средством управления, будьте готовы обеспечить им ваших пользователей". Вот, когда мне говорят о дешевых гигабайтах, я всегда эту фразу вспоминаю Не нужно забывать, что техника бывает очень разной, и часто бывает так, что купив ноутбук с распаянными на плате 512 метрами, заапгрейдить его можно только выкинув и купив новый.

Я, конечно, согласен, но только в определенной степени. Речь все-таки не о гигабайтах и 512 мегов сейчас уже редкость. Managed проги хоть и требуют памяти больше нативных, но все же не по 200 мегов на каждую фенечку. Тот же Creative Docs не отобрал у меня больше 120 Мб и при открытии всех сэмплов в поставке (я их покрутил/повертел/поперетаскивал).
Re[12]: Что за статистика-то такая волшебная? ;)
От: Erop Россия  
Дата: 19.03.09 00:43
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Статистика показывает что плотность ошибок на строку кода от языка не зависит. При этом для реализации како-то функционала на С++ требуется написть когда больше (иногда гораздо больше), поэтому багов на единицу функционала для С++ получается больше.


Что за статистика такая? Я вот, например, не верю, что число ошибок на строчку BF и MODULA 2 будет одинаковым...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[42]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 00: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]: Что за статистика-то такая волшебная? ;)
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 00:51
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, gandjustas, Вы писали:


G>>Статистика показывает что плотность ошибок на строку кода от языка не зависит. При этом для реализации како-то функционала на С++ требуется написть когда больше (иногда гораздо больше), поэтому багов на единицу функционала для С++ получается больше.


E>Что за статистика такая? Я вот, например, не верю, что число ошибок на строчку BF и MODULA 2 будет одинаковым...

Когда на BF хотябы один большой проект сделают тогда поговорим.

Эта статистика собирается для крупных проектов. Мелочи могут давать перекосы в разные стороны в зависимости от подходящих библиотек.
Re[17]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 19.03.09 01:09
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>Вот тут я тебя полностью понимаю. И я тоже против огульного охаивания .Net и его приравнивания к VB.


А зря ты так про VB. На VB целая индустрия держалась. Софта который нужен "уже вчера", и "послезавтра точно устареет"...
Кстати, сейчас эту нужную и важную нишу занял .Net...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[46]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 19.03.09 01: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 01:17
Оценка:
Здравствуйте, gandjustas, Вы писали:

M>>Большая часть "выделения-освобождения памяти" на С++ не затрачивает никаких ресурсов, как может быть быстрее ?

G>
G>Да ну?
G>Вым наверное стоит изучить как аллокаторы и GC работают.

А вам, что такое "автоматическая переменная" в C++
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[19]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 19.03.09 01:21
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>GC не собирает память пока это никому не мешает, как только заполнится первое поколение — сразу же уберет, а то что не успел удбрать — сложит в другое полколение.


Это всего лишь эффект масштаба. Для С++ схему владения надо продумывать уже для довольно небольших задач (для совсем простых можно ничего не освобождать, да и всё), а для GC для задач побольше. Зато управлять GC посложнее...

Есть некоторая ниша по сложности задачи, где GC работает хорошо, но и только...

Кстати, в C++ наработано много всяких подходов к этому месту, так что обычно можно быть по крайней мере не хуже в области массовых аллокаций, чем GC...
Например, можно на каждый запрос на каждой нити создавать отдельный стековый аллокатор, и на нём ничего не освобождать, а только выделять. По окончании запроса данные, которые нужно сохранить мигрируют на обычный аллокатор, а стековый грохается целиком в начальное состояние, и мы снова готовы обработать запрос. В целом для очень многих задач такая стратегия аллокации НАМНОГО ЭФФЕКТИВНЕЕ GC...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[23]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 01:27
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, gandjustas, Вы писали:


M>>>Большая часть "выделения-освобождения памяти" на С++ не затрачивает никаких ресурсов, как может быть быстрее ?

G>>
G>>Да ну?
G>>Вым наверное стоит изучить как аллокаторы и GC работают.

E>А вам, что такое "автоматическая переменная" в C++

Не поверите, такие же переменные есть в .NET
Re[27]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 19.03.09 01:35
Оценка:
Здравствуйте, CreatorCray, Вы писали:

G>>Эта наивная реализация во многих местах осталась и по сей день.

CC>Это проблемы тех мест а не С++ в целом.

+1
Кроме того, там конечно завались просто классных и быстрых GC...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[44]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 01: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[38]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 19.03.09 01:53
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>Так это получается, что все в форумах NET и NET GUI просто дебилы какие-то, выбирающие инструмент по рекламкам.

MK>Считай это как призыв не юзать подобные аргументы. Все же в деле заняты, а не в бирюльках.

Ну просто на PC обычно можно забить на прожорливость GUI, например...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[34]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 19.03.09 01:56
Оценка:
Здравствуйте, kuj, Вы писали:

kuj>Разработчика, который пытается использовать ВСЮ память надо бить сильно по рукам.


Я знаю задачи, в которых это правильная стратегия...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[35]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 19.03.09 02:20
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Только этот оверхед не влияет на производительность.

Но только на платформах, где памяти очень много...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[30]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 19.03.09 03:14
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Можете посмотреть <...> Windows Media Center — аналогично.

А чему там тормозить в принципе?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[36]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 19.03.09 03:16
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>У тебя видимо плохая карма что все .NET программы тормозят.

Да нет, просто у него на ноуте 512 метров RAM...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[24]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 19.03.09 03:21
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Не поверите, такие же переменные есть в .NET

Почему не поверю? Я советовал ведь не "проверить, есть ли в С++ автоматические переменные", а изучить, что это такое...

Скажем на С++ можно делать так
Автор: Erop
Дата: 27.02.07
...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[21]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 19.03.09 03: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 03:41
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Эта статистика собирается для крупных проектов. Мелочи могут давать перекосы в разные стороны в зависимости от подходящих библиотек.


А подробности будут?
Я всё равно не верю, что, Ada и С++ имеют одинаковый показатель.
Кроме того, на чём же тогда статистика для С# собрана, если только КРУПНЫЕ проекты идут в счёт? На сингулярити, что ли?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[5]: Работа - с чего начать: С++ или С#?
От: _d_m_  
Дата: 19.03.09 05:27
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>Здравствуйте, shrecher, Вы писали:


S>>Для разработчика это очень рискованно связываться с C#, т.к. требуется тащить .net runtime и привяжешь себя к Виндам.

MK>Вот-вот! Только представь, каждый день на работу и обратно таскать эти два тяжелых чемоданчика с .net runtime. Там по 20 кг в каждом! Порог вхождения очень высок

Осталость только домыслить "привяжешь себя к виндам" — привязал себя веревкой к оконной раме.
Re[15]: Что за статистика-то такая волшебная? ;)
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 07:34
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, gandjustas, Вы писали:


G>>Эта статистика собирается для крупных проектов. Мелочи могут давать перекосы в разные стороны в зависимости от подходящих библиотек.


E>А подробности будут?

E>Я всё равно не верю, что, Ada и С++ имеют одинаковый показатель.
Можете не верить.

E>Кроме того, на чём же тогда статистика для С# собрана, если только КРУПНЫЕ проекты идут в счёт? На сингулярити, что ли?

На C# очень много крупных проектов, с миллионами строк кода.
Re[36]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 07:41
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, gandjustas, Вы писали:


G>>Только этот оверхед не влияет на производительность.

E>Но только на платформах, где памяти очень много...
Это вы себя пытаетесь убедить?
Посмотрел то что я писал, для программы показатель COMMITED памяти редко переваливает за 300 метров, это очень много?
Re[22]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 07: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]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 19.03.09 07:51
Оценка:
Здравствуйте, _d_m_, Вы писали:

MK>>Вот-вот! Только представь, каждый день на работу и обратно таскать эти два тяжелых чемоданчика с .net runtime. Там по 20 кг в каждом! Порог вхождения очень высок

___>Осталость только домыслить "привяжешь себя к виндам" — привязал себя веревкой к оконной раме.
И придется ее тоже с собой таскать, на спине, в рюкзачке!
Re[23]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 19.03.09 08:29
Оценка:
Здравствуйте, gandjustas, Вы писали:

g> E>Есть уровень сложности задачи, например текстовый редактор, где GC работает очень хорошо, но с ростом сложности задачи ситуация портится. Скажем при написании базы данных тебе уже придётся очень крепко думать про то как же у тебя данные будут с GC взаимодействовать...


g> Ты так говоришь как-будто все каждый день пишут базы данных.


g> Кстати о базах: есть couchDB, которая написана на Erlang, который является одним из самых медленных языков. И ниче, всем кто пользуется — нравится.


Слющай, зачэм couchdb? В поставку Эрланга входит тоже неплохая база — mnesia. Написана тоже на Эрланге

Не говоря уж о двух хороших, быстырых веб-серверах

g> E>Ну и поспотришь ты профайлером, и что дальше будет?

g> Исправлю код там где торомзит.

"Сделай так, чтобы вещь заработала. Потом, если необходимо, сделай так, чтобы вещь работала быстро" © философия разработчиков Эрланга

И это вполне правильный подход
avalon 1.0b rev 146


dmitriid.comGitHubLinkedIn
Re[29]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 08: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[38]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 09:02
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, gandjustas, Вы писали:


G>>Посмотрел то что я писал, для программы показатель COMMITED памяти редко переваливает за 300 метров, это очень много?

E>От программы зависит. Для тачки с 512 Мб на борту это больше половины доступного RAM...
E>Так что, если прога -- это часы, например, то привет...
А я говорил что прога — это часы?
У меня прога занимается расчетами и их визуализацией.

E>Но если проге реально нужно МНОГО памяти, то всё ещё хуже. Особенно если её надо много, но небольшими блоками. Вот в моих С++ прогах часто заканчивается адресное пространство 32-й винды, например. И всякие прототипы на С# показывают радикально худшую производительность/эффективность по памяти

И что за программа которой столько памяти нужно?
Re[24]: "С#" =def= "ХиндиС"? :)))
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 09: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 09:13
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>>Посмотрел то что я писал, для программы показатель COMMITED памяти редко переваливает за 300 метров, это очень много?

G>У меня прога занимается расчетами и их визуализацией.
А для расчётов много памяти надо? Так сказать вне связи с языком? И как эта память выделяется? Большими кусками (ну там пять матриц по 50 метров) или небольшими объектами?

G>И что за программа которой столько памяти нужно?

Ну вот последняя моя прога, которой не хватало адресного пространства, занималась тем, что среди миллионов картинок пыталась найти кучки похожих, таким образом, что каждая картинка была бы хоть как-то похожа на какую-нибудь кучку, и при этом кучек было не много. Например тысяча...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[8]: Работа - с чего начать: С++ или С#?
От: _d_m_  
Дата: 19.03.09 09: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[40]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 09:20
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, gandjustas, Вы писали:


G>>>>Посмотрел то что я писал, для программы показатель COMMITED памяти редко переваливает за 300 метров, это очень много?

G>>У меня прога занимается расчетами и их визуализацией.
E>А для расчётов много памяти надо? Так сказать вне связи с языком? И как эта память выделяется? Большими кусками (ну там пять матриц по 50 метров) или небольшими объектами?
Для расчетов — большими, матрицы примерно 100х100.
Для визуализации — куча маленьких.
Я вообще говоря не следил за выделением памяти в этой программе.

G>>И что за программа которой столько памяти нужно?

E>Ну вот последняя моя прога, которой не хватало адресного пространства, занималась тем, что среди миллионов картинок пыталась найти кучки похожих, таким образом, что каждая картинка была бы хоть как-то похожа на какую-нибудь кучку, и при этом кучек было не много. Например тысяча...
Ну если все держать в памяти, то неудивительно что она закончилась.
Re[30]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 19.03.09 09:21
Оценка:
Здравствуйте, gandjustas, Вы писали:

NBN>>Тем не менее, человек владеющий С++ врядли будет предлагать использовать С, когда можно использовать С++.

G>Поправочка: знающий С++ и незнающий других, более выкосоуровневых языков.
Тогда по твоей логике такой предлагать С вместо С++ уж точно не будет. Так что не отнекивайся.

G>Много ли у вас кода на C++ (с классами, шаблонами, полиморфизмом, эксепшенами и динамической памятью) в тех местах где нужно высокое быстродействие?

С классами, шаблонами — навалом. На производительности результата они не сказываются.
Полиморфизм через виртуальное наследование и исключения — в HPC используются только тогда, когда без них ну совсем ВАЩЕ никак.
Динамическая память используется, но выделение/освобождение из критического кода выносятся по максимуму — всё выделяется заранее.

NBN>>А если вы владеете С++ недостаточно — то исчезает последняя почва для спора С++ — язык сложный и филиграный и использовать его в качестве лома действительно не стоит.

G>Вообще сложность C++ такова что его использовать почти нигде не стоит.
Это всего лишь твоё мнение.
Хочешь реальных сложностей — на асме под мелкие контроллеры попиши.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[32]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 19.03.09 09: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>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[34]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 19.03.09 09:22
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>>Вряд ли они там мешают, но не помогают — это точно.

NBN>>Помогают — облегчают рефакторинг и читаемость кода.
G>Шаблоны улучшают читаемость только в самых простых случаях.
Шаблоны это не только александреску-стайл. С ними можно писать читабельный и удобный код.

NBN>>А в шарпе уже появилась возможность с пользой использовать всю доступную память? (а то в текущем проекте пришлось поизвращаться и залазить в узкие рамки

G>Я нормально выделял на шарпе под 2 гига. Вроде как 32-битная ось больше выделить не позволит.
до 64Gb позволит. Больше современный 32бит проц адресовать не может.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[25]: "С#" =def= "ХиндиС"? :)))
От: Erop Россия  
Дата: 19.03.09 09:23
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Вот есть приложение на .NET — www.microsoft.com, там какая сложность?

Средняя сложность. Это если без БД, а только приложение само.

G>couchDB занимался один человек, у него времени на оптимизацию GC уж точно не было.

Ну так там есть ещё одна база данных -- его родная... Нужно было просто повторить архитектуру в целом...

G>Вопросы архитектуры ортогональны вопросам быстройдействия.

Неправда. Предложи задачу, я предложу тебе архитектуру, которая не сможет обеспечить большого быстродействия

G>И опять приходим к тому что для того случая где нужно быстродействие используем C, а для всего остального высокоуровневые средства.

Если тебе из С и С++ больше нравится первый, то никто не мешает тебе использовать первый. Один из существенных его недостатков тот, что на нём реально писать только то, где очень нужно быстродействие, а на плюсах можно и остальное.
Но это совсем другая тема. Как делать выбор между С и С++ более или менее понятно. Если есть компиллер, и ты не Тольвальдс или его подчинённый, то С++

G>>>Ну на управляемых языках это так, на неупрвляемых — зависит от разработчика.

E>>Нет. Не зависит. Плохой разработчик потратит на реализацию сложного проекта бесконечное время Причём на ЛЮБОМ ЯЗЫКЕ...
G>А кто говорит о плохом разработчике?
Ну там повыше выделено три твоих слова...

Про индусов и ХиндиС, я так понимаю, возражений нет? Вот и славненько!
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[31]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 09:35
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, gandjustas, Вы писали:


И>>>>>>>Достаточно в таск менеджере взглянуть на кол-во используемой памяти .net прогой и С++ с эквивалентной функциональностью, чтобы понять, что ты гонишь.

G>>>>>>Кроме того цифра в таск менеждере ни о чем не говорит, просто сверните приложение, будете удивлены.
CC>>>>>Ты не в тот таскманагер смотришь, тебе уже сообщали.
G>>>>Пор цифирке в таскабаре — не ко мне, они меня мало интересуют. Я производидтельность профайлером меряю.
CC>>>И давно ты "кол-во используемой памяти" меряешь профайлером?
G>>А я где-то говрил что меряю количество памяти?
G>>Я же написал что эти цифирки не интересуют. Если нужно быстродействие, то меряю его профайлером.
CC>Ты придуриваешься или всегда такой? Специально оставил поквоченную всю историю вопроса. Речь шла про (см. выше) память. Перечитай внимательно.
Читай выделенное.

CC>Беда то в том, что входной порог в managed сильно низкий, и обложенный памперсами нуб может спокойно говнокодить не получая при этом за свой говнокод по рукам — работает же, и не падает.

Это же замечательно. Больше людей счастливы.

И>>>>>>>а) есть стэк;

G>>>>>>Стек заставляет копировать объекты чаще, чем нужно.
CC>>>>>С чего бы вдруг?
G>>>>Передача объектов по значению вызывает копирование.
CC>>>Обьясни поподробнее какая связь между аллокацией на стеке и передачей объектов по значению?
G>>А возвращение объектов при выделении памяти на стеке как происходит?
CC>Если объект сколь либо серьезных размеров возвращают то никто его на стеке в здравом уме не станет размещать.
Это каких размеров?

CC>Кстати в случае если все таки размещают то ситуацию несколько спасает RVO.

И сыылку спасают при передаче параметров.
Только все это знания, не нужные для решения задачи.
Re[31]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 09:39
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, gandjustas, Вы писали:


NBN>>>Тем не менее, человек владеющий С++ врядли будет предлагать использовать С, когда можно использовать С++.

G>>Поправочка: знающий С++ и незнающий других, более выкосоуровневых языков.
CC>Тогда по твоей логике такой предлагать С вместо С++ уж точно не будет. Так что не отнекивайся.
Так я и предлагаю C для performance-critical кода. В остальных случаях более выкокоуровневые языку рулят.

G>>Много ли у вас кода на C++ (с классами, шаблонами, полиморфизмом, эксепшенами и динамической памятью) в тех местах где нужно высокое быстродействие?

CC>С классами, шаблонами — навалом. На производительности результата они не сказываются.
CC>Полиморфизм через виртуальное наследование и исключения — в HPC используются только тогда, когда без них ну совсем ВАЩЕ никак.
CC>Динамическая память используется, но выделение/освобождение из критического кода выносятся по максимуму — всё выделяется заранее.
Ну так у вас и получается C_с_клссами.

NBN>>>А если вы владеете С++ недостаточно — то исчезает последняя почва для спора С++ — язык сложный и филиграный и использовать его в качестве лома действительно не стоит.

G>>Вообще сложность C++ такова что его использовать почти нигде не стоит.
CC> Это всего лишь твоё мнение.
Да

CC>Хочешь реальных сложностей — на асме под мелкие контроллеры попиши.

Писал, там сложности другого порядка, в основном связанные с ограничениями железа и слабой выразительностью самого ассемблера.

Сложность C++ связана с кучей тонкостей, которые надо знать, помноженными на количество способов отстрелить себе ноги.
Re[33]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 09:45
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, gandjustas, Вы писали:


NBN>>>А чем мешают шаблоны и классы там где нужна высокая производительность?

G>>Вряд ли они там мешают, но не помогают — это точно.
CC>Код писать с ними удобнее чем в С стиле.
А на более выкогоуровневых языках еще удобнее. Вы с этим спортить будете?

NBN>>>Ага, кроме как для игр, приложений затрагивающих эмбеддед сложнее простейших контроллеров, кроссплатформенных приложений которым требуется шустрая работа.

G>>С играми отдельная песня — там сейчас во всю идет перенос тяжелых вычислений на аппартаные ускорители.
CC>Да ты еще и геймдевелопер я смотрю И спец по переносу расчетов на GPU.
CC>Ну-ка расскажи что там и как в геймдеве, а я послушаю.
Не, я с геймдевом сталкивался всего пару раз и обра раза впечатления неочень.

G>>Кроме того .NET не такой медленный как тут некоторые пытаются показать.

CC>Уже всё всем давно показали: Cellfactor
Думаете нету тормозящего говна, написанного на любом языке?

G>>А многим ли приложениям на десктопе нужная шустрая работа?

CC>По мне так всем.


Я сталкивался с пользователями, которые вполне нормально мирились с генерацияей отчета на 1с (которая на С++) которая длилась двадцать минут.

Проснись, далеко не всем нужна запредельная производительность. А на практике получается что скорость работы программы упирается в диск\сеть и прочее.
Только в игрушках может исключение.
Re[35]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 09:47
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, gandjustas, Вы писали:


G>>>>Вряд ли они там мешают, но не помогают — это точно.

NBN>>>Помогают — облегчают рефакторинг и читаемость кода.
G>>Шаблоны улучшают читаемость только в самых простых случаях.
CC>Шаблоны это не только александреску-стайл. С ними можно писать читабельный и удобный код.
Ну я и говорю — с самых простых случаях, но в таких случаях C++ сильно уступает по выразительности C#.

NBN>>>А в шарпе уже появилась возможность с пользой использовать всю доступную память? (а то в текущем проекте пришлось поизвращаться и залазить в узкие рамки

G>>Я нормально выделял на шарпе под 2 гига. Вроде как 32-битная ось больше выделить не позволит.
CC>до 64Gb позволит. Больше современный 32бит проц адресовать не может.
Каким образом имея 32-битный указатель можно обратить за пределы четырех гигов?
Возможно сама ось может увидеть много памяти, а для 32-битного приложения 4 гига — предел.
Re[26]: "С#" =def= "ХиндиС"? :)))
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 09:49
Оценка:
Здравствуйте, Erop, Вы писали:

G>>Вопросы архитектуры ортогональны вопросам быстройдействия.

E>Неправда. Предложи задачу, я предложу тебе архитектуру, которая не сможет обеспечить большого быстродействия
Я в этом даже не смоневаюсь.

G>>И опять приходим к тому что для того случая где нужно быстродействие используем C, а для всего остального высокоуровневые средства.

E>Если тебе из С и С++ больше нравится первый, то никто не мешает тебе использовать первый. Один из существенных его недостатков тот, что на нём реально писать только то, где очень нужно быстродействие, а на плюсах можно и остальное.
Все остальное можно писать на более высокоуровневых языках.
Re[41]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 19.03.09 09:54
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Для расчетов — большими, матрицы примерно 100х100.

G>Для визуализации — куча маленьких.
Ну, а их много было-то?
Я так понимаю, что объекты по 80 кил уже в GC не играют, так что эти большие куски надо, по чеснаку, из 300 метров вычесть. Остальное -- оверхед на визуализаци....
G>Я вообще говоря не следил за выделением памяти в этой программе.
Ну сколько больших матриц-то было в курсе? Тысяча? Больше? Меньше? Если сильно меньше 1000, то максимум на матрицы 50 -- метров. Ещё пусть 50 -- это то, что нужно на визуализацию в нормальной проге. Это с бо-о-о-ольшим, я тебе скажу, запасом. Ну а 200 метров -- это то, что ты не следил/либо то, что GC съел от большой эффективности

G>Ну если все держать в памяти, то неудивительно что она закончилась.

Ну цель-то была не в памяти держать, или там не в памяти, а результат получить
Но там не совсем в памяти было, на самом деле, но это уже подробности. Результат, тем не менее получить удалось
Прототип на C# не смог ничего... ;(
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[18]: Что за статистика-то такая волшебная? ;)
От: Erop Россия  
Дата: 19.03.09 09:58
Оценка:
Здравствуйте, Mamut, Вы писали:

E>> Кстати, миллион строк кода -- это не очень крупный проект...


M>Смотря, на чем писать


Я так понимаю, что на ХиндиСе имелось в виду...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[19]: Что за статистика-то такая волшебная? ;)
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 10: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]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 10: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 10:09
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Все остальное можно писать на более высокоуровневых языках.

Конечно можно. Но тлько если оно в вычислительном смысле ничего не делает. Максимум -- тупо считает по формулам.
Если есть сложная логика + много памяти + нужна скорость и компактность, то ХиндиС -- плохой выбор!
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[19]: Что за статистика-то такая волшебная? ;)
От: Mamut Швеция http://dmitriid.com
Дата: 19.03.09 10:10
Оценка:
E> А языки отличаются намного сильнее, чем разные стили кодирования в С++

Известно, что количество ошибок на 100 строчек кода в среднем одинаково, вне зависимости от языка программирования. Вывод — надо писать на языке программирования, который помогает мысли выражать более коротко и ясно
avalon 1.0b rev 146


dmitriid.comGitHubLinkedIn
Re[34]: Работа - с чего начать: С++ или С#?
От: _d_m_  
Дата: 19.03.09 10:10
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Я сталкивался с пользователями, которые вполне нормально мирились с генерацияей отчета на 1с (которая на С++) которая длилась двадцать минут.


1С — УГ.
Я знаю программу — Супермаг 2000, написанную на Оракле, отчет пару часов для небольшого магазина. И причем здесь Оракл? Хреновую программу можно написать на любом языке.
Re[43]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 19.03.09 10:15
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Это вообще к чему?

Я хочу понять насколько 300 метров было скушано по делу.
Для сравнения последний FR, при распознавании всех азиатских языков одновременно жрёт столько же...

G>На всех машинах, где програ запускалась она работала отлично, ни тормозняков, ни дерганя, ни своппинга.

То, что ты память не считаешь, а докупаешь, если не хватает, я уже понял. К сожалению в коробочном софте такой подход не совсем канает...

E>>Прототип на C# не смог ничего... ;(

G>Это говорит только о вашем неумении писать на C.
Правда? Если ты хочешь меня в чём-то убедить, то не надо делать утверждений, в которых ты заведомо менее компетентен, чем я (скажем оценивать моё умение писать на чём бы то ни было)
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[28]: "С#" =def= "ХиндиС"? :)))
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 10:16
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, gandjustas, Вы писали:


G>>Все остальное можно писать на более высокоуровневых языках.

E>Конечно можно. Но тлько если оно в вычислительном смысле ничего не делает. Максимум -- тупо считает по формулам.
Какой-то левый полет мысли.

E>Если есть сложная логика + много памяти + нужна скорость и компактность, то ХиндиС -- плохой выбор!

Покажите мне программу где все это нужно одновременно.
Re[20]: Что за статистика-то такая волшебная? ;)
От: Erop Россия  
Дата: 19.03.09 10:17
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Вам наверное стоит почитать как считают строки.

1) Я хотел бы узнать методу, которая использовалась в ТОМ САМОМ ИССЛЕДОВАНИИИ
2) Вам, наверное, стоит попробовать понять, что же вам пытаются донести собеседники...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[45]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 19.03.09 10:17
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>Я, конечно, согласен, но только в определенной степени. Речь все-таки не о гигабайтах и 512 мегов сейчас уже редкость. Managed проги хоть и требуют памяти больше нативных, но все же не по 200 мегов на каждую фенечку. Тот же Creative Docs не отобрал у меня больше 120 Мб и при открытии всех сэмплов в поставке (я их покрутил/повертел/поперетаскивал).


Да блин у меня на 2 гигах открыты две VS2008 с решарпером и всё, 2 гига кончились. А проект запустить так вообще 2.7 гига коммит и веник в свопе надрывается.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[20]: Что за статистика-то такая волшебная? ;)
От: Erop Россия  
Дата: 19.03.09 10:17
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Известно, что количество ошибок на 100 строчек кода в среднем одинаково, вне зависимости от языка программирования. Вывод — надо писать на языке программирования, который помогает мысли выражать более коротко и ясно


Откуда это известно-то? Я в это не верю, например!
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[44]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 10:20
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, gandjustas, Вы писали:


G>>Это вообще к чему?

E>Я хочу понять насколько 300 метров было скушано по делу.
А вам не все равно?
Мне например все равно.
Прога не тормозила нигде.

E>Для сравнения последний FR, при распознавании всех азиатских языков одновременно жрёт столько же...

Я очень рад за него.

G>>На всех машинах, где програ запускалась она работала отлично, ни тормозняков, ни дерганя, ни своппинга.

E>То, что ты память не считаешь, а докупаешь, если не хватает, я уже понял. К сожалению в коробочном софте такой подход не совсем канает...
Не думаю что в коробочном софте мне придется решать матричные уравнения с размерносятми 100 на 100.
Re[36]: Работа - с чего начать: С++ или С#?
От: _d_m_  
Дата: 19.03.09 10: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 10:27
Оценка:
Здравствуйте, gandjustas, Вы писали:

E>>Для сравнения последний FR, при распознавании всех азиатских языков одновременно жрёт столько же...

G>Я очень рад за него.

Фишка в том, что он с ещё кучкой прог может одновременно работать. А если всё писать на ХиндиС, то на каждую прогну придётся по компу покупать ;(

G>Не думаю что в коробочном софте мне придется решать матричные уравнения с размерносятми 100 на 100.

Что-то как-то конкретики мало. То ты приводишь как типичный пример эту решалку уравнений, то потом, оказывается, что это маргинальщина какая-то.
Кстати, так сколько матриц-то 100х100 было нужно ОДНОВРЕМЕННО? Или у тебя уже настолько C# головного мозга, что ты это и прикинуть даже не можешь?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[46]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 10: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 10: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 11:13
Оценка:
Здравствуйте, gandjustas, Вы писали:

E>>Фишка в том, что он с ещё кучкой прог может одновременно работать. А если всё писать на ХиндиС, то на каждую прогу придётся по компу покупать ;(

G>Большенство прог, будучи неактивнми вообще не мешают други, при необходимости скидываясь в своп чуть ли не полностью.
G>Причем это не зависит от языка разработки.

Ты читать умеешь? Выделенное перечти, пожалуйста...

E>>Кстати, так сколько матриц-то 100х100 было нужно ОДНОВРЕМЕННО?

G>30-40 висят в памяти для истории, сколько временных создавалось при расчетах лень считать.
Это так сложно?
Считать не обязательно достаточно прикинуть с точностью до порядка.
50 — 100 -- нормальная оценка?

Если да, то это всего-навсего 8 метров... Так что твоя прока тупо профукала 250 из 300, то есть более 80% использованной памяти!!!

G>Вот как раз отбрасывание многих незначящих для решения деталей и дают преимущество высокоуровневым языкам.

Ну ты уже настолько абстрагировался, что и СЕЙЧАС прикинуть не можешь, что ли?
Тогда у тебя без шуток C#-головного-мозга, IMHO
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[46]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 19.03.09 11:42
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Да блин у меня на 2 гигах открыты две VS2008 с решарпером и всё, 2 гига кончились. А проект запустить так вообще 2.7 гига коммит и веник в свопе надрывается.

Да правда чтоль. На работе 2 Гига. Бывает и по три Студии открываю. И ничего не тормозит вообще. Про проект ничо не скажу, оно в зачаточном состоянии.
Re[36]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 19.03.09 12:34
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>>>>Вряд ли они там мешают, но не помогают — это точно.

NBN>>>>Помогают — облегчают рефакторинг и читаемость кода.
G>>>Шаблоны улучшают читаемость только в самых простых случаях.
CC>>Шаблоны это не только александреску-стайл. С ними можно писать читабельный и удобный код.
G>Ну я и говорю — с самых простых случаях, но в таких случаях C++ сильно уступает по выразительности C#.
Откуда в сравнении С и С++ взялся С#? Мсье софист со стажем?

G>Каким образом имея 32-битный указатель можно обратить за пределы четырех гигов?

G>Возможно сама ось может увидеть много памяти, а для 32-битного приложения 4 гига — предел.
ОС это точно такой же код, как и в приложении, только привилегий побольше.
А добраться можно например через сегментные регистры и LDT, но это уже нестандартное приложение получится.
Так что технически это осуществимо.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[36]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 19.03.09 12:34
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Который невозможно сопровождать и отлаживать?

С неалександреску шаблонами — читабельный и отлаживабельный
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[32]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 19.03.09 12:34
Оценка:
Здравствуйте, gandjustas, Вы писали:

И>>>>>>>>Достаточно в таск менеджере взглянуть на кол-во используемой памяти .net прогой и С++ с эквивалентной функциональностью, чтобы понять, что ты гонишь.

G>>>>>>>Кроме того цифра в таск менеждере ни о чем не говорит, просто сверните приложение, будете удивлены.
CC>>>>>>Ты не в тот таскманагер смотришь, тебе уже сообщали.
G>>>>>Пор цифирке в таскабаре — не ко мне, они меня мало интересуют. Я производидтельность профайлером меряю.
CC>>>>И давно ты "кол-во используемой памяти" меряешь профайлером?
G>>>А я где-то говрил что меряю количество памяти?
G>>>Я же написал что эти цифирки не интересуют. Если нужно быстродействие, то меряю его профайлером.
CC>>Ты придуриваешься или всегда такой? Специально оставил поквоченную всю историю вопроса. Речь шла про (см. выше) память. Перечитай внимательно.
G>Читай выделенное.
Да да, тебе про потребляемую память, а ты "а мне до сиреневой звезды, у меня профайлер!".

G>Это же замечательно. Больше людей счастливы.

Особенно те, которым потом этот говнокод отдают на переделку.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[29]: "С#" =def= "ХиндиС"? :)))
От: CreatorCray  
Дата: 19.03.09 12:34
Оценка:
Здравствуйте, gandjustas, Вы писали:

E>>Если есть сложная логика + много памяти + нужна скорость и компактность, то ХиндиС -- плохой выбор!

G>Покажите мне программу где все это нужно одновременно.
Алгоритм факторизации MPQS например. Памяти надо тонны, расчетов на месяцы.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[30]: "С#" =def= "ХиндиС"? :)))
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 12:42
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, gandjustas, Вы писали:


E>>>Если есть сложная логика + много памяти + нужна скорость и компактность, то ХиндиС -- плохой выбор!

G>>Покажите мне программу где все это нужно одновременно.
CC>Алгоритм факторизации MPQS например. Памяти надо тонны, расчетов на месяцы.
Угу, и его чаще всего пишут на С, опять С++ остался неудел
Re[37]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 19.03.09 12: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>]


avalon 1.0b rev 146


dmitriid.comGitHubLinkedIn
Re[47]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 19.03.09 12:51
Оценка:
Здравствуйте, MxKazan, Вы писали:

CC>>Да блин у меня на 2 гигах открыты две VS2008 с решарпером и всё, 2 гига кончились. А проект запустить так вообще 2.7 гига коммит и веник в свопе надрывается.

MK>Да правда чтоль. На работе 2 Гига. Бывает и по три Студии открываю. И ничего не тормозит вообще.
MK>Про проект ничо не скажу, оно в зачаточном состоянии.
Проект на шарпе, здоровый, писан когда то американскими индусами.
Стало легче когда решарпер снёс.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[38]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 19.03.09 12:51
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>>Например при ипользовании ФВП с помощью буста затайпдефить все функции не получися.

CC>>Функциональщину на С++ на данный момент я отношу к редкостным извращениям, полагая что если надо функциональщина — лучше взять другой язык.
CC>>Появится поддержка functional из С++0х в компилерах — будем посмотреть.
CC>>А пока это не для С++.
G>То есть всетаки с++ недостаточно выразительный.
В сравнении с С, про который речь в этой ветке?

G>Что и требовалось доказать.

Сам себе придумал, сам себе доказал. Как тебе жить просто, а.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[31]: "С#" =def= "ХиндиС"? :)))
От: CreatorCray  
Дата: 19.03.09 12:58
Оценка:
Здравствуйте, gandjustas, Вы писали:

E>>>>Если есть сложная логика + много памяти + нужна скорость и компактность, то ХиндиС -- плохой выбор!

G>>>Покажите мне программу где все это нужно одновременно.
CC>>Алгоритм факторизации MPQS например. Памяти надо тонны, расчетов на месяцы.
G>Угу, и его чаще всего пишут на С, опять С++ остался неудел
А пацаны то и не знают
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[38]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 19.03.09 12: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>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[39]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 19.03.09 13:02
Оценка:
CC> Вай батыр, какой дурдом!
CC> Меняй компилер, срочно!

Это не решение проблемы
avalon 1.0b rev 146


dmitriid.comGitHubLinkedIn
Re[38]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 19.03.09 13: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]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 19.03.09 13:05
Оценка:
Х> потрачено: ~6 секунд.
Х> вывод: ето даже не попытка ввести в замешательство.

Х> P.S. Рекомендую подключить буст.


Нууу, так нечестно Это должно было быть моим следубщим ходом На самом деле, vector — это вообще так, мелочевка Но ошибки уже впечатляют
avalon 1.0b rev 146


dmitriid.comGitHubLinkedIn
Re[40]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 19.03.09 13:18
Оценка:
Здравствуйте, Mamut, Вы писали:

CC>> Меняй компилер, срочно!

M>Это не решение проблемы
Ну так диагностика об ошибке то куда вменяемее. Проблема я так понял в неразборчивой простыне в случае ошибки.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[27]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 19.03.09 13:21
Оценка:
Здравствуйте, CreatorCray, Вы писали:
G>>Не зачастую, всегда, но GC работает в сотни раз реже, чем выделение-совобождение памяти стандартным аллокатором.
CC>Это как напишешь. В unmanaged в реальном коде где надо performance выделение/освобождение памяти выносят "за скобки" и делают крайне редко.
Ты не поверишь — в managed делают точно так же. К примеру, для интенсивных сокетных операций на старте приложения распределяют буфера, которые впоследствии будут пиниться, чтобы защититься от фрагментации хипа.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[31]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 19.03.09 13:21
Оценка:
Здравствуйте, CreatorCray, Вы писали:
CC>Беда то в том, что входной порог в managed сильно низкий, и обложенный памперсами нуб может спокойно говнокодить не получая при этом за свой говнокод по рукам — работает же, и не падает.
Ничего страшного. На плюсах нуб точно так же может говнокодить. То, что приложение сумело запуститься у нуба на машине, никак не гарантирует того, что оно будет устойчиво работать во всех сценариях.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[40]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 19.03.09 13:38
Оценка:
Здравствуйте, hattab, Вы писали:
G>>Включай мозг: все что требуется от такого "графа" только возможность проверить присуствует ли объект в нем. Это значит что достаточно битовго флага.

H>Давай ты последуешь своему совету и подумаешь, что такое граф и, как с помощью битового флага (а точнее речь идет битовом массиве, как я понимаю) можно определить находжение объекта в куче для последующих манипуляций с оным.

Увы, всё так и есть. Упорство в заблуждениях никого не красит. Никакого "отдельного" графа GC не строит. Он раскрашивает существующий.
Объем памяти, нужный для Register Map, крайне мал.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[49]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 19.03.09 13:59
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Сколько у тебя на компютере программ "одноврменно работают" без твоего участия?

По пять — десять на каждом...

E>>Если да, то это всего-навсего 8 метров... Так что твоя прока тупо профукала 250 из 300, то есть более 80% использованной памяти!!!

G>О ужас, горе мне.
G>А вообще меня это нисколько не волнует.
Я понимаю, что тебя это не волнует. Но те, кого парит эффективность их программ, несколько недовольны таким положением вещей...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[18]: Что за статистика-то такая волшебная? ;)
От: Erop Россия  
Дата: 19.03.09 16:38
Оценка:
Здравствуйте, Sansend, Вы писали:

S>Могу привести пример ediEnterprise ЕРП система для логистики(подробностей не знаю). Штат разработчиков — около 90 человек, полностью написано на C#, тянет на 300-400 человеколет =)


Да, согласен, это уже крупный проект. Интересно, кстати, какое там соотношение между SQL и C#?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[23]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 19.03.09 18:21
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Кстати о базах: есть couchDB, которая написана на Erlang, который является одним из самых медленных языков. И ниче, всем кто пользуется — нравится.


У Borland/CodeGear тоже есть SQL сервер -- BlackFish, на Java и .Net. Я не в курсе, как там с перформансом, но и ежу понятно, что основная нагрузка при работе с БД ложится на дисковую систему, а вовсе не на управляемый код.
Re[38]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 19.03.09 18:21
Оценка:
Здравствуйте, Erop, Вы писали:

G>>Посмотрел то что я писал, для программы показатель COMMITED памяти редко переваливает за 300 метров, это очень много?

E>От программы зависит. Для тачки с 512 Мб на борту это больше половины доступного RAM...
E>Так что, если прога -- это часы, например, то привет...

Более того, из 512, после загрузки системы, занято ~200 Не то чтобы мне было жалко денег (~$170 за 2Gb), просто пока меня реально не припрет покупать не буду, а .Net софт меня не припирает
Re[34]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 19.03.09 18:27
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Я сталкивался с пользователями, которые вполне нормально мирились с генерацияей отчета на 1с (которая на С++) которая длилась двадцать минут.


У меня был контракт с конторой, в которой зарплата расчитывалась 2.5 суток (!) (большая контора). Они тоже считали это нормальным, пока мы не сократили время до 40 минут (переписали с нуля)

G>Проснись, далеко не всем нужна запредельная производительность. А на практике получается что скорость работы программы упирается в диск\сеть и прочее.

G>Только в игрушках может исключение.

Скажи, а во что упирается меню в WLW, отзывчивость которого меня жутко печалит (при установке он прогоняется ngen'ом, так что это не JIT)?
Re[43]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 19.03.09 18:37
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>Хорошо а как быть с программой печати акцизных марок фирмы Атлас написанной на дельфи жрущей 300Мб оперативы, и текущей как дырявое ведро? (Это было года 3 назад).


Странный вопрос... Я разве где-то утверждал, что Delphi или любой другой натив есть решение всех проблем?
Re[41]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 19.03.09 18:45
Оценка:
Здравствуйте, Sinclair, Вы писали:

H>>Давай ты последуешь своему совету и подумаешь, что такое граф и, как с помощью битового флага (а точнее речь идет битовом массиве, как я понимаю) можно определить находжение объекта в куче для последующих манипуляций с оным.

S>Увы, всё так и есть. Упорство в заблуждениях никого не красит. Никакого "отдельного" графа GC не строит. Он раскрашивает существующий.
S>Объем памяти, нужный для Register Map, крайне мал.

Русский перевод Рихтера ввел в заблуждение (я его цитировал) Прозрение пришло в виде другого перевода Рихтера
Re[24]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 18:55
Оценка:
Здравствуйте, hattab, Вы писали:

H>Здравствуйте, gandjustas, Вы писали:


G>>Кстати о базах: есть couchDB, которая написана на Erlang, который является одним из самых медленных языков. И ниче, всем кто пользуется — нравится.


H>У Borland/CodeGear тоже есть SQL сервер -- BlackFish, на Java и .Net. Я не в курсе, как там с перформансом, но и ежу понятно, что основная нагрузка при работе с БД ложится на дисковую систему, а вовсе не на управляемый код.


Там кроме диска еще оооочень много факторов, влияющих на производительность.
Re[47]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 19.03.09 19:09
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Но ты не забывай что GC не требуется проходи по списку на каждое выделение-освобождение.


Это никому не требуется, кроме древних-предревних кучь...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[37]: Кажется я начинаю понимать... ;)
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.03.09 19:30
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, gandjustas, Вы писали:


G>>Незнаю во что у тебя меню упирается, только что проверил — все летает.

E>Ну у тебя всегда всё летает. Это не ново.
E>подумалось мне тут, что не на память-там-шмамять и на камни деньгу тратить надо, чтобы "все летало", а на траву позабористее, что-то типа лайт-версии чёрно-белого плана...

E>Ганджустас! (И как я раньше тайну ника-то не просёк!!!) Будь человеком, отсыпь кораблик?..

Я уже бросил
Re[36]: Работа - с чего начать: С++ или С#?
От: Anton Batenev Россия https://github.com/abbat
Дата: 19.03.09 21:11
Оценка:
Здравствуйте, gandjustas, Вы писали:

g> Каким образом имея 32-битный указатель можно обратить за пределы четырех гигов?

g> Возможно сама ось может увидеть много памяти, а для 32-битного приложения 4 гига — предел.

Ай-ай-ай.
avalon 1.0b rev 168
Re[36]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 19.03.09 23: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[22]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 20.03.09 06:28
Оценка:
Здравствуйте, Erop, Вы писали:
E>Ну и поспотришь ты профайлером, и что дальше будет? Если у тебя проектирования не было, а задача сложная, то будет тормозное г., при этом факт того, что это тормозное г. будет задокументирован профайлером
Я понимаю, головой думать — это тяжелая работа. Ок, специально для тех, кто не представляет себе, что бывает "дальше" после просмотра профайлером, маленькая история вот здесь.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[23]: Работа - с чего начать: С++ или С#?
От: Sheridan Россия  
Дата: 20.03.09 07:03
Оценка:
Sinclair wrote:

> Я понимаю, головой думать — это тяжелая работа. Ок, специально для тех, кто не представляет себе, что бывает "дальше" после просмотра профайлером, маленькая история вот

здесь.
В англицком к примеру я не силен. В трех словах пожалуйста опиши что там происходит. Насколько я понял — чел добился существенного увеличения производительности, или нет?
Posted via RSDN NNTP Server 2.1 beta
Matrix has you...
Re[47]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 20.03.09 07: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 07:24
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>>Кстати о базах: есть couchDB, которая написана на Erlang, который является одним из самых медленных языков. И ниче, всем кто пользуется — нравится.


H>>У Borland/CodeGear тоже есть SQL сервер -- BlackFish, на Java и .Net. Я не в курсе, как там с перформансом, но и ежу понятно, что основная нагрузка при работе с БД ложится на дисковую систему, а вовсе не на управляемый код.

G>
G>Там кроме диска еще оооочень много факторов, влияющих на производительность.

Читаем вдумчиво.
Re[49]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 20.03.09 07:24
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Собиралось 2008 студией, релиз, запуск из проводника.

G>C++ — 562 мсек, C# — 92 мсек.

G>Стоит учесть что каждый проход GC в программе на C# очищает вс первое поколение в таком случа и двигание объектов не происходит, то немного исправляет результат в пользу C#, но даже если бы код на C# работал в 2 раза медленее, то он оказался бы в 3 раза быстрее стандартного аллокатора для C++.


Несмотря на всю бессмысленность синтетики, скажи, на какой машинке делал замер? Процессор (частота), память (тип, PC...)?
Re[24]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 20.03.09 07: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 и каноникализации строки.

А там уже можно думать — кэшировать словарь (меньше запросо к диску, увеличение требований к памяти), заранее расчитывать индекс для словаря в канонической форме (увеличение места на диске, усложнение программы, уменьшение времени) и т.п.

ЗЫ. Локальный вывод типов рулит в плане читаемости
avalon 1.0b rev 146


dmitriid.comGitHubLinkedIn
Re[25]: Работа - с чего начать: С++ или С#?
От: Sheridan Россия  
Дата: 20.03.09 08:48
Оценка:
Sinclair wrote:

> S>В англицком к примеру я не силен.

> Как же ты живешь-то?
Да неплохо в общем то живу.

> S>В трех словах пожалуйста опиши что там происходит. Насколько я понял — чел добился существенного увеличения производительности, или нет?

>

...

Спасибо. Все правильно написано. Оптимизировать нужно в разумных пределах.
Posted via RSDN NNTP Server 2.1 beta
Matrix has you...
Re[37]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 20.03.09 09:23
Оценка:
Здравствуйте, criosray, Вы писали:

C>Обычно и того меньше — до 2GB, что можно переконфигурировать в boot.ini и получить до 3х.

Уточню, процесс видит адресного пространства 4Gb/Segment, но использовать под свои нужды может тока младшие 2(3)Gb. Остальным распоряжается система.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[49]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 20.03.09 09: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>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[39]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 20.03.09 09:23
Оценка:
Здравствуйте, hattab, Вы писали:

H>Не то чтобы мне было жалко денег (~$170 за 2Gb)

Ох мать, а чего так дорого то?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[26]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 09:32
Оценка:
Здравствуйте, hattab, Вы писали:

H>Здравствуйте, gandjustas, Вы писали:


G>>>>Кстати о базах: есть couchDB, которая написана на Erlang, который является одним из самых медленных языков. И ниче, всем кто пользуется — нравится.


H>>>У Borland/CodeGear тоже есть SQL сервер -- BlackFish, на Java и .Net. Я не в курсе, как там с перформансом, но и ежу понятно, что основная нагрузка при работе с БД ложится на дисковую систему, а вовсе не на управляемый код.

G>>
G>>Там кроме диска еще оооочень много факторов, влияющих на производительность.
H>Читаем вдумчиво.
Наверное надо было доабавить что работа с диском в меньшей степени влияет на производительность реальных СУБД, потому что там алгоритмической сложности нету, надо только подстроить под особенности работы ОС с диском.
Re[25]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 20.03.09 09:38
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Хвост, Вы писали:

Х>>немного непонятно что ты в етой задаче нашёл такого "сложноописуемого" на с++
S>Не вижу сортировки по алфавиту.

multiset
People write code, programming languages don't.
Re[50]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 09: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]: Работа - с чего начать: С++ или С#?
От: Sheridan Россия  
Дата: 20.03.09 09:40
Оценка:
gandjustas wrote:

> Самое главное

>

> Если я и выучил хоть что-то про анализ производительности, так это то, что мои догадки о расположении узких мест зачастую неверны

> Тебе стоит это учесть.

То что последнее слово за профайлером я и так знаю.
Posted via RSDN NNTP Server 2.1 beta
Matrix has you...
Re[28]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 09:45
Оценка:
Здравствуйте, Sheridan, Вы писали:

S>gandjustas wrote:


>> Самое главное

>>

>> Если я и выучил хоть что-то про анализ производительности, так это то, что мои догадки о расположении узких мест зачастую неверны

>> Тебе стоит это учесть.

S>То что последнее слово за профайлером я и так знаю.


Неверно.
За профайлером должно быть первое слово.
Re[49]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 09:48
Оценка:
Здравствуйте, criosray, Вы писали:

C>Неиспользование using для MemoryStream — утечка ресурсов.

Разве?
Re[50]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 20.03.09 10:03
Оценка:
Здравствуйте, gandjustas,
кстати, скажи пожалуйста, а сколько лично у тебя установлено .NET приложений уровня desktop?
People write code, programming languages don't.
Re[49]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 20.03.09 10: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 10: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 10: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 10:04
Оценка:
Здравствуйте, CreatorCray, Вы писали:

H>>Не то чтобы мне было жалко денег (~$170 за 2Gb)

CC>Ох мать, а чего так дорого то?

$74 стоимость 1Gb планки (SODIMM PC2700 200pin 2.5v) на Никсе + 15% моего продавца И это еще не самая дорогая...
Re[29]: Работа - с чего начать: С++ или С#?
От: Sheridan Россия  
Дата: 20.03.09 10:07
Оценка:
gandjustas wrote:


> S>То что последнее слово за профайлером я и так знаю.

> Неверно.
> За профайлером должно быть первое слово.
Слушаю и повинуюсь, о грозный Ганджустас!!!
Posted via RSDN NNTP Server 2.1 beta
Matrix has you...
Re[27]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 20.03.09 10:22
Оценка:
Здравствуйте, gandjustas, Вы писали:

H>>>>У Borland/CodeGear тоже есть SQL сервер -- BlackFish, на Java и .Net. Я не в курсе, как там с перформансом, но и ежу понятно, что основная нагрузка при работе с БД ложится на дисковую систему, а вовсе не на управляемый код.

G>>>
G>>>Там кроме диска еще оооочень много факторов, влияющих на производительность.
H>>Читаем вдумчиво.
G>Наверное надо было доабавить что работа с диском в меньшей степени влияет на производительность реальных СУБД, потому что там алгоритмической сложности нету, надо только подстроить под особенности работы ОС с диском.

Ты же вроде отметился в ветке, где приводили пример работы MSSQL с базой на диске и в памяти... Основные задержки, это, как раз таки, выборка данных с диска.
Re[28]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 10:43
Оценка:
Здравствуйте, hattab, Вы писали:

H>Здравствуйте, gandjustas, Вы писали:


H>>>>>У Borland/CodeGear тоже есть SQL сервер -- BlackFish, на Java и .Net. Я не в курсе, как там с перформансом, но и ежу понятно, что основная нагрузка при работе с БД ложится на дисковую систему, а вовсе не на управляемый код.

G>>>>
G>>>>Там кроме диска еще оооочень много факторов, влияющих на производительность.
H>>>Читаем вдумчиво.
G>>Наверное надо было доабавить что работа с диском в меньшей степени влияет на производительность реальных СУБД, потому что там алгоритмической сложности нету, надо только подстроить под особенности работы ОС с диском.

H>Ты же вроде отметился в ветке, где приводили пример работы MSSQL с базой на диске и в памяти... Основные задержки, это, как раз таки, выборка данных с диска.

Но оптимизировать эти издержки не сильно получится, только компромисс время-память.
Зато есть куча других мест в СУБД, в которых придется сильно понапрягаться чтобы вытянуть производительность.
Re[51]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 20.03.09 11:03
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>А сколько ядер на машине?

2 честных (не НТ)

G>В целях оптимизации вполне можно так поступить.

Могу ли я в таком случае оптимизировать С++ код?
Простое убирание блокировки (CriticalSection) через применение Per-Thread Allocator дает уже 47
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[52]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 20.03.09 11:08
Оценка:
Здравствуйте, CreatorCray, Вы писали:

G>>А сколько ядер на машине?

CC>2 честных (не НТ)

G>>В целях оптимизации вполне можно так поступить.

CC>Могу ли я в таком случае оптимизировать С++ код?
CC>Простое убирание блокировки (CriticalSection) через применение Per-Thread Allocator дает уже 47

в Delphi без блокировок 24
Re[27]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 20.03.09 11:10
Оценка:
Здравствуйте, Sinclair, Вы писали:
S>Я надеюсь, уточнение сортировки в Case-insensitive/accent-sensitive для турецкой локали не усложнит эту безусловно прекрасную программу?
безусловно усложнит, как минимум придётся написать волшебный предикат, как максимум заменить std::string на что-нибудь из комплекта ICU.
People write code, programming languages don't.
Re[50]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 20.03.09 11:15
Оценка:
Здравствуйте, hattab, Вы писали:
H>Base64 -- единственный способ передать бинарные данные в XML-RPC.
Несомненно, именно это было ключевым фактором при принятии решения о способе маршаллинга картинок в неуправляемый фильтр. Извини, не могу больше писать — встаю для аплодисментов.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[51]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 20.03.09 11:19
Оценка:
Здравствуйте, Sinclair, Вы писали:

H>>Base64 -- единственный способ передать бинарные данные в XML-RPC.

S>Несомненно, именно это было ключевым фактором при принятии решения о способе маршаллинга картинок в неуправляемый фильтр. Извини, не могу больше писать — встаю для аплодисментов.

Сказать-то чего хотел?
Re[53]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 20.03.09 11:44
Оценка:
Здравствуйте, hattab, Вы писали:

H> в Delphi без блокировок 24

У нас с тобой процы разные, так что наши попугаи сравнивать без знания скока попугаев у тебя в C# проге сложновато.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[29]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 20.03.09 11: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 11:51
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Невопрос


static unsafe void Main(string[] args)


ого! тебе осталось сделать совсем небольшой шаг до С++, решайся!

P.S. ну и что ты со своими байтами будешь делать? а как насчёт того чтобы классы на стеке инстанцировать?
People write code, programming languages don't.
Re[54]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 20.03.09 12:13
Оценка:
Здравствуйте, CreatorCray, Вы писали:

H>> в Delphi без блокировок 24

CC>У нас с тобой процы разные, так что наши попугаи сравнивать без знания скока попугаев у тебя в C# проге сложновато.

С# 103.
Re[53]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 20.03.09 12:14
Оценка:
Здравствуйте, gandjustas, Вы писали:
Х>>ого! тебе осталось сделать совсем небольшой шаг до С++, решайся!
G>Зачем? Для запредельного перфоманса есть С, для надежного и красивого кода есть C#, F#.
G>А С++ в этом уравнении места нет.
ну как же, C++ == запредельный перфоманс + надёжный и красивый код

Х>>P.S. ну и что ты со своими байтами будешь делать? а как насчёт того чтобы классы на стеке инстанцировать?

G>Если уж очень надо стеке, то воспользуюсь структурами.
надеюсь ты понимаешь разницу между структурой и классом в дотнете, повторяюсь — инстанцировать классы

и на посошок, или я проглядел, или ты не ответил на вопрос — сколько у тебя установлено приложений уровня "десктоп", писаных на дотнете?
People write code, programming languages don't.
Re[53]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 20.03.09 12:24
Оценка:
Здравствуйте, criosray, Вы писали:

Вообще все эти сравнения и пиписькомеренья весьма забавно выглядят. В управляемом коде в целях безопасности, афаик, при выделении памяти производится так же ее очистка (обнуление), а это по два такта процессора на каждый байт.

Критично ли это для конечного пользователя — только в очень редких случаях (мне с такими не доводилось сталкиваться).
Обоснован ли такой оверхед — в большинстве случаев определенно да.

В целом управление памятью в дотнет реализовано очень-очень эффективно — так, что в исключительном большинстве случаев память не является "бутылышным горлышком".
Re[53]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 20.03.09 12: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[53]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 20.03.09 12:35
Оценка:
Здравствуйте, criosray, Вы писали:

H>> New(Arr);

H>> Dispose(Arr);

H>>Pentium M 1.7GHz. Память PC2700. Время: 67ms.


C>Если компилятор не дурак, то он вообще не станет выделять память по пусту, раз Вы ее не используете и пустой цикл тоже не станет крутить по чем зря.


C>Впрочем, это ж Делфи.


Вай-вай, говнодельфи укопал мегашарпа... Смотри не лопни, от злости
Re[54]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 12:36
Оценка:
Здравствуйте, criosray, Вы писали:

C>Здравствуйте, criosray, Вы писали:


C>Вообще все эти сравнения и пиписькомеренья весьма забавно выглядят. В управляемом коде в целях безопасности, афаик, при выделении памяти производится так же ее очистка (обнуление), а это по два такта процессора на каждый байт.

Кроме того я в тесте кроме выделения памяти померил еще и время двух миллионов проверок на попадание в границы массива и присваивания.
примерно 5% времени занимает.
Re[55]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 20.03.09 12:44
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Кроме того я в тесте кроме выделения памяти померил еще и время двух миллионов проверок на попадание в границы массива и присваивания.

А оно для константных индексов разве будет проверять если размер массива тоже константа, известная еще на этапе компиляции? А как же умный JIT?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[51]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 20.03.09 12: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 12:51
Оценка:
Здравствуйте, gandjustas, Вы писали:

C>>Вообще все эти сравнения и пиписькомеренья весьма забавно выглядят. В управляемом коде в целях безопасности, афаик, при выделении памяти производится так же ее очистка (обнуление), а это по два такта процессора на каждый байт.

G>Кроме того я в тесте кроме выделения памяти померил еще и время двух миллионов проверок на попадание в границы массива и присваивания.
G>примерно 5% времени занимает.

Не отмажешься теперь
Re[56]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 12:52
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, gandjustas, Вы писали:


G>>Кроме того я в тесте кроме выделения памяти померил еще и время двух миллионов проверок на попадание в границы массива и присваивания.

CC>А оно для константных индексов разве будет проверять если размер массива тоже константа, известная еще на этапе компиляции? А как же умный JIT?
Может он так и делает. Тогда просто время миллиона присваиваний.
Re[55]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 20.03.09 13:10
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Кстати, как на делфи с задачкой про все строки файла...

Если вдруг ты сможешь понятно описать чего тебе надобно, старче, то она очевидно решается на ЛЮБОМ АЛГОРИТМИЧЕСКОМ ЯЗЫКЕ, даже на FORTRAN И basic!
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[53]: нет, ну если ты настаиваешь... ;)
От: Erop Россия  
Дата: 20.03.09 13:18
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Зачем? Для запредельного перфоманса есть С, для надежного и красивого кода есть C#, F#.

G>А С++ в этом уравнении места нет.

Нет, ну если ты настаиваешь, что быстрый код ОБЯЗАН БЫТЬ ненадёжным и некрасивым, то да, нет...
А если вдруг тебе охота чтобы и быстрый код был и надёжным и красивым и поддерживаемым, то места мало остаётся как раз для С -- только платформы, где есть дот нет, но нет хороших С++ компиляторов...
Кстати, что это за платформы?


Кстати, если так взглянуть на это дело, то окажется, что и для С# место сожмётся, так как если в твоей проге самая нагруженная часть на С++, то не ясно, зачем оболочку-то на ХиндиС делать? У ХиндиС есть неомненный плюс -- дешёвая и быстрая разработка бригадой гастарбайтеров, в смысле индусов. Если в твоём проекте есть такие компоненты, то супер, С# твой выбор...


Да, то, что между черт -- это стёб... Но в каждой шутке есть таки доля шутки...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[56]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 13:21
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, gandjustas, Вы писали:


G>>Кстати, как на делфи с задачкой про все строки файла...

E>Если вдруг ты сможешь понятно описать чего тебе надобно, старче, то она очевидно решается на ЛЮБОМ АЛГОРИТМИЧЕСКОМ ЯЗЫКЕ, даже на FORTRAN И basic!
Никто не говорил что она не решается.

Выразительность языка заключается не в возможности решить задачу, в читаемости, поддерживаемости и расширяемости этого решения. (это упрощенно)
Re[49]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 20.03.09 13:25
Оценка:
Здравствуйте, criosray, Вы писали:

C>Неиспользование using для MemoryStream — утечка ресурсов.

А как же GC?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[57]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 20.03.09 13: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 13: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 13:43
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>А он неявно сортирует??? Офигеть. Я как отвык от того, что для множества нужно задавать отношение частичного порядка.

S>Я надеюсь, уточнение сортировки в Case-insensitive/accent-sensitive для турецкой локали не усложнит эту безусловно прекрасную программу?

Может уважаемый MVP снизойдёт к нам, сирым и убогим и вспомнит таки азы, а уже потом будет позориться?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[58]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 20.03.09 13: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[59]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 20.03.09 14:04
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>В структуре нет методов? Это точно на C#?

ммм...статические есть, но ето немного не то, правда?

G>Вопрос возник видимо из-за непонимания этого факта.

у меня отличное понимание факта.
People write code, programming languages don't.
Re[38]: Работа - с чего начать: С++ или С#?
От: Alexey Voytsehovich Украина  
Дата: 20.03.09 14: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[24]: Работа - с чего начать: С++ или С#?
От: esil  
Дата: 20.03.09 14: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[60]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 20.03.09 14:32
Оценка:
Здравствуйте, Хвост, Вы писали:

G>>В структуре нет методов? Это точно на C#?

Х>ммм...статические есть, но ето немного не то, правда?
Странно, что Вы, как утверждаете, писали на дотнет и не знаете, что у структур есть и инстанс методы.

В дотнет structure это value-тип — передается копированием и хранится в стеке.
class — reference-тип — передается по указателю и хранится в куче.

Преобразование value-типа к ref-типу называется боксингом, обратное — unboxing`ом.

int i = 10;
object o = i;
int k = (int) o;

G>>Вопрос возник видимо из-за непонимания этого факта.

Х>у меня отличное понимание факта.

Отличное от реальности?
Re[63]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 20.03.09 14:40
Оценка:
Здравствуйте, criosray, Вы писали:

C>Здравствуйте, Хвост, Вы писали:

C>Да нет, стоило. Иначе Вы бы продолжали в пустую гонять воздух, не зная почти ничего о теме разговора.
покажи массив на стеке в дотнете, или действительно не стоит гонять воздух впустую
People write code, programming languages don't.
Re[64]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 20.03.09 14:41
Оценка:
Здравствуйте, Хвост, Вы писали:

C>>Да нет, стоило. Иначе Вы бы продолжали в пустую гонять воздух, не зная почти ничего о теме разговора.

Х>покажи массив на стеке в дотнете, или действительно не стоит гонять воздух впустую

Прочитайте еще раз то, что я Вам писал.
Re[65]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 20.03.09 14:42
Оценка:
Здравствуйте, criosray, Вы писали:

C>Прочитайте еще раз то, что я Вам писал.

хм, написано что такое боксинг и анбоксинг, про value и ref типы, про массив структур на стеке не увидел
People write code, programming languages don't.
Re[62]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 20.03.09 14:48
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>изначально разговор был о массиве структур на стеке, ликбез про боксинг/анбоксинг читать не стоило, читал давно, в зелёной книжке.

Непонятно к чему тогда было следующее:
1.

объясняю, struct в сишарпе ето семантически то что называется POD в С++, т.е. плоская структура данных, ни конструкторов, ни методов, ничего

2.

G>В структуре нет методов? Это точно на C#?
ммм...статические есть, но ето немного не то, правда?

Re[62]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 14: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]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 20.03.09 14:51
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Думаете нельзя в C# на стеке данные размещать?

Думаю конкретно esil имеет ввиду, что нельзя разместить в стеке произвольные данные.
Массивы, например, туда не засунуть, ибо class

А вот что имел ввиду minorlogic я, чесс говоря, тоже не понял.
Но эт не страшно
Re[63]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 20.03.09 14: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]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 14:55
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>Здравствуйте, criosray, Вы писали:


C>>Здравствуйте, Хвост, Вы писали:

C>>Да нет, стоило. Иначе Вы бы продолжали в пустую гонять воздух, не зная почти ничего о теме разговора.
Х>покажи массив на стеке в дотнете, или действительно не стоит гонять воздух впустую

var stackArrayOfStruct = stackalloc SomeStruct[10];
Re[62]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 15:00
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>Здравствуйте, criosray, Вы писали:


C>>Отличное от реальности?

Х>изначально разговор был о массиве структур на стеке
Ложь. Изначально разговор о ращемещении экземпляра класса на стеке.
Re[27]: Работа - с чего начать: С++ или С#?
От: esil  
Дата: 20.03.09 15:05
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>Здравствуйте, gandjustas, Вы писали:


G>>Думаете нельзя в C# на стеке данные размещать?

MK>Думаю конкретно esil имеет ввиду, что нельзя разместить в стеке произвольные данные.
MK>Массивы, например, туда не засунуть, ибо class

MK>А вот что имел ввиду minorlogic я, чесс говоря, тоже не понял.

MK>Но эт не страшно

Ну он как раз и имеет в виду, что мы можем произвольные типы размещать на стэке, что очень полезно, т. к. позволяет оставаться в рамках ООП-подхода и избегать множества выделений памяти в куче.
Re[28]: Работа - с чего начать: С++ или С#?
От: esil  
Дата: 20.03.09 15: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[64]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 20.03.09 15:33
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>потому что я был уверен что struct в C# ето только данные и все операции с ним аля положить в массив и вызвать метод происходят только в его боксовом представлении

Угу. Еще ты был уверен про уровень
Автор: Хвост
Дата: 20.03.09
разработчиков .Net.
Что теперь мешает и мне написать подобный пост про тебя?
Re[25]: Работа - с чего начать: С++ или С#?
От: esil  
Дата: 20.03.09 15:38
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, NikeByNike, Вы писали:


NBN>>Здравствуйте, BulatZiganshin, Вы писали:


BZ>>>читай внимательно. в языках с gc гарантия — на 3x, можно и меньше. в C++ — гарантий никаких, расход может быть каким угодно прсто потому что память усеяна мелкими дырками


NBN>>C++ очень универсальный язык Он позволяет писать так как тебе нужно. В частности обеспечить все гарантии по чему хочешь, чем я, кстати, на днях воспользовался.

G>Я вот тут на днях написал на C# библиотеку для работы с конечными автоматами. Она генерирует в рантайме код автомата по описанию, а потом использует его.
G>На C++ такое получится?

И что же из себя представляет описание? И что из этого описания генерируется? И зачем это нужно в рантайм, почему нельзя в compile-time?
Re[26]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 20.03.09 15:58
Оценка:
Здравствуйте, esil, Вы писали:

NBN>>>C++ очень универсальный язык Он позволяет писать так как тебе нужно. В частности обеспечить все гарантии по чему хочешь, чем я, кстати, на днях воспользовался.

G>>Я вот тут на днях написал на C# библиотеку для работы с конечными автоматами. Она генерирует в рантайме код автомата по описанию, а потом использует его.
G>>На C++ такое получится?

E>И что же из себя представляет описание? И что из этого описания генерируется? И зачем это нужно в рантайм, почему нельзя в compile-time?


В compile-time Вы ограничены статичным автоматом, либо вынуждены использовать интерпретируемый автомат (например, с описанием на DSL-языке).
Re[68]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 20.03.09 16:49
Оценка:
Х> Качественного десктопного софта на C# нет.

С одной стороны виноват тот же С++. Потому что legacy и тот же ворд нет смысла переписывать с нуля
С другой стороны — а что такое десктопный софт?
avalon 1.0b rev 146


dmitriid.comGitHubLinkedIn
Re[68]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 20.03.09 16: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 16:59
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Выразительность языка заключается не в возможности решить задачу, в читаемости, поддерживаемости и расширяемости этого решения. (это упрощенно)


Если я верно понял, тебе хочется уметь проверять есть ли в строке не менее трёх слов подряд, упорядоченных по алфавиту?
Так? IMHO, это просто, понятно и поддерживаемо записывается на ЛЮБОМ АЛГОРИТМИЧЕСКОМ ЯЗЫКЕ...
Ну, во всяком случае теми, кто умеет программировать...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[57]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 20.03.09 17:03
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Дейсвительно, не 6, а 7 десктопных программ которыми я пользуюсь: браузер, почтовик, paint.net, live writer, qip, skype, vs2008.

G>Media Player был в комплекте, офис тоже.
G>Остальное запускаю редко.

А "офис" -- это надо читать, как "ворд", или, как "ещё пять-семь программ"?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[70]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 20.03.09 17:15
Оценка:
Здравствуйте, Хвост, Вы писали:


Х>я говорил о проекте в котором участвовал я, он был на порядок

на порядок меньше ессно.
People write code, programming languages don't.
Re[67]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 20.03.09 17:21
Оценка:
Здравствуйте, criosray, Вы писали:

C>У нас пользователи в госструктурах на компах, которым уже по 2-4 года работают с нашим клиентом на .NET уже больше года в production режиме. Клиент довольно тяжелый: диалоги, графики, отчеты, таблицы, формы — полный комплект. Нареканий на производительность до сих пор не было. "ЧЯДНТ?"


Считаешь, что выделенное -- это "тяжёлый клиент".
Кстати, а данные вы из DB берёте, я надеюсь?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[56]: нет, ну если ты настаиваешь... ;)
От: criosray  
Дата: 20.03.09 17:39
Оценка:
Здравствуйте, Erop, Вы писали:

G>>И только там где не хватает производительности может быть использован C.

E>Ну вот есть такая т. з., что в случае массового потребителя, производительности не хватает практически ВЕЗДЕ. Ну ценят люди скорость...
Можно поинтересоваться на основании чего был сделан этот вывод?
Re[56]: нет, ну если ты настаиваешь... ;)
От: criosray  
Дата: 20.03.09 17:40
Оценка:
Здравствуйте, Erop, Вы писали:

E>>>Нет, ну если ты настаиваешь, что быстрый код ОБЯЗАН БЫТЬ ненадёжным и некрасивым, то да, нет...

G>>Если вы изначально занимаетесь быстротой кода, то вряд ли он будет нажедным и красивым. Наоборот — вполне.
E>Это всего лишь твоё неумение писать быстрый и качественный код...
E>Мне известны МНОГОЧИСЛЕННЫЕ контрпримеры, так что позволь не поверить твоему голословному утверждению...

Да, кстати, поделитесь. Будет интересно послушать.
Re[70]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 20.03.09 19:00
Оценка:
h> M>С одной стороны виноват тот же С++. Потому что legacy и тот же ворд нет смысла переписывать с нуля
h> M>С другой стороны — а что такое десктопный софт?

h> Гуглохром например, и легаси нету и работает на десктопе


О, кстати. [holywar offtop on] как это так — написан на кроссплатформенном С++, а кроссплатфоренной версии нет, и в ближайшем будущем не предвидится? 0_o [holywar offtop off]

Гуглохром хороший пример нового приложения. Толкьо вот там С++ изначально — куча. Это и вебкит, и V8.
avalon 1.0b rev 146


dmitriid.comGitHubLinkedIn
Re[2]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 20.03.09 19:00
Оценка:
VD> Купи себе учебники по C++ и C#. Прочти их. Изучи языки. Потом еще какие-нибудь другие языки изучи (что-нибудь из ФП, например). Когда ты все это сделаешь, то поймешь какую чушь ты тут нес. А на вопрос каким языком пользоваться ты и само тогда ответить можешь.

Просто так, по учебникам, изучить не получится. Надо на каждом из них селать пусть п менькому, пусть для себя, но проекту

*мечтательно* я, когда C# взял в руки, ршил каталог сидюков сделать. На основе XML С гуем. Даже что-то сделал. Потом все забросил, потому что лень в библиотеках было разбираться
avalon 1.0b rev 146


dmitriid.comGitHubLinkedIn
Re[57]: нет, ну если ты настаиваешь... ;)
От: Erop Россия  
Дата: 20.03.09 20:16
Оценка:
Здравствуйте, criosray, Вы писали:

C>Да, кстати, поделитесь. Будет интересно послушать.

Чем? Тебе интересны примеры быстрого кода на С++?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[29]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 20: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 20:47
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>И вообще, что это за позиция — устроиться куда-то "на начальную позицию"?

VD>Это значит ты будешь изучать что-то, а тебе за это еще и платить кто-то должен?

Да, так бывает. И не только в ПО. И не только сейчас, но и раньше было.
То, что ты не умеешь искать такие позиции, всего лишь говорит что-то о тебе, а не об окружающем мире...
Можешь подумать над значением слова "подмастерье"...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[66]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 20:47
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>Здравствуйте, gandjustas, Вы писали:


G>>
G>>var stackArrayOfStruct = stackalloc SomeStruct[10];
G>>


Х>хы, ансейф, вперёд к С++?


Х>просто вот когда дело доходит до новых апи — здравствуй интероп с нейтивом

О да, это просто нереальная сложность, написать DllImport наверное непостижимая задача.

Х>хочешь массив на стеке — здравствуй ансейф,

Думаешь он часто нужен?

Х>тот же пэйнт.нет афаир просто насквозь пропитан ансейфом

От силы 5% ансейфа.

Х>зачем тогда сишарп?

Все что ты назвал никак не мешает использовать всю мощь сишарпа.

Х>хорошие вещи делаются только в нейтиве, вот тот же пример с выводом строк, для такой забавы как флейм на рсдн и стримы с регекспами не грех использовать, а вот если бы ето была программа промышленных маштабов — скажим анализатор логов, то здравствуй мем-маппед файлы да стейт-машины с отсутствием аллокаций, и писать етона си++ без ifstream и multiset, а не на сишарпе с gc и аллокацией на каждый чих.

А доказательсва будут? Ты еще не заметил что GC работает быстре стандартного аллокатора?
Re[26]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 20: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[58]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 21:25
Оценка:
Здравствуйте, Erop, Вы писали:

E>Здравствуйте, gandjustas, Вы писали:


G>>Выразительность языка заключается не в возможности решить задачу, в читаемости, поддерживаемости и расширяемости этого решения. (это упрощенно)


E>Если я верно понял, тебе хочется уметь проверять есть ли в строке не менее трёх слов подряд, упорядоченных по алфавиту?

E>Так? IMHO, это просто, понятно и поддерживаемо записывается на ЛЮБОМ АЛГОРИТМИЧЕСКОМ ЯЗЫКЕ...
Ну тогда решение на BF и Delphi в студию.

E>Ну, во всяком случае теми, кто умеет программировать...

Разница познается в сравнении.
Re[70]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 21:29
Оценка:
Здравствуйте, Хвост, Вы писали:

C>>2 секунды на форму? Дело точно не в .NET.

Х>а может и в .NET, я не профайлил, знаете почему? потому что nobody care
Вот она — истина.
Во всем софте так — или есть проблемы и они исправляются (иначе конкуретны выдавят),
или эти проблемы никого не волнуют, значит это и не проблемы даже.

Быстродействие софта мало кого волнует, лишь бы visual feedback был адекватный.
Re[56]: нет, ну если ты настаиваешь... ;)
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 21: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 21:43
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Ну тогда решение на BF и Delphi в студию.

1) Я не считаю BF, asm, а так же и язык машины Тбюринга алгоритмическими...
2) Delphi я не помню совсем, но немного помню ещё PASCAL, наверное. Во всяком случае недавно что-то на нём правил. Но я пока не понял задачу. Уточни таки, а?
Хотя мне проще было бы на C/С++, конечно написать...

E>>Ну, во всяком случае теми, кто умеет программировать...

G>Разница познается в сравнении.

IMHO, разницы принципиальной нет. Хотя, возможно, я не понял задачу.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[70]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 21:53
Оценка:
Здравствуйте, alsemm, Вы писали:

A>Справедливости ради надо сказать, что пост там про AutoCAD2008. Но вряд-ли AutoCAD2009 что-то изменилось кардинально.

A>Так что AutoCAD из списка С# приложений вычеркивайте
Офигеть
Re[71]: Работа - с чего начать: С++ или С#?
От: ambel-vlad Беларусь  
Дата: 20.03.09 21:54
Оценка:
Hi criosray

C>Так что будущее десктоп софта под Windows таки за дотнет.


Где-то это я уже слышал.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[32]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 20.03.09 22: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[72]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 20.03.09 22:40
Оценка:
h> А если серьезно, то МакОС и Линукс версии сейчас готовятся.

Ну, про это я знаю

h> M>Гуглохром хороший пример нового приложения. Толкьо вот там С++ изначально — куча. Это и вебкит, и V8.

h> Ну и что? Никого же не смущает использование в .Net софте нативно Трайдента

Я пас Не знаю
avalon 1.0b rev 146


dmitriid.comGitHubLinkedIn
Re[71]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 20.03.09 22:41
Оценка:
Здравствуйте, gandjustas, Вы писали:

M>>>С одной стороны виноват тот же С++. Потому что legacy и тот же ворд нет смысла переписывать с нуля

M>>>С другой стороны — а что такое десктопный софт?

H>>Гуглохром например, и легаси нету и работает на десктопе


G>У гугла столько ресурсов, что они могуть ОС в машинных кодах написать.

G>И если им будет надо — напишут.

У МС ресурсов не меньше, чего же легаси свое не перепишут на шарпе? Глядишь и сэкономят еще
Re[73]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 20.03.09 22:41
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>А что такое core ?

Это реализация функционала проги, отличного от GUI или какого-то ещё UI.

Скажем в твоих задачах core обычно на СУБД какой-то реализовано, а в одной из часть core была на C...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[73]: Работа - с чего начать: С++ или С#?
От: alsemm Россия  
Дата: 20.03.09 22: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[33]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 22: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 Российская Империя www.nemerle.org
Дата: 20.03.09 22:54
Оценка:
Здравствуйте, NikeByNike, Вы писали:

VD>>>А если серьезно, то уровень дискуссии действительно просто супер. Плинтус горами покажется.

WH>>Угу. Люди не знающие .НЕТ против людей не знающих С++.
WH>>Смешно читать и тех и других.

NBN>Не только, люди ещё специализируются на разных направлениях...


... незнающие ни того, ни другого но спорящие об обоих.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 20.03.09 22:58
Оценка:
Здравствуйте, Erop, Вы писали:

E>Да, так бывает. И не только в ПО. И не только сейчас, но и раньше было.

E>То, что ты не умеешь искать такие позиции, всего лишь говорит что-то о тебе, а не об окружающем мире...
E>Можешь подумать над значением слова "подмастерье"...

Ой, я же забыл. Мы же о сапожниках говорим. Вот только ученикам зарплату не платили. Им максимум еду давали.
Почему всем будет смешно, если им расскажут о подмастерьи физика, химика или врача. Так почему же подмастерья программистов обсуждаются серьезно?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[33]: Работа - с чего начать: С++ или С#?
От: esil  
Дата: 20.03.09 22: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]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 20.03.09 23:04
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Так это не я начал про супер-мега ооп с объектами на стеке.

Зачем "супер" и "мега"? Может быть, например, фильтр к какому-нибудь запросу к словарю...
Может быть техника, похожая на ET (шаблонные выражения, не знаю, как по-русски)

это "фабричный метод" или нет?
G>Не-а.
Ну тогда, наверное, именно "фабричный метод" не изображу...
Но при нужде С++ позволяет использовать довольно мощный статический полиморфизм...
И это обычно можно сделать довольно быстрым кодом...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[73]: Плохому танцору на С++ лучше не прогать...
От: Erop Россия  
Дата: 20.03.09 23:14
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Исторические причины в крупных организациях играют немалую роль.


Странно у тебя выходит. Типа ХиндиС для десктопа подходит, но в каждом конкретном случае что-то ему мешает...


IMHO, есть огромный сегмент ПО -- это ПО, которое пишут по случаю и как можно быстрее.
Раньше это делали на VB, теперь делают на ХиндиС. В целом это огромный шаг вперёд!!!
И у C# есть своя ниша. А у С++ своя. Это разная работа обычно и разного рода цикл разработки даже. Так что я не вижу ничего странного в выборе человека между тем и этим, при построении дальнейшей карьеры.
Но в своей нише выбор уже часто предопределён. Если тебе надо пять COM-верверов заставить хитро взаимодействовать меду собой, то ясно что не на С++ это удобно. А если ты хочешь написать распознавалку голоса, чтобы оно могло писать под твою диктовку, то ясно, что не C#, твой выбор...

Ну и у десктопов своя специфика -- обычно программ много, а памяти и проца -- нет. При этом редко проги выпускаются по запросу и срочно. Так что экономичность программ -- это большой плюс для десктопа, а скорость разработки, на уровне "надо ещё вчера" -- нет...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[58]: нет, ну если ты настаиваешь... ;)
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 23: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 23:16
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>Здравствуйте, esil, Вы писали:


E>>А тут случаем баг не закрался?

E>>CreateBySimilarityCasesensitive возвращает временный объект, на который потом берётся ссылка.
NBN>Нет, временный объект просуществует до конца видимости ссылки. С указателем такая фишка не сработает.

Сенкс. Не думал, что в этом флейме удастся узнать что-то новое про С++ =)
С подобным кодом раньше не сталкивался, обычно в таких случаях вместо ссылки просто создают локальный объект )
Re[31]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 23:19
Оценка:
Здравствуйте, esil, Вы писали:

E>Здравствуйте, gandjustas, Вы писали:


G>>Круто, а фабричный метод так изобразите?

G>>ЗЫ. Передача указателя на стек до добра не доводит, большенство уязвимостей в ПО так и получаются.

E>Я заню, что круто ))

E>Нет, фабричный метод так не изображу. Только не надо говорить "ну тогда и нет никакого ООП на стэке". Естественно одним стэком не обойдёшься. Но стэк позволяет убрать очень много выделений памяти.
Для С++ толк в этом есть, но мало. Это уже оптимизация после которой код хуже читается, сложнее модифицируется и еще и потенциально подвержен уязывимостям.
Re[72]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.03.09 23:21
Оценка:
Здравствуйте, hattab, Вы писали:

H>Здравствуйте, gandjustas, Вы писали:


M>>>>С одной стороны виноват тот же С++. Потому что legacy и тот же ворд нет смысла переписывать с нуля

M>>>>С другой стороны — а что такое десктопный софт?

H>>>Гуглохром например, и легаси нету и работает на десктопе


G>>У гугла столько ресурсов, что они могуть ОС в машинных кодах написать.

G>>И если им будет надо — напишут.

H>У МС ресурсов не меньше, чего же легаси свое не перепишут на шарпе? Глядишь и сэкономят еще

Про это уже говорили, вроде даже в этой теме.
Re[36]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 20.03.09 23:24
Оценка:
Здравствуйте, esil, Вы писали:

E>С подобным кодом раньше не сталкивался, обычно в таких случаях вместо ссылки просто создают локальный объект )

Чтобы создать локальный объект, надо знать его тип. А он может определяться, например, типом аргументов перегруженной порождающей функции...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[52]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 20.03.09 23:55
Оценка:
Здравствуйте, esil, Вы писали:

E>Лично мне комфортно от того, что можно пробовать строить различные архитекутры, не думая изначально о том, сколько каких мелких объектов где выделяется, потому что в случае чего можно расчехлить тяжёлую артиллерию. Кому-то такой подход кажется нормальным, кому-то нет. Но по крайней мере есть выбор. Хотя наличие выбора может кому-то тоже показаться плохой идеей. ))


Тут есть ещё одна тонкость. спец. аллокатор таки эффективнее для своей задачи. В этом нет ничего удивительного, так как специализированные решения часто лучше обобщённых
А дальше возникает вопрос насколько тебе это надо. Если ты шахматные часы пишешь, то и фиг с ним. А если, скажем, делаешь ты С-300, и надо, чтобы система управления быстрее чесалась, так как чем быстрее и точнее она чешется, тем на дальше хватает изделию топлива. И тем больше есть времени, соответственно, "на выстрелить"...

И вот ты разрабатываешь, разрабатываешь, и упираешься. С С++ у тебя будет ещё один шаг, практически до субмакисмльного быстродействия, а в GC архитектуре ты остановишься на просто большом быстродействии и всё. И в результате ракета у амеров летает на 250, а у РФ на 350 км... И привет арифметике...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 20.03.09 23:56
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Почему всем будет смешно, если им расскажут о подмастерьи физика, химика или врача. Так почему же подмастерья программистов обсуждаются серьезно?

Ну посмейся. Слова "аспирант", "ординатура" и "научный руководитель диплома" и "производственная практика" для тебя новы?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[60]: нет, ну если ты настаиваешь... ;)
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 21.03.09 00: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[61]: нет, ну если ты настаиваешь... ;)
От: Erop Россия  
Дата: 21.03.09 00: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]: Плохому танцору на С++ лучше не прогать...
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 21.03.09 00:48
Оценка:
Здравствуйте, Erop, Вы писали:

E>Есть и другие ниши. Скажем ретейл. Обычно коробочный софт разрабатывают по какому-то графику, есть цикл выпуска версий там, то, сё, есть время на проектирование, на тестирование, на качество разработки, короче. Если ты будешь выпускать версии раз в месяц, ты только проиграешь! Так что выгодно выпускать версии пореже, но покруче...

Тоже самое, только без изменчивости требований.
При поставленном процессе выпуск релиза ниче не стоит.

E>А ещё есть разработка технологий и моторов всяких. Скажем сидят люди из 17-й версии СУБД делают 18-ю. Там своя специфика, и C# ещё меньше в тему. Ну и т. д.

Там таже самая фигня.

E>Или, наоборот, сидят люди и пишут то, что никто ещё не писал и как это писать не знает. Тоже интересная, и тоже особенная работа...

Тогда делается прототип(ы), с целью выяснить как писать, а потом пишется продукт.
А исследования планируются очень просто — поставлены цели, выделено бабло, как только цели достигнуты или бабло кончилось исследования заканчиваются и начинается разработка продукта.

E>При этом все эти активности -- программирование. Но они все разные. И кому-то нравится одно, а кому-то другое...

Это ты сам придумал. Промышленный подход к программированию заключается в том что ты пишешь примерно одинаково, только цели немного разные.
Re[54]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 21.03.09 00:55
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Вообще если готовы бабло платить, то можно написать суперкомпилятор, который будет специализировать программу под входные данные, тогда она будет лететь 3 раза вокруг земли.


G>Но для этиъ целей С++ точноне подойдет.


1) Ты про CT что-нибудь слышал?
2) Как думаешь, а сам компиллер С++ на чём писан?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[77]: Плохому танцору на С++ лучше не прогать...
От: Erop Россия  
Дата: 21.03.09 01:05
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>При поставленном процессе выпуск релиза ниче не стоит.

Может и не стоит, но что ты будешь выпускать на этапе проектирования, например?
Или прототипирования...
Короче не догма. На каких-то этапах каких-то проектов полезно, а на каких-то не особо.

G>Тогда делается прототип(ы), с целью выяснить как писать, а потом пишется продукт.

Нет. Прототипы конечно делаются, но это ОЧЕНЬ УПРОЩЁННЫЙ взгляд на вещи.
Вот представь себе, что тебе надо написать игрока в го, который победит на ЧМ. Как построишь ты работу?

G>Это ты сам придумал. Промышленный подход к программированию заключается в том что ты пишешь примерно одинаково, только цели немного разные.

Не знаю что я там придумал, но с психологической точки зрения активность очень разная...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[62]: нет, ну если ты настаиваешь... ;)
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 21.03.09 07: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[6]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 21.03.09 07:02
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Я сутки работал, трое учился, а по вечерам еще с тем же С++ разбирался. Просить у кого-то за это деньги мне даже в голову не приходило.


Ну что тут поделаешь, а некоторым (я их знаю лично) платят только за то, что они соглашаются где-то учиться... Мир несправедлив...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[30]: Дык известное дело: поспешишь - людей наспешишь ;)
От: Sinclair Россия https://github.com/evilguest/
Дата: 21.03.09 07:10
Оценка:
Здравствуйте, Erop, Вы писали:

E>Ну, ты, кажется, вызвался довольно менторским тоном всезнайки разговаривать о С++ коде, даже не врубаясь что там написано?

Нет, я задал вопрос. Менторский тон — это у тебя в голове.
E>Я надеюсь, уточнение сортировки в Case-insensitive/accent-sensitive для турецкой локали не усложнит эту безусловно прекрасную программу?[/q]твои же слова?
Ну да, мои. Ну так ты ответь, раз ты так хорошо знаешь STL и плюсы — как будет выглядеть программа с учетом сортировки, которую я привел.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[32]: Работа - с чего начать: С++ или С#?
От: minorlogic Украина  
Дата: 21.03.09 07:13
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, CreatorCray, Вы писали:

CC>>Беда то в том, что входной порог в managed сильно низкий, и обложенный памперсами нуб может спокойно говнокодить не получая при этом за свой говнокод по рукам — работает же, и не падает.
S>Ничего страшного. На плюсах нуб точно так же может говнокодить. То, что приложение сумело запуститься у нуба на машине, никак не гарантирует того, что оно будет устойчиво работать во всех сценариях.

В плюсах нуб просто не взлетит шутка конечно но ...
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[35]: Работа - с чего начать: С++ или С#?
От: minorlogic Украина  
Дата: 21.03.09 07: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[56]: Работа - с чего начать: С++ или С#?
От: minorlogic Украина  
Дата: 21.03.09 08: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 09:09
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Только делать так не нужно. В первую очередь стоит заняться алгоритмический оптимизацией или даже архитектурной, а не кидаться писать кастомный аллокатор.

G>Причем этот подход работает для любых языков.

Ты сам недавно писал, что архитектура ортоганальна перформансу
Re[36]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 21.03.09 09:10
Оценка:
Здравствуйте, minorlogic, Вы писали:

H>>У меня был контракт с конторой, в которой зарплата расчитывалась 2.5 суток (!) (большая контора). Они тоже считали это нормальным, пока мы не сократили время до 40 минут (переписали с нуля)


M>Мама мия... решение матрицы 500*500 занимает доли секунды , ЧТО может занимать 40 минут даже если считать зарплату всего земного шара ??? За 40 минут можно отрендрить ролик с симуляцией жидкости и ткани .


Ты наверное не думаешь, что расчет ЗП и решение матрицы это одно и тоже...

M>P.S. вот это и называется различные прикладные области, в моей считаются такты и тригонометрические операции.


Вот я и думаю, ты это серьезно, или прикалываешься
Re[74]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 21.03.09 09:49
Оценка:
Здравствуйте, Erop, Вы писали:

E>Скажем в твоих задачах core обычно на СУБД какой-то реализовано, а в одной из часть core была на C...

Стереотипы... Не надо думать, что на .Net создаются только "коннекторы к БД", это далеко не так. Скажем во всех проектах, на которых я работал, конечно, использовались хранимки, но куча серверной бизнес-логики была на C#. Намного больше чем в SQL и core в этих системах как раз сервер приложений, сплошь себе управляемый.
Re[37]: Работа - с чего начать: С++ или С#?
От: minorlogic Украина  
Дата: 21.03.09 13:09
Оценка:
Здравствуйте, hattab, Вы писали:

H>Вот я и думаю, ты это серьезно, или прикалываешься


Между нами пропасть непонимания.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[37]: Работа - с чего начать: С++ или С#?
От: soniq  
Дата: 22.03.09 12:09
Оценка:
G>Да как раз не все равно. Ты перечитай еще раз о чем я тебе толкую. .NET поребляет больше памяти на практически константную величину. Истории о том что кто-то запустил программу на .NET и она схавала сразу все свидетельствуют о криворукости автора программы, а не об особенностях работы с памятью в .NET.

Насколько я помню, 18 мегабайт это и есть тот самый минимум, который отжирает сам .Net, дальше памяти нужно много меньше.
Re[38]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 22.03.09 15:44
Оценка:
Здравствуйте, soniq, Вы писали:


G>>Да как раз не все равно. Ты перечитай еще раз о чем я тебе толкую. .NET поребляет больше памяти на практически константную величину. Истории о том что кто-то запустил программу на .NET и она схавала сразу все свидетельствуют о криворукости автора программы, а не об особенностях работы с памятью в .NET.


S>Насколько я помню, 18 мегабайт это и есть тот самый минимум, который отжирает сам .Net, дальше памяти нужно много меньше.


Вы неправильно понимаете.

Почитайте http://www.getdotnetcode.com/gdncstore/free/Articles/The%20Memory%20Mystery.htm
Re: Работа - с чего начать: С++ или С#?
От: Кывт Ниоткуда  
Дата: 22.03.09 17:31
Оценка:
С#. Точка.

А C++ можешь изучать в свободное время для общего развития и радоваться, что выбрал C#.

Помни: поменять язык — это тебе не два байта переслать.

Инерцию ума работодателей преодолеть весьма сложно, объясняя им, что со своим опытом и глубоким пониманием программирования ты и на другом языке сможешь прекрасно программировать, хоть у тебя и нет на нем опыта работы вообще, но джуниор-девелопером ты как-то не хочешь быть.

Работодатели считают, что если человек начал когда-то писать на каком-то языке, то так он и должен до гробовой доски на нем писать.

Обычно поменять язык можно, если предоставится подходящая ситуация в фирме и соответствующий проект.

Не припоминаю сишарперов, который вдруг стали сишниками.

Я знаю некоторых программистов, у которых большой опыт в разработке бизнес-приложений на C#, но C++ они в упор не способны понять.

Для C++ часто требуется на порядок более высокая квалификация, а получать ты будешь примерно столько же, сколько C# программист, ну может быть, чуть-чуть больше — в некоторых фирмах. Это относится к России, как в других странах — не знаю.

Если ты раньше писал только на C# бизнес-приложения, то перейти в C++ будет, мягко говоря, трудновато, да и непонятно — зачем?

Я вот который год пишу на C++ и мне как-то немного тревожно за свое будущее…
Re[55]: Работа - с чего начать: С++ или С#?
От: esil  
Дата: 22.03.09 18:52
Оценка:
Здравствуйте, gandjustas, Вы писали:

E>>Как можно не думать о выделении и освобождении объектов, если из-за этого может оказаться очень низкая производительность приложения?

G>Спокойно, и произовдительность нормальная будет.

Т. е. Вы утверждаете, что при правильно выбранном алгоритме независимо от объектной декомпозиции производительность будет одного порядка?

E>>А если я пишу программу на С++, то выбор доступных декомпозиций расширяется. Разве я не прав?

G>Неправ. Слабые выразительне способности C++ не позволяют мере проводить объектую декомпозицию так как хочется.

Примеры?
Re[57]: Работа - с чего начать: С++ или С#?
От: esil  
Дата: 22.03.09 20: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[59]: Поздравляю :D
От: esil  
Дата: 22.03.09 21: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[18]: Работа - с чего начать: С++ или С#?
От: -MyXa- Россия  
Дата: 22.03.09 21:41
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>Я когда пишу на С++ — просто выделяю память, и не занимаюсь её освобожденим — пока в этом нет необходимости.


Тут бы любителям GC и спросить, дескать, как это — "не занимаюсь её освобождением" (и памяти, и других ресурсов, и вообще не ресурсов) и без GC. И, получив ответ, обратиться в веру С++. Увы Вам.
Если не поможет, будем действовать током... 600 Вольт (C)
Re[61]: Поздравляю :D
От: esil  
Дата: 22.03.09 22: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
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 22.03.09 23: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[60]: Поздравляю :D
От: Sinclair Россия https://github.com/evilguest/
Дата: 23.03.09 09:21
Оценка:
Здравствуйте, esil, Вы писали:

E>А Вы считали зачем придумали этот паттерн? Чтобы было круто и все поняли, что авторы паттерна очень умные?

Меня всегда умиляла способность читать книгу и ничерта не понимать.
Ты не заметил, что паттерн позволяет заменить часть программы так, чтобы уменьшить накладные расходы до приемлемых?
При этом основным алгоритмам наплевать, один и тот же там объект или разные.
Это как раз пример того, что мы
а) сначала пишем систему так, как нам удобно — все алгоритмы (например, разбиения на строки и страницы) пишутся очевидным и красивым образом
б) при помощи профайлера выясняем источник проблемы
в) заменяем нехорошую часть алгоритма.
Например, для текстового редактора мы бы всего лишь изменили маленький фрагмент кода, тот, где фабрика Char-ов. Возможно, закомментировали бы метод Char.Equals (чтобы использовать дефолтный ReferenceEquals, который быстрее). И всё! Где тут "заранее проектировать с учетом быстродействия"?
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[57]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 23.03.09 11:55
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Для C++ — нет. Там надо думать о том как распределяется память под объекты.

Только если профайлер тычет пальцем в распределение памяти под объекты. А такое обычно бывает если выделяется много мелких объектиков.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[51]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 23.03.09 12:28
Оценка:
Здравствуйте, CreatorCray, Вы писали:

Посыпаю голову пеплом: забыл добавить еще один вызов (ThreadPoolAlloc::ExitThread()) в конце потока, чтоб грохнуло пул и уже точно всё было учтено

Теперь ThreadPoolAlloc : 0.009068380170764 сек

Exeшники обновил
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[62]: Поздравляю :D
От: Sinclair Россия https://github.com/evilguest/
Дата: 23.03.09 14: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 15:01
Оценка:
Здравствуйте, Sinclair, Вы писали:

H>>И все! Приплыли. Выкинули весь парсинг, валидацию, маппинг и переписали. Лень было проектировать заранее.

S>Это оттого, что вы с самого начала писали маппинг плохим, неочевидным и неудобным способом.
S>Вы перемешали логику реализации с логикой задачи. Конечно вы в итоге огребли. Это стопроцентная гарантия.

S>А вот если бы у вас маппинг был описан декларативно (см. XmlRootAttribute, XmlElementAttribute, XmlAttributeAttribute и т.п.), то вы бы легко заменили DOM-based serializer на SAX-based serializer.


Слушай, ты по фотографии не лечишь? А то появляются у меня смутные подозрения... Ты понимаешь как отличается алгоритм при работе с DOM и SAX? Кардинально. Общности там вообще ни какой нет. Если в случае с DOM я могу делать маппинг с готовой модели, то используя SAX я вынужден маппинг и валидацию делать по ходу пьессы (кстати, речь идет о парсинге).
Re[64]: Поздравляю :D
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 23.03.09 15: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 Россия https://github.com/evilguest/
Дата: 23.03.09 15: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 15:51
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>А с чего ты взял что DOM гораздо удобнее для этой задачи?


С того, что я решил эту задачу используя SAX, и могу со знанием дела утверждать, что удобнее, а что нет в данном случае.

G>Традиционно входящими данными для парсера явяляется поток лексем. В вашем случае интерфейс, представляющий XML как поток лексем — StAX.


Это не просто парсинг XML, это еще и валидация модели XML-RPC + маппинг. К слову сказать, в XML-RPC.NET все сделано на основе DOM, так там алгоритм кристально чист и линеен. В случае с SAX, необходим конечный автомат со стеком (гемороя больше в разы, если не на порядок. но и профита море).
Re[65]: Поздравляю :D
От: hattab  
Дата: 23.03.09 16: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
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 23.03.09 16: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 16: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
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 23.03.09 16: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[66]: Поздравляю :D
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.03.09 18:56
Оценка:
Здравствуйте, hattab, Вы писали:

H>С того, что я решил эту задачу используя SAX, и могу со знанием дела утверждать, что удобнее, а что нет в данном случае.


Не зарекайся. А то когда решить эту задачу с помощью ФВП и рекурсии, то окажется, что это удобнее чем САКсы, шамксы и другие дурДОМы.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[66]: Поздравляю :D
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.03.09 19:00
Оценка:
Здравствуйте, hattab, Вы писали:

H>Это не просто парсинг XML, это еще и валидация модели XML-RPC + маппинг.


А зачем ты вообще это вручную делал? Создал бы по метаинформации подходящий XSD и выполнил бы проверк соответствия схеме твоих данных.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[67]: Поздравляю :D
От: hattab  
Дата: 23.03.09 19:19
Оценка:
Здравствуйте, VladD2, Вы писали:

H>>С того, что я решил эту задачу используя SAX, и могу со знанием дела утверждать, что удобнее, а что нет в данном случае.


VD>Не зарекайся. А то когда решить эту задачу с помощью ФВП и рекурсии, то окажется, что это удобнее чем САКсы, шамксы и другие дурДОМы.


Ну, я же относительно DOM и SAX
Re[67]: Поздравляю :D
От: hattab  
Дата: 23.03.09 19:19
Оценка:
Здравствуйте, VladD2, Вы писали:

H>>Это не просто парсинг XML, это еще и валидация модели XML-RPC + маппинг.


VD>А зачем ты вообще это вручную делал? Создал бы по метаинформации подходящий XSD и выполнил бы проверк соответствия схеме твоих данных.


Во-первых перформанс. Во-вторых у XML-RPC пакетов есть нюансы, которые схемой не описываются. Ну и в третьих, у меня есть некоторые особенности при работе с большим контентом в base64.
Re[68]: Поздравляю :D
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.03.09 19:44
Оценка:
Здравствуйте, hattab, Вы писали:

VD>>А зачем ты вообще это вручную делал? Создал бы по метаинформации подходящий XSD и выполнил бы проверк соответствия схеме твоих данных.


H>Во-первых перформанс.


А ты измерял разницу? Проверка схем вроде как была очень эффективно реализована. Или я ошибаюсь?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[69]: Поздравляю :D
От: hattab  
Дата: 23.03.09 20:20
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>>>А зачем ты вообще это вручную делал? Создал бы по метаинформации подходящий XSD и выполнил бы проверк соответствия схеме твоих данных.


H>>Во-первых перформанс.


VD>А ты измерял разницу? Проверка схем вроде как была очень эффективно реализована. Или я ошибаюсь?


Честно говоря нет. Но тут какое дело, схема мне только проверит валидность модели XML-RPC (хотя по приводимой ссылке сказано, что она этого не может, ну допустим), причем весь пакет у меня должен быть в памяти или доступен для второго прохода (собственно моего маппинга). При ручной валидации + маппинге я имею стек правил и модификаторов допустимости некоторых ситуаций, что позволяет эти операции проводить очень быстро (фактически несколько простых проверок). В общем, такой подход позволил мне получить перформанс парсинга "динамики" (пакетов заранее не известных) на уровне gSOAP с его статическим парсингом.
Re[2]: Работа - с чего начать: С++ или С#?
От: vladimir.vladimirovich США  
Дата: 23.03.09 21:40
Оценка:
Здравствуйте, astral_marine, Вы писали:

_>А самой CRT уже лет 40.


Это copy/paste из DUNUL.PRIDUMAL ?
Re[4]: Работа - с чего начать: С++ или С#?
От: vladimir.vladimirovich США  
Дата: 23.03.09 21:41
Оценка:
Здравствуйте, ononim, Вы писали:

O>А как вы напишете на C# что нить под мак?


Возьмет mono и запустит.
Re[6]: Работа - с чего начать: С++ или С#?
От: vladimir.vladimirovich США  
Дата: 23.03.09 21:42
Оценка:
Здравствуйте, ononim, Вы писали:

O>Ой насмешили Нету такого — Qt Software. Есть лишь библиотека Qt, написанная Trolltech.


И владеет ею теперь мобила всея матрицы — Nokia.
Re[66]: Поздравляю :D
От: Sinclair Россия https://github.com/evilguest/
Дата: 24.03.09 05: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 20: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 20: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 20:56
Оценка:
Здравствуйте, Mamut, Вы писали:

e>> Документ состоит из абзацев. Абзац из "символов".


M>все дальше поскипано. в тх ж GoF, если мне не изеняет память, описано как надо делать для сложного форатирования и т.п.

Там написано не как надо делать, а как можно делать, чтобы избежать больших изжержек.

M>Никому не нужно иметь на каждый символ по классу/экземпляру класса.

Кому не нужно? Вам не нужно. Ну пожалуйста, я не против. А вот те же авторы GoF пишут, что хотелось бы работать с символами как с объектами, но просто так это сделать не позволяют накладные расходы, поэтому они предлагают использовать flyweight в качестве альтернативы. Цитата, которую я привёл, как раз оттуда.
Re[64]: Поздравляю :D
От: Mamut Швеция http://dmitriid.com
Дата: 26.03.09 08:15
Оценка:
e> e>> Документ состоит из абзацев. Абзац из "символов".
e> M>все дальше поскипано. в тх ж GoF, если мне не изеняет память, описано как надо делать для сложного форатирования и т.п.

e> Там написано не как надо делать, а как можно делать, чтобы избежать больших изжержек.


Мнэээ. Зачем говорить то же, что сказал я, только другими словами?


e> M>Никому не нужно иметь на каждый символ по классу/экземпляру класса.


e> Кому не нужно? Вам не нужно. Ну пожалуйста, я не против. А вот те же авторы GoF пишут, что хотелось бы работать с символами как с объектами, но просто так это сделать не позволяют накладные расходы, поэтому они предлагают использовать flyweight в качестве альтернативы. Цитата, которую я привёл, как раз оттуда.


Тогда о чем спор?
avalon 1.0b rev 146


dmitriid.comGitHubLinkedIn
Re[64]: Поздравляю :D
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 26.03.09 09:26
Оценка:
Здравствуйте, esil, Вы писали:

G>>Нафиг не нужны символы текста как отдельные объекты. Строк достаточно.

G>>В таком случае сразу отпадает необходимость использовать flyweight.
E>Строк не достаточно. Как быть с таблицами и картинками? С ними хочется обращаться как с символами.
Разны нету, когда мы перестаем пытаться создавать объкты для отдельных символов, то у нас даже необходимость в flyweight отпадает и мы не мучаемся, а спокойно выделяем память для объектов.

E>Вот для форматирования разных символов можно как раз использовать один и тот же объект "аттрибут". И можно попробовать хранить этот атрибут не для каждого символа, а для интервалов. Но тогда придётся это форматирование передавать каждому символу при рисовании, и картинкам/таблицам тоже.

Не думаю что из этого что-то хорошее получится. Во-первых параметры форматирования для разных типов объектов разные, во-вторых разных вариантов форматирования для одного типа может оказаться очень много и использование flyweight ничего не даст.

E>Ну т. е. я так понял, что мы прили к соглашению, что для обоих вариантов ответ одинаковый, и вы считаете, что этот ответ "нет — обращать внимание на издержки, связанные с аллокациец объектов, не стоит".

Ага, я об этом с самом начала писал, при этом мне говорили что GC настолько медленный, что именно с ним надо обращать внимание на выделяемую память.

E>Ну а как же тогда пример с WYSIWYG? Вы считаете, что архитектура с паттерном flyweight ничуть не хуже, чем использование отдельных объектов для символов?

Конкретно в примере с визивигом хуже, потому что там этот паттерн неуместен на самом деле.
Вообще flyweight не так часто применяется как может показаться.
Re[3]: Работа - с чего начать: С++ или С#?
От: tasiziso  
Дата: 11.04.09 11:40
Оценка:
Здравствуйте, MxKazan, Вы писали:


MK> Про слив понравилось! Посмотрим как ты напишешь программу на C++ с графическим интерфейсом, но независимую от платформы.


http://wxwidgets.org/
... << RSDN@Home 1.2.0 alpha 4 rev. 1144>>
Re: Дык изучи С# + C++ !!
От: vog Россия [реклама удалена модератором]
Дата: 11.04.09 13:46
Оценка:
Здравствуйте, niellune, Вы писали:

А в чем проблема? Изучи оба, языки схожи, по-моему это не проблема. Другое дело, что шарп по умолчанию тянет за собой NET, на С++ под NET наверное специально не пишут и надо осваивать другие библиотеки.
Так что вопрос не в языках, а в том хвосте, что они тянут
[реклама удалена модератором]
Re: С java + scala начинай!
От: dimgel Россия https://github.com/dimgel
Дата: 11.04.09 22:17
Оценка:
Здравствуйте, niellune,

Увидел я в Янусе, что в ветке 200 смайлов, дай думаю зайду хоть поржу... Фууух, ну нафлудили.

Короче, сабж.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[33]: Работа - с чего начать: С++ или С#?
От: snautSH Германия  
Дата: 14.04.09 15:59
Оценка:
M>В плюсах нуб просто не взлетит шутка конечно но ...
тоесть программистом С++ можно только родиться?
Re[34]: Работа - с чего начать: С++ или С#?
От: Sorantis Швеция  
Дата: 15.04.09 23:14
Оценка:
Здравствуйте, snautSH, Вы писали:

M>>В плюсах нуб просто не взлетит шутка конечно но ...

SH>тоесть программистом С++ можно только родиться?

нет, но стать хорошим с++-ником гораздо сложнее чем СиШарпникомКопипастником.
Сам пишу на Шарпе в основном (хотя уже сам не пойму на чем...последнее время сишарп и джава в перемешку с плюсами),
до этого писал на плюсах. шарп люблю, но по плюсам скучаю.. вот такой я сентиментальный
As long as there is life, there is hope
Re[35]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 16.04.09 07:20
Оценка:
Здравствуйте, Sorantis, Вы писали:

S>нет, но стать хорошим с++-ником гораздо сложнее чем СиШарпникомКопипастником.

А копи-паст здесь причем?
Re[3]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 16.04.09 11:12
Оценка:
p> Что еще плохо в C#, это то, что все дотнетчики зависимы от воли левой пятки MS. MS будет выдумывать новые технологии каждые 5 лет. Соответственно участь дотнетчика — постоянное бессмысленное переучивание, освоение новых, перманентно новых технологий для решения одних и тех же задач.

Фигня, что дотнету уже 8 лет и он пока никуда не собирается исчезать?
avalon 1.0b rev 146


dmitriid.comGitHubLinkedIn
Re[4]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 16.04.09 12:44
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>В это время C++ники все еще воюют с проблемами языка и утечек памяти и пользуются средствами десятилетней давности.

Ты изрядно отстал от жизни.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[5]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 16.04.09 12:53
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, gandjustas, Вы писали:


G>>В это время C++ники все еще воюют с проблемами языка и утечек памяти и пользуются средствами десятилетней давности.

CC>Ты изрядно отстал от жизни.
Погоди. Я так понял, что жизнь в С++ остановилась
Автор: Геннадий Васильев
Дата: 15.03.09
давным давно
Re[5]: Работа - с чего начать: С++ или С#?
От: anton_t Россия  
Дата: 17.04.09 04: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[5]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.04.09 05: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]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 17.04.09 05:11
Оценка:
Здравствуйте, ppp222, Вы писали:

P>Здравствуйте, gandjustas, Вы писали:


G>>Вышла новая версия стандарта? Появился сборщик мусора? Код на С++ стал верифицируемым? Появился вывод типов?


P>Сборщик мусора противопоказан С++. Стихия С++ — это эффективный код, где строки — это массив символов, завершающийся нулём, а не вызов библиотечных функций. И не потому, что стандарт С++ какой — то недоразвитый, а потому, что работая таким образом мы получаем прирост производительности от десятков до сотен процентов.


Не далее как вчера написал на F# код, который эффективнее C++-ного варианта в 8 раз. А потом изменением в трех строчках и подключением PFX сделал его распаралеленным.
Re[8]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 17.04.09 22:38
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Не далее как вчера написал на F# код, который эффективнее C++-ного варианта в 8 раз.

смешно
G>А потом изменением в трех строчках и подключением PFX сделал его распаралеленным.
тут даже не смешно
покажи код товарищ, поправим твой с++
People write code, programming languages don't.
Re[7]: Работа - с чего начать: С++ или С#?
От: anton_t Россия  
Дата: 18.04.09 04:17
Оценка:
Здравствуйте, ppp222, Вы писали:

P>Здравствуйте, anton_t, Вы писали:


_>>Не поменялось, а добавилось. Хочешь в 3,5-м дотнете пользоваться WinForms — пользуйся, никто не запрещает.


P>Я тебя умоляю, мне — то эти сказочки не рассказывай. Если MS чего решит, то выпьет обязательно, только я к этим шуточкам отношусь крайне отрицательно


Да не надо меня умолять. С чем ты не согласен? С тем, что в 3,5 можно использовать WinForms? Или ещё с чем?
Re[8]: Работа - с чего начать: С++ или С#?
От: minorlogic Украина  
Дата: 18.04.09 06:36
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Не далее как вчера написал на F# код, который эффективнее C++-ного варианта в 8 раз. А потом изменением в трех строчках и подключением PFX сделал его распаралеленным.


Не стесняйся, код в студию.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[9]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.04.09 12:11
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>Здравствуйте, gandjustas, Вы писали:


G>>Не далее как вчера написал на F# код, который эффективнее C++-ного варианта в 8 раз.

Х>смешно
Ага, я тоже от души поржал когда резщультаты тестов смотрел.

G>>А потом изменением в трех строчках и подключением PFX сделал его распаралеленным.

Х>тут даже не смешно
Х>покажи код товарищ, поправим твой с++
Не, я теперь будут в КСВ поступать также как остальные. Постить результаты тестов без исходников.

Если есть желание, то можете сам написать код, который находит все аддитивные цепочки для заданного числа.
Подробное описание что это и зачем нужно здесь
Re[10]: Работа - с чего начать: С++ или С#?
От: SleepyDrago Украина  
Дата: 19.04.09 17:06
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>>Не далее как вчера написал на F# код, который эффективнее C++-ного варианта в 8 раз.

Х>>смешно
G>Ага, я тоже от души поржал когда резщультаты тестов смотрел.

а потом мы все от души поржем когда кто-нибудь знающий покажет вам результаты F... Fortran'а

зы пишите еще — всегда приятно посмеяться на выходных.
Re[11]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.04.09 17:21
Оценка:
Здравствуйте, SleepyDrago, Вы писали:

SD>Здравствуйте, gandjustas, Вы писали:


G>>>>Не далее как вчера написал на F# код, который эффективнее C++-ного варианта в 8 раз.

Х>>>смешно
G>>Ага, я тоже от души поржал когда резщультаты тестов смотрел.

SD>а потом мы все от души поржем когда кто-нибудь знающий покажет вам результаты F... Fortran'а

Невопрос. Пишите код, задау я привел выше.
Re[11]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 20.04.09 12:59
Оценка:
Здравствуйте, SleepyDrago, Вы писали:

G>>>>Не далее как вчера написал на F# код, который эффективнее C++-ного варианта в 8 раз.

Х>>>смешно
G>>Ага, я тоже от души поржал когда резщультаты тестов смотрел.

SD>а потом мы все от души поржем когда кто-нибудь знающий покажет вам результаты F... Fortran'а


А что мы там увидим? Неужто еще больший прирост производительности?

Я думаю, что gandjustas подразумевает, что на F# получается более эффективный код по критерию (лаконичность+читабельность) / производительность.
Re[14]: Работа - с чего начать: С++ или С#?
От: ollv СССР https://youtu.be/DQDoYs6wHoo
Дата: 23.04.09 20: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]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.04.09 16:08
Оценка:
Здравствуйте, ollv, Вы писали:

O> Ну так и есть и ксамл WPF это хорошо иллюстрирует, и плюсам тянуться за гуями, мне кажется, вообще не стоит, за плюсами мегапреимущество в архитектурных и скоростных решениях, за счет высоких абстракций и шаблонов. Гуя же так ил иначе перекочует в XML подобное оформление, кстати при современных фреймворках с парсингом XML тандем его с плюсами мне кажется вполне приемлемым, даже удобным.


Можно пример высокоуровневой абстракции которую нельзя воспроизвести на языке отличном от С++?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 24.04.09 16:57
Оценка:
Здравствуйте, VladD2, Вы писали:

O>> Ну так и есть и ксамл WPF это хорошо иллюстрирует, и плюсам тянуться за гуями, мне кажется, вообще не стоит, за плюсами мегапреимущество в архитектурных и скоростных решениях, за счет высоких абстракций и шаблонов. Гуя же так ил иначе перекочует в XML подобное оформление, кстати при современных фреймворках с парсингом XML тандем его с плюсами мне кажется вполне приемлемым, даже удобным.


VD>Можно пример высокоуровневой абстракции которую нельзя воспроизвести на языке отличном от С++?


Ну вообще-то таких абстракций много — в зависимости от того с чем сравнивать.
Re[15]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 24.04.09 17:03
Оценка:
Здравствуйте, ollv, Вы писали:

ГВ>>Ну, если xML — это путь кроссплатформенных GUI, то чем дальше C++/Qt от них, тем оно лучше.

O>Ну так и есть и ксамл WPF это хорошо иллюстрирует, и плюсам тянуться за гуями, мне кажется, вообще не стоит, за плюсами мегапреимущество в архитектурных и скоростных решениях, за счет высоких абстракций и шаблонов.

Вот это ты зря сказал. Ща начнётся мерянье длиной абстракции и диаметром спецификации. (понижая голос) Но в общем и целом (шёпотом) я с этим... Тс-с-с!

O>Гуя же так ил иначе перекочует в XML подобное оформление, кстати при современных фреймворках с парсингом XML тандем его с плюсами мне кажется вполне приемлемым, даже удобным.


Честно говоря, XML ведёт по плохому до к слабому янь и сильному инь. Исключение только одно — разметка естественного текста. Для всего остального гораздо лучше подходят S-expressions.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[17]: Работа - с чего начать: С++ или С#?
От: Sorantis Швеция  
Дата: 24.04.09 17:16
Оценка:
Здравствуйте, criosray, Вы писали:

C>Здравствуйте, VladD2, Вы писали:


O>>> Ну так и есть и ксамл WPF это хорошо иллюстрирует, и плюсам тянуться за гуями, мне кажется, вообще не стоит, за плюсами мегапреимущество в архитектурных и скоростных решениях, за счет высоких абстракций и шаблонов. Гуя же так ил иначе перекочует в XML подобное оформление, кстати при современных фреймворках с парсингом XML тандем его с плюсами мне кажется вполне приемлемым, даже удобным.


VD>>Можно пример высокоуровневой абстракции которую нельзя воспроизвести на языке отличном от С++?


C>Ну вообще-то таких абстракций много — в зависимости от того с чем сравнивать.


Можно конкретный пример? Очень интересно, что за абстракцию можно сделать на плюсах которая будет невозможна на Java например?
As long as there is life, there is hope
Re[17]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.04.09 17:34
Оценка:
Здравствуйте, criosray, Вы писали:

C>Ну вообще-то таких абстракций много — в зависимости от того с чем сравнивать.


Ну, хотя бы один пример.

ЗЫ

Я, знаете ли, обожаю читать про разные сверх естественные явления. Не потому, что я в них верю, а просто это очень увлекательно .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[18]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 24.04.09 17:39
Оценка:
Здравствуйте, VladD2, Вы писали:

C>>Ну вообще-то таких абстракций много — в зависимости от того с чем сравнивать.


VD>Ну, хотя бы один пример.


Э-э, классы и объекты в процедурных языках? Шаблоны в Delphi language или VB6?..
Re[20]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 24.04.09 18:08
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Это абстракция? Это костыль помогающий ходить без одной ноги в условиях когда нет автоматического управления памятью.


Так... Попкорном я уже запасся.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[7]: Работа - с чего начать: С++ или С#?
От: Sorantis Швеция  
Дата: 24.04.09 18:20
Оценка:
Здравствуйте, catBasilio, Вы писали:

B>Здравствуйте, gandjustas, Вы писали:


G>>Вышла новая версия стандарта? Появился сборщик мусора? Код на С++ стал верифицируемым? Появился вывод типов?


B> Однажды я участвовал в одном проекте на С++, в котором использовался самопальный сборщик мусора. Причем он был оченб мощный и умел разруливать циклы и всякие сложные зависимости. Так программа с использованием этого gc жрала память как свинья помои. И довольно много времени приходилось искать объект который держал ссылку.

B>Если ты думаешь что в джаве или сишарпе память не может утекать, то ты ОЧЕНЬ заблуждаешься. Там точно также возможны ситуации когда кто-то будет держать объект, из-за этого не будет вызван его деструктор, а из-за этого не будет закрыт ремотный коннекшин ...

Но в Сишарпе так же можно использовать сборщик мусора ручками, если не доверяешь автоматической сборке.
As long as there is life, there is hope
Re[20]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 24.04.09 18:32
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Не стоит даже заикаться на счет каких-то там преимуществ С++ в области языковых возможностей и тем более абстракций. Это чушь!

угу, ты ето говоришь года едак с 2002-го, когда C# был настолько убог что даже твой нелюбимый С++ обходил его с головой.
покажи как мне выразить такую простую абстракцию: параметр метода — как ссылка на константный объект, или ммм... такую "фичу" как множественное наследование, или скажем, статический полиморфизм, слышал о таком?
People write code, programming languages don't.
Re[8]: Работа - с чего начать: С++ или С#?
От: catBasilio  
Дата: 24.04.09 18:35
Оценка:
Здравствуйте, Sorantis, Вы писали:

S>Но в Сишарпе так же можно использовать сборщик мусора ручками, если не доверяешь автоматической сборке.


А что, у Сишарповского сборщика мусора уже telepaty mode появился?


static void Main(string[] args)
{
MyObject[] manyObjects = new MyObjects[10000000]; 

Console.WriteLine(manyObjects[1]);

...
// многа кода
}


неиспользуемые объекты будут держаться до заврешения программы.
И попробуй убеди меня что это не утечка памяти. И я очень сомневаюсь gc при вызове "ручками" поймет что это некому не нажный код и удалит его.

P.S. это высосанный из пальца пример, но проблему он показывает вполне.
UNIX way — это когда тебе вместо туалетной бумаги дают топор, рубанок и карту близлежащего леса
Re[21]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.04.09 18:40
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Так... Попкорном я уже запасся.


Тогда давай делись!
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 24.04.09 18:42
Оценка:
Здравствуйте, VladD2, Вы писали:
VD>Если уж речь пошла о фичах, то я с удовольствием погляжу на то чем ты заменишь лямбды с замыканиями
лично я заменяю их на императивный цикл for
сейчас уже есть возможность писать в функциональном стиле, да, скачай msvc10 (CTP) и возрадуйся лямбдам (да ещё и с замыканиями!)
People write code, programming languages don't.
Re[22]: Работа - с чего начать: С++ или С#?
От: catBasilio  
Дата: 24.04.09 18:44
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Хвост, Вы писали:


Х>>угу, ты ето говоришь года едак с 2002-го, когда C# был настолько убог что даже твой нелюбимый С++ обходил его с головой.


VD>Начиная со 2-й версии С++ нервно курит в сторонке.

VD>А начиная с 2006-го я вообще перешел на Nemerle до которого C# расти еще лет 10, а С++ уже никогда не дорастет.

Если С# так хорош, то почему всякие Crysis, Quake, FarCry и прочее на нем не пишут?
UNIX way — это когда тебе вместо туалетной бумаги дают топор, рубанок и карту близлежащего леса
Re[22]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 24.04.09 18:49
Оценка:
Здравствуйте, VladD2, Вы писали:
VD>О статическом не слышал. О параметрическом слышал. Можешь открыть новую страницу истории и поведать миру о статическом полиморфизме.
а погуглить? первая ссылка по запросу static polymorphism даёт представление что ето такое и как ето пользовать.

VD>В общем, не стоит так напрягаться. Этому гнилью даже новый стандарт не поможет. Кстати, где он? (с)

ето твоему немерлю ничего не поможет, мертворождённый проект.
People write code, programming languages don't.
Re[22]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 24.04.09 19:03
Оценка:
Здравствуйте, VladD2, Вы писали:

ГВ>>Так... Попкорном я уже запасся.

VD>Тогда давай делись!

Дык!

Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[21]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.04.09 19:13
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>покажи как мне выразить такую простую абстракцию: параметр метода — как ссылка на константный объект

Всю константность в С++ можно с успехом обмануть, кроме того константность не является абстракцией

Х>или ммм... такую "фичу" как множественное наследование

Ага, еще скажи что виртуальный базовый класс — нереальная фича

Х>или скажем, статический полиморфизм, слышал о таком?

Перегрузка методов является одим из видов статического полиморфизма, она есть в C#
Re[23]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 24.04.09 19:21
Оценка:
Здравствуйте, catBasilio, Вы писали:

VD>>Начиная со 2-й версии С++ нервно курит в сторонке.

VD>>А начиная с 2006-го я вообще перешел на Nemerle до которого C# расти еще лет 10, а С++ уже никогда не дорастет.

B>Если С# так хорош, то почему всякие Crysis, Quake, FarCry и прочее на нем не пишут?


Вы еще спросили бы почему на С# драйверы не пишут.
Re[9]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 24.04.09 19:24
Оценка:
Здравствуйте, catBasilio, Вы писали:

B>P.S. это высосанный из пальца пример, но проблему он показывает вполне.


Этот пример абсолютно нереалистичен. На практике такого не случается.
Re[22]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 24.04.09 19:27
Оценка:
Здравствуйте, gandjustas, Вы писали:

Х>>покажи как мне выразить такую простую абстракцию: параметр метода — как ссылка на константный объект

G>Всю константность в С++ можно с успехом обмануть,
не понял к чему было про "обмануть", ето тоже самое что грить C# небезопасен потому что есть ансейф
G>кроме того константность не является абстракцией
называй как хочешь, но вот то что такой нужной вещи нет в C# ето просто поразительно.

Х>>или ммм... такую "фичу" как множественное наследование

G>Ага, еще скажи что виртуальный базовый класс — нереальная фича
ты начинаешь говорить как заядлый холиварщик, "етого у нас нет потому что можно обойти окольными путями"


Х>>или скажем, статический полиморфизм, слышал о таком?

G>Перегрузка методов является одим из видов статического полиморфизма, она есть в C#
перегрузка методов ето скорее ad-hoc полиморфизм, и до статического полиморфизма тут как раком до пекина, а вот статический полиморфизм в с++ ето скорее похоже на утиную типизацию, и заметь ноль оверхеда.
People write code, programming languages don't.
Re[10]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 24.04.09 19:30
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Кстати тесты по быстродействию операций выделения-освобождения памяти в с++ и .NET я приводил — C++ сливает.

G>И это без умных указателей и прочей лабуды, с ними банальная вещь — работа с памятью — будет еще медленнее.
ты вообще в курсе про стек? наша песня хороша, начинай сначала? подавляющее число аллокаций в с++ происходит на стеке, заруби себе ето на носу, и там твой гц сливает аж не балуй.
People write code, programming languages don't.
Re[21]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 24.04.09 19: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 19:39
Оценка:
Здравствуйте, Хвост, Вы писали:

G>>Кстати тесты по быстродействию операций выделения-освобождения памяти в с++ и .NET я приводил — C++ сливает.

G>>И это без умных указателей и прочей лабуды, с ними банальная вещь — работа с памятью — будет еще медленнее.
Х>ты вообще в курсе про стек? наша песня хороша, начинай сначала? подавляющее число аллокаций в с++ происходит на стеке, заруби себе ето на носу, и там твой гц сливает аж не балуй.

Да где сливает-то? Покажите бенчмарки, основанные на реальном (желательно production) коде.
Re[25]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 24.04.09 19:40
Оценка:
Здравствуйте, Хвост, Вы писали:

G>>Если C++ так хорош, то почему на нем не пишут тысячи бизнес-систем?

Х>потому что бизнес-логика может писатся хоть на скриптах, всем начхать на оверхед, упирается в базу обычно. То что интерфейс лагает слегка — не имеет ни для кого значения. Обсуждалось уже вроде.
Вам только кажется. Нигде ничего не лагает.
Re[24]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 24.04.09 19:43
Оценка:
Здравствуйте, gandjustas, Вы писали:
G>Почему самые высоконагруженные сайты написаны не на С++?
для сайтов легче купить несколько серверных стоек, чем заплатить программистам на С++ выше рынка, к сайтам скорее требование к масшабированию чем к производительности, хотя в гугле и в яндексе афаик ядро поиска написано на С++, наверное потому что им уже есть резон економить на серверах.
People write code, programming languages don't.
Re[25]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 24.04.09 19:46
Оценка:
Здравствуйте, Хвост, Вы писали:

G>>Почему самые высоконагруженные сайты написаны не на С++?

Х>для сайтов легче купить несколько серверных стоек, чем заплатить программистам на С++ выше рынка, к сайтам скорее требование к масшабированию чем к производительности, хотя в гугле и в яндексе афаик ядро поиска написано на С++, наверное потому что им уже есть резон економить на серверах.
Откуда информация? Дайте ссылку на авторитетный источник.
Re[23]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 24.04.09 19:47
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

Х>>>или ммм... такую "фичу" как множественное наследование,

C>>Множественное наследование — моветон, сродни goto. Это ХОРОШО, что его нету, иначе количество граблей, генерируемых индусами возразло бы экспоненциально.

ГВ>Ты уверен, что апелляция к "индусам" в этом контексте выглядит позитивно?


Нет, но зато реалистично. Индусы — вездесущи. ;(
Re[24]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 24.04.09 19:55
Оценка:
Здравствуйте, criosray, Вы писали:

ГВ>>Ты уверен, что апелляция к "индусам" в этом контексте выглядит позитивно?

C>Нет, но зато реалистично. Индусы — вездесущи. ;(

И это является проблемой множественнного наследования? ИМХО, это завихрения текущего контекста, ничего больше. В отличие от goto, который сам по себе ничуть не вреден (вредно запутывание программы хаосом из goto).
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[22]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 24.04.09 19: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 19:59
Оценка:
Здравствуйте, criosray, Вы писали:
Х>>ты вообще в курсе про стек? наша песня хороша, начинай сначала? подавляющее число аллокаций в с++ происходит на стеке, заруби себе ето на носу, и там твой гц сливает аж не балуй.
C>Да где сливает-то? Покажите бенчмарки, основанные на реальном (желательно production) коде.
ээээ, даже не знаю что сказать как ты представляешь себе бенчмарки продакшн кода в плане аллокация на стеке vs аллокация c gc?
People write code, programming languages don't.
Re[11]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.04.09 20:03
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>Здравствуйте, gandjustas, Вы писали:


G>>Кстати тесты по быстродействию операций выделения-освобождения памяти в с++ и .NET я приводил — C++ сливает.

G>>И это без умных указателей и прочей лабуды, с ними банальная вещь — работа с памятью — будет еще медленнее.
Х>ты вообще в курсе про стек? наша песня хороша, начинай сначала? подавляющее число аллокаций в с++ происходит на стеке, заруби себе ето на носу, и там твой гц сливает аж не балуй.
Ну статистику в студию, что где происходит и кто кому сливает.

Я немало писал на С++ чтобы знать где и как выделяется память.
Или местые зубры не используют STL, динамический полиморфизм, паттерны? Все наверное на шаблонах и на стеке.
Re[25]: плохо изложил
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 24.04.09 20:06
Оценка:
...В отличие от goto, с которым можно связать некоторую опасность, создающуюся при неумереннном использовании оного.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[25]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.04.09 20:07
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>P.S.: Но это всё не аргументы. По устоявшейся RSDN-овской традиции Настоящие Весомые Аргументы Против C++ должны содержать слова из такого ряда: фобия, замшелость, стереотип, мемори лик, проход по памяти, миллионы программистов, википедия, тузик, тряпка, рвать, мозг, затычка, косность. Можно даже шпаргалку составить.

Лучше мастер-класс на манер Владимира Кочеткова для начинающих холиварщиков.
Re[23]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.04.09 20: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 20:13
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>>>ты вообще в курсе про стек? наша песня хороша, начинай сначала? подавляющее число аллокаций в с++ происходит на стеке, заруби себе ето на носу, и там твой гц сливает аж не балуй.

C>>Да где сливает-то? Покажите бенчмарки, основанные на реальном (желательно production) коде.
Х>ээээ, даже не знаю что сказать как ты представляешь себе бенчмарки продакшн кода в плане аллокация на стеке vs аллокация c gc?

Так это Вы утверждаете, что сливает... Я ничего не утверждаю, а лишь прошу обосновать Ваши слова реальным кодом, а не синтетическими попугайчиками или, того хуже, Вашими догадками... Всего-то.
Re[25]: Работа - с чего начать: С++ или С#?
От: Anton Batenev Россия https://github.com/abbat
Дата: 24.04.09 21:04
Оценка:
Здравствуйте, Хвост, Вы писали:

Х> То что интерфейс лагает слегка — не имеет ни для кого значения. Обсуждалось уже вроде.


Все зависит от того, сколько это "слегка" в числовом выражении.
avalon 1.0rc1 rev 232, zlib 1.2.3
Re[23]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 24.04.09 21: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 21: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[27]: Работа - с чего начать: С++ или С#?
От: Anton Batenev Россия https://github.com/abbat
Дата: 24.04.09 21:57
Оценка:
Здравствуйте, Хвост, Вы писали:

Х> Halo 3 вообще никаким боком к XNA не касается, что и не удивительно для игры класса AAA.


Я просто не в теме, расскажи, а что значит AAA?
avalon 1.0rc1 rev 232, zlib 1.2.3
Re[16]: Работа - с чего начать: С++ или С#?
От: ollv СССР https://youtu.be/DQDoYs6wHoo
Дата: 24.04.09 21: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 22: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]: Работа - с чего начать: С++ или С#?
От: Sorantis Швеция  
Дата: 24.04.09 22: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[29]: Работа - с чего начать: С++ или С#?
От: Anton Batenev Россия https://github.com/abbat
Дата: 24.04.09 22:16
Оценка:
Здравствуйте, Хвост, Вы писали:

Х> AB>Я просто не в теме, расскажи, а что значит AAA?

Х> Short answer:
Х> High-quality games with high budget.

Не, хотелось бы для саморазвития. Что есть ААА, что есть BBB. В смысле какую-нибудь табличку сравнительную с приблизительными числовыми характеристиками.
avalon 1.0rc1 rev 232, zlib 1.2.3
Re[31]: Работа - с чего начать: С++ или С#?
От: Anton Batenev Россия https://github.com/abbat
Дата: 24.04.09 22:35
Оценка:
Здравствуйте, Mamut, Вы писали:

M> Чектого определения нет. Обычно просто обозначает высококачественную игру с большим бюдэетом.


А предполагается, что качество напрямую коррелирует с размером бюджета?
avalon 1.0rc1 rev 232, zlib 1.2.3
Re[16]: Работа - с чего начать: С++ или С#?
От: ollv СССР https://youtu.be/DQDoYs6wHoo
Дата: 24.04.09 22: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 22: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 22: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 Batenev Россия https://github.com/abbat
Дата: 24.04.09 22:47
Оценка:
Здравствуйте, Хвост, Вы писали:

Х> Про "BBB" игры не слышал, разве что в качестве метафоры.


Про ВВВ — это я сам придумал по аналогии с ААА — именно про классификацию и критерии классификации я и хотел узнать.
avalon 1.0rc1 rev 232, zlib 1.2.3
Re[24]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 24.04.09 23:00
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>В этом месте все сторонники C# начинают громко смеяться

G>1)строки в C# иммутабельны, при всем желании ты не затрешь строку, которую использует кто-то другой.
G>2)присваивание строковой переменной литерального значения приводит только к копированию ссылки, в отличие от C++

G>Поэтому о правильном поведении кода без const модно даже не задумываться, и работать это будет быстрее C++ного варианта.

пойнт был не в строках а в константности объектов, замени строку на экземпляр своего класса и разрыдайся вместе со сторонниками C#
People write code, programming languages don't.
Re[19]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.04.09 23: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]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.04.09 23:10
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>Здравствуйте, gandjustas, Вы писали:


G>>В этом месте все сторонники C# начинают громко смеяться

G>>1)строки в C# иммутабельны, при всем желании ты не затрешь строку, которую использует кто-то другой.
G>>2)присваивание строковой переменной литерального значения приводит только к копированию ссылки, в отличие от C++

G>>Поэтому о правильном поведении кода без const модно даже не задумываться, и работать это будет быстрее C++ного варианта.

Х>пойнт был не в строках а в константности объектов, замени строку на экземпляр своего класса и разрыдайся вместе со сторонниками C#
Тоже ничего не произойдет, поменяется ссылка внутри метода.
Будет плохо если лезть в поля объекта, но так мало кто делает, потому что можно вернуть новый объект из метода и не заботиться о его времени жизни. В C++ так нельзя.
Re[18]: Работа - с чего начать: С++ или С#?
От: ollv СССР https://youtu.be/DQDoYs6wHoo
Дата: 24.04.09 23: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]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 24.04.09 23:14
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>Здравствуйте, gandjustas, Вы писали:

G>>Читать больше надо. От константности отказались как раз в силу сложности обеспечения честной константности.
Х>а теперь расскажи мне, в чём сложность обеспечения четной константности, если даже C++ ето отлавливает на етапе компиляции?
На этапе компиляции как раз проще всего это сделать. Гарантировать на этапе выполнения константность всего объекта сложно и затратно.

Х>если в с++ запретить касты, разрушающие константность то окромя прямой работы с памятью возможностей изменить константный объект нет, почему же весь такой сейфанутый C# не одолел модификатор const?

Видимо потому что .NET не до конца safe из-за того что работает в unsafe окружении решили не обманывать народ с нечестной константностью.
А вообще const — не самое важно что может быть в язке, иммутабельность гораздо круе в этом плане.
Re[26]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 25.04.09 06:22
Оценка:
Здравствуйте, gandjustas, Вы писали:

Х>>пойнт был не в строках а в константности объектов, замени строку на экземпляр своего класса и разрыдайся вместе со сторонниками C#

G>Тоже ничего не произойдет, поменяется ссылка внутри метода.
G>Будет плохо если лезть в поля объекта, но так мало кто делает, потому что можно вернуть новый объект из метода и не заботиться о его времени жизни. В C++ так нельзя.

Можно, но так не любят делать, чтобы не связываться с дополнительным оверхедом по быстродействию.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[30]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 25.04.09 08: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>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[10]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 25.04.09 08: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]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.04.09 09:13
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>Запустил в debug — массив жил на протяжении работы приложения.

MK>Запустил в release, но из под Студии — массив жил на протяжении работы приложения.
MK>Запустил в release просто из Проводника — объекты массива d начали собираться GC еще на этапе загрузки главного окна приложения.

При подключении дебагера время жизни локальных переменных продляется до конца блока.
Re[27]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.04.09 09:15
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Здравствуйте, gandjustas, Вы писали:


Х>>>пойнт был не в строках а в константности объектов, замени строку на экземпляр своего класса и разрыдайся вместе со сторонниками C#

G>>Тоже ничего не произойдет, поменяется ссылка внутри метода.
G>>Будет плохо если лезть в поля объекта, но так мало кто делает, потому что можно вернуть новый объект из метода и не заботиться о его времени жизни. В C++ так нельзя.

ГВ>Можно, но так не любят делать, чтобы не связываться с дополнительным оверхедом по быстродействию.




Это в языке, который не имеет оверхедов (с)
Re[21]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.04.09 09: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 09:38
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>>Будет плохо если лезть в поля объекта, но так мало кто делает, потому что можно вернуть новый объект из метода и не заботиться о его времени жизни. В C++ так нельзя.


ГВ>>Можно, но так не любят делать, чтобы не связываться с дополнительным оверхедом по быстродействию.


G>


G>Это в языке, который не имеет оверхедов (с)


Никто не утверждал, что на C++ бесконечный цикл исполняется за 0 секунд.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[13]: Работа - с чего начать: С++ или С#?
От: SleepyDrago Украина  
Дата: 25.04.09 11:06
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Да вот в этот раз нет. Именно по замерам времени выполнения код на F# оказался быстрее C++_ного варианта в 8 раз.


G>Правда никто мегаоптимизацией на С++ не занимался.

G>Вот и хочется увидеть вариант решения задачи на С++ от крутых перцев из КСВ.
видимо крутые перцы из КСВ заняты
я тут мимо прохожу раз в N дней, от того и лаги.
Судя по цифрам тот код на плюсах что у вас есть ничего не стоит — так что
обрежьте лишнее, и кидайте на публичный ресурс а ссылку в ответ.
Когда меня чужие баги задалбывают я для отдыха гоняю профайлер — так что если алгоритмы примерно похожи выгребание ошибок первого порядка позволит С++ "не ударить в грязь лицом".

зы. сделайте тестовый набор данных, эталон. Длина запуска не больше 5 минут на типовом железе. Мне вот может придется винду поставить ради этого — так что если будет совсем грустно то могу и забить.
Re[23]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.04.09 11: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]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.04.09 11:49
Оценка:
Здравствуйте, SleepyDrago, Вы писали:

SD>Здравствуйте, gandjustas, Вы писали:


G>>Да вот в этот раз нет. Именно по замерам времени выполнения код на F# оказался быстрее C++_ного варианта в 8 раз.


G>>Правда никто мегаоптимизацией на С++ не занимался.

G>>Вот и хочется увидеть вариант решения задачи на С++ от крутых перцев из КСВ.
SD>видимо крутые перцы из КСВ заняты
За то время, котороекрутые перцы потратили на постинг булшита могли бы уже такую простую программку написать.
Re[20]: Работа - с чего начать: С++ или С#?
От: ollv СССР https://youtu.be/DQDoYs6wHoo
Дата: 25.04.09 12: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 12:39
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>>Правда никто мегаоптимизацией на С++ не занимался.

G>>>Вот и хочется увидеть вариант решения задачи на С++ от крутых перцев из КСВ.
SD>>видимо крутые перцы из КСВ заняты
G>За то время, котороекрутые перцы потратили на постинг булшита могли бы уже такую простую программку написать.
если не интересно здесь кидайте к себе в блог. Ссылки на идею алгоритма недостаточно для того чтобы сдвинуть с места ленивого человека
Re[25]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.04.09 13:07
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>С другой стороны, в самом по себе паттерне IoC ничего запредельного нет, мне сейчас любопытно поиграться в тех ограничениях, которые ты предложил.

Удачи. Учти что ни одной толковой реализации IoC-контейнера на C++ с конфигурированием в рантайме нету.
Я видел только решения с precompile-time кодогенерацией.

ГВ>>>И как это опровергает сказанное мной? Что если фича реализована средствами языка — это не недостаток самого языка?

G>>Если фича востребована, а реализация делается через непонятно что. причем за много лет в самом языке это не было исправлено, то это однозначно свидетельствует о недостатке языка.
ГВ>В лучшем случае, это свидетельствует о недостатках процесса управления разработкой языка.
Наличие надостатков в управлении разработкой веде к недостаткам в самом языке.

ГВ>Мало ли какие фичи могут оказаться востребованными?

Есть другие языки, достаточно смотреть по сторонам и думать головой.
Кстати разработчики C# сейчас демонстрируют обратный паттерн поведения, и мне реально иногда становится страшно за будущее шарпа.

ГВ>>>Вопросы были риторическими. Иными словами, на самом деле проблем с совместимостью и интероперабельностью хватает у всех, так что выпячивать аналогичные недостатки C++ как некие особенные тут нет никакого смысла.

G>>На самом деле проблем нету, потому что все описанное является только потенциальными проблемами и очень редко встречается в жизни. Тогда как интероп между C++_ными библиотеками встречается часто.

ГВ>Как ни странно, но даже это вполне объяснимо количеством производителей компиляторов. В отличие от той же Java и тем более — от .Net. Кстати, заморочки с переносом кода между .Net и Mono, AFAIK, имеют место быть.

Не имеют, надо только уметь готовить.
Специально поставил второй моно, написал на нем Winforms прогу, не используя mono-scecific библиотеки, и она запустилась под .NET без перекомпиляции.
Если хочется переносимости — надо использовать переносимое подмножество библиотек, это аксиома для любого языка.
Re[22]: Работа - с чего начать: С++ или С#?
От: ollv СССР https://youtu.be/DQDoYs6wHoo
Дата: 25.04.09 15: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 16:36
Оценка:
Здравствуйте, kochetkov.vladimir, Вы писали:
MK>>Сначала Дворкин меня задалбывал этим предсказаниями чего там будет через 10-20 лет, теперь вот ты

KV>Не-не-не, он в конце-концов сдался и написал, что "конца С# не будет и никуда он не денется" Re: Сишарпкапец наступает
Автор: Pavel Dvorkin
Дата: 10.03.09


А какие проблемы ... даже если он изчезнет. Многие С# программисты с удовольствием с ним попрощаются если будет предложено что-то еще более эффективное. К ЯП понятие верность "неуместно". Только вот к тому времени на С++ будут еще меньше писать.

Вобще-то новинки вводят для того чтобы производительность труда программистов повысить. Не хочется не изучай. И вобще-то в C# (как языке) все новинки которые были — совсем мизерные в плане их изучения (2-3 дня) но не по полезности мизерные. Так что ворчать по поводу изменений стандарта С# вобще неуместно. ... Если меняются библиотеки это уже другое дело...
Re[24]: Работа - с чего начать: С++ или С#?
От: ollv СССР https://youtu.be/DQDoYs6wHoo
Дата: 25.04.09 17: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[26]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 25.04.09 21: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]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 25.04.09 23: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 23: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[21]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 26.04.09 00:07
Оценка:
Здравствуйте, ollv, Вы писали:


O>>>>> Кроме того, на плюсах вполне реализуемы элементы не родственных стурктур, к примеру итерации for_each, find_if count_if, функторы, придают плюсам оттенки функциональных языков

G>>>>ржунимагу. шаблоны позволяют сделать то что уже есть в других языках
O> ну посмейся, может в процессе придет понимание того, что в с++ есть возможность сделать то, чего нет в других языках,
окончу мысль: ...чего нет в других языках и не надо

Вы кроме Александреску вообще что-то читали? А реальным программированием занимались?
Re[26]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 26.04.09 00: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[27]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 26.04.09 10: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 10: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 11:42
Оценка:
Здравствуйте, Хвост, Вы писали:

C>>Запредельное? Патерн IoC в управляемых языках реализуется на базовом уровне за минут 40-50 максимум неопытными студентами.

Х>http://code.google.com/p/pococapsule/
Х>с использованием етой библиотеки реализуется минут за 5-10 опытными программистами на C++

Хех. Оно там уже реализовано. Интересно поиграться "с нуля".
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[28]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 26.04.09 11:46
Оценка:
Здравствуйте, criosray, Вы писали:

Х>>с использованием етой библиотеки реализуется минут за 5-10 опытными программистами на C++

C>Вы ведь опытный программист, да? Реализацию в студию.
реализацию чего? пока по вашим постам я только понял что вы хотите что-то вроде service locator'а, а не IoC контейнера. Лучше опишите задачу, как вы её решаете с помощью вашего фреймворка, и посмотрим что в етом случае делают в С++.
People write code, programming languages don't.
Re[24]: Работа - с чего начать: С++ или С#?
От: minorlogic Украина  
Дата: 26.04.09 16: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 19: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 19:27
Оценка:
Здравствуйте, criosray, Вы писали:

C>Ну Вы сделайте для начала то, что уже Вам накидали.


Сабж
Автор: Геннадий Васильев
Дата: 26.04.09
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[25]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 26.04.09 19:39
Оценка:
Здравствуйте, minorlogic, Вы писали:

ГВ>>>Ты уверен, что апелляция к "индусам" в этом контексте выглядит позитивно?

C>>Нет, но зато реалистично. Индусы — вездесущи. ;(
M>Ты называешь шарп языком для индусов ? ну ты счас тут отгребешь ...

Где? На 25-м уровне вложенности ветки из 900 сообщений, расположенной в КСВ? Отгрести? Только если очень напрашиваться!
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[28]: Кстати
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 26.04.09 19: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 Российская Империя www.nemerle.org
Дата: 26.04.09 20:08
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>лично я заменяю их на императивный цикл for


Мне тебя очень жалко.

Х>сейчас уже есть возможность писать в функциональном стиле, да, скачай msvc10 (CTP) и возрадуйся лямбдам (да ещё и с замыканиями!)


Ой не верю. Для этого нужно GC. Или снова будут UB там и сям.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 26.04.09 20:12
Оценка:
Здравствуйте, VladD2, Вы писали:

Х>>сейчас уже есть возможность писать в функциональном стиле, да, скачай msvc10 (CTP) и возрадуйся лямбдам (да ещё и с замыканиями!)


VD>Ой не верю. Для этого нужно GC.


Нет. GC для этого не обязателен.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[23]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.04.09 20:16
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>а погуглить? первая ссылка по запросу static polymorphism даёт представление что ето такое и как ето пользовать.


Погугли и почитай, что за бред там пишется. Все про С++. Это локальная терминалогия отдельных идиотов. Научного понятия статического полиморфизма нет. Есть статическая типизация и разные виды полиморфизма. Но любой из них может отрабатывать в рантайме.

VD>>В общем, не стоит так напрягаться. Этому гнилью даже новый стандарт не поможет. Кстати, где он? (с)

Х>ето твоему немерлю ничего не поможет, мертворождённый проект.

Странный способ ответита на вопрос. Ну, да ладно.

Гы. Шарп уже впитал из Немерла добрую половину и продолжает двигаться в этом направлении. Лет через 10 C# станет немерлом со шрамами оставленными эволюцией. Это как минимум. А как максимум я тебе пришлю эту ссылочку и посмотрю на то как ты будешь выкручиваться.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[23]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.04.09 20:17
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Дык!


ГВ>


Не, так не честно. Слюноотделение есть, а вкуса нет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[27]: Простенький IoC на C++
От: criosray  
Дата: 26.04.09 20:54
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Собирается VS2K5, там собственно IoC.h и IoC_COM.h — реализация контейнера, остальное тесты и примочки. Дальше см. комментарии, если что не понятно — спрашивай здесь.


Пока код не читал, но интересно — это нынче стандартная практика пихать в хидеры реализацию?

Комментарии по делу будут позже...
Re[28]: Простенький IoC на C++
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 26.04.09 21:05
Оценка:
Здравствуйте, criosray, Вы писали:

C>Пока код не читал, но интересно — это нынче стандартная практика пихать в хидеры реализацию?


Там всё на шаблонах.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[23]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 26.04.09 21:24
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

VD>>Ой не верю. Для этого нужно GC.


ГВ>Нет. GC для этого не обязателен.


Из известных мне вариантов есть еще только подсчет ссылок. Но он тоже вряд ли может быть применен в рамках С++, так как объект не обязаны его реализовывать. Да и подсчет ссылок приводит к зацикливаниям, которые потенциально тоже можно разрыват (пример — Руби), но это опять же проблематично. По любому, подсчет ссылок или GC — это все вариации на тему автоматического управления памятью.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[24]: Работа - с чего начать: С++ или С#?
От: Lloyd Россия  
Дата: 26.04.09 23:08
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Почему самые высоконагруженные сайты написаны не на С++?


Высоконагруженные части некоторых высоконагруженных сайтов-таки написаны на С/C++.
Не так давно на InfoQ было видео выступления одного из разработчиков FaceBook-а. Посмотри, там много интересного было разсказано.
Re[27]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 27.04.09 07:25
Оценка:
ГВ> Тут вопрос в другом: удалось реализовать фичу X средствами самого языка ("понятно какими" или "непонятно какими" — совершенно не важно) или нет. Если не удалось — значит возможностей языка для этой фичи не хватает. Если удалось, то относить сей факт к "недостаткам" можно, ИМХО, только по каким-то очень вычурным соображениям вроде очередного "миллиона индусов, которые завалят нас багами".

Все Тьюринг-полные языки равны друг другу по возможностям (ну то есть то, что решается одной строчкой на Хаскеле, можно решить тысячью строк на ассемблере). Другой вопрос — а надо ли, и не взять ли в руки инструмент, котороый повышает эффективность разработки?
avalon 1.0b rev 146


dmitriid.comGitHubLinkedIn
Re[19]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 27.04.09 08:58
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Всё это, конечно, правильно, хоть и с некоторыми поправками. Но поправки сейчас не суть важны. Важно другое: что та самая "область" в которой царят все за компанию (кроме C++) магическим образом не пересекается с теми областями, в которых от C++ никак не могут (и не хотят) избавиться по сугубо практическим соображениям. То есть, она как бы есть, но её значимость как бы слегка эфемерна по отношению к тому набору требований, с которым приходится иметь дело C++-никам.

Ну конечно не избавишься сразу от C++ везде. Есть тонны кода на C++, которые приносят много денег и этот код надо саппортить, есть кучи программистов, которых не выгонишь на улицу в один момент, есть кучи недалеких менеджеров, которые кроме C++ других языков и не слышали.
Только ни один из этих факторов не говорит что С++ чем-то хорош.
Re[20]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 27.04.09 09:41
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Ну конечно не избавишься сразу от C++ везде. Есть тонны кода на C++, которые приносят много денег и этот код надо саппортить, есть кучи программистов, которых не выгонишь на улицу в один момент, есть кучи недалеких менеджеров, которые кроме C++ других языков и не слышали.

G>Только ни один из этих факторов не говорит что С++ чем-то хорош.

А я разве говорил о дихотомии "хорошо-плохо"?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[28]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 27.04.09 10:22
Оценка:
Здравствуйте, Mamut, Вы писали:

ГВ>> Тут вопрос в другом: удалось реализовать фичу X средствами самого языка ("понятно какими" или "непонятно какими" — совершенно не важно) или нет. Если не удалось — значит возможностей языка для этой фичи не хватает. Если удалось, то относить сей факт к "недостаткам" можно, ИМХО, только по каким-то очень вычурным соображениям вроде очередного "миллиона индусов, которые завалят нас багами".


M>Все Тьюринг-полные языки равны друг другу по возможностям (ну то есть то, что решается одной строчкой на Хаскеле, можно решить тысячью строк на ассемблере). Другой вопрос — а надо ли, и не взять ли в руки инструмент, котороый повышает эффективность разработки?


А кто-то с этим спорит? По-моему, тут грызня о мифических фатальных недостатках C++ и тех, кто на нём программирует. Собственно, пропоненты такой позиции, ИМХО, традиционно поступают в строгом соответствии с советами Тристана:

Если вы на женщин слишком падки,
В прелестях ищите недостатки.
Станет сразу все намного проще:
Девушка стройна, мы скажем: мощи!

Умницу мы наречем уродкой,
Добрую объявим сумасбродкой.
Ласковая — стало быть, липучка,
Держит себя строго — значит, злючка.

Назовем кокетливую шлюхой,
Скажем про веселую — под мухой.
Пухленькая — скоро лопнет с жиру,
Щедрую перекрестим в транжиру.

Ну, а бережлива? — Окрестим в сквалыгу!
Если маленькая? — Ростом с фигу!
Если рослая? — Тогда верзила!


(c)
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[22]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 27.04.09 10:27
Оценка:
Здравствуйте, criosray, Вы писали:

Х>>язык C++ в своей молодости тоже бурно развивался, почитай D&E, только вот когда количество программистов на нём выросло до миллионов, количество платформ и компиляторов до десятков, то тут уже начинает главенствовать принцип "не навреди". C#, дай бог ему здоровья, если обретёт такой же ареал то будет развиваться тоже не шустро, уж поверь.


C>Если бы Вы что-то знали о С# и об Андерсоне, Вы бы не писали такой чуши.


Интересно, почему?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[22]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 27.04.09 10:32
Оценка:
Здравствуйте, criosray, Вы писали:

Х>>язык C++ в своей молодости тоже бурно развивался, почитай D&E, только вот когда количество программистов на нём выросло до миллионов, количество платформ и компиляторов до десятков, то тут уже начинает главенствовать принцип "не навреди". C#, дай бог ему здоровья, если обретёт такой же ареал то будет развиваться тоже не шустро, уж поверь.

C>Если бы Вы что-то знали о С# и об Андерсоне, Вы бы не писали такой чуши.

Ганс Христиан? Как же, знаком, знаком. "Принцесса на горошине", "Дюймовочка", "Гадкий утёнок", да что там, "Стойкий оловянный солдатик", ето же всё классика и знакома каждому.
А по существу, в чём чушь? Удиви меня.
People write code, programming languages don't.
Re[21]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 27.04.09 10: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[29]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 27.04.09 11:05
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>>>с использованием етой библиотеки реализуется минут за 5-10 опытными программистами на C++

C>>Вы ведь опытный программист, да? Реализацию в студию.
Х>реализацию чего? пока по вашим постам я только понял что вы хотите что-то вроде service locator'а, а не IoC контейнера. Лучше опишите задачу, как вы её решаете с помощью вашего фреймворка, и посмотрим что в етом случае делают в С++.

Простейший пример из продакшн кода — форма ввода, построенная на Supervising Controller, где презентация отмечена циклом жизни pooled 0-5, а контроллер на 100% (почти) покрыт модульными тестами и таких форм не одна, ни две, а больше сотни.
Re[28]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 27.04.09 11: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[30]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 27.04.09 14: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 15: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 15: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 16: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 Российская Империя www.nemerle.org
Дата: 27.04.09 16: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 тоже поддерживает императивный стиль одновременно с функциональным.


Да, да, да. Зачем наука в программировании? Ты давно всем доказал, что программирование особая отрасль и мозг в ней не нужен. Главное трясти по сильнее. То ли дело автомобили. Вот там наука важна. Ведь на автомобилях ездеем мы сами, а софт используют какие-то ламеры.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 27.04.09 17: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[25]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.04.09 19:41
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Упс. А лямбды — не функциональный стиль? Да даже бустовые замыкания — и то функциональный стиль.


В boost-е нет полноценных замыканий. Там очень ограниченная эмуляция.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[25]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.04.09 19:45
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Это нерелевантный в данном контексте вопрос, да и не смог бы я на него содержательно ответить, даже если бы и захотел. С другой стороны, cие не имеет ни малейшего значения с точки зрения оценки самого C++. Пойми, медленное развитие C++ как языка имеет свои положительные стороны — как минимум, разработчики компиляторов могут дать более качественные (оптимизированные и т.п.) компиляторы, чем это было бы в ситуации очень быстрых изменений. Во всяком случае, такое предположение вполне логично.


Качество компиляторов можно повысить спроектировав качественный язык, а не давая 10 лет на реализацию запутанного и мутного монстра.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[21]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 27.04.09 19:50
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>язык C++ в своей молодости тоже бурно развивался, почитай D&E, только вот когда количество программистов на нём выросло до миллионов, количество платформ и компиляторов до десятков, то тут уже начинает главенствовать принцип "не навреди". C#, дай бог ему здоровья, если обретёт такой же ареал то будет развиваться тоже не шустро, уж поверь.


Не возьмусь оценить точные проценты применения, но почему-то мне кажется, что C#, а уж тем более Ява применяется гораздо чаще на сегодняшний день. И объясняется это тем, что он применяется для автоматизации предприятий и создания сайтов в интернет. В этих областях есть много нюансов и написать единый коробочный софт для них в принципе невозможно. А это ниша для огромных стад разработчиков. С++ же используется в последнее время больше частью для создания высокотиражных продуктов где стоимость разработки не так важна, так как окупается количеством продаж (т.е. — игры, ОС, офисные приложения), а меньшее потребление компьютерных ресурсов может увеличить объем продаж.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[22]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 27.04.09 20: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[4]: Работа - с чего начать: С++ или С#?
От: mukhomor  
Дата: 28.04.09 18:50
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Erop, Вы писали:


E>>Да, так бывает. И не только в ПО. И не только сейчас, но и раньше было.

E>>То, что ты не умеешь искать такие позиции, всего лишь говорит что-то о тебе, а не об окружающем мире...
E>>Можешь подумать над значением слова "подмастерье"...

VD>Ой, я же забыл. Мы же о сапожниках говорим. Вот только ученикам зарплату не платили. Им максимум еду давали.

VD>Почему всем будет смешно, если им расскажут о подмастерьи физика, химика или врача. Так почему же подмастерья программистов обсуждаются серьезно?


Очень просто. Профессия программиста стоит особняком. У Макконнела ("Совершенный код") написано что программистами становятся 40% (боюсь тут соврать) не профильных программистов. А физиков сколько непрофильных? Химикив? Вот и ответ. Если речь идет о системных программистах, то да — это серъезно, а в остальном случае важнее может оказаться иная специальность. Мне кажется, что в большинстве случаев важнее математические способности или физические или экономические, так как сам, решая задачи медленно но верно из освоения технологии скатываюсь к книжкам по алгоритмам. Язык программирования и технологии вторичны.
Про подмастерья не согласен. Надо учить и платить. И чем талантливее ученик, тем больше платить. А то, что я слышу, это просто отголоски честолюбия и высокомерия. Вот только должно быть по Фаусту — "Наследовать достоин тот, кто сам способен дать наследство." Я так считаю.
Re[26]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 28.04.09 21: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 22: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]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 29.04.09 05: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 07: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]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 29.04.09 07:54
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

Тут снова вопрос производительности поднялся
Автор: void29091988
Дата: 29.04.09
.
Обращение не конкретно к ГВ, а к тем, кто пожелает защитить честь неуправляемого кода, или просто помочь человеку разобраться с тем, что он делает не так.

Кстати, это далеко не первый случай выбора платформы по бенчмарку Дело даже не в бенчмарке, а в том, _какие_ специалисты делают эти бенчмарки и принимают потом решения.
Re[29]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 29.04.09 09: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]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 29.04.09 09:12
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

G>>>>Это огромная проблема для языка.

ГВ>>>Скажем так, это неотъемлемая черта языка — возможность работы с низким уровнем. Надо это делать или нет — зависит от.
G>>Не надо подменять понятия, в С++ это не возможность, а необходимость.
ГВ>Э... Тогда поясни, что имеется в виду под низким уровнем? __asm, void*, арифметика указателей или вообще любые упоминания указателей?
1)Ручное управление памятью, надо следить чтобы указатель нигде не повис. Использовать умные указатели или следить чтобы везде вызывался delete
2)Арифметика указателей, надо следить чтобы использовались STL-ные итераторы вместо указателей
3)Даже с бустом сложные лямбды надо формировать кучей методов bind.
4)Небезопасные приведения типов
продолжать можно долго...
Re[30]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 29.04.09 10:03
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Думаешь разница в скорости между release и debug достигается инлайнингом?

G>Кстати JIT сам умеет инлайнить, прчием начиная с 3.5SP1 весьма неплохо.

В определенных местах практически только им
Re[26]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 29.04.09 11: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>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[30]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 29.04.09 12: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 12: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[32]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 29.04.09 15: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 15:48
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>>Ответь на вопрос, нафига MAPI в .NET?

CC>>Вот хочется ему. Представь что он заказчик и ему надо именно MAPI.
G>Если заказчик диктует технические решения, то я с таким не связываюсь. И другим не рекомендую.

Заказчик сам может быть вынужден диктовать технические решения.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[27]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 29.04.09 17:28
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>>Кто это тут защищал использование C++ там, где он не подходит должным образом? По-моему, тебе померещилось. Разговор идёт о гротескной преувеличенности недостатков C++ и о том, что в некоторых ситуациях он оказывается наилучшим выбором.

G>>Очень мало таких ситуаций. На практике оказывается что там где подходит С++ на самом деле нужно что-то вроде C_ _ классами. Высокоуровневые абстакции С++ идут лесом, упор делается на вычисления.

ГВ>По чьей практике так оказывается?


К примеру, по моей.
Re[30]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 29.04.09 17:31
Оценка:
Здравствуйте, MxKazan, Вы писали:

COF>>Да что там говорить, достаточно почитать рекомендации по написанию производительного кода на яве или .нет — как можно меньше маленьких функций, объектов, все вычисления выносить в одну большую простыню, тогда может jit что-то и сделает.

MK>А можно ссылку на эту рекомендацию писать как можно меньше маленьких функций?
+1 Сколько лет на дотнет пишу, а впервый раз слышу такое.
Re[31]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 29.04.09 18: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 18: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]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 29.04.09 18:49
Оценка:
Здравствуйте, COFF, Вы писали:

COF>Здравствуйте, samius, Вы писали:


S>>Если кто так не сделает, то его код будет работать медленнее, чем C++ и ему никак не догнать плюсы по перфомансу, что означает конец карьеры программиста


COF>На самом деле, это все (и еще много чего другого) я делаю когда пишу на C++, если надо написать действительно быстрый код. То что Вас это забавляет показывает только то, что с задачами, критичными по скорости Вам сталкиваться не приходилось. Увы...

Возможно не в той степени, что Вам...
Предпочитаю другие методы оптимизации. В тех задачах, с которыми я сталкивался их хватало. До экономии на минимизации кол-ва методов не доходило. (Заменять вызовы через интерфейс в дотнете на другие вызовы — приходилось)
Re[32]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 29.04.09 18: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]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 29.04.09 18: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 18:54
Оценка:
Здравствуйте, criosray, Вы писали:

C>Быстрый код получается не тогда, когда Вы тратите 90% времени на техническую оптимизацию кода и 10% на алгоритмизацию, а 90% на алгоритмизацию, 10% на техническую оптимизацию.


Конечно я в курсе, что любую программу можно ускорить если заменить сортировку пузырьком на что-то более продвинутое :)
Re[33]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 29.04.09 18: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 18:58
Оценка:
Здравствуйте, COFF, Вы писали:


C>>Быстрый код получается не тогда, когда Вы тратите 90% времени на техническую оптимизацию кода и 10% на алгоритмизацию, а 90% на алгоритмизацию, 10% на техническую оптимизацию.


COF>Конечно я в курсе, что любую программу можно ускорить если заменить сортировку пузырьком на что-то более продвинутое


Очень рад, что Вы знаете сортировку пузырьком. Надеюсь, Вы так же знаете, что это самое ускорение от замены сортировки пузырьком на "что-то более продвинутое" далеко не всегда рационально?
Re[35]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 29.04.09 19:06
Оценка:
Здравствуйте, COFF, Вы писали:

C>>Ну во-первых, очень многое поменялось и сейчас 99% WM устройств с .NET CF 3.5

C>>Во-вторых, Вы не видитте разницы между CLR для мобильных телефонов и CLR для полноценных компьютеров?

COF>Нет, не вижу разницы. Серьезно


Зачем же так откровенно выставлять на показ свое невежество?..
Re[35]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 29.04.09 19: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 19:09
Оценка:
Здравствуйте, criosray, Вы писали:

C>Зачем же так откровенно выставлять на показ свое невежество?.. :xz:


То есть таки под мобильные устройства надо писать на C++, не используя CF, я так понимаю этот вот пассаж про невежество?
Re[37]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 29.04.09 19:11
Оценка:
Здравствуйте, COFF, Вы писали:

C>>Зачем же так откровенно выставлять на показ свое невежество?..


COF>То есть таки под мобильные устройства надо писать на C++, не используя CF, я так понимаю этот вот пассаж про невежество?


Нет, не правильно.
Re[32]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 29.04.09 19: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[33]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 29.04.09 19: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 23: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[32]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.04.09 04:33
Оценка:
Здравствуйте, COFF, Вы писали:

COF>На самом деле, это все (и еще много чего другого) я делаю когда пишу на C++,


На самом деле это многое говорит... о тебе.

ЗЫ

И эти люди запрещают мне ковыряться в носу?! (с)
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[33]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.04.09 04:35
Оценка:
Здравствуйте, criosray, Вы писали:

C>Быстрый код получается не тогда, когда Вы тратите 90% времени на техническую оптимизацию кода и 10% на алгоритмизацию, а 90% на алгоритмизацию, 10% на техническую оптимизацию.


Назвать тот бред, что ты перечислил оптимизациями вообще язык не поворачивается. Ту чушь оптимизируют компиляторы (JIT или обычные). Ручное вмешательство там на сегодня только вредит, так как нарушает те самые партерный что оптимизируются компиляторами.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[31]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.04.09 04: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);


Самое смешно, что увеличение производительности тут достигается не за счет уменьшения времени затрачиваемого на лишний вызов, а за счет того, что оконной системе приходится меньше перерисовывать свое изображение и пересчитывать свои размеры.

Правило универсальное. Применимо и для любой программы написанной на С++. Так что мотай на ус.

ЗЫ

Не выставляй себя полным ламером. Молчи по тем темам в которых не шаришь.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[34]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.04.09 04:46
Оценка:
Здравствуйте, criosray, Вы писали:

C>Ну во-первых, очень многое поменялось и сейчас 99% WM устройств с .NET CF 3.5

C>Во-вторых, Вы не видитте разницы между CLR для мобильных телефонов и CLR для полноценных компьютеров?

Этот пример справедлив и для настольного фрэймворка последней версии. Ты вчитайся в код. Там не о экономии на вызове метода речь идет. Там речь о том, что не надо устанавливать размеры окна в два приема, если тоже самое можно сделать за один прием.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[33]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 30.04.09 04:54
Оценка:
Здравствуйте, criosray, Вы писали:

C>Но вот про "избегайте использовать много мелких объектов и мелких методов" — полный бред.


Не. Для Компакт-фрэймворка, особенно старых версий — это правильная рекомендация. GC там весьма примитивный. Никакой инкрементальной сборки. Так что и правад укрупнение объектов имело смысл. К тому же любой объект занимает лишнее место (для обычного фрэймворка это где-то 12 байт), так что укрупнение может дать выигрыш. Вопрос только в том, что актуальным этот совет будет если в память нужно поднять миллионы объектов. Естественно, что на обычном фрэймворке такой совет полная чушь.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[33]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 30.04.09 07:24
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>На самом деле это многое говорит... о тебе. :))


Я просто стараюсь избегать преждевременной пессимизации кода. В итоге, наши программы работают лучше программ конкурентов, что приносит вполне ощутимое конкурентное преимущество.
Re[35]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 30.04.09 07:36
Оценка:
Здравствуйте, VladD2, Вы писали:

C>>Ну во-первых, очень многое поменялось и сейчас 99% WM устройств с .NET CF 3.5

C>>Во-вторых, Вы не видитте разницы между CLR для мобильных телефонов и CLR для полноценных компьютеров?

VD>Этот пример справедлив и для настольного фрэймворка последней версии. Ты вчитайся в код. Там не о экономии на вызове метода речь идет. Там речь о том, что не надо устанавливать размеры окна в два приема, если тоже самое можно сделать за один прием.


Хорошо, тут я был не прав. Привел неудачный пример. Но я действительно неоднократно видел подобные рекомендации — ссылок к сожалению не сохранил, поэтому пытался найти в гугле что есть :) Да и ты сам ниже подтверждаешь мои слова.

Вообще, в чем принципиальное отличие компактного фреймворка от большого — только в том, что последний работает на компьютере с ограниченными ресурсами. И вот тут все прелести managed языков в плане ресурсоемкости и производительности вылезают во всей красе. Только и всего. На десктопе, и особенно на сервере этого не заметно, или так скажем не так явно заметно. Вот только пользователи жалуются — типа установил консоль оракла написанную на яве и ничего больше запустить не могу, съела всю память :)
Re[34]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 30.04.09 08:31
Оценка:
Здравствуйте, VladD2, Вы писали:


C>>Быстрый код получается не тогда, когда Вы тратите 90% времени на техническую оптимизацию кода и 10% на алгоритмизацию, а 90% на алгоритмизацию, 10% на техническую оптимизацию.


VD>Назвать тот бред, что ты перечислил оптимизациями вообще язык не поворачивается. Ту чушь оптимизируют компиляторы (JIT или обычные). Ручное вмешательство там на сегодня только вредит, так как нарушает те самые партерный что оптимизируются компиляторами.


Вы это мне? Я как бы в курсе.
Re[36]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 30.04.09 08: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 08: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 09: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 09:12
Оценка:
Здравствуйте, COFF, Вы писали:

COF>>>Вообще, в чем принципиальное отличие компактного фреймворка от большого — только в том, что последний работает на компьютере с

C>>Это не отличие фреймворка. Это отличие рабочих условий.
COF>>>ограниченными ресурсами. И вот тут все прелести managed языков в плане ресурсоемкости и производительности вылезают во всей красе. Только и всего. На десктопе, и особенно на сервере этого не заметно, или так скажем не так явно заметно. Вот только пользователи жалуются — типа установил консоль оракла написанную на яве и ничего больше запустить не могу, съела всю память
C>>А вот у меня на WM6.1 устройстве с .NET CF 3.5 есть три приложения на .NET CF и визуально по производительности они ничуть не уступают приложениям на С++ (MFC) — летают.

COF>Хорошо, что это за приложения? Я их поставлю и если они действительно летают, то я признаю свою неправоту

ThrottleLauncher, Twittula и самописное бизнес-приложение.
Re[25]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 04.05.09 10: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 11: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 12: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]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 04.05.09 12:34
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Здравствуйте, gandjustas, Вы писали:


ГВ>>>>>По-моему, не стоит впадать в крайности и считать "полноценным" замыканием только такое, которое использует ссылки в стиле C#.

G>>>>Не надо торговаться. лямбды и замыкания в С++ ущербны.
ГВ>>>Не "ущербны", а специфичны для C++. У любого языка есть своя специфика.
G>> Не надо торговаться, не на рынке находимся.

ГВ>Конечно-конечно. Гораздо правильнее принять "ущербно" вместо "специфично". Дружище, мы не на рынке, но и ты в законодатели терминов ещё не выбился, так что, давай уж согласовывать термины.

Не надо согласовывать, если что-то делается в С++ созданием кучи шаблонов, когда в других языках оно уже есть, то это именно "ущербно".

ГВ>Э... Что-то опять новенькое. Я как-то привык считать, что метаданные нужны для того, чтобы сопоставить типу (или объекту) какие-то параметры, о которых сам тип (объект) и слыхом не слыхивал. Meta = "над".

Правильно, а теперь еще раз перечитай свой код. Очень даже сопоставляется строковое имя типа и количество параметров конструктора с типами аргументов.

G>>>>Ты считаешь что описание количества и типов параметров конструктора, совмещенное с методами создания объекта, не является метаданными?

G>>>>Не стоит себя обманывать.
ГВ>>>Хм. Это есть явное указание типа (сигнатуры) используемого конструктора. Где тут метаданные? От цифр в названиях методов можно избавиться.
G>>От этого метаданные не исчезнут.
ГВ>Ты видишь суслика? Я, лично, — нет.
Это не суслик, а огромный слон.
Re[27]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 04.05.09 12:43
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Смотря что копируется. Копировать можно и ссылки. В остальном проблема передачи параметров замыкания носит ровно тот же самый характер, что и передача параметров в процедуру: по ссылке, по указателю или по значению. Согласование жизненных циклов объектов — из той же оперы.
Вот то-то и оно, что в нормальных замыканиях "передача параметров" происходит по ссылке. И параметры образуются неявным образом. А не вручную — вручную можно и функтор напедалить, кто бы спорил. Там и буст не особо нужен.

ГВ>Скажем так, по состоянию на данный момент такое поведение трудновато реализовать.

Об этом речь и идет. Ежу понятно, что "поведение С++" на С++ реализовывать легко и приятно.

ГВ>Да-да, осталось отказаться от замшелых стереотипов... На колу мочало.

Угу. С нетерпением ждем реализации Linq на С++. Хотя бы в объеме библиотеки, т.е. без специального синтаксиса query expressions.
Смею полагать, что "по состоянию на данный момент такое поведение трудновато реализовать".
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[40]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 04.05.09 12:45
Оценка:
Здравствуйте, gandjustas, Вы писали:

ГВ>>Конечно-конечно. Гораздо правильнее принять "ущербно" вместо "специфично". Дружище, мы не на рынке, но и ты в законодатели терминов ещё не выбился, так что, давай уж согласовывать термины.

G>Не надо согласовывать, если что-то делается в С++ созданием кучи шаблонов, когда в других языках оно уже есть, то это именно "ущербно".

Ясно. Значит, ты считаешь такое явление ущербностью со всеми сопутствующими эмоциональными оттенками. На здоровье. Я полагаю это спецификой.

ГВ>>Э... Что-то опять новенькое. Я как-то привык считать, что метаданные нужны для того, чтобы сопоставить типу (или объекту) какие-то параметры, о которых сам тип (объект) и слыхом не слыхивал. Meta = "над".

G>Правильно, а теперь еще раз перечитай свой код. Очень даже сопоставляется строковое имя типа и количество параметров конструктора с типами аргументов.

Не совсем так, только строковое имя типа именно сопоставляется с типом и может называться "метаданными типа". А количество параметров конструктора — часть определения самого типа. Понимаешь разницу?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[41]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 04.05.09 12:51
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Здравствуйте, gandjustas, Вы писали:


ГВ>>>Конечно-конечно. Гораздо правильнее принять "ущербно" вместо "специфично". Дружище, мы не на рынке, но и ты в законодатели терминов ещё не выбился, так что, давай уж согласовывать термины.

G>>Не надо согласовывать, если что-то делается в С++ созданием кучи шаблонов, когда в других языках оно уже есть, то это именно "ущербно".
ГВ>Ясно. Значит, ты считаешь такое явление ущербностью со всеми сопутствующими эмоциональными оттенками. На здоровье. Я полагаю это спецификой.


ГВ>>>Э... Что-то опять новенькое. Я как-то привык считать, что метаданные нужны для того, чтобы сопоставить типу (или объекту) какие-то параметры, о которых сам тип (объект) и слыхом не слыхивал. Meta = "над".

G>>Правильно, а теперь еще раз перечитай свой код. Очень даже сопоставляется строковое имя типа и количество параметров конструктора с типами аргументов.
ГВ>Не совсем так, только строковое имя типа именно сопоставляется с типом и может называться "метаданными типа". А количество параметров конструктора — часть определения самого типа. Понимаешь разницу?
И можно у "самого типа" спросить о том какие у него есть конструкторы?
Re[28]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 04.05.09 12: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 13:00
Оценка:
Здравствуйте, gandjustas, Вы писали:

ГВ>>Не совсем так, только строковое имя типа именно сопоставляется с типом и может называться "метаданными типа". А количество параметров конструктора — часть определения самого типа. Понимаешь разницу?

G>И можно у "самого типа" спросить о том какие у него есть конструкторы?

А зачем? Пользователь сам явно указывает, какой конструктор нужно использовать для создания экземпляра.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[29]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 04.05.09 13:17
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ> C++ предполагает три различных способа передачи параметров: значение, ссылка, указатель. "Нормальные" замыкания, судя по твоему высказыванию — это только ссылка, контролируемая GC.

Нет, это "только ссылка". Потому что семантика передачи ссылки принципиально отличается от передачи по значению, и именно она нужна. GC — второстепенная деталь реализации, без которой всё вместе трудно заставить работать.
ГВ> Я не хочу сказать, что такая точка зрения не имеет права на существование, но это никак не противоречит копированиям и прочим тра-ля-ля.
Геннадий, не надо придуриваться. Есть общепринятая трактовка замыкания, в которой замыкается полный лексический контекст. И плюсы не в состоянии обеспечить реализацию этой трактовки. А говорить "вот мы изобрели некоторое малополезное подмножество вашей функциональности, и назвали его точно так же, как полное — вот вам и замыкания" — это нечестно.

ГВ>Ну, я имел в виду, что с бустом сие сложновато будет реализовать. В смысле, именно такую конструкцию — со ссылкой на неконстантную переменную. Но и то, из-за design goals самой BLL (boost lambda library). А так, вроде, C++0x должен содержать такую возможность.

Да, мы в курсе, что C++0x должен содержать все нужные возможности по определению.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[29]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 04.05.09 13:41
Оценка:
ГВ> C++ предполагает три различных способа передачи параметров: значение, ссылка, указатель.

Учитывая, что два последних — это, по сути, одно и то же...
avalon 1.0b rev 146


dmitriid.comGitHubLinkedIn
Re[30]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 04.05.09 14: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 14:09
Оценка:
Здравствуйте, Mamut, Вы писали:

ГВ>> C++ предполагает три различных способа передачи параметров: значение, ссылка, указатель.

M>Учитывая, что два последних — это, по сути, одно и то же...

Все они одно и то же — значение чего-то.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[31]: P.S.
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 04.05.09 14:13
Оценка:
ГВ>Короче говоря, я понял, о каком различии ты говоришь, но тут сейчас сам точно не знаю, что именно будет реализовано в C++0x.

Пойми меня правильно: я не думаю, что в C++0x появится вездесущий GC и возможность менять время существования переменной без явного указания этого программистом. Я просто не в курсе деталей стандарта и уж тем более — особенностей реализации C++0x разными компиляторами. Поэтому не могу уверенно что-то говорить.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[34]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.05.09 14:26
Оценка:
Здравствуйте, COFF, Вы писали:

COF>Я просто стараюсь избегать преждевременной пессимизации кода. В итоге, наши программы работают лучше программ конкурентов, что приносит вполне ощутимое конкурентное преимущество.


Это полнейший лам. Ты ни грамма не ускоришь программу этими глупостями.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[35]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.05.09 14:29
Оценка:
Здравствуйте, criosray, Вы писали:

C>Так это и есть пессимизация кода, если Вы во время написания кода стараетесь экономить на количестве тактов процессора и байтов памяти, там, где это абсолютно не принципиально и только отвлекает Вас от, собственно, решения поставленной задачи.


Все еще смешнее. Большая часть из перечисленного ровным счетом не влияет на производительность. Скажем выбор префикской и постфиксной записи мог влиять на что-то во времена Страуструпа, но современные компиляторы оптимизируют генерируемый код и в случае если просто поменять форму инкремента в цикле, ничего не изменится.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[37]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 04.05.09 14:56
Оценка:
Здравствуйте, COFF, Вы писали:

COF>Вдогонку,

COF>У меня был знакомый, который на C++ осознанно писал вот так — for( int i = 0; i < array.GetCount(); i++ ), типа компилятор должен сам такие ситуации разруливать. Ну и в других местах он поступал аналогично. Потом он уволился и мне пришлось в его коде разбираться и оптимизировать. Так вот без всяких алгоритмических штучек, просто вычищением лишних уровней косвенности и выпрямления интерфейсов, мне удалось ускорить его код в несколько раз.
Если array.GetCount() нормально инлайнится, то разницы в релизе не будет.
А если нет, то это уже проблемы в ДНК, а не в уровнях косвенности.
Кстати, что профайлер сказал на такой код?

COF>Так что пессимизация кода в малом скорее всего значит и пессимизацию в большом. Это мое твердое убеждение.

Это ты полнейший бред говоришь от непонимания того как заниматься оптимизацией.
Вполне возможно что вместо прохода по массиву каждый раз надо было результаты вычислений закешировать или, например, использовать другие структуры данных для улучшения ассимптотики вычислений.

Кстати. Твой знакомый работал и никого не беспокоило быстродействие кода, а ты в первую очередь занялся "выпрямлением интерфейсов", что сократило простор для алгоритмической или архитектурной оптимизации.
Re[36]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 04.05.09 15:55
Оценка:
Здравствуйте, COFF, Вы писали:

COF>Хорошо, тут я был не прав. Привел неудачный пример. Но я действительно неоднократно видел подобные рекомендации — ссылок к сожалению не сохранил, поэтому пытался найти в гугле что есть Да и ты сам ниже подтверждаешь мои слова.


Нет таких ссылок и быть не может. Потому как это бред. Стоимость вызова микроспопически мала. Ее можно заметить на вызове методов-пустышек в цикле. А их то как раз отлично оптимизирует (инлайнит) JIT.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[37]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 04.05.09 17: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 Российская Империя www.nemerle.org
Дата: 05.05.09 14: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.


Что тебя тут удивило или заинтересовало?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[39]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 05.05.09 17:25
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Что тебя тут удивило или заинтересовало?


Очень созвучно тому, о чём говорил COFF — про объединение мелких методов в один. Ты, вроде, утверждал, что таких рекомендаций не может быть вообще. Как видишь — бывают.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[38]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 05.05.09 17:37
Оценка:
Здравствуйте, COFF, Вы писали:

VD>>Это махровое ламерство. Собственно данная беседа для меня потеряла всяческий интерес.


COF>Для меня эта беседа потеряла интерес когда я покрутил приложение, которое (по словам одного из обвинителей меня в ламерстве) якобы летает. Оказалось, что мало того, что оно тормозит, так еще и память утекает, причем со свистом — так, что средней C++-ной программе надо постараться такую утечку организовать. В общем, гладко было на бумаге, да забыли про овраги — практика пока теорию не подтверждает. Лепите уважаемые свои лямбды дальше


Камень в мой огород? Оно действительно летает и не тормозит. В версии 0.9.5 В RC явно что-то перемудрили. Почти наверняка проблема там в анменеджед модулях — например, во флэщ проигрывателе, который активно используется. Впрочем, не берусь утверждать.
Re[41]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 05.05.09 18:21
Оценка:
Здравствуйте, criosray, Вы писали:

C>Продолжим общение, когда Вы смените хамский тон на нечто более цивилизованное.


Боюсь, что это не возможно, поскольку мой "хамский тон" существует, преимущественно, в твоём воображении.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[30]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 05.05.09 19:47
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Да, мы в курсе, что C++0x должен содержать все нужные возможности по определению.


Посмотри сюда, думаю, тебе будет интересно.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[31]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 05.05.09 19:47
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>Здравствуйте, Sinclair, Вы писали:

ГВ>>> C++ предполагает три различных способа передачи параметров: значение, ссылка, указатель. "Нормальные" замыкания, судя по твоему высказыванию — это только ссылка, контролируемая GC.
S>>Нет, это "только ссылка". Потому что семантика передачи ссылки принципиально отличается от передачи по значению, и именно она нужна. GC — второстепенная деталь реализации, без которой всё вместе трудно заставить работать.
Х>спасибо, Капитан, за ликбез про семантику, а "мужики то не знали". Только с чего ты взял что нужна именно она? С++ предоставляет вариант — замыкать контекст по ссылке или по значению (кстати некотороые из lisp'ов таки замыкания реализуют через копирование, ага). Очевидно ето плюс, т.к. программист не ограничен "единственно правильным решением".
Ага, он ограничен двумя неправильными, и одним неочевидным и частично правильным.
Кроме того полноценные замыкания, которые продлевают жизнь контекста, невозвожны без GC.
Куча способов сделать неправльно — плохая черта для языка.

ГВ>>> Я не хочу сказать, что такая точка зрения не имеет права на существование, но это никак не противоречит копированиям и прочим тра-ля-ля.

S>>Геннадий, не надо придуриваться. Есть общепринятая трактовка замыкания, в которой замыкается полный лексический контекст. И плюсы не в состоянии обеспечить реализацию этой трактовки. А говорить "вот мы изобрели некоторое малополезное подмножество вашей функциональности, и назвали его точно так же, как полное — вот вам и замыкания" — это нечестно.
Х>не надо выдумывать, в новом с++ именно замыкание, аргументов против так и не увидел, разве отсутствует "замыкание на полный лексический контекст", али что?

"замыкание на полный лексический контекст" и есть то самое замыкание с которого начался разговор. То что может быть когда-нибудь будет в новом стандарте С++ замыканием не станет.
Re[32]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 05.05.09 19:56
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>"замыкание на полный лексический контекст" и есть то самое замыкание с которого начался разговор. То что может быть когда-нибудь будет в новом стандарте С++ замыканием не станет.


Напротив. Это как раз полное классическое замыкание с некоторой спецификой, свойственной C++ (явное разделение ссылок и значений, const/mutable, далее по тексту). То, что лямбда не навязывает обязательной модификации жизненного цикла контекста — есть хорошо, и хорошо весьма.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[32]: Правильная ссылка
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 05.05.09 20:03
Оценка:
Я имел в виду Part 1.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[33]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 05.05.09 21:10
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Здравствуйте, gandjustas, Вы писали:


G>>"замыкание на полный лексический контекст" и есть то самое замыкание с которого начался разговор. То что может быть когда-нибудь будет в новом стандарте С++ замыканием не станет.


ГВ>Напротив. Это как раз полное классическое замыкание с некоторой спецификой, свойственной C++ (явное разделение ссылок и значений, const/mutable, далее по тексту). То, что лямбда не навязывает обязательной модификации жизненного цикла контекста — есть хорошо, и хорошо весьма.


Срок жизни такого замыкания ограничен блоком, в котором объявлена лямбда. А значит за пределами этого блока при обращении к лямбде ждет UB. Т.е. лямбду можно передать аргументом, но вернуть в качестве результата ни лямбду, ни что-то ее использующее нельзя. Как можно говорить о классическом замыкании то что работает как замыкание только в одну сторону?
Re[39]: Работа - с чего начать: С++ или С#?
От: Anton Batenev Россия https://github.com/abbat
Дата: 05.05.09 21:18
Оценка:
Здравствуйте, criosray, Вы писали:

c> с учетом того, что компьютерное время все более и более дешево в сравнении с человеко-часами, затрачиваемыми на разработку


Зависит от <количества серверов в стойке>.
avalon 1.0rc1 rev 239, zlib 1.2.3
Re[35]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.05.09 22:18
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>ИМХО, можно. Просто вопросы согласования жизненных циклов, как обычно, лежат на программисте. Само по себе замыкание от этого неполноценным не становится, но (как это всегда бывает на C++) нужно контролировать, что именно происходит с твоими переменными.


Еще как стаовится. Исчезает целый класс применения.

В общем, будет еще больше багов.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[35]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.05.09 22:20
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>в с++ лямбда может копировать контекст по значению, тогда UB отменяется.


Ты забыл добавить, что при этом отменяются высокая производительность и некоторые области применения. А как только данные начинают передоваться по ссылке, то здравствуй UB и море багов.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[36]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 05.05.09 22:34
Оценка:
Здравствуйте, VladD2, Вы писали:

ГВ>>ИМХО, можно. Просто вопросы согласования жизненных циклов, как обычно, лежат на программисте. Само по себе замыкание от этого неполноценным не становится, но (как это всегда бывает на C++) нужно контролировать, что именно происходит с твоими переменными.


VD>Еще как стаовится. Исчезает целый класс применения.


Да ну? И какой же это класс?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[37]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 05.05.09 22: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 22:40
Оценка:
Здравствуйте, samius, Вы писали:

S>И тут нет замыкания


Согласен. Но ты лучше посмотри статью по ссылке.

S>Т.е. если захотелось передать лямбду с замыканием наружу — то как надо поступить?


Я думаю, замкнуть контекст надо по значению. Ну, или через shared_ptr — всё как обычно.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[38]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 05.05.09 22: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[39]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 05.05.09 22: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]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 05.05.09 22: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]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 05.05.09 22: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 23: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[43]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 05.05.09 23: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 23:47
Оценка:
Здравствуйте, VladD2, Вы писали:

ГВ>>Я имел в виду Part 1.

VD>Собственно, что и ожидалось. Недолямбды в недоязыке.

А где же "замшелые стереотипы" и "косность мышления" "Страуструпа, впавшего в маразм"?

Влад, ну я тебя прям не узнаю.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[35]: Правильная ссылка
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.05.09 23:51
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>>Я имел в виду Part 1.

VD>>Собственно, что и ожидалось. Недолямбды в недоязыке.

ГВ>А где же "замшелые стереотипы" и "косность мышления" "Страуструпа, впавшего в маразм"?


ГВ>Влад, ну я тебя прям не узнаю.


В Лиспе замыкания (причем полноценные) появились где-то в пятидесятых годах прошлого века. В С++ даже недозамыканий нет по сей день. Со времени публикации последнего стандарта прошло 11 лет. Так что вопрос риторический. Конечно на месте. Когда на добавление всем известной фичи тратят 12 лет и получают хреновый результат, то ни о чем кроме замшелости говорить не приходится.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[44]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 05.05.09 23:56
Оценка:
Здравствуйте, samius, Вы писали:

S>Может как раз тот случай, когда это вешается на разработчика?


А смысл тогда в лямбдах? Те же объекты.

S>Этот код — это чисто предположение, или компилящийся и выполняющийся?


Пока только предположение. Постараюсь поставить CTP на днях, тогда скажу точнее.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[36]: Правильная ссылка
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 06.05.09 00:06
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В Лиспе замыкания (причем полноценные) появились где-то в пятидесятых годах прошлого века. В С++ даже недозамыканий нет по сей день. Со времени публикации последнего стандарта прошло 11 лет. Так что вопрос риторический. Конечно на месте. Когда на добавление всем известной фичи тратят 12 лет и получают хреновый результат, то ни о чем кроме замшелости говорить не приходится.


А с чего ты взял, что эти 11-12 лет были потрачены только лишь на добавление одной фичи?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[37]: Правильная ссылка
От: VladD2 Российская Империя www.nemerle.org
Дата: 06.05.09 00:35
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>А с чего ты взял, что эти 11-12 лет были потрачены только лишь на добавление одной фичи?


А что если фичей 2 или 6, то это меняет дело? За это время с нуля спроектировали десятки языков. Языки вроде Явы и Шарпа обзавелись большей частью фич которые только обсуждались в С++ох. Скажем методы расширения шарпа были тупо стянуты из одного из реквестов еще в 2002.

12 лет — это строк за который человек вырастает. А они не смогли принять какой-то там стандарт.

За это время обсуждение проблем С++ плавно переросла в обсуждение его реальной необходимости и в итоге просто исчезло так как те кто задавались вопросами просто пересели на другие языки.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[38]: Правильная ссылка
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 06.05.09 02: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 02:26
Оценка:
Здравствуйте, VladD2, Вы писали:

ГВ>>А с чего ты взял, что эти 11-12 лет были потрачены только лишь на добавление одной фичи?

VD>А что если фичей 2 или 6, то это меняет дело? За это время с нуля спроектировали десятки языков.

Добавим к проблемам развития C++ ещё то, что очень мало кто хочет столкнуться с необходимостью переписывать всё ранее разработанное ПО, чтобы оно компилировалось новыми компиляторами.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[37]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 06.05.09 02:42
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>Здравствуйте, VladD2, Вы писали:


VD>>Ты забыл добавить, что при этом отменяются высокая производительность и некоторые области применения. А как только данные начинают передоваться по ссылке, то здравствуй UB и море багов.

Х>ой ли, ты часто передаёшь лямбды после выхода из scope?
Постоянно. При наличии Linq, у которого отложенное выполнение, лямбды в большенстве случаев живут дольше скоупа.

Х>как раз таки остутствие гц и возможность захватывать контекст по ссылке обеспечивает экстремальную производительность (нет боксинга для стековых объектов как в дотнете, ага).

Возможность захватывать контекст по ссылке без GC обеспечивает море глюков, а копирование — тормоза. Причем избавиться от того и другого одновременно нельзя.
Боксингом мугать никого не надо, для примитивных типов затраты на боксинг минимальны, а более сложные структуры и так передаются по ссылке.

Х>Ещё раз, ето юмор такой или что? лямбды в с++ предлагают два варианта захвата контекста, причём можно гибко выбирать что захватывать по ссылке, что по значению. Таких гибких лямбд нет ни в одном языке программирования, назвать ето "недолямбдами" и "ограничением области применения" можно разве только по причине шаблонности мышления.

Это правда жизни, в С++ — недолямбды, потому что оба варианта, из которых еще надо выбирать, не позволяют решть все задачи, доступные обычным лямбдам.
Re[38]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 06.05.09 05:21
Оценка:
Здравствуйте, gandjustas, Вы писали:

Х>>как раз таки остутствие гц и возможность захватывать контекст по ссылке обеспечивает экстремальную производительность (нет боксинга для стековых объектов как в дотнете, ага).

G>Возможность захватывать контекст по ссылке без GC обеспечивает море глюков, а копирование — тормоза. Причем избавиться от того и другого одновременно нельзя.

Вот это вот очень сильно бабушка надвое сказала. Всегда остаётся возможность оптимизировать передачу захватом по ссылке и одновременным контролем жизненного цикла. Собственно, это обычная техника для C++.

G>Боксингом мугать никого не надо, для примитивных типов затраты на боксинг минимальны, а более сложные структуры и так передаются по ссылке.


Тормозами тоже пугать никого не надо. (<- косность мозга, тузик, тряпка)

Х>>Ещё раз, ето юмор такой или что? лямбды в с++ предлагают два варианта захвата контекста, причём можно гибко выбирать что захватывать по ссылке, что по значению. Таких гибких лямбд нет ни в одном языке программирования, назвать ето "недолямбдами" и "ограничением области применения" можно разве только по причине шаблонности мышления.

G>Это правда жизни, в С++ — недолямбды, потому что оба варианта, из которых еще надо выбирать, не позволяют решть все задачи, доступные обычным лямбдам.

Похоже, что ты не прав. Хотя, конечно, никто тебе не запретит называть C++-ные лямбды "недолямбдами".
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[41]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 06.05.09 06:50
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Здравствуйте, gandjustas, Вы писали:


G>>Ага, "контроль жазненного цикла" обычно как делается? shared_ptr или другой подсчет ссылок. Иначе получаете трудноуловимые баги при изменениях.


ГВ>Обычно он делается по-разному, это раз. Баги согласования жизненных циклов ловятся не труднее, чем любые другие — это два.


Ну как например?
Re[45]: Другой вариант
От: samius Япония http://sams-tricks.blogspot.com
Дата: 06.05.09 11: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[40]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 06.05.09 13:38
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>Хоспадя, да нет там боксинга. Один ни черта не разбирающийся ляпнул, другой зачем то ответил, третий зацепился...


...короче говоря, на форуме КСВ было скучно и тихо.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[42]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 06.05.09 13:39
Оценка:
Здравствуйте, gandjustas, Вы писали:

ГВ>>Обычно он делается по-разному, это раз. Баги согласования жизненных циклов ловятся не труднее, чем любые другие — это два.


G>Ну как например?


Есть ещё совсем ничего не подсчитывающий auto_ptr. Как минимум.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[46]: Другой вариант
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 06.05.09 13: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]: Addon
От: criosray  
Дата: 06.05.09 14:52
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>>А с чего ты взял, что эти 11-12 лет были потрачены только лишь на добавление одной фичи?

VD>>А что если фичей 2 или 6, то это меняет дело? За это время с нуля спроектировали десятки языков.

ГВ>Добавим к проблемам развития C++ ещё то, что очень мало кто хочет столкнуться с необходимостью переписывать всё ранее разработанное ПО, чтобы оно компилировалось новыми компиляторами.


Компилятор С# 3.0 прекрасно справляется со сборкой С# 1 исходников. Интересно, к чему бы это...
Re[40]: Addon
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 06.05.09 15:10
Оценка:
Здравствуйте, criosray, Вы писали:

ГВ>>Добавим к проблемам развития C++ ещё то, что очень мало кто хочет столкнуться с необходимостью переписывать всё ранее разработанное ПО, чтобы оно компилировалось новыми компиляторами.


C>Компилятор С# 3.0 прекрасно справляется со сборкой С# 1 исходников. Интересно, к чему бы это...


Я думаю, что это к тому, что компилятор С# 3.0 прекрасно справляется со сборкой С# 1 исходников.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[42]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 06.05.09 15:22
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>>Что даже не сильно удивляет. Длинные и многоярусные лямбды противоречат принципам реюзинга, "обычные" функторы могут быть предпочтительнее с этой точки зрения. Больше того, даже два использования какой-нибудь коротенькой лямбды типа "x >= SOMETHING_LOW && x <= SOMETHING_HIGH" уже побуждают сделать вместо неё обычную функцию или функтор, и обращаться к ним по собственному имени.


C>>Это то о чем Вам говорил Влад. Лямбды С++ — неудобные недолямбды. Потому ими и не пользуются.


ГВ>Дело не в удобстве, а в культуре программирования.


При чем тут "культура"? Вот в С# лямбды широко используются, не смотря на то, что язык, как и С++ императивный, а не функциональный. Просто потому, что там это УДОБНО.
Re[41]: Addon
От: criosray  
Дата: 06.05.09 15:23
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:


ГВ>>>Добавим к проблемам развития C++ ещё то, что очень мало кто хочет столкнуться с необходимостью переписывать всё ранее разработанное ПО, чтобы оно компилировалось новыми компиляторами.


C>>Компилятор С# 3.0 прекрасно справляется со сборкой С# 1 исходников. Интересно, к чему бы это...


ГВ>Я думаю, что это к тому, что компилятор С# 3.0 прекрасно справляется со сборкой С# 1 исходников.


"ГВ>>Добавим к проблемам развития C++ ещё то, что очень мало кто хочет столкнуться с необходимостью переписывать всё ранее разработанное ПО, чтобы оно компилировалось новыми компиляторами."
Re[47]: Другой вариант
От: samius Япония http://sams-tricks.blogspot.com
Дата: 06.05.09 15: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[42]: Addon
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 06.05.09 15: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 15: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 16: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 16:01
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

C>>>>Компилятор С# 3.0 прекрасно справляется со сборкой С# 1 исходников. Интересно, к чему бы это...

ГВ>>>Я думаю, что это к тому, что компилятор С# 3.0 прекрасно справляется со сборкой С# 1 исходников.
C>>"ГВ>>Добавим к проблемам развития C++ ещё то, что очень мало кто хочет столкнуться с необходимостью переписывать всё ранее разработанное ПО, чтобы оно компилировалось новыми компиляторами."

ГВ>И при чём здесь C#?


С# пример того, что можно очень активно развивать язык, сохраняя "обратную совместимость" на уровне компилятора.
Re[44]: Addon
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 06.05.09 16: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 Российская Империя www.nemerle.org
Дата: 06.05.09 16:44
Оценка:
Здравствуйте, CreatorCray, Вы писали:

VD>>Ага. Причем юмор начинается со слов "лямбды в с++" ибо на сегодня в С++ нет даже тех недолямбд которые описаны в С++ох (читать как си-плюс-плюс ох).

CC>Ну в С++0х они есть. Компилеры с лямбдами тоже есть (ICC).
CC>Удивительно, но из всего что появилось в ICC из С++0х применения в живых проектах не нашли только лямбды.

Для особо одаренных повторяю. Нет никакого С++0х. С++0х — это рабочее название черновика.

А в "кампилирах" есть еще свойства и поддержка COM. И что с того?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[40]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 06.05.09 17: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 Российская Империя www.nemerle.org
Дата: 06.05.09 19:38
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

VD>>А в "кампилирах" есть еще свойства и поддержка COM. И что с того?


ГВ>В компиляторах много чего есть, но не всё из этого планируется к принятию в виде стандарта.


Оно уже 11 лет планируется. Так что говорить о чем-то будет можно только когда стандарт выйдет. О чем я и говорил.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[43]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 06.05.09 20:26
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Здравствуйте, gandjustas, Вы писали:


ГВ>>>Обычно он делается по-разному, это раз. Баги согласования жизненных циклов ловятся не труднее, чем любые другие — это два.


G>>Ну как например?


ГВ>Есть ещё совсем ничего не подсчитывающий auto_ptr. Как минимум.


Семантика владения в лямбде никак не подойдет. Еще варианты есть?
Может всетаки уже стоит признать что в С++ в обозримом будущем не будет нормальных лямбд.
Re[42]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 06.05.09 20:35
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>>>А в "кампилирах" есть еще свойства и поддержка COM. И что с того?

ГВ>>В компиляторах много чего есть, но не всё из этого планируется к принятию в виде стандарта.
VD>Оно уже 11 лет планируется. Так что говорить о чем-то будет можно только когда стандарт выйдет. О чем я и говорил.

Отнюдь. Даже если в окончательную версию стандарта лямбды не войдут (что выглядит фантастично), их из компиляторов никто убирать не будет (это выглядит ещё более фантастичным). Поэтому с формальной точки зрения ты прав — стандарта ещё нет, и казалось бы, обсуждать нечего, но коль скоро на практике фичи в компиляторах уже есть (больше того, описание фич прямо ссылается на драфт стандарта), следовательно, утверждать, что их нет — абсурд. И следовательно, нам вполне есть, что обсуждать.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[44]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 06.05.09 20:39
Оценка:
Здравствуйте, gandjustas, Вы писали:

ГВ>>Есть ещё совсем ничего не подсчитывающий auto_ptr. Как минимум.

G>Семантика владения в лямбде никак не подойдет. Еще варианты есть?

Почему не подойдёт? Как по мне, так вполне подойдёт.

G>Может всетаки уже стоит признать что в С++ в обозримом будущем не будет нормальных лямбд.


Знаешь, это очень сильное колдунство — признавать отсутствие наличествующего. "Видишь суслика? А его нет!"
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[44]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 00:13
Оценка:
Здравствуйте, VladD2, Вы писали:

ГВ>>Отнюдь. Даже если в окончательную версию стандарта лямбды не войдут (что выглядит фантастично), их из компиляторов никто убирать не будет

VD>Еще как будут, как убирали несоответствия с 98-ым стандартом.

Маловероятно. И первое, и второе. Гораздо более вероятно, что как и с 98-м стандартом, начнётся вакханалия, как это было во времена VC6 — сколько компиляторов, столько реализаций шаблонов. Здесь будут другие заморочки.

ГВ>>Поэтому с формальной точки зрения ты прав — стандарта ещё нет, и казалось бы, обсуждать нечего, но коль скоро на практике фичи в компиляторах уже есть (больше того, описание фич прямо ссылается на драфт стандарта), следовательно, утверждать, что их нет — абсурд. И следовательно, нам вполне есть, что обсуждать.


VD>Никаких расширений пока нет. Речь идет о бэтах которые не зарелизятся до 2010 года.


Ну и что? Значит эти расширения пока в бетах. Факт их существования не отменяется.

VD>Мне кажется, что включение фич из черновика стандарта является своеобразным протестом против глупого затягивания его принятия и способом подтолкнуть его принятие хоть в каком-то виде, потому как комитет давно живет ради собственного развлечения.


Да не так всё просто, судя по всему. Где-то пробегало, что это составляющая процедуры принятия стандарта — разработчики компиляторов получают некоторый запас времени для предварительной реализации фич. Есть ещё и сугубо ISO-шные процедуры принятия стандарта, которые, как я понимаю, должны пройти после того, как окончательный драфт стандарта будет одобрен комитетом. В общем, в этой бюрократии я не силён, но похоже, что твои высказывания о "протесте против затягивания" и "ради собственного развлечения" не совсем отражают действительность.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[46]: Ещё Addon
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 03:31
Оценка:
G>Точно, ты ведь до сих пор не признаешь что нету и не будет в С++ нормальных лямбд, а в других языках есть.

Ты только функциональщикам не говори о "нормальности" лямбд, допускающих побочные эффекты. Могут и на смех поднять.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[48]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 07.05.09 06:35
Оценка:
Здравствуйте, gandjustas, Вы писали:


G>А другие варианты есть? Явное управление временем жизни не подойдет, надеюсь это понятно.


Вариантов нет. Не спорьте с ним — пустая трата времени.
Re[44]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 07.05.09 08: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[42]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 07.05.09 09:14
Оценка:
Здравствуйте, VladD2, Вы писали:

ГВ>>В компиляторах много чего есть, но не всё из этого планируется к принятию в виде стандарта.

VD>Оно уже 11 лет планируется. Так что говорить о чем-то будет можно только когда стандарт выйдет. О чем я и говорил.
Ты так цепляешься за жалкую отмазку "еще не вышел" как будто больше сказать нечего.
Какая мне например разница, вышел он или нет. Гораздо важнее что уже есть реализация в промышленных компиляторах.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[45]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 12: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 12: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[49]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 13: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 13:23
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Простые случаи мало интересуют, они будут отлично оптимизироваться JIT. Наличие или остуствие GC там никакой роли не играет.


Я очень рад, если это так.

G>В более сложных случаях, когда требуется GC, подсчет ссылок дает оверхед, как и опциональный GC.


Величина этого оверхеда — вопрос с трудно предсказуемым ответом.

G>Не получится сделать в C++ сборщик мусора, сравнимый по быстродействию с .NETовским.


Ой, сомневаюсь.

G>В итоге пришли к тому же: С++, даже в новом стандарте, позволяет эффективно использовать только подмножество лямбд.


Угу, то есть тезис о неполноценности лямбд в C++ снимается повестки дня. Уже что-то. А то, что там где-то что-то побыстрее, где-то что-то помедленнее — так на то они и разные языки: C++, C#, Java, Haskell... Чтобы где-то выигрывать по отношению друг к другу, где-то проигрывать.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[46]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 07.05.09 13: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 13:25
Оценка:
ГВ>Угу, то есть тезис о неполноценности лямбд в C++ снимается повестки дня.

Имел в виду "тезис о принципиальной неполноценности лямбд в C++0x".
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[47]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 13:27
Оценка:
Здравствуйте, samius, Вы писали:

ГВ>>Обрати внимание, функцию с именем isWithinRange невозможно подменить в рантайме.

S>Лямбды удобнее тем, что их можно сочетать вместе с замыканиями в то время когда функцию придется передавать толпу параметров.

В данном случае я отвечал на вполне определённый выпад Синклера.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[49]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 07.05.09 13:29
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>на фига GC? Здесь вполне достаточно снапшота по значению. Её вообще имеет смысл всю инлайнировать (кстати, я охотно допускаю, что JIT именно так и поступит). И ещё в десятках ситуаций, когда время существования вовлечённых объектов гарантированно превышает время существования лямбды — зачем GC? Зачем GC вообще ставить в известность о том, что ты создаёшь какую-то там лямбду, когда ты на 100% уверен, что она будет удалена до того, как пропадут использованные ей объекты?
Гена, я тебе открою тайну, но GC никто ни в какую известность не ставит. Всё как раз наоборот: это в плюсах нужно что-то "удалять", когда оно больше не нужно.
А GC всего лишь оставляет только те объекты, которые доступны. В частности, если локальная лямбда выйдет из области видимости до того, как использованные ей объекты, то GC про неё никогда не узнает, и ни такта не будет затрачено на её уборку. Зато "100% уверен" — это как раз в случае с GC: именно он даёт такую гарантию. А в твоём случае 100% — это нечестное округление от 99.9999....%
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[50]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 07.05.09 13:33
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>В частности, если локальная лямбда выйдет из области видимости до того, как использованные ей объекты, то GC про неё никогда не узнает, и ни такта не будет затрачено на её уборку.


А можно раскрыть мысль? Такая лямбда не обрастет делегатом?
Re[50]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 13:41
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Гена, я тебе открою тайну, но GC никто ни в какую известность не ставит. Всё как раз наоборот: это в плюсах нужно что-то "удалять", когда оно больше не нужно.


Антон, спасибо, но это для меня не тайна. Говоря "ставить в известность" я не имел в виду ручное оповещение GC об использовании объекта.

S>А GC всего лишь оставляет только те объекты, которые доступны. В частности, если локальная лямбда выйдет из области видимости до того, как использованные ей объекты, то GC про неё никогда не узнает, и ни такта не будет затрачено на её уборку.


Ну и превосходно. Правда, AFAIK, не во всех языках с "полноценными" лямбдами дело обстоит именно так.

S>Зато "100% уверен" — это как раз в случае с GC: именно он даёт такую гарантию. А в твоём случае 100% — это нечестное округление от 99.9999....%


Да нет, есть случаи как раз тех самых 100%. Я понимаю, что хочется сказать, что я выдаю желаемое за действительное и приплести излюбленные противо-C++-ные аргументы, но смею тебя заверить, это было бы неправильным.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[43]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.05.09 13:45
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>А Microsoft с Intel-ом и не знают, что они отсебятину несут.


Можно ссылку на место где я могу купить компилятор от Microsoft реализующий черновик стандарта?

Если нет, то предлагаю вам всем прекратить нести пургу.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[44]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 13:55
Оценка:
Здравствуйте, VladD2, Вы писали:

ГВ>>А Microsoft с Intel-ом и не знают, что они отсебятину несут.

VD>Можно ссылку на место где я могу купить компилятор от Microsoft реализующий черновик стандарта?

Дык. Гугль тебя спасёт, ключевые слова "VC10 CTP download". Это действительно бета, как ты правильно заметил (вернее — CTP, я не знаю, как он соотносится с альфа/бета/RC по обычной классификации). Про интеловский компилятор спроси у CreatorCray.

VD>Если нет, то предлагаю вам всем прекратить нести пургу.


Чья б корова...
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[53]: Работа - с чего начать: С++ или С#?
От: minorlogic Украина  
Дата: 07.05.09 14: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 14:17
Оценка:
Здравствуйте, gandjustas, Вы писали:

ГВ>>Он везде есть — больше или меньше.

G>О как, а только пару страниц назад было утверждение что в С++ нет оверхедов.

В каких-то случаях — нет, в каких-то есть. Чудес же не бывает.

G>Ну раз shared_ptr придумали, и они пользуются значительным успхом, то можно предположить что GC очень нужен.


ИМХО, нельзя.

G>Не в библиотеках вопрос, лексическое замыкание накакими библиотечными функциями не заменишь, там нудно по-другом управлять временем жизни объектов.


Опять двадцать пять.

G>Так действительно на С++ все глюкаво и ненадежно.


Во-во, слово в слово. Все 14 лет.

G>А то что ьты 14 лет на нем пишешь чести тебе не делает.


В чьих глазах?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[56]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 14:26
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>>Ну раз shared_ptr придумали, и они пользуются значительным успхом, то можно предположить что GC очень нужен.

ГВ>>ИМХО, нельзя.
G>Обоснования?

Обосновать негативно сформулированный тезис — нельзя. Так что, это ты обоснуй своё высказывание.

ГВ>>Во-во, слово в слово. Все 14 лет.

G>Так за 14 лет ничего не поменялось

Где? В риторике критиков? Угу.

G>С++ и по сей день остается языком, на котором больше всего завалено проектов было.


Пересчитывал?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[51]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 14:27
Оценка:
Здравствуйте, samius, Вы писали:

S>Здравствуйте, Sinclair, Вы писали:


S>>В частности, если локальная лямбда выйдет из области видимости до того, как использованные ей объекты, то GC про неё никогда не узнает, и ни такта не будет затрачено на её уборку.


S>А можно раскрыть мысль? Такая лямбда не обрастет делегатом?


Может и обрастет. Только уборка мертвого объекта ничего не стоит, потому пофиг что чем обрастет.
Re[52]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 14:36
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>А то что ьты 14 лет на нем пишешь чести тебе не делает.

В чьих глазах?


Вопрос остаётся в силе.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[57]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 14:39
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Здравствуйте, gandjustas, Вы писали:


G>>>>Ну раз shared_ptr придумали, и они пользуются значительным успхом, то можно предположить что GC очень нужен.

ГВ>>>ИМХО, нельзя.
G>>Обоснования?

ГВ>Обосновать негативно сформулированный тезис — нельзя. Так что, это ты обоснуй своё высказывание.

Обосновываю, сейчас в С++ популярны средства неявного управления временем жизни объектов в куче. Но эти способы обладают некоторыми недостатками.
GC, который свободен от этих недостатков, будет очень востребован.

G>>С++ и по сей день остается языком, на котором больше всего завалено проектов было.

ГВ>Пересчитывал?
Я — нет, а некоторые фирмы часто занимаются статистическими исследованиями.
Re[49]: Работа - с чего начать: С++ или С#?
От: minorlogic Украина  
Дата: 07.05.09 15: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 15:52
Оценка:
Здравствуйте, gandjustas, Вы писали:


G>>>>>В более сложных случаях, когда требуется GC, подсчет ссылок дает оверхед, как и опциональный GC.

ГВ>>>>Величина этого оверхеда — вопрос с трудно предсказуемым ответом.
G>>>Тем не менее он есть.
ГВ>>Он везде есть — больше или меньше.
G>О как, а только пару страниц назад было утверждение что в С++ нет оверхедов.

Все правильно: пару страниц назад в С++ не было оверхедов, но язык развивается — успел обрасти оверхедами, понимаете ли какое дело...
Re[58]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 16:04
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>>>>Ну раз shared_ptr придумали, и они пользуются значительным успхом, то можно предположить что GC очень нужен.

ГВ>>>>ИМХО, нельзя.
G>>>Обоснования?
ГВ>>Обосновать негативно сформулированный тезис — нельзя. Так что, это ты обоснуй своё высказывание.
G>Обосновываю, сейчас в С++ популярны средства неявного управления временем жизни объектов в куче. Но эти способы обладают некоторыми недостатками.

А что за недостатки (кроме синхронного подсчёта количества ссылок)?

G>GC, который свободен от этих недостатков, будет очень востребован.


Давай, сначала про недостатки. Мне интересно, что ты считаешь недостатками, кроме указанного.

G>>>С++ и по сей день остается языком, на котором больше всего завалено проектов было.

ГВ>>Пересчитывал?
G>Я — нет, а некоторые фирмы часто занимаются статистическими исследованиями.

Ссылкой не поделишься? Просто любопытно.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[46]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 16:14
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Если бы я не знал тебя и твою любовь к демагогии, то подумал бы что ты или не умеешь читать, или торонулся рассудком. Я же кажется четко написал "ссылку на место где можно купить компилятор".


Нет такой ссылки, потому что компилятор от MS ещё не продаётся. Его можно скачать, как CTP.

Только это не означает, что нам нечего обсуждать. Я тебе уже писал об этом. Гипотетические рассуждения о том, что завтра перекромсают почти утверждённый стандарт и поубирают все фичи из компиляторов, давай оставим тем, кто любит обсуждать сюжетные ходы в плохой фантастике.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[54]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 16:17
Оценка:
Здравствуйте, gandjustas, Вы писали:

ГВ>>Вопрос остаётся в силе.

G>В глазах тех, кто успел попользоваться не только С++, но и более современными языками.

За всех отвечаешь? А по Хуану ли сомбреро?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[47]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.05.09 16:21
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Нет такой ссылки, потому что компилятор от MS ещё не продаётся.


Значит и обсуждать не чего.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[59]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 16:22
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Здравствуйте, gandjustas, Вы писали:


G>>>>>>Ну раз shared_ptr придумали, и они пользуются значительным успхом, то можно предположить что GC очень нужен.

ГВ>>>>>ИМХО, нельзя.
G>>>>Обоснования?
ГВ>>>Обосновать негативно сформулированный тезис — нельзя. Так что, это ты обоснуй своё высказывание.
G>>Обосновываю, сейчас в С++ популярны средства неявного управления временем жизни объектов в куче. Но эти способы обладают некоторыми недостатками.

ГВ>А что за недостатки (кроме синхронного подсчёта количества ссылок)?

сам по себе подстчет ссылок — не лучшый механизи. Дает оверхед по памяти и по быстродействию, не разруливает циклы, непотокобезопасны.
auto_ptr с передачей владения не намного лучше обычных указателей, при этом надо ими пользоваться очень осторожно и хорошо понимать что происходит "под капотом".

G>>>>С++ и по сей день остается языком, на котором больше всего завалено проектов было.

ГВ>>>Пересчитывал?
G>>Я — нет, а некоторые фирмы часто занимаются статистическими исследованиями.
ГВ>Ссылкой не поделишься? Просто любопытно.
Не поделюсь, потому что ссылки не храню.
Re[48]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 07.05.09 16:29
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Значит и обсуждать не чего.

да ну? или для дотнетчиков microsoft бог и царь и то что для С++ есть компиляторы от других производителей уже не в счёт?
People write code, programming languages don't.
Re[49]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.05.09 16:31
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>да ну? или для дотнетчиков microsoft бог и царь и то что для С++ есть компиляторы от других производителей уже не в счёт?


А во всех других уже реализован черновик стандарта?
Нет?
Вот когда реализуют, тогда обсудим.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[58]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 07.05.09 16:47
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>>>в случае с с++ лямбдами исполнено на 100%,

G>>На 200%, лямбд просто нету Есть только жалкое подобие.
Х>может ты найдёшь определение lambda в интернет и перестанешь нести ахинею?

Х>>>в дотнете же оверхеды на ровном месте, т.е. беспричинно, в силу его устройства.

G>>А примеры будут? или опять пердение в лужу?
Х>да уж, дотнет действительно замазка для мозга. гц, метаданные, промежуточный код + jit, бесчисленные проверки кода на сейфанутость — всё ето есть даже тогда когда тебе етого не нужно, и ето всё в таком случае — не нужный оверхед.

перестанешь нести ахинею?

Re[60]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 16:47
Оценка:
Здравствуйте, gandjustas, Вы писали:

ГВ>>А что за недостатки (кроме синхронного подсчёта количества ссылок)?

G>сам по себе подстчет ссылок — не лучшый механизи. Дает оверхед по памяти и по быстродействию, не разруливает циклы, непотокобезопасны.
G>auto_ptr с передачей владения не намного лучше обычных указателей, при этом надо ими пользоваться очень осторожно и хорошо понимать что происходит "под капотом".

OK, принято. ИМХО, самый серьёзный недостаток такого способа — потенциальные заморочки с циклическими зависимостями. Ну что же, действительно, опциональный (библиотечный) GC иной раз не помешал бы. В принципе — не помешал бы. Другое дело, что острота потребности в GC, ИМХО, невероятно преувеличена. Вот тут, честно тебе скажу, доказать ты её (острую потребность) не сможешь. Потому что придётся доказывать, исходя из субъективных моментов, а субъективно как раз таких проблем нет — C++-ники привыкли управлять своими объектами и им это вполне удаётся. Хорошим C++-никам — удаётся, а кто не умеет — тот плохой C++-ник, и к его мнению не особо прислушиваются. ИМХО, потому про GC хоть и поговаривают, но не особо.

ГВ>>Ссылкой не поделишься? Просто любопытно.

G>Не поделюсь, потому что ссылки не храню.

Жаль, было бы интересно.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[58]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.05.09 16:49
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>да уж, дотнет действительно замазка для мозга. гц, метаданные, промежуточный код + jit, бесчисленные проверки кода на сейфанутость — всё ето есть даже тогда когда тебе етого не нужно, и ето всё в таком случае — не нужный оверхед.


А можно узнать, решениями каких задач ты занимаешься на С++?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[60]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 07.05.09 16:56
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

Х>>>здесь поподробней пожалуйста, что имеется ввиду?

G>>Стандартные аллокаторы в С++ требуют прохода по списку свободных блоков памяти при выделении\освобождении, эта операция имеет алгоритмическую сложность O(n). При интенсивных операциях выделения\освобождения работает очеень медленно.

ГВ>Ключевое слово — пул.


Вы только что узнали новое слово и решили вставить его, чтоб казаться умным?
Re[50]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 17:00
Оценка:
Здравствуйте, VladD2, Вы писали:

ГВ>>Так и не обсуждай. Тебя кто-то заставляет?

VD>Обсуждал, ты а теперь откровенно гонишь. Учись признавать свою неправоту.

Иными словами, сказать тебе больше нечего.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[60]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 17:01
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Здравствуйте, gandjustas, Вы писали:


Х>>>здесь поподробней пожалуйста, что имеется ввиду?

G>>Стандартные аллокаторы в С++ требуют прохода по списку свободных блоков памяти при выделении\освобождении, эта операция имеет алгоритмическую сложность O(n). При интенсивных операциях выделения\освобождения работает очеень медленно.
ГВ>Ключевое слово — пул.
Угу, очередной "закат солнца вручную". Кроме того с пулом возникают дополнительные проблемы управления временем жизни.

G>>Кроме того проход по списку непотокобезопасен, поэтому требуются особые приседания чтобы стандартный аллокатор нормально заработал в многопоточном окружении.

ГВ>Это что-то новенькое. Стандартные аллокаторы как раз вполне работают в многопоточном окружении.
Угу, но работают медленно. Даже при однопоточном выделении. Блокировки небесплатные.
Re[61]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 17:03
Оценка:
Здравствуйте, criosray, Вы писали:

ГВ>>Ключевое слово — пул.

C>Вы только что узнали новое слово и решили вставить его, чтоб казаться умным?

Конечно. Я из этой дискуссии столько нового почерпнул — ты не поверишь! Столько новых слов, столько новых идей! Люблю с умными людьми общаться — сразу умнее становлюсь.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[61]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 17:23
Оценка:
Здравствуйте, gandjustas, Вы писали:

ГВ>>Ключевое слово — пул.

G>Угу, очередной "закат солнца вручную". Кроме того с пулом возникают дополнительные проблемы управления временем жизни.

Это какие такие проблемы? Что объекты должны быть уничтожены до уничтожения самого пула? Так это — то же самое, что и общее предотвращение утечек памяти.

G>>>Кроме того проход по списку непотокобезопасен, поэтому требуются особые приседания чтобы стандартный аллокатор нормально заработал в многопоточном окружении.

ГВ>>Это что-то новенькое. Стандартные аллокаторы как раз вполне работают в многопоточном окружении.
G>Угу, но работают медленно. Даже при однопоточном выделении. Блокировки небесплатные.

Ты уж определись: работают стандартные аллокаторы в многопоточном окружении или нет.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[59]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 07.05.09 17:40
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А можно узнать, решениями каких задач ты занимаешься на С++?

Можно, в данный момент ето десктопная GIS.
В свою очередь можно узнать, какие задачи ты решаешь на C#?
People write code, programming languages don't.
Re[60]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 07.05.09 18:01
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>зайди в раздел .NET или .NET GUI и посмотри темы в которых люди кричат о недостаточной производительности, такое ощущение что избавившись от менеджмента памяти дотнетовцы теперь приседают в борьбе за производительность

Что за темы?
Re[61]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 18:07
Оценка:
Здравствуйте, MxKazan, Вы писали:

Х>>зайди в раздел .NET или .NET GUI и посмотри темы в которых люди кричат о недостаточной производительности, такое ощущение что избавившись от менеджмента памяти дотнетовцы теперь приседают в борьбе за производительность

MK>Что за темы?

Склероз?
Автор: MxKazan
Дата: 05.05.09
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[63]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 18:12
Оценка:
Здравствуйте, gandjustas, Вы писали:

ГВ>>Это какие такие проблемы? Что объекты должны быть уничтожены до уничтожения самого пула? Так это — то же самое, что и общее предотвращение утечек памяти.

G>Опять возвращаемся к ручному управлнию памятью, никаких shred_ptr и прочего.

Почему? Самое обыкновенное управление модулями в программе на C++. В числе прочих, фаза завершения работы модуля может включать и очистку статических (глобальных) указателей.

G>>>>>Кроме того проход по списку непотокобезопасен, поэтому требуются особые приседания чтобы стандартный аллокатор нормально заработал в многопоточном окружении.

ГВ>>>>Это что-то новенькое. Стандартные аллокаторы как раз вполне работают в многопоточном окружении.
G>>>Угу, но работают медленно. Даже при однопоточном выделении. Блокировки небесплатные.
ГВ>>Ты уж определись: работают стандартные аллокаторы в многопоточном окружении или нет.
G>Раьотают, но медленно

То есть, "нормальная" в твоей терминологии работа — это работа без блокировок, я прав?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[60]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 18:12
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>Здравствуйте, gandjustas, Вы писали:


G>>Стандартные аллокаторы в С++ требуют прохода по списку свободных блоков памяти при выделении\освобождении, эта операция имеет алгоритмическую сложность O(n). При интенсивных операциях выделения\освобождения работает очеень медленно.

Х>для интенсивных операций существует пулы/арены
А если у тебя вся программа состоит из таких нтенсивных операций, например высоконагруженный сервер?

G>>Кроме того проход по списку непотокобезопасен, поэтому требуются особые приседания чтобы стандартный аллокатор нормально заработал в многопоточном окружении.

Х>ну ето просто неправда
Наверное неправльно понял. Приседания требуются в самом аллокаторе, кто снижает производительность.

Х>>>>>в случае с с++ лямбдами исполнено на 100%,

G>>>>На 200%, лямбд просто нету Есть только жалкое подобие.
Х>>>может ты найдёшь определение lambda в интернет и перестанешь нести ахинею?
G>>Ты прочитай 3 предыдущие страницы. Нормальные лямбды подразумевают лексические замыкания, которых нету и не будет в С++.
Х>во-первых: лямбды не подразумевают замыкания, ето замыкания подразумевают лямбды.
Источник этого бреда в студию.

Х>во-вторых: лексическое замыкание есть, прочитай теперь ты 3 предыдущие страницы.

Нету. Можно сымитировать подобие лексических замыканий причем со значительными ограничениями.

Х>>>да уж, дотнет действительно замазка для мозга. гц, метаданные, промежуточный код + jit, бесчисленные проверки кода на сейфанутость — всё ето есть даже тогда когда тебе етого не нужно, и ето всё в таком случае — не нужный оверхед.

G>>Не разводи демагогию, давай факты.
Х>зайди в раздел .NET или .NET GUI и посмотри темы в которых люди кричат о недостаточной производительности, такое ощущение что избавившись от менеджмента памяти дотнетовцы теперь приседают в борьбе за производительность
Многие проблемы с производительностью от незнания. У меня саого программы на .NET тормозили когда я только начинал на нем писать. Теперь таких проблем нету.
Re[64]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 18:21
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Здравствуйте, gandjustas, Вы писали:


ГВ>>>Это какие такие проблемы? Что объекты должны быть уничтожены до уничтожения самого пула? Так это — то же самое, что и общее предотвращение утечек памяти.

G>>Опять возвращаемся к ручному управлнию памятью, никаких shred_ptr и прочего.

ГВ>Почему? Самое обыкновенное управление модулями в программе на C++. В числе прочих, фаза завершения работы модуля может включать и очистку статических (глобальных) указателей.

Ох ё....

G>>>>>>Кроме того проход по списку непотокобезопасен, поэтому требуются особые приседания чтобы стандартный аллокатор нормально заработал в многопоточном окружении.

ГВ>>>>>Это что-то новенькое. Стандартные аллокаторы как раз вполне работают в многопоточном окружении.
G>>>>Угу, но работают медленно. Даже при однопоточном выделении. Блокировки небесплатные.
ГВ>>>Ты уж определись: работают стандартные аллокаторы в многопоточном окружении или нет.
G>>Раьотают, но медленно

ГВ>То есть, "нормальная" в твоей терминологии работа — это работа без блокировок, я прав?

Правильная работа — это когда не надо думать выделять память или нет.
Re[63]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 07.05.09 18:28
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>>>Что за темы?

Х>>тебе дать ссылку на тему которую завёл ты сам?
MK>Я, конечно, предполагал, что ты так можешь облажаться, но что Геннадий туда же... Это прямо как про боксинг!
и где же здесь лажа? что просил то и получил.
кстати про боксинг, будь добр расскажи, какой магией структуры на стеке, которые являются контекстом лямбды, продляют свою жизнь при возврате лямбды из метода?
People write code, programming languages don't.
Re[64]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 18:31
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>Здравствуйте, MxKazan, Вы писали:


MK>>>>Что за темы?

Х>>>тебе дать ссылку на тему которую завёл ты сам?
MK>>Я, конечно, предполагал, что ты так можешь облажаться, но что Геннадий туда же... Это прямо как про боксинг!
Х>и где же здесь лажа? что просил то и получил.
Х>кстати про боксинг, будь добр расскажи, какой магией структуры на стеке, которые являются контекстом лямбды, продляют свою жизнь при возврате лямбды из метода?
Это и называется лексическим замыканием
На C++ (даже с новым стандартом) такое повторить сможешь?
Re[61]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 07.05.09 18: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 18:41
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>Я, конечно, предполагал, что ты так можешь облажаться, но что Геннадий туда же... Это прямо как про боксинг!


Шутки-шутками, но если заглянуть в .NET GUI, то там прямо таки несколько активных топиков — про производительность. Однако!
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[64]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 07.05.09 18:43
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

MK>>Я, конечно, предполагал, что ты так можешь облажаться, но что Геннадий туда же... Это прямо как про боксинг!


ГВ>Шутки-шутками, но если заглянуть в .NET GUI, то там прямо таки несколько активных топиков — про производительность. Однако!


Давайте загляним в топики в разделе С++.

Шах и мат.
Re[66]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 07.05.09 18:45
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Всё, что не C++ — неправильно.


Да, понятно.
Re[64]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 07.05.09 18:48
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Здравствуйте, MxKazan, Вы писали:

MK>>Я, конечно, предполагал, что ты так можешь облажаться, но что Геннадий туда же... Это прямо как про боксинг!
ГВ>Шутки-шутками, но если заглянуть в .NET GUI, то там прямо таки несколько активных топиков — про производительность. Однако!
Ага. Только потом выясняется, что в обеих программисты создают по 10 тысяч пользовательских элементов, в одной это длиться 1-4 секунды, а в другой тормоза обнаруживаются в нативном(!) слое отрисовки. Только чтобы это понять, надо хотя-бы немного шарить в WPF, а не вестись на название тем. Кстати, еще упоминалось про тормоза в ветке .NET (не GUI). Не поделишься ссылками?
Re[64]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 07.05.09 18:51
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>кстати про боксинг, будь добр расскажи, какой магией структуры на стеке, которые являются контекстом лямбды, продляют свою жизнь при возврате лямбды из метода?

Структуры, являющиеся контекстом лямбды изначально расположены не на стеке, а в хипе вместе со всем контекстом лямбды. Потому боксинга здесь нет.
Re[65]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 07.05.09 18:55
Оценка:
Здравствуйте, MxKazan, Вы писали:

Х>>кстати про боксинг, будь добр расскажи, какой магией структуры на стеке, которые являются контекстом лямбды, продляют свою жизнь при возврате лямбды из метода?

MK>Легко. Эти структуры размещаются не на стеке, а в полях класса, который и лямбду оборачивает.
логично, в с++ вероятно похожая схема
People write code, programming languages don't.
Re[66]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 07.05.09 18:58
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>>>кстати про боксинг, будь добр расскажи, какой магией структуры на стеке, которые являются контекстом лямбды, продляют свою жизнь при возврате лямбды из метода?

S>>Структуры, являющиеся контекстом лямбды изначально расположены не на стеке, а в хипе вместе со всем контекстом лямбды. Потому боксинга здесь нет.
Х>эээ, ребят, вы таки определитесь как оно работает
То, что структура лежит в хипе, не означает что она отбоксирована. Может хоть немного сделаешь вид, что понимаешь о чем пишешь?
Re[66]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 07.05.09 19:01
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>Здравствуйте, MxKazan, Вы писали:


MK>>Легко. Эти структуры размещаются не на стеке, а в полях класса, который и лямбду оборачивает.

Х>логично, в с++ вероятно похожая схема

Судя по описанию новшеств в C++0x, ссылку на которое давал ГВ, схема в C++ невероятно не похожа на дотнетовскую.
Re[67]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 07.05.09 19: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 19:12
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>>Как раз таки привычки субъективны. А потребность в высокоуровневых языках в большенстве задач очень объективна.

ГВ>>Приехали. C++ — высокоуровневый язык. Или вы хотите поговорить о DSL? Ну давай, поговорим про DSL.
G>С++ очень низкоуровневый по сравнению с современными языками.

У меня дежа-вю. Это уже было и совсем недавно.

G>>>Но при этом существует достаточно много программистов на С++ со своим субъективным мнением.

ГВ>>Если мнения этих программистов хватает, чтобы решать поставленные задачи, значит, потребность в языках местами преувеличена, т.е., не всегда объективна. Сам понимаешь, материя "потребности" тонкая, весьма зависимая от "интеграла по субъективным суждениям".
G>Ну ты страшный бред говоришь. Это примерно как думать что не нужны машины, потому что лошадей хватает решать задачи.

Дык. Были бы машины. Больше похоже на замену одних лошадей чуть-чуть более другими.

ГВ>>Не совсем так. Дело в том, что GC для C++ не должен решать задачи управления абсолютно всеми объектами и никто ничего такого и не предлагает. Но для каких-то отдельных моментов он вполне может оказаться приемлемым решением, лучшим, чем reference counting. Ключевое слово: "какие-то отдельные моменты".

G>Ну а тепереь давай точнее. Как будет происходить разделение между управляемыми GC объектами и остальными? Какие это даст преимущества?

Тут надо подумать, быстро не отвечу. Преимущества, по идее, должны быть в меньшем количестве lock (неизбежен при подсчёте ссылок) и соответственно — в меньшем количестве сбросов кэша процессора. Ну и конечно — в решении проблемы с циклическими ссылками.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[68]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 07.05.09 19:14
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>погоди ерепенится, прочтя твоё сообщение я понял что структура изначально таки лежит на стеке, но в момент вызова лямбды она копируется в поле лямбды, своё же сообщение я написал в ответ на сообщение samius'а, в котором написано что структуры, попадающие в scope лямбды никогда не лежат на стеке, так как всё-таки верно?

Замкнутые структуры размещаются в полях класса.

Х>если верно второе то ето вообще удивительно, получается что там где в C# вызывается лямбда стековых структур не может быть в принципе, а ето просто неимоверный оверхед.

Ты так шутишь или взаправду считаешь, что 30-40 байт — это НЕИМОВЕРНЫЙ ОВЕРХЕД!?!?!?
Re[65]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 19:17
Оценка:
Здравствуйте, criosray, Вы писали:

ГВ>>Шутки-шутками, но если заглянуть в .NET GUI, то там прямо таки несколько активных топиков — про производительность. Однако!

C>Давайте загляним в топики в разделе С++.

Даже не заглядывая можно сказать, что производительность — любимая фишка плюсовиков, обсуждается часто и со вкусом. Так что, удивляться нечему.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[67]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 19:19
Оценка:
Здравствуйте, criosray, Вы писали:

ГВ>>Всё, что не C++ — неправильно.

C>Да, понятно.

Странно. Разве я называл шарповые или, например, лисповые лямбды — "недолямбдами", а сам C# — "недоязыком"? Так что, что-то тебе померещилось не то. Ты меня с кем-то путаешь.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[69]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 07.05.09 19:20
Оценка:
Здравствуйте, MxKazan, Вы писали:

Х>>погоди ерепенится, прочтя твоё сообщение я понял что структура изначально таки лежит на стеке, но в момент вызова лямбды она копируется в поле лямбды, своё же сообщение я написал в ответ на сообщение samius'а, в котором написано что структуры, попадающие в scope лямбды никогда не лежат на стеке, так как всё-таки верно?

MK>Замкнутые структуры размещаются в полях класса.
логично, но меня всё же более интересовал вопрос о том, будут ли ети структуры существовать на стеке если они замкнуты.

Х>>если верно второе то ето вообще удивительно, получается что там где в C# вызывается лямбда стековых структур не может быть в принципе, а ето просто неимоверный оверхед.

MK>Ты так шутишь или взаправду считаешь, что 30-40 байт — это НЕИМОВЕРНЫЙ ОВЕРХЕД!?!?!?
оверхед не в памяти, оверхед в скорости аллокации/доступа стек vs heap
People write code, programming languages don't.
Re[65]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 07.05.09 19:24
Оценка:
Здравствуйте, samius, Вы писали:

COF>>А вот в C# нет деструкторов и переопределения операторов присваивания, например.

S>Очень много желающих добавить в дотнет что-то. Например, паттерн-матчинг. И очень мало желающих вставить в дотнет деструкторы и операторы присванивания. Они почему-то нужны только C++-никам.

Ну так, а потом получается, что программы с GC страдают от утечек памяти. Кому сказать — не поверят :) Такое впечатление, что в ситуации "вам шашечки или ехать", дотнетчики уверенно выбирают шашечки :)
Re[70]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 07.05.09 19:29
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>оверхед не в памяти, оверхед в скорости аллокации/доступа стек vs heap

ааааа... я понял, ты хипом вообще не пользуешься, всё только в стеке, и пишешь ты только на ассемблере, а то в С++ еще и классы бывают с виртуальными методами, а это, как и хип, непременно неимоверный оверхед!
Re[62]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 19: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]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 07.05.09 19:32
Оценка:
Здравствуйте, COFF, Вы писали:

COF>Здравствуйте, samius, Вы писали:


COF>>>А вот в C# нет деструкторов и переопределения операторов присваивания, например.

S>>Очень много желающих добавить в дотнет что-то. Например, паттерн-матчинг. И очень мало желающих вставить в дотнет деструкторы и операторы присванивания. Они почему-то нужны только C++-никам.

COF>Ну так, а потом получается, что программы с GC страдают от утечек памяти. Кому сказать — не поверят

Как связано отсутствие деструкторов и операторов присваивания в дотнете с утечками программ с GC?

COF>Такое впечатление, что в ситуации "вам шашечки или ехать", дотнетчики уверенно выбирают шашечки

Что, программы на дотнете ни разу не ездят впринципе?
Re[71]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 07.05.09 19: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 19:32
Оценка:
Здравствуйте, MxKazan, Вы писали:

Х>>погоди ерепенится, прочтя твоё сообщение я понял что структура изначально таки лежит на стеке, но в момент вызова лямбды она копируется в поле лямбды, своё же сообщение я написал в ответ на сообщение samius'а, в котором написано что структуры, попадающие в scope лямбды никогда не лежат на стеке, так как всё-таки верно?

MK>Замкнутые структуры размещаются в полях класса.

А замкнуть "по ссылке" их можно? То есть так, чтобы структура "физически" осталась в стеке конструирующей лямбду функции? Или только "по значению", то есть — копированием в соответствующий экземпляр класса сконструированной лямбды?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[67]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 07.05.09 19:36
Оценка:
Здравствуйте, samius, Вы писали:

COF>>Ну так, а потом получается, что программы с GC страдают от утечек памяти. Кому сказать — не поверят :)

S>Как связано отсутствие деструкторов и операторов присваивания в дотнете с утечками программ с GC?

Они позволяют реализовывать осмысленные стратегии управления ресурсами, в том числе отличными от памяти. На самом деле, это очевидно. Или наша цель догнать и перегнать хаскель, в том числе и по производительности, а ресурсы уж как-нибудь сами собой освободятся? :)

COF>>Такое впечатление, что в ситуации "вам шашечки или ехать", дотнетчики уверенно выбирают шашечки :)

S>Что, программы на дотнете ни разу не ездят впринципе?

Медленно и печально :)
Re[65]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 19:36
Оценка:
Здравствуйте, samius, Вы писали:

COF>>В конце-концов, ну не было в C++ лямбд — ну и черт с ними, вполне можно без них прожить. Что народ к ним привязался?

S>А кто спорит? Можно. Можно прожить и без рекурсии, и даже без виртуальных методов.
Да что там лямбды. Десяток страниц назад кто-то доказывал что всю программу можно написать используя один стек.
Даешь офис на стеке
Re[70]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 19:37
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>>>если верно второе то ето вообще удивительно, получается что там где в C# вызывается лямбда стековых структур не может быть в принципе, а ето просто неимоверный оверхед.

MK>>Ты так шутишь или взаправду считаешь, что 30-40 байт — это НЕИМОВЕРНЫЙ ОВЕРХЕД!?!?!?
Х>оверхед не в памяти, оверхед в скорости аллокации/доступа стек vs heap

Ну и расскажи нам о скорости аллокации стек vs managed heap
Re[63]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 19:38
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Есть переменная на стеке, надо построить честное замыкание для лямбды. Время жизни лямбды больше текущего скоупа. Что С++ предлагает? Ничего.


Да ёлки ж зелёные! Значения (синоним в данном контексте: копия переменной) плюсовыми лямбдами замыкаются с лёгкостью неимоверной. А дальше — хоть выводи функцию из скопа, хоть прихлопывай.

G>Нет полноценных замыканий => нет полноценных лямбд. Твоя демагогия не интересует.


Не, ну это уже просто феерично.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[70]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 07.05.09 19:39
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>А замкнуть "по ссылке" их можно? То есть так, чтобы структура "физически" осталась в стеке конструирующей лямбду функции? Или только "по значению", то есть — копированием в соответствующий экземпляр класса сконструированной лямбды?

Я напишу про общий случай, т.к. спецификацию на язык не читал. Так вот, копирования никакого нет. Компилятор превращает лямбду в класс, у которого поля — это замкнутые переменные, а единственный метод — тело (или как там оно называется) лямбды. Все операторы работающие с замкнутой переменной вне лямбды, переписываются на обращение к полю класса.
Re[68]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 07.05.09 19:43
Оценка:
Здравствуйте, COFF, Вы писали:

COF>Они позволяют реализовывать осмысленные стратегии управления ресурсами, в том числе отличными от памяти. На самом деле, это очевидно. Или наша цель догнать и перегнать хаскель, в том числе и по производительности, а ресурсы уж как-нибудь сами собой освободятся?

Что значит "осмысленные"?
Re[68]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 19:43
Оценка:
Здравствуйте, COFF, Вы писали:

COF>Здравствуйте, samius, Вы писали:


COF>>>Ну так, а потом получается, что программы с GC страдают от утечек памяти. Кому сказать — не поверят

S>>Как связано отсутствие деструкторов и операторов присваивания в дотнете с утечками программ с GC?

COF>Они позволяют реализовывать осмысленные стратегии управления ресурсами, в том числе отличными от памяти.

Осмысленное в твоем понимании — ручное?

COF>>>Такое впечатление, что в ситуации "вам шашечки или ехать", дотнетчики уверенно выбирают шашечки

S>>Что, программы на дотнете ни разу не ездят впринципе?
COF>Медленно и печально
От чего такая уверенность?
Вот привели в пример какой-то пост, где с помощью WPF попытались нарисовать туеву хучу объектов. Интересно, на С++ аналогичное вообще заведется? (не говоря о том чтобы поехать)
Re[71]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 19:48
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>Здравствуйте, Геннадий Васильев, Вы писали:


ГВ>>А замкнуть "по ссылке" их можно? То есть так, чтобы структура "физически" осталась в стеке конструирующей лямбду функции? Или только "по значению", то есть — копированием в соответствующий экземпляр класса сконструированной лямбды?

MK>Я напишу про общий случай, т.к. спецификацию на язык не читал. Так вот, копирования никакого нет. Компилятор превращает лямбду в класс, у которого поля — это замкнутые переменные, а единственный метод — тело (или как там оно называется) лямбды. Все операторы работающие с замкнутой переменной вне лямбды, переписываются на обращение к полю класса.

Примерно то же самое, кстати, должен делать и компилятор C++. Лямбда тоже преобразуется в класс с единственным методом (не считая конструктора копии, кажется) — "operator()(сигнатура, выведенная из параметров лямбды)".

По сути вопроса — понятно. Не знаешь, значит — не знаешь.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[70]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 07.05.09 19:51
Оценка:
Здравствуйте, COFF, Вы писали:

COF>Осмысленное — это значит сделал один раз и забыл, все работает. А ручное — это как-раз подход C#, присвоил переменную, не забудь вызвать функцию типа SubscribeResource, обнулил — UnsubscribeResource ну и так далее.

Это очередной ответ из серии "я ни черта не понимаю о чем там в ветках про .Net, но есть пачка слов, к которым можно прицепиться". Уже утомили.
Re[71]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 07.05.09 19:52
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>Это очередной ответ из серии "я ни черта не понимаю о чем там в ветках про .Net, но есть пачка слов, к которым можно прицепиться". Уже утомили.


Ага, сейчас ты мне расскажешь про IDisposable :) Плавали, знаем..
Re[65]: Брависсимо!
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 19:56
Оценка:
Здравствуйте, gandjustas, Вы писали:

Х>>запомнил?

G>Не надо мне доказывать что нету и не будет в с++ нормальных замыканий, я это и так знаю.

Итак: "лямбды в C++ предусматривают возможность замыкания контекста по значению". Твой ответ? (Бис! Бис! Заранее аплодирую)
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[70]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 19:57
Оценка:
Здравствуйте, COFF, Вы писали:

COF>Здравствуйте, gandjustas, Вы писали:


COF>>>Они позволяют реализовывать осмысленные стратегии управления ресурсами, в том числе отличными от памяти.

G>>Осмысленное в твоем понимании — ручное?

COF>Осмысленное — это значит сделал один раз и забыл, все работает. А ручное — это как-раз подход C#, присвоил переменную, не забудь вызвать функцию типа SubscribeResource, обнулил — UnsubscribeResource ну и так далее.


А ты на C# писал чтонить сложнее heelo world?
А с асинхронным вводом-выводом работал?
Re[72]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 07.05.09 20:00
Оценка:
Здравствуйте, COFF, Вы писали:

COF>Ага, сейчас ты мне расскажешь про IDisposable Плавали, знаем..

IDisposable сделан для unmanaged-ресурсов, чтобы за вашим, недоступным для GC, багажом следить.
В полностью managed библиотеках он практически не нужен. WPF тому пример.
Re[71]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 07.05.09 20:00
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>А с асинхронным вводом-выводом работал?

А причем тут это?
Re[72]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 07.05.09 20:03
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>>А замкнуть "по ссылке" их можно? То есть так, чтобы структура "физически" осталась в стеке конструирующей лямбду функции? Или только "по значению", то есть — копированием в соответствующий экземпляр класса сконструированной лямбды?

MK>>Я напишу про общий случай, т.к. спецификацию на язык не читал. Так вот, копирования никакого нет. Компилятор превращает лямбду в класс, у которого поля — это замкнутые переменные, а единственный метод — тело (или как там оно называется) лямбды. Все операторы работающие с замкнутой переменной вне лямбды, переписываются на обращение к полю класса.

ГВ>По сути вопроса — понятно. Не знаешь, значит — не знаешь.

Я не знаю только, делает ли компилятор в каких-либо случаях замыкание на стек. А те лямбды, которые я смотрел в Рефлекторе, реализованы именно так, как описано.
Re[73]: Работа - с чего начать: С++ или С#?
От: COFF  
Дата: 07.05.09 20:04
Оценка:
Здравствуйте, MxKazan, Вы писали:

COF>>Ага, сейчас ты мне расскажешь про IDisposable :) Плавали, знаем..

MK>IDisposable сделан для unmanaged-ресурсов, чтобы за вашим, недоступным для GC, багажом следить.
MK>В полностью managed библиотеках он практически не нужен. WPF тому пример.

Хм, из ссылки выше я скорее заключил бы обратное :) Потом, времена когда вся система и все приложения будут работать под одной виртуальной машиной с одним GC пока не наступили, тогда может это и не нужно будет, а пока доступ ко внешним по отношению к данному GC ресурсам — это обычная рутинная задача для любого приложения.
Re[60]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 07.05.09 20:07
Оценка:
Здравствуйте, Хвост, Вы писали:

VD>>А можно узнать, решениями каких задач ты занимаешься на С++?

Х>Можно, в данный момент ето десктопная GIS.

И что в ней требует использования С++?

Х>В свою очередь можно узнать, какие задачи ты решаешь на C#?


Последнее, что я написал на C# (исключая тесты) был редактор кода с подсветкой синтаксиса.
http://rsdn.ru/projects/Rsdn.Editor/Article/Rsdn.Edit.xml это было в 2005-ом.
Еще по мелочи для интеграции с VS 2008 кое-что писал.

А так с 2006-го я им не пользуюсь. Для справки, С++ я практически не пользуюсь с 2002-го года. До этого на С и С++ я писал около 7 лет.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[71]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 07.05.09 20:08
Оценка:
Здравствуйте, gandjustas, Вы писали:

ГВ>>Ясный пень — программы на C++ падают от одного слова: "туева хуча". Заклинание такое, хуже "мемори лика".

G>Не, такие программы на С++ просто не появляются.

Во, талантище!
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[74]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 07.05.09 20:10
Оценка:
Здравствуйте, COFF, Вы писали:

COF>Хм, из ссылки выше я скорее заключил бы обратное Потом, времена когда вся система и все приложения будут работать под одной виртуальной машиной с одним GC пока не наступили, тогда может это и не нужно будет, а пока доступ ко внешним по отношению к данному GC ресурсам — это обычная рутинная задача для любого приложения.

Да ты не один такой. Вы тут многие свои оригинальные выводы делаете. Всё от того, что на .Net никто не пишет и смотрит на обсуждение с позиции "к чему бы придраться". Если бы ты почитал внимательно, то увидел бы, что спор идет против втаскивания наследия (unmanaged)WinForms в WPF. Мне еще не разу не понадобился IDisposable, хотя уже 7 месяцев работаю над приложением на WPF, и контролы писал и шаблоны ваял и много много еще чего.
Re[72]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 20:12
Оценка:
Здравствуйте, COFF, Вы писали:

COF>Здравствуйте, gandjustas, Вы писали:


G>>А с асинхронным вводом-выводом работал?

COF>А причем тут это?
При том.
Асинхронный ввод-вывод ломает "линейную" структуры программы, это очень сильно сказывается на том как управлять ресурсами.
Re[70]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 07.05.09 20:18
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>Здравствуйте, gandjustas, Вы писали:


COF>>>>>Такое впечатление, что в ситуации "вам шашечки или ехать", дотнетчики уверенно выбирают шашечки

S>>>>Что, программы на дотнете ни разу не ездят впринципе?
COF>>>Медленно и печально
G>>От чего такая уверенность?
G>>Вот привели в пример какой-то пост, где с помощью WPF попытались нарисовать туеву хучу объектов. Интересно, на С++ аналогичное вообще заведется? (не говоря о том чтобы поехать)
Х>тут я уже упомянул что работаю над GIS, так вот, конечно не 10 тысяч объектов, а 20 тысяч, ну и не 1-4 секунды а 25 раз в секунду (чтобы глазу было приятно), похоже ты прав, ето пожалуй не едет, ето пожалуй летает
20 тысяч векторных примитивов с прозрачностью?
Re[70]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 07.05.09 20:20
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>тут я уже упомянул что работаю над GIS, так вот, конечно не 10 тысяч объектов, а 20 тысяч, ну и не 1-4 секунды а 25 раз в секунду (чтобы глазу было приятно), похоже ты прав, ето пожалуй не едет, ето пожалуй летает

Чего 25 раз в секунду? Пересоздаешь 25 раз в секунду 20 тысяч объектов пользовательского интерфейса?
Re[71]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 07.05.09 20: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 Российская Империя www.nemerle.org
Дата: 07.05.09 20: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
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[71]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 07.05.09 20:24
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>>Вот привели в пример какой-то пост, где с помощью WPF попытались нарисовать туеву хучу объектов. Интересно, на С++ аналогичное вообще заведется? (не говоря о том чтобы поехать)

Х>>тут я уже упомянул что работаю над GIS, так вот, конечно не 10 тысяч объектов, а 20 тысяч, ну и не 1-4 секунды а 25 раз в секунду (чтобы глазу было приятно), похоже ты прав, ето пожалуй не едет, ето пожалуй летает
G>20 тысяч векторных примитивов с прозрачностью?
круто, да?
People write code, programming languages don't.
Re[72]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 07.05.09 20:28
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>Здравствуйте, MxKazan, Вы писали:

MK>>Здравствуйте, Хвост, Вы писали:
Х>>>тут я уже упомянул что работаю над GIS, так вот, конечно не 10 тысяч объектов, а 20 тысяч, ну и не 1-4 секунды а 25 раз в секунду (чтобы глазу было приятно), похоже ты прав, ето пожалуй не едет, ето пожалуй летает
MK>>Чего 25 раз в секунду? Пересоздаешь 25 раз в секунду 20 тысяч объектов пользовательского интерфейса?
Х>не пользовательского интерфейса, а скорее упомянутые gandjustas'ом "20 тысяч векторных примитивов с прозрачностью", но при етом ессно каждый етот примитив отзывчив на действия пользователя.
Ну а че, мож какие подробности? Что рисует эти примитивы, как "отзывчивость" реализуется? На каком компе ты этот "полет" наблюдаешь?
Re[73]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 07.05.09 20: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 20: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]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 07.05.09 20: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]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 07.05.09 20:39
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>военная тайна: рендерер — OpenGL

Что тут недостижимого для C#?
Re[73]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 07.05.09 20: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]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 07.05.09 20:43
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>Здравствуйте, samius, Вы писали:


S>>Каждый примитив отзывчив? А зачем при этом перерисовывать остальные 20 тысяч? чтобы было чем занять процессор?

Х>а как ты реализуешь плавный скролл/зум?
Заморозкой рендеригна на время скролл-а. Но тот GIS был чисто GDI-шным.
Правда потом (уже на втором шарпе) приходилось прикручивать к ESRI ArcMap 8 рельеф местности на DirectX-е. Вот при скроллинге рельеф был, а карта дорисовывалась после.
Re[75]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 07.05.09 20:44
Оценка:
Здравствуйте, samius, Вы писали:

S>Здравствуйте, Хвост, Вы писали:


Х>>военная тайна: рендерер — OpenGL

S>Что тут недостижимого для C#?
тут недостижимого на C# то что отрисовка на акселлераторе занимает меньшую часть времени отрисовки кадра, основное время — трансформация примитивов из одной координатной системы в другую, тут даже такая вещь как проверка индекса на допустимый диапазон при обращению к массиву даёт проседание в 30%, куда здесь C# тулить?
People write code, programming languages don't.
Re[75]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 07.05.09 20:47
Оценка:
Здравствуйте, samius, Вы писали:

S>Здравствуйте, Хвост, Вы писали:


Х>>Здравствуйте, samius, Вы писали:


S>>>Каждый примитив отзывчив? А зачем при этом перерисовывать остальные 20 тысяч? чтобы было чем занять процессор?

Х>>а как ты реализуешь плавный скролл/зум?
S>Заморозкой рендеригна на время скролл-а. Но тот GIS был чисто GDI-шным.
ну собственно так почти у всех сделано, хотя у нас нет заморозки даже в GDI режиме, правда и прозрачности нет.
People write code, programming languages don't.
Re[74]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 07.05.09 20:47
Оценка:
Здравствуйте, Хвост, Вы писали:

MK>>Ну а че, мож какие подробности? Что рисует эти примитивы, как "отзывчивость" реализуется? На каком компе ты этот "полет" наблюдаешь?

Х>военная тайна: рендерер — OpenGL (ето если прозрачность нужна, без хардварной акселлерации прозрачность тоже "летает", но так низенько-низенько ), отзывчивость реализуется тем что реально объект, ответственный за отзывчивость создаётся только в момент начального действия пользователя (тыкнул мышкой в примитив/нажал хоткей/выбрал менюшку), а так по сути 99.99% того что видно на екране — просто картинка. Вроде ничего хитрого.
Так я и думал. Чего ж ты теплое с мягким сравниваешь? WPF не конкурент рисованию ручками на уровне "линию туда, кружочек сюда" по части скорости, как и рисование "линию туда, кружочек сюда" не конкурент WPF по части фич, таких как биндинг. Микрософт, кстати, сама не позиционирует WPF как библиотеку для приложений, требующих столь сложной графики. И люди в здравом уме это понимают.
Re[76]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 07.05.09 20:49
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>тут недостижимого на C# то что отрисовка на акселлераторе занимает меньшую часть времени отрисовки кадра, основное время — трансформация примитивов из одной координатной системы в другую, тут даже такая вещь как проверка индекса на допустимый диапазон при обращению к массиву даёт проседание в 30%, куда здесь C# тулить?

Ой да ладно. Ты пробовал или снова "боксинг"?
Re[76]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 07.05.09 20:54
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>Здравствуйте, samius, Вы писали:


S>>Здравствуйте, Хвост, Вы писали:


Х>>>военная тайна: рендерер — OpenGL

S>>Что тут недостижимого для C#?
Х>тут недостижимого на C# то что отрисовка на акселлераторе занимает меньшую часть времени отрисовки кадра, основное время — трансформация примитивов из одной координатной системы в другую
Координатная система тоже 25 раз в секунду меняется?

X>тут даже такая вещь как проверка индекса на допустимый диапазон при обращению к массиву даёт проседание в 30%, куда здесь C# тулить?

Да, кудауж тут C#-у. Он даже по массивам не умеет ходить
Re[77]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 07.05.09 21:01
Оценка:
Здравствуйте, samius, Вы писали:

S>Здравствуйте, Хвост, Вы писали:


Х>>Здравствуйте, samius, Вы писали:


S>>>Здравствуйте, Хвост, Вы писали:


Х>>>>военная тайна: рендерер — OpenGL

S>>>Что тут недостижимого для C#?
Х>>тут недостижимого на C# то что отрисовка на акселлераторе занимает меньшую часть времени отрисовки кадра, основное время — трансформация примитивов из одной координатной системы в другую
S>Координатная система тоже 25 раз в секунду меняется?
не понял что имелось ввиду. Координаты подавляющего большинства примитивов хранятся всегда в неизменном виде, и их при каждом скролле или зуме необходимо пересчитывать в екранные координаты.
People write code, programming languages don't.
Re[79]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 07.05.09 21:19
Оценка:
Здравствуйте, samius, Вы писали:

S>Здравствуйте, Хвост, Вы писали:


Х>>Здравствуйте, samius, Вы писали:


S>>>Координатная система тоже 25 раз в секунду меняется?

Х>>не понял что имелось ввиду. Координаты подавляющего большинства примитивов хранятся всегда в неизменном виде, и их при каждом скролле или зуме необходимо пересчитывать в екранные координаты.
S>Вообще OpenGL и сам умеет пересчитывать координаты, правда только афинные и почти афинные преобразования, те что можно описать матрицей.
S>Знаю, что хранятся другие координаты, например, геодезические. Но, их ведь можно преобразовать единожды при чтении в "почти экранные", т.е. в такие координаты, которые легко преобразуются как GDI так и OpenGL-ем. Естественно, все операции с координатами следует проводит с оригинальными координатами, а "почти экранные" хороши для рендеринга. Тогда преобразование координат (кроме первоначального) полностью ляжет на железо.
абсолютно верно, но ето к сожалению шило на мыло, потому как видимых елементов на екране на порядок/порядки меньше чем есть на самом деле, а для возможности акселлерации прийдётся их трансформировать все, а не только видимые, в случае с GDI ето просто смертельно. Что немаловажно, постоянные трансформации вносят ошибки, поетому оказалось проще и еффективней реализовать схему которая есть.
People write code, programming languages don't.
Re[81]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 07.05.09 22:47
Оценка:
Здравствуйте, samius, Вы писали:

S>На самом деле, мы уже выбились из темы и перешли к деталям реализации GIS-ов.

так ето здорово во флейме и так в основном пустопорожний разговор, так что ето только в плюс.
S>Но я отвечу.

S>Порядки не важны, т.к. есть набор видимых элементов, который обновляется в зависимости от позиции и масштаба вьюхи. Есть эффективные алгоритмы пространственного индексирования объектов, которыми можно пользоваться для того, чтобы читать только те объекты, которые требуется отображать. Потому ни трансформировать все объекты ни читать их в память для отрисовки не обязательно. Те что прочитаны — трансформируются один раз софтом в промежуточную систему координат, все остальные разы железом.

но ведь при скролле/зуме, когда во вьюху попадают новые области, необходимо их заново трансформировать в промежуточную форму, поетому с таким же успехом можно трансформировать сразу в екранную.

S>Постоянные трансформации не могут вносить ошибки если эти трансформации не туда-обратно. Всегда есть правильные (родные координаты объекта) и все остальные, полученые из них. Вся логика типа кадастра работает с родными координатами, либо непосредственно полученными из родных.

S>А отрисовке — пофик на точность. Там на пиксель набежит больше любой погрешности.
ну собственно я про точность отрисовки и говорил, например последовательный зум-аут/зум ин на одну и ту же величину и мы видим уже не то что в начале, или например такой вау-эффект как перелёт из одной точки в другую (как в гуглёрсе) уже не выглядит как последовательное умножение матрицы трансформации на какую-то статичную другую, т.к. накапливаются ошибки. В принципе все ети неточности несложно обходятся, но дело в том что незачем, т.к. на данный момент все трансформации в софте.
People write code, programming languages don't.
Re[83]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 08.05.09 00: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 США  
Дата: 08.05.09 00:17
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>...а интернет нативным С++ флешем...


Это как? Сам плеер, что ли, на C++ написан? Ну так и JVM тоже на C++ написана. А исполняемй код у флеша нет, не нативный.
Re[66]: Работа - с чего начать: С++ или С#?
От: WFrag США  
Дата: 08.05.09 00:20
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>задумайся почему всё ето так, пойми и осознай, что производительность — ето ресурс, и будет им во веки веков, и процессор, который быстрее в два раза другого, стоит в 3 раза дороже, и юзер выберет программу которая может выполнять три функции параллельно а не две.


Да прям. На тот же Flash и JS (до V8 и подобных) посмотри. Оба тормозиловы жуткие, куда уж там Java до них. И ничо.
Re[70]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 08.05.09 03:20
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>А замкнуть "по ссылке" их можно? То есть так, чтобы структура "физически" осталась в стеке конструирующей лямбду функции?
Нет, нельзя. А главное — зачем?
ГВ>Или только "по значению", то есть — копированием в соответствующий экземпляр класса сконструированной лямбды?
Нет, никакого копирования нет. Т, что выглядит локальными переменными, становится полями структуры. Все обращения в коде метода к этим локальным переменным превращаются в обращения к полям.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[71]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 08.05.09 03:38
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>А замкнуть "по ссылке" их можно? То есть так, чтобы структура "физически" осталась в стеке конструирующей лямбду функции?
S>Нет, нельзя. А главное — зачем?

Логически — незачем. С точки зрения быстродействия может дать некоторый выигрыш, поскольку данные не будут лишний раз копироваться.

ГВ>>Или только "по значению", то есть — копированием в соответствующий экземпляр класса сконструированной лямбды?

S>Нет, никакого копирования нет. Т, что выглядит локальными переменными, становится полями структуры. Все обращения в коде метода к этим локальным переменным превращаются в обращения к полям.

Стоп, тогда я тебя не понял. Значит, физически, данные в структуре, размещённой в стеке и в объекте-лямбде — одни и те же? Или нет? Мы сейчас обсуждаем ситуацию, когда данные представляют собой структуру (не объект). Для упрощения положим, что лямбда не выходит за пределы скопа, где объявлена замыкаемая структура, то есть время жизни лямбда-объекта гарантированно превышает время жизни замыкаемой структуры и компилятору об этом известно.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[72]: Тьфу
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 08.05.09 03:40
Оценка:
ГВ>...то есть время жизни лямбда-объекта гарантированно превышает время жизни замыкаемой структуры и компилятору об этом известно.

Наоборот, разумеется — время жизни лямбды гарантированно меньше времени жизни структуры.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[73]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 08.05.09 06:01
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>К счастью, стоимость размещения в хипе в управляемой среде ненамного выше стоимости размещения в стеке.

Заметно, если вспомнить foreach по перечислителю-структуре и по перечислителю-классу. Но что-то я не замечал, что бы большинство занимались ручной реализацией перечислителей на структурах. Т.е. в большинстве случаев приемлемо (и лямбда с замыканием на хипе и перечислитель на интерфейсе), а если профайлер скажет что беда, недолго переписать низкоуровневыми средствами критичный кусок.

S>Для того, чтобы написать программу, в которой будет заметен эффект от того, что лямбда размещена не в стеке, нужно очень-очень постараться. А мы тем временем продолжаем надеяться на то, что за то время, которое тебе потребуется для написания этой программы, к CLR таки прикрутят escape analysis. А в отличие от нативного кода, MSIL всех приложений автоматически выиграет от этого будущего улучшения без явной перекомпиляции и передеплоймента приложений.

Да не, можно найти тысячу ситуаций (искувственных и натуральных), где разница в способе размещения замыкания будет заметна. Взять хотя бы тот же расчет координат в GIS-ах. Да, точно! В таких нагруженных случаях пользоваться лямбдой вообще неуместно, потому говорить о разнице между размещением замыкания лямбды на стеке и хипе как-бы неуместно. Боюсь что больше будет заметна разница лямбд на делегатах (в C#) и лямбд на виртуальных функциях (Nemerle и F#).
Re[74]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 08.05.09 06: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[78]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 08.05.09 06:32
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>Здравствуйте, MxKazan, Вы писали:


MK>>Здравствуйте, Хвост, Вы писали:


Х>>>тут недостижимого на C# то что отрисовка на акселлераторе занимает меньшую часть времени отрисовки кадра, основное время — трансформация примитивов из одной координатной системы в другую, тут даже такая вещь как проверка индекса на допустимый диапазон при обращению к массиву даёт проседание в 30%, куда здесь C# тулить?

MK>>Ой да ладно. Ты пробовал или снова "боксинг"?
Х>что да ладно? про индексы ето факт, если ты про C# то ессно не пробовал, потому как не взлетит очевидно.
Ну не надо так откровенно сливать.
Приведи тест где заметны эти 30%.

Как ты можешт рассуждать о производительности .NET, если не писал на нем ничего?
Re[75]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 08.05.09 06:36
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, samius, Вы писали:


S>>Заметно, если вспомнить foreach по перечислителю-структуре и по перечислителю-классу.

S>Это никак не связано с размещением. Разница в скорости сводится к возможности инлайнинга: для структур компилятор и JIT знают точный тип аргумента, в отличие от паттерна, постренного на абстрактном IEnumerable<T>. С лямбдами такой разницы не будет — попробуй на досуге сравнить скорострельность "автогенеренной" лямбды с ручным замыканием, выполненным поверх структуры в стеке.
Попробую на досуге.

S>Я пока не в курсе, нужны ли вообще лямбды в расчётах координат в GIS. Хотя, если вспомнить про то, что лямбды умеют сворачиваться не только в делегаты, но и в Expression Trees, то они могут напрочь порвать реализацию на С++ путём компиляции в шейдерные операции для выполнения в GPU

Нужны или нет незнаю, но всунуть их насильно туда можно, но не нужно.
А идея с шейдерами мне понравилась. Но не ради порвать C++, а ради реализации полезных фич.
Re[82]: Работа - с чего начать: С++ или С#?
От: minorlogic Украина  
Дата: 08.05.09 09:22
Оценка:
Мне бы сразу в голову пришла идея.

Апроксимировать проекцию набором треугольников, и внутри тотуголика использовать афинный мапинг.

Преимущества
1. Данные мапятся на плоскость треугольника единожды и кешируются.
2. все трансформации как апаратно так и совтово очень простые (афинные).
3. хорошо ляжет на апаратное ускорение.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[84]: Работа - с чего начать: С++ или С#?
От: minorlogic Украина  
Дата: 08.05.09 09: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]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 08.05.09 09:53
Оценка:
Здравствуйте, minorlogic, Вы писали:

M>Мне бы сразу в голову пришла идея.


M>Апроксимировать проекцию набором треугольников, и внутри тотуголика использовать афинный мапинг.


M>Преимущества

M>1. Данные мапятся на плоскость треугольника единожды и кешируются.
M>2. все трансформации как апаратно так и совтово очень простые (афинные).
M>3. хорошо ляжет на апаратное ускорение.

Но и эффект будет не тот, как в рендеригне без мапинга изображения. В GIS случаются немонотонные заливки, там важны толщины и структуры линий, значки (иконки). Все это поплывает при аффинном мапинге кэшированного изображения.
Re[66]: Работа - с чего начать: С++ или С#?
От: minorlogic Украина  
Дата: 08.05.09 09: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]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 08.05.09 10:02
Оценка:
Здравствуйте, minorlogic, Вы писали:

M>Здравствуйте, Хвост, Вы писали:


S>>>А я говорил, что только промежуточные, а потом манипуляция матрицей. Потому 1000 раз зум-аут/зум-ин не повлияют на координаты. В любом случае координаты объекта при смене вида меняться не должны. Координаты примитива — пожалуйста. Объект неизменен при прорисовке.

Х>>дык объект то и неизменен, вид примитива и меняется, т.к. матрица трансформации при 1000 раз зум-аут/зум-ин накапливает ошибку.

M>Этот момент мне не совсем ясен, можно подробнее ? Ошибка в матрице по отношению к чему? какая именно ошибка ?

Имеется ввиду, что если матрицу подвергнуть череде преобразований, так что последнее преобразование должно вернуть матрицу в исходное состояние (например, зум-аут и зум-ин на ту же величину), то мы получим матрицу, которая в точности не будет совпадать с исходной за счет погрешности вычислений. При повторении погрешность может убежать.

M>Трансформацию можно хранить не в матрице а как набор трансформаций Rotation(from radians) * translation( x,y) * scale(s)

Вот именно. Погрешность не накопится в случае, когда есть исходная матрица X (всегда одинаковая) и набор параметров (поворот, масштаб, сдвиг).
Re[84]: Работа - с чего начать: С++ или С#?
От: minorlogic Украина  
Дата: 08.05.09 10: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[85]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 08.05.09 12: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 12:08
Оценка:
Здравствуйте, Хвост, Вы писали:
както неудачно нажал отправить, предыдущее сообщение можно удалить

Х>>>ну ещё раз, их либо пересчитывать в псевдо-екранные нужно при каждом сдвиге/масштабировании карты (ето если у нас есть псевдоекранные координаты только видимой области) либо пересчитать все координаты (т.е. и те что вне зоны видимости) во внеекранные заранее, тогда можно пользовать аксселлерированые преобразования, но ето как я уже писал шило на мыло.

S>>Еще раз. Если мы в "плоском" режиме, не проецируя геометрию на шарик, либо проецируя на шарик текстуру, то псевдо-экранные координаты считаются один раз. Сдвиг и масштабирование не потребует полного пересчета, т.к. позволит домножить на матрицу, что можно отдать железу. Для того чтобы понять, лежит объект на экране или нет, пересчитвать его координаты в экранные нет нужды! Достаточно иметь рамку экрана в псевдоэкранных координатах и пространственный индекс в родных координатах объекта.
давай тезисами опишу проблемму
чтобы трансформировать на железе — нужно иметь псевдо-екранные координаты (ето ещё не проблемма)
для того чтобы работать со всей геометрией — нужно иметь её всю в псевдо-екранных координатах (тут проблемма — резко возросшее число геометрии для трансформации)
если не всю — а только видимую, то необходимо постоянно пересчитывать в псевдо-екранные координаты геометрию, появляющуюся во вьюхе при скролле/зуме (тут проблемма — какой тогда смысл в трансформациях на железе если нужно постоянно трансформировать в псевдо-екранные координаты новую видимую геометрию)

S>>>>А я говорил, что только промежуточные, а потом манипуляция матрицей. Потому 1000 раз зум-аут/зум-ин не повлияют на координаты. В любом случае координаты объекта при смене вида меняться не должны. Координаты примитива — пожалуйста. Объект неизменен при прорисовке.

Х>>>дык объект то и неизменен, вид примитива и меняется, т.к. матрица трансформации при 1000 раз зум-аут/зум-ин накапливает ошибку.
S>>А, вона ты о чем Так- конечно. Тут и зумать не надо. Потаскал карту мышкой в режиме пана и объекты разбежались кто-куда (набежала погрешность на сдвигах).
S>>Такой эффект решается запоминанием предыдущего положения и направления "наблюдателя" и применения коэффициентов к нему. Тогда при 1000 зумов или 1000 панах меняются туда-обратно не коэффициенты матрицы, а коэффициенты, которые требуется применить к предыдущему положению "наблюдателя", фактически к запомненной ранее матрице вида. Сразу про накопление ошибки в матрице на множестве итераций туда-обратно можно забыть.
всё верно, просто код становится чуть менее тривиальным, но ето не проблемма.

S>>>>Но повторить худо-бедно такой пролет на векторных данных можно. Естественно, будет зависеть от обилия данных и способа проекции (либо проекция текстуры, либо плоский рендеринг по спроектированным с шарика на плоскость координатам). С шарика на плоскость тоже можно схалтурить и поручить железу.

Х>>>да, можно, если учесть неточности железки и соответственно с этим написать алгоритм пролёта.
S>>Какие неточности железки? Пиксель туда-сюда?
ну вообще-то не пиксель, а поболе, заметно глазу.
People write code, programming languages don't.
Re[86]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 08.05.09 12:13
Оценка:
Здравствуйте, samius, Вы писали:

S>Теперь кажись понял. Но тут мы получаем дополнительную задачу разбиения примитивов по треугольникам с разными преобразованиями. Например, если взять полигон-контур России, то он размажется по многим треугольникам, аппроксимирующим эллипсойд. Сразу получим проблему стыков частей такой фигуры по границам аппроксимирующих треугольников. Без введения дополнительных точек не представляю как решать.

S>Нужен gluTess, либо своя реализация теоретико-множественных операций над точками, ограниченных контурами полигонов. Решается. Да и порядочный GIS должен иметь такую штуку в арсенале.
+1, только хотел отметить про gluTess, что он настолько тормозной (даже для не-реалтайм триангуляции) что даже и пытаться не стоит, есть реализации на порядки быстрее.
People write code, programming languages don't.
Re[64]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 08.05.09 13:50
Оценка:
Здравствуйте, CreatorCray, Вы писали:

G>>Твой наколенный непотокобезопасен.

CC>
CC>Жжошь!
CC>Можно узнать с какого перепугу ты так решил?
ну как же, ведь всё что быстрее гц ето заведомо непотокобезопасно и вообще UB
кстати результат гц просто удручает, всего в полтора раза быстрее VC-шного CRT-аллокатора, и ето быстро??? абберация налицо
People write code, programming languages don't.
Re[65]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 08.05.09 13: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]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 08.05.09 13:55
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>Здравствуйте, gandjustas, Вы писали:


G>>Здравствуйте, CreatorCray, Вы писали:


CC>>>Там Per-thread pool с lock-free deferred алгоритмом на случай освобождения памяти из не-родного-потока.


G>>Кстати с явным Free тоже бльшая попа. Все это придется оборачивать в очередные умные указатели чтобы не было утечек.


G>>Заметь что код на C#, такой как в тесте, не требует никаких усилий чтобы работать быстро. Чтобы работал быстро аналогичный код на С++ требуется немало усилий.

Х>в полтора раза быстрее чем С++ ный CRT аллокатор ето не быстро, вот сделать быстро на C# нет вообще вариантов, возможно только через ансейф но ето настолько уныло в пользовании что даже обсуждать не стоит.

Что именно сделать быстро надо?
Ты писал на C#?
Re[67]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 08.05.09 13:59
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>>Заметь что код на C#, такой как в тесте, не требует никаких усилий чтобы работать быстро. Чтобы работал быстро аналогичный код на С++ требуется немало усилий.

Х>>в полтора раза быстрее чем С++ ный CRT аллокатор ето не быстро, вот сделать быстро на C# нет вообще вариантов, возможно только через ансейф но ето настолько уныло в пользовании что даже обсуждать не стоит.

G>Что именно сделать быстро надо?

аллокации, ты что собственно мерил своим тестом?

G>Ты писал на C#?

был период, когда жизнь заставляла использовать ету замазку для мозга, да.
People write code, programming languages don't.
Re[74]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 08.05.09 14: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 14:15
Оценка:
Здравствуйте, criosray, Вы писали:

G>>>Ты писал на C#?

Х>>был период, когда жизнь заставляла использовать ету замазку для мозга, да.
C>Замазка Вам явно не помешала бы — чтоб поменьше сквозняков было.
вы по своему богатому опыту судите?
People write code, programming languages don't.
Re[68]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 08.05.09 14:17
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>Здравствуйте, gandjustas, Вы писали:


G>>>>Заметь что код на C#, такой как в тесте, не требует никаких усилий чтобы работать быстро. Чтобы работал быстро аналогичный код на С++ требуется немало усилий.

Х>>>в полтора раза быстрее чем С++ ный CRT аллокатор ето не быстро, вот сделать быстро на C# нет вообще вариантов, возможно только через ансейф но ето настолько уныло в пользовании что даже обсуждать не стоит.

G>>Что именно сделать быстро надо?

Х>аллокации, ты что собственно мерил своим тестом?
И как их с помощью ансейфа сделать быстро?

И как сделать универсальный аллокатор на С++, сравнимый по скорости с .NETовским?

G>>Ты писал на C#?

Х>был период, когда жизнь заставляла использовать ету замазку для мозга, да.
То есть не писал.
Re[69]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 08.05.09 14: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]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 08.05.09 14:48
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>Здравствуйте, gandjustas, Вы писали:


G>>>>Что именно сделать быстро надо?

Х>>>аллокации, ты что собственно мерил своим тестом?
G>>И как их с помощью ансейфа сделать быстро?
Х>Ну как, "мы наш, мы новый мир построим", HeapAlloc + ручное управление памятью, указатели, MyMemMgr.alloc() етц, только пользовать ето будет сложнее, смартпоинтеров то нет
Ты прикалываешься или реально тупость говоришь?
1)HeapAlloc работает медленнее, чем GC
2)Даже если выделишь память с помощью unmanaged, то ты не сможешь создать .NET объект в ней.
3)Ты не сможешь хранить ссылки на managed объекты в таком блоке памяти.
В итого это не будет ни быстрее, ни надежнее. Если ты серьезно считаешь что таким вообще стоит заниматься в каком либо случае, то тебе надо срочно обратиться к доктору.
Re[87]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 08.05.09 15:05
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>давай тезисами опишу проблемму

Х>чтобы трансформировать на железе — нужно иметь псевдо-екранные координаты (ето ещё не проблемма)
Х>для того чтобы работать со всей геометрией — нужно иметь её всю в псевдо-екранных координатах (тут проблемма — резко возросшее число геометрии для трансформации)
Что значит работать со всей геометрией? Счет или рендеринг? Для рендеринга не нужна вся геометрия. Пусть хранится как есть, в геодезии али еще чем-там.
Х>если не всю — а только видимую, то необходимо постоянно пересчитывать в псевдо-екранные координаты геометрию, появляющуюся во вьюхе при скролле/зуме
Не пересчитывать, а досчитывать. Разве это проблема? А без промежуточных координат требуется именно пересчитвать экранные координаты всех объектов каждый раз. Либо кэшировать экранные координаты, которые придется обновлять при смене вида. Тут опять встает вопрос "набегания погрешности".
X> (тут проблемма — какой тогда смысл в трансформациях на железе если нужно постоянно трансформировать в псевдо-екранные координаты новую видимую геометрию)
Смысл делать на железе тот, что железо это все равно делает, хочешь ты того или нет. Там преобразование в конвейере. Только в одном случае, когда ты софтом преобразуешь, железо делает единичное преобразование вхолостую (AFAIK).
Теперь рассмотрим два случая: первый — при прорисовке каждого примитива полностью рассчитывается преобразование из системы координат хранения (допустим геодезия) в экранные. Так?
Второй случай — когда расчитываются промежуточные координаты один раз, а дальше при каждой прорисовке из промежуточных в экранные с помощью железа. Таким образом софт подсчитывает только промежуточные координаты один раз когда объект попадает в вид и не считает координаты для этого объекта до тех пор, пока объект кэшируется.

Х>>>>да, можно, если учесть неточности железки и соответственно с этим написать алгоритм пролёта.

S>>>Какие неточности железки? Пиксель туда-сюда?
Х>ну вообще-то не пиксель, а поболе, заметно глазу.
Что-то сомневаюсь, что железо на столько дает погрешность.
Re[88]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 08.05.09 15:13
Оценка:
Здравствуйте, samius, Вы писали:

S>Здравствуйте, Хвост, Вы писали:


Х>>давай тезисами опишу проблемму

Х>>чтобы трансформировать на железе — нужно иметь псевдо-екранные координаты (ето ещё не проблемма)
Х>>для того чтобы работать со всей геометрией — нужно иметь её всю в псевдо-екранных координатах (тут проблемма — резко возросшее число геометрии для трансформации)
S>Что значит работать со всей геометрией? Счет или рендеринг? Для рендеринга не нужна вся геометрия. Пусть хранится как есть, в геодезии али еще чем-там.
Х>>если не всю — а только видимую, то необходимо постоянно пересчитывать в псевдо-екранные координаты геометрию, появляющуюся во вьюхе при скролле/зуме
S>Не пересчитывать, а досчитывать. Разве это проблема? А без промежуточных координат требуется именно пересчитвать экранные координаты всех объектов каждый раз. Либо кэшировать экранные координаты, которые придется обновлять при смене вида. Тут опять встает вопрос "набегания погрешности".
ну что значит досчитывать? вот я смотрю на екран, вижу объекты, нажал на другое место на обзорной вьюхе — у меня совсем другие объекты на екране, их прийдётся пересчитывать в псевдо-екранные, а ведь можно сразу в екранные. Если активно скроллить — зумить, то объекты на екране сменяют друг друга почти так же быстро как и при клике на обзорной вьюхе, тут "досчитывать" придётся по пол-екрана на скролл-зум.
People write code, programming languages don't.
Re[75]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 08.05.09 15:15
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>Здравствуйте, samius, Вы писали:


S>>Да не, можно найти тысячу ситуаций (искувственных и натуральных), где разница в способе размещения замыкания будет заметна. Взять хотя бы тот же расчет координат в GIS-ах. Да, точно! В таких нагруженных случаях пользоваться лямбдой вообще неуместно, потому говорить о разнице между размещением замыкания лямбды на стеке и хипе как-бы неуместно. Боюсь что больше будет заметна разница лямбд на делегатах (в C#) и лямбд на виртуальных функциях (Nemerle и F#).

Х>кстати вот лично у меня для трансформации используется функтор, который создаётся на стеке, но компиляторы С++ сейчас настолько умные что инлайнят всё и вся и оверхедов ноль, поетому в С++ я думаю лямбды в моём случае никак не повлияют на производительность.
Про инлайнить все и вся — заявление слишком сильное. Все равно там куча условий. Сомневаюсь, что инлайнится метод трансформации координат из геодезии в экранные. Но если скажешь, что точно инлайнится — поверю наслово.
Будет ли лямбда C++ так же эффективна как вручную заинлайненный код — тоже не уверен.

X>, а вот с C# вопрос не однозначен.

Но необходимость лямбды в таких узких местах контроллируется программистом как и выбор аллокатора в C++.
Re[89]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 08.05.09 15:20
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>ну что значит досчитывать? вот я смотрю на екран, вижу объекты, нажал на другое место на обзорной вьюхе — у меня совсем другие объекты на екране, их прийдётся пересчитывать в псевдо-екранные, а ведь можно сразу в екранные. Если активно скроллить — зумить, то объекты на екране сменяют друг друга почти так же быстро как и при клике на обзорной вьюхе, тут "досчитывать" придётся по пол-екрана на скролл-зум.


Одно дело считать каждый раз из геодезии в экранные. Другое — считать каждый раз из геодезии в недоэкранные (это меньше, чем в полностью экранные) а остальное сделает железо. Если активно зуммить, то большой шанс, что можно сделать реюз предрассчитанных псевдоэкранных координат просто изменением матрицы преобразования.
Re[76]: Работа - с чего начать: С++ или С#?
От: Хвост  
Дата: 08.05.09 15:23
Оценка:
Здравствуйте, samius, Вы писали:

S>Здравствуйте, Хвост, Вы писали:


Х>>Здравствуйте, samius, Вы писали:


S>>>Да не, можно найти тысячу ситуаций (искувственных и натуральных), где разница в способе размещения замыкания будет заметна. Взять хотя бы тот же расчет координат в GIS-ах. Да, точно! В таких нагруженных случаях пользоваться лямбдой вообще неуместно, потому говорить о разнице между размещением замыкания лямбды на стеке и хипе как-бы неуместно. Боюсь что больше будет заметна разница лямбд на делегатах (в C#) и лямбд на виртуальных функциях (Nemerle и F#).

Х>>кстати вот лично у меня для трансформации используется функтор, который создаётся на стеке, но компиляторы С++ сейчас настолько умные что инлайнят всё и вся и оверхедов ноль, поетому в С++ я думаю лямбды в моём случае никак не повлияют на производительность.
S>Про инлайнить все и вся — заявление слишком сильное. Все равно там куча условий. Сомневаюсь, что инлайнится метод трансформации координат из геодезии в экранные. Но если скажешь, что точно инлайнится — поверю наслово.
не, не из геодезии, в памяти лежат данные в виде, похожем на твои "псевдо-екранные", точнее что-то вроде промежуточных между екранными и геодезией, которые быстро конвертятся как в екранные так и в геодезию, поетому функтор на самом деле маленький, строк 10-15, из них половина — собственно вычисления.
People write code, programming languages don't.
Re[65]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 08.05.09 16:27
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Приведи парочку компиляторов С++ промышленного качества, в которых аллокация по кардинально другом алгоритму делается.


При чём тут компиляторы? Управление памятью — это библиотеки.

CC>>Там Per-thread pool с lock-free deferred алгоритмом на случай освобождения памяти из не-родного-потока.

G>Значит уже забыл. Пулы интересуют еще меньше, так как они требуют подгонки размеров блоков и пулов.
G>Как аллокатор общего назначения использовать смысла нету.

Что за вздор?!
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[74]: Небольшая опечатка
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 08.05.09 19:35
Оценка:
ГВ>>>см. Э. Ховёнен, Й. Сеппянен, c, М.: 1986

В СССР книга вышла в 1990 г. 1986-й — это финское издание.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[65]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.05.09 19:47
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Тут надо подумать, быстро не отвечу. Преимущества, по идее, должны быть в меньшем количестве lock (неизбежен при подсчёте ссылок) и соответственно — в меньшем количестве сбросов кэша процессора. Ну и конечно — в решении проблемы с циклическими ссылками.


На практике GC в С++ оказываются куда менее эффективными чем даже подсчет ссылок. Преимущество только одно. Нет проблем с зацикливанием.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[72]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 08.05.09 20: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 Российская Империя www.nemerle.org
Дата: 08.05.09 20:08
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>>>см. Э. Ховёнен, Й. Сеппянен, c, М.: 1986


ГВ>В СССР книга вышла в 1990 г. 1986-й — это финское издание.


Короче, вот реальная история CL.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[76]: Небольшая опечатка
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 08.05.09 20:24
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Лексические замыкания в CL появились из Схемы. И было это в 70-е.


Источник?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[76]: Небольшая опечатка
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 08.05.09 20:33
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Эти фины описывали черти-что сбоку бантик.


Вот более полная цитата из приведённой тобой ссылки:

In April 1981, after a DARPA-sponsored meeting concerning the splintered Lisp community, Symbolics, the SPICE project, the NIL project, and the S-1 Lisp project joined together to define Common Lisp. Initially spearheaded by White and Gabriel, the driving force behind this grassroots effort was provided by Fahlman, Daniel Weinreb, David Moon, Steele, and Gabriel. Common Lisp was designed as a description of a family of languages. The primary influences on Common Lisp were Lisp Machine Lisp, MacLisp, NIL, S-1 Lisp, Spice Lisp, and Scheme. Common Lisp: The Language is a description of that design. Its semantics were intentionally underspecified in places where it was felt that a tight specification would overly constrain Common Lisp research and use.

In 1986 X3J13 was formed as a technical working group to produce a draft for an ANSI Common Lisp standard. Because of the acceptance of Common Lisp, the goals of this group differed from those of the original designers. These new goals included stricter standardization for portability, an object-oriented programming system, a condition system, iteration facilities, and a way to handle large character sets. To accommodate those goals, a new language specification, this document, was developed.


Как видишь, горячим финским парням было что описывать в 1986-м.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[77]: Небольшая опечатка
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 08.05.09 20:38
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>То есть в 86-ом была только только сформирована группа по работе над CL. Учитывая, что на книгу нужно было потратить хотя бы пол года, я никак не могут понять что же описывали эти горячие финские парни, если в MIT и CMU только сели за составление стандарта.


Судя по всему, было уже какое-то устоявшееся соглашение. См. цитату, которую я привёл в сообщении рядом.

VD>А уж фраза:

VD>

VD> Основой изложения нами выбран диалект Коммон Лисп, ставший "де-факто" промышленным стандартом языка Лисп. В книге представлены все важнейшие языковые формы и свойства конструкций Коммон Лиспа, а также типы функций и данных.

VD>вообще выглядит как издевка. Может это текст из предисловия на русском языке написанный в 1990-м?

Нет, это цитата из авторского введения.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[77]: Небольшая опечатка
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.05.09 20:40
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:


ГВ>

In April 1981, after a DARPA-sponsored meeting concerning the splintered Lisp community, Symbolics, the SPICE project, the NIL project, and the S-1 Lisp project joined together to define Common Lisp. Initially spearheaded by White and Gabriel, the driving force behind this grassroots effort was provided by Fahlman, Daniel Weinreb, David Moon, Steele, and Gabriel. Common Lisp was designed as a description of a family of languages. The primary influences on Common Lisp were Lisp Machine Lisp, MacLisp, NIL, S-1 Lisp, Spice Lisp, and Scheme. Common Lisp: The Language is a description of that design. Its semantics were intentionally underspecified in places where it was felt that a tight specification would overly constrain Common Lisp research and use.

ГВ>In 1986 X3J13 was formed as a technical working group to produce a draft for an ANSI Common Lisp standard. Because of the acceptance of Common Lisp, the goals of this group differed from those of the original designers. These new goals included stricter standardization for portability, an object-oriented programming system, a condition system, iteration facilities, and a way to handle large character sets. To accommodate those goals, a new language specification, this document, was developed.


ГВ>Как видишь, горячим финским парням было что описывать в 1986-м.


Как раз не вижу. Это все равно, что описывать С++ в 1979-ом.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[77]: Небольшая опечатка
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 08.05.09 20:41
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Источник?


Отбой. Нашёл, на что ты ссылался:

The major contributions of Scheme were lexical scoping, lexical closures, first-class continuations, and simplified syntax (no separation of value cells and function cells). Some of these contributions made a large impact on the design of Common Lisp.


Ссылка та же.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[78]: Небольшая опечатка
От: VladD2 Российская Империя www.nemerle.org
Дата: 08.05.09 20:50
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Отбой. Нашёл, на что ты ссылался:


ГВ>

The major contributions of Scheme were lexical scoping, lexical closures, first-class continuations, and simplified syntax (no separation of value cells and function cells). Some of these contributions made a large impact on the design of Common Lisp.


ГВ>Ссылка та же.


В общем, бессмысленный исторический экскурс.
Даже если какие-то там фины умудрились написать книжку про промежуточную версию CL в которой и правда замыкания не были реализованы до конца — это никак не говорит в пользу того, что это правильный подход.
Сейчас ты не найдешь ни одной реализации CL где были бы неполноценные замыкания. Решение принятое в С++ (точнее пока не принятое) как раз свидетельствует о курсе его авторов — плевать на концептуальную целостность и удобство, если это может повредить скорости. Лучше все будет работать с тучей оговорок и вызовет тучу проблем у программистов, но не будет влиять на производительность.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[78]: Небольшая опечатка
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 08.05.09 21:38
Оценка:
Здравствуйте, VladD2, Вы писали:

ГВ>>Как видишь, горячим финским парням было что описывать в 1986-м.

VD>Как раз не вижу. Это все равно, что описывать С++ в 1979-ом.

Бедняга Страуструп, он и не знает, что ARM в первом издании (тоже 1986, как и Мир Лиспа) описывала несуществующий язык.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[75]: Брависсимо!
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 08.05.09 21:41
Оценка:
Здравствуйте, Lloyd, Вы писали:

ГВ>>Может быть. Языков без спецификаций не бывает.

L>Из чего с необходимостью следует, что Nemerle не язык.

У Nemerle есть ещё один недостаток, не позволяющий считать его языком — полное отсутствие стандарта ANSI.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[79]: Небольшая опечатка
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 08.05.09 21:47
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>>Как видишь, горячим финским парням было что описывать в 1986-м.

VD>>Как раз не вижу. Это все равно, что описывать С++ в 1979-ом.
ГВ>Бедняга Страуструп, он и не знает, что ARM в первом издании (тоже 1986, как и Мир Лиспа) описывала несуществующий язык.

Ой, опять я поторопился: ARM вышла в 90-м (всё равно — до появления C++ ).

Источник на каком-то непонятном сайте.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[79]: Автора!
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 09.05.09 00:00
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Даже если какие-то там фины умудрились написать книжку [...]


Я решил немного покопаться на предмет персоналий авторов. Нашлась страничка, посвящённая Эро Хювенену, там есть библиография. С Юко Сеппяненом вышло сложнее — мелькает на разных симпозиумах по искусственному интеллекту, да кое-что в ACM (искать по автору Jouko J. Seppänen, считанные публикации за 1970-1982 г). Оба, как я понял, из Технологического университета Хельсинки.

Ну разве это серьёзные лисперы? Да это ж курам на смех! Мальчонки, погулять вышли.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[58]: Аллокация на куче
От: Qbit86 Кипр
Дата: 10.05.09 22:51
Оценка:
Х>>>какие оверхеды? концепция с++: не плати за то что не используешь,
G>>Да ну, а O(n) при выделении и освобождении памяти?
Х>здесь поподробней пожалуйста, что имеется ввиду?

Подробнее — в Красной Книжке приснопамятного Александреску, глава 4. И в Зелёной Книжке Рихтера, глава 20.
Глаза у меня добрые, но рубашка — смирительная!
Re[65]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 11.05.09 07:15
Оценка:
Здравствуйте, gandjustas, Вы писали:

CC>>>>Ну так какого ты ляда утверждаешь что "Стандартные аллокаторы в С++ требуют прохода блаблабла"?

G>>>Еще раз: все известные мне реализации так работают.
CC>>Мы о С++ либо об известных тебе реализациях?
G>Думаешь я мало компиляторов видел?
Ты с темы не съезжай.

G>>>Твой наколенный непотокобезопасен.

CC>>Можно узнать с какого перепугу ты так решил?
CC>>Там Per-thread pool с lock-free deferred алгоритмом на случай освобождения памяти из не-родного-потока.
G>Значит уже забыл. Пулы интересуют еще меньше, так как они требуют подгонки размеров блоков и пулов.
Ясно. Как работают пулы ты тоже не в курсе.
Известно ли тебе что HeapAlloc в LFH режиме тоже на пулах?

G>Как аллокатор общего назначения использовать смысла нету.

Расскажи это разработчикам Hoard, TBB и того же Windows Heap
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[65]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 11.05.09 07:15
Оценка:
Здравствуйте, gandjustas, Вы писали:

CC>>Там Per-thread pool с lock-free deferred алгоритмом на случай освобождения памяти из не-родного-потока.

G>Кстати с явным Free тоже бльшая попа. Все это придется оборачивать в очередные умные указатели чтобы не было утечек.
А вот ты никак не можешь прожить без того, чтоб за тобой кто нить не прибирал твои выделения.
Никакой попы там нет. Работает простой жизненный принцип: убирай за собой. Это нормально.

G>Заметь что код на C#, такой как в тесте, не требует никаких усилий чтобы работать быстро. Чтобы работал быстро аналогичный код на С++ требуется немало усилий.

Каких усилий?
Все потери на твоем С++ тесте исключительно в системной функции HeapAlloc.
Это многопоточный аллокатор общего назначения. Синхронизация в нем через критическую секцию, что медленно.
Пул в моем аллокаторе постольку поскольку, меня больше интересовало насколько будет быстрее если убрать тормоза критической секции.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[71]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 11.05.09 07:51
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>1)HeapAlloc работает медленнее, чем GC

HeapAlloc это Windows Heap а не С++

С++ CRT от MS использует HeapAlloc. Полагаю, так им было проще: раньше то они свой аллокатор пытались писать.
С# runtime от MS использует свой GC.

Вы, господа, сравниваете два решения от МС.

По своей сути С++ позволяет реализовать какой угодно аллокатор.
Сравнение в таком случае С++ аллокатора (который может быть вообще любым) с конкретной реализацией GC не имеет смысла по определению.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[73]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 11.05.09 07:51
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Я показал что аллокатор в С++ медленно работает

Да нифига ты не показал.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[67]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 11.05.09 08:05
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>>Думаешь я мало компиляторов видел?

CC>>Ты с темы не съезжай.
G>Это ты не съезжай. Кивать на стандарт в случае С++ не стоит. Его мало кто реализует.
Паня-атна.

CC>>Ясно. Как работают пулы ты тоже не в курсе.

CC>>Известно ли тебе что HeapAlloc в LFH режиме тоже на пулах?
G>Еще раз: меня это вообще не интересует.
Аха.

G>>>Как аллокатор общего назначения использовать смысла нету.

CC>>Расскажи это разработчикам Hoard, TBB и того же Windows Heap
G>А это тут причем? Ты будешь на задумываясь использовать свой аллокатор в продакш коде?
А почему нет? Я его интереса ради стресс тестами гонял в многопоточном режиме на 4хядернике.

G>Кстати, получилось что GC порвал в 5 раз виндовый аллокатор, который на пулах, так?

Ох блин. Как же трудно иногда объяснять элементарные вещи человеку с синдромом бакалавра.

В HeapAlloc самые большие тормоза дает Critical Section.

HeapAlloc имеет режим под названием Low fragmentation heap. Реализован на пулах и дает прирост скорости аллокации в некоторых случаях (у меня был ~2х для std::map. Отдельного тестирования не проводил, так что за вообще все случаи говорить не буду). По умолчанию выключен.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[67]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 11.05.09 08:05
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Не смеши. Если это нормально, то почему сейчас такое засилие "умных указателей"? Как раз для того чтобы програамист не думал что и когда ему надо убирать.

Засилье? Где?
Я его в С++ проектах не наблюдаю.
У нас они в основном там, где проект был портирован на С++ с managed языков, чтоб не надо было сильно много переделывать.

G>Ты до сих пор не понял что создание таких аллокаторов — нетривиальная задача. Далеко не каждый программист сможет справиться.

Не можешь написать свой — пользуй готовые. Тот же Hoard например. Если реально надо.

G> В тоже время GC работает достаточно быстро, а программисту при этом даже не требуется заботиться об освобождении памяти.

Для некоторых случаев GC-памперс, который "даже не требуется заботиться об освобождении" может стать проблемой.
Особенно если программист недостаточной квалификации.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[68]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 11.05.09 08:12
Оценка:
Здравствуйте, CreatorCray, Вы писали:

G>> В тоже время GC работает достаточно быстро, а программисту при этом даже не требуется заботиться об освобождении памяти.

CC>Для некоторых случаев GC-памперс, который "даже не требуется заботиться об освобождении" может стать проблемой.
CC>Особенно если программист недостаточной квалификации.

Если программист недостаточной квалификации, то само использование unmanaged становится большой проблемой (видел такое на Delphi), не говоря уже о С++ с его примудростями.
Re[68]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 11.05.09 08:19
Оценка:
Здравствуйте, CreatorCray, Вы писали:

G>>>>Как аллокатор общего назначения использовать смысла нету.

CC>>>Расскажи это разработчикам Hoard, TBB и того же Windows Heap
G>>А это тут причем? Ты будешь на задумываясь использовать свой аллокатор в продакш коде?
CC>А почему нет? Я его интереса ради стресс тестами гонял в многопоточном режиме на 4хядернике.
Ну и что?
Я "ради интереса" и GC писал на C++, но в реальном проекте не стал бы его использовать.

G>>Кстати, получилось что GC порвал в 5 раз виндовый аллокатор, который на пулах, так?

CC>Ох блин. Как же трудно иногда объяснять элементарные вещи человеку с синдромом бакалавра.
CC>В HeapAlloc самые большие тормоза дает Critical Section.
Да ты че?
Конечно критическая секция дает тормоза. Кто сказал что параллельность бесплатно дается?
Re[69]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 11.05.09 08:43
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Если программист недостаточной квалификации, то само использование unmanaged становится большой проблемой (видел такое на Delphi), не говоря уже о С++ с его примудростями.

Managed от идиотов все равно не спасает.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[69]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 11.05.09 08:58
Оценка:
Здравствуйте, gandjustas, Вы писали:

CC>>А почему нет? Я его интереса ради стресс тестами гонял в многопоточном режиме на 4хядернике.

G>Я "ради интереса" и GC писал на C++, но в реальном проекте не стал бы его использовать.
Ну, если получилось что то хорошее, работоспособное и способное принести пользу проекту то почему бы и не использовать?

G>>>Кстати, получилось что GC порвал в 5 раз виндовый аллокатор, который на пулах, так?

CC>>Ох блин. Как же трудно иногда объяснять элементарные вещи человеку с синдромом бакалавра.
CC>>В HeapAlloc самые большие тормоза дает Critical Section.
G>Конечно критическая секция дает тормоза. Кто сказал что параллельность бесплатно дается?
Она не бесплатная, да. Но она вообще то обеспечивается дешевле, чем тупо натыкать critical section.

Тебе знаком термин lock-free? А per-thread аллокация?
Есть еще тут мега-чел Remark, он тебе много может рассказать.

У меня в ThreadPoolAlloc вообще получается что нет никакой необходимости в синхронизации, пока не начнешь освобождать данные, выделенные в другом потоке. Да и то вся синхронизация будет заключаться в lock-free добавлении освобождаемой памяти в deferred очередь, которую освободит родной поток.
Ну и плюс всякие мелочи типа разруливание ситуаций когда поток память навыделял и завершился, а освобождать ее будет кто то другой.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[70]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 11.05.09 09:18
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, gandjustas, Вы писали:


CC>>>А почему нет? Я его интереса ради стресс тестами гонял в многопоточном режиме на 4хядернике.

G>>Я "ради интереса" и GC писал на C++, но в реальном проекте не стал бы его использовать.
CC>Ну, если получилось что то хорошее, работоспособное и способное принести пользу проекту то почему бы и не использовать?
Во-первых я тогда не работал на С++
Во-вторых не получилось ничего работоспособного, грубо говоря работало в некоторых случаях.

G>>>>Кстати, получилось что GC порвал в 5 раз виндовый аллокатор, который на пулах, так?

CC>>>Ох блин. Как же трудно иногда объяснять элементарные вещи человеку с синдромом бакалавра.
CC>>>В HeapAlloc самые большие тормоза дает Critical Section.
G>>Конечно критическая секция дает тормоза. Кто сказал что параллельность бесплатно дается?
CC>Она не бесплатная, да. Но она вообще то обеспечивается дешевле, чем тупо натыкать critical section.
Не всегда. При работе со списком свободных блоков например, без критической секции вряд ли что-то получится.

CC>Тебе знаком термин lock-free? А per-thread аллокация?

Конечно ускорения надо разделять данные между потоками и\или использовать атомные операции.
Первое сложнее в реализации и таит подводные камни, второе далеко не всегда доступно (в C++ например не доступно при выделении памяти).

CC>Есть еще тут мега-чел Remark, он тебе много может рассказать.

Я его уже перечитал.

CC>У меня в ThreadPoolAlloc вообще получается что нет никакой необходимости в синхронизации, пока не начнешь освобождать данные, выделенные в другом потоке. Да и то вся синхронизация будет заключаться в lock-free добавлении освобождаемой памяти в deferred очередь, которую освободит родной поток.

CC>Ну и плюс всякие мелочи типа разруливание ситуаций когда поток память навыделял и завершился, а освобождать ее будет кто то другой.
Ну это и есть подоводные камни.
Кроме того deferred очередь ужасно будет работать при использовании пула потоков.
Re[71]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 11.05.09 11:18
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>>Конечно критическая секция дает тормоза. Кто сказал что параллельность бесплатно дается?

CC>>Она не бесплатная, да. Но она вообще то обеспечивается дешевле, чем тупо натыкать critical section.
G>Не всегда. При работе со списком свободных блоков например, без критической секции вряд ли что-то получится.
Ну, если его реализовывать как ты его описываешь, с проходом O(n) по нему то да.

G>надо разделять данные между потоками и\или использовать атомные операции.

G>второе далеко не всегда доступно (в C++ например не доступно при выделении памяти).
Ты про что вообще?

CC>>Есть еще тут мега-чел Remark, он тебе много может рассказать.

G>Я его уже перечитал.
Осталось понять те идеи о которых он пишет.

G>Кроме того deferred очередь ужасно будет работать при использовании пула потоков.

Почему?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[72]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 11.05.09 11:48
Оценка:
Здравствуйте, CreatorCray, Вы писали:

G>>надо разделять данные между потоками и\или использовать атомные операции.

G>>второе далеко не всегда доступно (в C++ например не доступно при выделении памяти).
CC>Ты про что вообще?
В .NET насколько я понимаю выделение памяти реализовано как interlocked add указателя.

G>>Кроме того deferred очередь ужасно будет работать при использовании пула потоков.

CC>Почему?
Если память выделяется в одном потоке, а освобождается в другом, то реальное освобождение может произойти очень нескоро, а прогнозировать такое развите событий с пулом потоков сложно.
Re[72]: Какой угодно? Вообще любой?
От: Qbit86 Кипр
Дата: 11.05.09 11:54
Оценка:
CC>По своей сути С++ позволяет реализовать какой угодно аллокатор.
CC>Сравнение в таком случае С++ аллокатора (который может быть вообще любым) с конкретной реализацией GC не имеет смысла по определению.

Как на C++ реализуется перемещающий менеджер памяти? Скажем, как подменить глобальные new и delete своим менеджером памяти, чтобы он мог по запросу проводить дефрагментацию своего пула?

Если есть поддержка языка и среды, то всё понятно, мы просто копируем объекты в памяти (их размеры и положение заведомо известны). Причём если на них есть ссылки, то мы эти ссылки перезаписываем, так как у CLR есть информация о том, что является ссылкой, а что нет.

Как быть в C++, где возможно такое:
struct {
  bool tag;
  union {
    boost::int32_t integer;
    int* pointer;
  } value;
} discriminatedUnion = {};

плюс те же static_cast<void*> и reinterpret_cast<>?
Глаза у меня добрые, но рубашка — смирительная!
Re[73]: Какой угодно? Вообще любой?
От: CreatorCray  
Дата: 11.05.09 12:19
Оценка:
Здравствуйте, Qbit86, Вы писали:

CC>>По своей сути С++ позволяет реализовать какой угодно аллокатор.

CC>>Сравнение в таком случае С++ аллокатора (который может быть вообще любым) с конкретной реализацией GC не имеет смысла по определению.

Q>Как на C++ реализуется перемещающий менеджер памяти?

Можно.
Но с заменой указателей на обёртки и вводом ограничений на использование сырых указателей.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[73]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 11.05.09 12:19
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, CreatorCray, Вы писали:


G>>>надо разделять данные между потоками и\или использовать атомные операции.

G>>>второе далеко не всегда доступно (в C++ например не доступно при выделении памяти).
CC>>Ты про что вообще?
G>В .NET насколько я понимаю выделение памяти реализовано как interlocked add указателя.
Понятнее не стало.
Что именно ты имел в виду под "второе далеко не всегда доступно (в C++ например не доступно при выделении памяти)."?
Аллокацию в С++ через инкремент указателя сделать можно. Вот только с деаллокацией придется погеморроиться.
Не надо тупо копировать решения их других платформ с их особенностями.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[73]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 11.05.09 12:25
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>В .NET насколько я понимаю выделение памяти реализовано как interlocked add указателя.


Насколько я понимаю, interlocked add работает только для одноядерной машины. И то я не уверен... Тут надо курить семантику освобождения. На многоядерной машине и intelocked не нужен. Просто add. Ну и проверка на достижение границы 256Kb куска.
Re[74]: Какой угодно? Вообще любой?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 11.05.09 12:28
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, Qbit86, Вы писали:


CC>>>По своей сути С++ позволяет реализовать какой угодно аллокатор.

CC>>>Сравнение в таком случае С++ аллокатора (который может быть вообще любым) с конкретной реализацией GC не имеет смысла по определению.

Q>>Как на C++ реализуется перемещающий менеджер памяти?

CC>Можно.
CC>Но с заменой указателей на обёртки и вводом ограничений на использование сырых указателей.

Точно. Еще у Джеффа Элждера набросок был в книге.
Re[75]: Какой угодно? Вообще любой?
От: CreatorCray  
Дата: 11.05.09 13:10
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>>>Как на C++ реализуется перемещающий менеджер памяти?

CC>>Можно. Но с заменой указателей на обёртки...
Q>Я правильно понимаю, что:
По большей части правильно, хотя кое что implementation specific.

Неправильно только одно: зачем на С++ реализовывать такой аллокатор?
Пользы от него будет меньше чем неудобств.
Более того, зачем его реализовывать как глобальный?
К примеру стоит прикручивать нечто подобное только для алгоритмов, у которых фрагментация памяти является побочным эффектом.

Еще раз говорю: не надо тупо копировать идеи и подходы из других платформ.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[76]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 11.05.09 13:14
Оценка:
Здравствуйте, samius, Вы писали:

CC>>Всё совсем наоборот.

S>
S>Ну тогда уж просвети, кому нужно наоборот, если
S>

В многопроцессорной системе поколение 0 управляемой кучи разделено на несколько арен памяти — по одной на каждый поток. (С) Рихтер. CLR via C#

S>Нафига там interlocked?

S>Ох блин, знатоки-теоретики

Ага.
Вот и расскажи мне, знаток-теоретик, какой нафиг интерлокед может быть в таком случае на однояйцевой машине, когда одновременно выполняется только 1 поток.
С чем оно интерлокит то?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[25]: Работа - с чего начать: С++ или С#?
От: jenyavb  
Дата: 11.05.09 13:20
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>Здравствуйте, gandjustas, Вы писали:

G>>Читать больше надо. От константности отказались как раз в силу сложности обеспечения честной константности.
Х>а теперь расскажи мне, в чём сложность обеспечения четной константности, если даже C++ ето отлавливает на етапе компиляции? если в с++ запретить касты, разрушающие константность то окромя прямой работы с памятью возможностей изменить константный объект нет, почему же весь такой сейфанутый C# не одолел модификатор const?

Также компании Microsoft очень сложно предусмотреть в CLR возможность проверки неизменности констант-объектов или констант-параметров. CLR пришлось бы при каждой операции записи проверять, не выполняется ли запись в объект-константу, а это сильно снизит эффективность работы программы. Есте ственно, что обнаружение нарушения должно приводить к генерации исключения. Более того, поддержка констант создает дополнительные сложности для разработчиков. В частности, при наследовании неизменяемого типа, производные типы должны соблюдать это ограничение. Кроме того, неизменяемый тип, скорее всего, должен состоять из полей, которые тоже представляют собой неизменяемые типы.

(c)Рихтер
... << RSDN@Home 1.2.0 alpha 4 rev. 1213>>
Re[77]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 11.05.09 13:34
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, samius, Вы писали:


S>>Ох блин, знатоки-теоретики

CC>Ага.
CC>Вот и расскажи мне, знаток-теоретик, какой нафиг интерлокед может быть в таком случае на однояйцевой машине, когда одновременно выполняется только 1 поток.
CC>С чем оно интерлокит то?

Я ж написал, что не уверен в случае одноядерной машины. Но что в многоядерной его точно нет. А ты сказал, что все наоборот. Вот и рассказывай нафига интерлокед на многоядерной машине.
Re[78]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 11.05.09 13:41
Оценка:
Здравствуйте, samius, Вы писали:

S>Я ж написал, что не уверен в случае одноядерной машины. Но что в многоядерной его точно нет. А ты сказал, что все наоборот. Вот и рассказывай нафига интерлокед на многоядерной машине.

Да потому, что интерлокед как таковой только для многоядерной и нужен.

Безотносительно к принципам организации менеджера памяти в .NET
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[74]: Какой угодно? Вообще любой?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 11.05.09 15:13
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, Qbit86, Вы писали:


CC>>>По своей сути С++ позволяет реализовать какой угодно аллокатор.

CC>>>Сравнение в таком случае С++ аллокатора (который может быть вообще любым) с конкретной реализацией GC не имеет смысла по определению.

Q>>Как на C++ реализуется перемещающий менеджер памяти?

CC>Можно.
CC>Но с заменой указателей на обёртки и вводом ограничений на использование сырых указателей.

Правильно, надо написать CLR или JRE, они ведь на C++.
Только еще придется переписать код стандартной библиотеки, чтобы она работала с новым менеджером памяи и новыми примитавами.
Re[74]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 11.05.09 15:15
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, gandjustas, Вы писали:


G>>Здравствуйте, CreatorCray, Вы писали:


G>>>>надо разделять данные между потоками и\или использовать атомные операции.

G>>>>второе далеко не всегда доступно (в C++ например не доступно при выделении памяти).
CC>>>Ты про что вообще?
G>>В .NET насколько я понимаю выделение памяти реализовано как interlocked add указателя.
CC>Понятнее не стало.
CC>Что именно ты имел в виду под "второе далеко не всегда доступно (в C++ например не доступно при выделении памяти)."?
CC>Аллокацию в С++ через инкремент указателя сделать можно. Вот только с деаллокацией придется погеморроиться.
Не просто погеморроиться, а сильно погеморроиться.

CC>Не надо тупо копировать решения их других платформ с их особенностями.

А никто их копировать не собирается.
Re[77]: Какой угодно? Вообще любой?
От: CreatorCray  
Дата: 12.05.09 07:40
Оценка:
Здравствуйте, Qbit86, Вы писали:

CC>>Неправильно только одно: зачем на С++ реализовывать такой аллокатор?

Q>Речь шла не об «зачем», а об «какой угодно» и «вообще любой».
Ну так не надо передирать идею. Есть проблема — надо придумать решение.
Готовое решение с другой платформы передирать глупо — платформы слишком разные.
Вот я про что: что делать на С++ точно такой же по алгоритму аллокатор как в .NET просто глупо.

CC>>Неправильно только одно: зачем на С++ реализовывать такой аллокатор?

Q>Чтобы ускорить аллокацию. В такой модели менеджер будет катастрофически быстро выделять память всегда в конце пула, а не искать в цепочках чанков дыры подходящего размера от освобождённых ранее объектов.
Странный подход. Есть алгоритмы аллокации которым не надо ничего искать.
Надо использовать их, а не тупо пытаться адаптировать технологию с другой платформы.

CC>>Еще раз говорю: не надо тупо копировать идеи и подходы из других платформ.

Q>...в платформы, крайне плохо для того предназначенные.
Ты хочешь скопировать готовое решение проблемы, реализованное под конкретную платформу.
А надо разработать алгоритм, который на данной платформе будет решать такую же проблему.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[75]: Какой угодно? Вообще любой?
От: CreatorCray  
Дата: 12.05.09 07:40
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Правильно, надо написать CLR или JRE, они ведь на C++.

G>Только еще придется переписать код стандартной библиотеки, чтобы она работала с новым менеджером памяи и новыми примитавами.

Ну это ж вам до зубовного скрежета хочется именно глобальный перемещающий менеджер.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[71]: Брависсимо!
От: vdimas Россия  
Дата: 13.05.09 10:35
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>И вообще, твои слова банальная демонстрация некомпетентности. Лисп изначально имел сборщик мусора и стало быть делать урезанные в нем не имело никакого смысла.


При чем тут "урезание"? До сих пор в разных реализациях Лиспа и даже интерпретаторов Схемы используются разные подходы к "механике" замыканий, от этого и есть основная несовместимость на уровне исходников.
Re[72]: Брависсимо!
От: VladD2 Российская Империя www.nemerle.org
Дата: 13.05.09 16:57
Оценка:
Здравствуйте, vdimas, Вы писали:

V>При чем тут "урезание"? До сих пор в разных реализациях Лиспа и даже интерпретаторов Схемы используются разные подходы к "механике" замыканий, от этого и есть основная несовместимость на уровне исходников.


Для CL все прописано в стандарте. Схема же язык практически чисто функциональный, для нее данный аспект не важен.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[73]: Брависсимо!
От: vdimas Россия  
Дата: 14.05.09 06:58
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, vdimas, Вы писали:


V>>При чем тут "урезание"? До сих пор в разных реализациях Лиспа и даже интерпретаторов Схемы используются разные подходы к "механике" замыканий, от этого и есть основная несовместимость на уровне исходников.


VD>Для CL все прописано в стандарте. Схема же язык практически чисто функциональный, для нее данный аспект не важен.


На CL мир клином не сошелся, например нет его реализаций под управляемые платформы типа Java или .Net. Далее, в различных реализациях Схемы есть возможность изменять значения переменных, поэтому способ реализации замыканий играет роль (сейчас в ходу сразу три стандарта Схемы, с 4-го по 6-й). В общем, тут спорить не о чем, я когда-то изучил десятки исходников лисп и схем, и обнаружил, что способов реализации как замыканий, так и контекста исполнения (разновидность "замыкания" текущего потока) множество.

Бардак, согласись, но если в Схеме хоть идет все более глубокое стандартизирование, не привязанное к конкретной реализации, то Лисп страшно далек от подобного. Собственно, CL своими библиотеками и расширениями оказал плохую службу этому направлению, продлив жизнь своего диалекта Лиспа. Посмотрев чуть выше, нет никаких причин использовать Лисп при наличии Схемы, тем более, что после 6-го стандарта ожидается приличная пауза м/у их выходами, т.е. будет достаточно времени для "вымывания" из обращения предыдущих двух.
Re[74]: Брависсимо!
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.05.09 11:19
Оценка:
Здравствуйте, vdimas, Вы писали:

V>На CL мир клином не сошелся, например нет его реализаций под управляемые платформы типа Java или .Net. Далее, в различных реализациях Схемы есть возможность изменять значения переменных, поэтому способ реализации замыканий играет роль (сейчас в ходу сразу три стандарта Схемы, с 4-го по 6-й). В общем, тут спорить не о чем, я когда-то изучил десятки исходников лисп и схем, и обнаружил, что способов реализации как замыканий, так и контекста исполнения (разновидность "замыкания" текущего потока) множество.


Спорить с тем, что есть можество разных реализаций языка которому 50 лет я не буду. К не буду спорить о том, что если в языке есть императивное присвоение и замыкания, то полноценным замыканием будет только то, что позволяет изменять захваченые переменные из замыкания.

V>Бардак, согласись, но если в Схеме хоть идет все более глубокое стандартизирование, не привязанное к конкретной реализации, то Лисп страшно далек от подобного. Собственно, CL своими библиотеками и расширениями оказал плохую службу этому направлению, продлив жизнь своего диалекта Лиспа. Посмотрев чуть выше, нет никаких причин использовать Лисп при наличии Схемы, тем более, что после 6-го стандарта ожидается приличная пауза м/у их выходами, т.е. будет достаточно времени для "вымывания" из обращения предыдущих двух.


Интересное мнение, но к делу не относящееся.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[81]: Небольшая опечатка
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 14.05.09 16:37
Оценка:
Здравствуйте, vdimas, Вы писали:

V>При наличии возможностей изменять значения переменных byvalue и есть "единственно-правильный" вид замыканий.


Мне тоже кажется, что, во всяком случае, "от рождения" замыкания должны были быть именно такими. Потом просто обобщили подход на разные способы использования.

V>А вообще, там приемов несколько — например есть реализации лиспов/схем, где после присвоения нового значения переменной создается новая одноименная переменная, которой оперирует текущий контекст исполнения, т.е. даже используя механизм byname как более "легковесный", получается поведения как при byvalue.


Интересно, хотя я такой именно реализации, кажется, не встречал. Наверное, смотрел плохо.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[20]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 17.05.09 00:49
Оценка:
Здравствуйте, criosray, Вы писали:

NBN>>>Я когда пишу на С++ — просто выделяю память, и не занимаюсь её освобожденим — пока в этом нет необходимости.


C>А необходимость возникает только тогда, когда продакшн билд начинает течь, как дырявое решето?


Что значит течь?
Нужно разобрать угил.
Re[29]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 18.05.09 06:51
Оценка:
Здравствуйте, vdimas, Вы писали:

C>>Вы вообще понимаете о чем говорите? Что такое модульное тестирование? Что значит "тестировать код, а не сборки"? Это, простите, бред.

C>>Модульное тестирование подразумевает: а) тестирование состояния объектов, б) тестирование операбельности объектов. Препроцессингом ничто из перечисленного протестировать не возможно.

V>Похоже, ты не понял основной посыл насчет тестирования исходников в С++ в противовес тому, что и как тестируется с помощью моков.


Не понял. Что Вы тестируете? Исходники? На орфорграфию, чтоли?

V>>>что в свою очередь легко делается через инклюды и прочий развитый препроцессинг. В общем, подход к юнит-тестированию совсем другой и нет смысла тратить время на неприменимый и безбенифитный (для С++) способ юнит тестирования, предназначенный для совсем других условий.


C>>Почему он вдруг стал безбенефитным? Чем С++ такой особенный?


V>Моковский подход и не был для С++ никогда бенефитным. Вложения труда не окупятся, поэтому там немного по-другому.


Э-э, Вы серьезно верите в эту чушь (менее громкого слова придумать не могу...)?

Ну хорошо, расскажите тогда что в С++ "немного по другому", что программам на С++ нет пользы от автоматического тестирования. Внимательно Вас слушаю.

C>>Модульное тестирование программ на С++ как минимум не менее полезное, чем модульное тестирование программ на С#, Java, Python, и т.д.


V>А это ты кому и о чем? Просто лозунги?


Какие еще лозунги?

ГВ>>>>>С другой стороны, в самом по себе паттерне IoC ничего запредельного нет, мне сейчас любопытно поиграться в тех ограничениях, которые ты предложил.

C>>>>Запредельное? Патерн IoC в управляемых языках реализуется на базовом уровне за минут 40-50 максимум неопытными студентами.

V>>>Рефлексия она и в африке рефлексия. Развитый подобный фреймворк под нейтив — это разве что COM и пляски вокруг typelib-ов и prog ID.

C>>А COM тут при чем вообще?

V>При том, что популярные IoC контейнеры для .Net до компиляции в глаза не видели оперируемые интерфейсы и конструкторы реализующих их классов. Такие шутки делаются лишь через метаинформацию, пример которой для нейтива есть typelib из COM, так же как и ср-ва для построения проксей для OLE-совместимых сигнатур.


Да будет Вам известно, что IoC оперирует не только интерфейсами, но и классами.
COM это совсем другое и к чему Вы его упомянули мне по прежнему не ясно.

V>>>ActiveX site — как раз своего рода "конфигурируемый" в рантайм IoC-контейнер, правда в ограниченном множестве интерфейсов.

C>>Я очень надеюсь, что Вы пошутили...

V>Не надейся.

Н-да. Ну ладно, поспотрим что Вы еще напишите. Это становится забавно.
Re[30]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.05.09 08:23
Оценка:
Здравствуйте, criosray, Вы писали:

C>Здравствуйте, vdimas, Вы писали:


C>>>Вы вообще понимаете о чем говорите? Что такое модульное тестирование? Что значит "тестировать код, а не сборки"? Это, простите, бред.

C>>>Модульное тестирование подразумевает: а) тестирование состояния объектов, б) тестирование операбельности объектов. Препроцессингом ничто из перечисленного протестировать не возможно.

V>>Похоже, ты не понял основной посыл насчет тестирования исходников в С++ в противовес тому, что и как тестируется с помощью моков.

C>Не понял. Что Вы тестируете? Исходники? На орфорграфию, чтоли?

Имеется ввиду что для тестирования в C++ применяется не такой подход, как в языках с метаданными.
Обычно применяется создание отдельный программных модулей, которые инклюдят файлы с тестируемым кодом, подсовывают им тестовые данные и делают необходимые проверки.

V>>При том, что популярные IoC контейнеры для .Net до компиляции в глаза не видели оперируемые интерфейсы и конструкторы реализующих их классов. Такие шутки делаются лишь через метаинформацию, пример которой для нейтива есть typelib из COM, так же как и ср-ва для построения проксей для OLE-совместимых сигнатур.


C>Да будет Вам известно, что IoC оперирует не только интерфейсами, но и классами.

C>COM это совсем другое и к чему Вы его упомянули мне по прежнему не ясно.

COM использует метаинформацию, аналогично .NET в плане концепции. Например я где-то видел как раз тестовый фреймворк для native с помощью com. И test-runner был, похожий на NUnit.

V>>>>ActiveX site — как раз своего рода "конфигурируемый" в рантайм IoC-контейнер, правда в ограниченном множестве интерфейсов.

C>>>Я очень надеюсь, что Вы пошутили...
V>>Не надейся.
C>Н-да. Ну ладно, поспотрим что Вы еще напишите. Это становится забавно.

Насчет IoC-контейнера явно пошутил, нету в COM возможности декларативно описывать зависимости классов.
Зато как Service Locator COM и так отлично работает.
Re[30]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 18.05.09 08:47
Оценка:
Здравствуйте, criosray, Вы писали:

Я даже не знаю на что отвечать, настолько ты не понимаешь о чем речь.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[2]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.05.09 10:12
Оценка:
Здравствуйте, Pepel, Вы писали:

P>весь пост не читал, только начало зацепил, вставлю свои 5 центов : тут чет про кросплатформенность много пишут там и прочий валюнтаризм .. мне кажется, дело в области применении задачи, наверное программу управления кардиодатчиком хирургического стола все же стоит писать на C++ ввиду сильного механизма проверок , а дрочилку отчетов овощной базы на рынке можно и на шарпах забомбить и она тож будет великолепна ..


Сильных проверок чего?
Re[2]: Работа - с чего начать: С++ или С#?
От: Пшелка Смерть хохлопидарам.
Дата: 18.05.09 10:33
Оценка:
Здравствуйте, _Vasilyev, Вы писали:

_V>То, что делается на C++, на C# в принципе нельзя реализовать.


Например?
Смерть хохлопидарам!
Re[2]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 18.05.09 10:35
Оценка:
V> N>Может легче сначала пойти на С#, а потом перейти на С++ или сразу искать вакансии С++

V> То, что делается на C++, на C# в принципе нельзя реализовать.


Так как оба языка Тьюринг-полные, то сомнительно
avalon 1.0rc1 rev 239, zlib 1.2.3


dmitriid.comGitHubLinkedIn
Re[2]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 18.05.09 10:44
Оценка:
Здравствуйте, Pepel, Вы писали:

P>весь пост не читал, только начало зацепил, вставлю свои 5 центов : тут чет про кросплатформенность много пишут там и прочий валюнтаризм .. мне кажется, дело в области применении задачи, наверное программу управления кардиодатчиком хирургического стола все же стоит писать на C++ ввиду сильного механизма проверок , а дрочилку отчетов овощной базы на рынке можно и на шарпах забомбить и она тож будет великолепна ..


Вы все правильно написали, но с точностью до наоборот.
Re[31]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 18.05.09 10:46
Оценка:
Здравствуйте, vdimas, Вы писали:


V>Я даже не знаю на что отвечать, настолько ты не понимаешь о чем речь.


Ответьте на этот вопрос:

Ну хорошо, расскажите тогда что в С++ "немного по другому", что программам на С++ нет пользы от автоматического тестирования. Внимательно Вас слушаю.



Даю слово, что приложу максимум усилий, чтоб понять о чем речь.
Re[6]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 18.05.09 11:27
Оценка:
NBN> NBN>> Языки то да. А костыли для шарпа не везде есть и не везде подходят.
NBN> NBN>> См. те же игры, ембеддед/мобилы/покеты и кроссплатформенное программрование.

NBN> M>Во всем этом есть .NET и, следовательно, C#.


NBN> Гы.гы.гы. Либо не везде, либо реальное использование сопровождается множеством оговорок

NBN> Как следствие — С++ монополист и надолго им останется.

Мы говорим про монополию или про утверждение

То, что делается на C++, на C# в принципе нельзя реализовать.

?
avalon 1.0rc1 rev 239, zlib 1.2.3


dmitriid.comGitHubLinkedIn
Re[6]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 18.05.09 11:29
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>Здравствуйте, criosray, Вы писали:


C>>Откройте для себя .NET CF и Mono.


NBN>И то и другое неполный отстой, даже близко не являющимся решением реальных проблем.


Понятно... еще один неграмотный тролль. Вы даже сформулировать не сможете в чем заключается неполнота.

NBN>С++ тут монополист, это факт. Твои минусы это не испраят


Да-да, именно по тому у меня из 10 приложений на мобилке почти половина на .NET CF.
Re[7]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 18.05.09 11:58
Оценка:
Здравствуйте, Mamut, Вы писали:

M>Мы говорим про монополию или про утверждение

M>

M>То, что делается на C++, на C# в принципе нельзя реализовать.

M>?
M>

В принципе тоже — например: быстрое, кроссплатформенное и полнофункциональное приложение на C#.
Нужно разобрать угил.
Re[33]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 18.05.09 11:58
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Таким образом, в подавляющем большинстве случаев на С++ в юнит-тестах тестируется по-сути исходный код, скомпиллированный в тестовый бинарник с некими тестовыми эмуляторами и прочей хернью. Учитывая, что в С++ имеется помимо полиморфизма на виртуальных ф-иях еще и "шаблонный полиморфизм", то скомпиллированный тестовый бинарный вариант некоего класса может иметь вообще мало общего с им же в целевой сборке.


Параметрический полиморфизм?
Ну этим же можно пользоваться в C#. Т.е. я пишу обобщенный алгоритм (допустим поиск в графе), отлаживаю его на графе с вершинами типа int или string, потом применяю к другим сущностям.

А моки вообще не в почете?
Re[10]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 18.05.09 12:07
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>>>В принципе тоже — например: быстрое, кроссплатформенное и полнофункциональное приложение на C#.


C>>Mono


NBN>Ни один из пунктов не решает.


Кто сказал?
Re[8]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 18.05.09 12:08
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>>>И то и другое неполный отстой, даже близко не являющимся решением реальных проблем.


C>>Понятно... еще один неграмотный тролль. Вы даже сформулировать не сможете в чем заключается неполнота.


NBN>Ты со своей религией продолжай минусики расставлять, авось полегчает


NBN>>>С++ тут монополист, это факт. Твои минусы это не испраят


C>>Да-да, именно по тому у меня из 10 приложений на мобилке почти половина на .NET CF.


NBN>Ага, из тех что написали китайцы из ОЕМов?



Значит по сути Вам больше сказать нечего (впрочем, по сути от Вас ничего и не было услышано).

Ок. Разговор закончен.
Re[7]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 18.05.09 12:11
Оценка:
Здравствуйте, criosray, Вы писали:

NBN>>С++ тут монополист, это факт. Твои минусы это не испраят

C>Да-да, именно по тому у меня из 10 приложений на мобилке почти половина на .NET CF.

"Почти" — это сколько именно? 4, 6, 8?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[35]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 18.05.09 12:12
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

V>>>Вопрос стоит вовсе не так, и я дважды пытался поправить постановку вопроса. Видя твою невнимательность, мне крайне неохота что-либо объяснять, ибо опять может уйти в космос... Тем не менее, для истории:

C>>Ну вот и хорошо. Значит польза все-таки есть. Хорошо, что Вы это осознали. Ну а то, что способы тестирования различаются в виду убогости С++ и native кода — это и так понятно было.

ГВ>Мда... С такими апологетами .Net в противниках не нуждается...


А с чем не согласны? Там где, в дотнет тратишь минуту на написание теста в пять строк кода, на С++ надо городить огород с "инклюдами в специальных библиотеках", что займет уж явно ни один час.

Практика показывает, что если на написание теста времени уходит больше, чем на написание кода, то тест написан не будет. Что мы, собственно, и наблюдаем в случае С++ проектов — убогость на лицо.
Re[11]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 18.05.09 12:12
Оценка:
Здравствуйте, criosray, Вы писали:

NBN>>Ни один из пунктов не решает.


C>Кто сказал?


Я сказал. Тормозной, забагованный, сложный в инсталляции продукт, имеющий проблемы с фишками разных платформ и принципиально не существующий на некоторых из них — это не наш путь
Нужно разобрать угил.
Re[9]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 18.05.09 12:14
Оценка:
Здравствуйте, criosray, Вы писали:

C>Значит по сути Вам больше сказать нечего (впрочем, по сути от Вас ничего и не было услышано).


По сути — в топах продаж шарповых продуктов нет. В перечисленных мною нишах шарп нежизнеспособен, а я перечислил только интересные мне нишы, есть и другие.

C>Ок. Разговор закончен.


Ну ты давай ещё минусиков навесь
Нужно разобрать угил.
Re[8]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 18.05.09 12:17
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

NBN>>>С++ тут монополист, это факт. Твои минусы это не испраят

C>>Да-да, именно по тому у меня из 10 приложений на мобилке почти половина на .NET CF.

ГВ>"Почти" — это сколько именно? 4, 6, 8?


4
Re[10]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 18.05.09 12:18
Оценка:
Здравствуйте, NikeByNike, Вы писали:

C>>Значит по сути Вам больше сказать нечего (впрочем, по сути от Вас ничего и не было услышано).


NBN>По сути — в топах продаж шарповых продуктов нет. В перечисленных мною нишах шарп нежизнеспособен, а я перечислил только интересные мне нишы, есть и другие.


"Нижнеспособен", но живет и набирает популярность семимильными шагами.

Видимо, не слышал что о нем думает тролль с рсдн.
Re[36]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 18.05.09 12:23
Оценка:
Здравствуйте, criosray, Вы писали:

V>>>>Вопрос стоит вовсе не так, и я дважды пытался поправить постановку вопроса. Видя твою невнимательность, мне крайне неохота что-либо объяснять, ибо опять может уйти в космос... Тем не менее, для истории:

C>>>Ну вот и хорошо. Значит польза все-таки есть. Хорошо, что Вы это осознали. Ну а то, что способы тестирования различаются в виду убогости С++ и native кода — это и так понятно было.

ГВ>>Мда... С такими апологетами .Net в противниках не нуждается...


C>А с чем не согласны?


А тут нельзя согласиться или не согласиться. Ты сам придумал и сам сделал какие-то выводы. С чем я тут могу соглашаться или не соглашаться?

C>Там где, в дотнет тратишь минуту на написание теста в пять строк кода, на С++ надо городить огород с "инклюдами в специальных библиотеках", что займет уж явно ни один час.


Ну, завелся патефон...

C>Практика показывает, что если на написание теста времени уходит больше, чем на написание кода, то тест написан не будет. Что мы, собственно, и наблюдаем в случае С++ проектов — убогость на лицо.


Угу, угу — пластинка виниловая, потёртая и трещит.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[38]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 18.05.09 12:31
Оценка:
Здравствуйте, criosray, Вы писали:

C>И Вам сказать по сути нечего? К чему этот пустой трёп?


Тебе по сути vdimas всё сказал.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[40]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 18.05.09 13:02
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>Например, на том же RSDN вопросы по покетам задают восновном в контестке CF. Однако вопросы задают восновном нубы (создают статистику), а профи пишут на С++ (реальность).


Ага, в C++ нубов нет, сразу профи получаются
Re[24]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 18.05.09 13:56
Оценка:
Здравствуйте, criosray, Вы писали:


C>В том, что для С# никогда не будет "десятков компиляторов и платформ" — язык будет продолжать развиваться во много раз быстрее С++ до тех пор, пока будет куда развиваться, а путей развития для него все еще — море.


Давно таких горячих и выспренных не видел. Это нормально по-студенчеству, главное не сильно переживай, когда с разбегу начнешь налетать на детские болезни программистов и прочие грабли.
Re[25]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 18.05.09 14:03
Оценка:
Здравствуйте, vdimas, Вы писали:

C>>В том, что для С# никогда не будет "десятков компиляторов и платформ" — язык будет продолжать развиваться во много раз быстрее С++ до тех пор, пока будет куда развиваться, а путей развития для него все еще — море.


V>Давно таких горячих и выспренных не видел. Это нормально по-студенчеству, главное не сильно переживай, когда с разбегу начнешь налетать на детские болезни программистов и прочие грабли.


На детские болезни программистов и прочие грабли я налетал примерно 11 лет тому назад, когда работал С/С++ программистом. Так что Ваш комментарий, молодой человек, несколько "мимо тазика".
Re[41]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 18.05.09 14:50
Оценка:
Здравствуйте, samius, Вы писали:

S>Ага, в C++ нубов нет, сразу профи получаются


Да язык тут не при чем, языков тонны и всех знать не будешь. Нуб — это скорее состояние души.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[43]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 18.05.09 15:23
Оценка:
Здравствуйте, Sorantis, Вы писали:

S>А вы тут Си, СиШарпы.. Аж смешно

Ну PHP-то до С и Java недорос еще.
Re[44]: Работа - с чего начать: С++ или С#?
От: Sorantis Швеция  
Дата: 18.05.09 15:24
Оценка:
Здравствуйте, samius, Вы писали:

S>Здравствуйте, Sorantis, Вы писали:


S>>А вы тут Си, СиШарпы.. Аж смешно

S>Ну PHP-то до С и Java недорос еще.
А ему это надо?
As long as there is life, there is hope
Re[45]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 18.05.09 15:33
Оценка:
Здравствуйте, Sorantis, Вы писали:

S>Здравствуйте, samius, Вы писали:


S>>Здравствуйте, Sorantis, Вы писали:


S>>>А вы тут Си, СиШарпы.. Аж смешно

S>>Ну PHP-то до С и Java недорос еще.
S>А ему это надо?

Тут показано как C# и C++ сливают PHP по популярности.

Все мы мимо тазика
Во
http://www.google.com/trends?q=c%2B%2B%2C+C%23%2C++php&amp;ctab=0&amp;geo=all&amp;date=ytd&amp;sort=1

А вы тут Си, СиШарпы.. Аж смешно


Раз это аргумент в сторону PHP, то вот эта ссылка

http://www.google.com/trends?q=c%2C+java%2C++php&amp;ctab=0&amp;geo=all&amp;date=ytd&amp;sort=1

Говорит о том, что PHP недорос до C и Java.

А надо ли это ему? Очевидно нет. Языкам вообще ничего не надо. Это людям от них чего-то надо.
Re[46]: Работа - с чего начать: С++ или С#?
От: Sorantis Швеция  
Дата: 18.05.09 15:39
Оценка:
Здравствуйте, samius, Вы писали:

S>Раз это аргумент в сторону PHP, то вот эта ссылка


S>http://www.google.com/trends?q=c%2C+java%2C++php&amp;ctab=0&amp;geo=all&amp;date=ytd&amp;sort=1


S>Говорит о том, что PHP недорос до C и Java.


S>А надо ли это ему? Очевидно нет. Языкам вообще ничего не надо. Это людям от них чего-то надо.


Не надо сравнивать апельсины с яблоками. В контексте С++ и СиШарпа ваша ссылка никакой значимости не имеет.
Очевидно, что Джава и всеми (и мною тоже) нелюбимый ПХП обскакали, скажем, по популярности как С++ так и СиШарп.
As long as there is life, there is hope
Re[25]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 18.05.09 16:01
Оценка:
Здравствуйте, vdimas, Вы писали:

V>>>Ты еще забыл кодеки, мультимедиа, реалтайм протоколы и т.д. И еще забыл, что последние года 4 тактовая частота процов практически не растет, а обсуждаемого скачка оптимизации JIT-а при переходе на 3.0 версию не было ВООБЩЕ


C>>Пример классического ламеризма. Может стоило бы для начала что-то узнать о предмете обсуждения? Например, что версия CLR все еще 2.0.х, а не 3.0


V>Насколько я понял, ты просто не в курсе какие тут шли обсуждения сразу после выхода второго фреймворка. Порой заносило даже весьма уважаемых мною коллег (уажаемых за то, что их обычно не заносит). А ламеризм — это когда читают оппонента, и при этом десятое сообщение подряд совершенно не втыкают, о чем речь... Речь о том, что мы все унутренне готовились к несколько другому развитию событий, а оно вишь как вышло — застряли малость.


V>И вот это твое замечание насчет версий фреймворков... неожиданный ход, прямо скажем.

V>Я только не понял, какую мою мысль должен был опровергнуть твой выпад, не пояснишь нам, убогим?

Вы даже не знаете разницы между фреймворком и CLR. Продолжайте писать в таком же духе — это становится очень забавно.

Ламеризм это когда человек делает много громких заявлений, имея очень слабое представление о предмете обсуждения. То, что мы и наблюдаем в Вашем случае.
Re[23]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.05.09 16:58
Оценка:
Здравствуйте, vdimas, Вы писали:

VD>>С++ же используется в последнее время больше частью для создания высокотиражных продуктов где стоимость разработки не так важна


V>Правда твоя, он теперь преимущетсвенно используется для разработки высококачественного софта, и в каждую дырку его теперь не суют, что не может не радовать.


Не надо перевирать мои слова. Я о высоком качестве, как и вообще о качестве, не говорил.

VD>>так как окупается количеством продаж (т.е. — игры, ОС, офисные приложения), а меньшее потребление компьютерных ресурсов может увеличить объем продаж.


V>Ты еще забыл кодеки, мультимедиа, реалтайм протоколы и т.д. И еще забыл, что последние года 4 тактовая частота процов практически не растет, а обсуждаемого скачка оптимизации JIT-а при переходе на 3.0 версию не было ВООБЩЕ


Я ничего не забывал. Я не ставил себе задачей перечислить все мелкие подниши. Кодеки можно смело отнести к системному софту (в купе с дровами). "мультимедиа" — это что-то очень абстрактное. Ну, а риалтайм тут не в кассу. Он и на Руби более чем возможен.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[19]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.05.09 17:15
Оценка:
Здравствуйте, vdimas, Вы писали:

V>С какой это радости система типов более мощная? ИМХО, гораздо более простая, в плане параметрических типов (мощная она по сравнению с Nemerle разве что). Или ты считаешь, что если пользовательские типы ограничить только до алгебраических, то система типов от этого мощнее становится? Она становится проще гораздо и ограниченнее.


Иди разберись, что такое система типов. Потом поговорим. Nemerle же использует систему типов .net, которая принципиально не допускает вычислений (как Хаскель и С++). Только Nemerle это и не нужно. У него есть своя система метапрограммирования работающая во время компиляции.

VD>>2. Есть куда более мощные синтаксические препроцессоры (например, Nemerle и Лисп) которые по возможностям и удобству рвут С++ как тузик грелку. К примеру, я воспроизвел linq из спецификации C# написав два макроса. С++ такое сделать не может в приципе.


V>И? 99.99% языков такое сделать не могут в принципе, ибо давать дорабатывать компилятор простым программистам — это спорное занятие. Не зря на Лиспе и Форте не так уж много людей лабали.


Ну, вот С++ к этим процентам и относится. Хотя процент несколько завышен. Почти любой скриптовый язык обладает не хилыми возможностями МП.

V>С# 5/6/7 тоже мочь не будет однозначно, эта фишка "не на каждый день", в массы его вряд ли выпустят.


Ага. Обезьяны с дубинами не доросли. Даш им оружие по мощнее и они себе что-нить отстрелят .

V>Дженерики слабее на порядок примерно, не знаю, откуда ты берешь свое "лучше"?


Ты уж разберись. Или у Nemerle более мощная система типов (а за одно и у C#, так как она у них единая, практически), или "Дженерики слабее на порядок".

Подсказка. МП и система типов не обзяательно должны быть связаны.

V> Банально хрен обобщишь алгоритм на float и на double, а тебе от этого лучше.


О, как. А мужики то и не знали. Хочешь я тебя научу обобщать алгоритмы на любом языке поддерживающем лямбды и/или generic-интерфейсы?

V> Реально и с размахом эти дженерики используются только по одному назначению — улучшить статическую типизацию, дабы меньше было динамической или тупого боксинга на ровном месте — офигенная, однако, у нас разновидность полиморфизма-то.


О, как? Еще одно противоречие. Ты уж определись или дженерики не позволяют обобщать алгоритмы, или они могут улучшить статическую типизацию. Это как бы два друг-другу протеворечащих заявления.

V>У меня за эти годы сложилось четкое убеждение, что дженерики — это способ обходить перечисленные недостатки платформы .Net, не более того.


У тебя за эти годы сложилось много каши в голове .

VD>>А уж параметрический полиморфизм в современных ФЯ сделан несравнимо лучше шаблонов С++.


V>Голословие. Если по возможностям — то так же или хуже (где есть явная специализация — то примерно так же, где нет — хуже). "Лучше" разве что по минималистическому синтаксису всего одного языка. Дык по этому критерию и Немерле — убожество еще то.


Тебе конечно виднее. Когда в руках молоток, то все вокруг кажется гвоздями.

VD>>Просто использование шаблонов выходит за рамки параметрического полиморфизма и входят в область метапрограммирования. Но в этой области безоговорочно царят макросы. И убогим возможностям С++ тут делать не чего.


V>Ты то отсылаешь к Хаскелю и ОКамлу, то называешь языки без макросов убогими (значит и их тоже). А ведь системе типов Немерле даже до Хаскельной как до луны раком. В общем, более чем сумбурно.


Ты кашку из головки вынь и попытайся систематизировать знания. Тогда поймешь, что система типов и система МП — это разные вещи. И можно спокойно иметь слабую систему типов и сильную систему МП (как в Лиспе, например), или наоборот сильную систему типов и слабую МП (Хаскель).

VD>>Если же серьезно говорить о метапрограммировании, то С++ тут откровенный лузер, если сравнивать его с такими языками, реализованными поверх дотнета, как Nemerle и Lisp. Вот где МП доведено до высшего пилотажа. Причем оно исходно предусмотрено в языка, а не достигается использованием побочных эффектов системы типов.


V>Не надо из МП делать священную корову, иногда и просто попрограммировать надо. У вас в том большом реальном проекте доля МП так себе, прямо скажем. А все остальные многие и многие тыщщи строк делать на Лиспе — увольте и в пример больше не приводите.


Как говорится "слив зачитан".

V>И что касается макросов, то Лисп тут проигрывает даже Форту, по удобству пользования этой фичей... Так что, отличное вышло у тебя пюре, надо сказать.


Гы-гы. Расскажи это лиспарям.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[26]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 18.05.09 17:23
Оценка:
Здравствуйте, criosray, Вы писали:


V>>Я только не понял, какую мою мысль должен был опровергнуть твой выпад, не пояснишь нам, убогим?


C>Вы даже не знаете разницы между фреймворком и CLR.


Так пояснишь или нет?
Заодно и последнее.

C>Ламеризм это когда человек делает много громких заявлений, имея очень слабое представление о предмете обсуждения. То, что мы и наблюдаем в Вашем случае.


Для 11 лет практики маловато конкретики, ближе к телу.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[24]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 18.05.09 17:23
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Не надо перевирать мои слова. Я о высоком качестве, как и вообще о качестве, не говорил.


Да ладно, красиво же было сказано, я не удержался.


VD>Я ничего не забывал. Я не ставил себе задачей перечислить все мелкие подниши. Кодеки можно смело отнести к системному софту (в купе с дровами). "мультимедиа" — это что-то очень абстрактное. Ну, а риалтайм тут не в кассу. Он и на Руби более чем возможен.


Может и возможен, но тот же VoIP сервак потянет на порядок меньше клиентов.

-----------
А вообще, не находишь странным спустя лет 5 примерно, пройтись по тем же темам?
У меня, например, вообще любимого языка нет. Использую активно С# и С++, но к обоим достаточно претензий. И к Немерле тоже, разумеется.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[25]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 18.05.09 17:27
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, VladD2, Вы писали:


VD>>Не надо перевирать мои слова. Я о высоком качестве, как и вообще о качестве, не говорил.


V>Да ладно, красиво же было сказано, я не удержался.


Перевиравшие слов — это красиво.

Скажи, ты действительно не понимаешь, что подмена понятий и несвязанные выводы — это средство получать лживые выводы? Или ты намеренно пытаешься добиться лжи?

V>Может и возможен, но тот же VoIP сервак потянет на порядок меньше клиентов.


Слово "риалтамй", которое ты тут не к месту упомянул, не имеет никакого отношения к производительности.
Кстати, само заявление тоже высосано из пальца.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 18.05.09 18:04
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Иди разберись, что такое система типов. Потом поговорим. Nemerle же использует систему типов .net, которая принципиально не допускает вычислений (как Хаскель и С++). Только Nemerle это и не нужно. У него есть своя система метапрограммирования работающая во время компиляции.


Во первых да, параметризацию Хаскеля, так же как и шаблоны С++ в бинарную сборку не запихаешь (отчего Хаскеля и нет на .Net), ну дык кто мешает распространять так же как шаблонные библиотеки на С++ — в исходниках?

Во вторых, я дал реплику относительно твоего заявлени о "мощности" системы типов Хаскеля относительно С++. Хотел бы увидеть эту мощность, помимо встроенных алгебраических типов.


V>>С# 5/6/7 тоже мочь не будет однозначно, эта фишка "не на каждый день", в массы его вряд ли выпустят.


VD>Ага. Обезьяны с дубинами не доросли. Даш им оружие по мощнее и они себе что-нить отстрелят .


Да вполне нормальный ситуейшн и изменений в обозримом будущем не предвидится. На таких лего-компиляторах как Немерле надо делать системы по разработке DSL, а не целевой потенциально-важный код. В общем, я — за разграничение ответственности.

V>>Дженерики слабее на порядок примерно, не знаю, откуда ты берешь свое "лучше"?


VD>Ты уж разберись. Или у Nemerle более мощная система типов (а за одно и у C#, так как она у них единая, практически), или "Дженерики слабее на порядок".


Нет, система типов не мощная. Мощный вывод типов, но это не одно и то же.

VD>Подсказка. МП и система типов не обзяательно должны быть связаны.


Блин, это должна была быть моя подсказка. Влад, я понимаю, что совершенно некогда читать каждого попавшегося тебе vdimas-а, но разговор слепого с глухим как минимум утомляет.

V>> Банально хрен обобщишь алгоритм на float и на double, а тебе от этого лучше.


VD>О, как. А мужики то и не знали. Хочешь я тебя научу обобщать алгоритмы на любом языке поддерживающем лямбды и/или generic-интерфейсы?


Нашел обобщение. Сорри, суходрочка это, а не обобщение.

V>> Реально и с размахом эти дженерики используются только по одному назначению — улучшить статическую типизацию, дабы меньше было динамической или тупого боксинга на ровном месте — офигенная, однако, у нас разновидность полиморфизма-то.


VD>О, как? Еще одно противоречие. Ты уж определись или дженерики не позволяют обобщать алгоритмы, или они могут улучшить статическую типизацию. Это как бы два друг-другу протеворечащих заявления.


С чего бы они противоречили друг-другу? Возможность внутри алгоритма покласть объект в типизированное хранилище — не бог весть какое обобщение. Переопределённые операторы и вообще все статические члены — не доступны. А значит прощай статически реализуемые траитсы и бихейворы, статические эффективные фабричные методы и иже с ними. Т.е. я даже ни о каком МП не говорю, только о параметрическом полиморфизме, которого практически нет в генериках.


VD>>>А уж параметрический полиморфизм в современных ФЯ сделан несравнимо лучше шаблонов С++.


V>>Голословие. Если по возможностям — то так же или хуже (где есть явная специализация — то примерно так же, где нет — хуже). "Лучше" разве что по минималистическому синтаксису всего одного языка. Дык по этому критерию и Немерле — убожество еще то.


VD>Тебе конечно виднее. Когда в руках молоток, то все вокруг кажется гвоздями.


Ну ты ведь все-равно поинта про параметрический полиморфизм не понял, так? Понимаешь, в генериках мы можем вызывать методы типа-параметра либо унаследованные им от Object, либо доставшиеся от типов/интерфейсов-ограничений. А это не совсем параметрический полиморфизм, это самый что ни на есть обычный, через vtable или как его. Сравни с явным инстанциированием классов типов в том же Хаскеле. Почему выше абзацем сказал "практически" — из-за value-type.

VD>>>Просто использование шаблонов выходит за рамки параметрического полиморфизма и входят в область метапрограммирования. Но в этой области безоговорочно царят макросы. И убогим возможностям С++ тут делать не чего.


V>>Ты то отсылаешь к Хаскелю и ОКамлу, то называешь языки без макросов убогими (значит и их тоже). А ведь системе типов Немерле даже до Хаскельной как до луны раком. В общем, более чем сумбурно.


VD>Ты кашку из головки вынь и попытайся систематизировать знания. Тогда поймешь, что система типов и система МП — это разные вещи. И можно спокойно иметь слабую систему типов и сильную систему МП (как в Лиспе, например), или наоборот сильную систему типов и слабую МП (Хаскель).


Вот только здесь с тобой и соглашусь. Мне в С++ крайне не нравится синтаксическая легкость конструкции C-style приведения типа, которая и может стать причиной той самой неверной реинтерпретации памяти. Вот только одну эту возможность убери (static_cast и const_cast тоже) — и будет практически другой язык с другой репутацией. А всё остальное в С++ — это классика статической строгой типизации и даже кое-какие МП-зачатки, чем не в состоянии похвастаться многие другие статически строго-типизированные языки.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[26]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 18.05.09 18:21
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Скажи, ты действительно не понимаешь, что подмена понятий и несвязанные выводы — это средство получать лживые выводы?


Щас, если пару раз прочту, а то с первого раза как-то не очень...

А если по-делу, я ведь не поверю, что дотнетчики-одиночки делают лучший софт, чем крупные конторы на С++. Так что гоуту собственный пост, ты сам все сказал.


VD>Или ты намеренно пытаешься добиться лжи?


Или ты задал очередной дурацкий вопрос.


V>>Может и возможен, но тот же VoIP сервак потянет на порядок меньше клиентов.


VD>Слово "риалтамй", которое ты тут не к месту упомянул, не имеет никакого отношения к производительности.


Это у сферических коней и бравых форумных парней не имеет. В конкретных цифрах, если производительность не дает вкладываться в отведённые временные рамки, то отношение получишь непосредственное. И в VoIP, если не в курсе, с задержками довольно-таки строго.


VD>Кстати, само заявление тоже высосано из пальца.


Насчет порядка на Ruby? Тебе на заметку — простейший шумоподавитель на .Net работает в 3 раза медленнее, чем на С++, микшер конференции на C# — в 3-5 раз медленнее, чем на С++. Не думаю, что я сильно ошибся относительно Ruby.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[23]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.05.09 20:10
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Ты еще забыл кодеки, мультимедиа, реалтайм протоколы и т.д. И еще забыл, что последние года 4 тактовая частота процов практически не растет, а обсуждаемого скачка оптимизации JIT-а при переходе на 3.0 версию не было ВООБЩЕ


Ну да, всего-то научились инлайнить вызовы со структурами, а также ускорили работу GC, несмотря на то что версия CLR не поменялась.
С учетом этих ускорений код на .NET, который проигрывал плюсовому в 1,5-2 раза стал выигрывать у плюсовго по скорости.
И это даже бех перекомпиляции программ.
Re[27]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 18.05.09 20:22
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Насчет порядка на Ruby? Тебе на заметку — простейший шумоподавитель на .Net работает в 3 раза медленнее, чем на С++, микшер конференции на C# — в 3-5 раз медленнее, чем на С++. Не думаю, что я сильно ошибся относительно Ruby.


1)Ну приведи код на C++ и C#, дающий такой результат. Хотя сомневаюсь что будет C++, будет тупо С, обернутый в класс и никаких шаблонов, STL, полиморфизма.
2)Ты писал о real-time, оно вообще говоря с производителностью не связано.
Re[38]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 18.05.09 20:30
Оценка:
Здравствуйте, gandjustas, Вы писали:

S>>>Моки и заглушки — разные вещи, использующиеся в разных сценариях тестирования.


V>>Садись, два.

V>>Роутеры и маршрутизаторы с этой же точки зрения тоже разные вещи, использующиеся в разных местах сети.

G>http://www.martinfowler.com/articles/mocksArentStubs.html — курить до просветления.

G>Как провсетление наступит можно выложить сюда реализацию моков на С++

vdimas: Вас, однако, mock`нули.
Re[41]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 18.05.09 21:33
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Из этого утверждения следует:

Снова нарушения логики.

G>1)Профи не задают вопросов

Этого не утверждалось. Профи как сами умеют искать информацию (человек должен иметь склонность к этому, чтобы стать профи), так и знают более лучшие способы эту информацию найти.

G>2)Все профи раньше писали на CF.

Никаких предпосылок для данного утверждения, оно очевидно ложно.

G>3)Пишуших софт на CF несоизмеримо больше, так как далеко не каждый нуб становится профи, а сами по себе профи не появляются

Ну дык, каждый тупой школьник со своим тетрисом. Только они погоды не делают.
Нужно разобрать угил.
Re[6]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 18.05.09 23:19
Оценка:
Здравствуйте, Anton Batenev, Вы писали:

c>> Откройте для себя .NET CF и Mono.


AB>Вот тут все про моно да про моно. Но хоть бы кто-нибудь показал мастер-класс на оном, а то складывается впечатление, что его защитники видели его только на картинках, а те, кто его пользовал, молчат, дабы не было стыдно.


Как Вы себе это представляете?
Re[7]: Работа - с чего начать: С++ или С#?
От: Anton Batenev Россия https://github.com/abbat
Дата: 18.05.09 23:25
Оценка:
Здравствуйте, criosray, Вы писали:

c> Как Вы себе это представляете?


Это был риторический вопрос, на который я же и ответил.
avalon 1.0rc1 rev 244, zlib 1.2.3
Re[7]: Работа - с чего начать: С++ или С#?
От: Anton Batenev Россия https://github.com/abbat
Дата: 18.05.09 23:38
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK> Я только сразу оговорюсь, что сам на Mono не разрабатываю, т.к. мы пишем только под Windows.


С этого было надо начинать... и этим надо было заканчивать (см. мое предыдущее
Автор: Anton Batenev
Дата: 19.05.09
сообщение).
avalon 1.0rc1 rev 244, zlib 1.2.3
Re[40]: Работа - с чего начать: С++ или С#?
От: IID Россия  
Дата: 19.05.09 00:12
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>А shared_ptr — дополнительный оверхед к распределению памяти в куче.


Откройте для себя intrusive_ptr. Я, если честно, недоумеваю — чего так к shared_ptr прицепились ? Если объект наш собственный shared_ptr нафиг не упал, счётчик ссылок прекрасно встраивается. Вот если объект чужой и/или его модификация невозможна...
kalsarikännit
Re[25]: Работа - с чего начать: С++ или С#?
От: IID Россия  
Дата: 19.05.09 00:42
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>я не знаю насчёт net, но в ахскеле и по слузам в яве тоже двухпоколенный сборщик мусора. так он делает малую сборку через каждые 256кб выделенной памяти и никому это не мешает. так что ваозможно тут проблема только в прокладке


Имеем 3 вызова: 3х256кб == 3/4 от 1мб. Да пусть даже всего 256кб на простенький xmlrpc запрос с двумя параметрами... А не зажрались ли вы, батенька ?

Работа конкретно xmlrpc.net в данном случае это: сериализация двух параметров + имя метода в формат пакета XML-RPC, передача на сервер по HTTP/1.1, получение ответа и его десериализация в объектную модель.

kalsarikännit
Re[26]: Работа - с чего начать: С++ или С#?
От: IID Россия  
Дата: 19.05.09 00:56
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Самообман — думать что C++ всегда быстрее.


Можно пример программы на .NET, которую невозможно будет обогнать программой на С++ ? Желательно не скатываться на I/O, т.к. в этом случае будем мерять скорость работы сервисов ОС, и отставание .NET станет менее заметным. Под программой на С++ понимаем любой код, компилирующийся современным С++ компилятором, и дающий аналогичный результат работы.

P.S.: подсказка: сам CLR написан на C/С++, и скорость выполнения .NET кода это, в определённом смысле, скорость выполнения некоторой С++ программы. Которую всегда можно, как минимум, не замедлить.
kalsarikännit
Re[7]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 19.05.09 06:56
Оценка:
MK> Например, "WikiPedia uses Mono for its search facilities. The indexing and the actual searching is done by Mono-based applications".

Уже нет. Уже Java + Lucene
avalon 1.0rc1 rev 239, zlib 1.2.3


dmitriid.comGitHubLinkedIn
Re[7]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 19.05.09 06:56
Оценка:
MK> Например, "WikiPedia uses Mono for its search facilities. The indexing and the actual searching is done by Mono-based applications".

Уже нет. Уже Java + Lucene
avalon 1.0rc1 rev 239, zlib 1.2.3


dmitriid.comGitHubLinkedIn
Re[29]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 19.05.09 07:05
Оценка:
Здравствуйте, IID, Вы писали:

IID>JIT связан по рукам и ногам временными ограничениям. У С++ компилятора свободы (времени) гораздо больше.

И что? Из этого твоего заявления только следует, что JIT круче

IID>Насколько я понимаю, кода никто не приведёт, и можно засчитывать слив ?

Эээ неее, не надо всех под одну гребенку. Я про код ничего не говорил. Более того, ты вообще не найдешь ни одного моего поста, где бы я утверждал, что .Net быстрее С++. Я всего лишь поправил тебя, указав на очевидное.
Re[30]: Работа - с чего начать: С++ или С#?
От: IID Россия  
Дата: 19.05.09 08:04
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>Здравствуйте, IID, Вы писали:


IID>>JIT связан по рукам и ногам временными ограничениям. У С++ компилятора свободы (времени) гораздо больше.

MK>И что? Из этого твоего заявления только следует, что JIT круче

Круче, потому что тормознее ?
вот твоя цитата:

MK>И тебе подсказка: код на промежуточном языке компилируется при первом вызове, после чего скорость его исполнения в определенной степени перестаёт зависить от "выполнения некоторой С++ программы".

C++ код изначально компилируется. Так что непонятно, что "волшебного" даст "компиляция при первом вызове", особенно если не забывать про ограничения по времени на эту компиляцию. Рассматриваем пока в контексте одинакового железа для выполнения, не скатываясь к "потенциальным оптимизациям в будушем под свежее железо". На этот случай, например, есть GCC + LLVM. Но речь о другом.


IID>>Насколько я понимаю, кода никто не приведёт, и можно засчитывать слив ?

MK>Эээ неее, не надо всех под одну гребенку. Я про код ничего не говорил. Более того, ты вообще не найдешь ни одного моего поста, где бы я утверждал, что .Net быстрее С++. Я всего лишь поправил тебя, указав на очевидное.

Вообще-то я отвечал на пост
Автор: gandjustas
Дата: 18.03.09
товарища gandjustas, в котором тот утверждал, что:

G>Самообман — думать что C++ всегда быстрее.


Т.е. товарищ всеръез считает, что можно написать на .NET программу, которая окажется быстрее чем С++. Мой же поинт в том, что С++ всё-таки быстрее (уж во всяком случае точно не медленнее).
kalsarikännit
Re[31]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 19.05.09 08:11
Оценка:
Здравствуйте, IID, Вы писали:

MK>>Здравствуйте, IID, Вы писали:


IID>C++ код изначально компилируется. Так что непонятно, что "волшебного" даст "компиляция при первом вызове", особенно если не забывать про ограничения по времени на эту компиляцию. Рассматриваем пока в контексте одинакового железа для выполнения, не скатываясь к "потенциальным оптимизациям в будушем под свежее железо". На этот случай, например, есть GCC + LLVM. Но речь о другом.

речь о csc + JIT?

IID>Т.е. товарищ всеръез считает, что можно написать на .NET программу, которая окажется быстрее чем С++. Мой же поинт в том, что С++ всё-таки быстрее (уж во всяком случае точно не медленнее).

Товарищ уже ответил

Пример не приведу, ибо очень большо получится. Но основная суть в том, что в .NET можно генерировать код в рантайме.

Дальше простор для фантазии на тему.
Re[28]: Работа - с чего начать: С++ или С#?
От: IID Россия  
Дата: 19.05.09 08:19
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Пример не приведу, ибо очень большо получится. Но основная суть в том, что в .NET можно генерировать код в рантайме.


Неужели кратко продемонстрировать скоростные возможности языка никак не получается ? Если уж сильно хочется генерировать код в рантайме и чтобы не скатываться в сторону "я сейчас наворочу динамическую кодогенерацию, её в С++ нет, и никто со мной связываться не захочет" можно поступить очень просто: берём (фиксируем) один любой, наперёд заданный, результат этой самой генерации, и меряем скорость.
kalsarikännit
Re[29]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 19.05.09 08:29
Оценка:
Здравствуйте, IID, Вы писали:

IID>Неужели кратко продемонстрировать скоростные возможности языка никак не получается ?

Дело не в языке, а скорее в платформе.
IID>Если уж сильно хочется генерировать код в рантайме и чтобы не скатываться в сторону "я сейчас наворочу динамическую кодогенерацию, её в С++ нет, и никто со мной связываться не захочет" можно поступить очень просто: берём (фиксируем) один любой, наперёд заданный, результат этой самой генерации, и меряем скорость.

Я уже приводил в пример расчеты (пусть это будут пространственные запросы) по телам, ограниченными аналитически заданными поверхностями. На .net это возможно сделать через кодогенерацию. В C++ кодогенерация недоступна, следовательно использовать можно парсеры, интерпретаторы и т.п.
Хочется сравнивать скорость в этом примере? Если да, то от Вас требуется предоставить решение на С++, потом договоримся о конфигурации тел и померяем скорость...
Re[30]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 19.05.09 08:39
Оценка:
Здравствуйте, samius, Вы писали:

S>Я уже приводил в пример расчеты (пусть это будут пространственные запросы) по телам, ограниченными аналитически заданными поверхностями. На .net это возможно сделать через кодогенерацию. В C++ кодогенерация недоступна, следовательно использовать можно парсеры, интерпретаторы и т.п.


Просто пример в тему: для нативной Delphi есть скриптеры с компиляцией в x86, есть компиляторы формул (похоже тема вообще популярная), есть в конце-концов бесплатные компиляторы командной строки . Не думаю, что у C++ с этим хуже.
Re[31]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 19.05.09 08:44
Оценка:
Здравствуйте, hattab, Вы писали:

H>Здравствуйте, samius, Вы писали:


S>>Я уже приводил в пример расчеты (пусть это будут пространственные запросы) по телам, ограниченными аналитически заданными поверхностями. На .net это возможно сделать через кодогенерацию. В C++ кодогенерация недоступна, следовательно использовать можно парсеры, интерпретаторы и т.п.


H>Просто пример в тему: для нативной Delphi есть скриптеры с компиляцией в x86, есть компиляторы формул (похоже тема вообще популярная), есть в конце-концов бесплатные компиляторы командной строки . Не думаю, что у C++ с этим хуже.


Ну так-то конечно, на худой конец можно на C++ нагенерить и выполнить код с помощью .net-а
Re[32]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 19.05.09 08:47
Оценка:
Здравствуйте, samius, Вы писали:

S>>>Я уже приводил в пример расчеты (пусть это будут пространственные запросы) по телам, ограниченными аналитически заданными поверхностями. На .net это возможно сделать через кодогенерацию. В C++ кодогенерация недоступна, следовательно использовать можно парсеры, интерпретаторы и т.п.


H>>Просто пример в тему: для нативной Delphi есть скриптеры с компиляцией в x86, есть компиляторы формул (похоже тема вообще популярная), есть в конце-концов бесплатные компиляторы командной строки . Не думаю, что у C++ с этим хуже.


S>Ну так-то конечно, на худой конец можно на C++ нагенерить и выполнить код с помощью .net-а


Это не к вопросу перформанса, это к вопросу о плюсах платформы
Re[30]: Работа - с чего начать: С++ или С#?
От: IID Россия  
Дата: 19.05.09 08:48
Оценка:
Здравствуйте, samius, Вы писали:

S>Я уже приводил в пример расчеты (пусть это будут пространственные запросы) по телам, ограниченными аналитически заданными поверхностями. На .net это возможно сделать через кодогенерацию. В C++ кодогенерация недоступна, следовательно использовать можно парсеры, интерпретаторы и т.п.


Будем мерять скорость стороннего парсера ? Или от меня требуется написать свой собственный парсер ? очень смешно, попытка прикрыть слив надуманной сложностью.

Давай тогда я пример приведу, раз от тебя внятного и короткого семпла не добиться: будем мерять скорость md5. По 64 раунда стандартного алгоритма на блок. Сложностей это закодить нет никаких, не надо ни парсеры писать, ни предметную область изучать. Жду реализацию на .NET
kalsarikännit
Re[30]: Работа - с чего начать: С++ или С#?
От: IID Россия  
Дата: 19.05.09 08:56
Оценка:
Здравствуйте, gandjustas, Вы писали:

IID>>Если уж сильно хочется генерировать код в рантайме и чтобы не скатываться в сторону "я сейчас наворочу динамическую кодогенерацию, её в С++ нет, и никто со мной связываться не захочет" можно поступить очень просто: берём (фиксируем) один любой, наперёд заданный, результат этой самой генерации, и меряем скорость.

G>Не надо жопой вилять. Как раз динамическая кодогенерация позволяет написать программу так чтобы она работала в общем случае быстрее нативной.
G>Если взять один конкретный случай (набор входных данных), то смотри выше про ассемблер.

Я говорил не проконкретный набор входных данных, а про фиксацию алгоритма, скорость которого будем сравнивать. Ещё раз, для прапорщиков: раз ты утверждал что:

G>Самообман — думать что C++ всегда быстрее.


так потрудись привести пример, подтверждающий твои слова. Если бы ты сказал что-то вроде "наивно думать что на С++ всё реализуется с такой же лёгкостью/гибкостью как в .NET" — не было бы таких вопросов к тебе. Раз заикнулся о скорости — давай говорить предметно. Измеряя скорость конструкций языка, а не скорость подсистем ввода вывода/сторонних парсеров/спутников на орбите/etc.
kalsarikännit
Re[39]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 19.05.09 09:03
Оценка:
Здравствуйте, criosray, Вы писали:

C>vdimas: Вас, однако, mock`нули.


Тебе лучше было бы ответить на свои банальности, выдаваемые за откровения, относительно CLR и фреймворков здесь
Автор: vdimas
Дата: 18.05.09
.
Re[32]: Работа - с чего начать: С++ или С#?
От: IID Россия  
Дата: 19.05.09 09:04
Оценка:
Здравствуйте, samius, Вы писали:

S>Ты просил пример, где программа на C++ сольет в разы. Я привел. Пример, где сольет дотнет я не просил.


Ссылку с C# кодом подтрудись привести, в ворохе твоих сообщений сходу не нашёл. И учти, я не буду писать абсолютно идентичный вариант, если используется кодогенерация. Мне моё время дорого. Раз этого не хочешь сделать ты — я сам зафиксирую один (произвольный) вариант исполнения алгоритма. Не факт что он будет оптимальным для тебя.

S>Доказывать что md5 на С будет немного быстрее C# мне не надо.


НЕМНОГО ?!! Ты уверен что это действительно будет НЕМНОГО? (кстати, что такое НЕМНОГО? пара процентов ? или, может быть, разы ?)
kalsarikännit
Re[31]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 19.05.09 09:16
Оценка:
Здравствуйте, IID, Вы писали:

IID>Т.е. товарищ всеръез считает, что можно написать на .NET программу, которая окажется быстрее чем С++. Мой же поинт в том, что С++ всё-таки быстрее (уж во всяком случае точно не медленнее).


Можно написать. У каждой проблемы существует множество решений. Более экспрессивные средства и инструменты дотнет позволяют писать код на много быстрее, уделяя больше времени качеству кода, продуманности дизайна и выбора алгоритмов, ну и наконец быстро профилировать, выявлять узкие места и ликвидировать их.
Re[31]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 19.05.09 09:22
Оценка:
Здравствуйте, IID, Вы писали:

IID>C++ код изначально компилируется. Так что непонятно, что "волшебного" даст "компиляция при первом вызове", особенно если не забывать про ограничения по времени на эту компиляцию. Рассматриваем пока в контексте одинакового железа для выполнения, не скатываясь к "потенциальным оптимизациям в будушем под свежее железо". На этот случай, например, есть GCC + LLVM. Но речь о другом.

Никакого волшебства. Просто если функция вызывается 1000 раз, компилироваться она будет только 1 раз, остальные 999 будет работать машинный код. Чтобы снова не было придирок: я не утверждаю, что эти 999 работают быстрее, чем аналогичный код на С++. А для особо волнующихся, есть NGen.
Re[31]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 19.05.09 09:28
Оценка:
Здравствуйте, hattab, Вы писали:

S>>Я уже приводил в пример расчеты (пусть это будут пространственные запросы) по телам, ограниченными аналитически заданными поверхностями. На .net это возможно сделать через кодогенерацию. В C++ кодогенерация недоступна, следовательно использовать можно парсеры, интерпретаторы и т.п.


H>Просто пример в тему: для нативной Delphi есть скриптеры с компиляцией в x86, есть компиляторы формул (похоже тема вообще популярная), есть в конце-концов бесплатные компиляторы командной строки . Не думаю, что у C++ с этим хуже.


Скриптеры будут заведомо менее производительны. Даже такие продвинутые как Lua — даже они в разы медленнее машинного кода, генерируемого CLR. Это конечно не значит, что их производительности не будет хватать на многих задачах — уверен, что будет, но здесь многие переживают за невидимые такты и неслышимые байты оверхеда (юношеский максимализм — что поделаешь...).
Re[31]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.05.09 09:31
Оценка:
Здравствуйте, IID, Вы писали:

IID>Здравствуйте, gandjustas, Вы писали:


IID>>>Если уж сильно хочется генерировать код в рантайме и чтобы не скатываться в сторону "я сейчас наворочу динамическую кодогенерацию, её в С++ нет, и никто со мной связываться не захочет" можно поступить очень просто: берём (фиксируем) один любой, наперёд заданный, результат этой самой генерации, и меряем скорость.

G>>Не надо жопой вилять. Как раз динамическая кодогенерация позволяет написать программу так чтобы она работала в общем случае быстрее нативной.
G>>Если взять один конкретный случай (набор входных данных), то смотри выше про ассемблер.

IID>Я говорил не проконкретный набор входных данных, а про фиксацию алгоритма, скорость которого будем сравнивать. Ещё раз, для прапорщиков: раз ты утверждал что:


IID>

G>>Самообман — думать что C++ всегда быстрее.


IID>так потрудись привести пример, подтверждающий твои слова. Если бы ты сказал что-то вроде "наивно думать что на С++ всё реализуется с такой же лёгкостью/гибкостью как в .NET" — не было бы таких вопросов к тебе. Раз заикнулся о скорости — давай говорить предметно. Измеряя скорость конструкций языка, а не скорость подсистем ввода вывода/сторонних парсеров/спутников на орбите/etc.


А причем тут скорость конструкций языка? тебе это помогает обманывать себя?
Думаешь скорость реальных программ зависит от какой-то мифической "скорости конструкций языка"?

Как же тогда померить скорость lisp, там из конструкций языка только скобки?
Re[34]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 19.05.09 09:34
Оценка:
Здравствуйте, samius, Вы писали:

S>Здравствуйте, IID, Вы писали:


S>На днях выложу картинку в блоге.


А чего томить, примерно так это выглядит:


Re[32]: Работа - с чего начать: С++ или С#?
От: IID Россия  
Дата: 19.05.09 09:36
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>А причем тут скорость конструкций языка? тебе это помогает обманывать себя?

G>Думаешь скорость реальных программ зависит от какой-то мифической "скорости конструкций языка"?

G>Как же тогда померить скорость lisp, там из конструкций языка только скобки?


примера-подтверждения так и нет. Скоростной MD5 на C# я тоже не увидел. Слив засчитываем.
kalsarikännit
Re[31]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 19.05.09 09:39
Оценка:
IID> так потрудись привести пример, подтверждающий твои слова. Если бы ты сказал что-то вроде "наивно думать что на С++ всё реализуется с такой же лёгкостью/гибкостью как в .NET" — не было бы таких вопросов к тебе. Раз заикнулся о скорости — давай говорить предметно. Измеряя скорость конструкций языка, а не скорость подсистем ввода вывода/сторонних парсеров/спутников на орбите/etc.

Это все синтетика. Как можно сравнивать if с if'ом?

Вон, в «декларативном программировании» привели пример считывания файлов таки. Ленивый Хаскель всех порвал.
avalon 1.0rc1 rev 239, zlib 1.2.3


dmitriid.comGitHubLinkedIn
Re[32]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 19.05.09 09:43
Оценка:
Здравствуйте, criosray, Вы писали:

H>>Просто пример в тему: для нативной Delphi есть скриптеры с компиляцией в x86, есть компиляторы формул (похоже тема вообще популярная), есть в конце-концов бесплатные компиляторы командной строки . Не думаю, что у C++ с этим хуже.


C>Скриптеры будут заведомо менее производительны. Даже такие продвинутые как Lua — даже они в разы медленнее машинного кода, генерируемого CLR. Это конечно не значит, что их производительности не будет хватать на многих задачах — уверен, что будет, но здесь многие переживают за невидимые такты и неслышимые байты оверхеда (юношеский максимализм — что поделаешь...).


Читай внимательнее.
Re[33]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 19.05.09 09:45
Оценка:
Здравствуйте, hattab, Вы писали:

H>>>Просто пример в тему: для нативной Delphi есть скриптеры с компиляцией в x86, есть компиляторы формул (похоже тема вообще популярная), есть в конце-концов бесплатные компиляторы командной строки . Не думаю, что у C++ с этим хуже.


C>>Скриптеры будут заведомо менее производительны. Даже такие продвинутые как Lua — даже они в разы медленнее машинного кода, генерируемого CLR. Это конечно не значит, что их производительности не будет хватать на многих задачах — уверен, что будет, но здесь многие переживают за невидимые такты и неслышимые байты оверхеда (юношеский максимализм — что поделаешь...).


H>Читай внимательнее.


Примеры?
Re[32]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 19.05.09 09:48
Оценка:
Здравствуйте, gandjustas, Вы писали:


G>>>ЗЫ. Я уже писал в этой теме тест, который меряет выделение памяти стандартным аллокатором. .NET выигрывает.


H>>Ты так часто это повторяешь, что скоро и сам поверишь...


G>Зачем мне верить, у меня результаты тестов есть.


G>Это вот плюсистам надо верить что их код всегда быстрее.


Они верят, не сомневайтесь.

Как человек, не видивший ничего кроме крупинки Вселенной, считает себя самым разумным существом во Вселенной.
Re[32]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 19.05.09 09:50
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>>ЗЫ. Я уже писал в этой теме тест, который меряет выделение памяти стандартным аллокатором. .NET выигрывает.


H>>Ты так часто это повторяешь, что скоро и сам поверишь...


G>Зачем мне верить, у меня результаты тестов есть.


У тебя тест не правильный Померял непонятно что у MSVC++ и экстраполируешь на весь С++... Померяй у Borland C++ Builder'а вышедшего после 2005 года, и увидишь, что Борландовое непонятно что, порвет, и MSVC++, и .NET (впрочем, я давал результаты на FastMM)
Re[34]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 19.05.09 09:53
Оценка:
Здравствуйте, criosray, Вы писали:

H>>>>Просто пример в тему: для нативной Delphi есть скриптеры с компиляцией в x86, есть компиляторы формул (похоже тема вообще популярная), есть в конце-концов бесплатные компиляторы командной строки . Не думаю, что у C++ с этим хуже.


C>>>Скриптеры будут заведомо менее производительны. Даже такие продвинутые как Lua — даже они в разы медленнее машинного кода, генерируемого CLR. Это конечно не значит, что их производительности не будет хватать на многих задачах — уверен, что будет, но здесь многие переживают за невидимые такты и неслышимые байты оверхеда (юношеский максимализм — что поделаешь...).


H>>Читай внимательнее.


C>Примеры?


Например PaxCompiller.
Re[28]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 19.05.09 09:57
Оценка:
Здравствуйте, gandjustas, Вы писали:


V>>Насчет порядка на Ruby? Тебе на заметку — простейший шумоподавитель на .Net работает в 3 раза медленнее, чем на С++, микшер конференции на C# — в 3-5 раз медленнее, чем на С++. Не думаю, что я сильно ошибся относительно Ruby.


G>1)Ну приведи код на C++ и C#, дающий такой результат. Хотя сомневаюсь что будет C++, будет тупо С, обернутый в класс и никаких шаблонов, STL, полиморфизма.


Там и на C# варианте никаких генериков в этом месте, полиморфизма и System.Collection.Generic. Что сказать-то хотел?
Код не приведу, качественный аудио-микшинг конференций — это одна из заметных составляющих стоимости сервера конференций, ибо остальное — практически фигня полная.


G>2)Ты писал о real-time, оно вообще говоря с производителностью не связано.


Обожаю сеансы банальностей на rsdn. Если его никто не связал, то оно и не связано. А если связали вполне конкретными требованиями прямо в ТЗ, то ты только что напрасно потряс воздух.
Re[34]: Работа - с чего начать: С++ или С#?
От: IID Россия  
Дата: 19.05.09 09:57
Оценка:
Здравствуйте, samius, Вы писали:

S>Вобщем так:

S>Примерно такого рода DSL, придуманный под string.Replace, чтобы без парсинга
S>
S>function Сфера { return x*x + y*y + z*z; }
S>function XPlaneFunc { return x;}
S>function YPlaneFunc { return y;}
S>function ZZZFunc
S>{
S>    double xmy = x - y; return xmy - Math.Round(xmy, 1);
S>}
S>


Не увидел где там string.Replace, но тем не менее код (как тестовая платформа) мне по душе. Только модифицируйте его до компилябельного состояния.

S>Далее рисуем на растре плоскость Z = 0 в квадрате -1<x<2; -1.5<y<1.5

S>Должно получиться что-то типа болта, вкрученного в стену.

с каким шагом изменяется пара (x,y) ? Давайте так: законченный код на С#, генерирующий некоторый массив значений. По идентичности массивов можно судить о эквивалентности C# <=> C++ реализаций.

S>Непременное условие — возможность изменения описания поверхностей в рантайме.


Это пока опустим, для простоты. Фактически, мы зафиксировали один из вариантов описания поверхностей, теперь посмотрим на скорость рендеринга по нему. Если очень хочется — можно померять две реализации, с вынесом констант в некоторую структуру "настроек".

S>>>Доказывать что md5 на С будет немного быстрее C# мне не надо.

S>Уверен, что разница будет не такая, как между выполнением кода и интерпретацией

Не такая, но и не в несколько процентов, как уверяют одепты .NET Для интереса можно и этим "померяться".
kalsarikännit
Re[32]: Работа - с чего начать: С++ или С#?
От: IID Россия  
Дата: 19.05.09 10:03
Оценка:
Здравствуйте, Mamut, Вы писали:

IID>> так потрудись привести пример, подтверждающий твои слова. Если бы ты сказал что-то вроде "наивно думать что на С++ всё реализуется с такой же лёгкостью/гибкостью как в .NET" — не было бы таких вопросов к тебе. Раз заикнулся о скорости — давай говорить предметно. Измеряя скорость конструкций языка, а не скорость подсистем ввода вывода/сторонних парсеров/спутников на орбите/etc.


M>Это все синтетика.


Все тесты по сути синтетика.

M>Как можно сравнивать if с if'ом?


Не передёргивай Имелось ввиду измерение скорости самодостаточного алгоритма, который есс-но, описан этими самыми конструкциями. Алгоритма, а не сторонних библиотек/парсеров/сервисов ОС/и т.д.

M>Вон, в «декларативном программировании» привели пример считывания файлов таки. Ленивый Хаскель всех порвал.


Понятно, что ничего не делать можно за бесконечно малое время.
kalsarikännit
Re[32]: Работа - с чего начать: С++ или С#?
От: IID Россия  
Дата: 19.05.09 10:04
Оценка:
Здравствуйте, criosray, Вы писали:

C>Здравствуйте, IID, Вы писали:


IID>>Т.е. товарищ всеръез считает, что можно написать на .NET программу, которая окажется быстрее чем С++. Мой же поинт в том, что С++ всё-таки быстрее (уж во всяком случае точно не медленнее).


C>Можно написать. У каждой проблемы существует множество решений. Более экспрессивные средства и инструменты дотнет позволяют писать код на много быстрее, уделяя больше времени качеству кода, продуманности дизайна и выбора алгоритмов, ну и наконец быстро профилировать, выявлять узкие места и ликвидировать их.


Не уводите тему в сторону. Мы сейчас рассуждаем только о скорости получившегося кода.
kalsarikännit
Re[33]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 19.05.09 10:06
Оценка:
Здравствуйте, IID, Вы писали:


IID>>>Т.е. товарищ всеръез считает, что можно написать на .NET программу, которая окажется быстрее чем С++. Мой же поинт в том, что С++ всё-таки быстрее (уж во всяком случае точно не медленнее).


C>>Можно написать. У каждой проблемы существует множество решений. Более экспрессивные средства и инструменты дотнет позволяют писать код на много быстрее, уделяя больше времени качеству кода, продуманности дизайна и выбора алгоритмов, ну и наконец быстро профилировать, выявлять узкие места и ликвидировать их.


IID>Не уводите тему в сторону. Мы сейчас рассуждаем только о скорости получившегося кода.


А я о чем говорил?
Re[35]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 19.05.09 10:08
Оценка:
Здравствуйте, IID, Вы писали:

S>>Вобщем так:

S>>Примерно такого рода DSL, придуманный под string.Replace, чтобы без парсинга
S>>
S>>function Сфера { return x*x + y*y + z*z; }
S>>function XPlaneFunc { return x;}
S>>function YPlaneFunc { return y;}
S>>function ZZZFunc
S>>{
S>>    double xmy = x - y; return xmy - Math.Round(xmy, 1);
S>>}
S>>


IID>Не увидел где там string.Replace, но тем не менее код (как тестовая платформа) мне по душе. Только модифицируйте его до компилябельного состояния.


А с чего Вы решили, что он "некомпилябельный"?
Re[32]: Работа - с чего начать: С++ или С#?
От: IID Россия  
Дата: 19.05.09 10:10
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>Никакого волшебства. Просто если функция вызывается 1000 раз, компилироваться она будет только 1 раз, остальные 999 будет работать машинный код. Чтобы снова не было придирок: я не утверждаю, что эти 999 работают быстрее, чем аналогичный код на С++. А для особо волнующихся, есть NGen.


Diclaimer: я нисколько не считаю .NET/C# тормозным языком. Более того, я готов признать что на типичных задачах тормоза будут некритичными, потребление памяти — вещь в себе, не всегда это значимое ограничение. Я даже готов признать что .NET уделает неряшливый С++ вариант. Но вот с тем что некоторая .NET код может оказаться априори быстрее любого аналогичного кода на С++ (на одинаковом железе, ага) я поверить не могу. И пытаюсь получить от автора данного мнения подтверждение.
kalsarikännit
Re[34]: Работа - с чего начать: С++ или С#?
От: IID Россия  
Дата: 19.05.09 10:21
Оценка:
Здравствуйте, criosray, Вы писали:

C>>>Можно написать. У каждой проблемы существует множество решений. Более экспрессивные средства и инструменты дотнет позволяют писать код на много быстрее, уделяя больше времени качеству кода, продуманности дизайна и выбора алгоритмов, ну и наконец быстро профилировать, выявлять узкие места и ликвидировать их.


IID>>Не уводите тему в сторону. Мы сейчас рассуждаем только о скорости получившегося кода.


C>А я о чем говорил?


Из конкретики — о увеличичении скорости написания кода (могу согласиться). Остальное — вода, зависящая от кучи факторов. Совершенно непонятно, почему код С++ лишается возможности быть качественным, иметь продуманный дизайн, хорошие алгоритмы. Тоже и по профилированию. Возможно при этом для С++ варианта придётся потратить больше (усилий, времени, etc.). С другой стороны это может быть резонно в свете полученных бенефитов (потребление памяти, перфоманс, предсказуемость скорости работы.). Короче опять прописные истины, банальные, обсосанные по сто раз кряду.

Напомню, вопрос всё-таки стоит так, что С++ вариант не всегда окажется быстрее. Я уже кучу постов бьюсь, пытаясь получить "волшебный" .NET код, для которого не окажется более быстрого С++ варианта.
kalsarikännit
Re[35]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 19.05.09 10:23
Оценка:
Здравствуйте, IID, Вы писали:


C>>>>Можно написать. У каждой проблемы существует множество решений. Более экспрессивные средства и инструменты дотнет позволяют писать код на много быстрее, уделяя больше времени качеству кода, продуманности дизайна и выбора алгоритмов, ну и наконец быстро профилировать, выявлять узкие места и ликвидировать их.


IID>>>Не уводите тему в сторону. Мы сейчас рассуждаем только о скорости получившегося кода.


C>>А я о чем говорил?


IID>Из конкретики — о увеличичении скорости написания кода (могу согласиться). Остальное — вода, зависящая от кучи факторов. Совершенно непонятно, почему код С++ лишается возможности быть качественным, иметь продуманный дизайн, хорошие алгоритмы. Тоже и по профилированию. Возможно при этом для С++ варианта придётся потратить больше (усилий, времени, etc.).



Именно о том и речь. Время, как известно, вовсе не безграничный ресурс.
Re[40]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 19.05.09 10:24
Оценка:
Здравствуйте, criosray, Вы писали:

ГВ>>Это зависит от того, что в данной конфигурации полагается модулем, а что — интеграцией. Поскольку структура любой сложной программы иерархическая, то модуль на одном уровне — это сборная конструкция на другом.


C>Нет, не зависит. RTFM, как говорится.


Мдее, это какой-то пуленепробиваемый ппц...
Вопрос на засыпку: ты пользуешься классами, скажем, .Net фреймворка в своих тестах? Вернее так, есть ли у тебя хоть один юнит-тест, где ты ими пользуешься?
Я-то ответ знаю, но вижу непонимание тобой сути происходящих вещей.

ГВ>>И неужто будет проще, чем аналогичная заглушка? Это если учесть, то заглушка реализуется в естественном синтаксисе, а мок — перехватом вызовов. Второе будет почти гарантированно сложнее.


C>С этой глупостью я даже спорить не стану.


Это от неумения организовывать тестирование в отсутствии ср-в поддержки или в случае, когда их возможностей не хватает.

C>Можете продолжать бояться. Как все-таки доберетесь до RTFM`а, то поймете, что я был прав.


C>Если Ваш код на столько сложный и запутанный, что Вы не можете написать серию простых тестов для него, значит Ваш код — плохой. Вот Вам и пища для размышлений.


Ну напиши серию простых тестов для многоконтурной АСУ на базе ПИД.
Не все же пишут сайты с магазинами.
Re[36]: Работа - с чего начать: С++ или С#?
От: IID Россия  
Дата: 19.05.09 10:24
Оценка:
Здравствуйте, criosray, Вы писали:

C>А с чего Вы решили, что он "некомпилябельный"?


вообще-то я спрашивал не вас, а автора поста. Вот конкретные вопросы:
— что такое body ?
— в с каким шагом изменяется пара (x,y) вдоль интервалов ?
И, чтобы не было разногласий, я хочу чтобы результат можно было легко проверить: генерируем цвета в массив. Сравниваем массивы.
kalsarikännit
Re[35]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 19.05.09 10:30
Оценка:
Здравствуйте, IID, Вы писали:

IID>Здравствуйте, samius, Вы писали:


IID>Не увидел где там string.Replace, но тем не менее код (как тестовая платформа) мне по душе. Только модифицируйте его до компилябельного состояния.

Это не код, это способ задания поверхностей в рамках некоторого DSL. string.Replace как раз модифицирует его до компилябельного состояния. Предлагаю не заморачиваться на конкретном синтаксисе, а сделать любой удобный, но с тем чтобы на нем можно было описать аналогичный набор поверхностей.

IID>с каким шагом изменяется пара (x,y) ? Давайте так: законченный код на С#, генерирующий некоторый массив значений. По идентичности массивов можно судить о эквивалентности C# <=> C++ реализаций.

Шаг вычисляется из размеров окна программы, хотя можно его зафиксировать в целях сравнения, идентичность массивов не нужна, достаточно похожесть картинок на глаз. Это же не продукт, а пруф концепт 2002-го года из которого можно еще выжать скорость оптимизацией под инлайнинг.
А вот код пока я не дам. Да там и нет ничего интересного, позор один. string.Replace преобразует описание поверхностей в исходник, потом исходник компилится и создается экземпляр класса, реализующего некоторый интерфейс, с помощью которого можно спрашивать цвет указанной точки пространства.

S>>Непременное условие — возможность изменения описания поверхностей в рантайме.


IID>Это пока опустим, для простоты. Фактически, мы зафиксировали один из вариантов описания поверхностей, теперь посмотрим на скорость рендеринга по нему. Если очень хочется — можно померять две реализации, с вынесом констант в некоторую структуру "настроек".

Можно и опустить, главное чтобы описание поверхностей было "текстовым", например ресурсом или внешним файлом.

Реально собрался интерпретировать?

IID>Не такая, но и не в несколько процентов, как уверяют одепты .NET Для интереса можно и этим "померяться".

не интересно.
Re[33]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 19.05.09 10:31
Оценка:
Здравствуйте, IID, Вы писали:

IID> IID>> так потрудись привести пример, подтверждающий твои слова. Если бы ты сказал что-то вроде "наивно думать что на С++ всё реализуется с такой же лёгкостью/гибкостью как в .NET" — не было бы таких вопросов к тебе. Раз заикнулся о скорости — давай говорить предметно. Измеряя скорость конструкций языка, а не скорость подсистем ввода вывода/сторонних парсеров/спутников на орбите/etc.


IID> M>Это все синтетика.


IID> Все тесты по сути синтетика.


Можно предложить решение реальной задачи. Например, WideFinder


IID> M>Как можно сравнивать if с if'ом?


IID> Не передёргивай Имелось ввиду измерение скорости самодостаточного алгоритма, который есс-но, описан этими самыми конструкциями. Алгоритма, а не сторонних библиотек/парсеров/сервисов ОС/и т.д.


Это какой-то сферовакуумный конь получается

IID> M>Вон, в «декларативном программировании» привели пример считывания файлов таки. Ленивый Хаскель всех порвал.


IID> Понятно, что ничего не делать можно за бесконечно малое время.


Я ошибся, там сравнивались алгоритмы внутри хаскеля, а не в сравнении с С++
avalon 1.0rc1 rev 239, zlib 1.2.3


dmitriid.comGitHubLinkedIn
Re[36]: Работа - с чего начать: С++ или С#?
От: IID Россия  
Дата: 19.05.09 10:39
Оценка:
Здравствуйте, samius, Вы писали:

IID>>Не увидел где там string.Replace, но тем не менее код (как тестовая платформа) мне по душе. Только модифицируйте его до компилябельного состояния.

S>Это не код, это способ задания поверхностей в рамках некоторого DSL. string.Replace как раз модифицирует его до компилябельного состояния. Предлагаю не заморачиваться на конкретном синтаксисе, а сделать любой удобный, но с тем чтобы на нем можно было описать аналогичный набор поверхностей.

Компилябельность мне нужна для себя. Чтобы я мог на своём железе собрать оба варианта и померять скорость. Ибо твоё железо явно от моего отличается, и замеры по отдельности бессмысленны. Поэтому, чтобы не заморачиваться с рисованием картинок и предлагаю писать в массив. А шаг установить одинаковых для обоих вариантов.
kalsarikännit
Re[35]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 19.05.09 10:44
Оценка:
Здравствуйте, IID, Вы писали:

IID>Философствование насчёт практики — это выше по треду, когда коробочные продукты просили .NETовские показать. И пришли к выводу что практика это всё-таки С++. (VladD2 даже ввёл атрибут "тиражируемый" для С++ софта). Хотя у каждого "практика" может иметь собственный смысл.


IID>В любом случае, мне рассуждения в таком ключе не интересны. Было желание увидеть "волшебный" .NET код, обгоняющий C++. А в итоге скатились на банальщину. И ещё раз подтвердили тот факт что С++ таки уделывает .NET по скорости.


Да, в идеальном мире, где время, человеко-часы, персональный скилл программистов — величины безграничные, а платформа только одна.

К сожалению (для вас), мы живем в вовсе не таком идеальном мире.
Re[35]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.05.09 10:44
Оценка:
Здравствуйте, IID, Вы писали:

IID>Здравствуйте, gandjustas, Вы писали:


G>>Если не рассматривать способ получения этого кода, то такие рассуждения не нужны.

G>>Это сродни тому что на ассемблере можно написать программу которая будет быстрее любой программы на любом языке.

IID>Именно! Поэтому изначальная фраза, про то что С++ не может оказаться быстрее — глупость.

А кто такое говорил?

IID> Иными словами C++ всегда может работать НЕ МЕДЛЕНЕЕ дотнета.

Не всегда, за счет динамической кодогенерации прога на .NET может работать быстрее аналогичной прогри на C++.

А вообще второе твое утверждение не эквивалентно первому, изучай логику.

IID>Любопытно другое — на С++ можно написать код, который как не пыжься, на дотнете с одинаковой производительностью не повторить. (md5 например)

Только это будет не C++, а голый С. Все фичи, которые тут обсасываются сторонниками С++ идут лесом.

G>>Тольео практика этот тезис не подтверждает.


IID>Философствование насчёт практики — это выше по треду, когда коробочные продукты просили .NETовские показать. И пришли к выводу что практика это всё-таки С++. (VladD2 даже ввёл атрибут "тиражируемый" для С++ софта). Хотя у каждого "практика" может иметь собственный смысл.

Почитай еще раз тему, очень много объяснений почему тиражируемый софт на С++ делается.
IID>В любом случае, мне рассуждения в таком ключе не интересны. Было желание увидеть "волшебный" .NET код, обгоняющий C++. А в итоге скатились на банальщину. И ещё раз подтвердили тот факт что С++ таки уделывает .NET по скорости.
Re[37]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 19.05.09 10:50
Оценка:
Здравствуйте, IID, Вы писали:

IID>Компилябельность мне нужна для себя. Чтобы я мог на своём железе собрать оба варианта и померять скорость. Ибо твоё железо явно от моего отличается, и замеры по отдельности бессмысленны. Поэтому, чтобы не заморачиваться с рисованием картинок и предлагаю писать в массив. А шаг установить одинаковых для обоих вариантов.


Компилябельность конкретного синтаксиса есть (после Replace-а). А вот чтобы в массив загнать — придется малость подкрутить. Что не обещаю сделать сегодня.

Если не секрет, что собрался сравнивать? Интерпретацию?
Re[37]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 19.05.09 11:09
Оценка:
Здравствуйте, IID, Вы писали:

IID>Ну вот давай возьмём некоторый конкретный выхлоп этой кодогенерации, перепишем на С++, и удивимся, что он работает быстрее.


Вона чего?
Нет, пари отменяется.
Re[38]: Работа - с чего начать: С++ или С#?
От: IID Россия  
Дата: 19.05.09 11:11
Оценка:
Здравствуйте, samius, Вы писали:

S>Если не секрет, что собрался сравнивать? Интерпретацию?


Нет конечно C++ вариант соберу Intel C++ Compiler 11.0.072, померяю скорость. Результаты, ключи компиляции и EXE выложу куда-нибудь. C# буду собирать VS2008 (вроде бы SP1, но не уверен). Ключи компиляции, версия CLR/языка, любые другие особенности сборки — как ты сам скажешь. Результаты тоже опубликую.
kalsarikännit
Re[38]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 19.05.09 11:13
Оценка:
Здравствуйте, criosray, Вы писали:

C>Откройте документацию по xUnit.NET, откройте документацию по RhinoMocks и почитайте. Заниматься восполнением пробелов в Вашем образовании не намерен


Т.е. обсуждать на форуме эти возможности ты не в состоянии? Так я и думал.

V>>Не надоело рефлексировать и показывать в очередной раз свой поверхностный взгляд? Все твои вызовы мокков ради ассертов, собственно и сделаны. И хоть они теперь не в фас, а в профиль — они были и есть цель любого автоматического теста (не обязательно юнит...)

C>"Все твои вызовы мокков ради ассертов, собственно и сделаны" — это напоминает генератор цепей Маркова. Взять два умных слова, и связать их между собой связующими. Получается билеберда, но звучит вроде как умно для стороннего человека.

Не смотря на выделенное ключевое слово, ты не понял, о чем речь. Хоть честно признался, что для тебя это билеберда.

C>Так вот, ликбез: мокинг выполняется с целью изолировать тестируемый объект от внешних зависимостей.


Странно, а я думал, что лет 40 до этого эту ф-ию выполняли заглушки... Или они нужны были для "чего-то другого"?
Блин, ты как только проснулся, что-то увидел, проникся и стал "вещать"... В отрыве от предыстории и сравнения различных способов достичь аналогичных целей ты будешь оставаться в своей роли проповедника хари кришны. А если будешь готов поговорить более предметно, надеюсь поймешь, что за деревьями потерял лес.


C>Что означает, что ожидается, что будет вызван databaseManager.BeginTransaction(), а потом в любом порядке будут вызваны Withdraw и Deposit.


И что сказать хотел? Ты ведь примитивизм какой-то приводишь... Который, кстати на АОП куда как прикольней выглядит, и не требует проверки на 4 после 2*2.


C>Ассерты и моки не цель. Это средство и ключевой механизм реализации юнит тестов.


Опять ошибка, это ср-во автоматизации тестирования в первую очередь. Интеграционному и регрессионному тестированию так же помогают и заглушки и изоляция и весь суповой набор и используются те же ср-ва автоматизации, наподобии xUnit.

C>При чем тесты ни коим образом не захламляют код. Все тесты находятся в отдельной сборке, которая "видит" (и только она одна) внутренности тестируемых сборок.


Это более чем не принципиально. Мы вот делим тестирующие сборки на "пояса безопасности", так удобнее (знаешь что это?). В общем, по-прежнему разговор ни о чем.


V>>Любую динамическую среду/заглушки, которые генерят переменный по насыщенности траффик или сообщения с разной задержкой и произвольным наполнением. Фишка в том, что реальных задержек-то и нет, текущее время эмулируется, но тестирующая последовательность слишком длинная, чтобы записывать её ручками, она генерируется программой. А таких последовательностей/программ у меня — мама не горюй.


C>Еще один ликбез: описанное Вами не является модульными тестами. Это т.н. integration tests. При чем ничего невозможного в реализации этого нет — описанное реализуется элементарно в .NET.


Ты наверно плохо прочитал описанное Мною, тестируется работоспособность ровно одного юнита.
Ты попался в ту же ловушку, как и большинство, ратующих за строгую изоляцию юнит-тестов от интеграционных, не понимая сути вещей. Ответь здесь
Автор: vdimas
Дата: 19.05.09
насчет использования классов фреймворка в процессе юнит-тестирования. Гена тебе разжевал и практически в рот положил то, что должен был понять сам давно, но ты отмахнулся и поскакал дальше.


V>>Далее, обмен сложными структурами данных заглушки и тестируемого объекта, у объекта приличное пространство состояний, на что заглушка должна грамотно реагировать, т.е. приличная иногда логика на if-ах и case-ах.

C>Элементарно средствами RhinoMocks.

Во-первых, мне гораздо больше по душе TypeMock, по сравнению с которым рино курит, во вторых даже на нем это не элементарно.

V>>В декларативном синтаксисе мокков это выглядит как удаление гландов через Ж, и чем осмысленнее логика — тем более глубокое погружение в эту Ж. А если процедура внешняя, то это лишняя тестирующая сущность и все такое.


C>Демагогия.


C>Выглядит преотлично. На много лучше, чем то, что у вас есть (а точнее нет) в unmanaged C++. lambda выражения и fluent interface дают прекрасную читабельность.



C>
C>Expect.Call(file.Read(null, 0, 0))
C>      .Constraints(Property.Value("Length", 4096), Is.Equal(0), Is.GreaterThan(0) && Is.LessThan(4096)); 
C>


Как раз в С++ можно поинтересней синтаксис придумать для такого примера, и даже на проперти не через тектовый токен сослаться (что сакс)... Проблема-то там не в этом, а в бинарной совместимости. Тут уже написал по этой теме (последние 3 абзаца): http://www.rsdn.ru/Forum/message/3395444.1.aspx
Автор: vdimas
Дата: 19.05.09


V>>А теперь смотри что получается: автомоками удобно пользоваться для оформления относительно несложных тестов, где внешние условия и реакцию на них вполне можно описать декларативно и синтаксис все еще не будет раздражать.

C>Модульные или unit тесты ОБЯЗАНЫ быть несложными. В этом их СУТЬ.

Беда-беда... Ты же сам где-то правильно говорил, что есть модульные тесты, а теперь несешь отсебятину. Тесты должны быть в первую очередь адекватны задаче и коду, а сложные/несложные — разговор в пользу бедных. Ты еще начни тут вещать, что "код тоже всегда простой", сразу можно будет пожизненно в сайтостроители оформлять.

V>>Ах да, чуть не забыл... разумеется без них практически никак, если у кого-то был неудержимый понос на Ынтерфейсы в период дизайна. Собственно для них в первую очередь оно и есть.

C>Нет, не для них. Вам не надоело ламерствовать?

Развлекаюсь, пока мне интересно. Например, ты опять нихрена не понял. Когда упоминают тучи интерфейсов, то имеют ввиду сильную связанность дизайна. А теперь прочитай твои собственные обрывки, где ты говорил для чего, по-твоему, нужны моки. И кто теперь ламер?
Re[39]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 19.05.09 11:13
Оценка:
Здравствуйте, IID, Вы писали:

IID>Здравствуйте, samius, Вы писали:


S>>Если не секрет, что собрался сравнивать? Интерпретацию?


IID>Нет конечно C++ вариант соберу Intel C++ Compiler 11.0.072, померяю скорость. Результаты, ключи компиляции и EXE выложу куда-нибудь. C# буду собирать VS2008 (вроде бы SP1, но не уверен). Ключи компиляции, версия CLR/языка, любые другие особенности сборки — как ты сам скажешь. Результаты тоже опубликую.


Это не решение задачи.
Re[40]: Работа - с чего начать: С++ или С#?
От: IID Россия  
Дата: 19.05.09 11:24
Оценка:
Здравствуйте, samius, Вы писали:

S>Здравствуйте, IID, Вы писали:


IID>>Здравствуйте, samius, Вы писали:


S>>>Если не секрет, что собрался сравнивать? Интерпретацию?


IID>>Нет конечно C++ вариант соберу Intel C++ Compiler 11.0.072, померяю скорость. Результаты, ключи компиляции и EXE выложу куда-нибудь. C# буду собирать VS2008 (вроде бы SP1, но не уверен). Ключи компиляции, версия CLR/языка, любые другие особенности сборки — как ты сам скажешь. Результаты тоже опубликую.


S>Это не решение задачи.


С точки зрения оценки производительности — нормально. Если я буду рендерить картинку сгенерированным .NET кодом час, а плюсовым — пару минут этого более чем достаточно. Как приду домой — замеряю.
kalsarikännit
Re[41]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 19.05.09 11:34
Оценка:
Здравствуйте, IID, Вы писали:

IID>Здравствуйте, samius, Вы писали:


S>>Это не решение задачи.


IID>С точки зрения оценки производительности — нормально. Если я буду рендерить картинку сгенерированным .NET кодом час, а плюсовым — пару минут этого более чем достаточно. Как приду домой — замеряю.


Задача не в том чтобы картинку срендерить, а в том, чтобы предоставить интерактивный рендерер/считалку, который позволяет изменять описание поверхностей в рантайме.
То что ты соберешь под Intel C++ Compiler 11.0.072, меня не волнует, пока ты не включить его в свою программу.
Re[38]: Работа - с чего начать: С++ или С#?
От: IID Россия  
Дата: 19.05.09 12:21
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>>А кто такое говорил?


IID>>ты говорил =) вот здесь
Автор: gandjustas
Дата: 18.03.09
:

IID>>

G>>>Самообман — думать что C++ всегда быстрее.

G>Ну тупи. "Не всегда быстрее" = "иногда медленее". Сам себе что-то придумываешь, а потом непонятно кому доказываешь.

Примера этого "иногда медленее" я так и не увидел, между прочим.

G>В итоге по-русски можно написать "сществуют программы, для которых реализация на С++ окажется не самой быстрой", что совсем по-русски звучит как "иногда программы на С++ медленее", а не то что ты придумал.


Ой как хорошо. Т.к. мы рассуждаем о .NET-е, то ОЧЕНЬ хочется посмотреть на такую .NET программу, для которой реализация на C++ окажется не самой быстрой. И не заваливайся в сторону "всё другие языки vs C++", мы готоврим только о .NET vs C++.
kalsarikännit
Re[38]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 19.05.09 12:26
Оценка:
g> В итоге по-русски можно написать "сществуют программы, для которых реализация на С++ окажется не самой быстрой", что совсем по-русски звучит как "иногда программы на С++ медленее", а не то что ты придумал.


Кстати, а есть таки примеры, где это так? Вроде, где-то в КСВ приводили примеры, я сейчас не найду
avalon 1.0rc1 rev 239, zlib 1.2.3


dmitriid.comGitHubLinkedIn
Re[38]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 19.05.09 12:33
Оценка:
g> В итоге по-русски можно написать "сществуют программы, для которых реализация на С++ окажется не самой быстрой", что совсем по-русски звучит как "иногда программы на С++ медленее", а не то что ты придумал.


Кстати, а есть таки примеры, где это так? Вроде, где-то в КСВ приводили примеры, я сейчас не найду
avalon 1.0rc1 rev 239, zlib 1.2.3


dmitriid.comGitHubLinkedIn
Re[39]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.05.09 12:39
Оценка:
Здравствуйте, IID, Вы писали:

IID>Здравствуйте, gandjustas, Вы писали:


G>>>>А кто такое говорил?


IID>>>ты говорил =) вот здесь
Автор: gandjustas
Дата: 18.03.09
:

IID>>>

G>>>>Самообман — думать что C++ всегда быстрее.

G>>Ну тупи. "Не всегда быстрее" = "иногда медленее". Сам себе что-то придумываешь, а потом непонятно кому доказываешь.
IID>Примера этого "иногда медленее" я так и не увидел, между прочим.
Я привел пример в этой теме. Чистая синтетика, о которой ты так мечтаешь.

G>>В итоге по-русски можно написать "сществуют программы, для которых реализация на С++ окажется не самой быстрой", что совсем по-русски звучит как "иногда программы на С++ медленее", а не то что ты придумал.


IID>Ой как хорошо. Т.к. мы рассуждаем о .NET-е, то ОЧЕНЬ хочется посмотреть на такую .NET программу, для которой реализация на C++ окажется не самой быстрой. И не заваливайся в сторону "всё другие языки vs C++", мы готоврим только о .NET vs C++.


Третий раз говорю. Ключевое слово: кодогенерация.
Re[35]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.09 12:54
Оценка:
Здравствуйте, IID, Вы писали:

IID>Из конкретики — о увеличичении скорости написания кода (могу согласиться). Остальное — вода, зависящая от кучи факторов. Совершенно непонятно, почему код С++ лишается возможности быть качественным, иметь продуманный дизайн, хорошие алгоритмы. арианта.


Он не лишается. Просто добиться того же качества значительно дороже.
Собственно ассемблер дает еще больший простор для оптимизаций и потенциально на нем можно написать более быстрый софт. Но это еще дорожа (причем очень существенно). Посему даже такие богатые компании как MS и IBM не пользуются им.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[31]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 19.05.09 12:58
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Я уже не первый раз вижу это мнение, но не могу понять мотивы, может объяснишь? Наилучшие по оптимизации компиляторы — это С++, и они умеют коомпилировать С-код. Вот смысл мне не пользоваться возможностями более высокоуровневого языка, если у мня все-равно будет использован компилятор, который прекрасно компилит оба языка. Смотри: в чистом С ссылочный тип не строго типизирован, нет инлайна, нет инициализации по месту, недоступна ОО-декомпозиция (а в этом миксере участвует около десятка классов, и кое-какая шаблонность есть, правда без претензий на МП) и т.д и т.п. Поэтому поинт не понятен совершенно, по мне С++ в стиле "С с классами" все равно гораздо мощнее С. Я бы советовал ровно наоборот, там где можно, вместо С использовать С++.


Если меня память не подводит, он утверждал что применение шаблонов тормозит скорость выполнения
Нужно разобрать угил.
Re[6]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.09 12:59
Оценка:
Здравствуйте, Anton Batenev, Вы писали:

AB>Вот тут все про моно да про моно. Но хоть бы кто-нибудь показал мастер-класс на оном, а то складывается впечатление, что его защитники видели его только на картинках, а те, кто его пользовал, молчат, дабы не было стыдно.


Что ты хочешь увидеть?

Компилятор Nemerle параллельно живет под двумя рантаймами: Mono и .Net. Можешь загрузить и скомпилировать. Это подойдет для "просмотра"?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[36]: Работа - с чего начать: С++ или С#?
От: FR  
Дата: 19.05.09 13:10
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Собственно ассемблер дает еще больший простор для оптимизаций и потенциально на нем можно написать более быстрый софт. Но это еще дорожа (причем очень существенно). Посему даже такие богатые компании как MS и IBM не пользуются им.


Ассемблер сейчас дает меньший простор, кроме нескольких узких случаев, и даже для них удобнее править выхлоп сишного компилятора.
К тому же ассемблер средство другого класса, трудоемкость разработки на нем (даже учитывая чудеса макроассемблеров) на порядок ниже чем на C++. Шарп и С++ по трудоемкости разработки в одном классе.
Re[7]: Работа - с чего начать: С++ или С#?
От: Anton Batenev Россия https://github.com/abbat
Дата: 19.05.09 13:13
Оценка:
Здравствуйте, VladD2, Вы писали:

VD> Что ты хочешь увидеть?


Мастер-класс, я же написал

VD> Компилятор Nemerle параллельно живет под двумя рантаймами: Mono и .Net. Можешь загрузить и скомпилировать. Это подойдет для "просмотра"?


Nemerle — это тот же моно, только в профиль. Но, почему-то, развивать с тобой дискуссию в этом направлении у меня нет никакого желания. Откланиваюсь заранее.
avalon 1.0rc1 rev 244, zlib 1.2.3
Re[27]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.09 13:13
Оценка:
Здравствуйте, IID, Вы писали:

IID>Можно пример программы на .NET, которую невозможно будет обогнать программой на С++ ?


Вопрос в принципе не корректен, так как язык сам по себе не может быть быстрее или медленнее. Скажем Борлондовские компиляторы С++ в большинстве случаев порождают код более медленный чем MS .Net.

Но вот тебе забавный пример в тему:
http://tirania.org/blog/archive/2008/Nov-03.html

Ну, а главное, что есть софт который в условиях ограниченных ресурсов вообще нельзя реализовать на С++ (костьми ляжешь).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[33]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.05.09 13:14
Оценка:
Здравствуйте, FR, Вы писали:

FR>Здравствуйте, gandjustas, Вы писали:



G>>Я имею ввиду не использование компилятора С, а неиспользование возможностей C++ — классов, шаблонов, динамической памяти и прочего.

G>>Для числомолотилок оно и не нужно.

FR>Шаблоны и классы нужны, позволяют получить более шустрый код чем чистый си.


Пример?
Re[28]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 19.05.09 13:18
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Ну, а главное, что есть софт который в условиях ограниченных ресурсов вообще нельзя реализовать на С++ (костьми ляжешь).

Оно же верно и для шарпа, поэтому я на него так и не перешёл
Игры, кроссплатформенные приложения, некоторые виды миддлеваре
Нужно разобрать угил.
Re[27]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.09 13:19
Оценка:
Здравствуйте, IID, Вы писали:

IID>P.S.: подсказка: сам CLR написан на C/С++, и скорость выполнения .NET кода это, в определённом смысле, скорость выполнения некоторой С++ программы. Которую всегда можно, как минимум, не замедлить.


Замечательная логика! Точнее ее полное отсутствие.

Из этой предпосылки можно сделать вывод, что если написать компилятор, скажем, С на Руби, то получаемые программы будут иметь "в определенном смысле" (не знаю что за этим скрывается) скорость Руби (т.е. будут тормозными).

Бред? Несомненно! Но это твой бред .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[29]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.09 13:20
Оценка:
Здравствуйте, IID, Вы писали:

IID>Отвечу в этом месте обоим: JIT связан по рукам и ногам временными ограничениям. У С++ компилятора свободы (времени) гораздо больше. Насколько я понимаю, кода никто не приведёт, и можно засчитывать слив ?


А чем связан NGEN? (погугли прежде чем отвечать).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 19.05.09 13:21
Оценка:
Здравствуйте, Anton Batenev, Вы писали:

VD>> Компилятор Nemerle параллельно живет под двумя рантаймами: Mono и .Net. Можешь загрузить и скомпилировать. Это подойдет для "просмотра"?

AB>Nemerle — это тот же моно, только в профиль. Но, почему-то, развивать с тобой дискуссию в этом направлении у меня нет никакого желания. Откланиваюсь заранее.
Не, ну это как-то не хорошо с твоей стороны. Получается ты просто игнорируешь реальные примеры. Зачем тогда спрашивать
Re[28]: Работа - с чего начать: С++ или С#?
От: FR  
Дата: 19.05.09 13:24
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Но вот тебе забавный пример в тему:

VD>http://tirania.org/blog/archive/2008/Nov-03.html

VD>Ну, а главное, что есть софт который в условиях ограниченных ресурсов вообще нельзя реализовать на С++ (костьми ляжешь).


Неубедительно учитывая горячую любовь игроделов к интеловскому компилятору, который подобные вещи хорошо векторизует, плюс не менее горячую любовь к интрисикам тех игроделов которые не любят интеловский компилятор
Re[35]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.05.09 13:27
Оценка:
Здравствуйте, FR, Вы писали:

FR>Здравствуйте, gandjustas, Вы писали:


FR>>>Шаблоны и классы нужны, позволяют получить более шустрый код чем чистый си.

G>>Пример?
FR>std::sort vs qsort
Как шаблоны как compile-time кодогенерация действительно хорошо работает. Я там образом оптимизировал библиотеку для нейронных сетей на крусовую.
В принципе runtime кодогенерация позволяет даже больше, но с большими усилиями.

А классы каким образом позволяют получить более быстрый код, на примере числомолотилки типа md5?
Re[34]: Работа - с чего начать: С++ или С#?
От: IID Россия  
Дата: 19.05.09 13:32
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, IID, Вы писали:


IID>>Не уводите тему в сторону. Мы сейчас рассуждаем только о скорости получившегося кода.


VD>А тебе о скорости получаемых приложений. Она определяется не только, да и не столько скоростью выполняемого кода сколько качеством и скоростными характеристиками используемых алгоритмов.


Возьмём два абсолютно идентичных алгоритма. Что теперь у нас со скоростью ?
kalsarikännit
Re[8]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.09 13:59
Оценка:
Здравствуйте, Anton Batenev, Вы писали:

VD>> Что ты хочешь увидеть?


AB>Мастер-класс, я же написал


Это типа попрограммировать на публике чтобы все рты по открывали?

VD>> Компилятор Nemerle параллельно живет под двумя рантаймами: Mono и .Net. Можешь загрузить и скомпилировать. Это подойдет для "просмотра"?


AB>Nemerle — это тот же моно, только в профиль. Но, почему-то, развивать с тобой дискуссию в этом направлении у меня нет никакого желания.


А что развивать-то? Ты сморизил чушь. К Моно он отношения не имеет... кроме того, что под ним может работать.

AB>Откланиваюсь заранее.


Да, давно пора. Слив, с твоей стороны, уже произошел. Что еще обсуждать?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 19.05.09 14:16
Оценка:
Здравствуйте, criosray, Вы писали:

C>Не тратьте время. Они все-равно будут верить только в то, во что хотят верить. Переубедить их сможет только жизнь.

А как же трофеи?
Re[38]: Работа - с чего начать: С++ или С#?
От: FR  
Дата: 19.05.09 14:22
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, FR, Вы писали:


FR>>Ассемблер сейчас дает меньший простор, кроме нескольких узких случаев, и даже для них удобнее править выхлоп сишного компилятора.


VD>Это чушь. По той же логике, что предъявляют фанаты С++ ассемблер как раз дает больше возможностей для оптимизаций. Например, самые новые инструкции можно заюзать и т.п. Когда там компиляторы до них подтянутся.


Логика таже только ступенька на порядок выше.

FR>>К тому же ассемблер средство другого класса, трудоемкость разработки на нем (даже учитывая чудеса макроассемблеров) на порядок ниже чем на C++.


VD>О том я и говорил. Именно трудоемкость. То есть приципиально повышения производительности добиться конечно можно, но если сравнить затраты и получаемый выхлоп мало кого это заинтересует.


FR>>Шарп и С++ по трудоемкости разработки в одном классе.


VD>Это чушь. Трудоемкость на С++ выше очень значительно. Разница не такая огромная как в сравнении С++ и ассемблера, но тоже очень велика. А если учесть, что есть языки сильно мощнее C#, то она уже становится очень значительной. При этом с точки зрения скорости, для большинства задач разница как раз не велика (если вообще есть).


Разница принципиальная между ассемблером и ЯВУ это порядок, внутри майнстримовых языков в лучшем случае разы.

VD>Посему если у тебя много бабла (проект высоко рентабельный), то С++ может быть подходящим, так как увеличение трудоемкости окупается конкретными преимуществами — меньшими требованиями к ресурсам компьютера, а значит расширением базы аудитории. Если же проект низкотиражный или вообще штучный, то разработка на С++ — это чистейшей воды идиотизм и бездарная трата ресурсов.


Зависит еще от размеров проекта, его сферы применения и квалификации исполнителей.
Re[36]: Работа - с чего начать: С++ или С#?
От: FR  
Дата: 19.05.09 14:28
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Подлог! Это разные алгоритмы.


Да ладно меряли уже не раз, даже если писать шаблоный qsort один в один с сишным плюсовый все-равно выигрывает, за счет агрессивного инлайнинга.

VD>Кстати, на пример C vs. C++ можно можно спроецировать все сказанное о C++ vs. C#. Ведь на С всегда можно написать код не медленнее чем на С++. Проблема только в трудоемкости.


Можно, и кстати не мало пишут, но опять таки разница между C++ и Си тоже не так велика, хотя и больше чем между С++ и шарпом.
Re[41]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 19.05.09 14:40
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>А уж разница в скорости разработки конечного продукта вообще становится малоактуальна по сравнению с другими факторами.

Скажи это заказчикам.
Re[38]: Работа - с чего начать: С++ или С#?
От: FR  
Дата: 19.05.09 14:43
Оценка:
Здравствуйте, VladD2, Вы писали:


FR>>Функторы в виде классов лучше инлайнятся чем свободные функции. Хотя современные компиляторы уже и одиночные функции инлайнить умеют, но функторы все-равно позволяют большую гибкость не теряя в скорости.


VD>Махровый бред!

VD>Не потрудишься его обосновать?

Влад ты слишком давно не писал на C++
Re[42]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 19.05.09 14:48
Оценка:
Здравствуйте, samius, Вы писали:

NBN>>А уж разница в скорости разработки конечного продукта вообще становится малоактуальна по сравнению с другими факторами.

S>Скажи это заказчикам.
Нормальным заказчикам мелкие программерские дрязги вообще пофигу.
Нужно разобрать угил.
Re[43]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 19.05.09 14:49
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>Здравствуйте, samius, Вы писали:


NBN>>>А уж разница в скорости разработки конечного продукта вообще становится малоактуальна по сравнению с другими факторами.

S>>Скажи это заказчикам.
NBN>Нормальным заказчикам мелкие программерские дрязги вообще пофигу.
я не про дрязги, а про скорость разработки.
Re[39]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.09 14:54
Оценка:
Здравствуйте, FR, Вы писали:

FR>Влад ты слишком давно не писал на C++


Он что с тех пор изменился?

ЗЫ

Хотелось бы все же услышать обоснование.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[31]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.09 14:56
Оценка:
Здравствуйте, FR, Вы писали:

FR>Здравствуйте, VladD2, Вы писали:


FR>>>Неубедительно учитывая горячую любовь игроделов к интеловскому компилятору, который подобные вещи хорошо векторизует, плюс не менее горячую любовь к интрисикам тех игроделов которые не любят интеловский компилятор


VD>>Кстати, рассуждения о любви подкреплены какой-то статистикой или как всегда высасывание из пальца?


FR>Влад ты перестал пить коньяк и бить жену по утрам?


Что вопрос о статистике некорректен? Я же прошу ответить "да" или "нет". Я прошу ссылки на информацию о том какие игры (особенно топовых) скомпилированы с использованием каких компиляторов?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[32]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 19.05.09 15:02
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Я имею ввиду не использование компилятора С, а неиспользование возможностей C++ — классов, шаблонов, динамической памяти и прочего.

G>Для числомолотилок оно и не нужно.

Во-первых, ты так и не объяснил мотивы, во-вторых, без нормального инлайна любая числомолотилка отсосет. Вот возьми класс complex, не представляю себе код для него без переопределённых инлайн операций. Вызывать что-ли ф-ии типа complex_add_double(arg1, arg2)? Это будет уже не числомолотилка, а тормозилка.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[24]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 19.05.09 15:02
Оценка:
Здравствуйте, gandjustas, Вы писали:

V>>Ты еще забыл кодеки, мультимедиа, реалтайм протоколы и т.д. И еще забыл, что последние года 4 тактовая частота процов практически не растет, а обсуждаемого скачка оптимизации JIT-а при переходе на 3.0 версию не было ВООБЩЕ


G>Ну да, всего-то научились инлайнить вызовы со структурами, а также ускорили работу GC, несмотря на то что версия CLR не поменялась.


Угу, версия метаданых не изменилась, а на самом деле, и либы подшаманили нехило (и не только в приватной реализации, местами в публичных интерфейсах), и рантайм подкрутили. Согласен, GC стал более шустр, заметно что теперь он практически незаметен.

G>С учетом этих ускорений код на .NET, который проигрывал плюсовому в 1,5-2 раза стал выигрывать у плюсовго по скорости.

G>И это даже бех перекомпиляции программ.

Это от сценариев зависит, там, где была нагрузка на GC, общая производительность действительно выросла. Лично я ожидал оптимизаций по доступу к массивам, тем более, что о возможностях подобной оптимизации JIT-компилятора тогда не говорил только ленивый, однако никаких изменений в этом плане не было, поэтому на числомолотилках C# продолжает сосать.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[40]: Работа - с чего начать: С++ или С#?
От: FR  
Дата: 19.05.09 15:07
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Кто измерял этот порядок?


Это да сильно субъективно.

FR>>Разница принципиальная между ассемблером и ЯВУ это порядок, внутри майнстримовых языков в лучшем случае разы.


VD>Между С++ и теми же Немерле или Хаскель тот же порядок. Конечно если всеми тремя инструментами хорошо владеть.


В общем да приближается, хотя по моему все таки чуть меньше.

VD>С другой стороны это уже сближение позиций. Разница уже заключается только в оценке степени превосходства в уровне и отстования в скорости. Так?


Так оно всегда только в этом было.
Просто сейчас у меня нет старого пыла отстаивать С++ да и у тебя C# не в фаворитах
Ну и следует учесть что когда мы ругались C# (еще 1.x) был сильно слабее современного.

FR>>Зависит еще от размеров проекта, его сферы применения и квалификации исполнителей.


VD>От размеров конечно зависит. Чем больше проект, тем менее рентабельно реализовывать его на С++.


Угу, до опреденных размеров, у монстров уже язык мало что значит.

VD>От сферы не зависит. По крайней мере я эту зависимость не ощущаю. Квалификация вообще показатель отдельный. Сравнивать нужно только при условии, что квалификация идентична. Иначе к затратам нужно прибавлять затраты на обучение или формирование новой команды разработчиков.


От сферы сильно зависит, про драйверы и ядерные ректоры не будем, но коробочный софт что мелкий (шараварки) что крупный до сих пор выгоднее делать на нативных языках.
Квалификация для C++ более важна, так как порог вхождения достаточно высок.
Re[45]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 19.05.09 15:08
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>Суммарная скорость разработки крайне мало зависит от выбранного высокоуровневого языка.


Перл!
Re[46]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 19.05.09 15:09
Оценка:
Здравствуйте, criosray, Вы писали:

NBN>>Суммарная скорость разработки крайне мало зависит от выбранного высокоуровневого языка.


C>Перл!


Релайф, сынок Подрастёшь — сам поймёшь.
Нужно разобрать угил.
Re[10]: Работа - с чего начать: С++ или С#?
От: Qbit86 Кипр
Дата: 19.05.09 15:18
Оценка:
Здравствуйте, samius, Вы писали:

S>По поводу сливов...

S>Их где-то меняют на деньги, или это просто трофей на стену в туалете?
S>я просто не ф теме.

Можно нарисовать очередную звёздочку на борту.
Глаза у меня добрые, но рубашка — смирительная!
Re[32]: Работа - с чего начать: С++ или С#?
От: FR  
Дата: 19.05.09 15:20
Оценка:
Здравствуйте, VladD2, Вы писали:

FR>>Влад ты перестал пить коньяк и бить жену по утрам?


VD>Что вопрос о статистике некорректен? Я же прошу ответить "да" или "нет". Я прошу ссылки на информацию о том какие игры (особенно топовых) скомпилированы с использованием каких компиляторов?


Влад я уже несколько лет не занимаюсь играми, но на любом игродельческом форуме интеловский компилятор был одной из любимых и постоянных тем. Также как и любая оптимизация, использование интрисиков это вообще норма.
Re[40]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 19.05.09 15:24
Оценка:
Здравствуйте, criosray, Вы писали:

ГВ>>Ух ты! А я-то думал, что мокинг нужен для отслеживания последовательности внешних вызовов.

C>Неправильно думали. Мокинг нужен в первую очередь для изоляции тестируемого объекта. Чтоб сделать возможной эту изоляцию возможной необходимо симулировать поведение внешних зависимостей тестируемого объекта.

Так. Обратимся к первоисточникам:

Mocks [...] objects pre-programmed with expectations which form a specification of the calls they are expected to receive.

Моки — запрограммированы на ожидание вызовов в соответствии с определённой спецификацией. (Буквально: формируют спецификацию своими ожиданиями)


Где сказано, что мок обязательно изолирует тестируемый объект от окружающих?

C>>>Ассерты это всего-лишь предикат, который по-определению всегда true.


C>>>Assert.Equals(10, someObj.SomeIntProperty);

C>>>Assert.IsTrue(someObj.SomeBoolProperty);
C>>>и т.д. и т.п.

ГВ>>А по-твоему, Expect — это не тот же самый Assert в профиль? Assert — утверждение, Expect — утверждение о некотором ожидаемом событии. Тот же Assert, только специализированный.

C>К чему вопрос?

К тому, что Expect так или иначе должен превратиться в Assert. Сделает это кодогенератор или ещё что-то — не важно.

C>>>Ассерты и моки не цель. Это средство и ключевой механизм реализации юнит тестов.

ГВ>>Любое автоматическое тестирование сводится к проверке последовательности утверждений. Иначе оно совсем не нужно. Дальше только вариации способов записи этих утверждений.
C>Само собою. Весь этот спор о том, что на С++ нет даже близко сравнимых по удобству инструментов для тестирования.

Ну, если сводить "удобство тестирования" к автоматической генерации пустых объектов — соглашусь. А если не сводить, то тут очень сильно бабка надвое сказала.

ГВ>>vdimas прав в том смысле, что если логика достаточно сложная, то и полные тесты достаточно трудно записывать. Вот тебе простейший пример (псевдокод):

C>И что тут сложного?

А я и не говорю, что это сложно. Я о сопоставлении сложности теста и тестируемого кода.

C> Элементраный тест (в условиях дотнет) с условно установленными моками.


Мммм... Дотнет его сам сгенерирует? Полностью? А за пивом он сгоняет?

[...]

ГВ>>То есть нужно проверить, что указанные сообщения ушли по заданным каналам, и только после определённого входного сообщения, и только в указанной последовательности, а потом ещё и желательно выдать осмысленное сообщение об ошибке.


C>Вы опять же путаете модульные тесты с интеграционными тестами. Модульные тесты не тестируют работу сети/жесткого диска/клавиатуры/мыши и т.д. Модульные тесты не тестируют взаимодействие подсистем. ит.д. и т.д. Короче, разберитесь в вопросе для начала, ок?


Даже если говорить о приведённом примере, то где здесь тестирование сети/жёсткого диска/...? Тестируется соответствие реального и предполагаемого протокола работы (form a specification, итить!). Или ты думаешь, что под sendMessage имеется в виду send в сокет?

А потом, модульным тестированием называется тестирование модулей. Что именно мы так называем — зависит от структуры программы. Запросто может быть тестирование модуля по имени "модуль сетевого интерфейса", который запросто может предполагать одновременный запуск тестов на нескольких машинах и в то же время другой модульный тест может проверять одну-единственную функцию. Если TDD предполагает, что это неправильное употребление термина "модульное тестирование", то тем хуже для самого TDD.

C>>>Еще один ликбез: описанное Вами не является модульными тестами. Это т.н. integration tests.

ГВ>>Это зависит от того, что в данной конфигурации полагается модулем, а что — интеграцией. Поскольку структура любой сложной программы иерархическая, то модуль на одном уровне — это сборная конструкция на другом.
C>Нет, не зависит. RTFM, как говорится.

Какой M нужно R?

ГВ>>И неужто будет проще, чем аналогичная заглушка? Это если учесть, то заглушка реализуется в естественном синтаксисе, а мок — перехватом вызовов. Второе будет почти гарантированно сложнее.

C>С этой глупостью я даже спорить не стану.

Не спорь.

V>>>>В декларативном синтаксисе мокков это выглядит как удаление гландов через Ж, и чем осмысленнее логика — тем более глубокое погружение в эту Ж. А если процедура внешняя, то это лишняя тестирующая сущность и все такое.

C>>>Демагогия.
ГВ>>Боюсь, что реальность. Хотя я в курсе, разумеется, что самая надёжная основа своей позиции — искусное отрицание очевидного.
C>Можете продолжать бояться. Как все-таки доберетесь до RTFM`а, то поймете, что я был прав.

О! Я прозрю истину. Ну дай же мне волшебный мануал! Я буду его R, R и ещё раз R.

ГВ>>Угу. А ещё программы должны быть простыми. Это и называется искать решение сложных проблем простыми средствами, сиречь — руководствоваться лозунгами.


C>Да, тестируемые участки кода должны быть простыми. В этом суть дизайна под названием Test Driven Development. Используя алгоритм write failing test -> write code -> until test succeed -> refactor ... добиваемся прекрасного качества кода с соблюдением всех правил современного программирования: DRY, SRP, и т.д. Если Ваш код на столько сложный и запутанный, что Вы не можете написать серию простых тестов для него, значит Ваш код — плохой. Вот Вам и пища для размышлений.


А если пользователь поставил задачу, которая не имеет простого решения? Значит, я не смогу написать простой тест и не смогу руководствоваться современными правилами программирования?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[33]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.09 16:19
Оценка:
Здравствуйте, FR, Вы писали:

FR>Влад я уже несколько лет не занимаюсь играми, но на любом игродельческом форуме интеловский компилятор был одной из любимых и постоянных тем. Также как и любая оптимизация, использование интрисиков это вообще норма.


Мне кажется надо отделять треп на форумах и реальное применение.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[29]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.09 16:20
Оценка:
Здравствуйте, hattab, Вы писали:

H>Ну, если исполняющей средой для таким образом скомпилированных приложений будет выступать Руби, то таки да, логично, что они будут тормозами.


Уважаемый, ты точно правильно понимаешь значение слова компилятор?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[34]: Работа - с чего начать: С++ или С#?
От: FR  
Дата: 19.05.09 16:29
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, FR, Вы писали:


FR>>Влад я уже несколько лет не занимаюсь играми, но на любом игродельческом форуме интеловский компилятор был одной из любимых и постоянных тем. Также как и любая оптимизация, использование интрисиков это вообще норма.


VD>Мне кажется надо отделять треп на форумах и реальное применение.


Так я вполне разделяю, лень просто статистику искать, из этого трепа вполне ясно что Intel'овский широко используется игроделами, мы не использовали, но интрисики и тотальную оптимизацию применяли широко, так что и у нас не было бы массива double в std::vector
Re[29]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 19.05.09 16:52
Оценка:
Здравствуйте, hattab, Вы писали:

VD>>Из этой предпосылки можно сделать вывод, что если написать компилятор, скажем, С на Руби, то получаемые программы будут иметь "в определенном смысле" (не знаю что за этим скрывается) скорость Руби (т.е. будут тормозными).


H>Ну, если исполняющей средой для таким образом скомпилированных приложений будет выступать Руби, то таки да, логично, что они будут тормозами.


О! Еще один перл в коллекцию. Второй за сегодня. Спасибо!
Re[25]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 19.05.09 17:10
Оценка:
Здравствуйте, vdimas, Вы писали:

G>>С учетом этих ускорений код на .NET, который проигрывал плюсовому в 1,5-2 раза стал выигрывать у плюсовго по скорости.

G>>И это даже бех перекомпиляции программ.

V>Это от сценариев зависит, там, где была нагрузка на GC, общая производительность действительно выросла. Лично я ожидал оптимизаций по доступу к массивам, тем более, что о возможностях подобной оптимизации JIT-компилятора тогда не говорил только ленивый, однако никаких изменений в этом плане не было, поэтому на числомолотилках C# продолжает сосать.

Проснись, оптимизация дотупа к массивам давно сущесвует.

В цикле такого вида JIT выкидывает проверки границ
for(int i=0; i<array.Length; i++)
{
}


Если нужет произвольный быстрый доступ, то есть unsafe.

Что касает числомолотилок, то в самых тупых линейных случаях (как md5 например), при использовании uncheked, .NET будет проигрывать на проценты. Что в реальной программе погоды не сделает.
Кроме того такие случаи элементарно оптимизируются заменой на Сшный код или распараллеливаются (в .NET далется очень легко).

ЗЫ. Я ещ не упоминул такие оптимизации, которые делает mono. См Mono.Simd
Re[30]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 19.05.09 17:28
Оценка:
Здравствуйте, samius, Вы писали:

VD>>>Из этой предпосылки можно сделать вывод, что если написать компилятор, скажем, С на Руби, то получаемые программы будут иметь "в определенном смысле" (не знаю что за этим скрывается) скорость Руби (т.е. будут тормозными).


H>>Ну, если исполняющей средой для таким образом скомпилированных приложений будет выступать Руби, то таки да, логично, что они будут тормозами.

S>Из чего сделано выделенное предположение?

Это не предположение, это этакая параллель... .NET core библиотеки-то насквозь C++'сные.

S>Что мешает компилятору на Руби выдавать под LLVM, или сразу в машинные инструкции?


Ничего не мешает.
Re[30]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 19.05.09 17:28
Оценка:
Здравствуйте, VladD2, Вы писали:

H>>Ну, если исполняющей средой для таким образом скомпилированных приложений будет выступать Руби, то таки да, логично, что они будут тормозами.


VD>Уважаемый, ты точно правильно понимаешь значение слова компилятор?


Не сомневайся. Но вот о чем следует подумать, так это о том, что исполняющийся код будет работать не в вакууме. Или вы тут копья ломаете по поводу перформанса кода вида "x + y"?
Re[31]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.09 17:49
Оценка:
Здравствуйте, hattab, Вы писали:

H>Это не предположение, это этакая параллель... .NET core библиотеки-то насквозь C++'сные.


Да, ну? А почему 99% из них декомпилируется Рефлектором?

S>>Что мешает компилятору на Руби выдавать под LLVM, или сразу в машинные инструкции?


H>Ничего не мешает.


Ну, так ты понял, что спорол чушь?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[31]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.05.09 17:52
Оценка:
Здравствуйте, hattab, Вы писали:

H>Не сомневайся. Но вот о чем следует подумать, так это о том, что исполняющийся код будет работать не в вакууме.


Думаю понятие вакуума к коду вообще не применимо. Код будет исполняться процессором.
В остальном есть такие вещи как бутсрапинг. Слышал про такое?

H>Или вы тут копья ломаете по поводу перформанса кода вида "x + y"?


Да, в общем-то любой код состоит из ряда примитивных операций.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[32]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 19.05.09 18:43
Оценка:
Здравствуйте, VladD2, Вы писали:

H>>Это не предположение, это этакая параллель... .NET core библиотеки-то насквозь C++'сные.


VD>Да, ну? А почему 99% из них декомпилируется Рефлектором?


mscoree.dll — Microsoft .NET Runtime Execution Engine
mscorwks.dll — Microsoft .NET Runtime Common Language Runtime — WorkStation
normalization.dll — Microsoft Unicode Normalization

Вполне себе нативные, корковые библиотеки...

S>>>Что мешает компилятору на Руби выдавать под LLVM, или сразу в машинные инструкции?


H>>Ничего не мешает.


VD>Ну, так ты понял, что спорол чушь?


Вовсе не чушь, если учесть означенное "если".
Re[32]: Работа - с чего начать: С++ или С#?
От: hattab  
Дата: 19.05.09 18:43
Оценка:
Здравствуйте, VladD2, Вы писали:

H>>Не сомневайся. Но вот о чем следует подумать, так это о том, что исполняющийся код будет работать не в вакууме.


VD>Думаю понятие вакуума к коду вообще не применимо. Код будет исполняться процессором.


Да. А еще он будет исполняться в окружении нативных модулей и с их участием.

VD>В остальном есть такие вещи как бутсрапинг. Слышал про такое?


Ага. Используется?

H>>Или вы тут копья ломаете по поводу перформанса кода вида "x + y"?


VD>Да, в общем-то любой код состоит из ряда примитивных операций.


Так вы тут эти примитивные операции чтоль обсуждаете?
Re[10]: Работа - с чего начать: С++ или С#?
От: mrTwister Россия  
Дата: 19.05.09 18:52
Оценка:
Здравствуйте, Anton Batenev, Вы писали:

AB>Думаю, что их как раз есть. Они-то и плюются на моно. А вот защищают его те, кто на нем даже hello word не сотворил, ИМХО. Вот этим защитникам я сначала и предлагаю попробовать написать на нем что-то вменяемое и, если не произойдет промывания желудка, защищать его, так сказать, уже во всеоружии. Моя уверенность строится на том, что после C# я пытался подходить к этому снаряду под линуксом уже раз не помню сколько — с каждым разом Qt мне нравится все больше и больше по сравнению с ним.


Ну я учавствовал в паре довольно крупных проектов на моно, дальше что?
лэт ми спик фром май харт
Re[11]: Работа - с чего начать: С++ или С#?
От: Anton Batenev Россия https://github.com/abbat
Дата: 19.05.09 21:07
Оценка:
Здравствуйте, mrTwister, Вы писали:

T> Ну я учавствовал в паре довольно крупных проектов на моно, дальше что?


А дальше барабанная дробь, вероятно, и фанфары
avalon 1.0rc1 rev 244, zlib 1.2.3
Re[12]: Работа - с чего начать: С++ или С#?
От: _d_m_  
Дата: 20.05.09 04:16
Оценка:
Здравствуйте, criosray, Вы писали:

C>Не тратьте время. Они все-равно будут верить только в то, во что хотят верить. Переубедить их сможет только жизнь.


Или смерть.
Re[43]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 20.05.09 07:53
Оценка:
NBN> VD>От уровня языка зависят и проектные решения
NBN> Чушь.

Действительно чушь — что использовать. Готовый gen_server из поставки языка или написать свой аналог за 3-4 дня (Erlang) или искать специалиста, который аналог этого будет полгода лабать на С++
avalon 1.0rc1 rev 239, zlib 1.2.3


dmitriid.comGitHubLinkedIn
Re[45]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 20.05.09 10:36
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:


V>>Если предположить, что ты общался с запрограммированным искуственным интеллектом, то этим вопросом ты разрушил его электронный моск.


ГВ>Рассмотрю предложение на вакансию Тьюринг-тестера.


Детский сад, вторая группа.
Re[26]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 20.05.09 11:26
Оценка:
Здравствуйте, criosray, Вы писали:

Похоже, ты смылся, поэтому поставлю точку сам.

C>>>Пример классического ламеризма. Может стоило бы для начала что-то узнать о предмете обсуждения? Например, что версия CLR все еще 2.0.х, а не 3.0


Да, версия стандарта 2.0.x (т.к. формат метаданных не поменялся), а название стандарта ты озвучил. Тем не менее, сам рантайм и .Net-сборки от второго фреймворка обновлялись с выходом каждого последующего или их SP. Для интереса, вот список изменений только лишь для 2.0SP1 http://support.microsoft.com/kb/945757, остальное найти так же не трудно, если есть желание.

То, что ты совершенно не в курсе об постоянных обновлении рантайма и .Net сборок и о характере этих обновлений — это понятно, но поверь, абсолютно не смертельно. Что непонятно, так это твоя реакция: неужели настолько смертельным было то, что ты предположил? И что будешь делать сейчас? Посыпать голову пеплом?


C>Вы даже не знаете разницы между фреймворком и CLR. Продолжайте писать в таком же духе — это становится очень забавно.


Идиотская манера, надо сказать, выдумать нечто, приписать оппоненту и с треском разбить. В предыдущих сообщениях слово "CLR" я не употреблял и не собирался, т.к. речь шла об обещанных изменениях в рантайме, приуроченных к выходу некоего очередного фреймворка. В общем... потренируйся понимать прочитанное.


C>Ламеризм это когда человек делает много громких заявлений, имея очень слабое представление о предмете обсуждения. То, что мы и наблюдаем в Вашем случае.


Кто тут имеет слабое представление, понятно-то давно. Мне лишь непонятна эта тяга везде найти ламеров вокруг себя. Так все плохо?
Re[27]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 20.05.09 11:36
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Похоже, ты смылся, поэтому поставлю точку сам.


C>>>>Пример классического ламеризма. Может стоило бы для начала что-то узнать о предмете обсуждения? Например, что версия CLR все еще 2.0.х, а не 3.0


V>Да, версия стандарта 2.0.x (т.к. формат метаданных не поменялся), а название стандарта ты озвучил. Тем не менее, сам рантайм и .Net-сборки от второго фреймворка обновлялись с выходом каждого последующего или их SP. Для интереса, вот список изменений только лишь для 2.0SP1 http://support.microsoft.com/kb/945757, остальное найти так же не трудно, если есть желание.


Вам не надоело самого себя "опускать"? В который раз доказали, что Вы банально не понимаете разницы между фреймворком и CLR.

Ликбез: версия CLR не менялась со времен дотнет 2.0 — v2.0.50727.

Жду публичного признания своей неправоты, уважаемый.
Re[45]: Работа - с чего начать: С++ или С#?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 20.05.09 11:48
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>Суммарная скорость разработки крайне мало зависит от выбранного высокоуровневого языка.

И зачем тогда на 1С пишут? (возможностей то мало, но и их хватает большинству хватает)
и солнце б утром не вставало, когда бы не было меня
Re[27]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 20.05.09 12:08
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Да, версия стандарта 2.0.x (т.к. формат метаданных не поменялся), а название стандарта ты озвучил. Тем не менее, сам рантайм и .Net-сборки от второго фреймворка обновлялись с выходом каждого последующего или их SP. Для интереса, вот список изменений только лишь для 2.0SP1 http://support.microsoft.com/kb/945757, остальное найти так же не трудно, если есть желание.

Ну т.е. в принципе, при наличии двух сервис-паков, Photoshop CS2 можно смело назвать Photoshop CS4???
Re[10]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 20.05.09 12:25
Оценка:
Здравствуйте, Anton Batenev, Вы писали:


AB> * А пока что я вижу фаната-Влада, который носится с Nemerle как с писаной торбой;

AB> * Я вижу сайт RSDN, который в течении полутора (или уже больше?) месяцев периодически или ложится или выдает HTTP-500 или тормозит безбожно;
AB> * Я вижу насквозь сишный юниксойдный nginx, который поставили для латания брешей, с которыми не справляется IIS и начинка, и который бог знает сколько пытались настроить (хоть спасибо за сжатие — всего каких-то 740 килобайт сишного кода решили проблему, которую так долго не могли решить на IIS и Co);
AB> * Я вижу лежащий уже с несколько недель поиск, который мало того, что лежит, так еще находится на стороннем ресурсе;
AB> * Я вижу AndrewVK, который отдувается за всю команду и боится трогать код сайта от греха подальше (и в чем-то я его понимаю);
AB> * Я вижу в форумах сообщения о том, что "безопасный" код сайта боятся открывать потому что в нем много дыр;
AB> * Я вижу неработающие ссылки, которые отваливаются по таймауту и некому и нечему (и нечем, судя по всему) просматривать логи;
AB> * Я не вижу Янус... впрочем, это уже другая история.

Перепишите на С++ и мы посмотрим как Вы запоете.
Re[38]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 20.05.09 13:22
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Ты о чем? Исходники md5 отлично собираются голым C компилятором.

Сишная имплементация MD5 собирается сишным компилятором.
С++сная не собирается
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[30]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 20.05.09 13:22
Оценка:
Здравствуйте, VladD2, Вы писали:

NBN>>Игры, кроссплатформенные приложения, некоторые виды миддлеваре

VD>Бредишь?
Отнюдь.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[20]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 20.05.09 13:22
Оценка:
Здравствуйте, criosray, Вы писали:

C>А необходимость возникает только тогда, когда продакшн билд начинает течь, как дырявое решето?

И часто такое у вас?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[39]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.05.09 15:21
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, gandjustas, Вы писали:


G>>Ты о чем? Исходники md5 отлично собираются голым C компилятором.

CC>Сишная имплементация MD5 собирается сишным компилятором.
CC>С++сная не собирается
Отсюда брал — http://www.md5hashing.com/c++/
Re[11]: Работа - с чего начать: С++ или С#?
От: Anton Batenev Россия https://github.com/abbat
Дата: 20.05.09 16:48
Оценка:
Здравствуйте, criosray, Вы писали:

C> Перепишите на С++ и мы посмотрим как Вы запоете.


Казалось бы, при чем здесь С++? :\
Re[28]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 20.05.09 17:00
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>Ну т.е. в принципе, при наличии двух сервис-паков, Photoshop CS2 можно смело назвать Photoshop CS4???


Откуда такой вывод?
Re[31]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 20.05.09 17:44
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, gandjustas, Вы писали:


V>В общем ладно, может тут и моя вина, что не описал контекст, поэтому не понимаю твоего сопротивления очевидным, на мой взгляд, вещам.


V>В общем, сервер конференций, видео, VoIP и вся лабуда типа шаринга приложений и прочие примочки.

Все правильно, такой набор писать на дотнете — нужно быть на редкость упертым. Дотнет для таких вещей просто не предназначен.
Может быть оно конечно и можно выжать из дотнета требуемую производительность (это не утверждение), но стоить это будет дороже, чем разработка на C++.

Естественно, в таком контексте выбор очевиден. По крайней мере для высоконагруженных сервисов.
Re[28]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 20.05.09 18:59
Оценка:
Здравствуйте, criosray, Вы писали:

C>В который раз доказали, что Вы банально не понимаете разницы между фреймворком и CLR.


Цитаты?

C>Ликбез: версия CLR не менялась со времен дотнет 2.0 — v2.0.50727.


Офигенный ликбез, судя по обширности представленного материала.

Тогда встречный ликбез для тебя: рантайм и основные .Net сборки (mscorlib, System) постоянно обновлялись после выхода второго фреймворка (когда я говорю второй фреймворк, то это именно релиз Microsoft .Net Framework 2.0, который действительно 2.0.50727). Одни из самых заметных обновлений рантайма, пришедшее с .Net 3.0 — это доработка GC, самое заметное изменение сборок версии 2.0.50727, пришедшее с .Net 3.5 — это интерфейс класса Socket из System.dll. А так по мелочи доработок была куча (начни от ссылки в пред. посте), от внутренних кишок System.Data, до дублирования и переноса по неймспейсам объявлений наиболее популярных интеропных COM структур и интерфейсов.

В принципе, я тебе уже говорил, но мне не лень напомнить: перед выходом третьего фремворка тут шли обсуждения, какие будут изменения в рантайме (не в версии, а реализации, еще не допер разницу?). И некоторые из них были таки произведены: джиттер стал более агрессивно инлайнить, GC стал вовсе незаметен на глаз, но кое-что из обсуждаемого так и осталось без изменений, о чем я и упомянул... а ты развел такую вот непотребную бодягу.

C>Жду публичного признания своей неправоты, уважаемый.


Сформулируй для начала эту неправоту.

И раз ты так усердно цепляешься за версию CLR, то вот тебе домашнее задание: что есть версия CLR? Рекомендую выполнить его тщательно, дабы этот позор тугодумия не тянуть еще на кучу постов.
Re[29]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 20.05.09 19:17
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Тогда встречный ликбез для тебя: рантайм и основные .Net сборки (mscorlib, System) постоянно обновлялись после выхода второго фреймворка (когда я говорю второй фреймворк, то это именно релиз Microsoft .Net Framework 2.0, который действительно 2.0.50727). Одни из самых заметных обновлений рантайма, пришедшее с .Net 3.0 — это доработка GC, самое заметное изменение сборок версии 2.0.50727, пришедшее с .Net 3.5 — это интерфейс класса Socket из System.dll. А так по мелочи доработок была куча (начни от ссылки в пред. посте), от внутренних кишок System.Data, до дублирования и переноса по неймспейсам объявлений наиболее популярных интеропных COM структур и интерфейсов.

Короче это. Не сошлись вы в том, что один понял 3.0 как версию CLR, другой говорил о CLR, который шел вместе с 3-м FW. Вот и всё, рабочие моменты Кстати, я пару раз на собеседованиях слышал, что некоторые так и не перешли на третий FW, потому что ждут полноценно нового рантайма.
Re[32]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 20.05.09 19:18
Оценка:
Здравствуйте, samius, Вы писали:

S>Все правильно, такой набор писать на дотнете — нужно быть на редкость упертым. Дотнет для таких вещей просто не предназначен.

S>Может быть оно конечно и можно выжать из дотнета требуемую производительность (это не утверждение), но стоить это будет дороже, чем разработка на C++.

А у нас вовсе не целиком на C#. Все высокоуровневые операции — на .Net (там же сценарии по установке связи, редиректу, общение с менеджером и БД и куча всякой подобной хни). А вот на пути агрессивного потока данных лежит нейтив, и я здесь лишь объяснял, почему именно так.

S>Естественно, в таком контексте выбор очевиден. По крайней мере для высоконагруженных сервисов.


А сервис весьма разнороден по характеристикам своих составляющих. Например, видео серваком не обрабатывается, а только пересылается из канала в канал, и скорость показа 8-16 кадров в сек, почему бы не сделать тупую диспетчеризацию потока видео на .Net? То же самое с кучей других апплетов, типа шаринга приложений, общей доски, чата, голосований и т.д. Я уже молчу о задачах аутентификации пользователей, шедуллинга конференций и прочего, прочего, прочего. На С++ всё это можно было бы, разумеется, но не нужно.

Поэтому, основа системы — на дотнет, и прилично рядом кода на нейтив С++. В общем, я не зря говорю, что с интеропом здесь вряд ли кто больше меня возился.
Re[33]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 20.05.09 19:40
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Поэтому, основа системы — на дотнет, и прилично рядом кода на нейтив С++. В общем, я не зря говорю, что с интеропом здесь вряд ли кто больше меня возился.


У нас соотношение managed/native порядка 250/1. Интеропа почти нет. На плюсах написан только самый агрессивный алгоритм из тех что выполняются на клиентской машине в интерактивном режиме (устранение искажений дисторсии большого снимка порядка 40Мб). На дотнете кончилась фантазия по выдумыванию как его ускорить, тупое переписывание один в один на плюсы дало ускорение в 1.5 раза. Сервер же числорубит на дотнете.
Re[31]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 20.05.09 20:14
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, gandjustas, Вы писали:


V>В общем ладно, может тут и моя вина, что не описал контекст, поэтому не понимаю твоего сопротивления очевидным, на мой взгляд, вещам.


V>В общем, сервер конференций, видео, VoIP и вся лабуда типа шаринга приложений и прочие примочки. Основная реалтаймовая и одновременно нагрузочная вещь — это именно VoIP, остальное реалтаймом можно назвать лишь условно. Что есть VoIP: это 50 пакетов в секунду на абонента в одну только сторону, т.е. итого 100 пакетов на абонента. Железка должна держать их несколько сотен, желательно под тысячу. В общем, у меня такой сценарий, что я даже не могу позволить себе такую мелочь, как лишнее копирование данных и тем паче ни о каких 100тыс выделений буферов в секунду не может быть и речи.

В таком случае буферы надо вделять один раз на на абонента. А еще лучше сделать пул буферов.

G>>Как это "априори неизвестен"? покажи мне API которые возвращают "незивестно сколько данных".

V>Оно не возвращает, оно читает из сокета в наш предвыделенный буфер. После прочтения возвращает кол-во прочитанных байт. В пакете заголовок и собственно сами данные с неким смещением (зависит от заголовка). Данные обрабатываются прямо из этого буфера по указанной выше причине.
Так всетаки известно сколько данных.

G>>В таком случае надо большие буферы выделять в саом начале и кратковременно их пиннить. Известный рецепт.

V>Там в среднем 6 буферов на абонента, под миллион пинов в секунду — это даже на моей "сиротской" железке просто так выкинуть около 15% производительности.
Пины сами по себе производительность не сажают. Сажается она лишь потому что пины мешают работе GC. Если запиненные блоки попадают в нулевое поколение, то gc начинает работать неэффективно.

G>>Ну если это FIR-фильтрили что-то в том роде, то не думаю что накладные расходы доступ по индексу окажутся значимыми по сравнению с наложением фильтра.

V>Обычная там фильтрация, ФНЧ/ФВЧ, алгоритм рекурсивного фильтра примитивен — это просто вычисление многочленов z1*a1+z2*a2+z3*a3+..., zi — элементы последовательности, ai — константы. Думаешь, я тебе вру о том, что затраты на доступ к массиву сопоставимы с полезными вычислениями?
Так это и есть обычный FIR, надо будет тесты написать насколько хреново он работает в .NET.

G>>Еще раз перечитай что я писал. "уменьшить гранулярность блокировок" это как раз попытка гоняться за каждым.

V>Да почитал, почитал. Сейчас я тебе контекст обрисовал, ты и сам видишь, что дополнительно параллелить там нечего. Вся система асинхронная, по приходу UDP-пакета стоит задача максимально быстро его обработать и освободить тред для следующего. Кол-во таких VoIP-тредов сейчас в 4-6 раз больше, чем ядер, еще больше делать смысла нет, т.к. производительность больше не растет.
В вашем случае нужна система на базе асинхронных агентов, работающих с асинхронным IO.

G>>Ты лучше пересмотри свой взгляд на создание высоконагруженных систем. Например с либой типа CCR можно вообще без блокировок обходится при любом количестве входящих запросов

V>Прежде чем советовать что-либо пересмотреть, неплохо бы выяснить как оно сейчас есть... нет?
Не обязательно. Рецепт производства хороших hiload систем уже давно известен.

V>Чтобы два раза не ходить, скажу что по максимум и это у нас есть, кроме тех сценариев, для которых безблокировочные алгоритмы еще не придуманы. Если быть более точным — то некоторые существующие просто не всегда подходят, ввиду требований выделения динамической памяти для каждой порции данных.

Ну если выделенная память живет недолго, то в под .NET можно и выделять. Хотя это уже в конкретных случаях тестить надо.
Re[31]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 20.05.09 21:50
Оценка:
Здравствуйте, MxKazan, Вы писали:

V>>>Тогда встречный ликбез для тебя: рантайм и основные .Net сборки (mscorlib, System) постоянно обновлялись после выхода второго фреймворка (когда я говорю второй фреймворк, то это именно релиз Microsoft .Net Framework 2.0, который действительно 2.0.50727). Одни из самых заметных обновлений рантайма, пришедшее с .Net 3.0 — это доработка GC, самое заметное изменение сборок версии 2.0.50727, пришедшее с .Net 3.5 — это интерфейс класса Socket из System.dll. А так по мелочи доработок была куча (начни от ссылки в пред. посте), от внутренних кишок System.Data, до дублирования и переноса по неймспейсам объявлений наиболее популярных интеропных COM структур и интерфейсов.

MK>И для порядку, так сказать:
MK>
MK>из презенташки Микрософта по 2010-й Студии...

vdimas: Я все еще жду от Вас публичных извинений и признания неправоты...
Re[32]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 20.05.09 22:22
Оценка:
Здравствуйте, criosray, Вы писали:

C>vdimas: Я все еще жду от Вас публичных извинений и признания неправоты...


Тут: http://www.rsdn.ru/Forum/message/3398010.1.aspx
Автор: vdimas
Дата: 21.05.09
Re[31]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 20.05.09 22:42
Оценка:
Здравствуйте, vdimas, Вы писали:

MK>>- Изначально ты написал: "И еще забыл, что последние года 4 тактовая частота процов практически не растет, а обсуждаемого скачка оптимизации JIT-а при переходе на 3.0 версию не было ВООБЩЕ".

MK>>- На что получил ответ, что рантайм по прежнему 2.0, что он не менялся со времен второго дотНета, ну нету CLR 3.0 и всё.

V>А откуда взялось слово CLR? Почему ты решил, что речь о CLR, а не о .Net Framework, например?


Потому, что оптимизацией занимается именно CLR.
Re[32]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 20.05.09 23:32
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>>Как это "априори неизвестен"? покажи мне API которые возвращают "незивестно сколько данных".

V>>Оно не возвращает, оно читает из сокета в наш предвыделенный буфер. После прочтения возвращает кол-во прочитанных байт. В пакете заголовок и собственно сами данные с неким смещением (зависит от заголовка). Данные обрабатываются прямо из этого буфера по указанной выше причине.
G>Так всетаки известно сколько данных.

Ну да, залили в буфер и нам известно сколько в нем прочитанных байт, мы это кол-во в _buffLen и храним.
Я действительно так непонятно выражаться стал, что из предыдущего не понял?


G>Так это и есть обычный FIR, надо будет тесты написать насколько хреново он работает в .NET.


Разве рекурсивный фильтр это FIR? В том сообщении я характер вычислений привел, а не всё целиком. Хотя, это не суть, просто БИХ, ИМХО, более экономные по вычислениям и сами вычисления не зависят от отношения частот семплов и среза.

V>>Да почитал, почитал. Сейчас я тебе контекст обрисовал, ты и сам видишь, что дополнительно параллелить там нечего. Вся система асинхронная, по приходу UDP-пакета ...

G>В вашем случае нужна система на базе асинхронных агентов, работающих с асинхронным IO.

Все еще нужна, или я таки озвучил "асинхронно"?

G>Не обязательно. Рецепт производства хороших hiload систем уже давно известен.


РецептЫ. Много аспектов, разная их важность и влияние на конкретные сценарии. В общем, система постоянно оптимизируется и будет оптимизироваться, но прямо все и сразу невозможно, поэтому по всем правилам военного исскуства сделаны пока лишь самые критические вещи.

G>Ну если выделенная память живет недолго, то в под .NET можно и выделять. Хотя это уже в конкретных случаях тестить надо.


Тестили многократно, сотни тысяч раз в секунду выделять нельзя, GC начинает мешать работе.
Re[26]: Работа - с чего начать: С++ или С#?
От: landerhigh Пират  
Дата: 21.05.09 03:23
Оценка:
Здравствуйте, criosray, Вы писали:

C>На детские болезни программистов и прочие грабли я налетал примерно 11 лет тому назад, когда работал С/С++ программистом. Так что Ваш комментарий, молодой человек, несколько "мимо тазика".

Так и работал, C/C++ программистом? А это ничего, что такого языка нет и не было?
Re[34]: Работа - с чего начать: С++ или С#?
От: minorlogic Украина  
Дата: 21.05.09 05:06
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, FR, Вы писали:


FR>>Шаблоны и классы нужны, позволяют получить более шустрый код чем чистый си.


G>Пример?


http://www.boost.org/doc/libs/1_35_0/libs/numeric/ublas/doc/index.htm
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[27]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 21.05.09 07:14
Оценка:
Здравствуйте, landerhigh, Вы писали:


C>>На детские болезни программистов и прочие грабли я налетал примерно 11 лет тому назад, когда работал С/С++ программистом. Так что Ваш комментарий, молодой человек, несколько "мимо тазика".

L>Так и работал, C/C++ программистом? А это ничего, что такого языка нет и не было?

В каком месте при чтении Вашего ответа следует начинать смеяться?
Re[32]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 21.05.09 08:32
Оценка:
Здравствуйте, criosray, Вы писали:

V>>А откуда взялось слово CLR? Почему ты решил, что речь о CLR, а не о .Net Framework, например?


C>Потому, что оптимизацией занимается именно CLR.


Потому что на твой ламерский взгляд, первые цифры номера версии составили нечто сакральное.

Вот за тебя твое домашнее задание: эти цифры всего лишь означают привязку к спецификации на байткод/метаинформацию и прочее. И эта спецификация действительно не менялась, но это не значит, что реализация этой спецификации не менялась.

А тут в тебе говорит чванство и лень, раз тебе сложно открыть эксплорер и убедиться наконец самому в том, что CLR еще как менялся, не смотря на изменность первых 3-х цифр в номере версии.
Re[32]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 21.05.09 08:32
Оценка:
Здравствуйте, MxKazan, Вы писали:

V>>А откуда взялось слово CLR? Почему ты решил, что речь о CLR, а не о .Net Framework, например?

MK>Видимо, потому что ты говорил о JIT-е, который таки является частью именно CLR.

А CLR у нас теперь отдельно от фреймворков идёт?
Re[33]: Работа - с чего начать: С++ или С#?
От: anton_t Россия  
Дата: 21.05.09 09:00
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, criosray, Вы писали:


V>>>А откуда взялось слово CLR? Почему ты решил, что речь о CLR, а не о .Net Framework, например?


C>>Потому, что оптимизацией занимается именно CLR.


V>Потому что на твой ламерский взгляд, первые цифры номера версии составили нечто сакральное.


V>Вот за тебя твое домашнее задание: эти цифры всего лишь означают привязку к спецификации на байткод/метаинформацию и прочее. И эта спецификация действительно не менялась, но это не значит, что реализация этой спецификации не менялась.


V>А тут в тебе говорит чванство и лень, раз тебе сложно открыть эксплорер и убедиться наконец самому в том, что CLR еще как менялся, не смотря на изменность первых 3-х цифр в номере версии.


Чем правее самая старшая изменённая цифра в версии, тем меньше фич добавляется и тем мельче фичи. Причём чаще всего изменение младших двух цифр включет в себя в основном багфиксы. И ты хочешь, что бы при изменении самомй младшей цифры версии дотнета майкрософт начал переколбашивать jit?
Re[33]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 21.05.09 09:20
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, MxKazan, Вы писали:


V>>>А откуда взялось слово CLR? Почему ты решил, что речь о CLR, а не о .Net Framework, например?

MK>>Видимо, потому что ты говорил о JIT-е, который таки является частью именно CLR.
V>А CLR у нас теперь отдельно от фреймворков идёт?
А что это меняет? Ну слушай, уже разобрались что к чему, давай не будем пускаться в демагогию.
Re[33]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 21.05.09 11:08
Оценка:
Здравствуйте, criosray, Вы писали:

C>Классический юношеский максимализм на лицо...


Ты с топика-то не съезжай. Я тебе тут давеча вопрос про тестирование задал. Ответ будет?
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[34]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 21.05.09 11:14
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, criosray, Вы писали:


C>>Человек привселюдно опозорился...


V>Угу, а во рту "сладко, сладко, сладко".

V>Не в состоянии обосновать своих утверждений — расписался в бессилии.

В бессилии? Действительно — я в бессилии переубедить Вас, т.к. Вы отвергаете простой и понятный даже трех летнему ФАКТ:



Вообщем, как принято тут говорить "слив засчитан".
Re[34]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 21.05.09 11:25
Оценка:
Здравствуйте, anton_t, Вы писали:


_>Чем правее самая старшая изменённая цифра в версии, тем меньше фич добавляется и тем мельче фичи. Причём чаще всего изменение младших двух цифр включет в себя в основном багфиксы. И ты хочешь, что бы при изменении самомй младшей цифры версии дотнета майкрософт начал переколбашивать jit?


Его и переколбашивали, просто не в том направлении, в каком лично мне надо было, но это фигня, и фигня потому, что это все внутренние кишки. Для этого дотнет и разрабатывался, чтобы отвязать программы от подробностей реализации рантайма. Спорящий со мной продемонстрировал непонимание этого момента.

Там еще фишка с этими тремя полями версии в том (если сам не обратил внимание), что они входят в строгое имя сборок, поэтому обновленные сборки ложатся аккурат вместо старых, чтобы те самые новые обновления работали для ваших старых программ.

Но вот что не фигня, и я приводил уже примеры — это изменения в публичных интерфейсах основных сборок, согласись, это уже малость посерьезнее. Например, поставили .Net 3.5 SP1, взяли класс Socket, там поиспользовали новые асинхронные методы, а потом понесли программу на Висту без указанного обновления, или там где стоит первоначальная версия .Net 2.0, а она даже не грузится той же версией CLR. (ничего, что я mscorlib и его зависимости в CLR сключил? спасибо)

Поэтому, в спецификациях требований к окружению такой программы надо писать не <CLR 2.0.х>, а <.Net 3.5 SP1>. Разницу ощутил?

На самом деле, пытаться отделять CLR от FW — это профанация, одно без другого не живет, да и смысла не имеет. А для чего был затеян весь сыр-бор сказал здесь
Автор: vdimas
Дата: 21.05.09
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[35]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 21.05.09 11:33
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, anton_t, Вы писали:


V>Но вот что не фигня, и я приводил уже примеры — это изменения в публичных интерфейсах основных сборок, согласись, это уже малость посерьезнее. Например, поставили .Net 3.5 SP1, взяли класс Socket, там поиспользовали новые асинхронные методы, а потом понесли программу на Висту без указанного обновления, или там где стоит первоначальная версия .Net 2.0, а она даже не грузится той же версией CLR. (ничего, что я mscorlib и его зависимости в CLR сключил? спасибо)


V>Поэтому, в спецификациях требований к окружению такой программы надо писать не <CLR 2.0.х>, а <.Net 3.5 SP1>. Разницу ощутил?

А как же multitargeting при разработке?
Скопиленное на платформе .Net3.5sp1 под 2.0 пойдет на 2.0 гарантированно? Или к 2.0 надо свои другие фиксы ставить?
Re[35]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 21.05.09 11:33
Оценка:
Здравствуйте, vdimas, Вы писали:

Короче, объясняю на пальцах:

1. Вы обвенили дотнет в том, что в новых фреймворках не ощутимо "обещанное улучшение оптимизации jit"
2. На что Вам ответили, что CLR со времен дотнет 2.0 НЕ менялся.
3. Вы начали доказывать: как же не менялся, когда выходили фреймворк 3.0, 3.5 и сервис паки!
4. Вам ответили, что CLR в них остался прежним, потому там и не могло появится каких-то новых "оптимизаций jit".
и в доказательство привели картинку, авторами которой являются сами МС
...

Теперь Вы пытаетесь перевести тему, оправдаться и как-то выкрутиться, не желая признать свою неправоту. Будьте мужчиной, в конце-то концов! Имейте смелость признать свою неправоту.
Re[35]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 21.05.09 11:39
Оценка:
Здравствуйте, criosray, Вы писали:


C>В бессилии? Действительно — я в бессилии переубедить Вас, т.к. Вы отвергаете простой и понятный даже трех летнему ФАКТ:


Ну ты или настолько непробиваем, или исскуссный манипулятор (в последнее верится с трудом). К счастью, известным форумным приемом это нивелируется: будь добр цитату или последовательность цитат, где я это опровергал.

Ибо пока что ты споришь не с тем, что я говорил, а с тем, что ты мне приписал.


C>Вообщем, как принято тут говорить "слив засчитан".


Серьезно? Слив — это уход от темы или исчезание из обсуждения после неудобных вопросов, оба приема ты уверенно демонстрируешь по нескольку раз в день. (времени не жалко?) В общем, на лицо отсутствие начальных навыков форумного общения, поэтому и подставляешься те самые несколько раз в день. Мне давно уже наплевать на суть нашего обсуждения, просто пока не лень показать, где ты слажал.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[4]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 21.05.09 12:14
Оценка:
Здравствуйте, Pepel, Вы писали:

P>Здравствуйте, gandjustas, Вы писали:


G>>Здравствуйте, Pepel, Вы писали:


P>>>весь пост не читал, только начало зацепил, вставлю свои 5 центов : тут чет про кросплатформенность много пишут там и прочий валюнтаризм .. мне кажется, дело в области применении задачи, наверное программу управления кардиодатчиком хирургического стола все же стоит писать на C++ ввиду сильного механизма проверок , а дрочилку отчетов овощной базы на рынке можно и на шарпах забомбить и она тож будет великолепна ..


G>>Сильных проверок чего?


P>типов проверок !!!! ЧЕГО ..

P> мощная статическая проверка типов ..это 0 который делает из 1 десятку

Вы хотите нам сказать, что C++ статически типизированный язык?
0 делает из 1 десятку чего?

Выражайтесь яснее, плиз!
Re[36]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 21.05.09 12:18
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, criosray, Вы писали:



C>>В бессилии? Действительно — я в бессилии переубедить Вас, т.к. Вы отвергаете простой и понятный даже трех летнему ФАКТ:


V>Ну ты или настолько непробиваем, или исскуссный манипулятор (в последнее верится с трудом). К счастью, известным форумным приемом это нивелируется: будь добр цитату или последовательность цитат, где я это опровергал.


V>Ибо пока что ты споришь не с тем, что я говорил, а с тем, что ты мне приписал.


Да ну? Серьезно?

А это чьи слова:

"И еще забыл, что последние года 4 тактовая частота процов практически не растет, а обсуждаемого скачка оптимизации JIT-а при переходе на 3.0 версию не было ВООБЩЕ"

"Да, версия стандарта 2.0.x (т.к. формат метаданных не поменялся), а название стандарта ты озвучил. Тем не менее, сам рантайм и .Net-сборки от второго фреймворка обновлялись с выходом каждого последующего или их SP. Для интереса, вот список изменений только лишь для 2.0SP1 http://support.microsoft.com/kb/945757, остальное найти так же не трудно, если есть желание.

То, что ты совершенно не в курсе об постоянных обновлении рантайма и .Net сборок и о характере этих обновлений — это понятно, но поверь, абсолютно не смертельно. Что непонятно, так это твоя реакция: неужели настолько смертельным было то, что ты предположил? И что будешь делать сейчас? Посыпать голову пеплом?"

а потом пошла конкретная демагогия в попытках замять тему:

"
Офигенный ликбез, судя по обширности представленного материала.

Тогда встречный ликбез для тебя: рантайм и основные .Net сборки (mscorlib, System) постоянно обновлялись после выхода второго фреймворка (когда я говорю второй фреймворк, то это именно релиз Microsoft .Net Framework 2.0, который действительно 2.0.50727). Одни из самых заметных обновлений рантайма, пришедшее с .Net 3.0 — это доработка GC, самое заметное изменение сборок версии 2.0.50727, пришедшее с .Net 3.5 — это интерфейс класса Socket из System.dll. А так по мелочи доработок была куча (начни от ссылки в пред. посте), от внутренних кишок System.Data, до дублирования и переноса по неймспейсам объявлений наиболее популярных интеропных COM структур и интерфейсов. "

Вы можете ответить какое отношения номера версий сборок имеют к CLR и JIT-оптимизациям??? Не можете. Потому что Вы банально "съхали с темы".

Re[5]: Работа - с чего начать: С++ или С#?
От: Pepel Беларусь  
Дата: 21.05.09 13:18
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Здравствуйте, Pepel, Вы писали:


P>>Здравствуйте, gandjustas, Вы писали:


G>>>Здравствуйте, Pepel, Вы писали:


P>>>>весь пост не читал, только начало зацепил, вставлю свои 5 центов : тут чет про кросплатформенность много пишут там и прочий валюнтаризм .. мне кажется, дело в области применении задачи, наверное программу управления кардиодатчиком хирургического стола все же стоит писать на C++ ввиду сильного механизма проверок , а дрочилку отчетов овощной базы на рынке можно и на шарпах забомбить и она тож будет великолепна ..


G>>>Сильных проверок чего?


P>>типов проверок !!!! ЧЕГО ..

P>> мощная статическая проверка типов ..это 0 который делает из 1 десятку

G>
G>A a;
G>B* b = (B*)((void*)&a)
G>

G>Где тут сильные проверки?

G>Лучше сразу напиши что был неправ иначе заклюют.


тут их нет конечно же, это пример сознательного обхода проверок, да, есть такой инструмент в С++, есть полноценные указатели и void*, совместимость с С и это здоровская вещь на самом деле ...

понимаешь.. как тебе объяснить .. "нож хорош для того, у кого он есть, и плох для того, у кого он в нужный момент не оказывается под рукой" .
Re[36]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 21.05.09 13:56
Оценка:
Здравствуйте, samius, Вы писали:

V>>Поэтому, в спецификациях требований к окружению такой программы надо писать не <CLR 2.0.х>, а <.Net 3.5 SP1>. Разницу ощутил?

S>А как же multitargeting при разработке?
S>Скопиленное на платформе .Net3.5sp1 под 2.0 пойдет на 2.0 гарантированно? Или к 2.0 надо свои другие фиксы ставить?

Именно привел пример, когда гарантированно не пойдет. Конкретные классы и методы:
Socket.AcceptSync(), Socket.ConnectSync(), и прочие xxxAsync() а так же сам класс SocketAsyncEventArgs.

Была еще куча мелких примеров, но мы не записывали, а просто написали в требованиях <MS .Net FW 3.5 SP1>.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[36]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 21.05.09 13:56
Оценка:
Здравствуйте, criosray, Вы писали:

C>Короче, объясняю на пальцах:


О, наконец-то! Можно ставить точку.

C>2. На что Вам ответили, что CLR со времен дотнет 2.0 НЕ менялся.

(загвоздка в том, что ты говорил про версию, более того, лишь про старшие её цифры, в этом суть, продолжаем)

C>4. Вам ответили, что CLR в них остался прежним, потому там и не могло появится каких-то новых "оптимизаций jit".


Вот наконец тот самый логический клей, спасибо. Хоть я и так понял, что ты хотел именно это сказать, и даже видел эмоциальные добавления к тому, что подразумевалось, но логика без явного озвучивания страдала, а этого я допустить не могу.

Итак, ты заблуждался и очень сильно. Твои прикладные программы привязаны к версии фреймворка, но сама позиция MS (а нам ее тут озвучивали MS MVP, которым я доверяю в этом вопросе), была в том, что рантайм будет развиваться с сохранением обратной совместимости, и он таки успешно развивался/развивается (оглядываясь назад).

Я тебе предлагал уже тупо взять эксплорер (!!!) — ты же можешь сравнить размер, даты и версии файлов, составляющих фреймворк, ты можешь взять Reflector или другой аналогичный тул... вобщем, в конце концов убедиться, что CLR изменялся. Более того, изменения джита со времен FW 2.0 происходили, просто ты не очень активно (судя по профайлу) участвовал в нашем форуме, и мог подробностей не знать. Ну дык, я вроде дал ссылку, откуда можно начать копать (будь у тебя интерес узнать, как обстоят дела на самом деле).

Но это всё мелочи, спорить я начал исключительно по причине того, что ты мне приписал нечто от балды. Спорить непосредственно с этим "нечто" было бы не столь увлекательно (ибо использую .Net с 2002-го года), поэтому я и заставил тебя определённо высказаться самому по этому вопросу, что ты и сделал п.2 и п.4, и более мне ничего от тебя не надо.

Повторюсь, не такие это уж важные знания, важнее знать другое — что наши прикладные программы остануться работоспособными при дальнейшем развии .Net. Такая фигня была бы простительна, если бы ты свое незнание не ставил как аргумент в доказательство ламерства коллеги.


C>и в доказательство привели картинку, авторами которой являются сами МС


Боже мой, какая красивая картинка. Ты из этих картинок предлагаешь "знания" черпать?
У нас тут целая серия issues была по причине несовместимостей фреймворков, так что сведения приходилось черпать из чуть более глубоких источников.

В принципе, я тебе эту картинку объяснил, но ты не понял: формат метаданных остался прежний, спецификации те же, старшие поля версий, участвующие в strong name сборок те же, поэтому старые твои программы могут ссылаться на обновленные сборки без проблем. (в этом состояло домашнее задание)

Итого: ты можешь остаться при своем мнении о неизменности реализации CLR, но будь добр, не требуй от меня согласиться с этим.


C>Теперь Вы пытаетесь перевести тему, оправдаться и как-то выкрутиться, не желая признать свою неправоту. Будьте мужчиной, в конце-то концов! Имейте смелость признать свою неправоту.


Расслабся, если я чего-то не знаю, то с удовольствием слушаю собеседника и всегда ему благодарен за его личное время, потраченное на мое образование. Рекомендую эту тактику как наиболее эффективную, чтобы твое форумное время не проходило бесполезно.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[37]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 21.05.09 14:28
Оценка:
Здравствуйте, criosray, Вы писали:


C>Вы можете ответить какое отношения номера версий сборок имеют к CLR и JIT-оптимизациям???


CLR без FW не существует и обратное тоже верно, CLR слишком сильно завязан не только на спецификацию метаинформации и систему типов, но и на сами конкретные типы из FW. И обновляться это может только в сборе.

ОК, конкретно джит — составляющая часть "механики" CLR, платформы исполнения, так же как и GC и система ресолвинга и загрузки сборок и еще куча другой требухи. По доходившим до нас сведениям и по результатам анализа результата джиттинга, мы видели, что джит-таки развивается. Субъективно я так же обратил внимание, что и GC стал практически не заметен на глаз (он тоже не может быть не завязан на джит). Поэтому и утверждаю, что CLR изменялся. А в исходном посте заметил, что среди прочих изменений не было кое-каких, обсуждаемых ранее на форуме и интересных мне по работе. Где тут криминал-то?


C>Не можете. Потому что Вы банально "съхали с темы".


Да ничего не съехал. Не споря с тем, что версия спецификации не поменялась (потому как и не утверждал подобного, это был сугубо твой закидон), продолжаю утверждать, что реализация этой спецификации менялась постоянно и вполне честно остаюсь при своём.

Короче, снова предлагаю ставить точку. Своё мнение ты, слава богу, наконец озвучил здесь
Автор: criosray
Дата: 21.05.09
(надо было сразу), и я с ним никоим образом не согласен (ответил там же). Обсуждать более нечего.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[4]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 21.05.09 14:31
Оценка:
P> P>>весь пост не читал, только начало зацепил, вставлю свои 5 центов : тут чет про кросплатформенность много пишут там и прочий валюнтаризм .. мне кажется, дело в области применении задачи, наверное программу управления кардиодатчиком хирургического стола все же стоит писать на C++ ввиду сильного механизма проверок , а дрочилку отчетов овощной базы на рынке можно и на шарпах забомбить и она тож будет великолепна ..

P> G>Сильных проверок чего?


P> типов проверок !!!! ЧЕГО ..

P> мощная статическая проверка типов ..это 0 который делает из 1 десятку

Нет в С++ мощной статической проверки типов. С++ — это слаботипизированый язык со статической типизацией
avalon 1.0rc1 rev 239, zlib 1.2.3


dmitriid.comGitHubLinkedIn
Re[38]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 21.05.09 14:43
Оценка:
Здравствуйте, samius, Вы писали:

S>Очевидно речь идет о методах Socket.AcceptAsync, Socket.ConnectAsync и т.п. Потому как об AcceptSync нет никаких упоминаний.


Да (проклятый copy&paste и спешка).

S>Эти новые методы были введены в

S>Supported in: 3.5, 3.0 SP1, 2.0 SP1
S>Т.е. разрабатывая под 3.0 SP1 и используя эти методы мы получаем бинарник, которому нужен 2.0 SP1 для запуска. Если мы не хотим терять совместимость с 2.0 без sp1, то не используем. И все дела.

Вот в том и прикол, что .Net 3.0 вышел раньше .Net 2.0 SP1, а если мы вели разработку на .Net 2.0 SP1, то получили бяку в Виста, которая идет с предустановленной .Net 3.0, и на которую .Net 2.0 SP1 не ставится никаким образом (если не ошибаюсь, туда и .Net 3.0 SP1 не ставится, не буду утверждать).

А что и как использовать — это сугубо технический вопрос, мы указали в требованиях .Net 3.5 и забыли.

S>Если можно конкретнее...


Не можно.
Было так: потрачено время на разработку классов, предоставляющих аналогичную ф-сть для сокетов для работы под .Net 3.0 и .Net 2.0 без SP, но потом выяснилась еще серия бяк (с сериализацией), и мы не стали заморачиваться и тупо проставили на висту 3.5 и забыли. Коль будет требование сделать нашу прогу под указанные предыдущие выпуски фреймворков, то будем копать глубже, разумеется, и обязательно поделюсь.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[38]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 21.05.09 14:48
Оценка:
s> V>Была еще куча мелких примеров, но мы не записывали, а просто написали в требованиях <MS .Net FW 3.5 SP1>.

s> ?

s> Если можно конкретнее...

Досатточно посотреть what's new: http://msdn.microsoft.com/en-us/library/bb332048.aspx
avalon 1.0rc1 rev 239, zlib 1.2.3


dmitriid.comGitHubLinkedIn
Re[39]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 21.05.09 14:54
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, samius, Вы писали:


S>>Очевидно речь идет о методах Socket.AcceptAsync, Socket.ConnectAsync и т.п. Потому как об AcceptSync нет никаких упоминаний.


V>Да (проклятый copy&paste и спешка).


S>>Эти новые методы были введены в

S>>Supported in: 3.5, 3.0 SP1, 2.0 SP1
S>>Т.е. разрабатывая под 3.0 SP1 и используя эти методы мы получаем бинарник, которому нужен 2.0 SP1 для запуска. Если мы не хотим терять совместимость с 2.0 без sp1, то не используем. И все дела.

V>Вот в том и прикол, что .Net 3.0 вышел раньше .Net 2.0 SP1, а если мы вели разработку на .Net 2.0 SP1, то получили бяку в Виста, которая идет с предустановленной .Net 3.0, и на которую .Net 2.0 SP1 не ставится никаким образом (если не ошибаюсь, туда и .Net 3.0 SP1 не ставится, не буду утверждать).

Если так — действительно бяка. Пока не напарывались, но теперь будем внимательны при использовании фич из SP1. Делаем продукт под 2.0.

V>Коль будет требование сделать нашу прогу под указанные предыдущие выпуски фреймворков, то будем копать глубже, разумеется, и обязательно поделюсь.

Если будет уж что-то интересное...


А по субъективным впечатлениям — мне тоже показалось, что инлайнинг джита стал агрессивнее после выхода 2.0. Но подтвердить ощущения не могу. Специально заряжать машину под это дело не стану уж. Хотя если представится случай сравнить, будет интересно попробовать.
Re[6]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 21.05.09 15:12
Оценка:
P> P>> мощная статическая проверка типов ..это 0 который делает из 1 десятку

P> M>Нет в С++ мощной статической проверки типов. С++ — это слаботипизированый язык со статической типизацией


P> вы гдет надергали каких т стереотипных лозунгов, спорить какт бесполезно


Не стереотипных. Суровая правда жизни


P> приговариваетесь к пожизненному чтению <The C++ Programming Language by Bjarne Stroustrup> с .. заменой на 3-х годичную установкe мелкософтовых патчей к MS.NET Framework



Ггг. Ты бы в руки ругой какой-нибудь, кроме С++ вообще бы взял


P> — будете на себя работать — С++ в руки


Гггг. Вот уж где стереотип так стереотип
avalon 1.0rc1 rev 239, zlib 1.2.3


dmitriid.comGitHubLinkedIn
Re[39]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 21.05.09 15:13
Оценка:
Здравствуйте, Mamut, Вы писали:

s>> V>Была еще куча мелких примеров, но мы не записывали, а просто написали в требованиях <MS .Net FW 3.5 SP1>.


s>> ?

s>> Если можно конкретнее...

M>Досатточно посотреть what's new: http://msdn.microsoft.com/en-us/library/bb332048.aspx


Действительно, часть изменений позиционируется как изменения в CLR, хотя некоторые из них имеют отношение только к FCL (типа HashSet).

Не совсем то, меня интересовало на что можно напороться разрабатывая под .net 2.0 в vs2008 студии со всеми сервис паками на дотнет. Для этого, по всей видимости, надо смотреть список изменений в .net 2.0 sp1. Только что заюзал неглядя один из новых конструкторов DynamicMethod Надо быть внимательнее.
Re[6]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 21.05.09 15:52
Оценка:
Здравствуйте, Pepel, Вы писали:

P>Здравствуйте, gandjustas, Вы писали:


G>>Здравствуйте, Pepel, Вы писали:


P>>>Здравствуйте, gandjustas, Вы писали:


G>>>>Здравствуйте, Pepel, Вы писали:


P>>>>>весь пост не читал, только начало зацепил, вставлю свои 5 центов : тут чет про кросплатформенность много пишут там и прочий валюнтаризм .. мне кажется, дело в области применении задачи, наверное программу управления кардиодатчиком хирургического стола все же стоит писать на C++ ввиду сильного механизма проверок , а дрочилку отчетов овощной базы на рынке можно и на шарпах забомбить и она тож будет великолепна ..


G>>>>Сильных проверок чего?


P>>>типов проверок !!!! ЧЕГО ..

P>>> мощная статическая проверка типов ..это 0 который делает из 1 десятку

G>>
G>>A a;
G>>B* b = (B*)((void*)&a)
G>>

G>>Где тут сильные проверки?

G>>Лучше сразу напиши что был неправ иначе заклюют.


P>тут их нет конечно же, это пример сознательного обхода проверок, да, есть такой инструмент в С++, есть полноценные указатели и void*, совместимость с С и это здоровская вещь на самом деле ...


P>понимаешь.. как тебе объяснить .. "нож хорош для того, у кого он есть, и плох для того, у кого он в нужный момент не оказывается под рукой" .


Не надо объяснять. Не такая уж сильная типизация как тебе кажется.
Пример с union_ами приводить?
Re[6]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 21.05.09 15:54
Оценка:
Здравствуйте, Pepel, Вы писали:

P>- будете на себя работать — С++ в руки

P>- на контору планируете идти — шарп

Много ли ты сам проектов потянул на плюсах?
Re[6]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 21.05.09 15:55
Оценка:
Здравствуйте, Pepel, Вы писали:


P>с delphi к слову начинайте

P>- будете на себя работать — С++ в руки

Вот уж послали, так послали...
Re[6]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 21.05.09 15:59
Оценка:
Здравствуйте, Pepel, Вы писали:

P>- будете на себя работать — С++ в руки

Много ли ты проектов на С++ сделал?

P>- на контору планируете идти — шарп

И сколько на шарпе?
Re[7]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 21.05.09 16:11
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>>>
G>>>A a;
G>>>B* b = (B*)((void*)&a)
G>>>

G>>>Где тут сильные проверки?

G>Не надо объяснять. Не такая уж сильная типизация как тебе кажется.

G>Пример с union_ами приводить?

А чего ты всё про С да про С? Мы тут вроде про С++ говорили.
Нужно разобрать угил.
Re[40]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 21.05.09 16:16
Оценка:
Здравствуйте, samius, Вы писали:

V>>Вот в том и прикол, что .Net 3.0 вышел раньше .Net 2.0 SP1, а если мы вели разработку на .Net 2.0 SP1, то получили бяку в Виста, которая идет с предустановленной .Net 3.0, и на которую .Net 2.0 SP1 не ставится никаким образом (если не ошибаюсь, туда и .Net 3.0 SP1 не ставится, не буду утверждать).

S>Если так — действительно бяка. Пока не напарывались, но теперь будем внимательны при использовании фич из SP1. Делаем продукт под 2.0.

Вроде как через Windows Update ставится самая последняя версия фреймворка, если стоит 2.0 и выше.
Re[41]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 21.05.09 16:19
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Вроде как через Windows Update ставится самая последняя версия фреймворка, если стоит 2.0 и выше.


У наших клиентов Windows Update как-правило недоступен.
Re[31]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 21.05.09 16:30
Оценка:
Здравствуйте, CreatorCray, Вы писали:


G>>Кроме того уже не за горами запуск числомолотилок на GPU, там тоже высокоуровневые языки будут более уместны, так как позволят генерить код для GPU в рантайме.

CC>Занимаюсь я щас как раз GPU числомолотильней для финансовых расчетов.

А можно твой опыт поэксплуатировать?
Как насчет параллельного расчета многих задач, т.е. код один и тот же, но нужны сотни одновременных потоков, обрабатывающих свои данные этим кодом (например, это будут аудио-кодеки).

Какой примерно выигрыш?

Какое железо и тулы посоветуешь?
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[27]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 21.05.09 17:14
Оценка:
Здравствуйте, criosray, Вы писали:

C>http://en.wikipedia.org/wiki/Objective-C — во многих смыслах замечательное решение, а с недавних пор еще и автоматическая сборка муссора появилась (опционально).


Ты писал на нем реально? И как тебе синтаксис объявлений обычных классов, абстрактных или интерфейсов? Как тебе запись вызова методов?
Сборка мусора там далеко не на всех реализациях, и в отсутствии аналогов смарт-поинтеров получаем тот же гемморой, что и с голым С.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[70]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 21.05.09 17:14
Оценка:
Здравствуйте, Хвост, Вы писали:

Х>логично, но меня всё же более интересовал вопрос о том, будут ли ети структуры существовать на стеке если они замкнуты.


Нет, они сразу располягаются в полях замыкания, и доступ к ним коссвенный, естественно, а на "стеке" они располагаются лишь в синтаксисе программы.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[46]: Другой вариант
От: vdimas Россия  
Дата: 21.05.09 17:20
Оценка:
Здравствуйте, samius, Вы писали:


S>Разве возвращается не обертка над объектом на стеке? Копирования я тут не вижу.


Возвращается по значению, походу и в "начальном" варианте это именно копирование, хотя компилятор может заинлайнить целевое тело ф-ии, чтобы оно расчитывало значения непосредственно в область стека, которая выделена под возвращаемое значения (например, если результат используется как аргумента вызова другой ф-ии, то сразу можно вычислять в соотв. позицию аргумента).
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[47]: Другой вариант
От: samius Япония http://sams-tricks.blogspot.com
Дата: 21.05.09 18:11
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, samius, Вы писали:


S>>Разве возвращается не обертка над объектом на стеке? Копирования я тут не вижу.


V>Возвращается по значению, походу и в "начальном" варианте это именно копирование, хотя компилятор может заинлайнить целевое тело ф-ии, чтобы оно расчитывало значения непосредственно в область стека, которая выделена под возвращаемое значения (например, если результат используется как аргумента вызова другой ф-ии, то сразу можно вычислять в соотв. позицию аргумента).


Кажется там речь шла о возврате function...
Как я понимаю, в общем случае (без инлайнинга) возвращается значение function. Какое отношение к значению function имеет тело самого замыкания?
Что будет если компилятор заинлайнит тело функции, подставляя function в область стека вызывающей функции, куда в этом случае попадет тело самого замыкания?
Что вообще за этим function? Он фиксированного размера?
Re[67]: Работа - с чего начать: С++ или С#?
От: IID Россия  
Дата: 21.05.09 18:22
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>А по сущству есть что сказать? Или ты честно считаешь что в своем проекте будешь вмеесто стандартных new, delete и всего что с ними связано


У нас в проекте именно так, собственные new/delete, потому что в KernelMode аллокация вовсе не через HeapAlloc делается. Полёт нормальный.
kalsarikännit
Re[68]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 21.05.09 18:35
Оценка:
Здравствуйте, IID, Вы писали:

IID>Здравствуйте, gandjustas, Вы писали:


G>>А по сущству есть что сказать? Или ты честно считаешь что в своем проекте будешь вмеесто стандартных new, delete и всего что с ними связано


IID>У нас в проекте именно так, собственные new/delete, потому что в KernelMode аллокация вовсе не через HeapAlloc делается. Полёт нормальный.

Разве C++ в ядре? А что там от C++ осталось то?
Re[68]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 21.05.09 18:38
Оценка:
Здравствуйте, IID, Вы писали:

G>>А по сущству есть что сказать? Или ты честно считаешь что в своем проекте будешь вмеесто стандартных new, delete и всего что с ними связано


IID>У нас в проекте именно так, собственные new/delete, потому что в KernelMode аллокация вовсе не через HeapAlloc делается. Полёт нормальный.


Я почти во всех своих проектах использую аллокатор маленьких (до 256 байт) объёктов (коих обычно 95%), который работает очень быстро и эффективно, устраняя в частности потенциальную фрагментацию.
Нужно разобрать угил.
Re[9]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.05.09 19:15
Оценка:
Здравствуйте, NikeByNike, Вы писали:

NBN>Ага, а в задачу входит создание красивого, быстрого и кроссплатформенного кода и софта — это решаемо _только_ на С++. Даже ущербный С с этим не спрвится.


А ты в курсе на чем написано ядро Linux, да и Windows?
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[28]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 21.05.09 19:42
Оценка:
v> C>http://en.wikipedia.org/wiki/Objective-C — во многих смыслах замечательное решение, а с недавних пор еще и автоматическая сборка муссора появилась (опционально).

v> Ты писал на нем реально? И как тебе синтаксис объявлений обычных классов, абстрактных или интерфейсов? Как тебе запись вызова методов?



Синтаксис — это как бы вопрос сильно субъективный

ЗЫ. Сам на Objective-C не писал Ленивый я

v> Сборка мусора там далеко не на всех реализациях, и в отсутствии аналогов смарт-поинтеров получаем тот же гемморой, что и с голым С.


Если мне не изменяет память, то для большинства high-level объектов там встроеный счетчик ссылок или тип того. Что, естественно, не решает проблему полностью
avalon 1.0rc1 rev 239, zlib 1.2.3


dmitriid.comGitHubLinkedIn
Re[10]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 21.05.09 19:43
Оценка:
Здравствуйте, VladD2, Вы писали:

NBN>>Ага, а в задачу входит создание красивого, быстрого и кроссплатформенного кода и софта — это решаемо _только_ на С++. Даже ущербный С с этим не спрвится.


VD>А ты в курсе на чем написано ядро Linux, да и Windows?


С-код, как и код любого низкоуровневого языка — страшен.
Нужно разобрать угил.
Re[29]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 21.05.09 21:58
Оценка:
Здравствуйте, Mamut, Вы писали:

v>> Сборка мусора там далеко не на всех реализациях, и в отсутствии аналогов смарт-поинтеров получаем тот же гемморой, что и с голым С.


M>Если мне не изменяет память, то для большинства high-level объектов там встроеный счетчик ссылок или тип того. Что, естественно, не решает проблему полностью


Это ты про либы для iPhone? Да, так и есть, это обычное библиотечное решение, следить за счетчиком надо вручную.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[34]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 21.05.09 22:14
Оценка:
Здравствуйте, gandjustas, Вы писали:

И давно ты так на С# пишешь?
На С++ тоже уже на днях станет можно.

ГВ>>И потом, bind — это, в общем-то, не полноценные лямбды, как ни крути. Показательно то, что на C++ их можно реализовать.

G> Показательно то что их нет в современном языке.

Современный язык — понятие растяжимое. Раньше как-то шли ФЯ отдельно, императивные отдельно, а теперь все хотят 2-в-1, и бум этот буквально последние единицы лет. MS пошла навстречу, ну и С++ уже подтянулся.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[35]: Работа - с чего начать: С++ или С#?
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 22.05.09 02:59
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, gandjustas, Вы писали:


V>И давно ты так на С# пишешь?

Давненько.

V>На С++ тоже уже на днях станет можно.

А смысл?
Re[36]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 22.05.09 04:28
Оценка:
Здравствуйте, gandjustas, Вы писали:

V>>На С++ тоже уже на днях станет можно.

G>А смысл?

Совсем предлагаешь без нативных языков обходиться?
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[6]: Работа - с чего начать: С++ или С#?
От: MxKazan Португалия  
Дата: 22.05.09 07:00
Оценка:
Здравствуйте, _d_m_, Вы писали:

___>Здравствуйте, MxKazan, Вы писали:


MK>>Здравствуйте, Pepel, Вы писали:


P>>>весь пост не читал, только начало зацепил, вставлю свои 5 центов : тут чет про кросплатформенность много пишут там и прочий валюнтаризм .. мне кажется, дело в области применении задачи, наверное программу управления кардиодатчиком хирургического стола все же стоит писать на C++ ввиду сильного механизма проверок , а дрочилку отчетов овощной базы на рынке можно и на шарпах забомбить и она тож будет великолепна ..

MK>>Dildo Framework, Vegetable Edition

___>Остается окрытым вопрос: а как быть мясному рынку?

Известно как! Ждать сервис-пака!
Re[30]: Работа - с чего начать: С++ или С#?
От: Mamut Швеция http://dmitriid.com
Дата: 22.05.09 07:08
Оценка:
Здравствуйте, vdimas, Вы писали:

v> v>> Сборка мусора там далеко не на всех реализациях, и в отсутствии аналогов смарт-поинтеров получаем тот же гемморой, что и с голым С.


v> M>Если мне не изменяет память, то для большинства high-level объектов там встроеный счетчик ссылок или тип того. Что, естественно, не решает проблему полностью


v> Это ты про либы для iPhone? Да, так и есть, это обычное библиотечное решение, следить за счетчиком надо вручную.


Не, там что-то было и в Objective-C. Но, наверное, как в Qt это сделано для библиотечных классов (каких0нить хэндлов, окон, строк и т.п.) Сейчас просто лень искать
avalon 1.0rc1 rev 239, zlib 1.2.3


dmitriid.comGitHubLinkedIn
Re[69]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 22.05.09 08:27
Оценка:
Здравствуйте, gandjustas, Вы писали:

IID>>У нас в проекте именно так, собственные new/delete, потому что в KernelMode аллокация вовсе не через HeapAlloc делается. Полёт нормальный.

G>Разве C++ в ядре? А что там от C++ осталось то?
А что в твоем понимании С++? Очень интересно, просвети.
А то ты в последнее время завел шарманку "в нейтиве С рулит, С++ не нужен", что наводит на некоторые интересные мысли о том, что ты понимаешь под С++.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[15]: Работа - с чего начать: С++ или С#?
От: NikeByNike Россия  
Дата: 22.05.09 11:05
Оценка:
Здравствуйте, criosray, Вы писали:

C>Жаль, что на КСВ не банят за провокационное поведение, троллинг и ламерство.


Ага
Нужно разобрать угил.
Re[15]: Работа - с чего начать: С++ или С#?
От: CreatorCray  
Дата: 22.05.09 11:57
Оценка:
Здравствуйте, criosray, Вы писали:

C>Жаль, что на КСВ не банят за провокационное поведение, троллинг и ламерство.

Жаль. Иначе тебя бы тут уже не было.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[15]: Работа - с чего начать: С++ или С#?
От: VladD2 Российская Империя www.nemerle.org
Дата: 22.05.09 13:50
Оценка:
Здравствуйте, criosray, Вы писали:

C>Жаль, что на КСВ не банят за провокационное поведение, троллинг и ламерство.


Не, ну, все в наших руках .
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[38]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 22.05.09 16:09
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>Смотря в какой области. В системном программировании не сильно получится без нативных языков, байтики ворочить без C мало получится. C++ в такой задаче ни к чему. Аналогично для числомолотилок.


Я тебя уже спрашивал, почему именно С, ты так и не смог предметно объясниться.
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[71]: Работа - с чего начать: С++ или С#?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 22.05.09 19:33
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>В нейтиве рулит нэйтив. А в программировании — управляемые языки и мощные платформы.


О, как!
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[56]: Таки примеры-то будут, а то правда не ясно...
От: Erop Россия  
Дата: 23.05.09 08:43
Оценка:
G>>А еще чаще — нельзя. Потому что решение задачи кроется не в одном алгоритме, а в дестятках. Подобрать оптимально каждый из них нереально, кроме того заранее обычно даже не думают как данные выглядеть будут.
E>Не понимаю, в чём проблема.
E>Приведи пример задачи, и алгоритма, который сразу трудно выбрать...

Таки примеры-то будут?,. а то правда не ясно о чём речь...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[26]: Работа - с чего начать: С++ или С#?
От: IID Россия  
Дата: 23.05.09 10:27
Оценка:
Здравствуйте, jenyavb, Вы писали:

J>

J>Также компании Microsoft очень сложно предусмотреть в CLR возможность проверки неизменности констант-объектов или констант-параметров. CLR пришлось бы при каждой операции записи проверять, не выполняется ли запись в объект-константу, а это сильно снизит эффективность работы программы. Есте ственно, что обнаружение нарушения должно приводить к генерации исключения. Более того, поддержка констант создает дополнительные сложности для разработчиков. В частности, при наследовании неизменяемого типа, производные типы должны соблюдать это ограничение. Кроме того, неизменяемый тип, скорее всего, должен состоять из полей, которые тоже представляют собой неизменяемые типы.

J>(c)Рихтер

Ага, в случае обнаружения на Runtime всё так. А в compile-time этого не проверить что-ли ?
kalsarikännit
Re[27]: Работа - с чего начать: С++ или С#?
От: criosray  
Дата: 23.05.09 10:37
Оценка:
Здравствуйте, IID, Вы писали:


J>>

J>>Также компании Microsoft очень сложно предусмотреть в CLR возможность проверки неизменности констант-объектов или констант-параметров. CLR пришлось бы при каждой операции записи проверять, не выполняется ли запись в объект-константу, а это сильно снизит эффективность работы программы. Есте ственно, что обнаружение нарушения должно приводить к генерации исключения. Более того, поддержка констант создает дополнительные сложности для разработчиков. В частности, при наследовании неизменяемого типа, производные типы должны соблюдать это ограничение. Кроме того, неизменяемый тип, скорее всего, должен состоять из полей, которые тоже представляют собой неизменяемые типы.

J>>(c)Рихтер

IID>Ага, в случае обнаружения на Runtime всё так. А в compile-time этого не проверить что-ли ?


http://msdn.microsoft.com/en-us/library/acdd6hb7(VS.71).aspx

readonly

The readonly keyword is a modifier that you can use on fields. When a field declaration includes a readonly modifier, assignments to the fields introduced by the declaration can only occur as part of the declaration or in a constructor in the same class.

Re[24]: П как правильно?
От: Erop Россия  
Дата: 24.05.09 13:07
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Погугли и почитай, что за бред там пишется. Все про С++. Это локальная терминалогия отдельных идиотов. Научного понятия статического полиморфизма нет. Есть статическая типизация и разные виды полиморфизма. Но любой из них может отрабатывать в рантайме.


А как называется сод, вроде std::sort, который можно натравить на данные разного типа, удовлетворяющие каким-то формальным требованиям, и получить соответсвующий результат? Пусть члово полиморфизм не годится. Какое таки годится?
Кста, так ещё чуть ли не в алголе можно было делать, так что про эксклюзив С++ в вопросах того, что там статическим полиморфизмом кличут, не надо. Это всё придумали и внедорили задолго до С++...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[29]: Работа - с чего начать: С++ или С#?
От: Erop Россия  
Дата: 24.05.09 13:09
Оценка:
Здравствуйте, landerhigh, Вы писали:


L>Смотри выделенное.

Неужели не встречал ситуёвины, когда что-то на С, а что-то на С++? Интероп там оч. хороший, да и можно просто наследовать С-код, просто включив его в С++ проект...

L>Засим откланиваюсь.

Ну и к лучшему, в смысле всего хорошего!
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[26]: П как правильно?
От: Erop Россия  
Дата: 25.05.09 00:36
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>утиная типизация.


А это что обозначает?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[27]: П как правильно?
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 25.05.09 06:33
Оценка:
Здравствуйте, Erop, Вы писали:
VD>>утиная типизация.

E>А это что обозначает?

http://rsdn.ru/Forum/Message.aspx?mid=3165397&amp;only=1
Автор: Воронков Василий
Дата: 06.11.08
и солнце б утром не вставало, когда бы не было меня
Re[31]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 25.05.09 07:45
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Здравствуйте, gandjustas, Вы писали:


V>В общем ладно, может тут и моя вина, что не описал контекст, поэтому не понимаю твоего сопротивления очевидным, на мой взгляд, вещам.

А ты читал, что пишут другие люди про очевидные "на твой взгляд" вещи?


V>В общем, сервер конференций, видео, VoIP и вся лабуда типа шаринга приложений и прочие примочки. Основная реалтаймовая и одновременно нагрузочная вещь — это именно VoIP, остальное реалтаймом можно назвать лишь условно. Что есть VoIP: это 50 пакетов в секунду на абонента в одну только сторону, т.е. итого 100 пакетов на абонента. Железка должна держать их несколько сотен, желательно под тысячу. В общем, у меня такой сценарий, что я даже не могу позволить себе такую мелочь, как лишнее копирование данных и тем паче ни о каких 100тыс выделений буферов в секунду не может быть и речи.

Поэтому для этих целей ведущие собаководы выделяют все нужные буфера заранее.

V>Оно не возвращает, оно читает из сокета в наш предвыделенный буфер. После прочтения возвращает кол-во прочитанных байт. В пакете заголовок и собственно сами данные с неким смещением (зависит от заголовка). Данные обрабатываются прямо из этого буфера по указанной выше причине.

Поэтому в таких случаях ведущие собаководы применяют либо ансейф, либо трюк с джитом типа вот так:
for(var i =0; i<buffer.Length; i++)
{
    if (i==iactualLength) // выходим из цикла
      break;
  PerformTerribleCalculationAgainst(buffer[i]);//здесь устранены проверки на выход за пределы buffer
}


V>Обычная там фильтрация, ФНЧ/ФВЧ, алгоритм рекурсивного фильтра примитивен — это просто вычисление многочленов z1*a1+z2*a2+z3*a3+..., zi — элементы последовательности, ai — константы. Думаешь, я тебе вру о том, что затраты на доступ к массиву сопоставимы с полезными вычислениями?

Думаю, ты просто не вполне корректно готовишь собаку.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[32]: Работа - с чего начать: С++ или С#?
От: Cadet  
Дата: 25.05.09 12:15
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Поэтому в таких случаях ведущие собаководы применяют либо ансейф, либо трюк с джитом типа вот так:

S>
S>for(var i =0; i<buffer.Length; i++)
S>{
S>    if (i==iactualLength) // выходим из цикла
S>      break;
S>  PerformTerribleCalculationAgainst(buffer[i]);//здесь устранены проверки на выход за пределы buffer
S>}
S>


Мммм... А чем это отличается от проверки, выполняемой автоматически? Ну, за исключением того, что мы не словим потенциально IndexOutOfRangeException?
... << RSDN@Home 1.2.0 alpha 4 rev. 1217>>
Re[27]: П как правильно?
От: VladD2 Российская Империя www.nemerle.org
Дата: 25.05.09 12:45
Оценка:
Здравствуйте, Erop, Вы писали:

VD>>утиная типизация.


E>А это что обозначает?


Это означает, что типы считаются одинаковыми если они обладают одинаковым набором членов или свободных функций.

В рамках шаблонов С++ это выливается в то, что шаблон может использоваться с любым типом для которого реализованы используемые в шаблоне функции.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[33]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 25.05.09 14:30
Оценка:
Здравствуйте, Cadet, Вы писали:

C>Мммм... А чем это отличается от проверки, выполняемой автоматически? Ну, за исключением того, что мы не словим потенциально IndexOutOfRangeException?

Тем, что она будет делаться один раз на тело цикла, а не один раз на каждое обращение к элементу массива.
Хотя да, в коротких формулах будет немногим лучше .
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[34]: Работа - с чего начать: С++ или С#?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 25.05.09 14:36
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Cadet, Вы писали:


C>>Мммм... А чем это отличается от проверки, выполняемой автоматически? Ну, за исключением того, что мы не словим потенциально IndexOutOfRangeException?

S>Тем, что она будет делаться один раз на тело цикла, а не один раз на каждое обращение к элементу массива.
S>Хотя да, в коротких формулах будет немногим лучше .

Сравнил. При одном обращении к массиву на цикл код получается как минимум эквивалентным по производительности (с точностью до погрешности измерений, т.е. разница в десятую долю секунды из полутора минут прогона). Это означает, что при множественном обращении к массиву по индексу выигрыш от проверки внутри цикла наверняка будет.
Re[35]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 25.05.09 15:04
Оценка:
Здравствуйте, samius, Вы писали:
S>Сравнил. При одном обращении к массиву на цикл код получается как минимум эквивалентным по производительности (с точностью до погрешности измерений, т.е. разница в десятую долю секунды из полутора минут прогона). Это означает, что при множественном обращении к массиву по индексу выигрыш от проверки внутри цикла наверняка будет.
Ну, можно попробовать применить что-нибудь поинтереснее — например, фильтрацию. Там вообще простор фантазии — в том смысле, что фильтрация — это свёртка подмассива с массивом. Как-то типа так:
public double[] Filter(double[] data, double[] filter)
{
  double[] target = new double[data.Length-filter.Length];
    for(int i = 0; i<target.Length; i++)
    {
      for(j=0; j<filter.Length; j++)
          target[i]+=data[i+j]*filter[j]; // количество неустраненных проверок границ в этом месте определит общий успех предприятия
    }
    return target;
}
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[40]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 27.05.09 09:06
Оценка:
Здравствуйте, gandjustas, Вы писали:

V>>Я тебя уже спрашивал, почему именно С, ты так и не смог предметно объясниться.

G>Еще раз обясняю. C — потому что низкоуровневый и быстрый. Там где нужны более сложные абстракции лучше юзать более безопасные языки, чем C++.

Ты зачем с ног на голову все ставишь? Язык определяет задачи, или задачи определяеют выбираемый язык — суть инструмент?

С++ такой же низкоуровневый, быстрее в общем случае, чем С, и гораздо безопаснее, чем С, т.к. у него более строгая типизация.
Итак, последний раз спрашиваю: почему именно С, а не С++.

И что за повторяющаяся ахинея насчет "более сложных абстракций"? Речь сейчас исключительно о тех задачах, где ты предлагаешь пихать голый С.

--------
(Вариант ответа, типа "потому что есть платформы с С, но без С++" не принимаются, т.к. для таких платформ мы бы и не сравнивали).
Re[26]: П как правильно?
От: VoidEx  
Дата: 27.05.09 11:57
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Параметрический полиморфизм и утиная типизация.


If the range of actual types that can be used is finite and the combinations must be specified individually prior to use, it is called ad-hoc polymorphism. If all code is written without mention of any specific type and thus can be used transparently with any number of new types, it is called parametric polymorphism

Если я правильно понимаю, у шаблонов полиморфизм как раз не параметрический, особенно в данном случае (различный sort для разных типов).
Re[27]: П как правильно?
От: samius Япония http://sams-tricks.blogspot.com
Дата: 27.05.09 12:58
Оценка:
Здравствуйте, VoidEx, Вы писали:

VE>

VE>If the range of actual types that can be used is finite and the combinations must be specified individually prior to use, it is called ad-hoc polymorphism. If all code is written without mention of any specific type and thus can be used transparently with any number of new types, it is called parametric polymorphism

VE>Если я правильно понимаю, у шаблонов полиморфизм как раз не параметрический, особенно в данном случае (различный sort для разных типов).

Как раз у шаблонов — параметрический. Специализация шаблонов — ad hoc.
Re[32]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 27.05.09 13:21
Оценка:
Здравствуйте, Sinclair, Вы писали:

V>>В общем ладно, может тут и моя вина, что не описал контекст, поэтому не понимаю твоего сопротивления очевидным, на мой взгляд, вещам.

S>А ты читал, что пишут другие люди про очевидные "на твой взгляд" вещи?

Читал много всего. Но помимо чтения, конечно же, ставили эксперименты и получали результаты.
А ты читал мои сообщения выше? Сильную разницу с советами в статье заметил? А сам-то статью внимательно читал?

S>Поэтому для этих целей ведущие собаководы выделяют все нужные буфера заранее.


Это пробегающие_мимо_высунув_язык собаководы так делают, а ведущие читают хотя бы на пару постов выше, чтобы не потерять контекст, перед тем, как делать серьёзное лицо. А то какой-то конфуз — объясняют мне то, что я сам оппоненту объяснял. Ну или надо было не на мой пост отвечать, для сохранения последовательности обсуждения.

И тут требуется уточнить — что значит "заранее"? Перед тем как пустить траффик по какому-нить из тысячи каналов? Или в процессе инициализации системы? Если первое, то так и есть, а если второе — то никак, ибо клиенты заходят по разным протоколам и в каждом протоколе свои особенности.


V>>Оно не возвращает, оно читает из сокета в наш предвыделенный буфер. После прочтения возвращает кол-во прочитанных байт. В пакете заголовок и собственно сами данные с неким смещением (зависит от заголовка). Данные обрабатываются прямо из этого буфера по указанной выше причине.

S>Поэтому в таких случаях ведущие собаководы применяют либо ансейф,

Ансейф без пиннинга никак, а насчет пиннинга отсылаю к своим сообщениям чуть выше или к статье по твоей ссылке.

S>либо трюк с джитом типа вот так:

S>
S>for(var i =0; i<buffer.Length; i++)
S>{
S>    if (i==iactualLength) // выходим из цикла
S>      break;
S>  PerformTerribleCalculationAgainst(buffer[i]);//здесь устранены проверки на выход за пределы buffer
S>}
S>


Да мы и так всегда однократно значения из массива достаем. Во вторых, я не вижу отсутствия лишней проверки. Согласен, что она должна быть чуть более экономичной.

В любом случае, даже в случае подобных "сверхоптимизаций", заджитенный бинарный код весьма убог в тех местах, где речь идет об обращениях к массивам. И я могу себе позволить предположить почему: наверно есть какой-то "протокол" м/у джиттером и GC, чтобы GC не терял ссылочные значения, "затертые" в регистрах после всех оптимизаций. Компилированных бинарный кусок подобного С++ кода обычно раза в 2 короче. (в исходнике gthtперебор где-то так: while(array!=last) process( *array++); )

Учитывая, что голосовой буффер — это вполне счетное кол-во сэмплов (обычно 160 или 320), то неплохо на С++ на шаблонах смотрится раскрутка цикла "в плоскость".


V>>Обычная там фильтрация, ФНЧ/ФВЧ, алгоритм рекурсивного фильтра примитивен — это просто вычисление многочленов z1*a1+z2*a2+z3*a3+..., zi — элементы последовательности, ai — константы. Думаешь, я тебе вру о том, что затраты на доступ к массиву сопоставимы с полезными вычислениями?

S>Думаю, ты просто не вполне корректно готовишь собаку.

Ну думай. В общем, ввиду отсутствия предмета обсуждения позволю себе его задать: есть рекурсивные цифровые фильтры и нерекурсивные. С нерекурсивными в дотнет вообще беда из-за непосредственной реализации той приведенной мною формулы по верх массивов, и это выполняется на каждый отсчет... чтобы получить следующее фильтрованное значение, надо сделать приращение i+1 при Z, и пробежаться по окну снова, а размер окна бывает разный и почти никогда маленьким. Поэтому на практике фильтруем рекурсивными фильтрами, в которые подаются значения по 1-му, а кол-во промежуточных регистров фиксированно и зависит от порядка фильтра. В этом случае zi — переменные структуры и формула вычисляется вовсе в цикле.

------------
Чтобы далее не переливать из пустого в порожнее: на клиента идет по ClickOnce полностью safe managed код (благо там нагрузка — один канал всего). Так что была масса возможностей сравнить варианты по всему градиенту от нейтива до менейджед (сравнить аналогичную ф-сть клиента и сервера в протоколах и обработке сигнала).
... << RSDN@Home 1.2.0 alpha rev. 786>>
Re[33]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 27.05.09 13:58
Оценка:
Здравствуйте, vdimas, Вы писали:
V>А ты читал мои сообщения выше?
Да.
V>Сильную разницу с советами в статье заметил?
Нет.
V>А сам-то статью внимательно читал?
Да.

V>Это пробегающие_мимо_высунув_язык собаководы так делают, а ведущие читают хотя бы на пару постов выше, чтобы не потерять контекст, перед тем, как делать серьёзное лицо. А то какой-то конфуз — объясняют мне то, что я сам оппоненту объяснял. Ну или надо было не на мой пост отвечать, для сохранения последовательности обсуждения.

Оппонент не занимается проектированием VoIP сервера под дотнет. Поэтому ему статья была бы малоинтересна. Я же не из ехидства — а так, для общей полезности. Мало ли кто чего не прочитал в интернете.

V>И тут требуется уточнить — что значит "заранее"? Перед тем как пустить траффик по какому-нить из тысячи каналов? Или в процессе инициализации системы? Если первое, то так и есть, а если второе — то никак, ибо клиенты заходят по разным протоколам и в каждом протоколе свои особенности.

Ну, в статье более-менее написано что значит "заранее" в их контексте.
Перед каждым коннектом, я так понял, выделять уже поздно — потому, что нельзя пинить равномерно размазанные по памяти буфера.
С точки зрения менеджера буферов, все особенности протоколов сводятся к подходящему размеру буфера.

V>Ансейф без пиннинга никак, а насчет пиннинга отсылаю к своим сообщениям чуть выше или к статье по твоей ссылке.

Так штука в том, что сеть вообще без пиннинга никак — даже если сам его не делаешь, запись в сокет автоматически пинит буфер за тебя. Поэтому ансейфом больше/ансейфом меньше — особенной роли не играет.

V>В любом случае, даже в случае подобных "сверхоптимизаций", заджитенный бинарный код весьма убог в тех местах, где речь идет об обращениях к массивам. И я могу себе позволить предположить почему: наверно есть какой-то "протокол" м/у джиттером и GC, чтобы GC не терял ссылочные значения, "затертые" в регистрах после всех оптимизаций.

Не очень понятно, где там будет экономия — как только в цикле осталось только одно обращение к массиву, дальше начинается математика, и никаких указателей не остаётся.
Значит, джит лажает в математике, а не в указателях и GC.

V>Учитывая, что голосовой буффер — это вполне счетное кол-во сэмплов (обычно 160 или 320), то неплохо на С++ на шаблонах смотрится раскрутка цикла "в плоскость".

Ну, это верно. Шаблоны и раскрутка на С++ — это просто классика кун-фу.
Опытные падаваны делают это на шарпе вручную с ансейфом (ковыряния рефлектором в районе System.String и System.Array дают порой потрясающие впечатления).
Путь джедая — это разработка обобщенного фреймворка развертки циклов в рантайме. Путь полного джедая — это, конечно же, доработка этого обобщенного фреймворка до развёртки циклов в GPU


V>Ну думай. В общем, ввиду отсутствия предмета обсуждения позволю себе его задать: есть рекурсивные цифровые фильтры и нерекурсивные. С нерекурсивными в дотнет вообще беда из-за непосредственной реализации той приведенной мною формулы по верх массивов, и это выполняется на каждый отсчет... чтобы получить следующее фильтрованное значение, надо сделать приращение i+1 при Z, и пробежаться по окну снова, а размер окна бывает разный и почти никогда маленьким. Поэтому на практике фильтруем рекурсивными фильтрами, в которые подаются значения по 1-му, а кол-во промежуточных регистров фиксированно и зависит от порядка фильтра. В этом случае zi — переменные структуры и формула вычисляется вовсе в цикле.

Да это всё более-менее понятно. Можешь привести код такого фильтра, чтоб стало понятнее, куда оптимизировать?

V>Чтобы далее не переливать из пустого в порожнее: на клиента идет по ClickOnce полностью safe managed код (благо там нагрузка — один канал всего). Так что была масса возможностей сравнить варианты по всему градиенту от нейтива до менейджед (сравнить аналогичную ф-сть клиента и сервера в протоколах и обработке сигнала).

И как результат сравнения? Дает ли переход в ансейф прирост? Насколько переход в нейтив бъет ансейф?
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[35]: Работа - с чего начать: С++ или С#?
От: Sinclair Россия https://github.com/evilguest/
Дата: 27.05.09 17:22
Оценка:
Здравствуйте, vdimas, Вы писали:

V>Правильно, поэтому мы используем класс Socket только для инициализации (бо удобно очень), а потом берем хендл, и по UDP работаем не через класс сокета.

И как вы работаете "не через класс"? Даже если напрямю ДллИмпортировать неуправляемые Send и Receive, маршалер один хрен выполнит тот же пиннинг на время вызова. Потому что иначе никак — злой GC переместит буфер и привет.

V>Там какая-то возня по регистрам. Такое ощущение, в джит забили жесткие правила: такую-то адресацию делать так-то, другую так-то, и вот он вынужден жонглировать регистрами. Почему мне и показалось, что "протокол" соблюдают, дабы джит знал в каких регистрах искать ссылки.

Ссылки — да. Там же register map. Но я тут во всё более-менее верю.

V>Разве не проще на С/С++?

V>Согласен, для первого такого случая это же так муторно: надо еще один проект создать, в нем файл export.def, завести у себя класс NativeMethods
V>Зато каждый следующий случай добавляется за считанные секунды без этих "звездных войн". По крайней мере отдача адекватна вложенному результату.

V>Ха-ха по последнему.

V>Это должен быть путь не одинокого джедая, а как минимум серьёзного коллектива, т.к. сами оптимизации/развороты и прочее хоть и просты каждый в отдельности, но их охренительное кол-во, т.е. база знаний должна быть приличная.
Не, если коллектив — то и падаванов хватит.



V>нерекурсивный примерно такой (без оптимизаций):

V>
V>// смещаем окно вдоль последовательности
V>// развернутый вариант
V>for(int i=0; i<buffLen-windowN; i++)
V>{
V>  float result = 
V>        array[i] * С1 +
V>        array[i+1] * С2 +
V>        ...
V>        array[i+N-1] * СN;
V>}
V>

Угу. То есть развертка — в отказе от C[j] в пользу Cj.
V>Но наложение окна — это общая и довольно частая операция в обработке сигналов, когда инициализируется некий кодек или препроцессор, то ему динамиччески параметры сигнала дают, и он выделяет буфера динамически, и наложение окна — это цикл в цикле получается.


V>Рекурсивный более скромен в плане ресурсов:

V>// мемберы, линия задержки
V>
V>float _z1;
V>float _z2;
V>float _z3;
V>flozt _z4;
V>...
V>for(int i=0; i<buffLen; i++)
V>{
V>    _z4 = _z1;
V>    _z3 = _z2 * C3;
V>    _z2 = _z1 * C2;
V>    _z1 = array[i] * C1;
V>    float result = z4 * C4 + _z1;
V>}
V>

А, ну я так и думал — то есть теперь есть два "окна", которые едут мимо друг друга.


V>Дабы не разбрасываться голословно, подготовлю и выложу тесты.

ОК. Кул.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[42]: Работа - с чего начать: С++ или С#?
От: FR  
Дата: 28.05.09 10:01
Оценка:
Здравствуйте, Qbit86, Вы писали:

Q>Насчёт быстрее в общем случае, чем Си — это вряд ли. В некоторых случаях может быть быстрее кода на Си, в этом месте как правило спешат привести хрестоматийный пример qsort vs. std::sort. Собственно, это была одной из целей Страуструпа — не сильно потерять в производительности. Но совсем этого избежать не получилось.


У С++ гораздо больше возможностей работы в compile time, поэтому не в некторых случаех, а практически всегда.

V>>И что за повторяющаяся ахинея насчет "более сложных абстракций"?


Q>Исключения, например, сильно мешают некоторым оптимизациям, приводят к громоздкому бинарному коду. Совсем же без исключений на C++ писать трудно, тем более что даже простой new может бросить std::bad_alloc.


Исключения можно не использовать в критических местах.

Q>Шаблоны могут привести к разбуханию и дублированию бинарного кода, что как минимум скажется на cache locality (C++FQA).


Во первых компиляторы уже неплохо умеют это оптимизировать, во вторых кеши сейчас у процессоров мегобайтные.
Re[36]: Работа - с чего начать: С++ или С#?
От: vdimas Россия  
Дата: 28.05.09 11:47
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, vdimas, Вы писали:


V>>Правильно, поэтому мы используем класс Socket только для инициализации (бо удобно очень), а потом берем хендл, и по UDP работаем не через класс сокета.

S>И как вы работаете "не через класс"? Даже если напрямю ДллИмпортировать неуправляемые Send и Receive, маршалер один хрен выполнит тот же пиннинг на время вызова. Потому что иначе никак — злой GC переместит буфер и привет.

Опять же правильно, поэтому маршаллируется не массив, а эго запиненный адрес.
Если опускаться все дальше и все глубже, то у нас основной протокол IAX, который хорош тем, что используется всего 1 UDP порт, поэтому всех клиентов по этому протоколу мы слушаем на одном порту. Вызываем синхронный метод чтения UDP-пакета из одновременных нескольких конкурирующих потоков (самый эффективный вариант получился, крайне рекомендую). Каждый такой поток-близнец при старте системы инициализирует буффер и пинит его, затем мы оперируем лишь IntPtr. Да, GC.Collect дважды с ожиданием финализаций перед этой операцией вызываем.

В общем, unsafe-ом мы не страдаем, тем более, что это все-равно байт-код, т.е. смысл не так уж велик. Я вообще не знаю такую задачу для unsafe, которую не смог бы решить в safe столь же эффективно, кроме случая реинтерпретации памяти (см. например вычисление String.GetHashCode()). Я и в native всячески от реинтерпретации стараюсь уходить, а в managed сам бог велел.


V>>Это должен быть путь не одинокого джедая, а как минимум серьёзного коллектива, т.к. сами оптимизации/развороты и прочее хоть и просты каждый в отдельности, но их охренительное кол-во, т.е. база знаний должна быть приличная.

S>Не, если коллектив — то и падаванов хватит.


Не знаю. Для себя я сложности делю на 2 полюса:
1-й — сложность "в глубину", когда объем реализации/спецификаций/абстракций маленький, но за ним скрывается большой теоретический бэкграунд (как пример — ИИ, либо обработка сигналов, и то и другое выполняется примитивными операциями с векторами, но эта "примитивность" дорогого стоит).
2-й — сложность "в ширину", когда объем реализации и т.д. очень большой, но при этом этот объем легко разложим на множество примитивных подзадач (пример: большинство современных информационных систем).

Так что реализация этого интересного варианта с GPU действительно скорее (2), чем (1), и падаванов хватит. А вот задача поиска новых алгоритмов оптимизации или же повышение эффективности имеющихся — неспоримо (1), как раз для джидая.

S>Угу. То есть развертка — в отказе от C[j] в пользу Cj.


Если Сj константы, то почему бы нет.

V>>Но наложение окна — это общая и довольно частая операция в обработке сигналов, когда инициализируется некий кодек или препроцессор, то ему динамиччески параметры сигнала дают, и он выделяет буфера динамически, и наложение окна — это цикл в цикле получается.



S>А, ну я так и думал — то есть теперь есть два "окна", которые едут мимо друг друга.


В нерекурсивном было тоже два окна, просто одно из них константное (для случая фиксированных в compile-time характеристик фильтра) и очень большое. В рекурсивном же окно обычно маленькое — это порядок фильтра+1, и сдвиг окна неплохо выполняется одновременно с вычислениями.

Продолжая давать советы по эффективной реализации фильтрации: т.к. данные подаются порциями, то все регистры сдвига для рекурсивного фильтра могут располагаться на стеке в процессе обработки порции, с сохранением состояния фильтра м/у обработками. Для .Net достаточно класс фильтра сделать value-type, далее "всё само".
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.