Re[25]: Да ну и фиг с этой Java-ой. .Net будет убит Rust-ом
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 10.08.16 10:50
Оценка: 1 (1)
Здравствуйте, Evgeny.Panasyuk, Вы писали:

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


EP>>>То есть ещё раз, код C# чисто по построению намного труднее оптимизировать — для оптимизаций до уровней аналогичных C++ нужно либо язык модифицировать, либо делать оптимизаторы намного более мощные чем оптимизаторы C++

G>>Язык тут не при чем.

EP>Именно язык тут и при чём. Если писать на C++ в стиле C# — динамические замыкания, динамический IEnumerable, множество индерекций по памяти — то получим примерно такие же тормоза

Что такое "данимические замыкания" ? В IL замыкания превращаются просто в классы.
Что такое "динамический IEnumerable"?
Это в смысле IEnumerable не по массивам? Зачем его использовать в performance-critical коде? А IEnumerable (foreach) с массивами действительно тормозит (накладные расходы на Enumerator оказываются больше, чем затратры на тело цикла). Как раз из-за недостатка инлайнинга, в C++ foreach нилайнится.
Или ты имеешь ввиду использование ФВП для обхода массивов? Оно действительно и в C++, и в C# плохо работает. И в C++ и в C# такой код вручную оптимизируется.


G>>Машинный код генерируется из IL. В нем все указанные тобой оптимизации делаются элементарно.

G>>Но у JIT нет столько времени на пребразования, как у компилятора C++.
EP>Что мешает сразу генерировать оптимизированный IL?
IL — высокоуровневый язык. Он и так достаточно оптимален на своем уровне. Кроме того IL еще и метаинформацию хранить должен.

EP>Я выше привёл пример с трансляцией C++ -> JS. JS ещё "хуже" IL, но тем не менее он работает быстро.

Что "хуже" ?
Работает быстро за счет "hotspot". Большинство движков JS перекомпилируют код на основании профиля использования. Кроме того "работает быстро" — это когда не используются ФВП.


EP>Можно взять этот JS выхлоп и перевести на C# — и он там тоже будет работать быстро, несмотря ни на какой IL

Если не используются ФВП, то да. Вообще при небольших усилиях скорость C# аналогична C++. Даже статью на эту тему писал https://habrahabr.ru/post/266373/
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.