एक छोटी सी पृष्ठभूमि: मैं मैक OSX शेर पर हूँ (64 बिट, जाहिर है) और मैं एक लंबे समय जावा डेवलपर डीडी स्वत: प्रकार त्रुटियाँ (64 बिट मुद्दा?)
सीखने में दिलचस्पी मैं उठाया हूँ एक की प्रति डी प्रोग्रामिंग भाषा और मैं कुछ चीजों पर उलझन में हूं। सबसे पहले, अगर मैं निम्नलिखित (किताब से सीधे) की तरह कुछ प्रयास करें:
int[] months = new int[12];
foreach (i, ref month; months) {
month = i + 1;
}
मैं निम्नलिखित त्रुटि मिलती है:
Error: cannot implicitly convert expression (i + 1LU) of type ulong to int
यह int i
करने के लिए i
बदलकर तय हो गई है।
मुझे लगता है कि ऐसा इसलिए है क्योंकि 64 बिट प्लेटफ़ॉर्म पर संख्याओं के लिए स्वचालित प्रकार ulong
है और इसलिए टाइप अनुमान वास्तव में काम नहीं करता है।
bool binarySearch(T)(T[] input, T value) {
// ...
int i = input.length/2;
// ...
}
निम्नलिखित संकलन त्रुटि देता है कि:
अब मैं निम्नलिखित समस्या है
Error: cannot implicitly convert expression (input.length/2LU) of type ulong to int
कास्टिंग फिक्स यह है, लेकिन मैं नहीं बल्कि नहीं था। मुझे गणना से long
मान प्राप्त करने से संबंधित अन्य मूर्ख त्रुटियां भी मिलती हैं और फिर उन्हें सरणी में अनुक्रमणित करने के लिए उपयोग करने में सक्षम नहीं होती है। क्या डी 64 का समर्थन सिर्फ अभी तक नहीं है? डी सीखते समय भविष्य में परेशानी से बचने के लिए मैं क्या कर सकता हूं? स्पष्ट रूप से हर जगह डाले और प्रकार का उपयोग करने के बाद क्या पहली जगह में भाषा के लिए मुझे आकर्षित के विपरीत होने के लिए ...
नोट: यह केवल "मूर्खतापूर्ण" क्योंकि आप सी इस्तेमाल नहीं किया है है, और जावा में, वास्तुकला स्वतंत्र कोड वास्तव में मौजूद नहीं है। इसलिए आपको या तो सरणी को इंडेक्स करने के लिए जावा में 32-बिट पूर्णांक या 64-बिट पूर्णांक का उपयोग करने के लिए मजबूर होना पड़ता है, जबकि सी (और डी) में, आपको सरणी को अनुक्रमणित करते समय 'size_t' का उपयोग करना चाहिए। यह आपके कोड को और अधिक सही (और मंच-स्वतंत्र) बनाता है, बेशक, डी आपके लिए इस टाइपिंग को संभालता है। (सी और डी दोनों में, 'size_t' लगभग हमेशा एक हस्ताक्षरित 32-बिट पूर्णांक या एक हस्ताक्षरित 64-बिट के लिए स्वचालित रूप से अलियाकृत होता है, यही कारण है कि आप' size_t' के बजाय उन नामों में से एक को देख रहे हैं।) – Mehrdad