प्रदर्शन और सुरक्षा के लिए मैं एक निश्चित आकार वाले वेक्टर को कार्यान्वित करना चाहता हूं जो अपरिवर्तनीय और विशिष्ट दोनों (मुझे तेज़ अंकगणित की आवश्यकता है)। मेरा पहला विचार @specialized
एनोटेशन का उपयोग करना था (क्योंकि मुझे दोनों पूर्णांक और वास्तविकताओं की आवश्यकता है)।एक निश्चित आकार, अपरिवर्तनीय, और विशेष वेक्टर लागू करना
package so
class Vec[@specialized A] private[so] (ary: Array[A]) {
def apply(i: Int) = ary(i)
}
हालांकि, जब मैं javap
साथ जिसके परिणामस्वरूप बाईटकोड का विश्लेषण, मैं देख सकता है कि तत्वों अभी भी बॉक्सिंग कर रहे हैं:
यहाँ एक पहली कोशिश है। उदाहरण के लिए:
public double apply$mcD$sp(int);
Code:
0: aload_0
1: iload_1
2: invokevirtual #33; //Method apply:(I)Ljava/lang/Object;
5: invokestatic #83; //Method scala/runtime/BoxesRunTime.unboxToDouble:(Ljava/lang/Object;)D
8: dreturn
ऐसा लगता है कि सरणी विशिष्ट नहीं हैं जो मूर्खतापूर्ण लगती हैं, क्योंकि एरे जेवीएम पर विशिष्ट हैं।
क्या कुछ ऐसा है जो मैं अभी भी अपने लक्ष्य तक पहुंचने के लिए कर सकता हूं?
आप किस संस्करण का उपयोग कर रहे हैं? यह 2.9.2 के साथ मेरे लिए ठीक लग रहा है। –
मैंने 2.9.2 और 2.8.2 दोनों के साथ प्रयास किया। – paradigmatic