ধাতব প্রোগ্রামিং বিভিন্নভাবে বোঝায় যে কোনও প্রোগ্রামের নিজের জ্ঞান রয়েছে বা নিজেই তা পরিচালনা করতে পারে।
সি # এর মতো ভাষাগুলিতে প্রতিবিম্ব একটি রূপক রূপ যা প্রোগ্রামটি নিজের সম্পর্কে তথ্য পরীক্ষা করতে পারে। উদাহরণস্বরূপ কোনও বস্তুর সমস্ত বৈশিষ্ট্যের একটি তালিকা ফেরত দেওয়া।
অ্যাকশনস্ক্রিপ্টের মতো ভাষায়, আপনি রানাল টাইমে ফাংশনগুলি মূল্যায়ন করতে পারেন নতুন প্রোগ্রাম তৈরি করতে যেমন ইভাল ("x" + i) তৈরি করতে। ডোজোমিংথিং () x 1 নামক কোনও বস্তুকে প্রভাবিত করবে যখন আমি 1 হয় এবং x 2 হয় i
পরিশেষে, প্রোগ্রামটি অন্য-তুচ্ছ ফ্যাশনে নিজেকে পরিবর্তন করতে পারে তখন রূপকগুলির আর একটি সাধারণ রূপ। এলআইএসপি এর জন্য সুপরিচিত এবং এটি প্রায় এক দশক আগে পল গ্রাহাম চ্যাম্পিয়ন হয়েছিল। আমি তার নির্দিষ্ট কিছু রচনা সন্ধান করতে হবে। তবে ধারণাটি হ'ল এই প্রোগ্রামটি তার রাজ্যের উপর ভিত্তি করে প্রোগ্রামের আরও একটি অংশ পরিবর্তন করবে। এটি রানটাইমের সময় এক পর্যায়ে নমনীয়তার সিদ্ধান্ত নিতে দেয় যা বর্তমানে বেশিরভাগ জনপ্রিয় ভাষায় খুব কঠিন difficult
এটিও লক্ষণীয় যে, সরাসরি অ্যাসেম্বলিতে প্রোগ্রামিংয়ের ভাল অল'এর দিনগুলিতে, রানটাইম সময়ে নিজেকে বদলে ফেলা প্রোগ্রামগুলি প্রয়োজনীয় এবং খুব সাধারণ ছিল।
পল গ্রাহামের রচনা "হোয়াট মেড লিস্প ডিফারেন্ট" থেকে :
অনেক ভাষায় ম্যাক্রো নামে কিছু থাকে। তবে লিসপ ম্যাক্রোগুলি অনন্য। এবং এটি বিশ্বাস করুন বা না করুন, তারা যা করে তা প্রথম বন্ধনীগুলির সাথে সম্পর্কিত। লিস্পের ডিজাইনাররা এই সমস্ত বন্ধনীকে ভাষার চেয়ে আলাদা করার জন্য রাখেনি। ব্লাব প্রোগ্রামারটির কাছে, লিস্প কোডটি অদ্ভুত দেখাচ্ছে। কিন্তু সেই প্রথম বন্ধনীগুলি একটি কারণ রয়েছে। লিস্প এবং অন্যান্য ভাষার মধ্যে মৌলিক পার্থক্যের বাহ্যিক প্রমাণ তারা।
লিস্প কোডটি লিস্প ডেটা অবজেক্টগুলির বাইরে তৈরি হয়। এবং তুচ্ছ অর্থে নয় যে উত্স ফাইলগুলিতে অক্ষর রয়েছে এবং স্ট্রিংগুলি ভাষা দ্বারা সমর্থিত ডেটা ধরণের একটি। লিস্প কোডটি পার্সার দ্বারা পড়ার পরে, ডেটা স্ট্রাকচার দিয়ে তৈরি যা আপনি পেরিয়ে যেতে পারেন।
কম্পাইলাররা কীভাবে কাজ করে তা যদি আপনি বুঝতে পারেন তবে আসলে কী চলছে তা এতটা নয় যে লিস্পের কাছে একটি অদ্ভুত বাক্য গঠন রয়েছে যেহেতু লিস্পের কোনও সিনট্যাক্স নেই। আপনি পার্স গাছগুলিতে প্রোগ্রামগুলি লিখেন যা সংকলকটির মধ্যে অন্য ভাষাগুলি বিশ্লেষণ করার সময় উত্পন্ন হয়। তবে এই পার্স গাছগুলি আপনার প্রোগ্রামগুলিতে সম্পূর্ণ অ্যাক্সেসযোগ্য। আপনি সেই প্রোগ্রামগুলি লিখতে পারেন যা সেগুলি হেরফের করে। লিস্পে, এই প্রোগ্রামগুলিকে ম্যাক্রো বলা হয়। তারা প্রোগ্রাম যে প্রোগ্রাম লিখুন।
প্রোগ্রাম যে প্রোগ্রাম লিখুন? আপনি কখন এটি করতে চান? খুব প্রায়ই না, যদি আপনি কোবলে ভাবেন। সব সময়, যদি আপনি লিস্পে ভাবেন। আমি এখানে শক্তিশালী ম্যাক্রোর উদাহরণ দিতে এবং সেখানে বলতে পারলে সুবিধাজনক হবে! কীভাবে? তবে আমি যদি তা করি তবে এটি কেবল লিস্পকে চেনে না এমন ব্যক্তির কাছে কেবল জিবির মতো মনে হবে; এর অর্থ কী তা বোঝার জন্য আপনার জানতে প্রয়োজনীয় সমস্ত কিছু ব্যাখ্যা করার জন্য এখানে কোনও স্থান নেই। ইন ANSI প্রচলিত পাতার মর্মর আমি যত দ্রুত বরাবর যেমন আমি পারতাম জিনিষ সরানো করার চেষ্টা করেছিল, এবং এমনকি তাই আমি পৃষ্ঠা 160 পর্যন্ত ম্যাক্রো পেতে হয়নি।
তবে আমি মনে করি আমি একধরনের যুক্তি দিতে পারি যা নিশ্চিত হতে পারে। ভায়াবেব সম্পাদকের উত্স কোডটি সম্ভবত প্রায় 20-25% ম্যাক্রো ছিল। ম্যাক্রোগুলি সাধারণ লিস্প ফাংশনগুলির তুলনায় লেখা শক্ত এবং এগুলি যখন প্রয়োজন হয় না তখন সেগুলি ব্যবহার করা খারাপ স্টাইল হিসাবে বিবেচিত হয়। সুতরাং যে কোডটিতে প্রতিটি ম্যাক্রো রয়েছে কারণ এটি হওয়া দরকার। এর অর্থ হ'ল এই প্রোগ্রামের কমপক্ষে 20-25% কোড এমন কাজ করছে যা আপনি অন্য কোনও ভাষায় সহজেই করতে পারবেন না। তবে ব্ল্প প্রোগ্রামার লিস্পের রহস্যময় শক্তির জন্য আমার দাবির বিষয়ে সন্দেহবাদী হতে পারে, তবে তাকে কৌতূহলী করা উচিত। আমরা আমাদের নিজের বিনোদনের জন্য এই কোডটি লিখছিলাম না। আমাদের এবং আমাদের প্রতিযোগীদের মধ্যে প্রযুক্তিগত বাধা তৈরি করতে আমরা যতটা হার্ড প্রোগ্রামিং করতাম আমরা একটি ছোট্ট সূচনা ছিলাম।
সন্দেহজনক ব্যক্তি ভাবতে শুরু করতে পারে যে এখানে কিছু সম্পর্ক আছে কিনা। আমাদের কোডের একটি বড় অংশ এমন কাজ করছিল যা অন্য ভাষায় করা খুব কঠিন। ফলস্বরূপ সফ্টওয়্যার এমন কাজ করেছিল যা আমাদের প্রতিযোগীদের সফ্টওয়্যার করতে পারে না। সম্ভবত কিছুটা সংযোগ ছিল। আমি আপনাকে এই থ্রেড অনুসরণ করতে উত্সাহিত করি। চোখের দেখা পাওয়ার চেয়ে বৃদ্ধা তার ক্রাচগুলিতে ঝাঁপিয়ে পড়ে আরও কিছু থাকতে পারে।