2016-02-03 5 views
5

में टाइप अनुमान में स्वत: पूर्णता धीमा हो जाती है जब आईडीई (आइडिया) में पहली बार स्कैला का उपयोग करते समय मैंने देखा कि स्वत: पूर्णता स्पष्ट रूप से धीमी है, फिर जावा कोडिंग करते समय। यद्यपि कुछ धीमी गति से स्काला टूलींग पारिस्थितिक तंत्र की सापेक्ष अपरिपक्वता के लिए खुद को देय हो सकता है, मुझे संदेह है कि इस मंदी में से कुछ पार्सिंग कोड की एल्गोरिदमिक जटिलता की अंतर्निहित संपत्ति हो सकती है जिसके लिए प्रकार अनुमान की आवश्यकता होती है।आईडीई

जावा:

MyType type; type.doSomething() //Class of type already known 

स्केला:

val type = new MyType; type.doSomething() //Class of type must be inferred or cached 

हालांकि भाषाओं जो प्रकार निष्कर्ष है एक बहुत अधिक संक्षिप्त (और इसलिए पढ़ने में आसान) कर रहे हैं, यह धीमी टूलींग की कीमत पर आता है ? क्या कोई अंतर्निहित व्यापार बंद है?

उत्तर

1

हां।

कुछ हद तक, स्कैला अनिवार्य रूप से धीमी है। अनुमानित प्रकार, implicits और वाक्य रचनात्मक चीनी होने की लागत में से एक संकलन समय है। सटीक समय में सुधार किया जा सकता है, लेकिन स्कैला हमेशा ex.java की तुलना में धीमी गति से संकलित होगा।

व्यक्तिगत रूप से, मैं खुशी से इस व्यापार को बंद करता हूं। एक साफ और पठनीय कोड आधार होने के कारण संकलन समय की तुलना में मेरे लिए बहुत अधिक महत्वपूर्ण है (जो कि वृद्धिशील संकलन का उपयोग होने पर अक्सर 1 सेकंड से कम होता है)।

+0

आपके योगदान के लिए धन्यवाद। मेरा प्रश्न टूलींग पर अधिक निर्देशित है, जो मुझे पता है कि संकलन समय से संबंधित है, लेकिन स्वत: पूर्णता को अर्ध-बेक्ड संकलन (बाइट कोड पीढ़ी के बिना लेक्सिंग) और स्थैतिक विश्लेषण द्वारा भी सुविधा प्रदान की जा सकती है। तो मुझे लगता है कि मैं जो पूछ रहा हूं वह यह है कि टाइप इनफरेंस इन प्रकार के प्रदर्शन अनुकूलन को इस्तेमाल होने से रोकता है, जिसके परिणामस्वरूप धीमी टूलींग होती है। – murungu

+0

मुझे लगता है कि मैं इसका उत्तर देने के लिए पर्याप्त विशेषज्ञ नहीं हूं। मुझे स्कैला (और ग्रहण और इंटेलिज) आंतरिक नहीं पता है कि एक स्पष्ट प्रकार ऑटो-पूर्ण करने में मदद करता है या नहीं। फिर फिर, ध्यान दें कि एक स्कैला आईडीई आम तौर पर सामान्य तरीकों और _implicitly_ उपलब्ध विधियों दोनों की खोज करता है। उदाहरण के लिए, "abcde" .take (3) देखें (विधि 'टेक'' स्ट्रिंग' पर लागू की जाती है)। – VasyaNovikov