SORU
29 Ocak 2009, PERŞEMBE


Neden't değil .Kuyruk özyineleme çağrısı/C# NET optimize?

Kuyruk özyineleme optimize hakkında this question buldum. Neden C olduğunu bilmek istiyorum ne# mümkün olduğunca kuyruk özyineleme optimize değil mi?

Somut bir dava için neden bu yöntemi bir döngü (VS2008 32 bit, eğer sorun buysa tabii) optimize değil mi?:

private static void Foo(int i)
{
  if (i == 1000000)
    return;

  if (i % 100 == 0)
    Console.WriteLine(i);

  Foo(i 1);
}

CEVAP
29 Ocak 2009, PERŞEMBE


TAM zamanında derleme bir zor denge arasında çok fazla zaman geçiriyor yapıyor derleme aşaması, (böylece yavaşlama kısa ömürlü uygulamalar oldukça) vs yapmamak yeterli analize devam uygulama rekabet içinde uzun vadeli bir standart aramam derleme.

İlginç ngen derleme adımları değil hedef olmak daha agresif kendi iyileştirmeleri, sanıyorum bu, çünkü onlar sadece yok olmasını böcek nerede davranışlara bağımlı olup JİT veya ngen sorumluydu makine kodu.

Kendisi CLR tail call optimizasyonu destek, ama belirli bir dil derleyici opcode ve JİT saygı için istekli olmalıdır ilgili oluşturmak için nasıl bilmeniz gerekir. F#'fsc ilgili işlem kodları üretecektir s basit bir yineleme için sadece bir döngü içine her şeyi doğrudan dönüştürebilir. C#'nin csc değil.

Bazı ayrıntılar için this blog post (şimdi son JİT değişiklikleri dikkate alarak güncel kuvvetle muhtemel) CLR 4.0 the x86, x64 and ia64 will respect it için değiştiğine dikkat edin

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • huyked

    huyked

    28 Mart 2008
  • kidrauhl

    kidrauhl

    15 Ocak 2007
  • Leigh Momii

    Leigh Momii

    10 Mayıs 2006