এক্সটেনশন ওভারভিউ

এই পৃষ্ঠাটি বর্ণনা করে কিভাবে ম্যাক্রো এবং নিয়ম ব্যবহার করে BUILD ভাষা প্রসারিত করা যায়।

Bazel এক্সটেনশন হল .bzl এ শেষ হওয়া ফাইল। একটি এক্সটেনশন থেকে একটি প্রতীক আমদানি করতে একটি লোড স্টেটমেন্ট ব্যবহার করুন।

আরও উন্নত ধারণা শেখার আগে, প্রথমে:

ম্যাক্রো এবং নিয়ম

একটি ম্যাক্রো এমন একটি ফাংশন যা নিয়মগুলিকে তাত্ক্ষণিক করে। এটি দরকারী যখন একটি BUILD ফাইল খুব পুনরাবৃত্তিমূলক বা খুব জটিল হয়ে উঠছে, কারণ এটি আপনাকে কিছু কোড পুনরায় ব্যবহার করতে দেয়। BUILD ফাইলটি পড়ার সাথে সাথে ফাংশনটি মূল্যায়ন করা হয়। BUILD ফাইলের মূল্যায়নের পরে, Bazel-এর কাছে ম্যাক্রো সম্পর্কে খুব কম তথ্য রয়েছে: যদি আপনার ম্যাক্রো একটি genrule তৈরি করে, তাহলে Bazel এমন আচরণ করবে যেন আপনি genrule লিখেছেন। ফলস্বরূপ, bazel query শুধুমাত্র উত্পন্ন genrule তালিকা করবে।

একটি নিয়ম একটি ম্যাক্রোর চেয়ে বেশি শক্তিশালী। এটি Bazel অভ্যন্তরীণ অ্যাক্সেস করতে পারে এবং যা ঘটছে তার উপর সম্পূর্ণ নিয়ন্ত্রণ রাখতে পারে। এটি উদাহরণস্বরূপ অন্যান্য নিয়মে তথ্য পাঠাতে পারে।

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

মূল্যায়ন মডেল

একটি বিল্ড তিনটি পর্যায় নিয়ে গঠিত।

  • লোডিং ফেজ । প্রথমে, বিল্ডের জন্য প্রয়োজনীয় সমস্ত এক্সটেনশন এবং সমস্ত BUILD ফাইল লোড করুন এবং মূল্যায়ন করুন। BUILD ফাইলের সঞ্চালন সহজভাবে নিয়মগুলিকে সূচনা করে (প্রতিবার যখন একটি নিয়ম বলা হয়, এটি একটি গ্রাফে যুক্ত হয়)। এখানেই ম্যাক্রো মূল্যায়ন করা হয়।

  • বিশ্লেষণ পর্ব । নিয়মের কোড কার্যকর করা হয় (তাদের implementation ফাংশন), এবং ক্রিয়াগুলি তাত্ক্ষণিক করা হয়। একটি ক্রিয়া বর্ণনা করে কিভাবে ইনপুটগুলির একটি সেট থেকে আউটপুটগুলির একটি সেট তৈরি করা যায়, যেমন "hello.c তে gcc চালান এবং hello.o পান"। প্রকৃত কমান্ডগুলি চালানোর আগে আপনাকে অবশ্যই স্পষ্টভাবে তালিকাভুক্ত করতে হবে যে কোন ফাইলগুলি তৈরি করা হবে। অন্য কথায়, বিশ্লেষণ ফেজ লোডিং ফেজ দ্বারা উত্পন্ন গ্রাফ নেয় এবং একটি কর্ম গ্রাফ তৈরি করে।

  • মৃত্যুদন্ডের পর্যায় । কর্মগুলি চালানো হয়, যখন তাদের অন্তত একটি আউটপুট প্রয়োজন হয়। যদি একটি ফাইল অনুপস্থিত থাকে বা যদি একটি কমান্ড একটি আউটপুট তৈরি করতে ব্যর্থ হয়, বিল্ড ব্যর্থ হয়। এই পর্বে পরীক্ষাও চালানো হয়।

Bazel .bzl ফাইল এবং BUILD ফাইল পড়তে, পার্স এবং মূল্যায়ন করতে সমান্তরালতা ব্যবহার করে। একটি ফাইল প্রতি বিল্ডে সর্বাধিক একবার পড়া হয় এবং মূল্যায়নের ফলাফল ক্যাশে করা হয় এবং পুনরায় ব্যবহার করা হয়। একটি ফাইলের সমস্ত নির্ভরতা ( load() স্টেটমেন্ট) সমাধান হয়ে গেলেই তার মূল্যায়ন করা হয়। ডিজাইনের মাধ্যমে, একটি .bzl ফাইল লোড করার কোন দৃশ্যমান পার্শ্ব-প্রতিক্রিয়া নেই, এটি শুধুমাত্র মান এবং ফাংশন সংজ্ঞায়িত করে।

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

এক্সটেনশন তৈরি করা হচ্ছে

আপনার নিজের এক্সটেনশন লেখার সময় নীচের দুটি লিঙ্ক খুব দরকারী হবে. তাদের নাগালের মধ্যে রাখুন:

সামনে যাচ্ছি

ম্যাক্রো এবং নিয়ম ছাড়াও, আপনি দিক এবং সংগ্রহস্থলের নিয়ম লিখতে চাইতে পারেন।