2010-12-28 20 views
8

Erlang and OTP in Action में (पेज 46), लेखकों राज्य एक नोट में निम्नलिखित:जब संकलित कोड शैल से भिन्न होता है तो मूल्यांकन किया जाता है?

यह कुछ अजीब कोने मामले में है कि हो सकता है, खोल में मूल्यांकन कोड एक ही कोड से थोड़ा अलग व्यवहार करने के तरीके के रूप में भाग संकलित एक मॉड्यूल के। ऐसे मामले में, संकलित संस्करण स्वर्ण मानक है। जब यह अभिव्यक्तियों का व्याख्या करता है तो खोल सटीक वही काम करने की पूरी कोशिश करता है।

आप इनमें से एक या अजीब कोने मामलों के और अधिक के बारे में सोच सकते हैं? उन मामलों में मामूली अंतर कौन से हैं?

उत्तर

7

एरलांग दुभाषिया, erl_eval, संकलित कोड की तरह व्यवहार करने के लिए बहुत मेहनत करता है। यदि ऐसा नहीं होता है तो यह एक बग की संभावना है।

एक मामले में को छोड़कर और यह संदेश प्राप्त कर रहा है। संकलित कोड संदेश कतार तक पहुंचने और कुशलतापूर्वक उपयोग करने के लिए आंतरिक निर्देशों तक पहुंच सकता है। दुभाषिया यह नहीं कर सकता है। यह आवश्यक है: वास्तव में कतार से संदेश हटाएं (receive X -> X end के साथ अधिक या कम); यह देखने के लिए जांचें कि क्या वे प्राप्त पैटर्न से मेल खाते हैं; उन लोगों को रखें जो मेल नहीं खाते हैं; और वर्तमान में सभी अवांछित संदेशों को कतार में वापस रख दें (सभी संदेश प्राप्त करके और फिर उन्हें स्वयं वापस भेजकर)। इसका मतलब है कि एक छोटा सा समय है जिसमें कोई संदेश आता है, यह संकलित कोड के लिए संदेश कतार में एक ही स्थान पर समाप्त नहीं हो सकता है।

8

सबसे महत्वपूर्ण अंतर यह है कि खोल का अर्थ है जबकि संकलित कोड है ... अच्छी तरह से .. संकलित। इसमें निष्पादन गति और फ़ंक्शन के स्मृति उपयोग में देखने योग्य अंतर है। दूसरे शब्दों में, आप पाएंगे कि संकलित संस्करण धीमा है या संकलित संस्करण नहीं होने पर आपकी सभी मेमोरी का उपयोग करता है।

इस समस्या ने कई युवा एरलांग प्रोग्रामर को काट दिया है। वह सोचता है कि एरलांग अन्य भाषाओं की तुलना में धीमी है, जबकि वास्तविकता में संकलित के खिलाफ व्याख्या किए गए कोड का परीक्षण है।

अनुच्छेद एक सुरक्षात्मक उपाय है। मूल रूप से दुभाषिया और कंपाइलर को किसी फ़ंक्शन के सभी इनपुट/आउटपुट पर सहमत होना चाहिए। लेकिन दुर्भाग्य से यह हमेशा मामला नहीं है। अभ्यास में दुभाषिया और कंपाइलर अलग निष्पादन इंजन होते हैं और इस प्रकार भिन्न हो सकते हैं। यदि आप हायपीई के माध्यम से देशी संकलन करते हैं तो परिवर्तन भी बड़े हो सकते हैं। आमतौर पर आईईईई 754 फ्लोटिंग पॉइंट नंबरों के आसपास समस्याएं उत्पन्न होती हैं।

+1

एक मामला जहां गति अंतर आपको मिल सकता है, वह शेल में बनाया गया है। वे संकलित नहीं होते हैं और संकलित कोड में पारित होने पर भी हमेशा व्याख्या की जाएगी। – rvirding

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

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