বুটস্ট্র্যাপিংয়ের জন্য এখনও বাইরের সমর্থন প্রয়োজন


97

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

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

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


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

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

উত্তর:


108

আসলে কি নিজস্ব ভাষায় একটি সংকলক লেখার কোনও উপায় আছে?

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

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

সর্বনিম্ন সম্ভাব্য স্তর (যা একটি আধুনিক মেশিনে মূলত একটি হেক্স সম্পাদক) থেকে একটি সংকলক বুটস্ট্র্যাপিং সম্পর্কে সত্যই একটি ভাল লেখার ব্যবস্থা রয়েছে, যার নাম কিছুই নেই থেকে একটি সাধারণ সংকলক বুটস্ট্র্যাপিং । এটি https://web.archive.org/web/20061108010907/http://www.rano.org/bcompiler.html এ পাওয়া যাবে ।


19

আপনি যে ব্যাখ্যাটি পড়েছেন তা সঠিক। সংকলকগুলিতে এটি নিয়ে আলোচনা রয়েছে : নীতি, কৌশল এবং সরঞ্জামগুলি (ড্রাগন বুক):

  • ভাষা Y তে X এর জন্য একটি সংকলক সি 1 লিখুন
  • এক্স এক্স ভাষার X এর জন্য সংকলক সি 2 লিখতে সংকলক সি 1 ব্যবহার করুন
  • এখন সি 2 একটি সম্পূর্ণ স্ব হোস্টিং পরিবেশ।

7

একটি অতি আকর্ষণীয় এই আলোচনা ইউনিক্স সহ-স্রষ্টা রয়েছে কেন থম্পসন এর টুরিং পুরস্কার বক্তৃতা।

সে দিয়ে শুরু:

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

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

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


9
এটি অফ-টপিক .. আকর্ষণীয়, তবে বিভ্রান্তিকর, এবং প্রশ্নের উত্তর নয়।
ব্লুশিফ্ট

5

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

এটি বুটস্ট্র্যাপিংয়ের সংজ্ঞা :

একটি সাধারণ সিস্টেমের প্রক্রিয়া যা আরও জটিল পদ্ধতিতে কার্যকর হয় যা একই উদ্দেশ্যে কাজ করে।

সম্পাদনা: সংকলক বুটস্ট্র্যাপিং সম্পর্কিত উইকিপিডিয়া নিবন্ধ আমার চেয়ে ধারণাটি আরও ভালভাবে কভার করে।




3

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

আপনি ম্যাক্কার্টিথির মূল কাগজ, প্রতীকী এক্সপ্রেশনগুলির পুনরাবৃত্ত ফাংশন এবং মেশিন, পার্ট I দ্বারা তাদের গণনা পড়ে নিজের জন্য যাচাই করতে পারেন ।


2 এবং 3 অংশে যাই ঘটেছে? ... আমি কীভাবে লক্ষ্য করিনি যে @ উইং আমার 3 বছর আগে একই জিনিস পোস্ট করেছিল? আমি নুনু কমপক্ষে আমি কাগজটি সংযুক্ত করেছি (সাহায্যের সাথে)।
লুসার droog

2

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


2

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

আসলে, আমি মনে করি লিস্প প্রায় যোগ্যতা অর্জন করে। পরীক্ষা করে দেখুন তার উইকিপিডিয়া এন্ট্রি । নিবন্ধ অনুযায়ী, পাতার মর্মর Eval ফাংশন একটি অন বাস্তবায়িত করা যায়নি আইবিএম 704 মেশিন কোড, একটি সম্পূর্ণ কম্পাইলার আসছে (পাতার মর্মর নিজেই লেখা) এ 1962 অস্তিত্ব সঙ্গে MIT- র


2

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

কীভাবে এটি কাজ করবে? আমি মনে করি না অন্যথায় এটি এমনকি ধারণাগতভাবে সম্ভব।


4
কমপক্ষে প্রথম লিস্প সংকলকটি বিদ্যমান লিস্প ইন্টারপ্রেটার ব্যবহার করে বুটস্ট্র্যাপ করা হয়েছিল । সুতরাং শব্দার্থগতভাবে অন্য ভাষা নয়, অন্য একটি ভাষা বাস্তবায়ন।
কেন

0

কিছু বুটস্ট্র্যাপযুক্ত সংকলক বা সিস্টেম উভয় উত্স ফর্ম এবং অবজেক্ট ফর্মকে তাদের ভান্ডারে রাখে:

  • অকামল এমন একটি ভাষা যা উভয়ই বাইকোড ইন্টারপ্রেটার (অর্থাত্ ওকামাল বাইটকোডের সংকলক) এবং নেটিভ সংকলক (x86-64 বা এআরএম, ইত্যাদি ... এসেম্বারার)। এর এসএনএন সংগ্রহস্থলিতে সংস্থাপকের উত্স কোড (ফাইল */*.{ml,mli}) এবং বাইকোড (ফাইল boot/ocamlc) ফর্ম উভয়ই রয়েছে । সুতরাং আপনি যখন এটি নির্মাণ করবেন প্রথমে এটির সংকলন করার জন্য এর বাইকোড (সংকলকের পূর্ববর্তী সংস্করণটির) ব্যবহার করা হবে। পরে সদ্য সংকলিত বাইটকোড দেশীয় সংকলক সংকলন করতে সক্ষম। সুতরাং ওক্যামল এসএনএন সংগ্রহস্থলীতে *.ml[i]উত্স ফাইল এবং বাইকোড ফাইল উভয়ই রয়েছে boot/ocamlc

  • মরিচা কম্পাইলার ডাউনলোড (ব্যবহার wget, তাই আপনার একটি চালু ইন্টারনেট সংযোগের প্রয়োজন) তার বাইনারি একটি পূর্ববর্তী সংস্করণের নিজেই কম্পাইল করার।

  • মেল্ট হ'ল জিসিসি কাস্টমাইজ এবং প্রসারিত করার জন্য একটি লিস্প-জাতীয় ভাষা । এটি বুটস্ট্র্যাপযুক্ত অনুবাদক সি -+ কোডে অনুবাদ করেছেন। অনুবাদকের উত্পন্ন সি ++ কোড বিতরণ করা হয়, সুতরাং এসএনএন সংগ্রহস্থলে অনুবাদকের দুটি *.meltউত্স ফাইল এবং melt/generated/*.cc"অবজেক্ট" ফাইল থাকে।

  • জে.পিত্রতের সিএআইএ কৃত্রিম বুদ্ধিমত্তা সিস্টেম সম্পূর্ণ স্ব- উত্পাদিত । এটি হাজার হাজার ডেটা ফাইলের সংগ্রহ সহ হাজার হাজার [A-Z]*.cউত্পন্ন ফাইল (একটি উত্পন্ন dx.hশিরোনাম ফাইল সহ) সংগ্রহ হিসাবে উপলব্ধ _[0-9]*

  • বেশ কয়েকটি স্কিম সংকলক এছাড়াও বুটস্ট্র্যাপ করা হয়। স্কিম 48, চিকেন স্কিম, ...

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