আমার মনে হয় আপনি দুটি ভিন্ন জিনিস সম্পর্কে জিজ্ঞাসা করছেন।
- একটি প্রোগ্রামিং ভাষার ডেটা হিসাবে তার সমস্ত প্রোগ্রাম উপস্থাপন করার ক্ষমতা।
- প্রোগ্রাম হিসাবে ডেটা হিসাবে যুক্তি।
বিশ্লেষণাত্মক উদ্দেশ্যে এগুলি পৃথক রাখা দরকারী। আমি পূর্বের উপর ফোকাস করব।
ডেটা হিসাবে এটির প্রোগ্রামগুলিকে উপস্থাপন, পরিচালনা (এবং চালানো) করার জন্য একটি প্রোগ্রামিং ভাষার দক্ষতা মেটা-প্রোগ্রামিং বা
হোমোকোনসিটির মতো পদগুলির অধীনে যায় ।
(বিশ্রী) উপায়ে, সমস্ত সুপরিচিত প্রোগ্রামিং ল্যাঙ্গুয়েজগুলি মেটা-প্রোগ্রামিং করতে পারে, যেমন স্ট্রিং ডেটা টাইপ ব্যবহার করে স্ট্রিংগুলিতে বাইরের প্রোগ্রামগুলি (সংকলক, লিঙ্কার ইত্যাদি) চালনার দক্ষতার সাথে (যেমন ফাইলগুলিতে তাদের লিখে লিখে) সিস্টেম প্রথম)। যাইহোক, এটি সম্ভবত আপনি বোঝাতে চাইছেন না। আপনার মনে সম্ভবত সুন্দর বাক্য গঠন আছে। প্রোগ্রামগুলি উপস্থাপনের জন্য স্ট্রিংগুলি খুব ভাল সিনট্যাক্স হয় না কারণ প্রায় সমস্ত স্ট্রিং প্রোগ্রামগুলিকে প্রতিনিধিত্ব করে না, অর্থাত্ স্ট্রিং ডেটা টাইপটিতে প্রোগ্রামের উপস্থাপনা প্রক্রিয়া হিসাবে দেখা গেলে 'জাঙ্ক' প্রচুর পরিমাণে থাকে। বিষয়টিকে আরও খারাপ করার জন্য, স্ট্রিং অপারেশনগুলির বীজগণিতের প্রোগ্রাম নির্মাণের বীজগণিতের সাথে মূলত কোনও সংযোগ নেই।
আপনার সম্ভবত যা মনে রয়েছে তা হ'ল কিছু সুন্দর is যেমন যদি একটি প্রোগ্রাম হয়, তাহলে ⟨ পি ⟩ হয় পি , কিন্তু ডেটা যেমন, ম্যানিপুলেশন এবং বিশ্লেষণের জন্য হাতে। এটিকে প্রায়শই উদ্ধৃতি বলা হয় । অনুশীলনে, উদ্ধৃতিটি জটিল নয়, পরিবর্তে আমরা কোটির কোটেশন ব্যবহার করি, যা উদ্ধৃতিটির একটি সাধারণীকরণ যেখানে উদ্ধৃতিতে 'ছিদ্র' থাকতে পারে যেখানে প্রোগ্রামগুলি সঞ্চালিত হতে পারে যা গর্তগুলিকে 'পূরণ' করার জন্য ডেটা সরবরাহ করে। উদাহরণস্বরূপ ⟨ আমি চপি। পি⟩পি একটি যেখানে পরিবর্তে একটি শর্ত আমরা একটি গর্ত আছে আপাতদৃষ্টিতে উদ্ধৃতি একটি শর্তাধীন প্রতিনিধিত্বমূলক হয় [ ⋅ ] । যদি প্রোগ্রাম এম তথ্য মূল্যায়ণ ⟨ এক্স > 0 ⟩ , তারপর আপাতদৃষ্টিতে উদ্ধৃতি ⟨ আমি চ
⟨ আমি চ[ ⋅ ]টিh e n7ই এলএস ই8 + + 9 ⟩
[ ⋅ ]এম⟨ এক্স > 0 ⟩ তথ্য মূল্যায়ণ
⟨ আমি চ⟨ আমি চ[ এম]t h e n7ই এল এস ই8 + + 9 ⟩
⟨ আমি চx > 0t h e n7ই এল এস ই8 + + 9 ⟩ ।
(দ্রষ্টব্য যে একটি সাধারণ প্রোগ্রাম (ডেটা হিসাবে কোনও প্রোগ্রাম নয়) যা উদ্ধৃত প্রোগ্রাম, অর্থাত্ প্রোগ্রাম হিসাবে ডেটা দেয় returns) এটি কাজ করার জন্য, আপনাকে প্রোগ্রাম উপস্থাপনের জন্য একটি ডেটা-টাইপ দরকার। সাধারণত ডেটা-টাইপকে এএসটি (অ্যাবস্ট্রাক্ট সিনট্যাক্স ট্রি) বলা হয় এবং আপনি এএসটিএসের সংক্ষিপ্তকরণ ব্যবস্থা হিসাবে (অর্ধ) উদ্ধৃতি দেখতে পারেন।এম
বেশ কয়েকটি প্রোগ্রামিং ল্যাঙ্গুয়েজে মেটা-প্রোগ্রামিংয়ের জন্য কোয়েস্ট-কোটস এবং অন্যান্য বৈশিষ্ট্য রয়েছে। প্রোগ্রামগুলির ডেটা হিসাবে বিবেচনা করার এই দক্ষতার পথিকৃষ্ঠায় এটি ম্যাক্রোং কার্যকারিতা সহ লিস্প ছিল। সম্ভবত দুর্ভাগ্যক্রমে, লিস্প-ভিত্তিক ম্যাক্রোগুলির শক্তি লিস্পের সংক্ষিপ্ত সিনট্যাক্সের উপর বেশিরভাগ সময় বিশ্রাম নিতে দেখা গেছে; এটি মেটাএমএল (1) অবধি ছিল না যে একটি আধুনিক, সিন্ট্যাক্টিক্যালি সমৃদ্ধ ভাষা মেটা-প্রোগ্রামিংয়ে সক্ষম বলে দেখানো হয়েছিল। তার পর থেকে, মেটাওক্যামল (2) (ডেটা হিসাবে প্রোগ্রামগুলি কীভাবে টাইপ করতে হবে সমস্যা সমাধানের জন্য চলমান চলমান অনুসন্ধানে এটির অগ্রগতির জন্য গুরুত্বপূর্ণ), টেমপ্লেট হাস্কেল (3) এবং কনভার্জ (4) (প্রথম ভাষাটি সমস্ত মূল মেটা-প্রোগ্রামিং বৈশিষ্ট্যগুলি আমার মতে ঠিকঠাক পান) দেখানো হয়েছে যে বিভিন্ন আধুনিক প্রোগ্রামিং ভাষাতে মেটা-প্রোগ্রামিং থাকতে পারে। এটা বুঝতে পারি যে আমরা নিতে পারি importantযে কোনও প্রোগ্রামিং ভাষা এবং এটিকে একটি মেটা-প্রোগ্রামিং ল্যাঙ্গুয়েজে পরিণত করুন L m p
যা L এর সাথে একত্রে তার নিজস্ব প্রোগ্রামগুলিকে ডেটা হিসাবে উপস্থাপনের (এবং মূল্যায়ন) সক্ষমতা রাখে।এলএলমি pএল
প্রোগ্রাম চলমান ফলাফল, তথ্য হিসেবে দেওয়া প্রতিনিধিত্ব, একটি যোগ করে অর্জিত হয় ফাংশন যা ইনপুট হিসাবে একটি প্রোগ্রাম (ডাটা হিসেবে দেওয়া) লাগে এবং চালায়, তার ফলাফলের ফিরিয়ে আনে। যেমন যদি পি 17 ও মূল্যায়ন করে একটি প্রোগ্রাম ⟨ পি ⟩ , এর (আপাতদৃষ্টিতে) উদ্ধৃত সংস্করণ পি , অর্থাত্ পি ডেটা, তারপর ই বনাম একটি ঠ ( ⟨ পি ⟩ ) এছাড়াও ফেরৎ 17. এখানে সুক্ষ্ণ বিষয়গুলো সর্বপ্রকার আছে যে আমি প্রশ্ন এখানে যেমন উপেক্ষা করছি যখনই ভি এ এল (⋅)পি। পি⟩পিপিই বনাম একটি ঠ (⟨পি⟩ )মেটা-প্রোগ্রামযুক্ত প্রোগ্রামগুলি মূল্যায়ন করা হচ্ছে (সংকলন-সময় এবং রান-টাইম মেটা-প্রোগ্রামডের মধ্যে পার্থক্যকে বাড়িয়ে দেওয়া), প্রকার বা ব্যর্থ মূল্যায়নের সাথে কী করবেন, থেকে যাওয়ার প্রক্রিয়াতে আবদ্ধ এবং মুক্ত পরিবর্তনশীলগুলির কী হবে? ⟨ পি ⟩ বা তদ্বিপরীত।পি। পি⟩
দ্বিতীয় মাত্রা হিসাবে, ডেটা হিসাবে দেওয়া প্রোগ্রাম সম্পর্কে যুক্তি। প্রোগ্রামগুলিকে ডেটাতে রূপান্তরিত করার সাথে সাথে এগুলি 'সাধারণ' ডেটা এবং ডেটা হিসাবে যুক্তিযুক্ত হতে পারে। আপনি সমস্ত প্রবাদ প্রযুক্তি ব্যবহার করতে পারেন, যেমন যিশুশু নির্দেশ করেছেন, যেমন নির্ভরশীল প্রকারগুলি বা চুক্তিগুলি বা ইন্টারেক্টিভ উপপাদ্য প্রোভর বা স্বয়ংক্রিয় সরঞ্জামগুলি। তবে যুক্তি প্রক্রিয়ায় আপনাকে আপনার ভাষার শব্দার্থতত্ত্ব উপস্থাপন করতে হবে। আপনার যদি প্রয়োজন সেই ভাষাটি যদি মেটা-প্রোগ্রামিংয়ের দক্ষতা অর্জন করে তবে জিনিসগুলি কিছুটা জটিল হয়ে উঠতে পারে এবং এই দিকটিতে খুব বেশি কাজ করা হয়নি, (5) এই উদ্দেশ্যে একমাত্র প্রোগ্রাম যুক্তিযুক্ত। মেটা-প্রোগ্রামিং (6, 7, 8) সম্পর্কিত যুক্তিতে কারি-হাওয়ার্ড ভিত্তিক কাজও রয়েছে। নোট করুন যে এই যুক্তি ভিত্তিক পদ্ধতির, এবং টাইপ-ভিত্তিক পদ্ধতির (2) প্রকৃতপক্ষে এমন সমস্ত বৈশিষ্ট্য প্রকাশ করতে পারে যা ভবিষ্যতের সমস্ত মেটা-প্রোগ্রামিং পর্যায়ে থাকে। (২) ব্যতীত papers কাগজের কোনওটিই প্রয়োগ করা হয়নি।
সংক্ষেপে: আপনি যা চেয়েছিলেন তা বাস্তবায়ন করা হয়েছে, তবে এটি বেশ সূক্ষ্ম এবং বিশেষত প্রকার এবং সুশৃঙ্খল যুক্তি সহকারে খোলামেলা প্রশ্ন রয়েছে।
ডাব্লু তাহা। মাল্টি-স্টেজ প্রোগ্রামিং: এর তত্ত্ব এবং অ্যাপ্লিকেশন ।
ডাব্লু। তাহা এবং এমএফ নীলসেন। পরিবেশগত শ্রেণিবদ্ধ ।
টি শার্ড এবং এস পাইটন জোন্স। হাস্কেলের জন্য টেম্পলেট মেটা-প্রোগ্রামিং ।
এল ট্র্যাট। একটি গতিময় টাইপ করা OO ভাষায় সংকলন-সময় মেটা-প্রোগ্রামিং ।
এম বার্গার, এল ট্র্যাট, সমজাতীয় মেটা-প্রোগ্রামিংয়ের প্রোগ্রাম লজিক্স ।
আর। ডেভিস, এফ। পেফেনিং, মঞ্চযুক্ত গণনার একটি আধুনিক বিশ্লেষণ ।
আর। ডেভিস, বাইন্ডিং-টাইম বিশ্লেষণের জন্য একটি অস্থায়ী-যুক্তিযুক্ত দৃষ্টিভঙ্গি ।
টি.সুকদা, এ। ইগ্রাশি। পরিবেশগত শ্রেণিবদ্ধদের জন্য একটি যৌক্তিক ভিত্তি ।