2011-01-06 3 views
3

여기 재미있는 일이있는 것 같습니다. .NET 4.0 용 IronPython 2.6.2를 사용하면 다음과 같은 문제가 발생합니다. 가장 간단한 경우는 다음과 같다 : 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 초 후에 돌아옵니다.

무슨 일이 일어나고 있으며, 그 이유는 무엇입니까?

물론 내가 이것을 분리하게 만든 현실 세계의 사례는 훨씬 복잡하고 경솔한 것으로 보이지 않습니다.

감사 에이 킬

+0

.NET 3.5 용으로 컴파일 된 IronPython 2.6에는이 동작이 없습니다. – Akil

+0

C# 프로그램에 포함 된 IronPython과 동일한 코드가 실행될 경우 동작이 계속됩니다. – Akil

답변

1

나는 코드 플렉스에 버그를 여는 게 좋을 것. 여기서 일어나는 일은 IronPython의 OrExpression AST 노드가 유형을 발견하려고 시도한다는 것입니다. 그렇게하기 위해 왼손잡이 형과 오른손잡이 형을 봅니다. 그것들이 동일하다면, OrExpression은 왼쪽에 타입의 표현식을 생성 할 것이고, 이것은 다시 검사 될 것입니다. 두 번째 호출은 대부분 이것이 비례하여 증가하는 원인입니다.

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

로 : 간단히에서 OrExpression.cs을 변경

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

수정 문제.

+0

Dtoto for AndExpression. 어떻게 생각해? – Akil

+0

오, 그리고 BTW, 고마워, 내가 어떻게 대답을 표시합니까? 어쩌면 나는 그 일을하기 위해 필요한 권리를 아직 갖지 못했을 것입니다. – Akil

관련 문제