স্কালা এসআইপি -20 অলস ভেলের একটি নতুন বাস্তবায়ন প্রস্তাব করেছে, যা আরও সঠিক তবে "বর্তমান" সংস্করণের চেয়ে 25% কম ধীর।
প্রস্তাবিত বাস্তবায়ন দেখে মনে হচ্ছে:
class LazyCellBase { // in a Java file - we need a public bitmap_0
public static AtomicIntegerFieldUpdater<LazyCellBase> arfu_0 =
AtomicIntegerFieldUpdater.newUpdater(LazyCellBase.class, "bitmap_0");
public volatile int bitmap_0 = 0;
}
final class LazyCell extends LazyCellBase {
import LazyCellBase._
var value_0: Int = _
@tailrec final def value(): Int = (arfu_0.get(this): @switch) match {
case 0 =>
if (arfu_0.compareAndSet(this, 0, 1)) {
val result = 0
value_0 = result
@tailrec def complete(): Unit = (arfu_0.get(this): @switch) match {
case 1 =>
if (!arfu_0.compareAndSet(this, 1, 3)) complete()
case 2 =>
if (arfu_0.compareAndSet(this, 2, 3)) {
synchronized { notifyAll() }
} else complete()
}
complete()
result
} else value()
case 1 =>
arfu_0.compareAndSet(this, 1, 2)
synchronized {
while (arfu_0.get(this) != 3) wait()
}
value_0
case 2 =>
synchronized {
while (arfu_0.get(this) != 3) wait()
}
value_0
case 3 => value_0
}
}
জুন ২০১৩ পর্যন্ত এই এসআইপি অনুমোদিত হয়নি। আমি আশা করি এটি মেলিং তালিকার আলোচনার ভিত্তিতে স্ক্যালার ভবিষ্যতের সংস্করণে অনুমোদিত এবং অন্তর্ভুক্ত হওয়ার সম্ভাবনা রয়েছে। ফলস্বরূপ, আমি মনে করি আপনি ড্যানিয়েল স্পিউকের পর্যবেক্ষণটি মনোযোগী হবেন :
অলস ভাল ভাল * মুক্ত নয় (বা এমনকি সস্তা)। নির্ভুলতার জন্য আপনার যদি একেবারে অলসতার প্রয়োজন হয় তবেই এটি ব্যবহার করুন, অপটিমাইজেশনের জন্য নয়।
bitmap$0
বর্তমান বাস্তবায়নে ক্ষেত্রটি অস্থিতিশীল (2.8))