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?
risposta
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.
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
@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#. –
- 1. convertire la ricorsione in "ricorsione della coda"
- 2. Ricorsione della coda in clojure
- 3. Come dovrei usare la modalità debug/release in Visual Studio?
- 4. La variabile non sta incrementando in C# Release x64
- 5. #defines automatico secondo Debug/Release config in Visual Studio 2010
- 6. Ricorsione della coda ed eccezioni in F #
- 7. .gitignore e progetto Visual Studio: Ignora directory bin/debug ma non bin/directory Release
- 8. Scala supporta l'ottimizzazione della ricorsione in coda?
- 9. Ricorsione della coda e ricorsione diretta in Erlang
- 10. Debug JavaScript in Visual Studio estremamente lento
- 11. Visual Studio: differenzia app.config per la modalità debug e release
- 12. Console App con Log4Net compila in Debug ma non in modalità Release
- 13. Fare ricorsione in coda in C++
- 14. Javascript i ++ troppa ricorsione, i + 1 ok in coda ricorsione
- 15. Perché si dovrebbe utilizzare l'iterazione invece della ricorsione della coda?
- 16. Debug di un eseguibile in Visual Studio
- 17. java.lang.StackOverFlowError in clojure ricorsione in coda
- 18. File PDB con librerie in Visual Studio 10
- 19. Debug JavaScript in Visual Studio 2008
- 20. Visual Studio break all in debug
- 21. Coefficiente binomiale con ricorsione della coda in LISP
- 22. vshost.exe non si chiude correttamente in Visual Studio 2015
- 23. In Visual Studio come aggiungere casi speciali per le versioni di debug e release?
- 24. Debug in .NET in modalità Release
- 25. Debug di immagini C++ non gestite in Visual Studio
- 26. Console.Writeline lavorando su x86, ma non x64
- 27. Come funziona il debug in Visual Studio?
- 28. bytecode lento con la ricorsione in coda
- 29. ifstream :: open non funzionante in modalità debug di Visual Studio
- 30. visivo Modalità amministratore Studio in Windows 10
se sai che il tuo codice può essere ottimizzato in coda, perché non lo fai da solo se ti affidi? – duedl0r
@ 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
forse potresti farlo con un po' di linq? sembra essere anche uno stile funzionale :) – duedl0r