Re[15]: За счет чего выстреливают языки?
От: Evgeny.Panasyuk Россия  
Дата: 17.07.15 21:56
Оценка: +1
Здравствуйте, VladD2, Вы писали:

EP>>А по факту, там где нужна скорость, биты таки выжимают везде (это можно дать ускорение на порядок, а то и несколько), в том числе и на Java. Вот конкретный пример, ручная нарезка массивов на структуры через байт-буфера, отказ от GC, и прочие кактусы радости:

EP>>http://www.youtube.com/watch?v=Q-7y1u9kZV0
VD>Случается... редко, правда. Это примерно как оптимизации на С++. Когда прижимает начинают ими заниматься, а до этого пишут в гражданском стиле.

Вот в C++ из "гражданского стиля" получается быстрый код, за счёт дешёвых абстракций.

"The going word at Facebook is that reasonably written C++ code just runs fast, which underscores the enormous effort spent at optimizing PHP and Java code. Paradoxically, C++ code is more difficult to write than in other languages, but efficient code is a lot easier [to write in C++ than in other languages]." – Herb Sutter at //build/, quoting Andrei Alexandrescu


VD>Собственно в дотнете нарезать ничего не надо, так как есть структуры.


Да, я показал экстремальный случай.
Тем не менее, C#'овские структуры далеко не всегда применимы из-за ограничений языка, я тебе уже показывал пример
Автор: Evgeny.Panasyuk
Дата: 11.10.14
.

VD>К экономией выделения памяти прибегают, но тоже в исключительных случаях.

VD>На С++ точно так же пытаются изворачиваться. Например, прибегают к пулам (регионам) и т.п.

На C++ это намного проще и естественней, например потому что есть placement new — объект можно создать практически в любом куске памяти. Попробуй на C# сделать эффективный Variant.

Помимо памяти/структур/GC — есть и другие проблемы. Например дорогие механизмы абстракций в C# — те же ФВП и замыкания.

VD>В Розлине (новом, менеджед-компиляторе шарпа) этим занимаются, чтобы не отставать от прошлой (плюсовой) версии. Вроде как результат получился сопоставимый по скорости с плюсовым.


И на C#, и даже на Java, можно написать код сопоставимый по скорости с кодом на C++ — я с этим не спорю, и даже постоянно это утверждаю.
Вот только уровнем такой код будет намного ниже чем аналог на C++, и этого кода будет намного больше. Например придётся вручную пилить все циклы, в то время как на C++ можно взять высокоуровневые ФВП+замыкания и дать компилятору их заинлайнить.

VD>Причина перехода на шарп с плюсов банальна. Поддержка разросшегося языка стала дикой болью и стал препятствовать развитю языка.


Их старый компилятор скорей всего использовал старые/плохие технологии, и это было основной проблемой. Например их компилятор C++ кода вообще не имел AST (а может и не имеет до сих пор).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.