Optimisation de la récursion de queue dans .NET/C#
La récursion de queue signifie que la dernière action de la fonction est de s'appeler avec un nouvel ensemble de paramètres. Dans de nombreux langages de programmation, la récursion de queue est automatiquement optimisée pour éviter de créer un nouveau cadre de pile pour chaque appel récursif. Cependant, dans la version actuelle du .NET Framework, cette optimisation n'est pas implémentée en C#.
Une des raisons est la complexité de la compilation JIT. L'optimisation de la récursion de queue nécessite que le JIT effectue une analyse approfondie pour garantir que le comportement de la fonction reste inchangé après l'optimisation. De plus, la compilation NGen (Native Image Generator) n'est pas conçue pour rendre ses optimisations plus agressives, éventuellement pour éviter d'introduire des bugs qui peuvent varier selon la méthode de compilation utilisée.
Le CLR (Common Language Runtime) prend en charge l'optimisation des appels de fin, mais le compilateur de langage doit générer les opcodes correspondants et le JIT doit être prêt à le respecter. Alors que le compilateur de F# génère les opcodes nécessaires, ce n'est pas le cas actuellement du compilateur de C#.
Bien que .NET/C# ne prenne actuellement pas en charge l'optimisation récursive de queue dans le JIT, certains modèles récursifs de queue peuvent être optimisés manuellement à l'aide du déroulement de boucles ou de monades d'état.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!