2011-12-01 20 views
8

why Java doesn't support unsigned types और बिना हस्ताक्षर किए गए प्रकारों से निपटने के बारे में कुछ प्रश्न हैं। मैंने कुछ खोज किया, और ऐसा प्रतीत होता है कि स्कैला भी हस्ताक्षरित डेटा प्रकारों का समर्थन नहीं करता है। जेनरेट बाइटकोड में जावा और स्कैला के भाषा डिज़ाइन में क्या सीमा है, या यह स्वयं JVM में है? क्या कुछ भाषा हो सकती है जो JVM पर चलती है और अन्यथा जावा (या स्कैला) के समान होती है, फिर भी हस्ताक्षरित आदिम डेटा प्रकारों का समर्थन करती है?क्या जावा की अनगिनत आदिम प्रकारों की कमी जावा की प्लेटफॉर्म या जावा भाषा की विशेषता है?

उत्तर

8

जावा बाईटकोड विशिष्टता केवल defines signed types:

अभिन्न प्रकार बाइट, लघु, पूर्णांक, और लंबे, जिनके मान 8 बिट, 16 बिट, 32-बिट, और 64-बिट प्रवेश किया हुआ है कर रहे हैं दो के पूरक पूर्णांक

लेकिन जेवीएम के शीर्ष पर लागू एक भाषा संभवतः सिंटैक्टिक स्तर पर एक हस्ताक्षरित प्रकार जोड़ सकती है और संकलन चरण में रूपांतरण को संभाल सकती है।

+0

मैंने कभी भी बाइटकोड स्पेक में देखने का विचार नहीं किया। मेरे पास होना चाहिए था। मैंने केवल जावा भाषा विशिष्टता और विभिन्न स्कैला दस्तावेज को देखा। –

+0

"अंतर्निर्मित पूर्णांक ऑपरेटर किसी भी तरह से (सकारात्मक या नकारात्मक) ओवरफ़्लो इंगित नहीं करते हैं; वे ओवरफ़्लो पर चारों ओर लपेटते हैं।" इससे यह भी संकेत मिलेगा कि यदि आप मामलों को सही तरीके से संभालते हैं, तो आप वास्तव में मानक अंकगणितीय ऑपरेटरों का उपयोग करके हस्ताक्षरित डेटा प्रकारों को लागू कर सकते हैं। –

+0

उस दिन वापस जब मैं कूकटाइम जावा एपीआई के साथ काम करता था, जो मूल क्विकटाइम लाइब्रेरी के आस-पास एक रैपर है, अगर मेरी याददाश्त सही तरीके से मेरी सेवा करती है, तो असंगत पूर्णांक प्रकारों से भरा हुआ था। यह कुछ हद तक अजीब api wise था, लेकिन हस्ताक्षरित हस्ताक्षर किए गए रूपांतरण ठीक काम किया। –

2

हस्ताक्षरित अंकगणित हैंडलिंग एक भाषा/कार्यान्वयन मुद्दा है, प्लेटफ़ॉर्म नहीं - यह किसी भी प्लेटफॉर्म पर अनुकरण किया जा सकता है भले ही कोई मूल समर्थन न हो।

जेवीएम में यह एक प्रकार के रूप में नहीं है, इसलिए जावा/स्कैला/आदि। इसे "बॉक्स से बाहर" का समर्थन न करें।

3

अहस्ताक्षरित प्रकार बाईटकोड स्तर पर नकल करते हो सकता है हालांकि उस के साथ कुछ कमियां देखते हैं:

  • प्रदर्शन: आप प्रत्येक साधारण अंकगणित ऑपरेशन के लिए कई बाईटकोड संचालन की आवश्यकता होगी। नकली हस्ताक्षरित प्रकारों का उपयोग कर कोड का प्रदर्शन हस्ताक्षर प्रकारों का उपयोग कर कोड से दो या तीन गुना बदतर होगा।

  • संगतता: JVM पर चल रही अधिकांश भाषाएं जावा कोड की विशाल मात्रा के साथ संगत होने के लिए बहुत कठिन प्रयास करती हैं। यह निश्चित रूप से खराब हो जाएगा जब अतिरिक्त प्रकार पेश किए जाते हैं या जब "ज्ञात" प्रकारों के साथ कुछ चर अलग-अलग होते हैं।

इस के प्रकाश में बिना हस्ताक्षर किए गए प्रकारों के लाभ आईएमएचओ नगण्य हैं।

+0

समान आकार की संख्याओं और जोड़ों को प्रभावित नहीं किया जाएगा। तुलना शायद सबसे बड़ा उपद्रव होगा। – supercat

+0

@supercat: आपको ऐसा क्यों लगता है? –

+1

एकमात्र ऑपरेशंस जो मैं सोच सकता हूं वह प्रभावित होगा, विभाजन, तुलना और रूपांतरण 'लंबी' या फ़्लोटिंग-पॉइंट प्रकारों पर होगा। उनमें से, तुलना दूसरों की तुलना में अधिक बार उपयोग की जाएगी, और आमतौर पर कम से कम समय लेना होगा। – supercat