नाममात्र प्रकार प्रणाली: Difference between revisions

From Vigyanwiki
No edit summary
No edit summary
Line 1: Line 1:
{{Type systems}}
{{Type systems}}
[[कंप्यूटर विज्ञान]] में, प्रकार की प्रणाली नाममात्र या नाममात्र प्रकार की प्रणाली (या नाम-आधारित प्रकार की प्रणाली) होती है, यदि [[डेटा प्रकार]] की संगतता और समानता स्पष्ट घोषणाओं और/या प्रकारों के नाम से निर्धारित होती है। नाममात्र प्रणालियों का उपयोग यह निर्धारित करने के लिए किया जाता है कि क्या प्रकार समतुल्य हैं, साथ ही साथ यदि प्रकार दूसरे का उपप्रकार है। [[ संरचनात्मक [[प्रकार प्रणाली]] ]] के साथ नाममात्र प्रकार के सिस्टम विपरीत हैं, जहां तुलना प्रश्न में प्रकार की संरचना पर आधारित होती है और स्पष्ट घोषणाओं की आवश्यकता नहीं होती है।
[[कंप्यूटर विज्ञान]] में '''नाममात्र प्रकार प्रणाली''' (या नाम-आधारित प्रकार की प्रणाली) होती है, यदि [[डेटा प्रकार]] की संगतता और समानता स्पष्ट घोषणाओं और/या प्रकारों के नाम से निर्धारित होती है। नाममात्र प्रणालियों का उपयोग यह निर्धारित करने के लिए किया जाता है कि क्या प्रकार समतुल्य हैं, साथ ही साथ यदि प्रकार दूसरे का उपप्रकार है। संरचनात्मक [[प्रकार प्रणाली]] के साथ नाममात्र प्रकार प्रणाली विपरीत रहती हैं, जहां इसकी तुलना प्रश्न में प्रकार की संरचना पर आधारित होती है और स्पष्ट घोषणाओं की आवश्यकता नहीं होती है।


== नाममात्र टाइपिंग ==
== नाममात्र टाइपिंग ==


नाममात्र टाइपिंग का अर्थ है कि दो चर प्रकार-संगत हैं यदि और केवल तभी जब उनकी घोषणाओं का नाम समान प्रकार हो। उदाहरण के लिए, [[सी (प्रोग्रामिंग भाषा)]] में, दो <code>struct</code> ही अनुवाद इकाई में विभिन्न नामों वाले प्रकारों को कभी भी संगत नहीं माना जाता है, भले ही उनके पास समान फ़ील्ड घोषणाएँ हों।
'''नाममात्र टाइपिंग''' का अर्थ है कि दो वैरियेबल प्रकार संगत रहते हैं और यह तभी रहते हैं जब यह केवल उनकी घोषणाओं का नाम समान प्रकार से रखते हो। उदाहरण के लिए, [[सी (प्रोग्रामिंग भाषा)]] में, दो <code>struct</code> ही अनुवाद इकाई में विभिन्न नामों वाले प्रकारों को कभी भी संगत नहीं माना जाता है, भले ही उनके पास समान फ़ील्ड घोषणाएँ हों या ना हों।


हालाँकि, C भी अनुमति देता है <code>[[typedef]]</code> घोषणा, जो मौजूदा प्रकार के लिए उपनाम का परिचय देती है। ये केवल [[ वाक्य - विन्यास |वाक्य - विन्यास]] हैं और टाइप चेकिंग के उद्देश्य से इसके उपनाम से टाइप को अलग नहीं करते हैं। यह सुविधा, कई भाषाओं में मौजूद है, जिसके परिणामस्वरूप प्रकार की सुरक्षा का नुकसान हो सकता है (उदाहरण के लिए) ही आदिम पूर्णांक प्रकार का उपयोग दो अलग-अलग तरीकों से किया जाता है। [[ हास्केल (प्रोग्रामिंग भाषा) |हास्केल (प्रोग्रामिंग भाषा)]] के रूप में सी-स्टाइल सिंटैक्टिक उपनाम प्रदान करता है <code>type</code> घोषणा, साथ ही <code>newtype</code> घोषणा जो मौजूदा प्रकार के लिए नया, विशिष्ट प्रकार, समरूपता का परिचय देती है।<ref>{{cite web|url=https://www.haskell.org/onlinereport/haskell2010/haskellch4.html#x10-680004.2|title=Haskell 2010 Report: Declarations and Bindings: User-Defined Datatypes|access-date=2015-06-02|archive-url=https://web.archive.org/web/20170104234441/https://www.haskell.org/onlinereport/haskell2010/haskellch4.html#x10-680004.2|archive-date=2017-01-04|url-status=dead}}</ref>
चूंकि, सी भी <code>[[typedef]]</code> घोषणा की अनुमति देता है, जो वर्तमान समय में प्रयोग किए जाने वाले उपनाम का परिचय देती है। ये केवल [[ वाक्य - विन्यास |वाक्य - विन्यास]] हैं और टाइप चेकिंग के उद्देश्य से इसके उपनाम से टाइप को अलग नहीं करते हैं। यह सुविधा, कई भाषाओं में मौजूद है, जिसके परिणामस्वरूप प्रकार की सुरक्षा का हानि हो सकता है (उदाहरण के लिए) ही उत्तम पूर्णांक का उपयोग दो अलग-अलग विधियों से किया जाता है। इस प्रकार [[ हास्केल (प्रोग्रामिंग भाषा) |हास्केल (प्रोग्रामिंग भाषा)]] के रूप में सी-स्टाइल सिंटैक्टिक उपनाम प्रदान करता है तथा मुख्य रूप से <code>type</code> घोषणा, साथ ही <code>newtype</code> घोषणा जो मौजूदा प्रकार के लिए नया, विशिष्ट प्रकार, समरूपता का परिचय देती है।<ref>{{cite web|url=https://www.haskell.org/onlinereport/haskell2010/haskellch4.html#x10-680004.2|title=Haskell 2010 Report: Declarations and Bindings: User-Defined Datatypes|access-date=2015-06-02|archive-url=https://web.archive.org/web/20170104234441/https://www.haskell.org/onlinereport/haskell2010/haskellch4.html#x10-680004.2|archive-date=2017-01-04|url-status=dead}}</ref>
== नाममात्र उपप्रकार ==
== नाममात्र उपप्रकार ==


इसी तरह से, नाममात्र उपप्रकार का अर्थ है कि प्रकार दूसरे का उप प्रकार है अगर और केवल तभी इसकी परिभाषा में स्पष्ट रूप से घोषित किया गया हो। सामान्य रूप से टाइप की गई भाषाएं आमतौर पर उस आवश्यकता को लागू करती हैं जो घोषित उपप्रकार संरचनात्मक रूप से संगत होती हैं (हालांकि [[एफिल (प्रोग्रामिंग भाषा)]] गैर-संगत उपप्रकारों को घोषित करने की अनुमति देती है)। हालांकि, उपप्रकार जो दुर्घटना से संरचनात्मक रूप से संगत हैं, लेकिन उपप्रकार के रूप में घोषित नहीं किए गए हैं, उन्हें उपप्रकार नहीं माना जाता है।
इसी तरह से '''नाममात्र उपप्रकार''' का अर्थ है कि किसी प्रकार से यह दूसरे का उपप्रकार को प्रदर्शित करें और यह तभी होता हैं जब यह केवल इसकी परिभाषा में स्पष्ट रूप से घोषित किया गया हो। सामान्य रूप से टाइप की गई भाषाएं सामान्यतः उस आवश्यकता को लागू करती हैं जो घोषित उपप्रकार संरचनात्मक रूप से संगत होती हैं (चूंकि [[एफिल (प्रोग्रामिंग भाषा)]] गैर-संगत उपप्रकारों को घोषित करने की अनुमति देती है)। चूंकि, उपप्रकार जो दुर्घटना से संरचनात्मक रूप से संगत हैं, लेकिन उपप्रकार के रूप में घोषित नहीं किए गए हैं, उन्हें उपप्रकार नहीं माना जाता है।


[[C++]], C Sharp (प्रोग्रामिंग लैंग्वेज)|C#, Java (प्रोग्रामिंग लैंग्वेज), [[ उद्देश्य सी |उद्देश्य सी]] , [[ डेल्फी (प्रोग्रामिंग भाषा) |डेल्फी (प्रोग्रामिंग भाषा)]] , [[ स्विफ्ट (प्रोग्रामिंग भाषा) |स्विफ्ट (प्रोग्रामिंग भाषा)]] , जूलिया (प्रोग्रामिंग लैंग्वेज) और [[ जंग (प्रोग्रामिंग भाषा) |जंग (प्रोग्रामिंग भाषा)]] सभी मुख्य रूप से नाममात्र टाइपिंग दोनों का उपयोग करते हैं और नाममात्र उपप्रकार।
[[C++|सी++]], सी # (प्रोग्रामिंग लैंग्वेज)या सी#, जावा (प्रोग्रामिंग भाषा), स्टेटमेंट [[ उद्देश्य सी |सी]] , [[ डेल्फी (प्रोग्रामिंग भाषा) |डेल्फी (प्रोग्रामिंग भाषा)]] , [[ स्विफ्ट (प्रोग्रामिंग भाषा) |स्विफ्ट (प्रोग्रामिंग भाषा)]] , जूलिया (प्रोग्रामिंग लैंग्वेज) और [[ जंग (प्रोग्रामिंग भाषा) |गार्बेज (प्रोग्रामिंग भाषा)]] सभी मुख्य रूप से नाममात्र टाइपिंग और नाममात्र उपप्रकार दोनों का उपयोग करते हैं।


कुछ नामांकित-उप-टाइप की गई भाषाएं, जैसे कि जावा और सी#, कक्षाओं को ''अंतिम'' (या सी# शब्दावली में ''सीलबंद'') घोषित करने की अनुमति देती हैं, यह दर्शाता है कि आगे कोई उप-टाइपिंग की अनुमति नहीं है।
कुछ नामांकित-उप-टाइप की गई भाषाएं, जैसे कि जावा और सी#, क्लासेस को ''अंतिम'' (या सी# शब्दावली में ''सीलबंद'') घोषित करने की अनुमति देती हैं, यह दर्शाता है कि आगे कोई उप-टाइपिंग की अनुमति नहीं है।


== तुलना ==
== तुलना ==


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


== यह भी देखें ==
== यह भी देखें ==
* संरचनात्मक प्रकार प्रणाली
* संरचनात्मक प्रकार प्रणाली
* [[सार प्रकार]]
* [[सार प्रकार]]
* टाइप सिस्टम
* टाइप प्रणाली


==संदर्भ==
==संदर्भ==

Revision as of 23:33, 7 March 2023

कंप्यूटर विज्ञान में नाममात्र प्रकार प्रणाली (या नाम-आधारित प्रकार की प्रणाली) होती है, यदि डेटा प्रकार की संगतता और समानता स्पष्ट घोषणाओं और/या प्रकारों के नाम से निर्धारित होती है। नाममात्र प्रणालियों का उपयोग यह निर्धारित करने के लिए किया जाता है कि क्या प्रकार समतुल्य हैं, साथ ही साथ यदि प्रकार दूसरे का उपप्रकार है। संरचनात्मक प्रकार प्रणाली के साथ नाममात्र प्रकार प्रणाली विपरीत रहती हैं, जहां इसकी तुलना प्रश्न में प्रकार की संरचना पर आधारित होती है और स्पष्ट घोषणाओं की आवश्यकता नहीं होती है।

नाममात्र टाइपिंग

नाममात्र टाइपिंग का अर्थ है कि दो वैरियेबल प्रकार संगत रहते हैं और यह तभी रहते हैं जब यह केवल उनकी घोषणाओं का नाम समान प्रकार से रखते हो। उदाहरण के लिए, सी (प्रोग्रामिंग भाषा) में, दो struct ही अनुवाद इकाई में विभिन्न नामों वाले प्रकारों को कभी भी संगत नहीं माना जाता है, भले ही उनके पास समान फ़ील्ड घोषणाएँ हों या ना हों।

चूंकि, सी भी typedef घोषणा की अनुमति देता है, जो वर्तमान समय में प्रयोग किए जाने वाले उपनाम का परिचय देती है। ये केवल वाक्य - विन्यास हैं और टाइप चेकिंग के उद्देश्य से इसके उपनाम से टाइप को अलग नहीं करते हैं। यह सुविधा, कई भाषाओं में मौजूद है, जिसके परिणामस्वरूप प्रकार की सुरक्षा का हानि हो सकता है (उदाहरण के लिए) ही उत्तम पूर्णांक का उपयोग दो अलग-अलग विधियों से किया जाता है। इस प्रकार हास्केल (प्रोग्रामिंग भाषा) के रूप में सी-स्टाइल सिंटैक्टिक उपनाम प्रदान करता है तथा मुख्य रूप से type घोषणा, साथ ही newtype घोषणा जो मौजूदा प्रकार के लिए नया, विशिष्ट प्रकार, समरूपता का परिचय देती है।[1]

नाममात्र उपप्रकार

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

सी++, सी # (प्रोग्रामिंग लैंग्वेज)या सी#, जावा (प्रोग्रामिंग भाषा), स्टेटमेंट सी , डेल्फी (प्रोग्रामिंग भाषा) , स्विफ्ट (प्रोग्रामिंग भाषा) , जूलिया (प्रोग्रामिंग लैंग्वेज) और गार्बेज (प्रोग्रामिंग भाषा) सभी मुख्य रूप से नाममात्र टाइपिंग और नाममात्र उपप्रकार दोनों का उपयोग करते हैं।

कुछ नामांकित-उप-टाइप की गई भाषाएं, जैसे कि जावा और सी#, क्लासेस को अंतिम (या सी# शब्दावली में सीलबंद) घोषित करने की अनुमति देती हैं, यह दर्शाता है कि आगे कोई उप-टाइपिंग की अनुमति नहीं है।

तुलना

इस प्रकार आकस्मिक प्रकार की समानता को रोकने के लिए नाममात्र टाइपिंग उपयोगी है, जो संरचनात्मक टाइपिंग की तुलना में उत्तम प्रकार की सुरक्षा की अनुमति देता है। इसकी लागत कम होती है, उदाहरण के लिए नाममात्र टाइपिंग वर्तमान समय में उपप्रकारों के संशोधन के बिना नए सुपर-प्रकारों को बनाने की अनुमति नहीं देती है।

यह भी देखें

संदर्भ

  1. "Haskell 2010 Report: Declarations and Bindings: User-Defined Datatypes". Archived from the original on 2017-01-04. Retrieved 2015-06-02.

स्रोत

बाहरी संबंध