Re[167]: Тормознутость и кривость linq. Compile-time EDSL DB
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 09.07.16 21:26
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

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


S>>>>>> Я тебе показал реализацию которая компактнее реализации на C#. Ты же сам согласился выше.

EP>>>>>Какую конкретно реализацию?
S>>>> Хотошо. Напомню.https://rsdn.ru/forum/philosophy/6489023.1
Автор: Serginio1
Дата: 01.07.16

S>>>>Или ты её не видел?
EP>>>А, так ты под реализацией имеешь в виду вызов готового алгоритма?
S>>То, что ты показал это реализация на
S>>http://ru.cppreference.com/w/cpp/algorithm/max_element

EP>Вообще-то нет, например у меня был ещё и selector.

У
S>> Если сюда добавить фильтр на null

EP>В том-то и дело что не нужно сюда добавлять фильтр на null — как и любой другой фильтр он реализуется ортогонально. Его добавили из-за проблем самого C#.


Дааааа? Приведу пример работы с базами данных. Там null это повсеместное явление при соединениях.
Это как раз проблемы С++.
EP>И я тебе уже это говорил в другой теме. Теперь ты и эту зафлудил
Я жду от тебя извинений за твои слова о том.
S>> даже в данном варианте на C# 30 строк. При этом используя foreach можно сокаратить до С++ кода. Но даже этот вариант меньше чем ты нашел где то сотни строк.


S>> Я кстати извинился за 2 раза. Жду от тебя извинений за несколько сотен строк.


EP>Ты нормальный? С чего мне перед тобой извинятся? Может я оклеветал тебя? Так покажи.

EP>Вариант на сотни строк до сих пор лежит у них в репозитории. Если думаешь что они как-то неправильно закодировали — иди в соответствующий под-форум.

Где я тебе показал на 30 строк. При этом вариант на C++ при сравнении на null будет аналогичным.
Я думаю о том, что ты не знаешь C#, но делаешь свои умозаключения на коде, в котором ничего не понимаешь. И то, что данный алгоритм можно решить так же как и на С++.
В библиотеке std тысячи строк. И что с того?
Для примера покажу вариант на давай рассмотрим вариант std без селектора и компаратора.
Можешь сам добавить и посчитаем, сколько строк. Еще раз при работе с БД null это нормальное явление при левых соединениях

template<class ForwardIt>
ForwardIt max_element(ForwardIt first, ForwardIt last)
{
    if (first == last) {
        return last;
    }
    ForwardIt largest = first;
    ++first;
    for (; first != last; ++first) {
        if (*largest < *first) {
            largest = first;
        }
    }
    return largest;
}


// Но вот их вариант но с компаратором, и селектором
  using (var e = source.GetEnumerator())
                {
                    if (!e.MoveNext())
                        throw NoElementsException();
                    item = e.Current;
                    value = selector(item);
                    
                    while (e.MoveNext())
                    {
                        var x = selector(e.Current);
                        if (comparer.Compare(x, value) < 0)
                        {
                            value = x;
                            item = e.Current;
                        }
                    }
                }
  return item;


И где же это существенная алгоритмическая выразительность?
Мало того, по мне, так для многих арифметика указателей многим не понятна (я её прекрасно понимаю и она мне нравится)
Для обычного программиста код на C# просто понятнее

Другое дело, что для расширений нужно брать Linq и не парится с ручной работой с итераторами.
и солнце б утром не вставало, когда бы не было меня
Отредактировано 09.07.2016 21:40 Serginio1 . Предыдущая версия . Еще …
Отредактировано 09.07.2016 21:33 Serginio1 . Предыдущая версия .
Отредактировано 09.07.2016 21:30 Serginio1 . Предыдущая версия .
Отредактировано 09.07.2016 21:29 Serginio1 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.