क्रमिक टाइपिंग

From Vigyanwiki

क्रमिक टाइपिंग एक प्रकार की प्रणाली है जिसमें कुछ चर (कंप्यूटर विज्ञान) और अभिव्यक्तियों को प्रकार दिए जा सकते हैं और टाइपिंग की शुद्धता की जाँच संकलन समय पर की जाती है (जो स्थिर टाइपिंग है) और कुछ भावों को बिना टाइप किए छोड़ दिया जा सकता है और अंतिम प्रकार की सुरक्षा की सूचना दी जाती है। रनटाइम पर (कार्यक्रम जीवनचक्र चरण) (जो गतिशील टाइपिंग है)। क्रमिक टाइपिंग सॉफ्टवेयर डेवलपर्स को एक ही भाषा के भीतर उपयुक्त रूप से किसी भी प्रकार के प्रतिमान को चुनने की अनुमति देती है।[1] कई परिस्थितियों में उपलब्ध गतिशील भाषा में क्रमिक टाइपिंग जोड़ी जाती है, जिससे व्युत्पन्न भाषा का निर्माण होता है, लेकिन स्थैतिक टाइपिंग की आवश्यकता नहीं होती है। कुछ परिस्थितियों में भाषा प्रारम्भ से ही क्रमिक टाइपिंग का उपयोग करती है।

इतिहास

यह शब्द जेरेमी सीक द्वारा गढ़ा गया था। जेरेमी सीक और वालिद ताहा ने 2006 में क्रमिक टाइपिंग पर शोध करना प्रारम्भ किया था।[1]

कार्यान्वयन

क्रमिक टाइपिंग में, स्टैटिकली-अज्ञात प्रकारों का प्रतिनिधित्व करने के लिए डायनामिक नामक एक विशेष प्रकार का उपयोग किया जाता है। प्रकार की समानता की धारणा को एक नए संबंध द्वारा प्रतिस्थापित किया जाता है जिसे संगति कहा जाता है जो गतिशील प्रकार को हर दूसरे प्रकार से संबंधित करता है। संगति संबंध प्रतिवर्ती और सममित है लेकिन सकर्मक नहीं है।[2]

स्थैतिक और गतिशील सबटाइपिंग को एकीकृत करने के पिछले प्रयासों ने गतिशील प्रकार को उपप्रकार पदानुक्रम के ऊपर और नीचे दोनों बनाने की कोशिश की थीl हालांकि, क्योंकि उप-टाइपिंग सकर्मक है, जिसके परिणामस्वरूप प्रत्येक प्रकार हर दूसरे प्रकार से संबंधित हो जाता है, और इसलिए उप-टाइपिंग किसी भी स्थिर प्रकार की त्रुटियों से इंकार नहीं करता है। प्रकार प्रणाली में संभाव्यता जाँच के दूसरे चरण को जोड़ने से यह समस्या पूरी तरह से हल नहीं हुई थी।[3][4]

क्रमिक टाइपिंग को ऑब्जेक्ट-ओरिएंटेड भाषा के टाइप सिस्टम में आसानी से एकीकृत किया जा सकता है जो पहले से ही सबटाइपिंग के संबंध में निहित अपकास्टिंगकी अनुमति देने के लिए सबटाइपिंग # सब्सम्पशन नियम का उपयोग करता है। मुख्य विचार यह है कि स्थिरता और उपप्रकार ऑर्थोगोनल विचार हैं जो अच्छी तरह से रचना करते हैं। क्रमिक टाइप की गई भाषा में सबटाइपिंग जोड़ने के लिए , बस सबसम्प्शन नियम जोड़ें और एक सबटाइपिंग नियम जोड़ें जो डायनेमिक टाइप को खुद का एक सबटाइप बनाता है, क्योंकि सबटाइपिंग को रिफ्लेक्सिव माना जाता है। (लेकिन उपप्रकार क्रम के शीर्ष को गतिशील न बनाएं!)[5]

उदाहरण

उपलब्ध और गतिशील रूप से टाइप की गई भाषाओं से प्राप्त क्रमिक टाइप की गई भाषाओं के उदाहरणों में क्लोजर कंपाइलर, टाइपप्रति (दोनों जावास्क्रिप्ट के लिए) सम्मिलित हैं[6]),[7] हैक (प्रोग्रामिंग भाषा) (PHP के लिए), PHP (7.0.1 के बाद से)।[8]टाइप किया हुआ रैकेट (रैकेट के लिए (प्रोग्रामिंग भाषा)[9][10]), टाइप क्लोजर (क्लोजर के लिए),[11] साइथन (एक पायथन (प्रोग्रामिंग लैंग्वेज) कंपाइलर), माइपी (पायथन (प्रोग्रामिंग लैंग्वेज) के लिए एक स्टैटिक टाइप चेकर),[12] pyre (पायथन के लिए वैकल्पिक स्टेटिक टाइप चेकर),[13] या सीपर्ल (एक टाइप किया हुआ पर्ल 5)। एक्शनस्क्रिप्ट क्रमिक टाइप की जाने वाली भाषा है[14] यह अब ईसीएमएस्क्रिप्ट का कार्यान्वयन है, हालांकि यह मूल रूप से अलग-अलग भाई-बहन के रूप में उत्पन्न हुआ, दोनों ही एप्प्ल के हाइपरटॉक से प्रभावित थे।

J (प्रोग्रामिंग भाषा) के लिए एक प्रणाली विकसित की गई है,[15] प्रकार प्रणाली के सामान्य सत्यापन गुणों के साथ-साथ फ़ंक्शन परिभाषाओं के बाहर प्रकार के कार्यों को लागू करने के लिए ज़बरदस्ती, त्रुटि प्रसार और फ़िल्टरिंग जोड़ना, जिससे प्रकार की परिभाषाओं का लचीलापन बढ़ जाता है।

इसके विपरीत, सी शार्प (प्रोग्रामिंग लैंग्वेज)|C# एक वैधानिक रूप से टाइप की गई भाषा के रूप में प्रारम्भ हुआ, लेकिन संस्करण 4.0 के रूप में क्रमिक टाइप किया गया है, चर का उपयोग करके चर को स्पष्ट रूप से गतिशील के रूप में चिह्नित करने की अनुमति देता है। dynamic प्रकार।[16] डार्ट (प्रोग्रामिंग भाषा), डायलन (प्रोग्रामिंग भाषा), और राकू (प्रोग्रामिंग भाषा) सम्मिलित हैं क्रमिक टाइप की जाने वाली भाषाएँ गतिशील रूप से टाइप की गई भाषा से नहीं ली गई हैं।

राकू (प्रोग्रामिंग लैंग्वेज) (पूर्व में पर्ल 6) में क्रमिक टाइपिंग को प्रारम्भ से लागू किया गया है। प्रकार की जाँच उन सभी स्थानों पर होती है जहाँ मान निर्दिष्ट या बाध्य होते हैं। एक अप्रकाशित चर या पैरामीटर के रूप में टाइप किया गया है Any, जो (लगभग) सभी मानों से मेल खाएगा। कंपाइलर फ्लैग टाइप-चेकिंग संघर्षों को कंपाइल समय पर फ़्लैग करता है यदि यह कंपाइल समय पर निर्धारित कर सकता है कि वे कभी सफल नहीं होंगे।

ऑब्जेक्टिव C में विधि कॉल के संबंध में ऑब्जेक्ट पॉइंटर्स के लिए क्रमिक टाइपिंग है। स्टैटिक टाइपिंग का उपयोग तब किया जाता है जब एक वैरिएबल को ऑब्जेक्ट के एक निश्चित वर्ग के पॉइंटर के रूप में टाइप किया जाता है: जब वेरिएबल के लिए एक मेथड कॉल किया जाता है, तो कंपाइलर स्टैटिकली चेक करता है कि क्लास को इस तरह के मेथड को सपोर्ट करने के लिए घोषित किया गया है, या यह एक चेतावनी या त्रुटि उत्पन्न करता है। हालाँकि, यदि प्रकार का एक चर id प्रयोग किया जाता है, तो संकलक उस पर किसी भी विधि को बुलाए जाने की अनुमति देता है।

JS ++ प्रोग्रामिंग भाषा, 2011 में रिलीज़ हुई, एक क्रमिक प्रकार की प्रणाली के साथ जावास्क्रिप्ट (गतिशील रूप से टाइप) का एक अधिसमुच्चय है जो (ईसीएमएस्क्रिप्ट) और डॉक्यूमेंट ऑब्जेक्ट मॉडल (डीओएम एपीआई) कोने के परिस्थितियों के लिए सुदृढ़ता है।[17]

संदर्भ

  1. 1.0 1.1 Siek, Jeremy. "What is gradual typing?".
  2. Siek, Jeremy; Taha, Walid (September 2006). कार्यात्मक भाषाओं के लिए धीरे-धीरे टाइपिंग (PDF). Scheme and Functional Programming 2006. University of Chicago. pp. 81–92.
  3. Thatte, Satish (1990). "Quasi-static typing". Proceedings of the 17th ACM SIGPLAN-SIGACT symposium on Principles of programming languages - POPL '90. pp. 367–381. doi:10.1145/96709.96747. ISBN 978-0897913430. S2CID 8725290. {{cite book}}: |journal= ignored (help)
  4. Oliart, Alberto (1994). अर्ध-स्थैतिक प्रकारों का अनुमान लगाने के लिए एक एल्गोरिथम (Technical report). Boston University. 1994-013.
  5. Siek, Jeremy; Taha, Walid (August 2007). वस्तुओं के लिए क्रमिक टाइपिंग. pp. 2–27. doi:10.1007/978-3-540-73589-2_2. ISBN 978-3-540-73588-5. {{cite book}}: |journal= ignored (help)
  6. Feldthaus, Asger; Møller, Anders (2014). "जावास्क्रिप्ट पुस्तकालयों के लिए टाइपस्क्रिप्ट इंटरफेस की शुद्धता की जाँच करना". Proceedings of the 2014 ACM International Conference on Object Oriented Programming Systems Languages & Applications - OOPSLA '14 (in English). Portland, Oregon, USA: ACM Press: 1–16. doi:10.1145/2660193.2660215. ISBN 978-1-4503-2585-1.
  7. Swamy, N.; Fournet, C.; Rastogi, A.; Bhargavan, K.; Chen, J.; Strub, P. Y.; Bierman, G. (2014). "Gradual typing embedded securely in JavaScript" (PDF). Proceedings of the 41st ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages - POPL '14. pp. 425–437. doi:10.1145/2535838.2535889. ISBN 9781450325448.
  8. "PHP: Function arguments - Manual » Strict typing".
  9. Tobin-Hochstadt, Sam; Felleisen, Matthias. "Interlanguage Migration: From Scripts to Programs". Proceedings of the Symposium on Object-Oriented Programming Systems, Companion Volume. Portland, OR. Tobin-Hochstadt06. Retrieved 2020-11-06.
  10. Tobin-Hochstadt, Sam; Felleisen, Matthias. "The Design and Implementation of Typed Scheme". Proceedings of the Principles of Programming Languages. San Diego, CA. Tobin-Hochstadt08. Retrieved 2020-11-06.
  11. Chas Emerick. "टाइप क्लोजर यूजर गाइड". GitHub.
  12. Jukka Lehtosalo. "mypy - पायथन के लिए वैकल्पिक स्टेटिक टाइपिंग".
  13. "Pyre - A performant type-checker for Python 3".
  14. Aseem Rastogi; Avik Chaudhuri; Basil Hosmer (January 2012). "The Ins and Outs of Gradual Type Inference" (PDF). Association for Computing Machinery (ACM). Retrieved 2014-09-23.
  15. "टाइप-सिस्टम-जे". GitHub.
  16. "गतिशील (सी # संदर्भ)". MSDN Library. Microsoft. Retrieved 14 January 2014.
  17. "The JS++ Type System, Appendix B: Problems (Why was this hard to solve?)". Retrieved 10 February 2020.


अग्रिम पठन

  • Siek, Jeremy G.; Vitousek, Michael M.; Cimini, Matteo; Boyland, John Tang (2015). Ball, Thomas; Bodik, Rastislav; Krishnamurthi, Shriram; Lerner, Benjamin S.; Morrisett, Greg (eds.). Refined Criteria for Gradual Typing. pp. 274–293. doi:10.4230/lipics.snapl.2015.274. ISBN 9783939897804. {{cite book}}: |journal= ignored (help)