Как реализованы сопрограммы? - PullRequest
4 голосов
/ 09 августа 2010

У меня есть вопрос о реализации сопрограмм.Сначала я увидел coroutine на Lua и Python без стека.Я мог понять его концепцию и то, как использовать ключевое слово yield, но не могу понять, как оно реализовано.

Могу ли я получить некоторые объяснения о них?

Ответы [ 2 ]

3 голосов
/ 09 августа 2010

Сопрограмма инициируется нажатием целевого адреса, затем каждый переключатель сопрограммы обменивает текущий ПК с вершиной стека, который в конечном итоге должен быть вытолкнут, чтобы завершить сопрограммирование.

2 голосов
/ 09 августа 2010

См. Также: Реализация поддержки «Генератора» на пользовательском языке . Генераторы - это, по сути, ограниченная форма (полу) сопрограмм, большая часть того, что обсуждается в этом вопросе, применима и здесь.

Также: Как исключения реализованы под капотом? Хотя исключения, очевидно, сильно отличаются от сопрограмм, они оба имеют что-то общее: оба являются продвинутыми универсальными конструкциями потока управления. (На самом деле вы можете реализовать сопрограммы, используя исключения и исключения, используя сопрограммы.)

...