পাইথনের কেন একটি সংকলক এবং একজন অনুবাদক উভয়েরই প্রয়োজন?


9

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

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


আপনি ভুল হতে পারে। পাইথনের পরিবর্তে লুয়া ব্যবহার করা হলে আপনি ভুল হবেন।
বেসিল স্টারিনকিভিচ

উত্তর:


13

যতদূর আমি জানি, আপনি প্রতিটি মেশিনে উইন্ডোতে বা লিনাক্সে কোনও সংশোধন ছাড়াই পাইথন প্রোগ্রাম (বাইটোকডে সংকলিত) চালাতে পারবেন না।

আপনি ভুল। পাইথন বাইটকোডটি ক্রস প্ল্যাটফর্ম। দেখুন পাইথন বাইটকোড সংস্করণ নির্ভর আছে কি? এটি কি প্ল্যাটফর্ম নির্ভর? স্ট্যাক ওভারফ্লো যাইহোক, এটি সংস্করণ জুড়ে উপযুক্ত নয়। পাইথন 2.6 পাইথন 2.5 ফাইল চালাতে পারে না। সুতরাং ক্রস প্ল্যাটফর্মের সময়, এটি সাধারণত বিতরণের ফর্ম্যাট হিসাবে কার্যকর হয় না।

তবে পাইথনের কেন একটি সংকলক এবং একজন অনুবাদক উভয়েরই প্রয়োজন?

দ্রুততা. কঠোর ব্যাখ্যা ধীর। কার্যত প্রতিটি "বর্ণিত" ভাষা উত্স কোডটি কিছুটা অভ্যন্তরীণ উপস্থাপনের মধ্যে সংকলন করে যাতে কোডটি বারবার পার্স করতে না হয়। পাইথনের ক্ষেত্রে এটি এই অভ্যন্তরীণ উপস্থাপনাটিকে ডিস্কে সংরক্ষণ করে যাতে এটি পরের বার কোডের প্রয়োজন হলে পার্সিং / সংকলন প্রক্রিয়াটি এড়িয়ে যেতে পারে।


7

আমি এই বিষয়টি বুঝতে পারি যে জাভাতে একটি সংকলক এবং একজন অনুবাদক উভয়েরই দরকার।

এটা হয় না। জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশনে এমন কোনও কিছুই নেই যা বলে যে জাভাতে একটি সংকলক থাকা দরকার। জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশনে এমন কিছুই নেই যা বলে যে জাভাতে একজন দোভাষী দরকার needs

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

আসলে হয় জাভার বাস্তবায়নের যা মেশিন কোড সরাসরি কম্পাইল, জাভার জন্য গনুহ কম্পাইলার যেমন gcj। প্রযুক্তিগতভাবে বলতে গেলে, ওরাকল ওপেনজেডি কে জাভা সংকলকটি মেশিন কোডেও বিশেষত জেভিএম বাইট কোড সংকলন করে। এখন, আপনি বলতে পারেন, এক মিনিট অপেক্ষা করুন, এটি মেশিন কোড নয়! তবে, x86 মেশিন কোডের জন্য সফ্টওয়্যার ইন্টারপ্রেটার রয়েছে, এবং এমন হার্ডওয়্যার সিপিইউ রয়েছে যা জেভিএম বাইট কোড চালায়, তাই কোনটি "দেশীয়" করে এবং অন্যটি কী করে না?

নোট করুন যে জেভিএম বাইট কোডটি জাভা ল্যাঙ্গুয়েজ স্পেসিফিকেশনের বাইরে বসে রয়েছে ঠিক যেমন x86 মেশিন কোড রয়েছে।

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

আবার, এটি নিখুঁতভাবে প্রয়োগকারীর উপর নির্ভর করে।

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

তবে পাইথনের কেন একটি সংকলক এবং একজন অনুবাদক উভয়েরই প্রয়োজন?

আবার, এটা না। পাইথন ল্যাঙ্গুয়েজ স্পেসিফিকেশনে এমন কিছুই নেই যা বলে যে পাইথনের একটি সংকলক থাকা দরকার। পাইথন ল্যাঙ্গুয়েজ স্পেসিফিকেশনে এমন কোনও কিছুই নেই যা বলে যে পাইথনের একটি দোভাষী নেওয়া দরকার।

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

কেন শুধু ব্যাখ্যার ব্যবহার করবেন না?

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

আমি যতদূর জানি, আপনি কোনও উইন্ডোজ বা লিনাক্স মেশিনে কোনও পরিবর্তন ছাড়াই পাইথন প্রোগ্রাম (বাইটোকডে সংকলিত) চালাতে পারবেন না।

হ্যা, তুমি পারো. সিপিথন ভিএম উইন্ডোজ এবং লিনাক্স উভয়ের জন্যই পাইপাই, জাইথন ​​এবং আয়রন পাইথন হিসাবে উপলব্ধ।


ভাষার সংকলন বা ব্যাখ্যা করতে হবে না don't ভাষা ঠিক আছে । আসলে কোনও দোভাষী বা সংকলক না থাকলে কোনও ভাষারই পুরোপুরি অস্তিত্ব থাকতে পারে ! উদাহরণস্বরূপ, কনরাড জুসে প্ল্যানকাল্কাল যা তিনি 1930 এর দশকে ডিজাইন করেছিলেন তা তাঁর জীবদ্দশায় কখনও কার্যকর হয়নি। আপনি এটিতে এখনও প্রোগ্রাম লিখতে পারেন, আপনি সেই প্রোগ্রামগুলি বিশ্লেষণ করতে পারেন, তাদের সম্পর্কে যুক্তি প্রদর্শন করতে পারেন, তাদের সম্পর্কে বৈশিষ্ট্য প্রমাণ করতে পারেন… আপনি কেবল এগুলি কার্যকর করতে পারেন না। (ভাল, আসলে, এমনকি এটিও ভুল: আপনি অবশ্যই এটি আপনার মাথায় বা কলম এবং কাগজ দিয়ে চালাতে পারেন))

এখন, ভাষার যে কোনও নির্দিষ্ট প্রয়োগকরণ সংকলক (বা একাধিক সংকলক), একটি দোভাষী বা কোনও সংমিশ্রণ ব্যবহার করতে পারে। তবে তা বাস্তবায়নের বৈশিষ্ট্য, ভাষা নয়। প্রতিটি ভাষা সংকলক সহ প্রয়োগ করা যেতে পারে, এবং প্রতিটি ভাষা একজন দোভাষী দ্বারা প্রয়োগ করা যেতে পারে।

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

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


3
প্রশ্নের উত্তর না দিয়ে পেডেন্টিক থাকার জন্য তাদের বেশিরভাগ সময় ব্যয় করা উত্তরগুলি আমাকে দুঃখ দেয়।
উইনস্টন ইওয়ার্ট

3

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

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

এই এবং অন্যান্য কারণগুলি বাইটকোড দোভাষীকে অন্য দোভাষীদের তুলনায় উল্লেখযোগ্যভাবে দ্রুত করার ষড়যন্ত্র করে।

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