2013-11-27 5 views
12

क्या कोई मुझे कंपेलरों के संदर्भ में "कम करने" शब्द की अच्छी परिभाषा के बारे में बता सकता है?चाहता था: कंपेलरों के संदर्भ में "निचला" शब्द की अच्छी परिभाषा

जो मैं कह सकता हूं उससे, यह उच्च स्तरीय संचालन का अनुवाद निम्न स्तर के संचालन के बराबर संयोजन में है, लेकिन मुझे सच में यकीन नहीं है, और मुझे कुछ मिनटों के बाद कोई नहीं मिल रहा है Google पर खोज ("कम करने" GCC या LLVM में उदा के कुछ उपयोगों लेकिन एक परिभाषा का कोई सन्दर्भ नहीं है।)

+0

क्या इसे 'कम करने' कहा जाता है? या शायद यही व्याकरण परिभाषाओं में कहा जाता है, मुझे याद नहीं है। – slugster

+0

सुंदर अस्पष्ट। यही पूरा संकलक करता है। मैं विशिष्ट उदाहरणों की 'ताकत कम करने' कहूंगा, उदाहरण के लिए '* 2' =>' << 1'। – EJP

उत्तर

13

डॉ डोब्स सिर्फ an article by Walter Bright, जहां वह अवधि का उल्लेख है (dlang फेम) प्रकाशित:

कम

एक अर्थ तकनीक है कि मसा में स्पष्ट है (लेकिन बाहर बात करने के लिए आंद्रेई Alexandrescu ले लिया मुझे) "कम करना" कहा जाता है। इसमें आंतरिक रूप से, सरल लोगों के संदर्भ में अधिक जटिल अर्थपूर्ण संरचनाओं को फिर से लिखना शामिल है। उदाहरण के लिए, while लूप और foreach लूप for लूप के संदर्भ में फिर से लिखे जा सकते हैं। फिर, शेष कोड को केवल for लूप से निपटना होगा। यह कुछ गुप्त बग को उजागर करने के लिए निकला कि कैसे डी में लूप लागू किए गए थे, और इसलिए एक अच्छी जीत थी। try-finally कथन आदि के संदर्भ में scope guard कथनों को फिर से लिखने के लिए भी इसका उपयोग किया जाता है। प्रत्येक मामले जहां यह अर्थात् प्रसंस्करण में पाया जा सकता है, कार्यान्वयन के लिए जीत जाएगा।

यदि यह पता चला है कि भाषा में कुछ विशेष मामले नियम हैं जो इस "कम करने" को पुनर्लेखन को रोकते हैं, तो वापस जाने और भाषा डिज़ाइन पर फिर से विचार करना एक अच्छा विचार हो सकता है।

किसी भी समय आप अर्थपूर्ण संरचनाओं के संचालन में समानता पा सकते हैं, यह कार्यान्वयन प्रयास और बग को कम करने का अवसर है।

4

मैं एक परिभाषा के साथ एक अच्छा लिंक नहीं मिल रही है, लेकिन मुझे लगता है कि मैं एक अच्छा उदाहरण दे सकते हैं। एलएलवीएम में, एलएलवीएम आईआर कई प्रकार के पूर्णांक का समर्थन करता है। क्लैंग समेत अधिकांश सी/सी ++ कंपाइलर्स, लंबे समय तक समर्थन करते हैं और 64 बिट डेटा प्रकार का समर्थन करते हैं। कई 32 बिट प्रोसेसर, जैसे कि एमपीएस (32 बिट), ऐसे निर्देश नहीं हैं जो कर सकते हैं, उदाहरण के लिए, 64 बिट जोड़ें या तुलना करें। एलएलवीएम इन 64 बिट ऑपरेशंस को ऑपरेशंस में "कम" करेगा, आमतौर पर 32 बिट, प्रोसेसर कर सकता है।

एक int64_t के मामले में उदाहरण के लिए तुलना, LLVM

compare the upper 32 bits with a signed comparison 
if they are equal, compare the lower 32 bits with an unsigned comparison 

कुछ कम करने के लिए यह कम सुंदर कल्पना प्राप्त कर सकते हैं करेंगे। उदाहरण के लिए एक प्रोसेसर पर जो गुणा निर्देश का समर्थन नहीं करता है, सरल गुणों में बदलाव हो सकता है और जोड़ता है जबकि अधिक जटिल लोग रन-टाइम supprt लाइब्रेरी में कॉल कर सकते हैं।

संबंधित मुद्दे