बॉटम टाइप: Difference between revisions
(Text) |
No edit summary |
||
Line 1: | Line 1: | ||
{{Short description|Universal subtype in logic and computer science}} | {{Short description|Universal subtype in logic and computer science}} | ||
[[ प्रकार सिद्धांत |टाइप सिद्धांत]] में, [[गणितीय तर्क]] के भीतर एक सिद्धांत, टाइप सिस्टम का '''बॉटम टाइप''' वह प्रकार होता है जो अन्य सभी प्रकारों का [[उपप्रकार]] होता है।<ref name="bounded">{{cite journal | last = Pierce | first = Benjamin C. | year = 1997 | title = तल के साथ परिबद्ध परिमाणीकरण| journal = Indiana University CSCI Technical Report |issue= 492 |url=http://www.cis.upenn.edu/~bcpierce/papers/bqb.ps |pages=1 }}</ref> | [[ प्रकार सिद्धांत |टाइप सिद्धांत]] में, [[गणितीय तर्क]] के भीतर एक सिद्धांत, टाइप सिस्टम का '''बॉटम टाइप''' वह प्रकार होता है जो अन्य सभी प्रकारों का [[उपप्रकार|सबटाइप]] होता है।<ref name="bounded">{{cite journal | last = Pierce | first = Benjamin C. | year = 1997 | title = तल के साथ परिबद्ध परिमाणीकरण| journal = Indiana University CSCI Technical Report |issue= 492 |url=http://www.cis.upenn.edu/~bcpierce/papers/bqb.ps |pages=1 }}</ref> | ||
जहां ऐसा प्रकार निहित है, इसे प्रायः अप टैक (⊥) प्रतीक के साथ दर्शाया जाता है। | जहां ऐसा प्रकार निहित है, इसे प्रायः अप टैक (⊥) प्रतीक के साथ दर्शाया जाता है। | ||
जब बॉटम टाइप खाली होता है, तो एक फ़ंक्शन जिसका रिटर्न | जब बॉटम टाइप खाली होता है, तो एक फ़ंक्शन जिसका रिटर्न टाइप बॉटम होता है, जो कोई भी मान रिटर्न नहीं कर सकता, यहां तक कि [[इकाई प्रकार|यूनिट टाइप]] का अकेला मान भी नहीं कर सकता। ऐसी लैंग्वेज में, बॉटम टाइप को '''शून्य''' या '''नैवर टाइप''' के रूप में जाना जा सकता है। करी-हावर्ड पत्राचार में, एक एम्प्टी टाइप असत्यता से मेल खाता है। | ||
==कंप्यूटर विज्ञान अनुप्रयोग== | ==कंप्यूटर विज्ञान अनुप्रयोग== | ||
सबटाइपिंग सिस्टम्स में, बॉटम टाइप सभी प्रकारों का एक सबटाइप होता है।<ref name="bounded"/> यह [[शीर्ष प्रकार|टॉप टाइप]] का दोहरा प्रकार है, जो एक सिस्टम में सभी संभावित मानों का विस्तार करता है। | |||
यदि एक | यदि एक टाइप सिस्टम [[प्रकार की सुरक्षा|सुदृढ़]] है, तो बॉटम टाइप अवासित है और बॉटम टाइप शब्द एक तार्किक विरोधाभास का प्रतिनिधित्व करता है। ऐसी प्रणालियों में, प्रायः बॉटम टाइप और [[खाली प्रकार|एम्प्टी टाइप]] के बीच कोई अंतर नहीं किया जाता है, और शब्दों का उपयोग परस्पर किया जा सकता है। | ||
यदि बॉटम टाइप आवासित है, तो इसकी स्थिति प्रायः अपरिभाषित व्यवहार, अनंत पुनरावृत्ति, या अप्राप्य त्रुटियों जैसी त्रुटि स्थितियों के अनुरूप होती हैं। | यदि बॉटम टाइप आवासित है, तो इसकी स्थिति प्रायः अपरिभाषित व्यवहार, अनंत पुनरावृत्ति, या अप्राप्य त्रुटियों जैसी त्रुटि स्थितियों के अनुरूप होती हैं। | ||
Line 16: | Line 16: | ||
''बॉटम के साथ परिबद्ध परिमाणन'' में,<ref name="bounded" />पियर्स का कहना है कि "बॉट" के कई उपयोग हैं: | ''बॉटम के साथ परिबद्ध परिमाणन'' में,<ref name="bounded" />पियर्स का कहना है कि "बॉट" के कई उपयोग हैं: | ||
# एक लैंग्वेज जिसमें अपवाद हैं, रेज निर्माण के लिए एक प्राकृतिक प्रकार ''रेज ∈ अपवाद--> बॉट'' है, और इसी तरह अन्य नियंत्रण संरचनाओं के लिए भी है। सहज रूप से, यहां बॉट उस प्रकार की गणना है जो कोई उत्तर नहीं देता है। | # '''एक लैंग्वेज''' जिसमें अपवाद हैं, रेज निर्माण के लिए एक प्राकृतिक प्रकार ''रेज ∈ अपवाद--> बॉट'' है, और इसी तरह अन्य नियंत्रण संरचनाओं के लिए भी है। सहज रूप से, यहां बॉट उस प्रकार की गणना है जो कोई उत्तर नहीं देता है। | ||
# बॉट बहुरूपी डेटा संरचनाओं के "लीफ नोड्स" टाइप करने में उपयोगी है। उदाहरण के लिए, लिस्ट (बॉट) शून्य के लिए एक अच्छा प्रकार है। | # बॉट बहुरूपी डेटा संरचनाओं के "लीफ नोड्स" टाइप करने में उपयोगी है। उदाहरण के लिए, लिस्ट (बॉट) शून्य के लिए एक अच्छा प्रकार है। | ||
# जावा जैसी लैंग्वेजओं के [[नल पॉइंटर|"नल पॉइंटर"]] मान (एक सूचक जो किसी ऑब्जेक्ट को इंगित नहीं करता है) के लिए बॉट एक प्राकृतिक प्रकार है: [[जावा (प्रोग्रामिंग भाषा)|जावा]] में, नल प्रकार [[संदर्भ प्रकार|संदर्भ प्रकारों]] का सार्वभौमिक | # जावा जैसी लैंग्वेजओं के [[नल पॉइंटर|"नल पॉइंटर"]] मान (एक सूचक जो किसी ऑब्जेक्ट को इंगित नहीं करता है) के लिए बॉट एक प्राकृतिक प्रकार है: [[जावा (प्रोग्रामिंग भाषा)|जावा]] में, नल प्रकार [[संदर्भ प्रकार|संदर्भ प्रकारों]] का सार्वभौमिक सबटाइप है। नल ''नल टाइप'' का एकमात्र मान है; और इसे किसी भी संदर्भ प्रकार में डाला जा सकता है।<ref>{{cite book | chapter-url = http://docs.oracle.com/javase/specs/jls/se5.0/html/typesValues.html#4.1 | title = जावा भाषा विशिष्टता| edition = 3rd | chapter = Section 4.1: The Kinds of Types and Values }}</ref> हालाँकि, जैसा कि ऊपर वर्णित है, नल टाइप एक बॉटम टाइप नहीं है, यह इसका सबटाइप नहीं है <code>int</code> और अन्य अभाज्य प्रकारों का सबटाइप नहीं है। | ||
# टॉप और बॉट दोनों सहित एक प्रकार की सिस्टम प्रकार के अनुमान के लिए एक स्वाभाविक लक्ष्य प्रतीत होती है, जो विलोपित प्रकार के पैरामीटर पर बाधाओं को सीमाओं की एक जोड़ी द्वारा अधिकृत करने की अनुमति देती है: हम S<:X<:T लिखते हैं जिसका अर्थ है "X का मान S और T के बीच कहीं होना चाहिए।" ऐसी योजना में, एक पूरी तरह से अप्रतिबंधित पैरामीटर नीचे बॉट द्वारा और ऊपर टॉप द्वारा सीमित किया जाता है। | # टॉप और बॉट दोनों सहित एक प्रकार की सिस्टम प्रकार के अनुमान के लिए एक स्वाभाविक लक्ष्य प्रतीत होती है, जो विलोपित प्रकार के पैरामीटर पर बाधाओं को सीमाओं की एक जोड़ी द्वारा अधिकृत करने की अनुमति देती है: हम S<:X<:T लिखते हैं जिसका अर्थ है "X का मान S और T के बीच कहीं होना चाहिए।" ऐसी योजना में, एक पूरी तरह से अप्रतिबंधित पैरामीटर नीचे बॉट द्वारा और ऊपर टॉप द्वारा सीमित किया जाता है। | ||
Line 26: | Line 26: | ||
[[हास्केल (प्रोग्रामिंग भाषा)|हास्केल]] में, <code>एरर</code>कंस्ट्रक्टर के साथ बनाए गए<code>अनडिफाइंड</code>स्थिरांक या शब्दों को किसी भी प्रकार का निर्दिष्ट किया जा सकता है। ऐसी अभिव्यक्ति का मूल्यांकन करने का प्रयास करने से कोड अप्राप्य रूप से निरस्त हो जाता है।<ref>{{cite web |url=https://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-230003.1 |website=Haskell 2010 Language Report |title=Chapter 3 Expressions |access-date=25 October 2022}}</ref> ध्यान दें कि हास्केल एम्प्टी टाइपों की भी अनुमति देता है: [https://hackage.haskell.org/package/void-0.7/docs/Data-Void.html डाटा .वोइड]। | [[हास्केल (प्रोग्रामिंग भाषा)|हास्केल]] में, <code>एरर</code>कंस्ट्रक्टर के साथ बनाए गए<code>अनडिफाइंड</code>स्थिरांक या शब्दों को किसी भी प्रकार का निर्दिष्ट किया जा सकता है। ऐसी अभिव्यक्ति का मूल्यांकन करने का प्रयास करने से कोड अप्राप्य रूप से निरस्त हो जाता है।<ref>{{cite web |url=https://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-230003.1 |website=Haskell 2010 Language Report |title=Chapter 3 Expressions |access-date=25 October 2022}}</ref> ध्यान दें कि हास्केल एम्प्टी टाइपों की भी अनुमति देता है: [https://hackage.haskell.org/package/void-0.7/docs/Data-Void.html डाटा .वोइड]। | ||
[[सामान्य लिस्प]] में <code>निल</code>प्रकार में कोई मान नहीं है, और यह हर प्रकार का एक | [[सामान्य लिस्प]] में <code>निल</code>प्रकार में कोई मान नहीं है, और यह हर प्रकार का एक सबटाइप है।<ref>{{cite web |title=शून्य टाइप करें|url=http://www.lispworks.com/documentation/HyperSpec/Body/t_nil.htm |website=Common Lisp HyperSpec |access-date=25 October 2022}}</ref> <code>निल नाम का प्रकार कभी-कभी नल</code>नामक प्रकार के साथ भ्रमित हो जाता है, जिसका एक ही मान होता है, अर्थात प्रतीक<code>निल</code>है । | ||
[[स्काला (प्रोग्रामिंग भाषा)|स्काला]] में, बॉटम टाइप को<code>नथिंग</code>के रूप में दर्शाया गया है। ऐसे फ़ंक्शंस के लिए इसके उपयोग के अलावा जो केवल अपवाद देते हैं या अन्यथा सामान्य रूप से रिटर्न नहीं होते हैं, इसका उपयोग सहसंयोजक पैरामीटरयुक्त प्रकारों के लिए भी किया जाता है। उदाहरण के लिए, स्काला की लिस्ट एक सहसंयोजक प्रकार की कंस्ट्रक्टर है, इसलिए<code>लिस्ट[नथिंग]</code> सभी प्रकार के <code>लिस्ट[A]</code> के लिए का एक | [[स्काला (प्रोग्रामिंग भाषा)|स्काला]] में, बॉटम टाइप को<code>नथिंग</code>के रूप में दर्शाया गया है। ऐसे फ़ंक्शंस के लिए इसके उपयोग के अलावा जो केवल अपवाद देते हैं या अन्यथा सामान्य रूप से रिटर्न नहीं होते हैं, इसका उपयोग सहसंयोजक पैरामीटरयुक्त प्रकारों के लिए भी किया जाता है। उदाहरण के लिए, स्काला की लिस्ट एक सहसंयोजक प्रकार की कंस्ट्रक्टर है, इसलिए<code>लिस्ट[नथिंग]</code> सभी प्रकार के <code>लिस्ट[A]</code> के लिए का एक सबटाइप है। इसलिए स्काला के लिए <code>निल</code>, किसी भी प्रकार की लिस्ट के अंत को चिह्नित करने के लिए ऑब्जेक्ट, <code>लिस्ट[नथिंग]</code>प्रकार से संबंधित है। | ||
रस्ट में, बॉटम टाइप को नैवर टाइप कहा जाता है और इसे <code>!</code> द्वारा दर्शाया जाता है। यह फ़ंक्शन के प्रकार सिग्नेचर में निहित है जो कभी रिटर्न नहीं होने की गारंटी देते हैं, उदाहरण के लिए कॉल करके <code>पैनिक!()</code> या लूपिंग फॉरएवर को कॉल करके। यह कुछ नियंत्रण-प्रवाह कीवर्ड का भी प्रकार है, जैसे <code>ब्रेक</code>और <code>रिटर्न</code>, जो कोई मान उत्पन्न नहीं करते लेकिन फिर भी अभिव्यक्ति के रूप में प्रयोग करने योग्य हैं।<ref>{{cite web | रस्ट में, बॉटम टाइप को नैवर टाइप कहा जाता है और इसे <code>!</code> द्वारा दर्शाया जाता है। यह फ़ंक्शन के प्रकार सिग्नेचर में निहित है जो कभी रिटर्न नहीं होने की गारंटी देते हैं, उदाहरण के लिए कॉल करके <code>पैनिक!()</code> या लूपिंग फॉरएवर को कॉल करके। यह कुछ नियंत्रण-प्रवाह कीवर्ड का भी प्रकार है, जैसे <code>ब्रेक</code>और <code>रिटर्न</code>, जो कोई मान उत्पन्न नहीं करते लेकिन फिर भी अभिव्यक्ति के रूप में प्रयोग करने योग्य हैं।<ref>{{cite web |
Revision as of 16:06, 18 July 2023
टाइप सिद्धांत में, गणितीय तर्क के भीतर एक सिद्धांत, टाइप सिस्टम का बॉटम टाइप वह प्रकार होता है जो अन्य सभी प्रकारों का सबटाइप होता है।[1]
जहां ऐसा प्रकार निहित है, इसे प्रायः अप टैक (⊥) प्रतीक के साथ दर्शाया जाता है।
जब बॉटम टाइप खाली होता है, तो एक फ़ंक्शन जिसका रिटर्न टाइप बॉटम होता है, जो कोई भी मान रिटर्न नहीं कर सकता, यहां तक कि यूनिट टाइप का अकेला मान भी नहीं कर सकता। ऐसी लैंग्वेज में, बॉटम टाइप को शून्य या नैवर टाइप के रूप में जाना जा सकता है। करी-हावर्ड पत्राचार में, एक एम्प्टी टाइप असत्यता से मेल खाता है।
कंप्यूटर विज्ञान अनुप्रयोग
सबटाइपिंग सिस्टम्स में, बॉटम टाइप सभी प्रकारों का एक सबटाइप होता है।[1] यह टॉप टाइप का दोहरा प्रकार है, जो एक सिस्टम में सभी संभावित मानों का विस्तार करता है।
यदि एक टाइप सिस्टम सुदृढ़ है, तो बॉटम टाइप अवासित है और बॉटम टाइप शब्द एक तार्किक विरोधाभास का प्रतिनिधित्व करता है। ऐसी प्रणालियों में, प्रायः बॉटम टाइप और एम्प्टी टाइप के बीच कोई अंतर नहीं किया जाता है, और शब्दों का उपयोग परस्पर किया जा सकता है।
यदि बॉटम टाइप आवासित है, तो इसकी स्थिति प्रायः अपरिभाषित व्यवहार, अनंत पुनरावृत्ति, या अप्राप्य त्रुटियों जैसी त्रुटि स्थितियों के अनुरूप होती हैं।
बॉटम के साथ परिबद्ध परिमाणन में,[1]पियर्स का कहना है कि "बॉट" के कई उपयोग हैं:
- एक लैंग्वेज जिसमें अपवाद हैं, रेज निर्माण के लिए एक प्राकृतिक प्रकार रेज ∈ अपवाद--> बॉट है, और इसी तरह अन्य नियंत्रण संरचनाओं के लिए भी है। सहज रूप से, यहां बॉट उस प्रकार की गणना है जो कोई उत्तर नहीं देता है।
- बॉट बहुरूपी डेटा संरचनाओं के "लीफ नोड्स" टाइप करने में उपयोगी है। उदाहरण के लिए, लिस्ट (बॉट) शून्य के लिए एक अच्छा प्रकार है।
- जावा जैसी लैंग्वेजओं के "नल पॉइंटर" मान (एक सूचक जो किसी ऑब्जेक्ट को इंगित नहीं करता है) के लिए बॉट एक प्राकृतिक प्रकार है: जावा में, नल प्रकार संदर्भ प्रकारों का सार्वभौमिक सबटाइप है। नल नल टाइप का एकमात्र मान है; और इसे किसी भी संदर्भ प्रकार में डाला जा सकता है।[2] हालाँकि, जैसा कि ऊपर वर्णित है, नल टाइप एक बॉटम टाइप नहीं है, यह इसका सबटाइप नहीं है
int
और अन्य अभाज्य प्रकारों का सबटाइप नहीं है। - टॉप और बॉट दोनों सहित एक प्रकार की सिस्टम प्रकार के अनुमान के लिए एक स्वाभाविक लक्ष्य प्रतीत होती है, जो विलोपित प्रकार के पैरामीटर पर बाधाओं को सीमाओं की एक जोड़ी द्वारा अधिकृत करने की अनुमति देती है: हम S<:X<:T लिखते हैं जिसका अर्थ है "X का मान S और T के बीच कहीं होना चाहिए।" ऐसी योजना में, एक पूरी तरह से अप्रतिबंधित पैरामीटर नीचे बॉट द्वारा और ऊपर टॉप द्वारा सीमित किया जाता है।
प्रोग्रामिंग लैंग्वेजओं में
प्रायः उपयोग की जाने वाली अधिकांश लैंग्वेजओं में बॉटम टाइप को दर्शाने का कोई तरीका नहीं होता है। कुछ उल्लेखनीय अपवाद हैं।
हास्केल में, एरर
कंस्ट्रक्टर के साथ बनाए गएअनडिफाइंड
स्थिरांक या शब्दों को किसी भी प्रकार का निर्दिष्ट किया जा सकता है। ऐसी अभिव्यक्ति का मूल्यांकन करने का प्रयास करने से कोड अप्राप्य रूप से निरस्त हो जाता है।[3] ध्यान दें कि हास्केल एम्प्टी टाइपों की भी अनुमति देता है: डाटा .वोइड।
सामान्य लिस्प में निल
प्रकार में कोई मान नहीं है, और यह हर प्रकार का एक सबटाइप है।[4] निल नाम का प्रकार कभी-कभी नल
नामक प्रकार के साथ भ्रमित हो जाता है, जिसका एक ही मान होता है, अर्थात प्रतीकनिल
है ।
स्काला में, बॉटम टाइप कोनथिंग
के रूप में दर्शाया गया है। ऐसे फ़ंक्शंस के लिए इसके उपयोग के अलावा जो केवल अपवाद देते हैं या अन्यथा सामान्य रूप से रिटर्न नहीं होते हैं, इसका उपयोग सहसंयोजक पैरामीटरयुक्त प्रकारों के लिए भी किया जाता है। उदाहरण के लिए, स्काला की लिस्ट एक सहसंयोजक प्रकार की कंस्ट्रक्टर है, इसलिएलिस्ट[नथिंग]
सभी प्रकार के लिस्ट[A]
के लिए का एक सबटाइप है। इसलिए स्काला के लिए निल
, किसी भी प्रकार की लिस्ट के अंत को चिह्नित करने के लिए ऑब्जेक्ट, लिस्ट[नथिंग]
प्रकार से संबंधित है।
रस्ट में, बॉटम टाइप को नैवर टाइप कहा जाता है और इसे !
द्वारा दर्शाया जाता है। यह फ़ंक्शन के प्रकार सिग्नेचर में निहित है जो कभी रिटर्न नहीं होने की गारंटी देते हैं, उदाहरण के लिए कॉल करके पैनिक!()
या लूपिंग फॉरएवर को कॉल करके। यह कुछ नियंत्रण-प्रवाह कीवर्ड का भी प्रकार है, जैसे ब्रेक
और रिटर्न
, जो कोई मान उत्पन्न नहीं करते लेकिन फिर भी अभिव्यक्ति के रूप में प्रयोग करने योग्य हैं।[5]
सीलोन में, बॉटम टाइप नथिंग
है।[6] यह स्काला मेंनथिंग
के बराबर है और अन्य सभी प्रकारों के साथ-साथ एक खाली सेट के प्रतिच्छेदन का प्रतिनिधित्व करता है।
जूलिया में, बॉटम टाइपयूनियन{}
है।[7]
टाइपस्क्रिप्ट में, बॉटम टाइपनैवर
है।[8][9]
क्लोजर टूल्स एनोटेशन के साथ जावास्क्रिप्ट में, बॉटम टाइप!नल
(शाब्दिक रूप से, इसका नल
इकाई प्रकार एक गैर-शून्य सदस्य) है।
PHP में, बॉटम टाइपनैवर
है।
पायथन में, बॉटम टाइपटाइपिंग.नोरिटर्न
(टाइपिंग.नैवर
संस्करण 3.11 से) है।[10][11]
कोटलिन में, बॉटम टाइपनथिंग
है। [12]
डी में, बॉटम टाइप नॉरटर्न
है [13]
डार्ट में, ध्वनि शून्य सुरक्षा अपडेट संस्करण 2.12 के बाद से, के साथ,नैवर
प्रकार को बॉटम टाइप के रूप में प्रस्तुत किया गया था। उससे पहले बॉटम टाइपनल
हुआ करता था।[14][15]
यह भी देखें
संदर्भ
- ↑ 1.0 1.1 1.2 Pierce, Benjamin C. (1997). "तल के साथ परिबद्ध परिमाणीकरण". Indiana University CSCI Technical Report (492): 1.
- ↑ "Section 4.1: The Kinds of Types and Values". जावा भाषा विशिष्टता (3rd ed.).
- ↑ "Chapter 3 Expressions". Haskell 2010 Language Report. Retrieved 25 October 2022.
- ↑ "शून्य टाइप करें". Common Lisp HyperSpec. Retrieved 25 October 2022.
- ↑ "Primitive Type never". The Rust Standard Library Documentation. Retrieved 2020-09-24.
- ↑ "Chapter 3. Type system — 3.2.5. The bottom type". The Ceylon Language. Red Hat, Inc. Retrieved 2017-02-19.
- ↑ "Essentials - The Julia Language", The Julia Programming Language Documentation, retrieved 2021-08-13
- ↑ The never type, TypeScript 2.0 release notes, Microsoft, 2016-10-06, retrieved 2019-11-01
- ↑ The never type, TypeScript 2.0 release notes, source code, Microsoft, 2016-10-06, retrieved 2019-11-01
- ↑ typing.NoReturn, typing — Support for type hints, Python documentation, Python Software Foundation, retrieved 2020-02-25
- ↑ "typing — Support for type hints — Python 3.12.0a0 documentation". docs.python.org. Retrieved 2022-07-04.
- ↑ Nothing, retrieved 2020-05-15
- ↑ "प्रकार - डी प्रोग्रामिंग भाषा". dlang.org. Retrieved 2022-10-20.
- ↑ Understanding null safety - top and bottom, retrieved 2022-04-13
- ↑ Understanding null safety - never for unreachable code, retrieved 2022-04-13