পিএইচপি সংকলিত বা ব্যাখ্যা করা হয়?


142

পিএইচপি সংকলিত বা ব্যাখ্যা করা হয়?

উত্তর:


127

পিএইচপি হ'ল ব্যাখ্যাযুক্ত ভাষা। বাইনারি যা আপনাকে পিএইচপি ব্যাখ্যা করতে দেয় তা সংকলিত হয় তবে আপনি যা লিখেন তা ব্যাখ্যা করা হয়।

আপনি অনুবাদিত ভাষার জন্য উইকিপিডিয়া পৃষ্ঠায় আরও দেখতে পারেন


26
তার অর্থ পিএইচপি (বা উইন্ডোতে php.exe) নামক ইউটিলিটি সংকলিত।
sepp2k

7
@ নিকি এর অর্থ হ'ল পিএইচপি ব্যাখ্যার জন্য যে প্রোগ্রামটি ব্যবহৃত হয় তা সংকলিত হয়েছে, তবে পিএইচপি নিজেই ব্যাখ্যা করা হয়েছে।
অ্যান্ড্রু গান

5
তবে এর উইকিপিডিয়ায় এর উল্লেখ কেন? goo.gl/YOwZ পিএইচপি 4 এর পর থেকে, পিএইচপি পার্সার জেন্ড ইঞ্জিন দ্বারা প্রসেসিংয়ের জন্য বাইটকোড তৈরি করতে ইনপুট সংকলন করে, এর দোভাষী পূর্বসূরীর তুলনায় উন্নত কর্মক্ষমতা দেয়।
কিরানভজ

5
@ কিরানভিজ এটি প্রকৃত উন্নত পারফরম্যান্সের জন্য সংকলিত, তবে রানটাইমে। "সংকলিত ভাষাগুলি "টিকে" প্রাক-সংকলিত "হিসাবে এবং" দৌড়ানোর সময় সংকলিত "হিসাবে অনুবাদ করা ভাষাগুলি ভাবেন। এটি এই দুটিয়ের মধ্যে পার্থক্য: - জেআইটি ("ঠিক সময়ে"), যেখানে কেবল প্রয়োজনীয় কোডটি যখন প্রয়োজন হয় তখনই এটি সংকলিত হয় (দ্রষ্টব্য, তবে, দোভাষী ছাড়ার পরে সংকলিত কোডটি অনেক বেশি) - এওটি (" সময়ের আগে "), যেখানে সমস্ত কোড চালানোর আগে সংকলিত হয়।
থিবল্ট মার্টিন-লেগার্ডেট

4
@ কিরানভিজ: আমি বিশ্বাস করি যে পিএইচপি স্থানীয় কোডের সাথে সংকলিত হয় কিনা ওপি জানতে চেয়েছিল। এটি বাইটকোডে সংকলন করা, যা আবার জেন্ড দ্বারা ব্যাখ্যা করা হয়েছে, সংকলন ব্যয় এবং রানটাইম পারফরম্যান্সের দিক দিয়ে মাঝখানে রয়েছে। লোল, এটি একটি পুরানো থ্রেড, এটি কেবল উপলব্ধি করা হয়েছে।
গ্রো

66

উভয়। পিএইচপি একটি মধ্যবর্তী বাইটকোডে সংকলিত হয় যা রানটাইম ইঞ্জিন দ্বারা ব্যাখ্যা করা হয়।

পিএইচপি সংকলকের কাজটি হল আপনার পিএইচপি কোডটি পার্স করা এবং এটিকে রানটাইম ইঞ্জিনের জন্য উপযুক্ত আকারে রূপান্তর করা। এর কাজগুলির মধ্যে রয়েছে:

  • মন্তব্য উপেক্ষা করুন
  • ভেরিয়েবল, ফাংশন নাম এবং আরও কিছু সমাধান করুন এবং প্রতীক টেবিলটি তৈরি করুন
  • আপনার প্রোগ্রামের বিমূর্ত সিনট্যাক্স ট্রি তৈরি করুন
  • বাইটকোড লিখুন

আপনার পিএইচপি সেটআপের উপর নির্ভর করে, এই পদক্ষেপটি সাধারণত একবারে করা হয়, প্রথমবার স্ক্রিপ্টটি ডাকা হয়। সংকলক আউটপুট পরবর্তী ব্যবহারগুলিতে অ্যাক্সেস গতিতে ক্যাশে করা হয়। যদি স্ক্রিপ্টটি পরিবর্তন করা হয় তবে সংকলনের পদক্ষেপটি আবার করা হবে।

রানটাইম ইঞ্জিনটি এএসটি এবং বাইকোডে চলে যখন স্ক্রিপ্টটি ডাকা হবে। প্রতীক টেবিলটি ভেরিয়েবলের মানগুলি সংরক্ষণ করতে এবং ফাংশনের জন্য বাইকোড ঠিকানাগুলি সরবরাহ করতে ব্যবহৃত হয়।

রানটাইমতে বাইটকোড সংকলন এবং ব্যাখ্যা করার এই প্রক্রিয়াটি পার্ল, জাভা, রুবি, স্মলটালক এবং অন্যদের সহ কিছু ধরণের ভার্চুয়াল রানটাইম মেশিনে চালিত ভাষার জন্য বিশেষ।


চলক বাঁধাই রানটাইম সময়ে ঘটে, সময় সংকলন করে না।
jrockway

পিএইচপি এমনকি সংকলন করার সময় কোন নামগুলি সুযোগে রয়েছে তা সমাধান করার চেষ্টাও করে না?
ব্যারি ব্রাউন 1

17

সাধারণত এটি ব্যাখ্যা করা হয়, তবে কিছু সময় এটি সংকলিত হিসাবে ব্যবহার করতে পারে এবং এটি সত্যই পারফরম্যান্স বাড়িয়ে তোলে। এই ক্রিয়াকলাপটি সম্পাদন করার জন্য ওপেন সোর্স সরঞ্জাম: hhvm.com


15

পিএইচপি হ'ল ব্যাখ্যাযুক্ত ভাষা। যদিও এটি তৃতীয় পক্ষের সরঞ্জাম দ্বারা বাইটোকোডে সংকলন করা যেতে পারে।


2
"বাইটকোড" ভিএম নির্দিষ্ট ছদ্ম নির্দেশাবলীর জন্য ব্যবহৃত একটি শব্দ, যা দেশীয় নয় তাই এই প্রসঙ্গে "সংকলন" হিসাবে বিবেচনা করা যায় না।
সেদাত কাপানোগলু

7
"অবজেক্ট কোড" সিপিইউর নির্দেশিকা ডিকোডারের জন্য কেবল বাইটোকড। (আপনি কী ভাবেন না যে সিপিইউগুলিতে আসলে "সিএমপিএসবি" এর মতো স্থানীয় নির্দেশনা রয়েছে, তাই না?)
জারকওয়ে

11

একটি সংকলিত কোড সরাসরি কম্পিউটারের সিপিইউ দ্বারা কার্যকর করা যায়। অর্থাৎ এক্সিকিউটেবল কোড CPU- এর উল্লেখ করা হয় নেটিভ ভাষা

বর্ণিত ভাষার কোডটি রান-টাইমে কোনও ফর্ম্যাট থেকে সিপিইউ মেশিনের নির্দেশিকায় অনুবাদ করা উচিত। এই অনুবাদ একজন দোভাষী দ্বারা করা হয়েছে।

এটি বলা ঠিক হবে না যে কোনও ভাষার ব্যাখ্যা করা বা সংকলন করা হয় কারণ ব্যাখ্যা এবং সংকলন উভয়ই সেই বিশেষ ভাষার প্রয়োগের বৈশিষ্ট্য, এবং নিজেই ভাষার কোনও সম্পত্তি নয়। সুতরাং, যে কোনও ভাষা সংকলন বা ব্যাখ্যা করা যেতে পারে - আপনি যে বিশেষ প্রয়োগটি ব্যবহার করছেন সেটি কী করে তা নির্ভর করে।

বহুল ব্যবহৃত পিএইচপি বাস্তবায়ন দ্বারা চালিত হয় পার্সি-জাতির প্রাচীন শাস্ত্রগ্রন্থ ইঞ্জিন কেবল পরিচিত PHP.The পার্সি-জাতির প্রাচীন শাস্ত্রগ্রন্থ ইঞ্জিন একটি বিন্যাসে এটি নির্বাহ করতে পারেন, এইভাবে মধ্যে পিএইচপি সোর্স প্রনয়ন যেমন Zend ইঞ্জিন একটি হিসাবে কাজ করে ব্যাখ্যাকারী


2
" এটি, এক্সিকিউটেবল কোড সিপিইউ এর স্থানীয় ভাষায় নির্দিষ্ট করা হয় " .. এক্সিকিউটেবল কোড সিপিইউ এর মাতৃভাষায় নির্দিষ্ট করা হয় না তবে বাইনারি ফর্ম্যাটে, সিপিইউর মাতৃভাষা কিছু হতে পারে এবং যখন সফ্টওয়্যার বাইনারি না আসে এটি এর জন্য সিপিইউ বা সেই সিপিইউ .. একটি সম্পূর্ণ সংকলিত এবং সম্পাদনযোগ্য কোড বাইনারি বিন্যাসে হবে ..
হাগারওয়াল

10

এটি অর্থহীন প্রশ্ন। পিএইচপি, জিসিসির মতো ইয়্যাক (বাইসন) ব্যবহার করে। ইয়্যাক একটি "সংকলক সংকলক"। ইয়াকের আউটপুট একটি সংকলক। একটি সংকলকের আউটপুট "সংকলিত" হয়। পিএইচপি ইয়্যাকের আউটপুট দ্বারা পার্স করা হয়। সুতরাং এটি সংজ্ঞা দ্বারা সংকলিত।

যদি এটি সন্তুষ্ট না হয় তবে নিম্নলিখিতগুলি বিবেচনা করুন। পিএইচপি (বাইনারি) এবং জিসিসি উভয়ই আপনার উত্স কোডটি পড়ে এবং একটি বিমূর্ত সিনট্যাক্স ট্রি উত্পাদন করে। সংস্করণ 4 এবং 5 এর অধীনে, পিএইচপি তারপরে প্রোগ্রামটিকে বাইটকোডে (সংকলনের পদক্ষেপ) অনুবাদ করতে গাছের পদচারণা করে। ভ্যালকান লজিক ডাম্পারটি ব্যবহার করে আপনি বাইকোডটি অপকডগুলিতে অনুবাদ করেছেন (যা সমাবেশের সাথে সমান) । শেষ অবধি, পিএইচপি (বিশেষত জেন্ড ইঞ্জিন) বাইকোডকে ব্যাখ্যা করে। জিসিসি, তুলনায়, গাছটি হাঁটা এবং সমাবেশ আউটপুট; প্রক্রিয়াটি শেষ করতে এটি এসেম্বলার এবং লিকারগুলি চালাতে পারে। একটি দ্বারা পরিচালিত একটি প্রোগ্রাম কল করা "ব্যাখ্যা করা" এবং অন্য প্রোগ্রাম দ্বারা পরিচালিত অন্য "সংকলিত" অর্থহীন। সর্বোপরি, উভয়ই প্রোগ্রাম দুটি "সংকলক" এর মাধ্যমে পরিচালিত হয়।

পরিবর্তে আপনি যে প্রশ্নটি করতে চান তা আপনার জিজ্ঞাসা করা উচিত। ("পিএইচপি প্রতিটি অনুরোধের জন্য আমার উত্স কোডটি পুনরায় সংশোধন করায় আমি কি পারফরম্যান্স জরিমানা প্রদান করব?" ইত্যাদি)


5
একটি উত্স কোড টোকেনাইজিং সংকলন হয় না। এমনকি ভিবিএস স্ক্রিপ্টকে আপনার সংজ্ঞা সহ সংকলিত ভাষা হিসাবে বিবেচনা করা যেতে পারে।
সেদাত কাপানোগলু

5
আমি এটি নিয়ে জারকওয়েতে আছি, যদিও এটি ওপির প্রশ্নের সত্যই উত্তর দেয় না। প্রত্যেকটি বিভাগকে প্রতিটি বিভাগে পরিষ্কারভাবে স্থাপন করা হয়েছে এমন ভাষার একটি শ্রেনী তৈরি করার জন্য এটি লোভনীয়। কিন্তু বাস্তবতা এতটা ঝরঝরে নয়। প্রায় প্রতিটি ভাষাই বৈশিষ্ট্যের মিশ্রণ। এছাড়াও, আপনি যখন এটিকে সরাসরি নামান, এমনকি দেশীয় মেশিন কোডটি প্রসেসরের দ্বারা "ব্যাখ্যা করা" হয়।
ব্যারি ব্রাউন 22

4
আপনার উচ্চ স্তর কথন সঠিক, এই হল একটি অর্থহীন প্রশ্ন। আপনার যুক্তি অবশ্য খুব সহায়ক নয়, আপনি যা করেছেন তা अस्पष्ट সংজ্ঞা গ্রহণ করেছে এবং এগুলিকে চূড়ান্ত করে নিয়ে গেছে। সংকলন হ'ল উত্স কোডে উত্সের রূপান্তর। হ্যাঁ আপনি উত্সকে একটি কংক্রিট / বিমূর্ত সিনট্যাক্স ট্রি একটি সংকলন হিসাবে বিবেচনা করতে পারেন, তবে এটি বেশিরভাগ লোকের অর্থ কি তা নয়? নির্বিশেষে, এটি অর্থহীন প্রশ্ন কারণ কোনও ভাষা অন্তর্ভুক্তভাবে সংকলিত বা ব্যাখ্যা করা হয় না , কোনও ভাষার বর্ণনাকে সংকলিত বা ব্যাখ্যা করা হয়।
ফালাইনা

6
লোকটি শিক্ষানবিস যে এটি পর্যবেক্ষণ করা যাক না। এটি আমাকে প্রশ্নের ব্যাখ্যা করে তোলে "জেন্ড বাস্তবায়ন পিএইচপি উত্স থেকে দেশীয় কোড উত্পাদন করে?" আমার উত্তর দেখুন। আমি মনে করি যেভাবে প্রশ্ন জিজ্ঞাসা করা হয়েছে সে সম্পর্কে আপনি খুব কঠোর হন। আপনি জানেন, আমরা সাহায্য করার চেষ্টা করছি, কিছু নবজাতককে বাজে না।
সেদাত কাপানোগলু

3
আমি সেদাতের সাথে পুরোপুরি একমত। আপনি
জিজ্ঞাসীর

10

আমি জানি এই প্রশ্নটি পুরানো তবে এটি সমস্ত জায়গার সাথে সংযুক্ত এবং আমি মনে করি যে এখানে সমস্ত উত্তর ভুল (সম্ভবত তারা পুরানো বলে)।

নেই কোন একটি ব্যাখ্যা ভাষা বা একটি কম্পাইল ভাষা যেমন জিনিস। যে কোনও প্রোগ্রামিং ভাষার ব্যাখ্যা এবং / বা সংকলন করা যায়।

প্রথমত কোনও ভাষা হ'ল নিয়মের একটি সেট, সুতরাং আমরা যখন সংকলনের কথা বলি তখন আমরা সেই ভাষার নির্দিষ্ট প্রয়োগগুলি উল্লেখ করি।

উদাহরণস্বরূপ, এইচএইচভিএম হ'ল পিএইচপি বাস্তবায়ন। কোডটি ইন্টারমিডিয়েট হিপহপ বাইটকোডে রূপান্তর করতে এবং তারপরে মেশিন কোডে অনুবাদ করার জন্য এটি জেআইটি সংকলন ব্যবহার করে। এটি কি সংকলিত বলা যথেষ্ট? কিছু জাভা বাস্তবায়ন (সমস্ত নয়) এছাড়াও জেআইটি ব্যবহার করে। গুগলের ভি 8 এছাড়াও জেআইটি ব্যবহার করে।

সংকলিত বনাম ব্যাখ্যার পুরানো সংজ্ঞাটি ব্যবহার করা আজকাল বোঝা যায় না।

"পিএইচপি সংকলিত হয়?" সংবেদনশীল প্রশ্ন হ'ল যে কোনও সংকলিত ভাষা বনাম একটি অনুবাদিত ভাষার মধ্যে কোন স্পষ্ট এবং সম্মত ডিলিমিটর নেই।

এগুলিকে সীমিত করার একটি সম্ভাব্য উপায় হ'ল (আমি এই দ্বিবিজ্ঞানের কোনও অর্থ পাই না):

সংকলিত ভাষাগুলি পূর্বে সময় সংকলন (সি, সি ++) ব্যবহার করে;

দোহিত ভাষাগুলি জাস্ট ইন টাইম সংকলন বা মোটেও কোনও সংকলন (পাইথন, রুবি, পিএইচপি, জাভা) ব্যবহার করে।


যদিও জাভা বেশিরভাগ ক্ষেত্রে সময় সংকলনের আগে ব্যবহার করে না? আমি মোটামুটি নতুন জাভা বিকাশকারী এবং আমরা রানটাইমের আগে সাধারণত আমাদের কোডপথ সংকলন করি।
aCarella

@ এ ক্যারেলা in most cases, হ্যাঁ সব ক্ষেত্রে, না। সুতরাং আপনি এমন একটি লাইন আঁকতে পারবেন না যা শব্দার্থগতভাবে তাৎপর্যপূর্ণ এবং সম্মত।
ক্লাদিউ ক্রিঙ্গা

2

কমপক্ষে কোডটি যতটা সম্ভব এটি সংকলন করতে পারে না (বা আমার উচিত অপ্টিমাইজ করা উচিত)।

এই কোড ...

for($i=0;$i<100000000;$i++);
echo $i;

... প্রতিটি সময় প্রোগ্রামটি চালানোর সময় সমানভাবে বিলম্বিত করে।

এটি সনাক্ত করতে পারত যে এটি এমন একটি গণনা যা কেবলমাত্র প্রথমবার করা দরকার।


এখন আমাদের কাছে জেনারেটর নামক একটি বিকল্প রয়েছে।
অঙ্কিত বিশ্বকর্মা

1

গৃহীত উত্তরটি সম্পূর্ণরূপে মিথ্যা। পিএইচপি সংকলিত হয়। গল্পের শেষে. সম্ভবত নেটিভ নির্দেশাবলীতে নয় তবে ব্যাখ্যা করা বাইটকোডে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.