why Java doesn't support unsigned types और बिना हस्ताक्षर किए गए प्रकारों से निपटने के बारे में कुछ प्रश्न हैं। मैंने कुछ खोज किया, और ऐसा प्रतीत होता है कि स्कैला भी हस्ताक्षरित डेटा प्रकारों का समर्थन नहीं करता है। जेनरेट बाइटकोड में जावा और स्कैला के भाषा डिज़ाइन में क्या सीमा है, या यह स्वयं JVM में है? क्या कुछ भाषा हो सकती है जो JVM पर चलती है और अन्यथा जावा (या स्कैला) के समान होती है, फिर भी हस्ताक्षरित आदिम डेटा प्रकारों का समर्थन करती है?क्या जावा की अनगिनत आदिम प्रकारों की कमी जावा की प्लेटफॉर्म या जावा भाषा की विशेषता है?
उत्तर
जावा बाईटकोड विशिष्टता केवल defines signed types:
अभिन्न प्रकार बाइट, लघु, पूर्णांक, और लंबे, जिनके मान 8 बिट, 16 बिट, 32-बिट, और 64-बिट प्रवेश किया हुआ है कर रहे हैं दो के पूरक पूर्णांक
लेकिन जेवीएम के शीर्ष पर लागू एक भाषा संभवतः सिंटैक्टिक स्तर पर एक हस्ताक्षरित प्रकार जोड़ सकती है और संकलन चरण में रूपांतरण को संभाल सकती है।
हस्ताक्षरित अंकगणित हैंडलिंग एक भाषा/कार्यान्वयन मुद्दा है, प्लेटफ़ॉर्म नहीं - यह किसी भी प्लेटफॉर्म पर अनुकरण किया जा सकता है भले ही कोई मूल समर्थन न हो।
जेवीएम में यह एक प्रकार के रूप में नहीं है, इसलिए जावा/स्कैला/आदि। इसे "बॉक्स से बाहर" का समर्थन न करें।
अहस्ताक्षरित प्रकार बाईटकोड स्तर पर नकल करते हो सकता है हालांकि उस के साथ कुछ कमियां देखते हैं:
प्रदर्शन: आप प्रत्येक साधारण अंकगणित ऑपरेशन के लिए कई बाईटकोड संचालन की आवश्यकता होगी। नकली हस्ताक्षरित प्रकारों का उपयोग कर कोड का प्रदर्शन हस्ताक्षर प्रकारों का उपयोग कर कोड से दो या तीन गुना बदतर होगा।
संगतता: JVM पर चल रही अधिकांश भाषाएं जावा कोड की विशाल मात्रा के साथ संगत होने के लिए बहुत कठिन प्रयास करती हैं। यह निश्चित रूप से खराब हो जाएगा जब अतिरिक्त प्रकार पेश किए जाते हैं या जब "ज्ञात" प्रकारों के साथ कुछ चर अलग-अलग होते हैं।
इस के प्रकाश में बिना हस्ताक्षर किए गए प्रकारों के लाभ आईएमएचओ नगण्य हैं।
समान आकार की संख्याओं और जोड़ों को प्रभावित नहीं किया जाएगा। तुलना शायद सबसे बड़ा उपद्रव होगा। – supercat
@supercat: आपको ऐसा क्यों लगता है? –
एकमात्र ऑपरेशंस जो मैं सोच सकता हूं वह प्रभावित होगा, विभाजन, तुलना और रूपांतरण 'लंबी' या फ़्लोटिंग-पॉइंट प्रकारों पर होगा। उनमें से, तुलना दूसरों की तुलना में अधिक बार उपयोग की जाएगी, और आमतौर पर कम से कम समय लेना होगा। – supercat
- 1. जावा: रैपर वर्गों की आवश्यकता क्यों है?
- 2. जावा की स्ट्रिंग.फॉर्मैट विधि
- 3. क्या आर की प्राथमिकता कतार जावा की प्राथमिकता क्यूई है?
- 4. जावा की बाइटबफर
- 5. जावा - classpath की स्थापना
- 6. जावा एनोटेशन की रखरखाव?
- 7. जावा की वर्चुअल मशीन की एंडियननेस
- 8. जावा - कक्षाओं की तुलना?
- 9. जावा की तुलना सरणी
- 10. टेम्पलेट्स में आदिम प्रकारों की पहचान
- 11. क्या यूनिक्स फ़ंक्शंस की जावा लाइब्रेरी है?
- 12. ओपन सोर्स जावा की स्थिति क्या है?
- 13. " 'शून्य' यहाँ प्रकारों की अनुमति नहीं है" त्रुटि (जावा)
- 14. जावा: जेआईटीसी की प्रतिबिंब मुद्रास्फीति क्या है?
- 15. जावा superpackages की स्थिति क्या है?
- 16. इस जावा कोड की व्याख्या क्या है?
- 17. जावा में अमूर्त क्षेत्रों की कमी के आसपास कैसे हो?
- 18. अजीब जावा व्यवहार आदिम प्रकारों के साथ
- 19. जावा में स्ट्रिंग की सफाई
- 20. वहाँ की नकल की या
- 21. जावा में कक्षाओं की सूची
- 22. जावा की सारसूची की निकासी रेंज() विधि क्यों संरक्षित है?
- 23. जावा में हैशमैप्स की तुलना
- 24. जावा क्लास में कोड की अधिकतम लाइनों की अनुमति है?
- 25. जावा में Arrays की सूची
- 26. रूबी और जावा की गति
- 27. जावा + घुमाओ: परिवर्तन की घटनाओं
- 28. जावा में वर्णों की तुलना
- 29. Enum मानों की जावा सरणी
- 30. जावा AppDomain abstraction की तरह?
मैंने कभी भी बाइटकोड स्पेक में देखने का विचार नहीं किया। मेरे पास होना चाहिए था। मैंने केवल जावा भाषा विशिष्टता और विभिन्न स्कैला दस्तावेज को देखा। –
"अंतर्निर्मित पूर्णांक ऑपरेटर किसी भी तरह से (सकारात्मक या नकारात्मक) ओवरफ़्लो इंगित नहीं करते हैं; वे ओवरफ़्लो पर चारों ओर लपेटते हैं।" इससे यह भी संकेत मिलेगा कि यदि आप मामलों को सही तरीके से संभालते हैं, तो आप वास्तव में मानक अंकगणितीय ऑपरेटरों का उपयोग करके हस्ताक्षरित डेटा प्रकारों को लागू कर सकते हैं। –
उस दिन वापस जब मैं कूकटाइम जावा एपीआई के साथ काम करता था, जो मूल क्विकटाइम लाइब्रेरी के आस-पास एक रैपर है, अगर मेरी याददाश्त सही तरीके से मेरी सेवा करती है, तो असंगत पूर्णांक प्रकारों से भरा हुआ था। यह कुछ हद तक अजीब api wise था, लेकिन हस्ताक्षरित हस्ताक्षर किए गए रूपांतरण ठीक काम किया। –