Re[8]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
От: DreamMaker  
Дата: 07.08.16 18:12
Оценка:
Здравствуйте, Denwer, Вы писали:

D>Мы свой проект сделали на С++(использовали Qt), конкуренты на Java. Теперь клиенты плюются на их софт, тормозной и жрущий память.


а что за проект, ну, примерно?

производительность в основном зависит от используемых алгоритмов.. по-настоящему талантливый быдлокодер хоть на асме напишет так, что безбожно тормозить будет.
ну раза в полтора разницу я могу еще поверить что с++ за счет нативности поимел, но не более того.
In P=NP we trust.
Re[11]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
От: CreatorCray  
Дата: 07.08.16 18:25
Оценка:
Здравствуйте, r.kamenskiy, Вы писали:

RK>Здесь обычно выбор между ассембелом и C/C++

Я бы вычекнул ассемблер. Уже давно для всех вменяемых платформ есть как минимум С.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[9]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
От: Evgeny.Panasyuk Россия  
Дата: 07.08.16 19:41
Оценка: 2 (2) +1 -1 :)))
Здравствуйте, DreamMaker, Вы писали:

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


Да, да, да, "всё в базу упираются", "мы вас на алгоритмах заборем", "сделаем быстрее на 2000%" — старые песни о главном

DM>ну раза в полтора разницу я могу еще поверить что с++ за счет нативности поимел, но не более того.


Как ты тогда объяснишь факт того, что C++ скомпилированный в ненативный JavaScript (в веб-браузере, Карл!) оказался практически в два раза быстрее кода на C#? (1
Автор: Evgeny.Panasyuk
Дата: 07.06.15
, 2
Автор: Evgeny.Panasyuk
Дата: 20.06.15
)

C++ быстрый не от того что нативный, а от того что даёт бесплатные, либо крайне дешёвые абстракции.
Если на C#/Java писать код без абстракций, то по скорости он будет близок к аналогу на C++ — но такого кода будет намного больше, либо придётся писать кодогенераторы по сути эмулирующие работу компиляторов C++. Собственно подобной хренью
Автор: Evgeny.Panasyuk
Дата: 23.03.16
и приходится заниматься на управляемых языках
Re[10]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
От: Evgeny.Panasyuk Россия  
Дата: 07.08.16 20:56
Оценка:
Sinix, а что смешного? Ты же сам намерял >8x
Автор: Sinix
Дата: 16.07.16
abstraction penalty на C#.
Re: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 07.08.16 21:55
Оценка:
Здравствуйте, Arsen.Shnurkov, Вы писали:

AS>Собственно, сборка мусора в Rust есть (опционально), а такого мощного статического анализатора в C# нет.


А где можно почитать про мощный статанализатор Rust?
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[10]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
От: Ночной Смотрящий Россия  
Дата: 07.08.16 22:38
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Собственно подобной хренью
Автор: Evgeny.Panasyuk
Дата: 23.03.16
и приходится заниматься на управляемых языках


Тебя, похоже, окончательно заклинило.
Re[11]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
От: Evgeny.Panasyuk Россия  
Дата: 07.08.16 22:53
Оценка: :))
Здравствуйте, Ночной Смотрящий, Вы писали:

НС>Тебя, похоже, окончательно заклинило.


Ты, похоже, помимо того что врун
Автор: Evgeny.Panasyuk
Дата: 06.07.16
, так ещё и хамло
Re[9]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
От: so5team https://stiffstream.com
Дата: 08.08.16 06:26
Оценка:
Здравствуйте, DreamMaker, Вы писали:

DM>ну раза в полтора разницу я могу еще поверить


Т.е. вы можете поверить, что только из-за использования C++ вместо Java видеофайл обрабатывается за 60 минут вместо 90 минут, нода держит 150K коннектов вместо 100K, время отклика составляет 100ms вместо 150ms... Но вот поверить в то, что просадка по производительности в 1.5 раза может кем-то восприниматься как тормознутость, уже не можете?
Re[2]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
От: Evgeny.Panasyuk Россия  
Дата: 08.08.16 07:01
Оценка:
Здравствуйте, kochetkov.vladimir, Вы писали:

AS>>Собственно, сборка мусора в Rust есть (опционально), а такого мощного статического анализатора в C# нет.

KV>А где можно почитать про мощный статанализатор Rust?

Предполагаю что имелись в виду разнообразные статические ограничения, borrow checker, lifetime inference и т.п.
Re[11]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
От: Sinix  
Дата: 08.08.16 07:30
Оценка: +3
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Sinix, а что смешного? Ты же сам намерял >8x
Автор: Sinix
Дата: 16.07.16
abstraction penalty на C#.


Ну как сказать... вот первоначальная цитата:

Вот тут C++ код скомпированный в JavaScript и запущенный в Firefox показывает скорость близкую к native'у — 75ms, на native C++ было 60ms, на C# — 69ms.
Если на C# использовать не низкоуровневый цикл, а transform и лямбду (как было на C++) — то получается 141ms.


Она у тебя магией превращается в

C++ скомпилированный в ненативный JavaScript (в веб-браузере, Карл!) оказался практически в два раза быстрее кода на C#?


Ну да блин, _внезапно_ шарп не инлайнит делегаты, не использует автоматом simd, не выполняет автовекторизацию и не делает ещё кучу плюшек (что, в принципе, может быть поправлено в .net native, но явно не в ближайшем будущем). Ну так про это и надо писать, а не передёргивать.

Попробую намекнуть: в том же топике тот же самый код, скормленный компилятору 2013й студии выполнялся с Elapsed = 189.011 ms. Собсно вопрос: как я буду выглядеть, если из топика в топик буду рассказывать, что шарп быстрей плюсов в три раза (куча восклицательных знаков, му-ха-ха по выбору)?


UPD
EP>Ты же сам намерял >8x
Автор: Sinix
Дата: 16.07.16
abstraction penalty на C#.


Ну так снова то же самое — сравниваем вариант с вызовом делегата и без делегата внутри tight loop при очень дешёвом делегате. Для боль-менее тяжёлого кода (см результаты для сравнения строк) разницы не видно, для критичных мест можно не полениться и расписать вручную. Хотя правильный вариант, разумеется, пересмотреть алгоритм. Потому что утыкаться в "мы миллионы раз в секунду ищем элемент с минимальным значением поля"... Тут точно надо консерваторию править.
Отредактировано 08.08.2016 7:41 Sinix . Предыдущая версия .
Re[12]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
От: Evgeny.Panasyuk Россия  
Дата: 08.08.16 07:58
Оценка: +1
Здравствуйте, Sinix, Вы писали:

EP>>Sinix, а что смешного? Ты же сам намерял >8x
Автор: Sinix
Дата: 16.07.16
abstraction penalty на C#.

S>Ну как сказать... вот первоначальная цитата:
S>

S>Вот тут C++ код скомпированный в JavaScript и запущенный в Firefox показывает скорость близкую к native'у — 75ms, на native C++ было 60ms, на C# — 69ms.
S>Если на C# использовать не низкоуровневый цикл, а transform и лямбду (как было на C++) — то получается 141ms.

S>Она у тебя магией превращается в
S>

S>C++ скомпилированный в ненативный JavaScript (в веб-браузере, Карл!) оказался практически в два раза быстрее кода на C#?

S>Ну да блин, _внезапно_ шарп не инлайнит делегаты, не использует автоматом simd, не выполняет автовекторизацию и не делает ещё кучу плюшек (что, в принципе, может быть поправлено в .net native, но явно не в ближайшем будущем). Ну так про это и надо писать, а не передёргивать.

Я не передёргиваю, это же как раз отличная иллюстрация тому что я написал в том же сообщении:

EP>C++ быстрый не от того что нативный, а от того что даёт бесплатные, либо крайне дешёвые абстракции.
EP>Если на C#/Java писать код без абстракций, то по скорости он будет близок к аналогу на C++ — но такого кода будет намного больше

Или ты не дочитал до этого места?
То есть код на одинаковом уровне абстракций оказался медленнее почти в два раза (медленнее чем в веб-браузере, Карл!)
А вот код на C# написанный на более низком уровне, уже приблизился к высокоуровнему коду C++ по скорости. О чём и речь — на C# можно написать быстрый код, но это будет низкоуровневая лапша, на Java ситуация ещё хуже из-за отсутствия структур

S>не использует автоматом simd, не выполняет автовекторизацию и не делает ещё кучу плюшек (что, в принципе, может быть поправлено в .net native, но явно не в ближайшем будущем).


Думаешь JavaScript там сделал автовекторизацию и заиспользовал SIMD?

S>UPD

EP>>Ты же сам намерял >8x
Автор: Sinix
Дата: 16.07.16
abstraction penalty на C#.

S>Ну так снова то же самое — сравниваем вариант с вызовом делегата и без делегата внутри tight loop при очень дешёвом делегате.

Так это abstraction penalty и есть, которой нет на C++. И чем больше уровней абстрации — тем больше penalty, это были всё примеры с примитивнейшими абстракциями.

S>для критичных мест можно не полениться и расписать вручную


Так а я о чём — на C# для быстрого кода "нельзя лениться" и приходится раскорячиваться

EP>Если на C#/Java писать код без абстракций, то по скорости он будет близок к аналогу на C++ — но такого кода будет намного больше

Отредактировано 08.08.2016 8:30 Evgeny.Panasyuk . Предыдущая версия . Еще …
Отредактировано 08.08.2016 8:30 Evgeny.Panasyuk . Предыдущая версия .
Re[13]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 08.08.16 09:32
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>То есть код на одинаковом уровне абстракций оказался медленнее почти в два раза (медленнее чем в веб-браузере, Карл!)
Так, а за что тогда я извинялся за 2 раза?
Ну вот в .Net Native и будут инлайнить как в C++. Про, что тебе Sinix и говорит.
и солнце б утром не вставало, когда бы не было меня
Re[12]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 08.08.16 15:32
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Я бы вычекнул ассемблер. Уже давно для всех вменяемых платформ есть как минимум С.


Однако даже там крайне полезно хотя бы в общих чертах знать ассемблер этой платформы, дабы быть в состоянии разобраться, чего там такого накомпилировал компилер, что нифига не работает
[КУ] оккупировала армия.
Re[14]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
От: Evgeny.Panasyuk Россия  
Дата: 08.08.16 15:47
Оценка:
Здравствуйте, Serginio1, Вы писали:

EP>>То есть код на одинаковом уровне абстракций оказался медленнее почти в два раза (медленнее чем в веб-браузере, Карл!)

S> Так, а за что тогда я извинялся за 2 раза?
S> Ну вот в .Net Native и будут инлайнить как в C++. Про, что тебе Sinix и говорит.

Как начнут инлайнить, так и сравним. Напоминаю что ветка началась с рассуждений о том что актуально использовать сейчас.
А в сферическом будущем могут например и для Python сделать супер оптимизатор без abstraction penalty.
Также выше был высказан очередной миф — мол C++ быстрее за счёт нативности "но не более того". Пример с компилированием C++ -> JavaScript и сравнением с аналогом на C# развеивает этот миф
Re[13]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
От: CreatorCray  
Дата: 08.08.16 17:23
Оценка: +1
Здравствуйте, koandrew, Вы писали:

K>Однако даже там крайне полезно хотя бы в общих чертах знать ассемблер этой платформы

Знать — обязательно, тут даже вопроса стоять не должно.
Но писать на нём не придётся ничего в 99% случаев.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[15]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 09.08.16 08:22
Оценка: -1
Здравствуйте, Evgeny.Panasyuk, Вы писали:

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


EP>>>То есть код на одинаковом уровне абстракций оказался медленнее почти в два раза (медленнее чем в веб-браузере, Карл!)

S>> Так, а за что тогда я извинялся за 2 раза?
S>> Ну вот в .Net Native и будут инлайнить как в C++. Про, что тебе Sinix и говорит.

EP>Как начнут инлайнить, так и сравним. Напоминаю что ветка началась с рассуждений о том что актуально использовать сейчас.

EP>А в сферическом будущем могут например и для Python сделать супер оптимизатор без abstraction penalty.
EP>Также выше был высказан очередной миф — мол C++ быстрее за счёт нативности "но не более того". Пример с компилированием C++ -> JavaScript и сравнением с аналогом на C# развеивает этот миф

Еще раз С++ выигрывает за счет инлайнинга это известно всем. Шаблоны в отличие от дженериков по сути раскручиваются в исходный код с инлайнингом методов.
Вот и вся магия. Это же раскручивание можно сделать и для дженериков. Большой то разницы нет. Просто в .Net еще большие тормоза из-за рефлексии, так как при оптимизации кода нужно предоставить доступ для отображения. Поэтому в .Net Native рефлексию сильно ограничили вплоть до полного отказа.
А насчет питона, то он уже стал статически типизированным? https://habrahabr.ru/company/mailru/blog/242305/
Но на самом деле мало это кому нужно. Числодробилками мало кто занимается, а во главе угла скорость разработки.
Но возможность приблизить скорость выполнения .Net код к C++ это просто небольшой плюсик не более, что бы убрать у С++ ников их главный козырь.
и солнце б утром не вставало, когда бы не было меня
Re[16]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
От: CreatorCray  
Дата: 09.08.16 09:13
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Но на самом деле мало это кому нужно. Числодробилками мало кто занимается, а во главе угла скорость разработки.

На скорость разработки сильно влияют наличие готовых панельных бетонных блоков — универсальных библиотек, из которых можно быстро склепать многоэтажку.
Весь этот инструментарий, который позволяет хреначить не приходя в сознание как раз для "хренак, хренак и в продакшен" подходит очень даже хорошо.
Но вот проблема в том, что generic решения все построены на компромиссах, например "универсальность в ущерб производительности". Зато каждую панельку можно найти поимённо и посмотреть какие отчества у каждого камушка в ней.
Но когда возведение 18го этажа подходит к концу и вдруг выясняется что лифт на него едет сутки то тогда весь выигрыш в скорости клепания может быть съеден временем, потраченным на обтачивание уже выстроенных плит надфилями, чтоб лифт таки ехал быстрее.
Не, ну если надо нафигачить панельку из 5 этажей, где лифт не предусмотрен (юзеры пешкарусом дойдут!), или этажей в 10 где и на верхние этажи лифт едет всего то час (потерпят!), то тогда ок.
Порой народ вынужден вспоминать старые добрые техники из unmanaged, доставать надфили, распиливать ими панели на кирпичики и собирать из этих кирпичиков полупостроенный дом заново.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Re[17]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
От: Serginio1 СССР https://habrahabr.ru/users/serginio1/topics/
Дата: 09.08.16 10:50
Оценка:
Здравствуйте, CreatorCray, Вы писали:


CC>Но когда возведение 18го этажа подходит к концу и вдруг выясняется что лифт на него едет сутки то тогда весь выигрыш в скорости клепания может быть съеден временем, потраченным на обтачивание уже выстроенных плит надфилями, чтоб лифт таки ехал быстрее.

CC>Не, ну если надо нафигачить панельку из 5 этажей, где лифт не предусмотрен (юзеры пешкарусом дойдут!), или этажей в 10 где и на верхние этажи лифт едет всего то час (потерпят!), то тогда ок.
CC>Порой народ вынужден вспоминать старые добрые техники из unmanaged, доставать надфили, распиливать ими панели на кирпичики и собирать из этих кирпичиков полупостроенный дом заново.

Тогда зачем нужен будет C++. А так, MS и разрабатывает .Net Native, где в дженериках будут инлайнится переданные делегаты (функторы,лямбды). Вот с интерфейсами уже можно и в рантайме разбираться.
Все как в С++, такм тот же компилятор.
https://msdn.microsoft.com/ru-ru/library/dn584397(v=vs.110).aspx


.NET Native использует то же сервер, что и компилятор C++, который оптимизирован для статических сценариев предварительной компиляции.

.NET Native способна обеспечить повышение производительности для C++ разработчиков управляемого кода, так как она использует такие же или аналогичные средства, что и C++ за кулисами, как показано в следующей таблице.

и солнце б утром не вставало, когда бы не было меня
Re[18]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
От: Sinix  
Дата: 09.08.16 11:41
Оценка: 3 (1) +1
Здравствуйте, Serginio1, Вы писали:

S> Тогда зачем нужен будет C++.

Троллинг же.


S> А так, MS и разрабатывает .Net Native, где в дженериках будут инлайнится переданные делегаты (функторы,лямбды).


Одна проблема: если не будет ничего меняться, то это дело _очень_ неблизкое, не следующего за текущим релиза — точно. Пока .native находится в стадии "мы пробуем" — нестабильно всё.
Начиная от пайплайна который крайне своеобразен, т.к. достался в наследство от исследовательского проекта и затем использовался в cloud compiling в wp8 и в предке .native — project N.
И заканчивая собственно бэкендом — старый backend msvc, новый, плюс "беспроигрышный" вариант с RyuJIT AOT + llvm для максимального охвата платформ...

В общем речь сейчас идёт не про "перфоманс любой ценой", а о том, чтобы вылезти из песочницы winRT. Вот как оно состоится — можно будет начинать предметно обсуждать, что можно сделать с производительностью.
Re[16]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
От: chaotic-kotik  
Дата: 09.08.16 12:49
Оценка:
Здравствуйте, Serginio1, Вы писали:

S> Еще раз С++ выигрывает за счет инлайнинга это известно всем. Шаблоны в отличие от дженериков по сути раскручиваются в исходный код с инлайнингом методов.

S>Вот и вся магия. Это же раскручивание можно сделать и для дженериков. Большой то разницы нет. Просто в .Net еще большие тормоза из-за рефлексии, так как при оптимизации кода нужно предоставить доступ для отображения. Поэтому в .Net Native рефлексию сильно ограничили вплоть до полного отказа.

MS не может добить оптимизатор VC++ до уровня gcc четырехлетней давности (нет нормальной векторизации и девиртуализации). Как можно от них ждать чего-то интересного в .net native?
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.