我想在 Silverlight 应用程序中运行一些任意用户代码。当然,我想嵌入一个图灵完备的语言(足够简单),但不想让用户在编写一些糟糕的(非终止)代码时锁定他们的浏览器。我不是要解决Halting Problem,只需在后台线程上运行此用户代码并按一下按钮即可终止它。
即使我愿意,我也不能在 Silverlight 中使用 Thread.Abort,那么如何中断后台解释器线程呢?
我目前的想法:
- 如果我手动解释一些语言,当然我可以在我想要的时候停止执行
- 我可以使用 Reflection.Emit 或编译表达式树,并插入类似的检查来提前终止
- 修改现有编译器以生成执行此操作的代码(可能是 F# 或 IronPython?)
- 由现有工具生成的后处理 IL(这是否排除了基于 DLR 的语言?)
我不禁认为必须有一个更简单的解决方案。