2011-01-06 5 views
3

ここで面白いことが起こっているようです。 IronPython 2.6.2 for .NET 4.0を使用すると、次のような動作が発生します。最も単純な場合は、以下の通りである: IronPythonのバグは長いブール式に関連していますか?

  1. は、私は次の行でそれを終了
  2. 私は次の行を5回

    False or False or False or False or False or False or \ 
    
  3. を入力インタラクティブシェルを起動

    False or False or False or False or False or False 
    

私はこれをタイプしているので、プロセスにclかなり良いデスクトップで30分のCPU時間を費やしたが、まだ返されていない。

ステップ2を1減らした場合、つまり、ラインが4回ある場合は、約1〜2分で戻ります。

私はステップ2を2つ減らした場合、行が3回あると、約1秒後に戻ります。

何が起こっているのですか、なぜですか?

もちろん、私がこれを分離する原因となった実際の例は、はるかに複雑であり、軽視するほどではありません。

おかげ Akil

+0

この現象は、.NET 3.5用にコンパイルされたIronPython 2.6には存在しません。 – Akil

+0

同じコードがC#プログラムに埋め込まれたIronPythonとして実行された場合、動作は持続します。 – Akil

答えて

1

私はCodePlexの上のバグを開くことをお勧めしたいです。ここで起こっていることは、IronPythonのOrExpression ASTノードがそのタイプを検出しようとしていることです。これを行うには、左手のタイプと右手のタイプを調べます。それらが同じ場合、OrExpressionは左側の型の式を生成します。これが再度チェックされます。その2番目の呼び出しは、これが比例して大きくなる原因です。問題を修正

Type lType = _left.Type; 
return lType == _right.Type ? lType : typeof(object); 
:に

return _left.Type == _right.Type ? _left.Type : typeof(object); 

:単にからOrExpression.csを変更します。

+0

Ditto for AndExpression。どう思いますか? – Akil

+0

おはようございます、ありがとうございます。これを答えにするにはどうすればいいですか?たぶん私はまだそれをするために必要な権利を持っていない。 – Akil

関連する問題