SORU
14 HAZİRAN 2010, PAZARTESİ


Ne'in (gizli) maliyet'In lazy val?Scala

Scala bir kullanışlı özelliği val bir değerlendirme Gerekli (ilk giriş) kadar gecikmeli olduğu lazy val.

Elbette, bir lazy val olmalı biraz havai bir yere Scala gerekir devam ettirmenin değeri olmadığını zaten değerlendirilmiş ve değerlendirme senkronize olmalı, çünkü birden çok iş parçacığı olabilir denemek değere erişmek için ilk kez aynı anda.

Tam olarak ne maliyeti lazy val - orada gizli bir boolean bayrak ile ilgili bir lazy val kaydını tutmak, eğer var değerlendirildiği ya da değil, tam olarak ne olduğunu senkronize ve herhangi bir daha fazla maliyeti?

Buna ek olarak, bunu yapmak sanırım:

class Something {
    lazy val (x, y) = { ... }
}

Bu lazy valiki ayrı s ile aynıdır x y ya da yükü sadece bir kez, 12 ** çift alabilirim?

CEVAP
15 HAZİRAN 2010, Salı


Bu scala mailing list alınır ve Java kod (Java değil) açısından lazy uygulama ayrıntıları verir:

class LazyTest {
  lazy val msg = "Lazy"
}

bir şeyler aşağıdaki Java kodu eşdeğeri için derlendi:

class LazyTest {
  public int bitmap$0;
  private String msg;

  public String msg() {
    if ((bitmap$0 & 1) == 0) {
        synchronized (this) {
            if ((bitmap$0 & 1) == 0) {
                synchronized (this) {
                    msg = "Lazy";
                }
            }
            bitmap$0 = bitmap$0 | 1;
        }
    }
    return msg;
  }

}

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Jeb Corliss

    Jeb Corliss

    17 Kasım 2006
  • Justin Davis

    Justin Davis

    14 Ocak 2008
  • Showtime

    Showtime

    21 HAZİRAN 2006