बॉटम टाइप: Difference between revisions
(Created page with "{{Short description|Universal subtype in logic and computer science}} प्रकार सिद्धांत में, गणितीय तर्क के...") |
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"/>यह [[शीर्ष प्रकार]] का दोहरा प्रकार है, जो एक सिस्टम में सभी संभावित मानों को फैलाता है। | ||
यदि एक प्रकार की प्रणाली [[प्रकार की सुरक्षा]] है, तो | यदि एक प्रकार की प्रणाली [[प्रकार की सुरक्षा|सुदृढ़]] है, तो बॉटम टाइप अवासित है और बॉटम टाइप शब्द एक तार्किक विरोधाभास का प्रतिनिधित्व करता है। ऐसी प्रणालियों में, प्रायः बॉटम टाइप और [[खाली प्रकार|एम्प्टी टाइप]] के बीच कोई अंतर नहीं किया जाता है, और शब्दों का उपयोग परस्पर किया जा सकता है। | ||
यदि | यदि बॉटम टाइप आवासित है, तो इसकी स्थिति प्रायः अपरिभाषित व्यवहार, अनंत पुनरावृत्ति, या अप्राप्य त्रुटियों जैसी त्रुटि स्थितियों के अनुरूप होती हैं। | ||
बॉटम के साथ | ''बॉटम के साथ परिबद्ध परिमाणन'' में,<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 के बीच कहीं होना चाहिए।" ऐसी योजना में, एक पूरी तरह से अप्रतिबंधित पैरामीटर नीचे बॉट द्वारा और ऊपर टॉप द्वारा सीमित किया जाता है। | ||
==प्रोग्रामिंग भाषाओं में== | ==प्रोग्रामिंग भाषाओं में== | ||
प्रायः उपयोग की जाने वाली अधिकांश भाषाओं में बॉटम टाइप को दर्शाने का कोई तरीका नहीं होता है। कुछ उल्लेखनीय अपवाद हैं। | |||
[[हास्केल (प्रोग्रामिंग भाषा)]] में, <code> | [[हास्केल (प्रोग्रामिंग भाषा)|हास्केल]] में, <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>प्रकार में कोई मान नहीं है, और यह हर प्रकार का एक उपप्रकार है।<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>!</code> द्वारा दर्शाया जाता है। यह फ़ंक्शन के प्रकार सिग्नेचर में निहित है जो कभी रिटर्न नहीं होने की गारंटी देते हैं, उदाहरण के लिए कॉल करके <code>पैनिक!()</code> या लूपिंग फॉरएवर को कॉल करके। यह कुछ नियंत्रण-प्रवाह कीवर्ड का भी प्रकार है, जैसे <code>ब्रेक</code>और <code>रिटर्न</code>, जो कोई मान उत्पन्न नहीं करते लेकिन फिर भी अभिव्यक्ति के रूप में प्रयोग करने योग्य हैं।<ref>{{cite web | ||
| url = https://doc.rust-lang.org/std/primitive.never.html | | url = https://doc.rust-lang.org/std/primitive.never.html | ||
| title = Primitive Type never | | title = Primitive Type never | ||
Line 35: | Line 36: | ||
| access-date = 2020-09-24 | | access-date = 2020-09-24 | ||
}}</ref> | }}</ref> | ||
[[सीलोन (प्रोग्रामिंग भाषा)]] में, | |||
[[सीलोन (प्रोग्रामिंग भाषा)|सीलोन]] में, बॉटम टाइप <code>नथिंग</code>है।<ref>{{cite web | |||
| url = https://ceylon-lang.org/documentation/spec/html/typesystem.html#bottomtype | | url = https://ceylon-lang.org/documentation/spec/html/typesystem.html#bottomtype | ||
| title = Chapter 3. Type system — 3.2.5. The bottom type | | title = Chapter 3. Type system — 3.2.5. The bottom type | ||
Line 41: | Line 43: | ||
| publisher = Red Hat, Inc. | | publisher = Red Hat, Inc. | ||
| access-date = 2017-02-19 | | access-date = 2017-02-19 | ||
}}</ref> यह | }}</ref> यह स्काला में<code>नथिंग</code>के बराबर है और अन्य सभी प्रकारों के साथ-साथ एक खाली सेट के प्रतिच्छेदन का प्रतिनिधित्व करता है। | ||
[[जूलिया (प्रोग्रामिंग भाषा)|जूलिया]] में, बॉटम टाइप<code>यूनियन{}</code>है।<ref>{{Citation|title=Essentials - The Julia Language|website=The Julia Programming Language Documentation|url=https://docs.julialang.org/en/v1/base/base/#Union{}|access-date=2021-08-13}}</ref> | |||
[[ टाइपप्रति |टाइपस्क्रिप्ट]] में, बॉटम टाइप<code>नैवर</code>है।<ref>{{Citation|title=The never type, TypeScript 2.0 release notes|date=2016-10-06|url=https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-0.html#the-never-type|publisher=Microsoft|access-date=2019-11-01}}</ref><ref>{{Citation|title=The never type, TypeScript 2.0 release notes, source code|date=2016-10-06|url=https://github.com/microsoft/TypeScript-Handbook/blob/bb3564f4f06dd776d430198a137ae9058454d990/pages/release%20notes/TypeScript%202.0.md#the-never-type|publisher=Microsoft|access-date=2019-11-01}}</ref> | |||
क्लोजर टूल्स एनोटेशन के साथ [[जावास्क्रिप्ट]] में, बॉटम टाइप<code>!नल</code>(शाब्दिक रूप से, इसका <code>नल</code> इकाई प्रकार एक गैर-शून्य सदस्य) है। | |||
[[PHP]] में, बॉटम टाइप<code>नैवर</code>है। | |||
[[पायथन (प्रोग्रामिंग भाषा)|पायथन]] में, बॉटम टाइप<code>टाइपिंग.नोरिटर्न</code>(<code>टाइपिंग.नैवर</code> संस्करण 3.11 से) है।<ref>{{Citation|title=typing.NoReturn, typing — Support for type hints, Python documentation|url=https://docs.python.org/3/library/typing.html#typing.NoReturn|publisher=Python Software Foundation|access-date=2020-02-25}}</ref><ref>{{Cite web |title=typing — Support for type hints — Python 3.12.0a0 documentation |url=https://docs.python.org/3.12/library/typing.html#typing.Never |access-date=2022-07-04 |website=docs.python.org}}</ref> | |||
[[कोटलिन (प्रोग्रामिंग भाषा)|कोटलिन]] में, बॉटम टाइप<code>नथिंग</code>है। <ref>{{Citation|title=Nothing|url=https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/-nothing.html|access-date=2020-05-15}}</ref> | |||
[[ | [[डी (प्रोग्रामिंग भाषा)|डी]] में, बॉटम टाइप <code>नॉरटर्न</code>है <ref>{{Cite web |title=प्रकार - डी प्रोग्रामिंग भाषा|url=https://dlang.org/spec/type.html#noreturn |access-date=2022-10-20 |website=dlang.org}}</ref> | ||
[[ | [[डार्ट (प्रोग्रामिंग भाषा)|डार्ट]] में, [https://medium.com/dartlang/ausing-dart-2-12-499a6e689c87 ध्वनि शून्य सुरक्षा अपडेट] संस्करण 2.12 के बाद से, के साथ,<code>नैवर</code> प्रकार को बॉटम टाइप के रूप में प्रस्तुत किया गया था। उससे पहले बॉटम टाइप<code>नल</code>हुआ करता था।<ref>{{Citation|title=Understanding null safety - top and bottom|url=https://dart.dev/null-safety/understanding-null-safety#top-and-bottom|access-date=2022-04-13}}</ref><ref>{{Citation|title=Understanding null safety - never for unreachable code|url=https://dart.dev/null-safety/understanding-null-safety#never-for-unreachable-code|access-date=2022-04-13}}</ref> | ||
Revision as of 05:18, 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