স্ব-হোস্টিং সংকলকরা কেন নতুন ভাষার জন্য উত্তীর্ণের একটি অনুষ্ঠান হিসাবে বিবেচিত হয়?


30

আমি এখন বেশ কয়েকটি জায়গায় শুনেছি যে লোকেরা ভাষা ব্যবহার করতে পারে বা কমপক্ষে একটি স্ব-হোস্টিং সংকলক শ্রদ্ধার প্রাপ্য হতে পারে বলে আশা করে।

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


17
"একটি সংকলক লেখার জন্য একটি অত্যন্ত গুরুত্বপূর্ণ সফ্টওয়্যার অংশ হিসাবে মনে হয় এবং আমি কল্পনা করি যে সমস্ত ভাষা সেগুলি তৈরির পক্ষে উপযুক্ত নয়" ": নতুন ভাষায় একটি সংকলক লেখার চেষ্টা করার জন্য আমি এটিকে খুব ভাল কারণ হিসাবে বিবেচনা করব ভাষাটি কাজটির উপর নির্ভর করে তা প্রমাণ করার জন্য।
জর্জিও

13
যদি এটি একটি বিশেষ উদ্দেশ্য ভাষা না থাকে তবে যে ভাষায় একটি সংকলক লেখার পক্ষে উপযুক্ত নয় সেই ভাষাটি আমি যা করতে চাই তার পক্ষে সম্ভবত এটি উপযুক্ত নয়।
কোডসইনচাউস

3
আফাইক, ফোর্টরানের ক্ষেত্রে এটি সর্বদা সত্য নয়। বেশ কয়েকটি ফোর্টরান সংকলক (যেমন জিসিসিgfortran থেকে ...) ফরট্রানে কোড করা হয়নি
বেসিল স্টারিঙ্কেভিচ

উত্তর:


29

আরও ভাল ফলাফল দেবে এমন কোনও কিছুতে কাজ করার জন্য কী প্রচেষ্টা করা আরও অর্থবোধ করে না?

কিসের মত?

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

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

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


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

2
@ আরনাউড এবং একটি জাভাস্ক্রিপ্ট সংকলক জাভাস্ক্রিপ্টের পরিবেশ প্রয়োজন, যা জাভাস্ক্রিপ্টে লেখা যায় না কারণ জাভাস্ক্রিপ্টের একটি জাভাস্ক্রিপ্ট পরিবেশ প্রয়োজন, <বিপরীতে পুনরাবৃত্তি করুন> কারণ জাভাস্ক্রিপ্ট পরিবেশ অপারেটিং সিস্টেম দ্বারা সরবরাহ করা হয়নি (এবং যদি ছিল, এটি জাভাস্ক্রিপ্টে লেখা হবে না)।
কিউস

3
@Qix en.wikipedia.org/wiki/Bootstrapping_%28compilers%29 কিন্তু প্রধানত সেখানে এটি ব্যবহার করতে কোনো কারণ নেই। এটি ব্যাপকভাবে একটি দুর্বল ভাষা হিসাবে পরিচিত, ব্রাউজারগুলি পরিস্থিতি নিয়ন্ত্রণে থাকার কারণে এটি সংকলনের জন্য এটি ব্যবহার না করে পালিয়ে যায় :), যদিও আমাদের বাকী ওয়েবে কোনও বিকল্প নেই।
ডেন

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

30

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

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


1
সম্পূর্ণতার জন্য: আপনার নিজের কুকুরের খাবার খাচ্ছেন ; দেখতে কুকুর খাওয়ানো (বিশেষণ।) অথবা dogfooding (ক্রিয়া)
Qix

17

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

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

এর অর্থ এই নয় যে এটি একমাত্র লক্ষ্য করার মতো মাইলফলক। কার্যকারিতা রয়েছে যা সংকলক দ্বারা ব্যবহার করা হয় না, যেমন ডাটাবেস ইন্টিগ্রেশন, গ্রাফিকাল ইন্টারফেস, নেটওয়ার্কিং ইত্যাদি by


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

যদিও একটি সংকলক লেখার জন্য সঠিকভাবে ইউনিকোড সমর্থন প্রয়োজন হয় না।
পাওলো ইবারম্যান

11

স্টিভ ইয়েজ একটি দুর্দান্ত ব্লগ পোস্ট লিখেছিলেন যা কিছুটা পরোক্ষভাবে এটিকে সম্বোধন করে।

বড় পয়েন্ট # 1: সংকলকরা কম্পিউটার বিজ্ঞানের প্রতিটি দিককেই অনেকটা পরিবেষ্টন করে। এগুলি একটি উচ্চ স্তরের কোর্স কারণ আপনাকে কম্পিউটার বিজ্ঞান পাঠ্যক্রমে শিখতে পারে এমন অন্যান্য সমস্ত বিষয়গুলি শুরু করার জন্য আপনাকে জানতে হবে। ডেটা স্ট্রাকচার, অনুসন্ধান এবং বাছাই, অ্যাসেম্পোটিক পারফরম্যান্স, গ্রাফ রঙ? এটা সব সেখানে।

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

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

বড় পয়েন্ট # 2: 30,000 ফুট থেকে এক বিস্ময়কর সংখ্যার সমস্যা দেখতে ঠিক কম্পাইলারের মতো।

সংকলকগণ প্রতীকগুলির একটি স্ট্রিম নিয়ে আসে, কিছু ডোমেন-নির্দিষ্ট পূর্বনির্ধারিত নিয়ম অনুসারে তাদের কাঠামোটি বের করে এবং এটিকে অন্য প্রতীক প্রবাহে রূপান্তর করে। বেশ সাধারণ লাগছে, তাই না? হ্যাঁ ভালো.

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

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

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

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

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

এই মাসে আমি তুলনামূলকভাবে নতুন এবং বিখ্যাত অ-স্ব-হোস্টেড সংকলকটি ব্যবহার করছি (আপনি সম্ভবত এটি অনুমান করতে পারেন), এবং জিনিসটি সেগফোল্টিং না করে আমি 2 দিন যেতে পারি না। আমি আশ্চর্য হয়েছি যে ডিজাইনাররা এটি ব্যবহার করতে আসলে কতটা ছিল।


8

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

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

একবার আপনার এই কাজটি শেষ হয়ে গেলে, আপনি কম্পাইলার উত্সটি পুনরায় লিখতে পারবেন যা ভাষা ওয়াই ভাষায় X ভাষায় লেখা হয়েছিল এবং ভাষা এক্স উত্সটি ওয়াই ভাষায় লিখিত সংকলকটি ব্যবহার করে সংকলন করতে পারেন The আউটপুটটি নতুন ভাষায় এক্স লিখিত নতুন সংকলক হবে ভাষা এক্স সংকলন করে, এটি এখন স্ব-হোস্টিং। তবে এটি সম্পূর্ণ নয় যেহেতু আপনি কেবল Y এর ভাষায় ভাষার একটি উপসেট প্রয়োগ করেছেন

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

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

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


2

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

এসকিউএল এর মতো ভাষার দিকে তাকিয়ে আমি মনে করি উত্তরটি হ্যাঁ। তবে সেই প্রকৃতির ভাষাগুলি সাধারণ উদ্দেশ্য নয়।


1
চ্যালেঞ্জিত স্বীকৃত: এসকিউএল তে একটি সি সংকলক লিখুন।
কিউস

2

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

তবুও, আমি মনে করি এটি যদি একটি ভাষা "স্ব-সংকলন" করতে সক্ষম হয় তবে এটি একটি দুর্দান্ত অনুশীলন / প্রমাণ-ধারণা of

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


2

ঝাঁকুনি সি ++ তে লেখা আছে। অবজেক্টিভ-সি-তে ক্ল্যাং অবজেক্টিভ-সি সংকলকটি পুনরায় লেখা খুব কঠিন হবে না তবে তারপরে এটি বেশ অকেজো হবে। সি ++ সংকলকটিতে যে কোনও পরিবর্তন হ'ল উদ্দেশ্য-সি এবং এর বিপরীতে আবার কাজ করতে হবে। তাহলে কেন?

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

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

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


1

এটি দেখায় যে ভাষা জটিল স্ট্রিং প্রসেসিং প্রক্রিয়াজাতকরণ এবং অন্য ভাষায় অনুবাদ / নিজেই ব্যাখ্যা করতে সক্ষম।

সংকলক তৈরির প্রক্রিয়াতে (প্রথম বড় প্রকল্প) এমন সমস্যা উপস্থিত হবে যা সামনে আসে।

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