स्कैला की एक आसान विशेषता lazy val
है, जहां val
का मूल्यांकन आवश्यक होने तक देरी हो रही है (पहली पहुंच पर)।स्कैला के आलसी मूल्य की (छिपी हुई) लागत क्या है?
बेशक, lazy val
में कुछ ओवरहेड होना चाहिए - कहीं स्काला को ट्रैक रखना चाहिए कि मूल्य का मूल्यांकन पहले से ही किया गया है और मूल्यांकन सिंक्रनाइज़ किया जाना चाहिए, क्योंकि एकाधिक थ्रेड पहली बार मान को एक्सेस करने का प्रयास कर सकते हैं पहर।
क्या वास्तव में एक lazy val
की लागत है - वहाँ एक छिपे हुए बूलियन एक lazy val
के साथ जुड़े ट्रैक रखने के लिए अगर यह मूल्यांकन किया गया है या नहीं झंडा है, वास्तव में क्या सिंक्रनाइज़ और वहाँ किसी भी अधिक खर्च कर रहे हैं रहा है?
इसके अलावा, मैं यह कर लगता है:
class Something {
lazy val (x, y) = { ... }
}
इस जैसा ही होता है दो अलग-अलग lazy val
रों x
और y
या मैं जोड़ी (x, y)
के लिए केवल एक बार भूमि के ऊपर मिलता है,?
मुझे लगता है कि इस जावा संस्करण को 2007 में पोस्ट करने के बाद से कार्यान्वयन बदलना चाहिए था। केवल एक सिंक्रनाइज़ ब्लॉक है और 'बिटमैप $ 0' फ़ील्ड वर्तमान कार्यान्वयन (2.8) में अस्थिर है। –
हां - मुझे जो पोस्टिंग कर रहा था उस पर मुझे अधिक ध्यान देना चाहिए था! –
तो, मूल रूप से, इसका मतलब है कि पहली बार आलसी मूल्य तक पहुंच प्रत्यक्ष मूल्य से अधिक धीमी है (एक अजीब मामलों में भी डेडलॉक्स बना सकता है), लेकिन बाद में पहुंच गैर-आलसी मानों की तुलना में शायद ही धीमी है। ऐसा लगता है कि इसे हल्के ढंग से नहीं लिया जाना चाहिए, केवल महंगी शुरुआत के लिए। –