2011-09-02 5 views
8

originariamente ho ricevuto un'eccezione StackOverflow in modalità x86. Come ho notato, x64 ottimizzerebbe la ricorsione della coda e quindi passai alla compilazione in x64. E ha funzionato con garbo in modalità debug .. Tuttavia, quando ho provato a eseguire il codice di rilascio, ha lanciato di nuovo lo stackoverflow .. qualche possibile motivo?l'ottimizzazione della ricorsione in coda si verifica in Visual Studio 10 x64 debug ma non in release?

+4

se sai che il tuo codice può essere ottimizzato in coda, perché non lo fai da solo se ti affidi? – duedl0r

+1

@ duedl0r: Apprezzo maggiormente lo stile di programmazione della programmazione funzionale, quindi sono un po 'riluttante a cambiare le mie ricusazioni della coda in alcuni loop ... – colinfang

+0

forse potresti farlo con un po' di linq? sembra essere anche uno stile funzionale :) – duedl0r

risposta

6

Le regole per quando vengono applicate le ottimizzazioni della ricorsione della coda sono complicate e in continua evoluzione.

Si consiglia vivamente di non utilizzare contare sulla ricorsione della coda da un punto di vista della correttezza.

+0

E 'stato inventato nel 1977, gcc, g ++, mvC++, lo schema lo usa, quindi si può dire, che questo è piuttosto un problema con le ottimizzazioni C♯ e non con il TCO stesso. Ho ragione? – kgadek

+2

@kgadek: se la lingua non garantisce la ricorsione della coda, non è possibile fare affidamento su di essa. Scheme è un esempio di linguaggio in cui è richiesta un'ottimizzazione delle chiamate tail da implementazioni linguistiche conformi. C# non è una lingua in cui è richiesto, quindi se fai saltare la pila a causa di troppe ricorsioni, non c'è nulla di cui puoi lamentarti, tranne forse per lo standard C#. –

Problemi correlati