Раньше я работал над IronLua в свободное время. В настоящее время выполняется лексирование и синтаксический анализ. Я как бы перестал работать над этим из-за разочарования, поскольку реализовать сопрограммы Lua в .NET без использования грязных хаков для потоковой передачи непросто. Это связано с тем, как я компилирую функции Lua, и эту проблему мне нужно решить на раннем этапе разработки компилятора.
Я исследовал реализации сопрограмм, и оказалось, что мои первоначальные представления о продолжениях были правильными.
] Поскольку создание сопрограмм, yield и другие операции являются не ключевыми словами языка, а функциями в таблице «сопрограмм», я не могу статически переключиться на компиляцию в стиле CPS, поскольку таблица сопрограмм могла быть перезаписана предыдущим сценарием. Хотя я понимаю, что сценарии, перезаписывающие таблицу сопрограмм, - редкое явление, я хотел бы быть осторожным и подойти к проблеме как можно более аккуратно.
Я планирую использовать стиль передачи продолжения для каждого выражения, нет неважно, находимся мы в сопрограмме или нет. За всем последует продолжение.
Помимо очевидной сложности написания компилятора в первую очередь и добавления к нему преобразования CPS, я обеспокоен этим дизайнерским решением и его последствиями для производительности.
I Мне нужен совет по реализации сопрограмм Lua в .NET.
Спасибо за ваше время.