C#, walaupun terdapat faedah pengoptimuman panggilan ekor untuk fungsi rekursif yang cekap, pada masa ini tidak menyokongnya.
Cabarannya terletak pada pertukaran antara kelajuan pelaksanaan dan kerumitan pengoptimuman kod. Kompilasi Just-In-Time (JIT) mengutamakan kompilasi pantas berbanding analisis kod yang meluas. Walaupun Common Language Runtime (CLR) boleh menyokong pengoptimuman tail-call, pengkompil C# tidak menjana opcode yang diperlukan.
Pertimbangkan contoh ini:
<code class="language-csharp">private static void Foo(int i) { if (i == 1000000) return; if (i % 100 == 0) Console.WriteLine(i); Foo(i+1); }</code>
Malah Visual Studio 2008 gagal mengoptimumkan fungsi rekursif ini ke dalam gelung, menunjukkan had analisis pengkompil.
Bahasa seperti F# telah pun melaksanakan sambungan pengkompil yang diperlukan untuk menjana opcode yang sesuai untuk pengoptimuman panggilan ekor. Ini menunjukkan bahawa versi C# akan datang mungkin menggabungkan ciri ini. Walau bagaimanapun, sifat konservatif kompilasi Native Image Generator (NGen) kekal sebagai halangan yang berpotensi, kerana ia mengutamakan mengelakkan regresi prestasi.
Untuk menyelami topik ini dengan lebih mendalam, rujuk catatan blog yang dirujuk. Ia menawarkan maklumat terperinci tentang perubahan CLR dalam versi 4.0 yang berkaitan dengan pengoptimuman panggilan ekor dan kebergantungan seni binanya.
Atas ialah kandungan terperinci Mengapa C# Tidak Mengoptimumkan Rekursi Panggilan Ekor?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!