Информация об изменениях

Сообщение Re[181]: Тормознутость и кривость linq. Compile-time EDSL DB от 10.07.2016 22:07

Изменено 15.07.2016 14:45 Serginio1

Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Километровый флейм тут (да и соседней теме) вырос от нежелания признать что простейший алгоритм вылился в несколько сот строк boilerplate, причём плохо поддерживаемых, ибо много копипасты + текстовая кодогенерация.

EP>Аргументация же оппонентов постоянно витает где-то в далеких от исходного тезиса темах, типа экономической целесообразности, наличия мух в голове авторов кода, редкости таких ситуаций, метапрограммирования на макросах и шаблонах и т.п.
Еще раз. Тебе я привел кучу примеров. Приведу еще один

//if (value == null)
 //    source=source.Where(x=>x!=null); // Уберем фильтр на Linq из-за тормоза делегата

                bool isfirst=true;
                bool fl=0;
                foreach(var item in source)
                {
                   // Поставим фильтр сюда
                  if (isNullable && value == null) continue;

                   var x = selector(item ); 
                   if (isFirst) 
                      {                  
                      isFirst=false;
                       fl=-1;
                     }
                    else
                      fl=comparer.Compare(item, value);
                                 
                        if (fl< 0)
                        {
                            value = x;
                            item = e.Current;
                        }
                    }
                
                                  if (isFirst)
                  
                                  { 
                                    // по их алгоритму при пустом списке вызвать исключение для Nullable
                                      if (isNullable)
                                        throw NoElementsException();
                                          else
                                       eturn default(TSource); // вернуть default при пустом списке 
                                    }
            return item;


Получим тот же перфоманс без копи-пасте.
Приводи свой алгоритм на C++ который в 100 раз меньше.
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Километровый флейм тут (да и соседней теме) вырос от нежелания признать что простейший алгоритм вылился в несколько сот строк boilerplate, причём плохо поддерживаемых, ибо много копипасты + текстовая кодогенерация.

EP>Аргументация же оппонентов постоянно витает где-то в далеких от исходного тезиса темах, типа экономической целесообразности, наличия мух в голове авторов кода, редкости таких ситуаций, метапрограммирования на макросах и шаблонах и т.п.
Еще раз. Тебе я привел кучу примеров. Приведу еще один

//if (value == null)
 //    source=source.Where(x=>x!=null); // Уберем фильтр на Linq из-за тормоза делегата

                bool isfirst=true;
                bool fl=0;
                foreach(var item in source)
                {
                   // Поставим фильтр сюда
                  if (isNullable && item == null) continue;

                   var x = selector(item ); 
                   if (isFirst) 
                      {                  
                      isFirst=false;
                       fl=-1;
                     }
                    else
                      fl=comparer.Compare(item, value);
                                 
                        if (fl< 0)
                        {
                            value = x;
                            item = e.Current;
                        }
                    }
                
                                  if (isFirst)
                  
                                  { 
                                    // по их алгоритму при пустом списке вызвать исключение для Nullable
                                      if (isNullable)
                                        throw NoElementsException();
                                          else
                                       eturn default(TSource); // вернуть default при пустом списке 
                                    }
            return item;


Получим тот же перфоманс без копи-пасте.
Приводи свой алгоритм на C++ который в 100 раз меньше.