Сообщение Re[17]: Mногопоточность: C++ vs Erlang vs другие от 08.06.2015 21:03
Изменено 08.06.2015 21:04 Evgeny.Panasyuk
V>Кстате, прошелся я по твоей ссылке на обсуждение, и первый же пост перед глазами:
V>
V>You are right. Passing generator by reference to a function that you cannot see into the body, should inhibit this optimization.
V>Since lifetime can be stolen via move.
>>> Unless generator<T> has unspecified and surprising semantics[1], no, it is not the same, In the examples I'm swapping the generator of 'baz' with another generator with a different lifetime.
V>What I meant is that applying heap elision optimization is unsafe and thus should not happen in this example.
V>Sure, generator is movable. Coroutine state is not. Therefore, if move happens or you cannot prove that it cannot happen as in you baz() example. Coroutine Frame Allocation Elision Optimization (CFAEO should be inhibited.
V>Я называл проталкиваемую тобой технику итератором-генератором-трансформатором, тут просто называют генератором. ))
Генератор это use-case который поддерживают оба варианта. Конкретно здесь говорится про генератор на базе корутин Microsoft, а не то что ты подумал.
V>Последняя выделенаня фраза — это то, что я писал тебе в предыдущем сообщении.
Так это в рамках proposal'а Microsoft state корутины не перемещаем, да ещё и плохо оптимизируем — о чём я и сказал в первом сообщении на тему.
Это сообщение одного из авторов этого proposal'а, в который он говорит что да — в этом случае оптимизация аллокаций его корутин невозможна То есть помимо меньших возможностей здесь ещё и меньшая скорость.
V>Кстате, прошелся я по твоей ссылке на обсуждение, и первый же пост перед глазами:
V>
V>You are right. Passing generator by reference to a function that you cannot see into the body, should inhibit this optimization.
V>Since lifetime can be stolen via move.
>>> Unless generator<T> has unspecified and surprising semantics[1], no, it is not the same, In the examples I'm swapping the generator of 'baz' with another generator with a different lifetime.
V>What I meant is that applying heap elision optimization is unsafe and thus should not happen in this example.
V>Sure, generator is movable. Coroutine state is not. Therefore, if move happens or you cannot prove that it cannot happen as in you baz() example. Coroutine Frame Allocation Elision Optimization (CFAEO should be inhibited.
V>Я называл проталкиваемую тобой технику итератором-генератором-трансформатором, тут просто называют генератором. ))
Генератор это use-case который поддерживают оба варианта. Конкретно здесь говорится про генератор на базе корутин Microsoft, а не то что ты подумал.
V>Последняя выделенаня фраза — это то, что я писал тебе в предыдущем сообщении.
Так это в рамках proposal'а Microsoft state корутины не перемещаемы, да ещё и плохо оптимизируемы — о чём я и сказал в первом сообщении на тему.
Это сообщение одного из авторов этого proposal'а, в который он говорит что да — в этом случае оптимизация аллокаций его корутин невозможна То есть помимо меньших возможностей здесь ещё и меньшая скорость