সংকলিত এবং ব্যাখ্যা করা ভাষার মধ্যে পার্থক্য কী?


118

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

উত্তর:


165

সংকলিত এবং ব্যাখ্যা করা ভাষার মধ্যে পার্থক্য কী?

পার্থক্য না ভাষায়; এটি বাস্তবায়ন হয়

এটি আমার সিস্টেমের বাইরে চলে আসার পরে, একটি উত্তর এখানে দেওয়া হয়েছে:

  • সংকলিত প্রয়োগে, আসল প্রোগ্রামটি দেশীয় মেশিনের নির্দেশিকায় অনুবাদ করা হয়, যা সরাসরি হার্ডওয়্যার দ্বারা সম্পাদিত হয়।

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

    • ভার্চুয়াল মেশিনের বাইনারি নির্দেশাবলী, প্রায়শই বাইকোড নামে পরিচিত , যেমনটি লুয়া, পাইথন, রুবি, স্মলটালক এবং অন্যান্য অনেক সিস্টেমে করা হয় (১৯ the০ এর দশকে ইউসিএসডি পি-সিস্টেম এবং ইউসিএসডি পাস্কাল দ্বারা পদ্ধতিটি জনপ্রিয় হয়েছিল)

    • মূল প্রোগ্রামের গাছের মতো উপস্থাপনা, যেমন একটি অ্যাবস্ট্রাক্ট-সিনট্যাক্স ট্রি, যেমন অনেকগুলি প্রোটোটাইপ বা শিক্ষামূলক দোভাষীদের জন্য করা হয়

    • TCR এর অনুরূপ উত্স প্রোগ্রামটির একটি টোকেনাইজড উপস্থাপনা

    • উত্স প্রোগ্রামের চরিত্রগুলি, যেমনটি এমআইএনটি এবং ট্র্যাকে হয়েছিল

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


7
স্যার, আমার নিম্নলিখিত প্রশ্নগুলি রয়েছে 1. কোন ভাষায় "" অন্য কিছু "লেখা আছে? ২. এবং জাভাস্ক্রিপ্টের প্রসঙ্গে, ব্রাউজার থেকে ব্রাউজারে কি "অন্য কিছু" পরিবর্তিত হয়? ৩. বলুন, আমার স্ক্রিপ্ট গুগল ক্রোম এবং ইন্টারনেট এক্সপ্লোরারে চলছে, এটি উভয় ব্রাউজারেই একই ব্যাখ্যা করা যায়?
জাভাহোপার

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

58

এই পার্থক্যটি প্রদর্শনের জন্য জাভা এবং জাভাস্ক্রিপ্ট মোটামুটি খারাপ উদাহরণ , কারণ উভয়ই বর্ণিত ভাষা । জাভা (ব্যাখ্যা করা) এবং সি (বা সি ++) (সংকলিত) এর চেয়ে ভাল উদাহরণ হতে পারে।

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

মূলত, সংকলিত কোডটি সরাসরি কম্পিউটারের সিপিইউ দ্বারা কার্যকর করা যায়। অর্থাৎ এক্সিকিউটেবল কোড সিপিইউর "নেটিভ" ভাষা ( সমাবেশ ভাষা ) তে নির্দিষ্ট করা আছে।

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

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


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

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

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

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

7
@ স্টাকেক্স - আসলে জাভা বাইটোকোডগুলি সাধারণত একটি জেআইটি সংকলক দ্বারা স্থানীয় কোডে সংকলিত হয়। খাঁটি দোভাষী দের আচরণের একমাত্র উপায় হ'ল জেভিএম চালু হওয়ার সময় স্পষ্টভাবে জেআইটি সংকলকটি স্যুইচ করা।
স্টিফেন সি

15

সংকলক বনাম ইন্টারপ্রিটার ল্যাঙ্গুয়েজের মধ্যে বেসিক পার্থক্য এখানে।

সংকলক ভাষা

  • পুরো প্রোগ্রামটিকে একক ইনপুট হিসাবে নেয় এবং এটিকে ফাইলের মধ্যে সংরক্ষণ করা অবজেক্ট কোডে রূপান্তরিত করে।
  • মধ্যবর্তী অবজেক্ট কোড উত্পন্ন হয়
  • যেমন: সি, সি ++
  • সংকলিত প্রোগ্রামগুলি দ্রুত সঞ্চালিত হয় কারণ নির্বাহের আগে সংকলন সম্পন্ন হয়।
  • অবজেক্ট কোড তৈরির কারণে মেমোরির প্রয়োজনীয়তা বেশি।
  • পুরো প্রোগ্রামটি সংকলিত হওয়ার পরে ত্রুটি প্রদর্শিত হয়
  • উত্স কোড --- সংকলক --- মেশিন কোড --- আউটপুট

দোভাষী ভাষা:

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

5

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

আপনার যদি আরও তথ্যের প্রয়োজন হয় তবে "সংকলক এবং দোভাষীর মধ্যে পার্থক্য" কেবল গুগলের জন্য।


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

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

2

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

তবে বেশিরভাগ ভাষা মূলত একরকম বা অন্য রূপে ব্যবহৃত হয় এবং হ্যাঁ, জাভা মূলত সর্বদা সংকলিত হয়, যখন জাভাস্ক্রিপ্ট মূলত সর্বদা ব্যাখ্যা করা হয়।

সোর্স কোডটি কম্পাইল করার জন্য এটিতে এমন একটি প্রোগ্রাম চালানো হয় যা বাইনারি, এক্সিকিউটেবল ফাইল তৈরি করে, যখন চালানো হয়, উত্স অনুসারে আচরণ করে has উদাহরণস্বরূপ, জাভ্যাক মানব-পঠনযোগ্য। জাভা ফাইলগুলি মেশিন-পঠনযোগ্য। ক্লাস ফাইলগুলিতে সংকলন করে।

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


জাভা প্রথমে বাইটকোডে অনুবাদ করে এবং কেবলমাত্র জেভিএম চালানোর সময় এটিকে মেশিন কোডে রূপান্তরিত করে; এটি সংকলিত এবং ব্যাখ্যা করা হয়নি তা কি সঠিক?
সিসির

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

2

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


0

অন্যরা যেমন বলেছে, সংকলিত এবং ব্যাখ্যা করা একটি প্রোগ্রামিং ভাষার প্রয়োগের জন্য নির্দিষ্ট ; তারা ভাষা অন্তর্নিহিত হয় না । উদাহরণস্বরূপ, সি দোভাষী আছে।

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

প্রথমত, আমাদের অবশ্যই অস্পষ্টতা ব্যাখ্যা এবং সংকলক ছাড়াই সংজ্ঞা দিতে হবে:

একটি অনুবাদক ভাষার জন্য এক্স একটি প্রোগ্রাম (বা একটি মেশিন, বা শুধু সাধারণ প্রক্রিয়া কোন ধরণের) যে কোনও প্রোগ্রাম executes হয় পি ভাষায় লেখা এক্স যেমন যে এটিকে প্রভাব সঞ্চালন করে এবং হিসেবে স্পেসিফিকেশন দ্বারা নির্ধারিত ফলাফল মূল্যায়ন এক্স

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

লক্ষ্য করুন যে প্রোগ্রামার দৃষ্টিকোণ থেকে, সিপিইউ হ'ল তাদের নিজ নিজ মেশিন ভাষার জন্য মেশিন দোভাষী।

এখন, আমরা প্রোগ্রামিং ভাষাগুলির সর্বাধিক সাধারণ প্রয়োগের উপর নির্ভর করে 3 টি বিভাগে একটি অস্থায়ী শ্রেণিবিন্যাস করতে পারি:

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

কখনও কখনও, নরম এবং কঠোর সংকলিত ভাষাগুলি কেবল সংকলিত করার জন্য রেফার করা হয়, সুতরাং সি #, জাভা, সি, সি ++ সংকলিত হতে পারে বলে মনে হয়।

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

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