সংকলিত বনাম বর্ণিত ভাষা


284

আমি পার্থক্যটি আরও ভালভাবে বোঝার চেষ্টা করছি। আমি অনলাইনে অনেক ব্যাখ্যা পেয়েছি, তবে তারা ব্যবহারিক প্রভাবের চেয়ে বিমূর্ত বিভেদের দিকে ঝুঁকছে।

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


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

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

স্ট্যান্ডার্ড এমএল হ'ল আরেকটি ইন্টারেক্টিভ সংকলিত ভাষা; অন্তর্নির্মিত সংকলক বাস্তব দেশীয় মেশিন কোডও ইস্যু করে।
ডোনাল ফেলো


উত্তর:


459

একটি সংকলিত ভাষা হ'ল প্রোগ্রামটি একবার সংকলিত হয়ে লক্ষ্য মেশিনের নির্দেশে প্রকাশ করা হয়। উদাহরণস্বরূপ, আপনার উত্স কোডে একটি "+" অপারেশন মেশিন কোডে "ADD" নির্দেশিকায় সরাসরি অনুবাদ করা যেতে পারে।

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

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

আমি সম্পূর্ণরূপে সাধারণীকরণ করতে যাচ্ছি (পিউরিস্টরা আমাকে ক্ষমা করুন!) তবে মোটামুটি, এখানে সংকলিত ভাষার সুবিধা রয়েছে:

  • টার্গেট মেশিনের নেটিভ কোডটি সরাসরি ব্যবহার করে দ্রুততর পারফরম্যান্স
  • সংকলনের পর্যায়ে বেশ শক্তিশালী অপটিমাইজেশন প্রয়োগ করার সুযোগ

এবং এখানে বর্ণিত ভাষার সুবিধা রয়েছে:

  • কার্যকর করা সহজ (ভাল সংকলক লেখা খুব শক্ত !!)
  • সংকলন পর্যায়ে চালানোর দরকার নেই: কোডটি সরাসরি "উড়ে" চালানো যায়
  • গতিশীল ভাষার জন্য আরও সুবিধাজনক হতে পারে

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


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

2
@ ক্যারিম: জেআইটি সংকলক কেবল 1) এবং 2) একবার করে - তারপরে এটি পুরোপুরি দেশীয় কোড। দোভাষীকে 1) এবং 2) উভয়ই করতে হবে) যতবার কোড বলা হয় (যা অনেকগুলি, বহুবার হতে পারে ...)। তাই সময়ের সাথে সাথে জেআইটি সংকলক দীর্ঘ ব্যবধানে জয়ী হয়।
মাইকেরা

3
হ্যাঁ বাইটকোড সামগ্রিক প্রোগ্রাম কার্যকর করার সময় কোনও এক সময় মেশিন কোডে অনুবাদ করা হয় (প্রোগ্রামের প্রয়োগের আগে যেমন ছিল, তেমনি traditionalতিহ্যবাহী সংকলক হিসাবেও রয়েছে)। তবে প্রদত্ত কোডের একটি টুকরো সামগ্রিক প্রোগ্রাম কার্যকর করার সময় 10 মিলিয়ন + বার কার্যকর করা যেতে পারে। এটি (সম্ভবত) কেবলমাত্র বাইটোকড থেকে মেশিন কোডে একবার সংকলিত হয় । সুতরাং জেআইটি-র রানটাইম ওভারহেড ছোট, এবং দীর্ঘ-চলমান কর্মসূচীর জন্য এড়ানো যায়। জেআইটি সংকলক এর কাজ শেষ করার পরে আপনি কার্যকরভাবে খাঁটি মেশিন কোড চালাবেন।
মাইকেরা

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

2
@mmachenry- এটি একটি মিথ্যা দ্বিবিজ্ঞান নয়। "প্রোগ্রামিং ল্যাঙ্গুয়েজ" এর নকশা এবং বাস্তবায়ন উভয়ই অন্তর্ভুক্ত। যদিও একটি ইন তাত্ত্বিক অর্থে একটি প্রদত্ত ভাষা সংজ্ঞা উভয় কম্পাইল করা যায় এবং ব্যাখ্যা, মধ্যে বাস্তব জগতে অনুশীলন সেখানে বাস্তবায়ন যথেষ্ট পার্থক্য রয়েছে। কেউ নির্দিষ্ট ভাষা রচনা কীভাবে কার্যকরভাবে সংকলন করতে পারে তা এখনও কেউ সমাধান করেনি, উদাহরণস্বরূপ - এটি একটি মুক্ত গবেষণার সমস্যা।
মাইক্রা

99

একটি ভাষা নিজেই সংকলিত বা ব্যাখ্যা করা হয় না, কেবল একটি ভাষার নির্দিষ্ট প্রয়োগ হয়। জাভা একটি নিখুঁত উদাহরণ। এখানে একটি বাইকোড-ভিত্তিক প্ল্যাটফর্ম (জেভিএম), নেটিভ সংকলক (জিসিজে) এবং জাভা (বিএসএস) এর সুপারসেটের জন্য একটি ইন্টারপেটর রয়েছে। তাহলে এখন জাভা কি? বাইটকোড-সংকলিত, নেটিভ-সংকলিত বা ব্যাখ্যা করা?

সংকলনের পাশাপাশি ব্যাখ্যা করা অন্যান্য ভাষা হ'ল স্কেলা, হাস্কেল বা ওক্যামল। এই ভাষার প্রত্যেকটিরই ইন্টারেক্টিভ ইন্টারপ্রেটার রয়েছে, পাশাপাশি বাইট-কোড বা নেটিভ মেশিন কোডের সংকলক রয়েছে।

সুতরাং সাধারণত "সংকলিত" এবং "ব্যাখ্যা করা" দ্বারা ভাষাগুলি শ্রেণিবদ্ধকরণ খুব বেশি অর্থ দেয় না।


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

57

একটি পদ হিসাবে চিন্তা শুরু করুন: অতীত থেকে বিস্ফোরণ

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

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

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

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

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


1
ভাল - শেষ অনুচ্ছেদে দুর্দান্ত সংক্ষিপ্তসার - ধন্যবাদ!
ckib16

26

চরম এবং সহজ মামলা:

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

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

পথছাড়া হয়ে যাওয়ার সাথে, আমাকে বোঝাতে দিন যে জীবন আর সহজ নয়। এই ক্ষেত্রে,

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

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


23

Http://www.quora.com/What-is-the-differences-between-compiled- এবং- ব্যাখ্যা করা- প্রোগ্রামিং- ভাষাগুলি থেকে

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

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

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

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


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

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

10

সংকলিত উত্স কোডের সাহায্যে ব্যাখ্যা করা উত্স কোডের বৃহত্তম সুবিধা হ'ল পোর্টাবিলিটি

যদি আপনার উত্স কোডটি সংকলিত হয় তবে আপনার প্রতিটি প্রসেসর এবং / অথবা প্ল্যাটফর্মের জন্য একটি পৃথক নির্বাহযোগ্য সংকলন করতে হবে যা আপনি আপনার প্রোগ্রামটি চালাতে চান (যেমন উইন্ডোজ এক্স 86 এর জন্য একটি, উইন্ডোজ এক্স 64 এর জন্য একটি, লিনাক্স এক্স 64 এর জন্য একটি, এবং তাই) চালু). তদ্ব্যতীত, আপনার কোডটি পুরোপুরি মানের সাথে সঙ্গতিপূর্ণ না হয় এবং কোনও প্ল্যাটফর্ম-নির্দিষ্ট ফাংশন / লাইব্রেরি ব্যবহার না করে, আপনাকে আসলে একাধিক কোড বেস লিখতে এবং বজায় রাখতে হবে!

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

সংকলিত কোডের একটি সুবিধা হ'ল এটি শেষ ব্যবহারকারী থেকে উত্স কোডটি গোপন করে (যা বৌদ্ধিক সম্পত্তি হতে পারে ) কারণ আসল মানব-পঠনযোগ্য উত্স কোড মোতায়েনের পরিবর্তে আপনি একটি অস্পষ্ট বাইনারি এক্সিকিউটেবল ফাইল মোতায়েন করেন।


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

7

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

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

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

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


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

4

প্রথমত, একটি স্পষ্টতা, জাভা পুরোপুরি স্থির-সংকলিত এবং সি ++ এর সাথে সংযুক্ত নয়। এটি বাইটকোডে সংকলিত হয়, যার পরে জেভিএম ব্যাখ্যা করে। জেভিএম স্থানীয় মেশিনের ভাষায় কেবলমাত্র সময়ে সময়ে সংকলন করতে পারে, তবে এটি করতে হবে না।

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

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

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

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

আমি একমত নই যে সমস্ত ভাষাকে ইন্টারেক্টিভ করা যেতে পারে। সি এর মতো কিছু নির্দিষ্ট ভাষা মেশিন এবং পুরো লিঙ্ক কাঠামোর সাথে এতটাই বেঁধে দেওয়া হয় যে আপনি নিশ্চিত হন না যে আপনি একটি অর্থপূর্ণ পূর্ণ-পরিস্ফুটি ইন্টারেক্টিভ সংস্করণ তৈরি করতে পারবেন


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

@ লুনারিয়র্ন: আমি জিসিজে সম্পর্কে একমত নই। GCJ কেবল আপনাকে এক্সিকিউটেবল ভিত্তিক পরিবেশ দেয়। "সংকলিত অ্যাপ্লিকেশনগুলি জিসিজে রানটাইম, লাইবজিসিজেজের সাথে সংযুক্ত রয়েছে, যা মূল শ্রেণীর পাঠাগারগুলি সরবরাহ করে, একটি আবর্জনা সংগ্রহকারী এবং একটি বাইকোড দোভাষী"
উরি

2
জিসিজে নেটিভ মেশিন কোড তৈরি করে , এবং এম্বেডড ইন্টারপ্রেটার এবং বাইটোকড সহ কেবলমাত্র কার্যকরকরণযোগ্য পরিবেশ নয়। সংকলিত প্রোগ্রামটির ব্যাখ্যা না করে libgcj নেটিভ কোড থেকে জাভা বাইটকোডে কলগুলি সমর্থন করার জন্য একটি বাইটকোড ইন্টারপ্রেটার সরবরাহ করে। Libgcj যদি বাইকোড দোভাষী না দেয় তবে জিসিজে জাভা স্পেস মেনে চলবে না।
চন্দ্রাহীন 14

টুইটারে ঠিক আছে, আমি স্পষ্টির প্রশংসা করি এবং সংশোধন করি। আমরা প্রাথমিকভাবে জাভাটি উইন্ডোজের পরিবেশে ব্যবহার করি তাই কয়েক বছরে আমি gcj চেষ্টা করি নি।
উরি


2

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


1
অবশ্যই আপনি কোনও ব্যাখ্যাযুক্ত ভাষার জন্য একটি সংকলক তৈরি করতে পারেন, তবে সংকলিত মেশিন-কোড নিজেই রানটাইমের একটি আয়না।
আইডেন বেল

2

পাইথন বুক © 2015 কল্পনা করুন প্রকাশনা লিমিটেড, কেবলমাত্র পৃষ্ঠা 10 তে উল্লিখিত নিম্নলিখিত ইঙ্গিতটির দ্বারা এই পার্থক্যটিকে সহজভাবে ব্যাখ্যা করেছে:

পাইথনের মতো ব্যাখ্যামূলক ভাষা হ'ল এমন একটি যেখানে সোর্স কোডটি মেশিন কোডে রূপান্তরিত হয় এবং তারপরে প্রতিটি সময় প্রোগ্রামটি চালিত হলে কার্যকর করা হয়। এটি সি এর মতো একটি সংকলিত ভাষার থেকে পৃথক, যেখানে উত্স কোডটি কেবল একবার মেশিন কোডে রূপান্তরিত হয় - ফলস্বরূপ মেশিন কোডটি প্রতিটি সময় প্রোগ্রামটি চালিত হওয়ার পরে কার্যকর করা হয়।


1

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


0

সংক্ষিপ্ত (অ-নির্ভুল) সংজ্ঞা:

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

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

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

সংকলন এবং ব্যাখ্যার মধ্যে পার্থক্য কী?

বা আমার পরবর্তী ব্লগ পোস্ট:

https://orangejuiceliberationfront.com/the-difference-between-compiler-and-interpreter/

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