সংকলক এবং একত্রিতকারীর মধ্যে কোন বাস্তব পার্থক্য আছে?


15

দুজনের মধ্যে কি কোনও পার্থক্য আছে? অনুযায়ী Ullman এর বই , কম্পাইলার অন্য (সাধারণত নিম্ন স্তরের) ভাষা থেকে এক ভাষা রূপান্তর, এবং তাই একটি প্রতীকী ভাষান্তর করে। দু'জন কীভাবে আলাদা?


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

সমস্ত সমাবেশকারীরা (সাধারণ) সংকলক, যেহেতু তারা এক ভাষাতে অন্য ভাষায় রূপান্তর করে। সমস্ত সংকলক সমাবেশকারী নয় are
ব্যবহারকারী 253751

উত্তর:


16

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


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

3
আমি আশঙ্কা করছি আপনি এখানে "এক উপায়" এর অর্থ ভুল বুঝেছেন। এর মানে একটি সমাবেশ কোড দেওয়া যে , একটি একক অনুবাদ টি ( ) এর একটি মেশিন কোড মধ্যে। একজনটি(একজন)একজন
যুবাল ফিল্মাস

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

আমি এটি এখানে পোস্ট করেছি cs.stackexchange.com/questions/98854/…
টিম

মধ্যবর্তী ভাষা সাধারণত একটি ভাষা যা মেশিন স্বাধীন machine
যুবাল ফিল্মাস

11

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

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

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

পার্থক্যটি আরও স্পষ্ট করে তোলে নরমন রামসির কিছু কাজ দ্বারা, বিশেষত তাঁর সি - বহনযোগ্য সমাবেশের ভাষা। (প্রাসঙ্গিক কাগজটি হ'ল র‌্যামসে এবং পাইটন জোন্স, "একক আন্তঃ মধ্যবর্তী ভাষা যা ব্যতিক্রমগুলির একাধিক বাস্তবায়নকে সমর্থন করে", প্রোগ। ল্যাং। ইমপ্লিটি এবং ডিএসজিএন (পিএলডিআই -21): ২৮৫-২৯৮, 2000। ) এবং অবশেষে, সেখানে একটি হল টাইপ সমাবেশ ভাষা ডেভিড ওয়াকার ও গ্রেগ Morrisett থেকে একটি প্রতীকী ভাষান্তর মেমরি নিরাপত্তা নিশ্চিত করতে পারে না সঙ্গে।


0

এখানে সরলিকৃত উত্তর কিছুটা, বাস্তবতা আরও জটিল। আমি আশা করি যে একজন এসেম্ব্লার (এ) এবং একটি সংকলক (সি) এর মধ্যে অন্যান্য জিনিসের মধ্যে পার্থক্য থাকবে:

  1. সোর্স কোডের একটি লাইন সরাসরি একটি সিপিইউ অপকোড (এ) বা না (সি) এর সাথে সম্পর্কিত
  2. প্রকৃত সিপিইউ (এ) বা মেশিন ইন্ডিপেন্ডেন্ট (সি) এর উপর অত্যন্ত নির্ভরশীল

আমরা সমাবেশ ভাষা "নিম্ন স্তরের" এবং উত্স ভাষা সংকলক "উচ্চ স্তরের" বোঝে (এটি স্থূল সরলীকরণ, তবে এখনও) বলে অভিহিত করি।

সমাবেশ ভাষায় উদাহরণস্বরূপ আপনি এই বলে একটি অ্যাড অপারেশন করতে পারেন:

  • একটি, খ যোগ করুন (একটি নির্দিষ্ট সিপিইউ জন্য)
  • আর 5, আর 6 যুক্ত করুন (আলাদা সিপিইউর জন্য)
  • (A5), D2 যুক্ত করুন (একটি পৃথক সিপিইউর জন্য)

উচ্চ স্তরের ভাষায় আপনি লিখতে পারেন:

  • x = y + z;

এবং এর ফলে একটি পরিস্থিতিতে বা শত শত নির্দেশাবলীর বিভিন্ন অবস্থার উপর নির্ভর করে ফলাফল তৈরি হতে পারে, সিপিইউ যা সংকলক নির্দেশাবলী তৈরি করে তা হ'ল।

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

একটি সংকলক আজ প্রায়শই বিভিন্ন ধাপে গঠিত। এগুলিকে ফ্রন্টএন্ড / ব্যাকএন্ড বা মৌমাছির নামকরণ করা যেতে পারে যা অন্যান্য জিনিস বলে। আমি সাধারণত তাদের চারটি পর্যায় হিসাবে দেখি:

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

ভাল সংকলক লেখার একটি অত্যন্ত দক্ষ পেশা - একটি খেলনা ভাষার সংকলক তৈরি একটি বিকেলে একটি অ্যামেটুয়ার (বা ভাল, কিছুটা দীর্ঘ) দ্বারা করা যেতে পারে।

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