2011-07-08 12 views
5

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

संपादित करें: मैं समझता हूँ कि अजगर व्याख्या की है, लेकिन यह अभी भी नहीं सी की तुलना में धीमी हो सकता है अगर यह संकलित किया गया?

उत्तर

5

यह एक व्यापक सवाल है।

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

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

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

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

+0

धन्यवाद। हाँ जैसे मैंने अपनी टिप्पणी में paulsm4 को कहा था, भाषा सबसे निर्दोष भाषा उपलब्ध हो सकती है लेकिन अभी भी सबसे तेज़ है यदि इसमें एक महान कंपाइलर है। यह अब मुझे और अधिक समझ में आता है तो फिर धन्यवाद! – edaniels

2

असल में, आपका आधार जरूरी नहीं है।

कई लोगों का कहना है कि एक अच्छा अनुकूलन संकलक हाथ कोडित विधानसभा मात कर सकते हैं।

अन्य लोगों का कहना सकता जस्ट-इन-समय जावा और नेट के लिए उन जैसे compilers क्रम heuristics का लाभ ले सकते हैं और इसलिए किसी भी स्थिर संकलित कोड मात कि।

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

IMHO ...

+0

तो यह वास्तव में कैसे संकलक या दुभाषिया बनाने/वास्तविक मशीन कोड का अनुकूलन करने के लिए चुनता करने के लिए नीचे आता है। जो पाइथन धीमा होने के बारे में मेरा मुद्दा बनायेगा यदि यह एक संकलित भाषा थी क्योंकि संकलक (सी में बनाया गया) शायद मशीन कोड बनाने के लिए समान कदम उठाएगा क्योंकि यह सी के कंपाइलर में होगा। – edaniels

+0

ऐसी चीजों को कहने के लिए बहुत आसान है। अपने दावों के लिए उद्देश्य समर्थन ढूँढना अधिक कठिन होगा। –

+0

क्या आप Google, जैरी ताबूत के लिए बहुत आलसी हैं? या चर्चा के लिए कुछ भी सकारात्मक योगदान करने के लिए बहुत अप्रिय है? – paulsm4

1

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

लेकिन यह कहना नहीं है कि अपवाद नहीं हैं। पाउल्सएम 4 की तरह, उच्च स्तर की भाषाएं निम्न स्तर की तुलना में अधिक कुशल होने लग सकती हैं क्योंकि वे विभिन्न पैटर्न का लाभ उठा सकते हैं (मुझे विवरण नहीं पता)।

+0

कैसे आ लोग कहते हैं कि इन दिनों जावा नहीं है कि बहुत धीमी सी से ++ अब और है? –

1

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

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

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

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

कहाँ भाषा गति मायने रखती है कि तहखाने सामान में है। यदि आप केवल उच्च-स्तरीय कोड लिख रहे हैं, तो संकलित कोड की गति कम मायने रखती है। क्या एक बहुत मायने रखती है अपने कोड अधीनस्थ दिनचर्या से अधिक यह वास्तव में करने की जरूरत है कॉल करता है, तो है। कंपाइलर आपकी मदद नहीं कर सकता है। Here's an example of how to fix that kind of problem.

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

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