संक्षिप्त उत्तर: नहीं, क्योंकि ट्यूरिंग तुल्यता।
लंबे उत्तर: यह आदमी एक ट्रोल है। हालांकि यह सही है कि टाइप सिस्टम "आपको एक सबसेट तक सीमित करता है," उस सब्मिट के बाहर का सामान, परिभाषा के अनुसार, वह सामान जो काम नहीं करता है।
कुछ भी आप किसी भी ट्यूरिंग-पूर्ण प्रोग्रामिंग भाषा में करने में सक्षम हैं (जो कि सामान्य-प्रयोजन प्रोग्रामिंग के लिए डिज़ाइन की गई भाषा है, साथ ही बहुत सारे हैं; यह स्पष्ट करने के लिए बहुत कम बार है और सिस्टम के कई उदाहरण हैं- ट्यूरिंग- अनायास ही) आप किसी भी अन्य ट्यूरिंग-पूर्ण प्रोग्रामिंग भाषा में करने में सक्षम हैं। इसे "ट्यूरिंग तुल्यता" कहा जाता है, और इसका केवल वही अर्थ है जो यह कहता है। महत्वपूर्ण रूप से, इसका मतलब यह नहीं है कि आप दूसरी चीज़ को दूसरी भाषा में आसानी से कर सकते हैं - कुछ यह तर्क देंगे कि पहली जगह में एक नई प्रोग्रामिंग भाषा बनाने का पूरा बिंदु है: आपको कुछ करने का एक बेहतर तरीका ऐसी चीजें जो मौजूदा भाषाएं चूसती हैं।
एक गतिशील प्रकार की प्रणाली, उदाहरण के लिए, सभी प्रकारों, मापदंडों और वापसी मूल्यों को आधार Object
प्रकार के रूप में घोषित करके और फिर विशिष्ट डेटा को एक्सेस करने के लिए प्रतिबिंब का उपयोग करके , स्थिर OO प्रकार प्रणाली के शीर्ष पर अनुकरण किया जा सकता है , इसलिए जब आपको यह एहसास हो आप देखते हैं कि एक गतिशील भाषा में आप कुछ भी नहीं कर सकते हैं जो आप एक स्थिर भाषा में नहीं कर सकते हैं। लेकिन इस तरह से करना एक बहुत बड़ी गड़बड़ी होगी।
उद्धरण से लड़का सही है कि स्थिर प्रकार आप क्या कर सकते हैं प्रतिबंधित है, लेकिन यह एक महत्वपूर्ण विशेषता है, समस्या नहीं है। सड़क पर मौजूद लाइनें आपकी कार में जो कुछ भी कर सकती हैं, उसे रोकती हैं, लेकिन क्या आप उन्हें प्रतिबंधात्मक, या मददगार पाते हैं? (मुझे पता है कि मैं एक व्यस्त, जटिल सड़क पर ड्राइव नहीं करना चाहता हूं, जहां कारों को अपनी दिशा में रखने के लिए विपरीत दिशा में जाने के लिए कुछ भी नहीं कहा जा रहा है और जहां मैं ड्राइविंग कर रहा हूं, वहां नहीं आता!) स्पष्ट रूप से नियमों को स्पष्ट करने वाले नियमों की स्थापना करके अवैध व्यवहार माना जाता है और यह सुनिश्चित करने के लिए कि ऐसा नहीं होगा, आप एक दुर्घटनाग्रस्त होने की संभावना को बहुत कम कर देते हैं।
इसके अलावा, वह दूसरे पक्ष का दुरुपयोग कर रहा है। ऐसा नहीं है कि "सभी दिलचस्प कार्यक्रमों आप लिखना चाहते हैं प्रकार के रूप में काम करेंगे", बल्कि नहीं है "सभी दिलचस्प कार्यक्रमों आप लिखना चाहते हैं की आवश्यकता होती है प्रकार के।" एक बार जब आप एक निश्चित स्तर की जटिलता से परे हो जाते हैं, तो दो कारणों से आपको लाइन में रखने के लिए एक प्रकार की प्रणाली के बिना कोडबेस को बनाए रखना बहुत मुश्किल हो जाता है।
पहला, क्योंकि बिना किसी प्रकार के एनोटेशन वाले कोड को पढ़ना मुश्किल है। निम्नलिखित पायथन पर विचार करें:
def sendData(self, value):
self.connection.send(serialize(value.someProperty))
आप क्या अपेक्षा करते हैं कि डेटा ऐसा दिखे कि कनेक्शन के दूसरे छोर पर सिस्टम प्राप्त हो? और अगर यह कुछ ऐसा प्राप्त कर रहा है जो पूरी तरह से गलत लगता है, तो आप कैसे पता लगा सकते हैं कि क्या चल रहा है?
यह सब की संरचना पर निर्भर करता है value.someProperty
। लेकिन यह कैसा दिखता है? अच्छा प्रश्न! क्या बुला रहा है sendData()
? क्या गुजर रहा है? वह चर कैसा दिखता है? यह कहां से आया? यदि यह स्थानीय नहीं है, तो आपको यह पता लगाने के value
लिए कि क्या चल रहा है , पूरे इतिहास को देखना होगा। हो सकता है कि आप कुछ और पास कर रहे हों someProperty
, जिसमें एक संपत्ति भी हो , लेकिन यह वह नहीं करता जो आपको लगता है कि यह करता है?
अब इसे टाइप एनोटेशन के साथ देखते हैं, जैसा कि आप बू भाषा में देख सकते हैं, जो बहुत ही समान वाक्यविन्यास का उपयोग करता है लेकिन स्टेटिक टाइप है:
def SendData(value as MyDataType):
self.Connection.Send(Serialize(value.SomeProperty))
अगर कुछ गलत हो रहा है, तो अचानक डिबगिंग का आपका काम सिर्फ परिमाण का एक आदेश आसान हो गया: ऊपर की परिभाषा देखें MyDataType
! साथ ही, बुरा व्यवहार करने का मौका क्योंकि आप कुछ असंगत प्रकार से गुजरते हैं, जिसमें एक ही नाम वाली संपत्ति भी अचानक शून्य हो जाती है, क्योंकि टाइप सिस्टम आपको वह गलती नहीं करने देगा।
दूसरा कारण पहले पर बनाता है: एक बड़ी और जटिल परियोजना में, आपको सबसे अधिक संभावना है कि कई योगदानकर्ता मिलें। (और यदि नहीं, तो आप इसे लंबे समय से खुद बना रहे हैं, जो मूल रूप से एक ही बात है। 3 साल पहले लिखे गए कोड को पढ़ने की कोशिश करें यदि आप मुझ पर विश्वास नहीं करते हैं!) इसका मतलब है कि आप नहीं जानते कि क्या है! उस व्यक्ति के मुखिया के माध्यम से जाना, जिसने उस समय के कोड के लगभग किसी भी हिस्से को लिखा था, क्योंकि आप वहां नहीं थे, या यह याद नहीं था कि यह बहुत समय पहले आपका अपना कोड था। प्रकार की घोषणाएं होने से आपको यह समझने में मदद मिलती है कि कोड का इरादा क्या था!
उद्धरण में आदमी की तरह लोग स्थिर संकलक के लाभों को अक्सर "कंपाइलर की मदद करने" या "सभी के बारे में दक्षता" के रूप में एक ऐसी दुनिया में दुरुपयोग करते हैं, जहां लगभग असीमित हार्डवेयर संसाधन प्रत्येक गुजरते वर्ष के साथ कम और कम प्रासंगिक बनाते हैं। लेकिन जैसा कि मैंने दिखाया है, जबकि वे लाभ निश्चित रूप से मौजूद हैं, प्राथमिक लाभ मानव कारकों में है, विशेष रूप से कोड पठनीयता और स्थिरता। (अतिरिक्त दक्षता निश्चित रूप से एक अच्छा बोनस है, हालांकि!)