Здравствуйте, alex_public, Вы писали:
_>О да, написать "A a;" это конечно же намного сложнее, чем написать "A a=new A;". )
Вы мне лучше расскажите, что будет, если я потом напишу
return &a;
Вся штука escape-анализа — в том, что он
сам определяет, передаю ли я ссылку за пределы скоупа, или можно обойтись стеком. С гарантиями.
А у вас в реальном коде будут постоянно развлечения на ровном месте. Для примитивных типов, понятное дело, семантика копирования заменяет вообще всё и решает все проблемы.
Вот только в дотнете для них же имеем ровно ту же реализацию.
А как только вы выйдете за их пределы и начнёте работать хотя бы со строками, вот тут и начнётся веселуха — либо беспричинные копирования со штрафом O(N), либо шансы нарваться на обращение к уничтоженному объекту, либо рефкаунты. А escape analysis позволяет программисту не думать о том, какие строки у него временные, а какие — надолго.
То есть уже 20 лет GC позволяет не думать об этом; EA всего лишь даёт дополнительную возможность снизить нагрузку на GC для алгоритмов с большим количеством временных объектов, в которых можно заменить new на stackalloc.