2012-11-29 18 views
19

Mam aplikację .NET 4.0, która intensywnie wykorzystuje rekursję ogonową (zaprogramowaną w F #). Działa na maszynie .NET VM, ale kończy się na Mono-3.0.1.Eliminacja ogona w Mono

Próbowałem uruchomić z mono --optimize=tailc, ale to nie wydaje się niczego zmieniać.

Czy istnieje sposób zmuszenia mono do eliminacji ogonów? Czy istnieje sposób na zwiększenie maksymalnego rozmiaru stosu w mono?

+1

https://bugzilla.novell.com/show_bug.cgi?id=476785 - [Ta strona] (http://www.mono-project.com/Runtime_Projects) mówi, że jest on przetwarzany, ale nie jest wyświetlany data zakończenia. –

+0

[Ta strona] (http://www.mono-project.com/Mono_Project_Roadmap) mówi, że Tail Calls w F # zostały naprawione w wersji 2.12 –

+0

2.12 zmieniono nazwę na 3.0; i tak mówi "optymalizacje", a nie "wszystkie optymalizacje", więc domyślam się, że ten, który uderza Nikhil, nie jest jeszcze ustalony. – knocte

Odpowiedz

1

Jest bardzo podobny nowsza pytanie pomocnych odpowiedzi: Stack size under Mono

Jak Robert Harvey już zauważył w komentarzach, Mono został uszkodzony/niekompletny wsparcie wezwanie ogon dla F # (bug 476785: Tail call support in F#). Napraw ten problem to on Mono's runtime ongoing projects list.

Wielkość stosu można zwiększyć za pomocą konstruktora System.Threading.Thread lub w nagłówku PE. Jednak ten sposób jest bardzo łatwy w użyciu. Aby zmienić PE, prawdopodobnie będziesz need MS Visual Studio, ponieważ nie może być alternatywy dla jego editbin.exe /stack.