Компилятор CPS для реализации сопрограмм

Раньше я работал над IronLua в свободное время. В настоящее время выполняется лексирование и синтаксический анализ. Я как бы перестал работать над этим из-за разочарования, поскольку реализовать сопрограммы Lua в .NET без использования грязных хаков для потоковой передачи непросто. Это связано с тем, как я компилирую функции Lua, и эту проблему мне нужно решить на раннем этапе разработки компилятора.

Я исследовал реализации сопрограмм, и оказалось, что мои первоначальные представления о продолжениях были правильными.

] Поскольку создание сопрограмм, yield и другие операции являются не ключевыми словами языка, а функциями в таблице «сопрограмм», я не могу статически переключиться на компиляцию в стиле CPS, поскольку таблица сопрограмм могла быть перезаписана предыдущим сценарием. Хотя я понимаю, что сценарии, перезаписывающие таблицу сопрограмм, - редкое явление, я хотел бы быть осторожным и подойти к проблеме как можно более аккуратно.

Я планирую использовать стиль передачи продолжения для каждого выражения, нет неважно, находимся мы в сопрограмме или нет. За всем последует продолжение.

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

I Мне нужен совет по реализации сопрограмм Lua в .NET.

Спасибо за ваше время.

6
задан Raine 17 June 2011 в 10:47
поделиться