क्या Google का गो एक सुरक्षित भाषा है?


14

यह पृष्ठ http://golang.org/doc/go_faq.html लिखते हैं:

यद्यपि गो में स्थिर प्रकार होते हैं, भाषा सामान्य ओओ भाषाओं की तुलना में हल्के वजन का अनुभव करने का प्रयास करती है

तो मेरा सवाल यह है कि क्या यह सुरक्षित रूप से जेनिक्स (जैसे सी #) या शिथिल टाइप (जैसे जावास्क्रिप्ट) या वैकल्पिक (जैसे Vb.Net में सख्त विकल्प) के साथ टाइप किया गया है


@JamesMcNellis का अर्थ यदि कोई प्रकार विफल हो जाता है, तो यह केवल इसलिए हो सकता है क्योंकि मैं एक टाइप-कास्ट करता हूं (किसी भी अन्य कार्रवाई से एक प्रकार का अपवाद नहीं होना चाहिए)
पेसियर

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

जवाबों:


26

टाइप सेफ्टी एक ब्लैक-या-व्हाइट टाइप-सेफ़ नहीं है या नहीं। यह एक स्पेक्ट्रम से अधिक है और कुछ भाषाएँ दूसरों की तुलना में अधिक सुरक्षित हो सकती हैं (और इसके विपरीत)। हालाँकि, मुझे लगता है कि आप सी # बनाम जावास्क्रिप्ट के साथ क्या सोच रहे हैं, संभावना है कि स्टैटिक टाइपिंग (जहां टाइप-चेकिंग कंपाइल-टाइम में होती है) बनाम डायनामिक टाइपिंग (जहां टाइप-चेकिंग रन-टाइम में होती है) - निश्चित रूप से, Go FAQ के बारे में क्या बात है।

Google Go सांख्यिकीय रूप से टाइप किया गया है, लेकिन कई विशेषताएं इसे गतिशील रूप से टाइप करने के लिए (कम से कम कुछ हद तक) "प्रकट" करती हैं। उदाहरण के लिए, आपको किसी भी इंटरफेस को लागू करने के रूप में अपनी कक्षा को स्पष्ट रूप से चिह्नित करने की आवश्यकता नहीं है। यदि आपकी कक्षा के विधि हस्ताक्षर इंटरफ़ेस पर उन लोगों के साथ मेल खाते हैं, तो आपकी कक्षा स्वचालित रूप से उस इंटरफ़ेस (एक प्रकार का बतख-टाइपिंग) को लागू करती है। यह तृतीय-पक्ष पुस्तकालयों में अंतर्निहित कक्षाओं और कक्षाओं को विस्तारित करने के लिए उपयोगी है, क्योंकि आप केवल तृतीय-पक्ष वर्ग के तरीकों से मिलान करने के लिए अपना इंटरफ़ेस बना सकते हैं और यह स्वचालित रूप से इसे लागू करेगा।

टाइप सेफ्टी वास्तव में टाइप सिस्टम का एक अलग "एक्सिस" है। उदाहरण के लिए, C एक स्टेटिकली टाइप की गई भाषा है जो टाइप-सेफ नहीं है - पॉइंटर्स आपको अपनी पसंद का बहुत कुछ करने देते हैं, यहां तक ​​कि ऐसी चीजें जो आपके प्रोग्राम को क्रैश कर देंगी। जावास्क्रिप्ट गतिशील रूप से टाइप किया गया है, लेकिन यह भी सुरक्षित है: आप ऐसे ऑपरेशन नहीं कर सकते जो आपके प्रोग्राम को क्रैश कर दे। C # ज्यादातर प्रकार-सुरक्षित है, लेकिन आप स्पष्ट रूप से कोड के क्षेत्रों को चिह्नित कर सकते हैं unsafeऔर ऐसे काम कर सकते हैं जो अब सुरक्षित नहीं हैं।

Google Go इस अर्थ में भी टाइप-सेफ है कि आप प्रकारों के साथ गड़बड़ नहीं कर सकते हैं और प्रोग्राम को क्रैश कर सकते हैं (पॉइंटर्स तक कोई सीधी पहुंच नहीं)।


जब तक आप "असुरक्षित" पैकेज का उपयोग नहीं करते हैं, उस स्थिति में आप प्रोग्राम को किसी भी तरह से क्रैश कर सकते हैं :)
एलॉफ़ जूल

आप प्रकारों के साथ गड़बड़ कर सकते हैं और पॉइंटर्स तक पहुंच बना सकते हैं। और हाँ, आप ऐसा करके आसानी से अपने प्रोग्राम को क्रैश कर सकते हैं।
ईथ

4

यह सुरक्षित रूप से टाइप किया गया है कि एक प्रकार की गलत व्याख्या कभी नहीं की जाएगी, लेकिन एक गलत प्रकार प्रोग्राम को आतंकित कर सकता है।


मुझे यह नहीं मिलता है, क्या इसका मतलब है कि गैर-प्रकार सुरक्षित कोड वास्तव में संकलित किया जा सकता है? (जो c # में संभव नहीं है जब तक हम डायनामिक्स का उपयोग नहीं करते हैं)
पेसियर

प्रकार के दावे करना, टाइप-वार, मूल रूप से एक गतिशील प्रकार पर एक विधि को कॉल करने जैसा है
dan_waterworth

ठीक है तो संक्षेप में यह उस प्रकार की सुरक्षा-सी # की अनुमति नहीं देता है?
पचेरियर

यदि आप प्रकार के दावे नहीं करते हैं तो यह होता है।
dan_waterworth

5
@ स्पेसियर: सी # में बिना डायनेमिक्स के गलत तरीके से भाव चलाना पूरी तरह से संभव है: बस हर जगह कास्ट डालें (जो मूल रूप से किस प्रकार के दावे हैं)।
sepp2k

-1

जाओ के मानचित्र प्रकार है नहीं थ्रेड-सुरक्षित है, यह स्थिर लिखा गया। यह करता है नहीं प्रकार विरासत, सामान्य प्रोग्रामिंग, दावे, विधि ओवरलोडिंग, या सूचक अंकगणित या तो और अच्छे कारण के लिए है।

टाइप सेफ्टी और मेमोरी सेफ्टी लॉन्ग टर्म के उद्देश्य हैं, यहाँ झूठ की समस्या है।

प्रकार की सुरक्षा एक ओवरहेड प्रस्तुत करती है, किलोबाइट्स और मेगाबाइट में जो स्वीकार्य है। Go को MapReduce और "Big data" के साथ डिज़ाइन किया गया है, डेटा की एक पेटाबाइट्स को एक्सोबाइट करता है, जो टाइप सेफ्टी के साथ परफॉरमेंस इश्यू प्रस्तुत करता है, टाइप चेकिंग (बॉक्सिंग / अनबॉक्सिंग) ओवरहेड्स बनाता है और प्रोसेसिंग से साइकिल को दूर ले जाता है।

उप-टाइपिंग और बहुरूपता में टाइप सुरक्षा प्रतिबंधात्मक हो सकती है और बतख टाइपिंग (ऑब्जेक्ट को ऑब्जेक्ट में डालना), इससे खतरे पैदा होते हैं और एक ऐसी जगह भी बन जाती है जहां गो जैसी भाषाओं का बहुत फायदा होता है। सी ++ और जावा को गो से नहीं बदला जा रहा है, यह वितरित प्रोग्रामिंग और बड़े पैमाने पर समानांतर प्रणाली में मदद करने के लिए एक नई भाषा है।

ब्रूस एकेल का बड़ा बयान - "गो उन समस्याओं के वर्ग के लिए बहुत अधिक मायने रखता है जो मूल रूप से C ++ मूल रूप से हल करने के लिए अभिप्रेत थे", यह बहस का विषय है। C ++ एक बहुत ही कुशल भाषा है और MapReduce का Boost कार्यान्वयन बहुत ही कुशल है।

कॉनकरेन्सी प्रिमिटिव्स भविष्य हैं। टाइप सेफ्टी हमेशा एक बहुत ही विवादास्पद विषय रहा है और हो सकता है कि 20 वर्षों में, या अल्गोल के बाद से इस मुद्दे को संबोधित करने वाली पहली भाषा हो।


3
दुःख की बात है कि मुझे इस उत्तर के लिए अधिक प्रतिष्ठा की आवश्यकता है। टाइप सेफ्टी ओवरहेड नहीं है, रनटाइम ओवरहेड को निश्चित रूप से बाइट्स की इकाइयों में नहीं मापा जाता है, और जावा अर्थ में बॉक्सिंग / अनबॉक्सिंग होता है। स्टैटिक टाइपिंग कंपाइलर को गतिशील रूप से टाइप की गई भाषा की तुलना में अधिक अनुकूलन करने की अनुमति देता है। नक्शा कम करना न तो यहाँ है और न ही, थ्रेड सुरक्षा के साथ डिट्टो।
एलॉफ

गोलंग के मुहावरे को आप सामान्य इंटरफ़ेस के रूप में एक खाली पैटर्न का उपयोग करते हुए टाइप करते हैं, क्योंकि भाषा की विशेषताओं के रूप में जेनरिक के कार्यान्वयन से बचने के लिए निश्चित रूप से ऐसा कुछ नहीं है जिसे मैं "सुरक्षित प्रकार" मानूंगा, और जब समस्या हो तो भाषा को सरल रखें। उठता है (और यह होगा) यह उस व्यक्ति की प्लेट की जटिलता को छोड़ देता है जो अब डक्ट टैप गोलंग के रोल के साथ समस्या को हल करने के लिए छोड़ दिया है। यह निश्चित रूप से उस भाषा की तरह प्रतीत नहीं होता है जिसे पिछले 2 दशकों में डिजाइन किया गया था, क्योंकि ऐसी भाषाएं हैं जो बहुत बेहतर तरीके से टाइप सेफ्टी को संबोधित करती हैं।
tsturzl
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.