जवाबों:
PHP एक व्याख्या की गई भाषा है। बाइनरी जो आपको PHP की व्याख्या करने देता है, संकलित है, लेकिन आप जो लिखते हैं उसकी व्याख्या की जाती है।
आप व्याख्या की गई भाषाओं के लिए विकिपीडिया पृष्ठ पर अधिक देख सकते हैं
दोनों। PHP को एक मध्यवर्ती बाईटेकोड के रूप में संकलित किया जाता है, जिसे तब रनटाइम इंजन द्वारा व्याख्या किया जाता है।
PHP संकलक का काम अपने PHP कोड को पार्स करना है और इसे रनटाइम इंजन के लिए उपयुक्त रूप में परिवर्तित करना है। इसके कार्यों के बीच:
आपके PHP सेटअप के आधार पर, यह कदम आम तौर पर सिर्फ एक बार किया जाता है, पहली बार स्क्रिप्ट कहा जाता है। कंपाइलर आउटपुट बाद के उपयोगों तक पहुंच को गति देने के लिए कैश्ड है। यदि स्क्रिप्ट को संशोधित किया गया है, हालांकि, संकलन कदम फिर से किया जाता है।
रनटाइम इंजन स्क्रिप्ट चलने पर एएसटी और बायटेकोड चलता है। प्रतीक तालिका का उपयोग चर के मूल्यों को संग्रहीत करने और कार्यों के लिए बाइटकोड पते प्रदान करने के लिए किया जाता है।
बाइटकोड को संकलित करने और रनटाइम में इसकी व्याख्या करने की यह प्रक्रिया उन भाषाओं के लिए विशिष्ट है जो पर्ल, जावा, रूबी, स्मॉलटॉक और अन्य सहित कुछ प्रकार के आभासी रनटाइम मशीन पर चलती हैं।
PHP एक व्याख्या की गई भाषा है। हालांकि इसे थर्ड पार्टी-टूल्स द्वारा बाईटेकोड में संकलित किया जा सकता है।
एक संकलित कोड को कंप्यूटर के सीपीयू द्वारा सीधे निष्पादित किया जा सकता है। यही है, निष्पादन योग्य कोड सीपीयू की मूल भाषा में निर्दिष्ट है
सीपीयू मशीन निर्देशों से किसी भी प्रारूप से रन-टाइम पर व्याख्या की गई भाषाओं के कोड का अनुवाद किया जाना चाहिए। यह अनुवाद दुभाषिया द्वारा किया जाता है।
यह कहना उचित नहीं होगा कि किसी भाषा की व्याख्या या संकलन किया जाता है क्योंकि व्याख्या और संकलन दोनों उस विशेष भाषा के कार्यान्वयन के गुण हैं, न कि भाषा की एक संपत्ति । इसलिए, किसी भी भाषा को संकलित या व्याख्या किया जा सकता है - यह सिर्फ इस बात पर निर्भर करता है कि आप किस विशेष कार्यान्वयन का उपयोग कर रहे हैं।
सबसे व्यापक रूप से इस्तेमाल किया जाने वाला PHP कार्यान्वयन Zend Engine द्वारा संचालित होता है और इसे PHP के नाम से जाना जाता है। Zend Engine PHP स्रोत को एक ऐसे प्रारूप में संकलित करता है जिसे वह निष्पादित कर सकता है, इस प्रकार Zend इंजन दुभाषिए के रूप में काम करता है ।
यह एक अर्थहीन प्रश्न है। PHP जीसीसी की तरह ही याक (बाइसन) का उपयोग करता है। याक एक "संकलक संकलक" है। याक का आउटपुट एक संकलक है। एक संकलक का आउटपुट "संकलित" है। PHP को yacc के आउटपुट से पार्स किया जाता है। तो यह है, परिभाषा के अनुसार, संकलित।
यदि वह संतुष्ट नहीं है, तो निम्नलिखित पर विचार करें। दोनों php (बाइनरी) और आपके स्रोत कोड को पढ़ते हैं और एक सार वाक्यविन्यास पेड़ का उत्पादन करते हैं। संस्करण 4 और 5 के तहत, php तब प्रोग्राम को बाईटेकोड (संकलन चरण) में अनुवाद करने के लिए पेड़ पर चलता है। आप वल्कन लॉजिक डम्पर का उपयोग करके ओपकोड (जो असेंबली के अनुरूप हैं) द्वारा अनुवादित बाईटेकोड देख सकते हैं । अंत में, php (विशेष रूप से, Zend इंजन) bytecode की व्याख्या करता है। जीसीसी, तुलना में, पेड़ चलता है और विधानसभा को आउटपुट करता है; यह प्रक्रिया को समाप्त करने के लिए कोडांतरक और लिंकर भी चला सकता है। एक कार्यक्रम को एक "व्याख्यायित" द्वारा संभाला जाना और दूसरे "संकलित" द्वारा संभाला गया एक कार्यक्रम निरर्थक है। आखिरकार, दोनों के साथ एक "संकलक" के माध्यम से कार्यक्रम चलाए जाते हैं।
आपको वास्तव में उस प्रश्न को पूछना चाहिए जो आप इसके बजाय पूछना चाहते हैं। ("क्या मैं एक प्रदर्शन दंड का भुगतान करता हूं क्योंकि PHP हर अनुरोध के लिए मेरे स्रोत कोड को फिर से जमा करता है?", आदि)
मुझे पता है कि यह प्रश्न पुराना है, लेकिन यह सभी जगह जुड़ा हुआ है और मुझे लगता है कि यहां सभी उत्तर गलत हैं (शायद इसलिए कि वे पुराने हैं)।
नहीं है कोई एक व्याख्या की भाषा या एक संकलित भाषा के रूप में इस तरह के बात। किसी भी प्रोग्रामिंग भाषा की व्याख्या और / या संकलित की जा सकती है।
सबसे पहले एक भाषा सिर्फ नियमों का एक सेट है, इसलिए जब हम संकलन के बारे में बात कर रहे हैं तो हम उस भाषा के विशिष्ट कार्यान्वयन का उल्लेख करते हैं।
उदाहरण के लिए, HHVM , PHP का एक कार्यान्वयन है। यह कोड को मध्यवर्ती हिपहॉप बाईटेकोड में परिवर्तित करने के लिए जेआईटी संकलन का उपयोग करता है और फिर मशीन कोड में अनुवाद किया जाता है। क्या यह कहने के लिए पर्याप्त है कि यह संकलित है? कुछ जावा कार्यान्वयन (सभी नहीं) भी जेआईटी का उपयोग करते हैं। Google का V8 भी JIT का उपयोग करता है।
संकलित बनाम व्याख्या की पुरानी परिभाषाओं का उपयोग करना आजकल समझ में नहीं आता है।
"क्या PHP संकलित है?" एक गैर-संवेदी प्रश्न है जो कि एक व्याख्या की गई भाषा बनाम संकलित भाषा के बीच स्पष्ट और सहमत नहीं है।
उनका परिसीमन करने का एक संभावित तरीका है (मुझे इस द्वंद्ववाद का कोई मतलब नहीं है):
संकलित भाषाएं समय संकलन (C, C ++) के आगे का उपयोग करती हैं;
व्याख्या की गई भाषाएं बस समय संकलन में या सभी (पायथन, रूबी, पीएचपी, जावा) में संकलन का उपयोग नहीं करती हैं।
in most cases, हां। सभी मामलों में, नहीं। इसलिए आप एक ऐसी रेखा नहीं खींच सकते जो शब्दार्थ से महत्वपूर्ण और सहमत हो।
कम से कम यह संकलन नहीं करता है (या मुझे अनुकूलन कहना चाहिए) कोड को उतना ही चाहिए जितना कोई इसे चाहता है।
यह कोड ...
for($i=0;$i<100000000;$i++);
echo $i;
... इस कार्यक्रम को चलाने में हर बार समान रूप से देरी होती है।
यह पता लगा सकता है कि यह एक गणना है जिसे केवल पहली बार करने की आवश्यकता है।