Comments 7
Статья, видимо, интересная, но перевод как обычно ужасен. Уже в первом разделе сразу две грубых фактических ошибки:
если их [регистров] оказывается достаточно, они [переменные] могут передаваться через стек
... конечно же, если НЕ достаточно
В завершении же функции изначально зарезервированное пространство стека сбрасывается до своего состояния на момент первого её вызова
... чего? Сбрасывается (точнее восстанавливается) указатель стека, а не состояние стека целиком.
И это явно косяки не оригинала, а переводчика, который ни в зуб ногой. Соответственно, возникает вопрос, какую чушь он напорол дальше. Я не знаю, как устроены корутины именно в С++, но из этой статьи с таким качеством перевода и не узнаю:(
Спасибо за отмеченные недочёты. К сожалению, исходный текст написан изначально достаточно неграмотно. Какие-то моменты я, как получается, интерпретировал неверно. Буду признателен, если вы укажете и на другие ошибки. Исправлю.
Что касается второй правки насчёт пространства стека, то вот исходный текст. Finally at the end of the function the stack space initially reserved get’s reset to where it was initially when the function first call happens then returns to the caller. По этому фрагменту можно примерно понять уровень знания английского языка автором. Возможно, и уровень знания плюсов, раз он ясно пишет про пространство стека, а не указатель, как исправили вы. Только вот тогда не понятно, как вписать в этот контекст указатель, когда всё предложение по смыслу выстроено вокруг пространства стека.
stack space initially reserved get’s reset
здесь подлежащее это первые четыре слова, "изначально зарезервированное пространство стека" [сбрасывается]. Не весь стек, а только зарезервированное пространство (т.е. указатель на вершину)
Вот сколько читаю про «вирусность» async-функций (ну т.е. что, однажды сконвертив одну, приходится всех ее вызывальщиков тоже конвертить), каждый раз удивяюсь, что на практике этой проблемы почему-то нет. Ну не возникает такой сложности и все. Да, иногда надо конвертить несколько функций, но оно как-то легко происходит все время и с небольшими изменениями в коде даже.
Наверное, это потому, что async - в основном про IO, а IO с самого начала в код попадает, и не бывает так (ну почти), чтобы функция была не-IO и вдруг стала IO.
Недостатки корутин в C++