मुझे लगता है कि इन तीनों को हासिल करना कठिन है। दो मुझे लगता है कि संभव हो सकता है। उदाहरण के लिए, मुझे लगता है कि कुछ मामलों में दक्षता और पठनीयता हासिल करना संभव है, लेकिन सूक्ष्म-ट्यून कोड के साथ स्थिरता मुश्किल हो सकती है। ग्रह पर सबसे कुशल कोड में आमतौर पर स्थिरता और पठनीयता दोनों का अभाव होता है जैसा कि शायद सबसे स्पष्ट है, जब तक कि आप उस तरह से नहीं हो सकते हैं जो हाथ को समझ सकते हैं सो-वेक्टर, मल्टीथ्रेडेड SIMD कोड जो इंटेल इनलाइन असेंबली, या सबसे काटने के साथ लिखता है। इंडस्ट्रीज़ में इस्तेमाल किए गए एल्गोरिदम का उपयोग 40-पृष्ठ गणितीय पत्रों के साथ किया गया था जो केवल 2 महीने पहले प्रकाशित हुए थे और 12 पुस्तकालयों में कोड एक अविश्वसनीय रूप से जटिल डेटा संरचना के लिए थे।
माइक्रो-क्षमता
एक बात मैं सुझाता हूं कि यह लोकप्रिय राय के विपरीत हो सकता है कि सबसे सूक्ष्म एल्गोरिथम कोड को अक्सर सबसे सूक्ष्म-ट्यून किए गए सीधे एल्गोरिदम की तुलना में बनाए रखना अधिक कठिन होता है। यह विचार है कि स्केलेबिलिटी में सुधार माइक्रो-ट्यून्ड कोड (हिरन-फ्रेंडली एक्सेस पैटर्न, मल्टीथ्रेडिंग, SIMD, इत्यादि) के लिए हिरन के लिए अधिक धमाकेदार उपज है, कुछ ऐसा है जिसे मैं चुनौती दूंगा, कम से कम बेहद जटिल से भरे उद्योग में काम करना डेटा संरचना और एल्गोरिदम (विज़ुअल एफएक्स उद्योग), विशेष रूप से मेष प्रसंस्करण जैसे क्षेत्रों में, क्योंकि बैंग बड़ा हो सकता है, लेकिन हिरन बहुत महंगा है जब आप नए एल्गोरिदम और डेटा संरचनाओं को पेश करते हैं, तो किसी ने पहले कभी नहीं सुना है क्योंकि वे ब्रांड हैं नया। इसके अलावा, मैं '
इसलिए यह विचार कि एल्गोरिदमिक अनुकूलन हमेशा ट्रम्प, कहते हैं, मेमोरी-एक्सेस पैटर्न से संबंधित अनुकूलन हमेशा कुछ ऐसा होता है जिससे मैं काफी सहमत नहीं था। बेशक, अगर आप बबल सॉर्ट का उपयोग कर रहे हैं, तो माइक्रो-ऑप्टिमाइज़ेशन की कोई भी मात्रा आपकी मदद नहीं कर सकती ... लेकिन कारण के भीतर, मुझे नहीं लगता कि यह हमेशा इतना स्पष्ट है। और यकीनन अल्गोरिदमिक अनुकूलन, सूक्ष्म-अनुकूलन की तुलना में बनाए रखना अधिक कठिन है। मुझे यह कहना बहुत आसान लगता है कि, इंटेल का एम्ब्री जो एक क्लासिक और सीधा बीवीएच एल्गोरिथ्म लेता है और एल्गोरिदम के द्रवीकृत रूप से तरल पदार्थ सिमुलेशन के अत्याधुनिक तरीकों के लिए ड्रीमवर्क के ओपनवीडीबी कोड की तुलना में इसे केवल सूक्ष्म धुन देता है। इसलिए मेरे उद्योग में कम से कम, मैं और अधिक लोगों को कंप्यूटर आर्किटेक्चर सूक्ष्म-अनुकूलन के साथ परिचित देखना चाहता हूं, जैसा कि इंटेल ने जब दृश्य में कदम रखा है, हजारों और हजारों नए एल्गोरिदम और डेटा संरचनाओं के साथ आने का विरोध किया। प्रभावी सूक्ष्म-अनुकूलन के साथ, लोग नए एल्गोरिदम का आविष्कार करने के लिए संभवतः कम और कम कारण पा सकते हैं।
मैंने एक विरासत कोडबेस में काम किया, जहां लगभग हर एक उपयोगकर्ता ऑपरेशन की अपनी अनूठी डेटा संरचना और इसके पीछे एल्गोरिथ्म था (सैकड़ों विदेशी डेटा संरचनाओं को जोड़कर)। और उनमें से अधिकांश के पास बहुत कम प्रदर्शन वाली विशेषताएं थीं, बहुत संकीर्ण रूप से लागू थीं। यह बहुत आसान होता अगर सिस्टम एक दो दर्जन से अधिक व्यापक रूप से लागू डेटा संरचनाओं के चारों ओर घूम सकता है, और मुझे लगता है कि अगर वे माइक्रो-अनुकूलित बहुत बेहतर होते तो ऐसा हो सकता था। मैं इस मामले का उल्लेख करता हूं क्योंकि सूक्ष्म अनुकूलन संभावित रूप से इस तरह के मामले में काफी हद तक स्थिरता बनाए रख सकता है अगर इसका मतलब है कि सैकड़ों माइक्रो-पेसिमाइज्ड डेटा संरचनाओं के बीच अंतर जो कि सख्त रीड-ओनली उद्देश्यों के लिए भी सुरक्षित रूप से उपयोग नहीं किया जा सकता है जिसमें कैश मिस छोड़ दिया गया है। सही बनाम
क्रियात्मक भाषाएँ
इस बीच मेरे द्वारा बनाए गए कुछ सबसे अनुरक्षण कोड, यथोचित रूप से कुशल, लेकिन पढ़ने में बेहद कठिन थे, क्योंकि वे कार्यात्मक भाषाओं में लिखे गए थे। सामान्य पठनीयता और uber में स्थिरता मेरे विचार में परस्पर विरोधी विचार हैं।
कोड को पठनीय, और बनाए रखने योग्य और सभी को एक साथ कुशल बनाना वास्तव में कठिन है। आमतौर पर आपको उन तीनों में से किसी एक में थोड़ा समझौता करना पड़ता है, अगर दो नहीं, जैसे स्थिरता के लिए पठनीयता से समझौता करना, या दक्षता के लिए स्थिरता बनाए रखना। यह आमतौर पर स्थिरता है जो तब पीड़ित होती है जब आप अन्य दो की बहुत तलाश करते हैं।
पठनीयता बनाम रखरखाव
अब जैसा कि कहा गया है, मेरा मानना है कि पठनीयता और स्थिरता सामंजस्यपूर्ण अवधारणाएं नहीं हैं । आखिरकार, हममें से अधिकांश लोगों के लिए सबसे पठनीय कोड मानव विचार पैटर्न के लिए बहुत ही सहजता से मैप करता है, और मानव विचार पैटर्न स्वाभाविक रूप से त्रुटि-प्रवण हैं: " यदि ऐसा होता है, तो ऐसा करें। यदि ऐसा होता है, तो ऐसा करें। अन्यथा यह करें। Oodes , मैं कुछ भूल गया था! अगर ये सिस्टम एक दूसरे के साथ बातचीत करते हैं, तो ऐसा होना चाहिए ताकि यह प्रणाली ऐसा कर सके ... ओह रुको, जब उस घटना के ट्रिगर होने पर उस प्रणाली के बारे में क्या?"मैं सटीक उद्धरण भूल गया लेकिन किसी ने एक बार कहा था कि अगर रोम को सॉफ्टवेयर की तरह बनाया गया था, तो यह केवल एक दीवार पर एक पक्षी को उतारने के लिए ले जाएगा, जिससे वह नीचे गिर सके। ऐसा अधिकांश सॉफ्टवेयर के मामले में होता है। यह हमारी तुलना में अधिक नाजुक है। लगता है। यहाँ प्रतीत होता है कि अहानिकर कोड की कुछ पंक्तियाँ और वहाँ इसे रोकने के लिए हमें पूरे डिजाइन पर पुनर्विचार करने के लिए ला सकता है, और उच्च-स्तरीय भाषाएं जो संभव के रूप में पठनीय होने का लक्ष्य रखती हैं, ऐसी मानवीय गलतियों के लिए कोई अपवाद नहीं हैं। ।
शुद्ध कार्यात्मक भाषाएं इस के लिए लगभग अयोग्य के रूप में होती हैं क्योंकि कोई भी संभवत: प्राप्त कर सकता है (अयोग्य के भी करीब नहीं है, लेकिन अपेक्षाकृत अधिक से अधिक निकट है)। और यह आंशिक रूप से है क्योंकि वे मानव विचार के लिए सहज ज्ञान युक्त नक्शा नहीं करते हैं। वे पठनीय नहीं हैं। वे हम पर सोचने वाले पैटर्न को लागू करते हैं जो हमें कुछ विशेष मामलों के साथ समस्याओं को हल करना है जितना संभव हो कम से कम ज्ञान का उपयोग करके और बिना किसी दुष्प्रभाव के संभव है। वे बहुत ही ऑर्थोगोनल हैं, वे कोड को अक्सर आश्चर्यचकित किए बिना बदल दिया और बदल देते हैं ताकि महाकाव्य को ड्राइंग बोर्ड पर डिजाइन को पुनर्विचार करना पड़े, यहां तक कि सब कुछ फिर से लिखने के बिना, समग्र डिजाइन के बारे में हमारे दिमाग को बदलने के बिंदु तक। इसे बनाए रखना आसान नहीं लगता ... लेकिन कोड को पढ़ना अभी भी बहुत कठिन है,