Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>>>А почему для лямбд это трудно, а для local functions нет? В чём разница? Лямбды завязаны на какое-то ABI jit'а?
S>>Неа, потому что лямбды — это делегаты, их значение может меняться в рантайме.
EP>В каком смысле? Что это даёт по сравнению с локальными функциями?
void Do(Action a)
{
a(); // вызываемый метод неизвестен при компиляции
}
Вперёд, оптимизируйте на здоровье
И не забыть про a.Target, a.BeginInvoke() etc.
Тут разве что .net native поможет, там всё как раз в один бинарник собирается. Но до оптимизации .net native руки дойдут ооочень не скоро. Как минимум не в следующем релизе.
S>>Локальные функции ничем не отличаются от вызова приватного метода, для них отдельных приседаний делать не надо.
EP>Насколько я понял по форме отличий мало, отличаются реализации. Что мешает для старой формы сделать быструю реализацию?
Возможнось передать лямбду в чужой код.
EP>Тут просто часто говорят что лямбды в C# медленные, постоянные аллокации и т.п. — по сути стоит выбор между удобством и скоростью — я вот и не понимаю почему их не оптимизировать в компиляторе, чтобы не было такой дилеммы там где её быть не должно.
Вы их больше слушайте. Чтобы уткнуться в лямбды — надо оччень сильно постараться, причём писать код не включая мозг там будет обязательным условием.
ТынцАвтор: Sinix
Дата: 27.11.14
EP>А создание лямбды дорогое?
2.31*10
8 calls per sec. Хватит?