我怀疑这是实际问题,而不是可行性问题。我怀疑很少有这种限制 实际上 是 无法解决 的问题-但是编译器中增加的复杂性将非常重要。
我已经遇到过一些类似的事情:
在每种情况下,都有可能获得更多的自由度,但代价是编译器的额外复杂性。团队做出了务实的选择,为此我称赞他们- 我宁愿使用一种限制性更强的语言,并具有99.9%的准确编译器(是的,有错误;我第二天就碰到了一个)而不是更多灵活的语言,无法正确编译。
编辑:这是一个为什么它可行的伪证明。
考虑到:
现在转换:
try
{
Console.WriteLine("a");
yield return 10;
Console.WriteLine("b");
}
catch (Something e)
{
Console.WriteLine("Catch block");
}
Console.WriteLine("Post");
变成(某种伪代码):
case just_before_try_state:
try
{
Console.WriteLine("a");
}
catch (Something e)
{
CatchBlock();
goto case post;
}
__current = 10;
return true;
case just_after_yield_return:
try
{
Console.WriteLine("b");
}
catch (Something e)
{
CatchBlock();
}
goto case post;
case post;
Console.WriteLine("Post");
void CatchBlock()
{
Console.WriteLine("Catch block");
}
唯一的重复是设置try / catch块-但这确实是编译器可以做的。
我可能在这里错过了一些东西-如果是这样,请告诉我!