Tail ruft in Mono auf

8

Ich habe Code in F #, der unter .net funktioniert, aber den Stapel unter Mono überläuft. Ein damit zusammenhängendes Problem ist, dass es anscheinend so lange dauert, bis der Stack, der ihm möglicherweise zur Verfügung steht, abläuft (es wird mit System.Threading.Thread (ts, 1000000000) gestartet). Soweit ich das beurteilen kann, ist die Falte, in der sie stirbt, tail-rekursiv und der Stack-Trace sieht so aus, als ob die Tail-Optimierung nicht durchgeführt wird. Ich laufe 3.2.1 mit --optimize = tailc.

Weiß jemand bitte genau, welche Arten von Tailaufrufen den aufrufenden Stack entfernen und welche nicht? Oder alternativ, wie man mehr Stapel zuweist? Vielen Dank.

Ich bin mir bewusst, Beseitigung von Schwanzstößen in Mono

EDIT: Hier ist eine Gliederung des Codes wie in den Kommentaren gefordert. Es ist ein Teil einer Faltung über eine große Datenstruktur, aber die fehlerhafte Stacktrace hat nur mapk und myfold darauf.

%Vor%     
Joe Huha 26.08.2013, 18:24
quelle

1 Antwort

1

Soweit ich weiß, ist --optimize=tailc kein unterstütztes F # Compiler-Flag.

Ich glaube nicht, dass es eine Möglichkeit gibt, die Unterstützung für die Optimierung von Rufrufen in Mono zu aktivieren / deaktivieren (sowieso von der Befehlszeile aus); Das F # -Compiler-Flag zum Aktivieren von Tail-Call-Optimierungen lautet --tailcalls+ , aber laut Compiler-Optionen (F #) das ist standardmäßig aktiviert.

Ich denke, Ihre beste Wahl, um dies gelöst zu bekommen, sind:

Jack P. 26.08.2013 19:02
quelle

Tags und Links