Re[40]: Ну ты вообще многого не видишь... ;)
От: alexey_ma Израиль  
Дата: 08.06.09 12:35
Оценка:
Здравствуйте, gandjustas, Вы писали:

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


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


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


_>>>>И как же программисты С++ до сих пор не загнулись при работе с enterprise системами?

C>>>Загнулись. Потому 99% enterprise это Java и .NET
_>>Насчет Jаva соглашусь. А пример широко известной дотнет enterprise системы ( ну там CRM — ЕRP какой-нибудь)?

G>Sharepoint, Dynamics

+1, А каков процент на рынке? А то я что-то все больше разные SAP-ы, Siebel-ы вижу.
Re[39]: Ну ты вообще многого не видишь... ;)
От: criosray  
Дата: 08.06.09 12:38
Оценка:
Здравствуйте, alexey_ma, Вы писали:

_>>>И как же программисты С++ до сих пор не загнулись при работе с enterprise системами?

C>>Загнулись. Потому 99% enterprise это Java и .NET
_>Насчет Jаva соглашусь. А пример широко известной дотнет enterprise системы ( ну там CRM — ЕRP какой-нибудь)?

Microsoft Dynamics. Но энтерпрайз системы проектируются исключительно на заказ и их сотни тысяч, если не миллионы.
Re[53]: Ну ты вообще многого не видишь... ;)
От: criosray  
Дата: 08.06.09 12:39
Оценка:
Здравствуйте, CreatorCray, Вы писали:

C>>Кстати, С++ вариант по прежнему падает, если count >= 10000

C>>Прекрасный пример — тут Вы правы.
CC>Ну, этож твой код падает
Ну напишите такой, чтоб не падал. Или здесь все такие умные, что им это не по силам?
Re[53]: Ну ты вообще многого не видишь... ;)
От: criosray  
Дата: 08.06.09 12:42
Оценка:
Здравствуйте, alexey_ma, Вы писали:


C>>Так что там с Replace? Мы увидим тест для replace внутри wstring`а, который бы отрабатывал по времени примерно столько же, сколько отрабатывал тест на append? Слабо?

_>А что не так с алгоритмом replace ?

Это не правильно. Заменить надо ВСЕ вхождения подстроки в строку.

Что-то вроде boost::replace_all, но т.к. буста у меня нет и желания возиться с ним у меня тоже нет, то проверить не могу.
Re[42]: Ну ты вообще многого не видишь... ;)
От: criosray  
Дата: 08.06.09 12:43
Оценка: -1 :))
Здравствуйте, Pavel Dvorkin, Вы писали:

G>>Учти также что формальное доказательство дает огромный простор для оптимизации, в отличе от runtime проверок.


PD>Пойми наконец, что никакой проверки не будет вообще.


Проверки не будет — запрета не будет. "Так в чем сила, брат?"
Re[37]: Ну ты вообще многого не видишь... ;)
От: WolfHound  
Дата: 08.06.09 12:46
Оценка:
Здравствуйте, Serginio1, Вы писали:

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

А зачем барьер записи на неизменяемой куче?
Эта хрень нужна когда ссылку на молодой объект помещают в старый объект.
Но в данном случае это невозможно.
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[54]: Ну ты вообще многого не видишь... ;)
От: CreatorCray  
Дата: 08.06.09 12:46
Оценка:
Здравствуйте, criosray, Вы писали:

CC>>Так что это в принципе мелочи.

C>Когда таких мелочей — миллион — это становится сущей головной болью. Хорошо, что у Вас есть либа, а что делать тому, кто читает Ваш код? Лазать в либу и еще ее читать?
А как шарпники, читают сурсы фреймворка?
Или у них есть какой то другой способ понять что делает вызываемая функция, а?

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

CC>>Ну хоть как MSDNом пользоваться не забывай.
C>Вот-вот. Почему-то с С# на такой банальщине не приходится "пользоваться MSDN".
Мне тоже не приходится.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[40]: Ну ты вообще многого не видишь... ;)
От: alexey_ma Израиль  
Дата: 08.06.09 12:53
Оценка:
Здравствуйте, criosray, Вы писали:

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


_>>>>И как же программисты С++ до сих пор не загнулись при работе с enterprise системами?

C>>>Загнулись. Потому 99% enterprise это Java и .NET
_>>Насчет Jаva соглашусь. А пример широко известной дотнет enterprise системы ( ну там CRM — ЕRP какой-нибудь)?

C>Microsoft Dynamics. Но энтерпрайз системы проектируются исключительно на заказ и их сотни тысяч, если не миллионы.

Да ну? Я цифры не знаю, но примерно год — два назад ситуация была примерно следующая :
CRM-ERP — лидер SAP — 60%, потом Siebel — прoцентов 10%.
Builling системы крупых telecom компаний — примерно 80% — Amdocs CSM
и т.п . Впрочем за точность цифр не ручаюсь
Какая же крупная компания сегодня энтерпрайз системы заказывать будет? Обычно используют уже готовые и обкатанные решения(с кастомизацией конечно).
Re[40]: Ну ты вообще многого не видишь... ;)
От: Sinclair Россия https://github.com/evilguest/
Дата: 08.06.09 12:54
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:
PD>Так Рихтер все же прав или нет — насчет просмотра блоков ?
Ты его неправильно понимаешь. Никакие "блоки" памяти GC, естественно, не просматривает. У него есть полная информация об устройстве этих "блоков памяти".

PD>Нет . Я вообще довольно долго писал на Паскале (не Дельфи) под ДОС. И все, что я там знал, я перенес сюда. Свойства алгоритмов и работы с памятью не зависят от языка, если это native код.

Да ладно. То-то в релизах микрософтовского компилятора внезапно появляются тормоза на ровном месте — потому что новая версия чуть по-другому трактует частичные специализации, чем предыдущая.

PD>Копировать без надобноси не надо , и такие конструкции лучше вообще употреблять с осторожностью.

Какие конструкции? Вызов методов? Ну так я тебе напомню, что код в основном из них и состоит.
PD>Но для этого надо видеть, во что твой код примерно превратится. Без просмотра ассемблерного кода. Просто в уме понимать
Вот для понимания того, во что превратится твой код, нужно сначала съесть пуд соли с дизассемблером.


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

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

PD>Это тебе и кое-кому еще кажется, что это так. Профайлер лишь говорит о том, что есть, но ни слова не скажет о том, что могло бы быть. Вот тебе пример. Подсчет числа счастливых билетов. Тупо — 6-кратный цикл. Немного подумать — пятикратный. Еще подумать — тройной. А, оказывается, есть просто формула, без всяких циклов. Ну вот написал некий программист 6-цикл , видит, что все время уходит на... и что дальше ?

Будет повод исправить программу. А то, может быть, там всё время уходит не на цикл, а на ожидание пользовательского ввода этого номера. В итоге замена "шестикратного цикла" улучшит ситуацию на 1%.

PD>SQL — это тоже "управляемый" язык, так что здесь верно то же, что и для .Net. Но к программированию на уровне "я точно знаю, какие команды процессора у меня выполняются (даже если писалось не на асме)" это не относится.

Это очень узкая точка зрения. Грубо говоря, для SQL сервера команды процессора не имеют никакого значения. Не потому, что он "управляемый", а потому, что основное время уходит на ожидание подъема данных в память. Для него low-level — это "я точно знаю, какие страницы у меня читаются". И эта ситуация ничем принципиально не отличается от C++ и ассемблера. Точно так же опыт нарабатывается исключительно с помощью инструментов. И точно также опыт пользования MS SQL можно перенести на MySQL — как и Паскалевский опыт на С++. Потому что устройство "матчасти" примерно одинаковое. Переносить опыт с Паскаля на SQL, к примеру, будет неэффективно. И с SQL на STL тоже.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[55]: Ну ты вообще многого не видишь... ;)
От: criosray  
Дата: 08.06.09 13:07
Оценка:
Здравствуйте, CreatorCray, Вы писали:

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


CC>>>Так что это в принципе мелочи.

C>>Когда таких мелочей — миллион — это становится сущей головной болью. Хорошо, что у Вас есть либа, а что делать тому, кто читает Ваш код? Лазать в либу и еще ее читать?
CC>А как шарпники, читают сурсы фреймворка?
CC>Или у них есть какой то другой способ понять что делает вызываемая функция, а?
Есть.
http://www.rsdn.ru/forum/flame.comp/3419282.1.aspx
Автор: criosray
Дата: 07.06.09


При чем такую же документацию для своего кода делать элементарно:


        /// <summary>
        /// Описание метода
        /// </summary>
        /// <param name="args">описание аргумента</param>
        static void Main(string[] args)


Ввожу /// и студия автоматически генерирует такую вот форму документирования и тут же ее подхватывает.

Ну и кроме того, я могу сполна доверять стандартным классам фреймворка, а вот левой библиотеке некоего Васи Пупкина (ничего личного, я так для примера) — без соответствующего code review доверять ну никак не смогу.

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

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

CC>>>Ну хоть как MSDNом пользоваться не забывай.
C>>Вот-вот. Почему-то с С# на такой банальщине не приходится "пользоваться MSDN".
CC>Мне тоже не приходится.
Про _itow_s Вы знали на генетическом уровне? Да?
Re[41]: Ну ты вообще многого не видишь... ;)
От: criosray  
Дата: 08.06.09 13:10
Оценка:
Здравствуйте, alexey_ma, Вы писали:

C>>Microsoft Dynamics. Но энтерпрайз системы проектируются исключительно на заказ и их сотни тысяч, если не миллионы.

_>Да ну? Я цифры не знаю, но примерно год — два назад ситуация была примерно следующая :
_>CRM-ERP — лидер SAP — 60%, потом Siebel — прoцентов 10%.
_>Builling системы крупых telecom компаний — примерно 80% — Amdocs CSM
Ну что я могу сказать. Вы просто не понимаете значение термина enterprise система.
Re[54]: Ну ты вообще многого не видишь... ;)
От: alexey_ma Израиль  
Дата: 08.06.09 13:29
Оценка:
Здравствуйте, criosray, Вы писали:

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



C>>>Так что там с Replace? Мы увидим тест для replace внутри wstring`а, который бы отрабатывал по времени примерно столько же, сколько отрабатывал тест на append? Слабо?

_>>А что не так с алгоритмом replace ?

C>Это не правильно. Заменить надо ВСЕ вхождения подстроки в строку.


C>Что-то вроде boost::replace_all, но т.к. буста у меня нет и желания возиться с ним у меня тоже нет, то проверить не могу.

Нет, там все правильно.
replace он такой :

Examines each element in a range and replaces it if it matches a specified value.

Для одиночных символов замечательно работает.
Попробуйте так

    DWORD t1 = ::GetTickCount();
    wchar_t* buf = new wchar_t [200000000]; 
    std::wstring str1 ;
    wchar_t s[] = L"c1";
    for(size_t i = 0; i < 200000000; )
    {        
        _tcscpy(&(buf[i]),s);
        i+= _tcslen(s);
    }
    str1 = buf;

    DWORD dif_tim = ::GetTickCount() - t1;

    std::wcout << L"append: elapsed: " << dif_tim <<L" millisecond"<< std::endl;
    std::wcout << str1.length() << std::endl;
    
    t1 = ::GetTickCount();
    std::replace(buf, buf + _tcslen(buf)  , L'1', L'2');
    dif_tim = ::GetTickCount() - t1;
    std::wcout << L"replace (wchar array) : elapsed  : " << dif_tim <<L" millisecond"<< std::endl;


    std::wstring test1 = str1.substr(0,100);
    std::wcout << "before replace " << test1.c_str() << std::endl;

    t1 = ::GetTickCount();
    std::replace(str1.begin(), str1.end(), L'1', L'2');
    dif_tim = ::GetTickCount() - t1;
    std::wcout << L"replace (wstring) : elapsed  : " << dif_tim <<L" millisecond"<< std::endl;

    test1 = str1.substr(0,100);
    std::wcout << L"after replace " << test1.c_str() << std::endl;

    delete [] buf;


результат такой :

append: elapsed: 1219 millisecond
200000000
replace (wchar array) : elapsed : 594 millisecond
before replace c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c
1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1c1
replace (wstring) : elapsed : 485 millisecond
after replace c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2
c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2
Press any key to continue . . .


У вас в коде вроде тоже замена одиночного символа
Справедливости ради, следует заметит что для подстрок все гораздо хуже. STL string не лучшее решение для для частых добавлений и вставок.
Re[55]: Ну ты вообще многого не видишь... ;)
От: criosray  
Дата: 08.06.09 13:33
Оценка:
Здравствуйте, alexey_ma, Вы писали:

_>У вас в коде вроде тоже замена одиночного символа

Речь шла о замене именно подстроки. Я могу поменять замену символа на замену подстроки из десятков символов и принципиального падения производительности не будет.
_>Справедливости ради, следует заметит что для подстрок все гораздо хуже. STL string не лучшее решение для для частых добавлений и вставок.
Вооооооот. О чем и речь.
Re[42]: Ну ты вообще многого не видишь... ;)
От: alexey_ma Израиль  
Дата: 08.06.09 13:47
Оценка:
Здравствуйте, criosray, Вы писали:

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


C>>>Microsoft Dynamics. Но энтерпрайз системы проектируются исключительно на заказ и их сотни тысяч, если не миллионы.

_>>Да ну? Я цифры не знаю, но примерно год — два назад ситуация была примерно следующая :
_>>CRM-ERP — лидер SAP — 60%, потом Siebel — прoцентов 10%.
_>>Builling системы крупых telecom компаний — примерно 80% — Amdocs CSM
C>Ну что я могу сказать. Вы просто не понимаете значение термина enterprise система.
Ну так просвятите
На самом деле я их видел
А чем SAP, Siebel или Amdocs CSM не enterprise система ?
В Израиле SAP используется в правительственных учереждения, больницах и т.п
Amdocs CSM используют следущие опреторы связи ( своими глазами видел)
Израиль : Plephone, Сеllcom, (Partner использует Siebel и Ventiv)
Россия : Beeline.
США : АТ&T, Sprint
Канада : Bell Canada
И т.д.
Почти все крупные компании используют готовые решения.
Re[43]: Ну ты вообще многого не видишь... ;)
От: criosray  
Дата: 08.06.09 13:50
Оценка:
Здравствуйте, alexey_ma, Вы писали:

_>Почти все крупные компании используют готовые решения.


Это совсем не так. Нет готовых решений для enterprise систем. Или Вы серьезно думаете, что СSM или ERP — это есть ПОЛНОЕ enterprise решение?
Re[38]: Ну ты вообще многого не видишь... ;)
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 08.06.09 13:50
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


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

WH>А зачем барьер записи на неизменяемой куче?
WH>Эта хрень нужна когда ссылку на молодой объект помещают в старый объект.
WH>Но в данном случае это невозможно.
Это когда ссылку меняешь старшем поколении неважно на молодой или старший.
Согласен, что врайт барьера не будет,так как создаются новые узлы, но будет фрагментация кучи старших поколений, если освободившиеся узлы в них лежат.
Кстати а как там с балансировкой дерева?
и солнце б утром не вставало, когда бы не было меня
Re[54]: Ну ты вообще многого не видишь... ;)
От: CreatorCray  
Дата: 08.06.09 13:55
Оценка: +3
Здравствуйте, criosray, Вы писали:

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


C>>>Кстати, С++ вариант по прежнему падает, если count >= 10000

C>>>Прекрасный пример — тут Вы правы.
CC>>Ну, этож твой код падает
C>Ну напишите такой, чтоб не падал.
Ай повеселил!

C>Или здесь все такие умные, что им это не по силам?

Ты еще "на слабо" предложи.

Ты посчитай сколько памяти займут эти строки?

На 10к строк С# падает с out of memory
В С++ у тебя вылетает bad_alloc на ~1.4 Гб занятой памяти.
Почему не может выделить еще? Возьми VMMap и посмотри что творится в памяти процесса.
По сути у тебя синтетический тест на хаотическую аллокацию.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[56]: Ну ты вообще многого не видишь... ;)
От: alexey_ma Израиль  
Дата: 08.06.09 13:57
Оценка:
Здравствуйте, criosray, Вы писали:

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


_>>У вас в коде вроде тоже замена одиночного символа

C>Речь шла о замене именно подстроки. Я могу поменять замену символа на замену подстроки из десятков символов и принципиального падения производительности не будет.
Уверены ?
У меня ваш код при замене

stringBuilder.Replace('1', '2');

на

stringBuilder.Replace("c1", "12");

Выбрасывает System.OutOfMemoryException.
Re[39]: Ну ты вообще многого не видишь... ;)
От: WolfHound  
Дата: 08.06.09 14:02
Оценка:
Здравствуйте, Serginio1, Вы писали:

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

Какая еще фрагментация в случае с уплотняющим мусорщиком?

S>Кстати а как там с балансировкой дерева?

2-3 дерево. Частный случай B дерева. Еще вопросы?
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[44]: Ну ты вообще многого не видишь... ;)
От: alexey_ma Израиль  
Дата: 08.06.09 14:03
Оценка:
Здравствуйте, criosray, Вы писали:

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


_>>Почти все крупные компании используют готовые решения.


C>Это совсем не так. Нет готовых решений для enterprise систем. Или Вы серьезно думаете, что СSM или ERP — это есть ПОЛНОЕ enterprise решение?

Ну так смотря для кого. Хотя конечно обычно есть и CRM и ЕRP и еще чего нибудь. Но например SAP и Siebel(Oracle) предлагают и то и другое.
У Вас есть пример написанной с нуля на заказ крупной enterprise системы? В какой компании?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.