2011-05-15 2 views
21

Mono 2.6 가비지 수집기의 부적절 함에 대한 보고서를 읽은 후 Mono 2.10을 사용하기로 결정했습니다. F 번호 안녕하세요 세계 프로그램처럼Mono에서 F #이 충돌 2.10

let rec f x acc = 
    if x = 0 then acc 
    else f (x - 1) (acc + 1) 

f 10 0 

등가 반복 C# 코드가 잘 실행 : 나는 다음과 같은 간단한 F # 프로그램과 2.10 런타임 충돌 것을 발견했다. F # 코드는 Mono 2.6 및 .Net에서도 작동합니다. 다른 사람이 이것을 재현 할 수 있습니까? 버그입니까 아니면 그냥 설치입니까?

여기 제가 시도한 다양한 런타임과 결과가 있습니다.

  • (데비안 짜기에 소스에서 컴파일)

    모노 2.10.2

    -- "Stack overflow: IP: 0x4153bb84, fault addr: (nil)" 
    
  • 모노 (데비안 짜기에 소스에서 컴파일) 2.8

    -- "Native stacktrace: ..." 
    
  • 모노 2.10.2 (Windows 바이너리)

    -- "mono.exe has stopped working" dialog. 
    
  • 모노 2.10.2 (VM웨어 이미지)

    -- Segmentation fault 
    
  • 모노 2.6.7은 (데비안 짜기와 함께 제공)을 사용

    -- Works fine 
    

은 F # 컴파일러는 2010 년 11 월 CTP에서였다.

+8

시도한 플랫폼/구성의 수를 허용했는데, 분명히 Mono의 버그입니다. 버그를 열고 실행 파일을 첨부하십시오. 감사. –

+1

이것은 아마도 모노의 꼬리 호출 최적화 부족 때문일 것입니다. http://flyingfrogblog.blogspot.com/2009/01/mono-does-not-support-tail-calls.html을 참조하십시오. – sashang

+3

@sashang : 나는 이것을 보았을 때 Mono의 꼬리 호출 처리를 테스트하는 중이었다. 이것이 a) 작은 입력에서 충돌하고 b) 생성 된 코드가 꼬리 호출을 포함하지 않고 명령형 루프 만 포함하기 때문에 이것이 여기에있는 원인이라고는 생각하지 않습니다. – petebu

답변