2012-11-29 27 views
19

Ho un'applicazione .NET 4.0 che fa un uso pesante della ricorsione della coda (programmata in F #). Funziona bene su .NET VM, ma funziona senza stack su Mono-3.0.1.Eliminazione coda di coda in Mono

Ho provato a correre con mono --optimize=tailc ma questo non sembra cambiare nulla.

C'è un modo per forzare mono per eliminare le chiamate tail? C'è un modo per aumentare la dimensione massima dello stack in mono?

+1

https://bugzilla.novell.com/show_bug.cgi?id=476785 - [Questa pagina] (http://www.mono-project.com/Runtime_Projects) dice che è stato lavorato, ma non è previsto data di completamento. –

+0

[questa pagina] (http://www.mono-project.com/Mono_Project_Roadmap) dice che le chiamate Tail in F # sono state risolte nella versione 2.12 –

+0

2.12 è stato rinominato in 3.0; e comunque dice "ottimizzazioni", non "tutte le ottimizzazioni", quindi immagino che quello che Nikhil sta colpendo non sia ancora risolto – knocte

risposta

1

C'è una simile domanda più recente con risposte utili: Stack size under Mono

Come Robert Harvey già sottolineato nei commenti, Mono ha rotto il supporto/incompleta chiamata di coda per F # (bug 476785: Tail call support in F#). Correzione per questo problema è on Mono's runtime ongoing projects list.

Le dimensioni dello stack possono essere aumentate utilizzando il costruttore System.Threading.Thread o l'intestazione PE. Il modo System.Threading.Thread, does not work in Mono, però. Per la modifica del PE, sarà probabilmente need MS Visual Studio, poiché potrebbe non esserci alternativa al suo editbin.exe /stack.