पर अभिव्यक्ति का मूल्यांकन करें मुझे पता है कि यह बहुत कुछ पूछा गया है, लेकिन केवल सी/सी ++ और जावा के लिए। सवाल लगातार भाव का उपयोग करने का प्रदर्शन लाभ से संबंधित है:संकलन समय
जब मैं तर्क के रूप में केवल स्थिरांक के साथ एक स्थिर फ़ंक्शन को कॉल करें, वहाँ एक रास्ता संकलक है कि यह संकलन समय पर पहले से ही कॉल का मूल्यांकन करें और बदलना चाहिए बताने के लिए है परिणाम से कॉल?
उदाहरण:
const double pi = Math.PI; //works as Math.PI is a constant
const double spi = Math.Sin(Math.PI); //compiler error, because expression must be constant
कोई निर्देश हैं (बेहतर: गुण) पर स्पष्ट रूप संकलक बताने के लिए कि गणित.पाप की तरह एक स्थिर विधि() को संशोधित नहीं कर रहा है और न ही आंतरिक रूप से किसी भी डाटा पढ़ने, इतना है कि यह था संकलन समय पर कॉल का मूल्यांकन करने के लिए तकनीकी रूप से संभव है?
ओह, और कृपया "const double spi = 0
" की तरह जवाब न दें :), क्योंकि मेरा उदाहरण सिर्फ मेरी समस्या का सरलीकृत संस्करण है: अधिकतम प्रदर्शन को बनाए रखते हुए कोड रखरखाव में सुधार करना।
किसी भी मदद के लिए धन्यवाद - यह वास्तव में सराहना की है!
__pure__ समारोह के रूप में एक विधि निर्दिष्ट करने के लिए कोई तरीका नहीं है। कंपाइलर का यह निर्धारित करने का कोई तरीका नहीं है कि Math.Sin() दुष्प्रभाव नहीं करता है या नहीं। – qxg
जहां तक मुझे पता है, नहीं। आप क्या कर सकते हैं परिणामस्वरूप कोड उत्पन्न कर सकते हैं (टी 4 या कस्टम टूल का उपयोग करके), या जेनरेटेड असेंबली को पोस्ट-प्रोसेस करने के लिए आईएल-बुनाई उपकरण का उपयोग करें, या रोज़लिन का उपयोग करके एक अनुकूलित कंपाइलर बनाएं। अगर केवल सी # एक लिस्प थे तो यह इतना कठिन नहीं होगा। ;) –
क्या आप एक * वास्तविक * समस्या को हल करने की कोशिश कर रहे हैं या क्या आप मानते हैं कि सी ++ से संबंधित एक विशिष्ट वाक्यविन्यास यहां आवश्यक है? सी # कॉन्स में मतलब ** कॉन्स **, यानी संकलन के बाद कभी नहीं बदल रहा है। यदि आप एक अपरिवर्तनीय परिणाम चाहते हैं, तो ऐसा करने के लिए * अन्य * तरीके हैं, उदाहरण के लिए एक 'स्थैतिक रीडोनली' मान, या केवल एकमात्र संपत्ति जो स्थिर –