स्विफ्ट एक्सटेंशन बनाम तरीकों की बेंचमार्क: स्विफ्ट 4.1 (मई 2018)

इंटरएक्टिव चार्ट यहां उपलब्ध हैं: http://minikin.me/extensions

प्रेरणा

कुछ हफ़्ते पहले मैंने एक आईओएस प्रोग्रामर के साथ चर्चा की थी, जिसमें कई मज़बूत विश्वास हैं। उनमें से एक की तरह लगता है: "स्विफ्ट एक्सटेंशन का उपयोग संकलन समय नाटकीय रूप से बढ़ने और पठनीयता और कोड स्पष्टता घटने के कारण बहुत बुरा अभ्यास है"। मैं पठनीयता और स्पष्टता के बारे में निर्णय नहीं ले रहा हूं। वे व्यक्तिगत शैली की प्राथमिकताएं हैं, लेकिन संकलन समय के बारे में तर्क के साथ मैं काफी भ्रमित था। मुझे याद है कि तीन या अधिक साल पहले इस विषय पर चर्चा हुई थी। स्विफ्ट के लिए तीन साल, मुझे लगता है, जैसे मानव जाति के लिए 50 साल। मुझे पूरा यकीन था कि यह स्थिति उतनी बुरी नहीं है जितना कि यह व्यक्ति सोचता है, क्योंकि मैं जानता हूं कि स्विफ्ट टीम लगातार समय के साथ-साथ भाषा में सुधार करती है। मैं ऐसा कोई व्यक्ति नहीं हूं जो ठोस तर्क दिए बिना बहस करने जा रहा हो।

बेंचमार्किंग

पिछले सप्ताहांत, मुझे उनके बयान की जांच करने के लिए कुछ घंटे मुफ्त थे। मैंने एक्सटेंशन बनाम विधियों के प्रदर्शन की जांच करने के लिए एक रूबी स्क्रिप्ट लिखी। मेरे द्वारा चुना गया दृष्टिकोण काफी सरल है, शायद भोला भी है, लेकिन वैसे भी मैं कुछ परिणाम देखना चाहता हूं। मैंने निम्नलिखित मामलों की जाँच की:

  • कक्षा + विधियाँ
  • कक्षा + के विस्तार
  • संरचना + विधियाँ
  • संरचना + विस्तार

रूबी स्क्रिप्ट प्रत्येक मामले के लिए n संख्या फ़ंक्शन बनाती है (उदाहरण n = 3 में):

कक्षा + विधियाँ

कक्षा MyClass {
    let n = 1000
    func method_1 () {
      0 में आइटम के लिए .. 

कक्षा + के विस्तार

कक्षा MyClass {
    let n = 1000
    func method_1 () {
      0 में आइटम के लिए .. 

मैं इस प्रश्न का उत्तर जानना चाहता था: वास्तविक दुनिया की स्विफ्ट ऐप्स में कितने एक्सटेंशन हैं? मैंने स्विफ्ट में लिखे गए सबसे लोकप्रिय खुले-खट्टे अनुप्रयोगों और कुछ अनुप्रयोगों की जांच की जो हमने अपनी कंपनी में कई एक्सटेंशन के लिए ग्राहकों के लिए विकसित किए हैं।

परीक्षण चलाने के लिए USE_EXTENSIONS को Rakefile में सही या गलत पर सेट करें।

परीक्षण चलाएं:

रेक बेंचमार्क

सफाई परीक्षण के परिणाम:

साफ करना

परिणाम

जब यह स्पष्ट और सार्थक तरीके से एकत्रित डेटा का प्रतिनिधित्व करने की बात आई, तो मेरे डेटा विज्ञान कौशल काफी उपयोगी थे। मैंने एक पायथन स्क्रिप्ट main.py बनाई जो bokeh चार्ट बनाता है।

इंटरएक्टिव चार्ट यहां उपलब्ध हैं: http://minikin.me/extensions

परीक्षण वातावरण: macOS 10.13.4, स्विफ्ट 4.1, 2016 मैकबुक प्रो, 2.6 गीगाहर्ट्ज इंटेल कोर i7, 16 जीबी 2133 मेगाहर्ट्ज LPDDR3

Ions निष्कर्ष

औसतन, तरीकों के दृष्टिकोण का उपयोग -6% के बीच होता है - 70% विस्तार के साथ समान कार्यान्वयन के रूप में तेजी से।

लेकिन क्या इसका मतलब यह है कि हमें एक्सटेंशन का उपयोग नहीं करना चाहिए? शायद ऩही।
वास्तविक अनुप्रयोगों में, एक्सटेंशन की गिनती शायद ही कभी 1000 तक पहुंचती है, और यदि वे करते हैं, तो अंतर लगभग 20% है।

निश्चित रूप से, एक वास्तविक एप्लिकेशन में हमारे पास अलग-अलग परिणाम होंगे, लेकिन निरपेक्ष समय अंतर में मापा जाता है, अधिकांश परिस्थितियों में बचत प्रशंसनीय होने की संभावना नहीं है।

यदि आप प्रयोग करना चाहते हैं तो आप GitHub पर रेपो की जांच कर सकते हैं।

यदि आपके कोई प्रश्न हैं, तो कृपया मुझसे बेझिझक संपर्क करें: @minikin

अपडेट 1 (03.06.2018):

यारिक आर्सेकिन ने मुझे केस के लिए बेंचमार्क जोड़ने के लिए कहा क्लास + प्राइवेट फ़ंक्शंस इन एक्सटेंशन वर्सेस क्लास + प्राइवेट मेथड्स। कृपया, अपडेट किए गए चार्ट और परिणाम देखें।