Какую марку сопрограмм реализует Lua? - PullRequest
0 голосов
/ 29 декабря 2018

Может кто-нибудь сказать мне конкретно, что "аромат" сопрограммы Lua реализует?Я спрашиваю, потому что сопрограммы Lua, кажется, хорошо подходят для моей проблемы, когда я хочу иметь возможность приостановить функцию в различных точках, возможно, в рамках вызовов вложенных функций, а затем возобновить ее позже.Несмотря на наличие подобных конструкций типа «сопрограмма / генератор», это кажется невозможным, например, в C # или JavaScript.Какие другие языки поддерживают эти типы сопрограмм?

1 Ответ

0 голосов
/ 30 декабря 2018

В статье Сопрограммы в Lua , которая находится в свободном доступе, говорится:

Lua реализует концепцию асимметричных сопрограмм , которые обычно обозначаются как полусимметричные или полукутины [Marlin, 1980], [Dahl et al., 1972].Средства асимметричной сопрограммы называются так, потому что они включают в себя два типа операций передачи управления: одну для (повторного) вызова сопрограммы и одну для ее приостановки, причем последняя возвращает управление вызывающему сопрограмму.Асимметричная сопрограмма может рассматриваться как подчиненная вызывающей стороне, отношения между ними аналогичны отношениям между вызываемой и вызывающей подпрограммами.Другая дисциплина управления реализуется с помощью симметричных сопрограммных средств, которые обеспечивают одну операцию передачи для переключения управления на указанную сопрограмму.Поскольку симметричные сопрограммы способны передавать управление между собой, говорят, что они работают на одном иерархическом уровне.Следующие аргументы обосновывают, почему Lua предлагает асимметричные сопрограммы вместо симметричных средств или обоих механизмов.

...