2012-02-08 9 views
6

मैं कोई कंपाइलर अनुकूलन विशेषज्ञ नहीं हूं। मुझे यह भी यकीन नहीं है कि संकलक या अनुकूलन तक अपेक्षाकृत "उचित" क्या है। मैं सिर्फ उत्सुक हूं और सवाल पूछ रहा हूं।एरलांग कंपाइलर अनुकूलन

% TOY EXAMPLE 1 
test(X) -> 
    if 
     X-1 > 0 -> 
      yes; 
     X-1 == 0 -> 
      maybe; 
     true -> no 
    end. 

तो मैं तो आदेश घटाना दो बार ऐसा करने के लिए नहीं में यह अनुकूलित:

किसी भी दर पर, मैं कुछ Erlang एक बुनियादी रूप में इस जैसे कोडिंग था

% TOY EXAMPLE 2 
test(X) -> 
    Z = X-1, 
    if 
     Z > 0 -> 
      yes; 
     Z == 0 -> 
      maybe; 
     true -> no 
    end. 

तब मैंने सोचा "समय की बर्बादी - निश्चित रूप से संकलक दूसरे उदाहरण में पहले उदाहरण को अनुकूलित करता है।" इसलिए मैंने संकलन चलाकर जांचने का निर्णय लिया: दोनों के लिए 'एस' विकल्प के साथ फ़ाइल। यहां आउटपुट है:

% TOY EXAMPLE 1 
{function, test, 1, 15}. 
    {label,14}. 
    {func_info,{atom,exchange},{atom,test},1}. 
    {label,15}. 
    {gc_bif,'-',{f,16},1,[{x,0},{integer,1}],{x,1}}. 
    {test,is_lt,{f,16},[{integer,0},{x,1}]}. 
    {move,{atom,yes},{x,0}}. 
    return. 
    {label,16}. 
    {gc_bif,'-',{f,17},1,[{x,0},{integer,1}],{x,1}}. 
    {test,is_eq,{f,17},[{x,1},{integer,0}]}. 
    {move,{atom,maybe},{x,0}}. 
    return. 
    {label,17}. 
    {move,{atom,no},{x,0}}. 
    return. 

% TOY EXAMPLE 2 
{function, test, 1, 15}. 
    {label,14}. 
    {func_info,{atom,exchange},{atom,test},1}. 
    {label,15}. 
    {gc_bif,'-',{f,0},1,[{x,0},{integer,1}],{x,0}}. 
    {test,is_lt,{f,16},[{integer,0},{x,0}]}. 
    {move,{atom,yes},{x,0}}. 
    return. 
    {label,16}. 
    {test,is_eq,{f,17},[{x,0},{integer,0}]}. 
    {move,{atom,maybe},{x,0}}. 
    return. 
    {label,17}. 
    {move,{atom,no},{x,0}}. 
    return. 

वे समान नहीं हैं। अगर मैं यह सही पढ़ रहा हूं (शायद मैं नहीं हूं), अनुकूलन नहीं किया जाता है।

मैं कुछ संभावनाएं देख सकते हैं:

  1. अनुकूलन किया जा सकता है, मैं सिर्फ क्योंकि मैं संकलित करने के लिए गलत समारोह का उपयोग कर रहा है, या सही झंडे का इस्तेमाल नहीं कर अनुकूलन सक्षम करने नहीं कर रहा हूँ, आदि

  2. अनुकूलन अभी नहीं किया गया है।

  3. अन्य।

कौन सा है?

नोट: अगर आप केस स्टेटमेंट का उपयोग करते हैं तो आप इस तरह के और ऐसा कर सकते हैं या "आप ब्लैह-ब्लाह करके इसे टाल सकते हैं।" बिंदु यह जांचने के लिए है कि एरलांग कंपाइलर कौन सा अनुकूलन करता है या नहीं करता है, और क्यों या क्यों नहीं।

धन्यवाद।

उत्तर

4

आप काफी सही हैं - बीम कंपाइलर कोई आम उप-संपीड़न उन्मूलन नहीं करता है। इसका कारण यह है कि इस तरह के कार्यक्रमों में एर्लांग का आमतौर पर उपयोग किया जाता है, इसका कोई ध्यान देने योग्य प्रभाव नहीं होता है, इसलिए किसी को भी इसे लागू करने के लिए परेशान नहीं किया जाता है। (कंप्यूटेशनल रूप से संवेदनशील Erlang कोड के दुर्लभ मामलों के लिए, यह प्रोग्रामर इस की देखभाल करने के लिए आम तौर पर आसान है, जैसा कि आप दूसरे उदाहरण में किया था।)

आप मूल कोड को संकलित हैं, तो आप अनुकूलन के इस प्रकार प्राप्त कर सकते हैं - हायपीई कंपाइलर अच्छा निम्न स्तर कोड उत्पन्न करने के लिए एक बड़े प्रयास में डालता है।

+0

"सामान्य उप-संपीड़न उन्मूलन" - इसे मिला। मुझे पता था कि मैंने उस शब्द को कहीं पहले सुना है। मुझे लगता है कि मैं बस अधिकतर सामानों को अनुकूलित करने के लिए हाथ रखूंगा और रिकॉलन से निपटने वाली कुछ चीजों को अनुकूलित करने और क्या नहीं करने के लिए erlang को चलेगा। –