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