SORU
4 Kasım 2009, ÇARŞAMBA


Scala destek kuyruk özyineleme optimizasyonu mu?

Scala destek kuyruk özyineleme optimizasyonu mu?

CEVAP
5 Kasım 2009, PERŞEMBE


Scala diğer posterler dediğim gibi derleme zamanı at kuyruk özyineleme optimizasyonu yapar. Yani, bir kuyruk özyinelemeli fonksiyon dönüştürülmüş bir döngü ile derleyici (bir yöntemi çağırmak olduğunu dönüştürdü içine atlama), olarak görülebilir, gelen yığın izleme zaman çalışan bir kuyruk özyinelemeli fonksiyon.

Aşağıdaki kod deneyin:

def boom(n: Int): Nothing = if(n<=0) throw new Exception else boom(n-1)
boom(10)

ve yığın izleme inceleyin. Fonksiyon patlaması için sadece bir ara - bu nedenle derlenmiş bayt kodu özyinelemeli değil.

Orada bir öneri etrafında yüzen implement tail calls at the JVM level - bence bir çok şey yapmak, daha sonra JVM olabilir çalışma zamanı en iyi duruma getirme, yerine derleme zamanı en iyi duruma getirme Kodu - ve muhtemelen demek daha esnek kuyruk özyineleme. Temelde a tailcall invoke davranırlar tıpkı normal bir yöntem invoke ama bırak yığın arayan güvenli olduğunda bunu yapmak için - bu şartname JVM bildiren yığın çerçeveleri muhafaza edilir, bu yüzden TAM zamanında yapmalı bazı statik kod analizi için öğrenirse yığın çerçeveler asla olacak kullanılan.

Bu mevcut durumu proto 80%. Java 7 için zamanında yapılacaktır sanmıyorum (invokedynamic daha büyük bir önceliğe sahiptir, ve uygulaması neredeyse bitti) ama Java 8 uygulanması.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • knopik96

    knopik96

    7 Mayıs 2011
  • Major FX

    Major FX

    6 HAZİRAN 2012
  • MikeyMacintosh

    MikeyM

    28 Aralık 2009