সংকলিত বনাম সংকলিত: একটি দরকারী পার্থক্য?


29

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

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

আসলে, বেশিরভাগ বাস্তবায়ন একই বেসিক কৌশলে রূপান্তরিত হয়। সংকলকটি বাইকোড তৈরি করে যা একটি জেআইটির মাধ্যমে নেটিভ কোডে ব্যাখ্যা করা বা সংকলিত হয়। এটি সত্যই সংকলন এবং ব্যাখ্যার traditionalতিহ্যগত ধারণার মিশ্রণ।

এইভাবে আমি জিজ্ঞাসা করছি: ব্যাখ্যা করা বাস্তবায়ন এবং সংকলিত বাস্তবায়নের মধ্যে কি আজকাল কোনও কার্যকর পার্থক্য রয়েছে?


7
@ ডিড এমজি আপনি ভাবেন না তেমন নতুন নয়: সুনির্দিষ্ট সময়ের একটি সংক্ষিপ্ত ইতিহাস ...
ইয়ানিস

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

4
@ ডেড এমএমজি, আপনার অবশ্যই ভিএম মডেলটি "নতুন" হলে একটি দীর্ঘ সাদা দাড়ি রাখতে হবে। P-codeপ্রথম 1966 সালে চালু হয়েছিল। আইবিএম আইক্স 1986 সাল থেকে প্রায়।
এসকে-যুক্তি

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

3
@ এসকে-যুক্তিযুক্ত, আমি মনে করি আপনার মন্তব্যটি আরও উত্তম উত্তর তবে বাস্তবে যে কোনও উত্তর পোস্ট করা হয়েছে
উইনস্টন এওয়ার্ট

উত্তর:


23

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

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

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


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

2
ধন্যবাদ!! অনুবাদ করা "এক্সিকিউটেড" এর প্রতিশব্দ মাত্র এবং সমস্ত প্রোগ্রাম এইভাবেই চালিত হয়।
বাগান মাথা

9

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

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

কিছু ভাষা বাস্তবায়ন এই কৌশলগুলির চারপাশে নির্মিত হয়; তাদের লেখকগণ একটি গুরুত্বপূর্ণ লক্ষ্য হিসাবে সংকলন প্রত্যাখ্যান করেছেন, এবং বরং এই ধরণের নমনীয়তা আলিঙ্গন করেছেন।

সংকলক বুটস্ট্র্যাপিংয়ের কৌশল হিসাবে ব্যাখ্যা সর্বদা কার্যকর হবে। একটি দৃ concrete় উদাহরণের জন্য, CLISP দেখুন (কমন লিস্পের একটি জনপ্রিয় প্রয়োগ)। CLISP এর একটি সংকলক রয়েছে যা নিজেই লেখা থাকে। আপনি যখন CLISP তৈরি করেন, তখন সেই সংকলকটি প্রাথমিক বিল্ডিং পদক্ষেপগুলির সময় ব্যাখ্যা করা হয়। এটি নিজেই সংকলন করতে ব্যবহৃত হয় এবং তারপরে এটি একবার সংকলিত হয়ে গেলে সংকলিত সংকলকটি ব্যবহার করে সংকলন করা হয়।

ইন্টারপ্রেটার কার্নেল ব্যতীত আপনাকে এসবিসিএল যেমন কিছু বিদ্যমান লিস্প দিয়ে বুটস্ট্র্যাপ করতে হবে।

ব্যাখ্যার সাহায্যে, আপনি সমাবেশ ভাষা থেকে শুরু করে, পরম স্ক্র্যাচ থেকে একটি ভাষা বিকাশ করতে পারেন। বেসিক I / O এবং মূল রুটিনগুলি বিকাশ করুন, তারপরে একটি alভাল, স্টিল মেশিনের ভাষা লিখুন। একবার আপনি স্পষ্ট হয়ে গেলে, উচ্চ স্তরের ভাষায় লিখুন; মেশিন কোড কার্নেল মূল্যায়ন করে। আরও অনেক রুটিন সহ গ্রন্থাগারটি প্রসারিত করতে এবং একটি সংকলকও লিখতে এই সুবিধাটি ব্যবহার করুন। এই রুটিনগুলি এবং সংকলক নিজেই সংকলন করতে সংকলকটি ব্যবহার করুন।

ব্যাখ্যা: সংকলনের দিকে নিয়ে যাওয়ার পথে একটি গুরুত্বপূর্ণ পদক্ষেপ!


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

তত্ত্ব অনুসারে, দোভাষী প্রোগ্রামটির জন্য সোর্স কোড বা বাইটকোড সমন্বিত একটি EXE ফাইল উত্পন্ন করে যে কোনও "বর্ণিত" ভাষাটিকে "সংকলিত" রূপে তৈরি করা যেতে পারে। যদিও খুব দক্ষ হতে পারে না।
dan04

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

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

1

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


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

1
আসলে আমি নিশ্চিত যে পার্ল, ম্যাটল্যাব, ম্যাথেমেটিকারা সবাই বাইকোডে সংকলন করছে। আমি পাওয়ারস্ক্রিপ্টের সাথে পরিচিত নই, আপনি কি পাওয়ারশেল মানে? যদি তা হয়, তবে এটি সিএলআর ব্যবহার করে এবং তাই বাইকোড ব্যবহার করে।
উইনস্টন ইওয়ার্ট

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

2
বাইটকোড সংকলিত করে না does একটি বাইটকোড সংকলক হ'ল একটি প্রোগ্রাম যা উত্সটি নেয় এবং এটিকে বাইটোকোডে রূপান্তর করে। তাই বাইটকোডের সমস্ত ব্যবহারে অবশ্যই একটি বাইকোড সংকলক জড়িত। তবে বাইটকোডকেও ব্যাখ্যা করতে হবে (বা জেআইটিড)। সুতরাং বাইটকোড ব্যবহার করে যে কোনও কিছুই হ'ল ইন্টারপ্রেটার / সংকলক সংকর।
উইনস্টন ইওয়ার্ট

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

1

আমি মনে করি: একেবারে হ্যাঁ

আসলে, বেশিরভাগ বাস্তবায়ন একই বেসিক কৌশলে রূপান্তরিত হয়

সত্যই, সি ++ এর লক্ষ্যটি ডোমেনকে এমন কিছু উচ্চ স্তরের ধারণাটি সংকলন করা যায় যা সাধারণত দোভাষীদের হাতে দেওয়া হয়, তবে এটি সংখ্যালঘু পক্ষেই থাকে ...


2
ক্ল্যাং + এলএলভিএম সর্বাধিক জনপ্রিয় সংকলক সরঞ্জামচেন না হওয়া পর্যন্ত অপেক্ষা করুন।
এসকে-যুক্তি

@ এসকে-যুক্তি, নাম সত্ত্বেও, আমি বিশ্বাস করি যে ক্ল্যাং + এলএলভিএম স্থানীয় কোড তৈরি করে।
উইনস্টন ইওয়ার্ট

1
@ উইনস্টন ইওয়ার্ট, কেবলমাত্র যদি আপনি চান। আপনি এলএলভিএম আইআর স্তরে থামতে পারেন এবং এটির সাথে যা খুশি তা করতে পারেন - এটি ব্যাখ্যা করুন, এটি জেআইটি-সংকলন করুন, যেকোন উপায়ে এটি আপনার পছন্দমত পছন্দ করুন। আপনি এটি জাভাস্ক্রিপ্টে অনুবাদও
এসকে-লজিক

@ এসকে-যুক্তি, ঝরঝরে স্টাফ! জানেন না এলএলভিএম এটি করতে পারে।
উইনস্টন ইওয়ার্ট

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

-1

দরকারী পার্থক্য: ব্যাখ্যা করা প্রোগ্রামগুলি রানটাইমে ফাংশন যোগ বা পরিবর্তন করে তাদের সংশোধন করতে পারে।


8
ছাইপাঁশ. স্ব-পরিবর্তনকারী (মেশিন) কোডটি বইয়ের প্রাচীনতম কৌশল the তারপরে আবারও কেউ কেউ যুক্তি দেয় যে স্থানীয় কোডও শেষ পর্যন্ত সিলিকন (সিপিইউ) এ অনুবাদকারী দ্বারা অনুবাদ করা হয়। তবে আমরা যদি ধরে নিই যে, সমস্ত কোডটি ব্যাখ্যা করা হয়েছে এবং কোনও পার্থক্য নেই।

2
@ ডেলান ঠিক আছে আমি কেবল যুক্ত করব যে আধুনিক ভাষাগুলি গতিশীলভাবে নতুন ক্লাস তৈরি করে এবং গ্রন্থাগারগুলি লোড / আনলোড / (নেট হিসাবে উদাহরণস্বরূপ "NET) তৈরি করতে পারে
জালান

5
কমন লিস্প সংকলিত, তবে আপনি এখনও রানটাইমে ফাংশন সংজ্ঞাগুলি সহজেই প্রতিস্থাপন করতে পারেন।
এসকে-যুক্তি

এটি সত্যই আকর্ষণীয় এবং প্রয়োজনীয় (উদাহরণস্বরূপ প্রোলোগে) ব্যাখ্যার বৈশিষ্ট্য।
ক্যাপেলিক
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.