Re[5]: вопрос hi_octane про c#
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 21.08.20 18:28
Оценка:
Здравствуйте, a_g_99, Вы писали:



__>основной бенефит этого поделия был продать стаду баранов сикуэль сервер удачно купленный у сайбаса.

__>а теперь этот сикуэль сервер вообще никому не нужен а вы все еще тащите сюда этот мертворожденный индуззский выблев

Ну ты хоть почитал бы, прежде чем что то заявлять
https://linq2db.github.io/articles/releasenotes/2.0.0.html

Смыл Linq как раз в его кросс провайдерстве. То есть один и тот же код будет работать для разных провайдеров
и солнце б утром не вставало, когда бы не было меня
Re: вопрос hi_octane про c#
От: Je suis Mamut  
Дата: 21.08.20 18:38
Оценка: 2 (1)
__>хотел бы задать вопрос экзистенциальный

__>вы сказали — "если надо получить стабильное решение задачи и быстро то современный шарп имеет сотню очков форы". в чем это проявляется?


это не экзистенциальный вопрос
это почесать языками
выбор языка в формате "я померял у кого длиннее и выучил победителя" происходит редко
одни покажут тесты где java быстрее, другие — где c#, и все с довольным видом пойдут писать на своем языке на котором на самом деле пишут потому что когда-то работу на нем предложили — ну и попали в колею
а контора, в которой вы это делаете попала в колею из-за интеграции с каким-то существующим кодом, с которым было удобнее интегрироваться на java или, соответственно, c#
количество языков, которые я в какой-то степени освоил потому что они в какой-то метрике кроют остальных как бык овцу — наверное, десятка полтора
и совершенно уверен, что у вас их не меньше, но толку от этого мало — как пишем на том, что и раньше в резюме было написано, так и будем писать, изредка попадая в свежую колею нового языка, быстро завоевывающего популярность
Re[3]: вопрос hi_octane про c#
От: vorona  
Дата: 21.08.20 19:50
Оценка:
Здравствуйте, a_g_99, Вы писали:

>это ужасное поделие индузов не нужно. зачем это? все эти попытки МС переизобрести sql вместо того чтобы использовать вменяемое api для работы с коллекциями просто жалки. ну зачем вам уродливое подобие скул в вашем коде вообще?

>что там индуз Панкай оптимизирует с танцами и плясками?

Erik Meijer
Отредактировано 21.08.2020 19:52 vorona . Предыдущая версия .
Re[3]: вопрос hi_octane про c#
От: hi_octane Беларусь  
Дата: 21.08.20 22:17
Оценка: 9 (4) +5
__>вы тут много чего написали (и наверное правильно)
Да написал много. И понимал что иду на, возможно, фатальный риск Ведь в священных войнах каждое лишнее слово это дополнительный шанс оппоненту прикопаться, найти косяк, и отбросить всё, кроме найденного косяка.

__>но я бы хотел адресовать ваше внимание на производительности виртуальных машин c# и hotspot jvm под нагрузкой.

Hotspot JVM безусловно очень умный, но огромная часть его наворотов вынужденная — из-за родовых болезней Java. По опыту _моих_ проектов, при оптимизации производительности мы прежде всего смотрим на алгоритмическую сложность в узких местах, затем (или параллельно) на нагрузку на GC и memory traffic. До вопросов "что же там нагенерил JIT что оно так тормозит" дело доходит ну просто в редчайших случаях.
Кроме того я не рассматриваю одну лишь VM. Потому что мы всегда пишем на связке Язык-VM. Современный C# имеет много встроенных в язык возможностей минимизировать нагрузку на GC. Писать в стиле zero-copy и alloc-free в 2020-м на C# относительно просто только добавьте наконец варнинг на defensive copy, гады!.
Для JVM же проблема ]inplace, zero-copy каста даже массива интов в массив байт, насколько я могу судить по SO, до сих пор не решена. А с другой стороны у нас C#, где это вообще не проблема для произвольных пользовательских структур (без ссылок на управляемые объекты).

Ну а под нагрузкой — чего я только не видел под нагрузкой на JVM, когда писал на scala. И паузы на кучу секунду, и "пилу" когда потребление CPU скачет от 5 до 99% на разных ядрах, при равномерном потоке входящих пакетов, и т.п. Т.е. я не особо верю что без поддержки со стороны языка даже самый гениальный хотспот сравнится с кодом в котором изначально используется меньше буферов, изначально временные объекты создаются на стеке, и т.д.
Ну и поскольку я при любом раскладе буду для скептиков недостаточно убедителен — вот пост человека про работу "под нагрузкой" с ycombinator (часть большого обсуждения по нашей теме). То обсуждение от 2017-го года, и уверяю, сейчас в вопросе производительности всё стало ещё лучше чем было тогда.

__>тн числодробильный код может эффективно писаться только на С++ и любые потуги писать что то на vm сделанных индузами просто смешны. что касается эффективного многопоточного кода то java просто эталон здесь (с java memory model в том числе)

Я не согласен с тем что java, или вообще кто-то или что-то, может быть "просто эталон". Например повсеместное движение от Threads в сторону Tasks/Promises/Futures очень сильно снижает потребность в примитивах синхронизации (для прикладного программиста), по сравнению с, допустим, 2005-м годом. А библиотечный код обеих VM вылизывается и там и там настолько, что всё упирается в конкретный процессор, с его, процессора, memory model.
В интернетах есть например такой сайт с микробенчмарками, и там регулярно обновляются версии Core VM и Hotspot. Заодно можно сравнить в попугаях с C++. Ну а на нашем форуме разные чудеса демонстрирует Sinclair
Автор: Sinclair
Дата: 03.08.20
, заодно можно посмотреть как каскадёры могут использовать Linq.

__>это ужасное поделие индузов не нужно. зачем это? все эти попытки МС переизобрести sql вместо того чтобы использовать вменяемое api для работы с коллекциями просто жалки. ну зачем вам уродливое подобие скул в вашем коде вообще?

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

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

__>так а что они там подкручивают если сама vm очень слабенькая? если архитектура vm по умолчанию очень слабая что можно сделать в общем? что там индуз Панкай оптимизирует с танцами и плясками?

Чтобы мы могли содержательно продолжать беседу, было бы неплохо договориться о размерностях сил vm. Потому что в лошадиных силах цифры одни, а в ньютонах надо ещё делить на метры в секунду.
Re[3]: вопрос hi_octane про c#
От: Sinclair Россия https://github.com/evilguest/
Дата: 23.08.20 10:57
Оценка:
Здравствуйте, Sharov, Вы писали:
S>Можно пару нововведений и оптимизации для числодробилок? Речь о языке(сахаре) или о CLR?
Обо всём. Там и язык и CLR и JIT допилили.
Мои любимые — SIMD-интринсики. Т.е. я могу вручную оптимизировать код под AVX, не полагаясь на магию встроенного оптимизатора.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[4]: вопрос hi_octane про c#
От: alex_public  
Дата: 24.08.20 02:00
Оценка: -4 :)))
Здравствуйте, mrTwister, Вы писали:

_>>>Небольшой знаток kotlin, но когда смотрел его последний раз — например вменяемого linq там не было.

__>>это ужасное поделие индузов не нужно. зачем это? все эти попытки МС переизобрести sql вместо того чтобы использовать вменяемое api для работы с коллекциями просто жалки. ну зачем вам уродливое подобие скул в вашем коде вообще?
T>SQL-подобный синтаксис можно и не использовать, ничего при этом не теряя, linq не про это. Основной бенефит от linq — это построение expression tree, которые доступны в рантайме, что позволяет действительно удобно работать с СУБД. Например, можно в IDE вместе с поддержкой интеллисенса, выводом типов и ошибками компиляции писать код типа "users.Where(user => user.Age > 18).Select(user => user.Name)", а этот код в рантайме преобразуется в SQL запрос вида "SELECT Name FROM Users WHERE Age > p_arg1"

Ну т.е. ты тут по сути подтверждаешь слова своего оппонента, говоря что оригинальный (для работы с коллекциями) Linq никому не нужен, а имеют смысл исключительно вариации на тему linq2db, берущие от Linq expression tree и конвертирующие их в настоящий sql для настоящих СУБД.
Re[5]: вопрос hi_octane про c#
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 24.08.20 07:03
Оценка: +2
Здравствуйте, alex_public, Вы писали:

_>Ну т.е. ты тут по сути подтверждаешь слова своего оппонента, говоря что оригинальный (для работы с коллекциями) Linq никому не нужен, а имеют смысл исключительно вариации на тему linq2db, берущие от Linq expression tree и конвертирующие их в настоящий sql для настоящих СУБД.


Как раз оригинальный (для работы с коллекциями) Linq используется везде при работе с коллекциями напрополую.
Для элементарного Where вместо foreach , List. Или группировки, соединения. Это упрощает не только написание, но и читабельность кода
и солнце б утром не вставало, когда бы не было меня
Отредактировано 24.08.2020 10:11 Serginio1 . Предыдущая версия .
Re[5]: вопрос hi_octane про c#
От: mrTwister Россия  
Дата: 24.08.20 07:16
Оценка: +3
Здравствуйте, alex_public, Вы писали:

_>Ну т.е. ты тут по сути подтверждаешь слова своего оппонента, говоря что оригинальный (для работы с коллекциями) Linq никому не нужен, а имеют смысл исключительно вариации на тему linq2db, берущие от Linq expression tree и конвертирующие их в настоящий sql для настоящих СУБД.


Не совсем. Во-первых, у оппонента была претензия к SQL-подобному синтаксису, но никто и не заставляет использовать SQL-подобный синтаксис, лично я предпочитаю явно вызывать extension методы. Это чертовски удобно, так работать удобнее чем в java, но это все-таки синтаксический сахар, который принципиально ничего не меняет. А вот когда дело доходит до expression trees, то это уже принципиально иной уровень, это другая недоступная из java (да и из остальных mainstream языков) парадигма.
лэт ми спик фром май харт
Отредактировано 24.08.2020 7:17 mrTwister . Предыдущая версия .
Re[7]: вопрос hi_octane про c#
От: Artem Korneev США https://www.linkedin.com/in/artemkorneev/
Дата: 25.08.20 18:38
Оценка:
Здравствуйте, ·, Вы писали:

·>Он отвечал на конкретный вопрос "jvm производительнее под нагрузкой, чем dotnet?"


..да так и не ответил.
С уважением, Artem Korneev.
Re[6]: вопрос hi_octane про c#
От: alex_public  
Дата: 25.08.20 20:33
Оценка:
Здравствуйте, mrTwister, Вы писали:

_>>Ну т.е. ты тут по сути подтверждаешь слова своего оппонента, говоря что оригинальный (для работы с коллекциями) Linq никому не нужен, а имеют смысл исключительно вариации на тему linq2db, берущие от Linq expression tree и конвертирующие их в настоящий sql для настоящих СУБД.

T>Не совсем. Во-первых, у оппонента была претензия к SQL-подобному синтаксису, но никто и не заставляет использовать SQL-подобный синтаксис, лично я предпочитаю явно вызывать extension методы. Это чертовски удобно, так работать удобнее чем в java, но это все-таки синтаксический сахар, который принципиально ничего не меняет. А вот когда дело доходит до expression trees, то это уже принципиально иной уровень, это другая недоступная из java (да и из остальных mainstream языков) парадигма.


Во-первых создание и использование деревьев выражений вполне себе часто встречается в mainstream языках. Более того, вокруг этого даже построено множество сложных библиотек, реализующих различные DSL'и (далеко не только SQL).

Во-вторых к самой идее генерировать SQL по деревьям выражений в коде естественно никаких претензий быть не может — мы тут получаем сразу множество различных плюсов. Есть определённый набор претензий к реализации этой идеи в .net (т.к. некоторые особенности деревьев выражений linq портят производительность), но к самой идее вопросов думаю ни у кого нет. Так что не очень понятно с чего ты стал защищать мысль, с которой и так все согласны.

И в третьих, твой оппонент говорил именно о применение Linq к коллекциям, а не о генерации чего-то по деревьям выражений. И вот в таком применение Linq очевидно не самый лучший инструмент. Причём речь естественно не о синтаксическом сахаре, а именно о базовой архитектуре — IEnumeration и набору функций (а вот этот набор уже является следствием подобия бухгалтерскому инструменту под названием SQL).
Re[4]: вопрос hi_octane про c#
От: vdimas Россия  
Дата: 27.08.20 06:09
Оценка:
Здравствуйте, mrTwister, Вы писали:

T>ValueTask (асинхронный код без аллокаций)


Не совсем без аллокаций, просто позволяет переиспользовать task-like объекты.
Re[7]: вопрос hi_octane про c#
От: Sinclair Россия https://github.com/evilguest/
Дата: 27.08.20 07:36
Оценка:
Здравствуйте, alex_public, Вы писали:
_>И в третьих, твой оппонент говорил именно о применение Linq к коллекциям, а не о генерации чего-то по деревьям выражений. И вот в таком применение Linq очевидно не самый лучший инструмент. Причём речь естественно не о синтаксическом сахаре, а именно о базовой архитектуре — IEnumeration и набору функций (а вот этот набор уже является следствием подобия бухгалтерскому инструменту под названием SQL).
Ок, давайте поговорим о наборе функций. Напомните, чего вам не хватает в "базовой архитектуре" для IEnumerable<>?
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[7]: вопрос hi_octane про c#
От: Sharov Россия  
Дата: 27.08.20 08:24
Оценка: :)
Здравствуйте, alex_public, Вы писали:

_>Во-первых создание и использование деревьев выражений вполне себе часто встречается в mainstream языках. Более того, вокруг этого даже построено множество сложных библиотек, реализующих различные DSL'и (далеко не только SQL).


Все-таки у linq есть поддержка компилятора, т.е. встроен в язык, а у этих библиотек нет.

_>Есть определённый набор претензий к реализации этой идеи в .net (т.к. некоторые особенности деревьев выражений linq портят производительность),


Какие особенности?
Кодом людям нужно помогать!
Re[5]: вопрос hi_octane про c#
От: Ночной Смотрящий Россия  
Дата: 27.08.20 12:12
Оценка:
Здравствуйте, vdimas, Вы писали:

T>>ValueTask (асинхронный код без аллокаций)

V>Не совсем без аллокаций, просто позволяет переиспользовать task-like объекты.

В каком месте ValueTask обязательно порождает аллокации? И при чем тут переиспользование, если речь про замены классов на структуры? Моя твоя не понимай.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[8]: вопрос hi_octane про c#
От: Ночной Смотрящий Россия  
Дата: 27.08.20 12:13
Оценка: +1
Здравствуйте, Sharov, Вы писали:

S>Какие особенности?


Я уже знаю что будет дальше.
... << RSDN@Home 1.3.17 alpha 5 rev. 62>>
Re[9]: вопрос hi_octane про c#
От: Sharov Россия  
Дата: 27.08.20 12:42
Оценка:
Здравствуйте, Ночной Смотрящий, Вы писали:

S>>Какие особенности?

НС>Я уже знаю что будет дальше.

Я просто подзабыл что будет дальше
Кодом людям нужно помогать!
Re[8]: вопрос hi_octane про c#
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 27.08.20 13:14
Оценка:
Здравствуйте, Sharov, Вы писали:

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


_>>Во-первых создание и использование деревьев выражений вполне себе часто встречается в mainstream языках. Более того, вокруг этого даже построено множество сложных библиотек, реализующих различные DSL'и (далеко не только SQL).


S>Все-таки у linq есть поддержка компилятора, т.е. встроен в язык, а у этих библиотек нет.


Для примера LinqOptimizer

An automatic query optimizer-compiler for Sequential and Parallel LINQ. LinqOptimizer compiles declarative LINQ queries into fast loop-based imperative code. The compiled code has fewer virtual calls and heap allocations, better data locality and speedups of up to 15x

и солнце б утром не вставало, когда бы не было меня
Re[8]: вопрос hi_octane про c#
От: alex_public  
Дата: 27.08.20 14:52
Оценка: :)
Здравствуйте, Sharov, Вы писали:

_>>Во-первых создание и использование деревьев выражений вполне себе часто встречается в mainstream языках. Более того, вокруг этого даже построено множество сложных библиотек, реализующих различные DSL'и (далеко не только SQL).

S>Все-таки у linq есть поддержка компилятора, т.е. встроен в язык, а у этих библиотек нет.

С учётом того как встроено, то лучше уж была бы библиотека, а не такая кривизна.

_>>Есть определённый набор претензий к реализации этой идеи в .net (т.к. некоторые особенности деревьев выражений linq портят производительность),

S>Какие особенности?

Необходимость создавать дерево, обходить его с помощью рефлексии и генерировать нужный нам код при каждом вызове. Как минимум это должно было бы происходить один раз при старте приложения, а по нормальному вообще на стадии компиляции (с помощью метапрограммирования и статической интроспекции).
Re[8]: вопрос hi_octane про c#
От: alex_public  
Дата: 27.08.20 15:00
Оценка: :)))
Здравствуйте, Sinclair, Вы писали:

_>>И в третьих, твой оппонент говорил именно о применение Linq к коллекциям, а не о генерации чего-то по деревьям выражений. И вот в таком применение Linq очевидно не самый лучший инструмент. Причём речь естественно не о синтаксическом сахаре, а именно о базовой архитектуре — IEnumeration и набору функций (а вот этот набор уже является следствием подобия бухгалтерскому инструменту под названием SQL).

S>Ок, давайте поговорим о наборе функций. Напомните, чего вам не хватает в "базовой архитектуре" для IEnumerable<>?

Ой, ну вот уж с тобой я точно не буду дискутировать на эту тему. Просто потому что мы это уже делали и очень подробно, с примерами кода и т.п., обсудили это всё. И ты даже вполне себе согласился с большинством моих примеров. Странно, что ты забыл это и начинаешь по второму кругу. Если так и не вспомнишь, то я постараюсь найти на форуме ту темку и кинуть сюда ссылку на неё. Помнится там должны быть такие ключевые слова: произвольный доступ, двоичный поиск, рекурсии, двухмерные массивы (и их свёртки с ядром) и т.д.
Re[9]: вопрос hi_octane про c#
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 27.08.20 15:08
Оценка:
Здравствуйте, alex_public, Вы писали:

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


_>>>Во-первых создание и использование деревьев выражений вполне себе часто встречается в mainstream языках. Более того, вокруг этого даже построено множество сложных библиотек, реализующих различные DSL'и (далеко не только SQL).

S>>Все-таки у linq есть поддержка компилятора, т.е. встроен в язык, а у этих библиотек нет.

_>С учётом того как встроено, то лучше уж была бы библиотека, а не такая кривизна.


Посмотри LinqOptimizer
_>>>Есть определённый набор претензий к реализации этой идеи в .net (т.к. некоторые особенности деревьев выражений linq портят производительность),
S>>Какие особенности?

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


https://stackoverflow.com/questions/1447635/linq-between-operator

Ну затраты на создания дерева не большие. Так кто тебе мешает закешировать запросы?
https://docs.microsoft.com/ru-ru/dotnet/framework/data/adonet/ef/language-reference/compiled-queries-linq-to-entities
https://dzone.com/articles/performance-of-compiled-queries-in-entity-framewor
и солнце б утром не вставало, когда бы не было меня
Отредактировано 27.08.2020 15:16 Serginio1 . Предыдущая версия .
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.