2016-11-26 14 views
5

क्या आप नीचे दिखाए गए फ़ंक्शन कॉल को चेन करके, चाहे वह नाबालिग है, या क्या यह केवल शैली वरीयता कोडिंग करके कोई प्रदर्शन प्राप्त करता है?कॉल चेनिंग पर प्रदर्शन लाभ?

execute() -> 
    step4(step3(step2(step1())). 

execute() -> 
    S1 = step1(), 
    S2 = step2(S1), 
    S3 = step3(S2), 
    step4(S3). 

मैं 2 संस्करण कचरा कलेक्टर में है कि क्या सोच रहा था के बजाय

S1, S2, S3 के लिए कुछ काम है। क्या यह पहले संस्करण के लिए भी लागू होना चाहिए?

उत्तर

5

वे संकलन के बाद समान हैं। आप erlc -S के माध्यम से erl फ़ाइल चल रहा है और उत्पन्न .S फ़ाइल को पढ़ कर इस बात की पुष्टि कर सकते हैं:

$ cat a.erl 
-module(a). 
-compile(export_all). 

step1() -> ok. 
step2(_) -> ok. 
step3(_) -> ok. 
step4(_) -> ok. 

execute1() -> 
    step4(step3(step2(step1()))). 

execute2() -> 
    S1 = step1(), 
    S2 = step2(S1), 
    S3 = step3(S2), 
    step4(S3). 
$ erlc -S a.erl 
$ cat a.S 
{module, a}. %% version = 0 

... 

{function, execute1, 0, 10}. 
    {label,9}. 
    {line,[{location,"a.erl",9}]}. 
    {func_info,{atom,a},{atom,execute1},0}. 
    {label,10}. 
    {allocate,0,0}. 
    {line,[{location,"a.erl",10}]}. 
    {call,0,{f,2}}. 
    {line,[{location,"a.erl",10}]}. 
    {call,1,{f,4}}. 
    {line,[{location,"a.erl",10}]}. 
    {call,1,{f,6}}. 
    {call_last,1,{f,8},0}. 


{function, execute2, 0, 12}. 
    {label,11}. 
    {line,[{location,"a.erl",12}]}. 
    {func_info,{atom,a},{atom,execute2},0}. 
    {label,12}. 
    {allocate,0,0}. 
    {line,[{location,"a.erl",13}]}. 
    {call,0,{f,2}}. 
    {line,[{location,"a.erl",14}]}. 
    {call,1,{f,4}}. 
    {line,[{location,"a.erl",15}]}. 
    {call,1,{f,6}}. 
    {call_last,1,{f,8},0}. 

... 

आप देख सकते हैं, समान कोड में दोनों execute1 और execute2 परिणाम (केवल एक चीज अलग हैं लाइन नंबर और लेबल संख्या।

+0

मुझे दस्तावेज़ों में असेंबलर कोड जनरेशन के सहसंबंध में '-S' विकल्प का कोई संदर्भ नहीं मिला। यह कहा गया है कि '.S' फ़ाइलों में असेंबलर कोड होता है, लेकिन यह आपको नहीं बताता कि उन्हें कैसे उत्पन्न किया जाए। http://erlang.org/doc/man/erlc.html – ipinak

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