बॉटम टाइप
टाइप सिद्धांत में, गणितीय तर्क के भीतर एक सिद्धांत, टाइप सिस्टम का बॉटम टाइप वह प्रकार होता है जो अन्य सभी प्रकारों का सबटाइप होता है।[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