কীভাবে জিসিসি এবং জি ++ বুটস্ট্র্যাপযুক্ত?


185

এই অল্প সময়ের জন্য আমাকে bugging করা হয়েছে. জিসিসি এবং জি ++ কীভাবে সেগুলি সংকলন করে?

আমি অনুমান করছি যে প্রতিটি সংশোধন পূর্ববর্তী নির্মিত পুনর্বিবেচনার সাথে সংকলিত হয়। এটা কি সত্য? এবং যদি এটি হয় তবে এর অর্থ কি প্রাচীনতম জি ++ এবং জিসিসি সংস্করণগুলি সমাবেশে লেখা হয়েছিল?


13
প্রতিটি পুনর্বিবেচনা অবশেষে নিজেই সংকলিত হতে পারে। :)
মার্টিন হেনিংস

4
এটি পড়ার জন্য আকর্ষণীয় আপনি যদি প্রথম কম্পাইলারগুলি কীভাবে এসেছিলেন তা দেখতে চান কিনা।
পারকভস্কি

1
@ পারকোভস্কি লিঙ্কটি কি মারা গেছে?
নুবাক

লিংক শেষবার জুন 04, 2016 এ দেখা হয়েছে: web.archive.org/web/20160604035203/homepage.ntlworld.com/…
আকরাফ

উত্তর:


175

জিসিসির প্রাচীনতম সংস্করণটি অন্য সি সংকলক ব্যবহার করে সংকলিত হয়েছিল, যেহেতু এটি লেখার সময় অন্যান্য ছিল। প্রথমবারের প্রথম সি সংকলক (সিএ। 1973, আইআইআরসি) হয় পিডিপি -11 এসেম্বলিতে বা বি প্রোগ্রামিং ভাষায় এর আগে প্রয়োগ করা হয়েছিল , তবে যে কোনও ক্ষেত্রে বি সংকলকটি সমাবেশে লেখা হয়েছিল।একইভাবে, প্রথম প্রথম সি ++ সংকলক (সিপিআর / সিফ্রন্ট , 1979-1983) সম্ভবত প্রথমে সিতে প্রয়োগ করা হয়েছিল, তারপরে সি ++ এ পুনরায় লিখেছিলেন।

আপনি যখন জিসিসি বা অন্য কোনও স্ব-হোস্টিং সংকলক সংকলন করেন, তখন বিল্ডিংয়ের সম্পূর্ণ ক্রমটি হ'ল:

  1. বিদ্যমান সি সংকলক সহ জিসিসির নতুন সংস্করণ তৈরি করুন
  2. আপনি স্রেফ তৈরি করেছেন এমনটি দিয়ে আবার জিসিসির নতুন সংস্করণ তৈরি করুন
  3. (alচ্ছিক) যাচাইকরণের জন্য পদক্ষেপ 2 পুনরাবৃত্তি করুন।

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

সম্পাদনা : ড্রউ ডোরম্যান মন্তব্যগুলিতে সি ++ এর প্রাথমিকতম বাস্তবায়ন সম্পর্কে বার্জন স্ট্রোস্ট্রপের বিবরণে ইঙ্গিত করেছেন । এটি সি ++ তে প্রয়োগ করা হয়েছিল তবে স্ট্রস্ট্রুপ সি ++ থেকে সিতে "প্রিপ্রোসেসর" বলে যা অনুবাদ করেছেন; তার সংজ্ঞা অনুসারে একটি পূর্ণ সংকলক নয়, তবে সি ++ সি-তে বুটস্ট্র্যাপড ছিল


19
বুটস্ট্র্যাপ বিল্ড প্রক্রিয়াটির 3-পদক্ষেপের সংস্করণটি যাচাইকরণের জন্য প্রকৃতপক্ষে: সংকলক নিজেই এটির নিজের পরীক্ষার কেস হিসাবে ব্যবহৃত হয়। [অন্যান্য] সাথে সংকলিত জিসিসির একই ফলাফল (অভিন্ন বাইনারি, ছাড় দেওয়া ম্যাক্রোগুলির মতো __DATE__এবং একই সংকলকের __TIME__অনুরোধের মধ্যেও পৃথক হওয়া) উত্পন্ন করা উচিত - যেমন জিসিসি [অন্যান্য অন্যান্য] সাথে সংকলিত] - যদি তা না হয় তবে এটি একটি বাগ, এবং 3-পর্যায়ের বুটস্ট্র্যাপ বিল্ডটি এটির জন্য ডিজাইন করা হয়েছে।
pmdj

19
@ এমপিজর্ডান: "যদি না হয় তবে এটি একটি বাগ" বা সম্ভবত কমই প্রবর্তিত হওয়ার প্রক্রিয়ায় একটি বোকা পিছনে ("বিশ্বাসের উপর প্রতিচ্ছবি")।
স্টিভ জেসোপ

12
@ সালস্ক: এটি সত্য নয়। পদক্ষেপ 2 এর বাইনারি আউটপুট অবশ্যই পদক্ষেপ 3 এর বাইনারি আউটপুটের অনুরূপ হওয়া উচিত, অন্যথায় কোথাও একটি বাগ রয়েছে। কারণটি যেমন সন্ধ্যা জর্ডান বলেছে: নিউকম্পিলার 1 এবং নিউকম্পিলার 2 হ'ল প্রোগ্রামগুলি অভিন্ন উত্স (নিউকম্পিলার এর সাথে)। তাদের অভিন্ন ইনপুট দেওয়া হয় (নিউকম্পিলারের জন্য উত্স)। অতএব তারা নিজেরাই যে সংকলকটি সংকলিত হয়েছিল তা নির্বিশেষে তারা অভিন্ন আউটপুট তৈরি করবে (এই ক্ষেত্রে, নিউ কমপ্লেয়ার 1 ওল্ড কমপ্লেয়ার দিয়ে সংকলিত হয়েছিল, এবং নিউকম্পিলার 2 নিউকম্পিলার 1 দিয়ে সংকলিত হয়েছিল)। অর্থাৎ, নিউ কমপ্লেয়ার 2 এবং নিউ কমপ্লেয়ার 3 বাইনারি অভিন্ন।
স্টিভ জেসোপ

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

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