एक प्रोग्रामिंग भाषा की "गति" क्या निर्धारित करती है?


38

मान लीजिए कि एक कार्यक्रम दो अलग-अलग भाषाओं में लिखा गया है, तो उन्हें भाषा X और भाषा Y होने दें, यदि उनके संकलक समान बाइट कोड उत्पन्न करते हैं, तो मुझे भाषा Y के बजाय भाषा X का उपयोग क्यों करना चाहिए? क्या परिभाषित करता है कि एक भाषा अन्य की तुलना में तेज है?

मैं यह पूछता हूं क्योंकि अक्सर आप लोगों को चीजों को कहते हुए देखते हैं जैसे: "सी सबसे तेज भाषा है, एटीएस सी के रूप में तेज भाषा है"। मैं प्रोग्रामिंग भाषाओं के लिए "तेज" की परिभाषा को समझना चाह रहा था।


21
यदि एक कार्यक्रम एक दूसरे से तेज है, तो इसका मतलब है कि उनके पास समान बाइट कोड नहीं हो सकता है।
svick

5
कार्यक्रम लिखने के लिए भाषाएं केवल एक धारणा है, इसलिए आप वास्तव में भाषा की गति के बारे में बात नहीं कर सकते ।
जुहो

1
@ राफेल मुझे लगता है कि यह ऑफ-टॉपिक, अस्पष्ट और बहुत अधिक व्यापक है। जबकि विषय सॉफ्टवेयर इंजीनियरिंग के लिए बेहतर है , मुझे संदेह है कि इसे "बहुत व्यापक" के रूप में बंद कर दिया जाएगा।
डेविड रिचरबी

2
कार्यान्वयन एक तरफ, "गति" अस्पष्ट, को लागू करने के संकलन, को क्रियान्वित करने, और डीबगिंग के लिए अलग अलग गति देखते हैं है, और आप आमतौर पर दूसरों (अन्यथा हम सभी का उपयोग करेंगे के लिए कुछ बंद व्यापार करने जा रहे हैं प्रोग्रामिंग भाषा)
निक T

ऊपरोक्त अनुसार। भाषाएँ समान बाइट कोड उत्पन्न नहीं करती हैं। कुछ भाषाओं को बाइट कोड में पार्स करना आसान है। कुछ में उच्च स्तर की अमूर्तता होती है।
सुपरम्लिनरी

जवाबों:


23

ऐसे कई कारण हैं जिन पर एक भाषा Y चुनने के लिए विचार किया जा सकता है Y कार्यक्रम की पठनीयता, प्रोग्रामिंग में आसानी, कई प्लेटफार्मों के लिए पोर्टेबिलिटी, अच्छे प्रोग्रामिंग वातावरण का अस्तित्व ऐसे कारण हो सकते हैं। हालाँकि, मैं केवल निष्पादन की गति पर विचार करूंगा, जैसा कि प्रश्न में अनुरोध किया गया है। उदाहरण के लिए, प्रश्न पर विचार नहीं किया जाता है, विकास की गति।

दो भाषाएं एक ही बायोटेक को संकलित कर सकती हैं, लेकिन इसका मतलब यह नहीं है कि एक ही कोड का उत्पादन किया जाएगा,

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

इसने कहा, भाषाओं की सापेक्ष गति का मुद्दा एक पुराना है, जो पहले संकलक के लिए वापस डेटिंग है।

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

इस प्रकार मशीन की भाषा, फोरट्रान की तुलना में तेज थी।

बेशक, यह समय के साथ बदल गया, क्योंकि संकलक अधिक परिष्कृत हो गए, इस बिंदु पर कि विधानसभा भाषा में प्रोग्रामिंग अब बहुत दुर्लभ है। अधिकांश अनुप्रयोगों के लिए, विधानसभा भाषा कार्यक्रम कंपाइलरों को अनुकूलित करके उत्पन्न कोड के साथ खराब प्रतिस्पर्धा करते हैं।

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

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

संकलन प्रक्रिया आसान हो सकती है, इसलिए बेहतर कोड का उत्पादन होता है, जब भाषा की प्रोग्रामिंग प्रतिमान उन मशीनों की विशेषताओं के करीब होती है जो कोड को अलग करेगी, चाहे वास्तविक या आभासी मशीन।

एक और मुद्दा यह है कि क्या भाषा में लागू किए जाने वाले प्रतिमानों को प्रोग्राम की जाने वाली समस्या के प्रकार के लिए बंद कर दिया जाता है। यह उम्मीद की जानी चाहिए कि विशिष्ट प्रोग्रामिंग प्रतिमानों के लिए विशिष्ट एक प्रोग्रामिंग भाषा उस प्रतिमान से संबंधित बहुत कुशलता से संकलन करेगी। इसलिए प्रोग्रामिंग भाषा की पसंद स्पष्टता के लिए और गति के लिए निर्भर हो सकती है, प्रोग्रामिंग भाषा की पसंद के अनुसार जिस तरह की समस्या को प्रोग्राम किया जा रहा है, उसके अनुकूल है।

सिस्टम प्रोग्रामिंग के लिए C की लोकप्रियता शायद इस तथ्य के कारण है कि C मशीन आर्किटेक्चर के करीब है, और उस सिस्टम प्रोग्रामिंग का सीधा संबंध उस आर्किटेक्चर से भी है।

तर्क प्रोग्रामिंग और बाधा समाधान भाषाओं का उपयोग करके तेजी से निष्पादन के साथ कुछ अन्य समस्या आसानी से प्रोग्राम की जाएगी ।

कॉम्प्लेक्स रिएक्टिव सिस्टम को बहुत ही कुशलता से प्रोग्रामिंग की जा सकती है, जैसे कि एस्टेरेल जैसी विशिष्ट सिंक्रोनस प्रोग्रामिंग लैंग्वेज के साथ, जो इस तरह के सिस्टम के बारे में बहुत ही विशेष ज्ञान का प्रतीक है और बहुत तेज कोड उत्पन्न करता है।

या एक चरम उदाहरण लेने के लिए, कुछ भाषाएँ अत्यधिक विशिष्ट होती हैं, जैसे कि वाक्यविन्यास विवरण भाषाएं प्रोग्रामर्स को प्रोग्राम करने के लिए उपयोग की जाती हैं। एक पार्सर जनरेटर ऐसी भाषाओं के लिए एक कंपाइलर के अलावा कुछ भी नहीं है। बेशक, यह ट्यूरिंग पूर्ण नहीं है, लेकिन ये संकलक अपनी विशेषता के लिए बहुत अच्छे हैं: कुशल पार्सिंग कार्यक्रमों का निर्माण। ज्ञान के क्षेत्र को प्रतिबंधित किया जा रहा है, ऑप्टिमाइज़ेशन तकनीक बहुत ही विशिष्ट और बहुत सूक्ष्म रूप से ट्यून की जा सकती है। ये पार्सर जनरेटर आमतौर पर किसी अन्य भाषा में कोड लिखकर प्राप्त किए जा सकने वाले से बेहतर होते हैं। संकलक के साथ कई उच्च विशिष्ट भाषाएं हैं जो समस्याओं के एक प्रतिबंधित वर्ग के लिए उत्कृष्ट और तेज कोड का उत्पादन करती हैं।

इसलिए, जब एक बड़ी प्रणाली लिखते हैं, तो यह उचित हो सकता है कि किसी एक भाषा पर भरोसा न करें, लेकिन सिस्टम के विभिन्न घटकों के लिए सर्वोत्तम भाषा का चयन करें। यह, ज़ाहिर है, संगतता की समस्याओं को उठाता है।

एक और बात जो अक्सर मायने रखती है, वह है विषयों के लिए कुशल पुस्तकालयों का अस्तित्व।

अंत में, गति एकमात्र मानदंड नहीं है और अन्य मानदंडों के साथ संघर्ष में हो सकता है जैसे कि कोड सुरक्षा (खराब इनपुट के संबंध में छूट, या सिस्टम त्रुटियों के प्रति लचीलापन), मेमोरी का उपयोग, प्रोग्रामिंग में आसानी (हालांकि प्रतिमान संगतता वास्तव में मदद कर सकती है) ), ऑब्जेक्ट कोड का आकार, कार्यक्रम की स्थिरता, आदि।

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


धन्यवाद। इसके कुछ इस तरह है। मुझे इसकी तलाश थी। विषय के लिए सामग्री खोजना मुश्किल था। इससे काफी कुछ स्पष्ट हुआ।
रोड्रिगो वैलेन्टाइ

@ RodrigoAraújoValente धन्यवाद, आप इस प्रश्न को देखना चाह सकते हैं । एक अतिवादी दृष्टिकोण यह है कि भाषा L के लिए एक कंपाइलर केवल L के लिए एक दुभाषिया को कार्यक्रम के स्रोत कोड के साथ बंडल कर सकता है, बिना कुछ किए। फिर आप बंडल की गणना (आंशिक मूल्यांकन) का अनुकूलन करके बेहतर कर सकते हैं। आप जितना अधिक अनुकूलन करेंगे और आपकी भाषा उतनी ही तेज़ होगी। सवाल यह है: क्या आप का अनुकूलन में मदद कर सकते हैं? उत्तर में विशेष विषय क्षेत्र का अच्छा ज्ञान, प्रोग्रामर की मदद, परिष्कृत विश्लेषण आदि शामिल हो सकते हैं ...
babou

"एक ही बायोटेक" द्वारा मैं अनुमान लगा रहा हूं कि आपका मतलब " निष्पादन योग्य प्रतिनिधित्व का एक ही प्रकार " है। स्पष्ट रूप से समान निष्पादन योग्य समान गति (समान निष्पादन प्रणाली मानकर) पर चलेंगे। (मैं शायद एक सूचना / संचार के नजरिए से इसे देखूंगा। सिद्धांत रूप में , एक प्रोग्रामर प्रोग्राम और हार्डवेयर के बारे में सबकुछ जान सकता है जबकि एक भाषा अक्सर संचार को बाधित करती है (क्या अंशों को अनुमति दी जाती है या उपयोगी है) और संकलक को पता हो सकता है माइक्रोआर्किटेक्चरल विवरण। संकलन और संकलक विकास विकास और प्रशिक्षण के लिए विश्लेषण कर रहे हैं। ...
पॉल ए। क्लेटन

यह तब मनुष्य में आम तौर पर अच्छा होता है (जैसे, सामान्य पैटर्न को पहचानना) बनाम क्या कंप्यूटर आमतौर पर अच्छे हैं (जैसे, रिकॉर्ड रखने और "अंकगणित")। इसके अलावा, रनटाइम जानकारी का संचार अक्सर अधिक कंप्यूटर के अनुकूल होता है (प्रोफ़ाइल-निर्देशित अनुकूलन प्रोग्रामिंग प्रोग्रामिंग के माध्यम से संचारित जानकारी की कमी को दूर कर सकता है)। डायनामिक ऑप्टिमाइज़ेशन मानव प्रोग्रामर के साथ अव्यावहारिक होगा ...
पॉल ए। क्लेटन

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

16

जबकि सब कुछ अंततः सीपीयू * पर चलाया जाता है , विभिन्न भाषाओं के बीच विभिन्न अंतर हैं। यहाँ कुछ उदाहरण हैं।

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

वर्चुअल मशीन कुछ भाषाओं को बायटेकोड में संकलित किया जाता है , एक आविष्कार किया गया "मशीन कोड" जो तब व्याख्या किया जाता है। सर्वोत्कृष्ट उदाहरण जावा और C # हैं। जबकि फ्लाई पर मशीन को कोडकोड में परिवर्तित किया जा सकता है, कोड शायद अभी भी धीमी गति से चलेगा। जावा के मामले में, पोर्टेबिलिटी के लिए एक वर्चुअल मशीन का उपयोग किया जाता है। C # के मामले में, सुरक्षा जैसे अन्य चिंताएँ हो सकती हैं।

ओवरहेड सुरक्षा के लिए कुछ भाषाएँ व्यापार दक्षता। उदाहरण के लिए, पास्कल के कुछ संस्करण यह जाँचेंगे कि आप किसी सरणी को सीमा से बाहर नहीं पहुँचा रहे हैं। सी # कोड "प्रबंधित" है, और इसकी एक लागत है। एक और आम उदाहरण कचरा संग्रह है, जो प्रोग्रामर के लिए समय बचाता है लेकिन स्मृति प्रबंधन पर हाथ के रूप में कुशल नहीं है। ओवरहेड के अन्य स्रोत हैं जैसे अपवाद हैंडलिंग के लिए बुनियादी ढांचा या ऑब्जेक्ट ओरिएंटेड प्रोग्रामिंग का समर्थन करने के लिए।

* वास्तव में, आजकल उच्च प्रदर्शन प्रणाली GPU और यहां तक ​​कि FPGAs पर भी कोड चलाती है।


तो, मूल रूप से अगर मुझे अधिक प्रदर्शन की आवश्यकता है तो मुझे संकलित भाषाओं के लिए जाना चाहिए? और प्रतिमानों के बारे में? ऊप के बजाय कार्यात्मक चुनने का एक कारण है, या इसके विपरीत?
रॉड्रिगो वैलेंटाइन

कचरा संग्रहण के बारे में आपकी टिप्पणी थोड़ी सरल है। यह हमेशा आक्रमक रूप से निर्णायक नहीं होता है जब आवंटित मेमोरी का उपयोग नहीं किया जाता है। निर्णायक होते हुए भी, त्रुटियों को बनाए बिना निर्धारित करना बहुत कठिन हो सकता है। इसलिए, जीसी कभी-कभी आवश्यक होता है और अक्सर सुरक्षित होता है (जैसे चेकरायर बाउंड्स)। इसके अलावा, इसे स्पष्ट रिलीज के साथ जोड़ा जा सकता है।
Babou

@ रोड्रिगोअराज़ो वलेंटेन डिपेंड करता है। क्रैपी कोड अक्सर गंदे कोड के लिए संकलित किया जाएगा। हो सकता है कि कोड आप अजगर में लिख सकते हैं वास्तव में तेजी से कोड से है आप सी में लिख सकते हैं
राफेल

नाइट: जैसा कि आपके द्वारा जुड़े प्रश्न से समझाया गया है, अजगर वास्तव में "ऑन-द-फ्लाई" की व्याख्या नहीं करता है :)
Eevee

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

5

वाई के बजाय एक्स चुनने के लिए अलग-अलग कारक हैं, जैसे

  • सीखने में आसानी
  • समझने में आसानी
  • विकास की गति
  • सही कोड के प्रवर्तन में मदद करें
  • संकलित कोड का प्रदर्शन
  • मंच के वातावरण का समर्थन किया
  • पोर्टेबिलिटी
  • उद्देश्य के लिए सही

कुछ भाषाएँ C # या Python जैसी व्यावसायिक परियोजनाओं को विकसित करने के लिए उपयुक्त हैं, लेकिन दूसरी ओर उनमें से कुछ C ++ जैसी सिस्टम प्रोग्रामिंग के लिए अच्छी हैं।

आपको यह निर्धारित करना होगा कि आप किस प्लेटफ़ॉर्म पर काम करने जा रहे हैं और आप किस एप्लिकेशन को बनाने जा रहे हैं।


1
तो, मैं संकलित कोड का प्रदर्शन कैसे निर्धारित करूं? यही कारण है कि मूल रूप से मुझे यह सवाल है।
रोड्रिगो वैलेंटाइन

6
इस उत्तर में निश्चित रूप से अच्छी सलाह है, लेकिन मैं यह देखने में विफल हूं कि यह सवाल का जवाब कैसे देता है, जो भाषा के लिए एक विकल्प कारक के रूप में गति के बारे में है।
बबौ

@ RodrigoAraújoValente वे भी हो सकता है नहीं किया जा कोड संकलित (यदि अपनी भाषा में समझा जाता है)।
राफेल

1
आप "गुड लाइब्रेरी" और "गुड टूल्स" जोड़ना चाह सकते हैं।
राफेल

@ RodrigoAraújoValente आप इसे चलाते हैं और इसे प्रोफाइल करते हैं।
काइल

2

"सबसे तेज़" प्रोग्रामिंग भाषा जिसे आप किसी भी प्लेटफ़ॉर्म के साथ प्राप्त कर सकते हैं, उस चिपसेट के लिए असेंबली भाषा है जो आप के साथ काम कर रहे हैं। उस स्तर पर कोई अनुवाद नहीं है। हालाँकि कुछ ज्ञान की आवश्यकता है कि कैसे चिपसेट निर्देशों को निष्पादित करता है विशेष रूप से उन चीजों को जो समानांतर में कर सकते हैं।

C से असेंबली में रूपांतरण बहुत "उथला" है कि यह एक से एक के पास है, लेकिन यह अधिक पठनीय है। हालांकि पोर्टेबिलिटी में सुधार के लिए मानक पुस्तकालयों के कारण इसके ऊपर बहुत सारी परतें हैं। असेंबली कोड को प्राप्त करने के लिए कंपाइलर को जितनी चीजें चाहिए होती हैं उतनी अधिक चीजें नहीं होती हैं और मशीन के विशिष्ट परिवर्तन करने के लिए आमतौर पर मजबूत अनुकूलन होते हैं।

C ++ एक समृद्ध भाषा है। हालाँकि, क्योंकि भाषा इतनी जटिलता जोड़ती है कि कंपाइलर के लिए प्लेटफ़ॉर्म के लिए इष्टतम कोड बनाना कठिन हो जाता है।

फिर हम पैमाने के दूसरी तरफ जाते हैं। व्याख्या की गई भाषाएं। ये सबसे धीमे होते हैं क्योंकि काम करने के अलावा कोड को पार्स करने और मशीन कॉल में बदलने में कुछ समय लगता है।

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

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

कुछ वर्चुअल मशीनें निम्न स्तर की होती हैं जो बाइट कोड से मशीन कोड तक कम अनुवाद की अनुमति देती हैं। पोर्टेबिलिटी को बनाए रखते हुए कौन सी गति बढ़ाते हैं।


ऐतिहासिक रूप से, C को मशीन कोड में आसान अनुवाद की अनुमति देने के लिए डिज़ाइन किया गया था। बढ़ती हुई सीमा तक, हालांकि, C को कुशल C कोड में बदलने के लिए यह आवश्यक है कि एक कंपाइलर यह पता लगाए कि प्रोग्रामर क्या करने की कोशिश कर रहा था और फिर उस इरादे को मशीन कोड में बदल दिया। उदाहरण के लिए, ऐतिहासिक रूप से *p++=*q++;कई मशीनों पर मशीन कोड के बराबर की तुलना में तेजी से किया गया है, array1[i]=array2[i];लेकिन कई प्रोसेसर पर रिवर्स अक्सर सच होता है और इस तरह से कंपाइलर कोड की पूर्व शैली को बाद में परिवर्तित कर सकते हैं - शायद ही "उथले" रूपांतरण।
सुपरकैट

यदि आप ऐसा करते हैं तो आमतौर पर -O0यह कोई अनुकूलन नहीं करेगा। ऑप्टिमाइज़ेशन एक बोनस है जो आपको संकलक के साथ मिलता है, लेकिन अपने आप में भाषा एक से एक विधानसभा में अनुवाद कर सकती है।
आर्किमिडीज ट्रेजानो

2

एक बिंदु जिसका अभी तक उल्लेख नहीं किया गया है, वह यह है कि कुछ भाषाओं में, एक ही कोड को कई बार चलाने पर हमेशा एक ही क्रम चलता रहेगा; कंप्यूटर इस प्रकार केवल यह निर्धारित करने की आवश्यकता है कि कोड का अनुभाग क्या करना चाहिए। जावास्क्रिप्ट के "सख्त का उपयोग करें" बोली के प्रमुख लाभों में से एक यह है कि एक बार जावास्क्रिप्ट इंजन यह पता लगाता है कि कोड का एक टुकड़ा क्या करता है, यह अगली बार चलने पर उस जानकारी का उपयोग कर सकता है; "सख्त उपयोग" के बिना, यह नहीं हो सकता।

उदाहरण के लिए, "सख्त का उपयोग करें" की अनुपस्थिति में, कोड का एक टुकड़ा:

function f() { return x; }

तत्काल कॉलिंग संदर्भ में एक चर एक्स लौटा सकता है, अगर कोई एक है, या बाहरी कॉलिंग संदर्भ से एक चर एक्स है, या यह वापस आ सकता है Undefined। इससे भी बदतर, एक पाश में जैसे:

for (i=0; i<40; i+=1) { g(i); }

जावास्क्रिप्ट इंजन के लिए यह जानने का कोई तरीका नहीं है कि उस मामले के लिए [या खुद से क्या कर g()सकता है। चूंकि या काफी वैध रूप से एक स्ट्रिंग में बदल सकता है , जावास्क्रिप्ट इंजन बस एक संख्यात्मक जोड़ और लूप में संख्यात्मक तुलना का उपयोग नहीं कर सकता है, लेकिन लूप चेक के माध्यम से प्रत्येक पास पर यह देखने के लिए होना चाहिए कि क्या फ़ंक्शन कॉल में से किसी ने कुछ भी किया है या नहीं । इसके विपरीत, "सख्त का उपयोग करें" [कुछ हद तक समझ में] JavaScipt इंजन उपरोक्त कोड की जांच कर सकता है और यह जान सकता है कि लूप से गुजरने वाला प्रत्येक पास एक ही संख्यात्मक चर का उपयोग करेगा और उसी फ़ंक्शन को लागू करेगा। इस प्रकार इसे केवल पहचानने और कार्य करने की आवश्यकता होगीiggiiigig एक बार, लूप के माध्यम से हर पास पर उन्हें देखने के बजाय - एक प्रमुख समय बचत।


2

वैसे यहाँ कुछ काफी पेशेवर जवाब हैं, यह कोई भी उनके करीब नहीं है लेकिन आपके लिए सहज हो सकता है।

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

हालांकि कंपाइलर बहुत परिष्कृत हैं लेकिन वे अभी भी प्रभावी नहीं हैं क्योंकि सर्वश्रेष्ठ असेंबली प्रोग्रामर हो सकते हैं।

इस दिशा में जारी रखते हुए, उन अनावश्यक आदेशों को अपनी राशि में (आमतौर पर) बढ़ता है क्योंकि भाषा उच्च स्तर की है। (यह सभी उच्च स्तरीय भाषाओं के लिए 100% सत्य नहीं है)

तो मेरे लिए, भाषा X, Y (रनटाइम पर) की तुलना में तेज़ है यदि कुछ निश्चित कोड के लिए, X का मशीन कोड Y से छोटा है।


विधानसभा पूरी तरह से चट्टानों। यह एक अच्छा कलाकार लेता है, हालांकि सर्वश्रेष्ठ संकलक से बेहतर प्रदर्शन करता है।
जोहान

1

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

  • RQ1। अधिक संक्षिप्त कोड के लिए कौन सी प्रोग्रामिंग भाषाएं बनाती हैं?

  • RQ2। कौन सी प्रोग्रामिंग लैंग्वेज को छोटे से एक्जीक्यूटिव में संकलित करते हैं?

  • RQ3। किन प्रोग्रामिंग भाषाओं में बेहतर रनिंग-टाइम परफॉर्मेंस है?

  • RQ4। कौन सी प्रोग्रामिंग भाषाएं मेमोरी का अधिक कुशलता से उपयोग करती हैं?

  • RQ5। कौन सी प्रोग्रामिंग लैंग्वेज कम फेल होने का खतरा है?

सार- कभी-कभी प्रोग्रामिंग भाषाओं पर बहस वैज्ञानिक से अधिक धार्मिक होती है। किस भाषा के बारे में प्रश्न अधिक रसीले या कुशल हैं, या डेवलपर्स को अधिक उत्पादक बनाते हैं, इस पर चर्चा की जाती है, और उनके उत्तर भी अक्सर उपाख्यानों और असंबद्ध मान्यताओं पर आधारित होते हैं। इस अध्ययन में, हम रोसेटा कोड की बड़े पैमाने पर अनकैप्ड रिसर्च क्षमता का उपयोग करते हैं, विभिन्न भाषाओं में सामान्य प्रोग्रामिंग कार्यों के समाधान का एक कोड रिपॉजिटरी है, जो विश्लेषण के लिए एक बड़ा डेटा सेट प्रदान करता है। हमारा अध्ययन प्रमुख प्रोग्रामिंग प्रतिमानों (प्रक्रियात्मक: सी और गो; ऑब्जेक्ट ओरिएंटेड: सी # और जावा; कार्यात्मक: एफ # और हास्केल; स्क्रिप्टिंग: पायथन और रूबी) का प्रतिनिधित्व करते हुए 8 व्यापक रूप से इस्तेमाल की जाने वाली भाषाओं में 745 कार्यों के लिए 7,087 समाधान कार्यक्रमों पर आधारित है। हमारे सांख्यिकीय विश्लेषण से पता चलता है, सबसे खास बात यह है कि: कार्यात्मक और स्क्रिप्टिंग भाषाएं प्रक्रियात्मक और वस्तु-उन्मुख भाषाओं की तुलना में अधिक संक्षिप्त हैं; C जब बड़े इनपुट पर कच्ची गति की बात आती है, तो उसे हराना मुश्किल होता है, लेकिन मध्यम आकार के इनपुट पर प्रदर्शन अंतर कम स्पष्ट होते हैं और व्याख्या की गई भाषाओं को प्रतिस्पर्धी होने की अनुमति देते हैं; संकलित दृढ़ता से टाइप की जाने वाली भाषाएं, जहां संकलन के समय अधिक दोषों को पकड़ा जा सकता है, व्याख्यात्मक या कमजोर टाइप की भाषाओं की तुलना में रनटाइम विफलताओं का कम खतरा होता है। हम डेवलपर्स, भाषा डिजाइनरों और शिक्षकों के लिए इन परिणामों के निहितार्थ पर चर्चा करते हैं। जहाँ संकलन के समय अधिक दोषों को पकड़ा जा सकता है, उनकी व्याख्या या कमजोर टाइप की भाषाओं की तुलना में रनटाइम विफलताओं का खतरा कम होता है। हम डेवलपर्स, भाषा डिजाइनरों और शिक्षकों के लिए इन परिणामों के निहितार्थ पर चर्चा करते हैं। जहाँ संकलन के समय अधिक दोषों को पकड़ा जा सकता है, उनकी व्याख्या या कमजोर टाइप की भाषाओं की तुलना में रनटाइम विफलताओं का खतरा कम होता है। हम डेवलपर्स, भाषा डिजाइनरों और शिक्षकों के लिए इन परिणामों के निहितार्थ पर चर्चा करते हैं।


0

कंप्यूटर भाषाएं कंप्यूटर को क्या करना है, यह समझाने के लिए केवल आदेशों का एक अमूर्त हिस्सा हैं।

आप कंप्यूटर भाषा में भी लिख सकते हैं Pythonऔर इसे सी कंपाइलर (साइथॉन) के साथ संकलित कर सकते हैं।

इसे ध्यान में रखते हुए कंप्यूटर भाषाओं की गति की तुलना नहीं की जा सकती है।

लेकिन आप कुछ विस्तार तक एक ही भाषा के कंपाइलरों की तुलना कर सकते हैं। उदाहरण के लिए GNU Cसंकलक बनाम Intel Cसंकलक। (कंपाइलर बेंचमार्क की खोज करें)


2
यदि आप प्रश्न के बारे में टिप्पणी करना चाहते हैं, तो कृपया अपने जवाब से नहीं, टिप्पणी बॉक्स का उपयोग करें। ध्यान दें कि यह कंप्यूटर साइंस स्टैक एक्सचेंज है और कंप्यूटर विज्ञान प्रोग्रामिंग नहीं है, जिस तरह साहित्य शब्द-संसाधन नहीं है। सॉफ्टवेयर इंजीनियरिंग या स्टैक ओवरफ्लो पर प्रोग्रामिंग प्रश्न रहते हैं ।
डेविड रिचेर्बी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.