মেটাপ্রোগ্রামিং (ইংরেজি: Metaprogramming)হলো প্রোগ্রামিংয়ের এমন এক কৌশল যেখানে কম্পিউটার প্রোগ্রামগুলো অন্য প্রোগ্রামগুলোকে তাদের অন্তর্ভুক্ত ডেটা হিসেবে বিচার করতে পারে। এর মানে দাঁড়াচ্ছে একটি প্রোগ্রাম অন্য কোনো প্রোগ্রামকে পড়া, বিশ্লেষণ ও রূপান্তর করতে পারে -এমনকি প্রোগ্রামগুলোর চলন্ত অবস্থায় সেগুলোকে পরিবর্তন করতে পারে।[১][২] ফলে, এটা প্রোগ্রামারদের কোনো সমস্যা সমাধানে লেখা কোডের লাইন সংখ্যা কমাতে পারে, এতে ডেভলপমেন্টের সময় কম লাগে।[৩] এটা কার্যকরীভাবে উদ্ভূত নতুন প্রোগ্রামিং সমস্যাগুলো রিকম্পাইল ছাড়া সমাধান করে প্রোগ্রামের নমনীয়তা দারুণ বাড়িয়ে দেয় ।

মেটাপ্রোগ্রামিংয়ের মাধ্যমে কম্পিউটিংয়ের কাজ রান টাইমের বদলে কম্পাইল টাইমে স্থানান্তর করা যায় ও স্বপরিবর্তনযোগ্য কোড লেখা যায়।

প্রচেষ্টাসমূহ সম্পাদনা

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

উদাহরণ সম্পাদনা

মেটাপ্রোগ্রামিংয়ের একটি সহজ উদাহরণ হলো এই পসিক্স শেল স্ক্রিপ্টটি, যা একইসাথে জেনারেটিভ প্রোগ্রামিংয়ের উদাহরণও:

#!/bin/sh
# metaprogram
echo '#!/bin/sh' > program
for i in $(seq 992)
do
    echo "echo $i" >> program
done
chmod +x program

এই স্ক্রিপ্টটি (বা, প্রোগ্রামটি) একটি ৯৯৩-লাইন প্রোগ্রাম আউটপুট দেয়, যাতে ১-৯৯২ পর্যন্ত সংখ্যাগুলো থাকে। এটা শুধু কোড ব্যবহার করে আরো কোড লেখার জন্য; স্ক্রিপ্টটি সংখ্যা প্রিন্ট করার জন্য সবচেয়ে কার্যকরী উপায় নয়।

এটা সত্ত্বেও, একজন প্রোগ্রামার এই মেটাপ্রোগ্রামটিকে মিনিটেরও কম সময়ে চালাতে পারেন, যাতে ১০০০ লাইনের কোড তিনি পেয়ে যাবেন।

কোয়াইন বিশেষ ধরনের একটি মেটাপ্রোগ্রাম, যা নিজের সোর্স কোড নিজেই তৈরি করে। কোয়াইন মূলত শুধু তত্ত্বীয় কিংবা বিনোদনমূলক ব্যবহারের জন্য।

প্রোগ্রামিং ভাষাসমূহে ব্যবহার সম্পাদনা

ম্যাক্রো সিস্টেমসমূহ সম্পাদনা

মেটাক্লাসসমূহ সম্পাদনা

নিচের প্রোগ্রামিং ভাষাগুলো মেটাক্লাসসমূহ সরবরাহ করে:

টেমপ্লেট মেটাপ্রোগ্রামিং সম্পাদনা

  • এক্স ম্যাক্রোসমূহ
  • সি++ টেমপ্লেটসমূহ
  • ডি
  • সাধারণ লিস্প, স্কিম এবং অন্যসব লিস্প উত্তরসূরী
  • নিম

স্টেজড মেটাপ্রোগ্রামিং সম্পাদনা

তথ্যসূত্র সম্পাদনা

  1. Harald Sondergaard। "Course on Program Analysis and Transformation"। সংগ্রহের তারিখ ১৮ সেপ্টেম্বর ২০১৪ 
  2. Czarnecki, Krzysztof; Eisenecker, Ulrich W. (২০০০)। Generative Programmingআইএসবিএন 0-201-30977-7 
  3. Walker, Max। "The Art of Metaprogrmming in Java"New Circle। ১৪ ফেব্রুয়ারি ২০১৭ তারিখে মূল থেকে আর্কাইভ করা। সংগ্রহের তারিখ ২৮ জানুয়ারি ২০১৪