2008-11-07 13 views
13

पायथन 3.0 पिछले संस्करणों के साथ पिछड़ा संगतता तोड़ता है और भाषा को दो पथों (कम से कम अस्थायी रूप से) में विभाजित करता है। क्या आप किसी भी अन्य भाषा के बारे में जानते हैं जो परिपक्वता के दौरान इस तरह के एक प्रमुख डिजाइन चरण के माध्यम से चला गया?पायथन 3.0 और भाषा विकास

इसके अलावा, क्या आपको विश्वास है कि इस तरह प्रोग्रामिंग भाषाओं को विकसित करना चाहिए या कीमत बहुत अधिक भुगतान करने की कीमत है?

उत्तर

4

सी # और .NET ढांचे ने संस्करण 1.0 और 1.1 के साथ-साथ 1.1 और 2.0 के बीच संगतता तोड़ दी। विभिन्न संस्करणों में चल रहे अनुप्रयोगों को चलाने के लिए .NET रनटाइम के कई संस्करण स्थापित किए गए हैं।

कम से कम उन्होंने एक संस्करण से दूसरे संस्करण में स्रोत अपग्रेड करने के लिए अपग्रेड विज़ार्ड शामिल किया था (यह हमारे अधिकांश कोड के लिए काम करता था)।

+0

पाइथन 3000 माइग्रेशन टूल प्रदान करता है और 2.6 में कुछ आगे संगतता सेटिंग्स होगी। –

1

पर्ल 6 अभी इस प्रकार के विभाजन के माध्यम से भी जा रहा है। पर्ल 5 प्रोग्राम सीधे पर्ल 6 पर नहीं चलेंगे, लेकिन कोड को ऐसे फॉर्म में अनुवाद करने के लिए एक अनुवादक होगा जो काम कर सकता है (मुझे नहीं लगता कि यह 100% मामलों को संभाल सकता है)।

Perl 6 का विकिपीडिया पर भी अपना लेख है।

1

सबसे पहले, पाइथन के माध्यम से परिवर्तनों के बारे में video talk है। दूसरा, परिवर्तन कोई अच्छा नहीं है। तीसरा, मैं एक स्वागत विकास के लिए हूं और मानना ​​है कि यह आवश्यक है।

16

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

(पर्ल के लिए एक मूल्य है दर्शन "एक से अधिक रास्ता यह करने के लिए नहीं है"।)

(विडंबना .NET- आधारित भाषाओं के संस्करण के लिए संस्करण से परिवर्तन की तरह उदाहरण, पूरे मुद्दे पर विचार कर रहे हैं .NET को एपीआई स्थिरता और क्रॉस-प्लेटफार्म संगतता माना जाता था)। हालांकि, मैं शायद उन भाषाओं को "परिपक्व" कहूंगा; यह हमेशा एक डिजाइन-ऑन-द-गो, बिल्ड-द-प्लेन-ए-वे-फ्लाई दृष्टिकोण चीजों के लिए अधिक रहा है।

या, जैसा कि मैं इसके बारे में सोचता हूं, ज्यादातर भाषाएं "जैविक विकास" या "इंजीनियर निर्माण" से आती हैं। पर्ल जैविक विकास का एक आदर्श उदाहरण है; यह एक फैंसी पाठ प्रसंस्करण उपकरण ala awk/sed के रूप में शुरू हुआ और एक पूर्ण भाषा में वृद्धि हुई।

दूसरी तरफ पायथन, अधिक इंजीनियर है। भाषा के वाक्यविन्यास और कार्यान्वयन में हर मामूली परिवर्तन में जाने वाली व्यापक बहस को देखने के लिए अपनी वेबसाइट पर व्यापक श्वेतपत्रों के चारों ओर घूमने में थोड़ी देर बिताएं।

दूर-दराज के परिवर्तनों के इस प्रकार को बनाने का विचार प्रोग्रामिंग भाषाओं के लिए कुछ नया है क्योंकि प्रोग्रामिंग भाषा स्वयं प्रकृति में बदल गई है। ऐसा लगता था कि प्रोग्रामिंग पद्धतियां तब तभी बदल गईं जब एक नया प्रोसेसर आया था जिसमें एक नया निर्देश सेट था। शुरुआती भाषाएं या तो निम्न स्तर के स्तर पर थीं और असेंबली भाषा (उदाहरण के लिए सी) से विवाहित थीं या प्रकृति में इतनी गतिशील गतिशील थीं (फर्थ, लिस्प) कि इस तरह का मध्य-प्रवाह परिवर्तन भी विचार के रूप में नहीं आएगा।

परिवर्तन अच्छे हैं या नहीं, मुझे यकीन नहीं है। मुझे पाइथन के विकास के मार्गदर्शन में लोगों पर भरोसा है, हालांकि; इस प्रकार भाषा में बदलाव काफी हद तक बेहतर रहे हैं।

मुझे लगता है कि आने वाले दिनों में ग्लोबल इंटरप्रेटर लॉक सिंटैक्स परिवर्तनों से अधिक केंद्रीय साबित होगा। हालांकि नई मल्टीप्रोसेसर लाइब्रेरी उसमें से अधिकांश को कम कर सकती है।

9

पायथन टीम ने पिछड़े संगतता की कमी को जितना संभव हो सके दर्द रहित बनाने के लिए बहुत मेहनत की है, उस बिंदु पर जहां पाइथन की 2.6 रिलीज एक दर्द रहित अपग्रेड प्रक्रिया की दिशा में दिमाग के साथ बनाई गई थी। एक बार जब आप 2.6 तक अपग्रेड कर लेंगे तो ऐसी स्क्रिप्ट्स हैं जिन्हें आप चला सकते हैं जो आपको बिना किसी समस्या के 3.0 पर ले जाएंगे।

+1

जहां "बिना किसी मुद्दे" के साथ योग्यता प्राप्त की जानी चाहिए "जब तक आपका कोड इतना गतिशील न हो कि 2to3 अनुवादक यह निर्धारित नहीं कर सकता कि इसे बदलने की आवश्यकता है"। –

2

लिस्प दुनिया में यह कुछ बार हुआ है। बेशक, भाषा इतनी गतिशील है कि आम तौर पर विकास मानक पुस्तकालय का हिस्सा छोड़कर मानक मानक बना देता है।

भी, लुआ 4 से 5 काफी महत्वपूर्ण था; लेकिन भाषा कोर इतनी कम है कि कुछ पृष्ठों में व्यापक पहुंचने वाले परिवर्तन भी दस्तावेज किए गए हैं।

7

यह उल्लेखनीय है कि पिछड़ा संगतता स्वयं की लागत लेती है। कुछ मामलों में 100% पिछड़े संगतता की आवश्यकता होने पर आदर्श तरीके से एक भाषा विकसित करना लगभग असंभव है। जेनिक्स के जावा का कार्यान्वयन (जो पिछड़ा-संगत होने के लिए संकलन-समय पर टाइप जानकारी को मिटा देता है) 100% पिछड़ा संगतता वाले सुविधाओं को कार्यान्वित करने का एक अच्छा उदाहरण है, जिसके परिणामस्वरूप उप-इष्टतम भाषा सुविधा हो सकती है।

तो संक्षेप में बोलते हुए, यह खराब रूप से लागू नई सुविधा के बीच एक विकल्प के लिए नीचे आ सकता है जो पिछड़ा संगत है, या एक अच्छी तरह से लागू नई सुविधा नहीं है। कई मामलों में, उत्तरार्द्ध एक बेहतर विकल्प है, खासकर यदि ऐसे उपकरण हैं जो स्वचालित रूप से असंगत कोड का अनुवाद कर सकते हैं।

6

मुझे लगता है कि पिछड़े संगतता ब्रेकेज के कई उदाहरण हैं। इसने की कई भाषाओं में या तो छोटे थे या रास्ते में मर गए थे।

इस के कई उदाहरण भाषा का नाम बदलने में शामिल थे।

अल्गोल 60 और अल्गोल 68 इतने अलग थे कि अल्गोल 68 की बैठकें गुटों में टूट गईं। अल्गोल 68 गुट, पास्कल गुट और पीएल/आई गुट।

विर्थ का पास्कल मॉडुला -3 में घुस गया। यह पास्कल के समान था - बहुत ही समान वाक्यविन्यास और अर्थशास्त्र - लेकिन कई नई विशेषताएं। क्या वह वास्तव में एक पिछड़ा संगतता वाला पास्कल -2 था?

लिस्प योजना योजना में एक नाम शामिल था।

यदि आप पुराने B programming language मैनुअल के स्कैन को ट्रैक करते हैं, तो आप देखेंगे कि सी के विकास में वृद्धिशील दिखती है - कट्टरपंथी नहीं - लेकिन यह संगतता टूट गई।

फोरट्रान कई रूपों में मौजूद था। मुझे निश्चित रूप से पता नहीं है, लेकिन मुझे लगता है कि वीएक्स/वीएमएस के लिए डिजिटल का फोरट्रान 9 0 प्राचीन फोरट्रान चतुर्थ कार्यक्रमों के साथ पूरी तरह से संगत नहीं था।

आरपीजी प्रमुख उथल-पुथल से गुजर गया - मुझे लगता है कि वास्तव में आरपीजी नामक दो असंगत भाषाएं हैं।

बॉटम लाइन मुझे लगता है कि सोच और सीखने अपरिहार्य हैं। एक भाषा की सीमाओं को सीखने के लिए आपके पास तीन प्रतिक्रियाएं हैं।

  1. एक नई भाषा की खोज करें जो पूरी तरह से असंगत है।

  2. वृद्धिशील chagne जब तक आपको एक नई भाषा का आविष्कार करने के लिए मजबूर नहीं किया जाता है।

  3. एक नियंत्रित, विचारशील तरीके से संगतता तोड़ें।

मुझे लगता है कि # 1 और # 2 दोनों डरावनी तरीके हैं। पुराने को चकित करना इसे संरक्षित करने की कोशिश करने से आसान है। प्रत्येक नींव वाली विशेषता को संरक्षित करना (कोई फर्क नहीं पड़ता कि कितना बुरा) बहुत काम है, इसमें से कुछ कम या कोई मूल्य नहीं है।

वाणिज्यिक उद्यम "नए विपणन" या "हमारे मौजूदा ग्राहकों को संरक्षित करने" के नाम पर डरावनी दृष्टिकोण का चयन करते हैं। यही कारण है कि वाणिज्यिक सॉफ्टवेयर उद्यम नवाचार के गर्म बिस्तर नहीं हैं।

मुझे लगता है कि केवल ओपन-सोर्स प्रोजेक्ट इस बदलाव से निपटने के तरीके में नवाचार को गले लगा सकते हैं।

13

निकट-पूर्ण पिछड़ा संगतता पर जोर देने की कीमत बहुत अधिक है। यदि आप देखना चाहते हैं तो सी ++ में प्रोग्रामिंग में दो मिनट व्यतीत करें।

4

क्या वीबी 6 वीबीनेट से इसका सबसे बड़ा उदाहरण नहीं होगा? या आप सभी उन्हें दो अलग-अलग भाषाओं पर विचार करते हैं?

+0

मुझे लगता है कि निर्धारिती (COM) ऑब्जेक्ट आजीवन से कचरे के संग्रह में परिवर्तन ने किसी भी गैर-तुच्छ वीबी अनुप्रयोग के बड़े पैमाने पर उपक्रम के प्रवास को बनाया है। आईएमओ, वीबी 6 परियोजनाओं को बिना किसी अपग्रेड पथ के अप्रचलित रूप से अप्रचलित किया गया था। – mackenir

+0

हालांकि तकनीकी रूप से VB.NET को एंटरप्राइज़ और प्रोग्रामिंग भाषा विकास शर्तों में वीबी 6 से अलग माना जा सकता है, यह नहीं है। माइक्रोसॉफ्ट ने एक बार में लाखों अनुप्रयोगों को अप्रचलित करना चुना। ध्यान में रखते हुए कि वीबी 6 कभी भी सबसे सफल प्लेटफार्मों में से एक था, यह एक साहसी निर्णय था। – kgiannakakis

+0

कई लोग उन्हें दो अलग-अलग भाषाओं के रूप में मानते हैं। कई क्रोधित वीबी 6 प्रोग्रामर जिन्हें वीबी.नेट विजुअल फ्रेड कहा जाता है क्योंकि यह बहुत अलग था। – projecktzero

0

जीसीसी नियमित रूप से बदलता है कि यह लगभग हर मामूली रिलीज सी ++ को कैसे संभालता है। बेशक, यह जीसीसी के नियमों का पालन करने और सी ++ के स्वयं को बदलने के तरीके को कसने का एक और परिणाम है।

0

रूबी प्रोग्रामिंग भाषा का नया संस्करण संगतता भी तोड़ देगा।

और उन पुस्तकालयों के बारे में सोचें जो एक का उपयोग कर सकते हैं: gtk, Qt, और इसी तरह (उनके पास असंगत संस्करण भी हैं)।

मुझे लगता है कि प्रगति का समर्थन करने के लिए कभी-कभी असंगतता आवश्यक होती है (लेकिन अक्सर नहीं)।

संबंधित मुद्दे