Здравствуйте, alex_public, Вы писали:
_>Здравствуйте, Sinclair, Вы писали:
_>>>И для таких целей в нормальных языках имеется перегрузка операторов. Которая позволяет именно что читабельным образом задавать математику любого уровня сложности. Например если говорить про этот алгоритм, то на каком-нибудь numpy (конечно же скомпилированном с mkl) это и запишется проще и работать будет скорее всего быстрее. ))) S>>Очень может быть. С нетерпением ждём примера С4 с nearest neighbour на языке с перегрузкой операторов.
_>Так зачем мелочиться, вот https://github.com/manuelaguadomtz/pythreshold/blob/master/pythreshold/local_th/sauvola.py тебе пример целиком sauvola, причём для произвольного размера окна.
Да, почти так же просто, как в linq2d. _>Если же усреднять только по соседям, то код ещё упростится.
Возможно, но не факт.
_>Нет, это ты всё как раз обсуждаешь только вариант с недоверием и плохой производительностью. А для нормальной производительности у тебя должен быть стандартный способ получить sortedArray из array без сортировки. Да, это возможно будет такая "unsafe" операция, но она необходима для возможности написания производительного ПО.
Ну, если удастся доказать, что именно в этом проблема производительности, то можно реализовать и unsafe-конструктор sortedArray из array.
_>Таких библиотек полно и без linq и в более удобном формате. Но они работают только "со своим типом данных". Здесь же речь шла именно о стандартной работе с коллекциями.
Нет такого понятия, как "стандартная работа с коллекциями". Стандартом для linq к базам данных является EF. Это не мешает ему быть унылым говном, а нестандартный linq2db — прекрасная реализация.
Linq — это, по большому счёту, две фичи:
1. Поддержка Expression в языке
2. Поддержка query syntax.
Первое — принципиально, второе — приятная вишенка на торте.
Всё остальное напилено поверх языка, в меру умений программистов и испорченности архитекторов каждой реализации.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, alex_public, Вы писали:
НС>>Ты можешь сказать зачем тебе оно? И что принципиально поменяется, если вместо визитора для диспетчеризации по типу узла там используется PM? _>К теме дискуссии это уже давно никакого отношения не имеет.
Т.е. не можешь. ЧТД.
_> А относилось исключительно к деградации кое-кого тут из технического специалиста в неграмотного тролля. Причём уже до такой степени, когда начинается вещание фантазий.
А начались бредовые фантазии с переходом на личности. Слив засчитан.
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Здравствуйте, Sinclair, Вы писали:
S>>Linq — это, по большому счёту, две фичи: S>>1. Поддержка Expression в языке S>>2. Поддержка query syntax.
НС>Я бы добавил еще extension methods и anonymous types. Без них linq был бы ужасен.
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Здравствуйте, Serginio1, Вы писали:
S>> Ну еще и yield!
НС>yield не имеет никакого отношения к линку и появился раньше него.
Да но он напрополую используется везде, в том числе и Linq.
yield это значимая фишка Linq.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Здравствуйте, Serginio1, Вы писали:
S>>Да но он напрополую используется везде, в том числе и Linq.
НС>И чо? А еще foreach там используется, причем намного чаще. Это тоже значимая фишка linq?
foreach которые внутри используют yield S>>yield это значимая фишка Linq.
НС>Нет.
Ну да. То то про ленивость никто даже не заикается?
IEnumerable строится большей частью через foreach и yield с построением автомата на уровне компиляции. https://mattwarren.org/2016/09/29/Optimising-LINQ/
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
НС>>И чо? А еще foreach там используется, причем намного чаще. Это тоже значимая фишка linq? S>foreach которые внутри используют yield
Или не используют.
S>>>yield это значимая фишка Linq. НС>>Нет. S> Ну да. То то про ленивость никто даже не заикается?
Ленивость и yield это разные вещи, особенно в случае IQueryable.
S>IEnumerable строится большей частью через foreach и yield с построением автомата на уровне компиляции. S>https://mattwarren.org/2016/09/29/Optimising-LINQ/
Здравствуйте, Sinclair, Вы писали:
S>>Можно пару нововведений и оптимизации для числодробилок? Речь о языке(сахаре) или о CLR? S>Обо всём. Там и язык и CLR и JIT допилили.
Можно подробнее про JIT?
У нас
<TargetFrameworkVersion Condition="$(BuildConfiguration) == 'v4.5'">v4.5.1</TargetFrameworkVersion>
<TargetFrameworkVersion Condition="$(BuildConfiguration) == ''">v4.0</TargetFrameworkVersion>
Я периодически вижу ассемблер в дебаггере и там всё так же печально, как и раньше. Детально не анализировал, но паттерны, типа
mov [A],rax
mov rcx,[A]
mov [B],rcx
бросаются в глаза сразу.
Где увидеть оптизации джиттера?
Всё сказанное выше — личное мнение, если не указано обратное.
Здравствуйте, alex_public, Вы писали:
_>К теме дискуссии это уже давно никакого отношения не имеет. А относилось исключительно к деградации кое-кого тут из технического специалиста в неграмотного тролля. Причём уже до такой степени, когда начинается вещание фантазий.
Началась все с того, что alex_public заявил:
_>Необходимость создавать дерево, обходить его с помощью рефлексии и генерировать нужный нам код при каждом вызове.
Здравствуйте, Философ, Вы писали:
Ф>Здравствуйте, Sinclair, Вы писали:
S>>>Можно пару нововведений и оптимизации для числодробилок? Речь о языке(сахаре) или о CLR? S>>Обо всём. Там и язык и CLR и JIT допилили.
Ф>Можно подробнее про JIT? Ф>У нас Ф> <TargetFrameworkVersion Condition="$(BuildConfiguration) == 'v4.5'">v4.5.1</TargetFrameworkVersion> Ф> <TargetFrameworkVersion Condition="$(BuildConfiguration) == ''">v4.0</TargetFrameworkVersion>
Ф>Я периодически вижу ассемблер в дебаггере и там всё так же печально, как и раньше. Детально не анализировал, но паттерны, типа Ф>mov [A],rax Ф>mov rcx,[A] Ф>mov [B],rcx
Ф>бросаются в глаза сразу.
Ф>Где увидеть оптизации джиттера?
Здравствуйте, Философ, Вы писали:
Ф>Я периодически вижу ассемблер в дебаггере и там всё так же печально, как и раньше. Детально не анализировал, но паттерны, типа Ф>mov [A],rax Ф>mov rcx,[A] Ф>mov [B],rcx
Ф>бросаются в глаза сразу.
Ф>Где увидеть оптизации джиттера?
JIT умеет правильно обрабатывать SIMD интринсики, порождая обращения к векторным инструкциям.
JIT умеет устранять проверки выхода за границы диапазона при итерировании по Span<T>.
JIT умеет устранять вызовы конструкторов для value-типов, когда ими параметризован генерик.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Linq — это, по большому счёту, две фичи: S>1. Поддержка Expression в языке S>2. Поддержка query syntax. S>Первое — принципиально, второе — приятная вишенка на торте.
Что значит поддержка Expression в языке, это же библиотечный тип просто? Поддержка в языке это как раз query syntax.
Здравствуйте, Sharov, Вы писали:
S>Здравствуйте, Sinclair, Вы писали:
S>>Linq — это, по большому счёту, две фичи: S>>1. Поддержка Expression в языке S>>2. Поддержка query syntax. S>>Первое — принципиально, второе — приятная вишенка на торте.
S>Что значит поддержка Expression в языке, это же библиотечный тип просто? Поддержка в языке это как раз query syntax.
Именно что поддержка в языке. Следующая конструкция создаст компилятором дерево выражений
Expression<Func<int, boo>> expr = t => t == 1;
Что аналогично вот этому (спасибо что за меня это компилятор делает)
Здравствуйте, Sharov, Вы писали: S>Что значит поддержка Expression в языке, это же библиотечный тип просто? Поддержка в языке это как раз query syntax.
Поддержка в языке — это возможность передать x => x>a туда, где ожидается Predicate<X>. Без этого не работает вообще ничего, кроме тупого кода типа Linq2Objects.
Query Syntax — ортогонален этой штуке; реально могучие вещи в нём — это SelectMany и поддержка let. Всё остальное — ну, так.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
. Это по поводу двумерных массивов и свёрток с ядром. S>Как раз в "базовой архитектуре" всё хорошо.
1. Я не вижу там поборотого выхода за границы для случаев, когда расстояние до соседа не есть некая константа.
2. И это всё далеко не "базовая архитектура". За потраченную тобой трудоёмкость более-менее приемлемый велосипед можно и на плюсах навертеть.