Una caratteristica utile di Scala è lazy val, in cui la valutazione di a valè ritardata fino a quando non è necessaria (al primo accesso).
Naturalmente, è lazy valnecessario avere un certo sovraccarico: da qualche parte Scala deve tenere traccia del fatto che il valore sia già stato valutato e la valutazione debba essere sincronizzata, poiché più thread potrebbero tentare di accedere al valore per la prima volta contemporaneamente.
Qual è esattamente il costo di a lazy val- c'è un flag booleano nascosto associato a a lazy valper tenere traccia se è stato valutato o no, che cosa è esattamente sincronizzato e ci sono altri costi?
Inoltre, supponiamo che io faccia questo:
class Something {
lazy val (x, y) = { ... }
}
È questo lo stesso che avere due distinti lazy vals xe yo faccio ad avere il sovraccarico solo una volta, per la coppia (x, y)?
bitmap$0campo è volatile nell'attuale implementazione (2.8).