राइटिंग कोड जो अभी से सालों चलेगा
प्रोग्रामिंग भाषाएँ बदल जाती हैं। पुस्तकालय बदलते हैं। 5, 10 या 20 साल पहले के कुछ कोड अभी भी अपेक्षित परिणाम दे सकते हैं और परिणाम दे सकते हैं, जबकि 2 साल से कुछ कोड एक वाक्यविन्यास त्रुटि के साथ विफल हो सकते हैं। यह आंशिक रूप से अपरिहार्य है, क्योंकि भाषाएं विकसित होती हैं (कम से कम, सबसे अधिक)। डेवलपर्स के पास अपने कोड को बनाए रखने की जिम्मेदारी है। लेकिन कभी-कभी, उत्पादन कोड में स्थिरता एक महत्वपूर्ण आवश्यकता होती है, और भाषा परिवर्तनों के लिए इसे अनुकूलित करने के लिए हर साल कोड के माध्यम से किसी की आवश्यकता के बिना कोड को केवल 10 वर्षों तक चलना चाहिए। उदाहरण के लिए, वैज्ञानिक डेटा विश्लेषण के लिए मेरे पास छोटी स्क्रिप्ट्स हो सकती हैं, जो कि उन्हें सालों तक न छूने के बाद फिर से देखने की जरूरत है। उदाहरण के लिए, मौसम संबंधी कार्यालयों में गैर-गति-आवश्यक भागों के लिए भी बहुत अधिक संचालन फोरट्रान कोड है, और कोड स्थिरता इसका एक कारण है। मैं' अस्थिरता के लिए डर सुनाई देने वाली वस्तुओं में से एक है जो उनके पास पायथन में जाने के खिलाफ है (भाषा की जड़ता के अलावा, यह केवल नए कोड के लिए संभव है पुराने कोड पर निर्भर नहीं है)। बेशक, स्थिर कोड के लिए एक रणनीति पूरे ऑपरेटिंग सिस्टम को फ्रीज करना है। लेकिन वह हमेशा संभव नहीं है।
मैं उदाहरण के तौर पर अजगर का उपयोग कर रहा हूं, लेकिन यह मुद्दा विशेष रूप से अजगर तक सीमित नहीं है।
पायथन संगतता मुद्दों पर दस्तावेज़
पायथन के मामले में, पिछड़े-असंगत बदलावों के लिए कई दस्तावेज रेखांकित करने वाली नीति है।
पीईपी -5
PEP 5 के अनुसार :
पायथन के संक्रमणकालीन संस्करण की रिहाई और पीछे के असंगत संस्करण की रिहाई के बीच कम से कम एक वर्ष की संक्रमण अवधि होनी चाहिए। उपयोगकर्ताओं के पास कम से कम एक वर्ष होगा अपने कार्यक्रमों का परीक्षण करने के लिए और उन्हें वैकल्पिक निर्माण के लिए उपयोग किए गए विकल्प से माइग्रेट करें।
व्यक्तिगत रूप से, मैं मानता हूं कि एक वर्ष कम है। इसका मतलब है कि मैं कुछ कोड लिख सकता हूं, और 1½ साल से यह अब और नहीं चलेगा।
पीईपी 291
पीईपी 291 में उन चीजों के दिशानिर्देशों की एक अपूर्ण सूची शामिल है जिन्हें पिछड़े संगतता बनाए रखने के लिए बचा जाना चाहिए। हालाँकि, यह केवल पायथन 2.x से संबंधित है। जैसा कि पायथन 2.7 2.x श्रृंखला में अंतिम रिलीज है और पायथन 2.7 बगफिक्स-ओनली है, यह पीईपी अब केवल ऐतिहासिक हित के लिए है।
पीईपी 387
पिछड़े-असंगत परिवर्तनों पर पीईपी 387 भी है । पीईपी 387 एक मसौदा है और आधिकारिक नीति नहीं है। जून 2009 में, यह पायथन-विचार मेलिंग-सूची पर चर्चा की गई थी । चर्चा का एक हिस्सा इस बात पर केंद्रित है कि डेवलपर्स कैसे कोड लिख सकते हैं जो भाषा परिवर्तनों के खिलाफ मजबूत है। एक पोस्ट ने कुछ सलाह दी कि क्या न करें :
इसके साथ ही ऐसे कई नियम हैं जो आप अनुमान लगा सकते हैं कि शायद यह ज्यादातर समय सच होता है: सामान की शुरुआत न करें
"_", बंदर से कुछ भी न करें, अपने स्वयं के अलावा अन्य वर्गों से वस्तुओं पर गतिशील वर्ग प्रतिस्थापन का उपयोग न करें। , वंशानुक्रम पदानुक्रम की गहराई पर निर्भर न करें (उदाहरण के लिए, नहीं".__bases__[0].__bases__[0]"), यह सुनिश्चित करें कि आपके परीक्षण किसी डिप्रेसेशन वर्जन के निर्माण के बिना चलते हैं, अन्य पुस्तकालयों से प्राप्त होने वाली कक्षाओं में विशेषताओं को जोड़ते समय संभावित नामस्थान संघर्षों से सावधान रहें। मुझे नहीं लगता कि ये सभी बातें एक जगह पर लिखी गई हैं।
इसके अलावा, "माइन फ़ील्ड्स" (नई सुविधाओं के बदलने की संभावना) और "जमे हुए क्षेत्र" (बहुत बेची गई एपीआई वस्तुतः बदलने की गारंटी नहीं है) के बारे में कुछ बिंदु थे। कोटेदार एंटोनी पिटोर :
मुझे लगता है कि "जमे हुए क्षेत्र" को नकारात्मक (स्पष्ट "मेरा क्षेत्र") के बजाय सकारात्मक (स्पष्ट सार्वजनिक एपीआई और स्पष्ट रूप से गारंटीकृत व्यवहार) परिभाषित किया जाना चाहिए। अन्यथा, हम कुछ महत्वपूर्ण चीजों को माइनफील्ड में रखना भूल जाएंगे और बाद में काट लेंगे जब हमें उन चीजों को पीछे-असंगत तरीके से बदलने की आवश्यकता होगी।
इस धागे से कोई निष्कर्ष नहीं निकलता है, लेकिन मैं जो देख रहा हूं, उसके मूल के बहुत करीब पहुंच जाता हूं। धागा लगभग चार साल पुराना है, इसलिए शायद स्थिति बदल गई है या बेहतर हो गई है। किस तरह के कोड के जीवित रहने की संभावना है, और किस तरह का कोड अधिक नाजुक है?
पोर्टिंग दिशानिर्देश
ऊपर उल्लिखित दस्तावेजों के अलावा, प्रत्येक पायथन संस्करण एक पोर्टिंग गाइडलाइन के साथ आता है: पायथन 3.2 को पोर्ट करना, पायथन 3.3 को पोर्ट करना , आदि।
उपयोगी अनुकूलता
पीईपी 3151 ने मुझे उपयोगी अनुकूलता की अवधारणा से परिचित कराया । मेरे स्वयं के शब्दों में, यह इस विचार से उबलता है कि यदि कोड सावधानीपूर्वक लिखा गया है तो भाषा डेवलपर्स को संगतता बनाए रखने के लिए सावधान रहने की आवश्यकता है। यह वास्तव में उपयोगी संगतता को परिभाषित नहीं करता है , लेकिन मुझे लगता है कि यह उन विचारों के समान है जिन्हें मैंने पीईपी 387 चर्चा से ऊपर उद्धृत किया था।
प्रोग्रामर्स के दृष्टिकोण से
एक प्रोग्रामर के रूप में, मुझे पता है कि भविष्य में पायथन बदल जाएगा और यह कि लोग - सबसे ख़ासकर खुद - एक पायथन संस्करण में शायद अब से कई साल पहले मेरा कोड चलाने की कोशिश करेंगे जो एक, दो, या शायद तीन छोटे संस्करण हैं। सब कुछ संगत नहीं होगा, और वास्तव में कोड के साथ आना आसान है जो विफल हो जाएगा (मैं एक बार कोड बताते हुए if sys.version[:3] != '2.3': print 'Wrong version, exiting')। मैं जो देख रहा हूं, वह इस बात पर दिशानिर्देशों का एक सेट है कि क्या करना है और क्या नहीं करना है ताकि इस संभावना को बढ़ाया जा सके कि मेरा कोड अभी भी भविष्य में अनलॉक हो जाएगा।
क्या ऐसे कोई दिशानिर्देश हैं? मैं पायथन कोड कैसे लिखूं जो अभी भी भविष्य में चलेगा?
मेरा प्रश्न, अजगर कोर करने के लिए दोनों से संबंधित है इसके मानक पुस्तकालय के लिए, लेकिन यह भी आमतौर पर इस्तेमाल करने के लिए ऐड-ऑन पुस्तकालयों, विशेष रूप से numpy, scipy, matplotlib।
EDIT : अब तक, दो उत्तर python2 बनाम python3 से संबंधित हैं। यह मेरा मतलब नहीं है। मैं Python2 से Python3 की ओर जाने वाले औजारों के बारे में जानता हूं। मेरा प्रश्न अभी आने वाले भाषा परिवर्तनों से संबंधित है । हम कोडिंग दिशानिर्देशों को खोजने में एक क्रिस्टल बॉल से बेहतर कर सकते हैं जो अधिक स्थिर हैं। उदाहरण के लिए:
import moduleकी तुलना में अधिक भविष्य-प्रमाण हैfrom module import *, क्योंकि उत्तरार्द्धmoduleएक या अधिक नए कार्यों / वर्गों को बढ़ने पर कोड को तोड़ सकता है ।अप्रकाशित विधियों का उपयोग करना प्रलेखित विधियों का उपयोग करने की तुलना में कम भविष्य का सबूत हो सकता है, क्योंकि कुछ भी अनिर्दिष्ट होने के कारण अभी तक कुछ स्थिर नहीं हो सकता है।
यह इस तरह की व्यावहारिक कोडिंग सलाह है जो मैं बाद में हूं। चूंकि यह वर्तमान → भविष्य के बारे में है, इसलिए हम खुद को Python3 तक सीमित कर सकते हैं, क्योंकि Python2 अब बदलने वाला नहीं है।