BazelCon 2022 16-17 নভেম্বর নিউ ইয়র্ক এবং অনলাইনে আসছে। নিবন্ধন আজ!
নতুন: 15 নভেম্বর সম্প্রদায় দিবসের জন্য আমাদের সাথে যোগ দিন! বিস্তারিত এবং নিবন্ধন.

বেজেল শব্দকোষ

সেভ করা পৃষ্ঠা গুছিয়ে রাখতে 'সংগ্রহ' ব্যবহার করুন আপনার পছন্দ অনুযায়ী কন্টেন্ট সেভ করুন ও সঠিক বিভাগে রাখুন।

কর্ম

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

আরও দেখুন: নিয়ম ডকুমেন্টেশন

অ্যাকশন ক্যাশে

একটি অন-ডিস্ক ক্যাশে যা তাদের তৈরি আউটপুটগুলিতে সম্পাদিত ক্রিয়াগুলির একটি ম্যাপিং সংরক্ষণ করে। ক্যাশে কী অ্যাকশন কী নামে পরিচিত। Bazel এর বৃদ্ধিশীলতা মডেলের জন্য একটি মূল উপাদান। ক্যাশে আউটপুট বেস ডিরেক্টরিতে সংরক্ষণ করা হয় এবং এইভাবে Bazel সার্ভার পুনরায় চালু হওয়া থেকে বেঁচে থাকে।

অ্যাকশন গ্রাফ

ক্রিয়াগুলির একটি ইন-মেমরি গ্রাফ এবং এই ক্রিয়াগুলি যেগুলি পড়ে এবং তৈরি করে। গ্রাফটিতে উৎস ফাইল (উদাহরণস্বরূপ, ফাইল সিস্টেমে) এবং সেইসাথে তৈরি করা অন্তর্বর্তী/চূড়ান্ত আর্টিফ্যাক্টগুলি অন্তর্ভুক্ত থাকতে পারে যা BUILD ফাইলগুলিতে উল্লেখ করা হয়নি। বিশ্লেষণ পর্বের সময় উত্পাদিত এবং মৃত্যুদন্ডের পর্যায়ে ব্যবহৃত হয়।

অ্যাকশন গ্রাফ ক্যোয়ারী (অ্যাকোয়েরি)

একটি ক্যোয়ারী টুল যা বিল্ড অ্যাকশন নিয়ে প্রশ্ন করতে পারে। এটি বিশ্লেষণ করার ক্ষমতা প্রদান করে কিভাবে বিল্ড নিয়মগুলি প্রকৃত কাজের বিল্ডে অনুবাদ করে।

অ্যাকশন কী

একটি কর্মের ক্যাশে কী। অ্যাকশন মেটাডেটার উপর ভিত্তি করে গণনা করা হয়, যার মধ্যে অ্যাকশন, কম্পাইলার ফ্ল্যাগ, লাইব্রেরি লোকেশন বা সিস্টেম হেডার, অ্যাকশনের উপর নির্ভর করে কার্যকর করার কমান্ড অন্তর্ভুক্ত থাকতে পারে। ব্যাজেলকে নির্ধারকভাবে ক্যাশে বা অকার্যকর করতে সক্ষম করে।

বিশ্লেষণ পর্যায়

নির্মাণের দ্বিতীয় পর্ব। একটি ইন-মেমরি অ্যাকশন গ্রাফ তৈরি করতে BUILD ফাইলে নির্দিষ্ট করা টার্গেট গ্রাফ প্রক্রিয়া করে যা এক্সিকিউশন ফেজ চলাকালীন অ্যাকশনের ক্রম নির্ধারণ করে। এই ধাপে নিয়ম বাস্তবায়ন মূল্যায়ন করা হয়।

আর্টিফ্যাক্ট

একটি উৎস ফাইল বা একটি উত্পন্ন ফাইল. ট্রি আর্টিফ্যাক্ট নামে পরিচিত ফাইলগুলির একটি ডিরেক্টরিও হতে পারে।

একটি আর্টিফ্যাক্ট একাধিক অ্যাকশনের জন্য একটি ইনপুট হতে পারে, কিন্তু শুধুমাত্র একটি অ্যাকশন দ্বারা তৈরি করা আবশ্যক৷

একটি আর্টিফ্যাক্ট যা একটি ফাইল টার্গেটের সাথে সম্পর্কিত একটি লেবেল দ্বারা সম্বোধন করা যেতে পারে।

দৃষ্টিভঙ্গি

তাদের নির্ভরতাগুলিতে অতিরিক্ত ক্রিয়া তৈরি করার জন্য নিয়মগুলির একটি প্রক্রিয়া। উদাহরণ স্বরূপ, লক্ষ্য A যদি B এর উপর নির্ভর করে, তাহলে কেউ A এর উপর একটি দিক প্রয়োগ করতে পারে যা B এর উপর নির্ভরতার প্রান্ত অতিক্রম করে এবং অতিরিক্ত আউটপুট ফাইল তৈরি ও সংগ্রহ করতে B এ অতিরিক্ত ক্রিয়া চালায়। এই অতিরিক্ত ক্রিয়াগুলি ক্যাশে করা হয় এবং একই দিকের প্রয়োজন লক্ষ্যগুলির মধ্যে পুনরায় ব্যবহার করা হয়। aspect() স্টারলার্ক বিল্ড এপিআই ফাংশন দিয়ে তৈরি করা হয়েছে। ব্যবহার করা যেতে পারে, উদাহরণস্বরূপ, IDE-এর জন্য মেটাডেটা তৈরি করতে এবং লিন্টিংয়ের জন্য অ্যাকশন তৈরি করতে।

আরও দেখুন: দৃষ্টিভঙ্গি ডকুমেন্টেশন

দৃষ্টিভঙ্গি-অন-দৃষ্টি

একটি রচনা প্রক্রিয়া যার মাধ্যমে দিকগুলি অন্যান্য দিকগুলির ফলাফলগুলিতে প্রয়োগ করা যেতে পারে। উদাহরণস্বরূপ, একটি দিক যা IDEs দ্বারা ব্যবহারের জন্য তথ্য তৈরি করে তা একটি দিকটির উপরে প্রয়োগ করা যেতে পারে যা একটি প্রোটো থেকে .java ফাইল তৈরি করে।

একটি দিক A এর জন্য B এর উপরে প্রয়োগ করার জন্য, B তার প্রদানকারী বৈশিষ্ট্যে যে প্রদানকারীর বিজ্ঞাপন দেয় তাদের অবশ্যই A তার required_aspect_providers provides এট্রিবিউটে যা চায় তা অবশ্যই মেলে।

বৈশিষ্ট্য

একটি নিয়মের একটি প্যারামিটার, প্রতি-টার্গেট বিল্ড তথ্য প্রকাশ করতে ব্যবহৃত হয়। উদাহরণগুলির মধ্যে রয়েছে srcs , deps এবং copts , যা যথাক্রমে একটি লক্ষ্যের উত্স ফাইল, নির্ভরতা এবং কাস্টম কম্পাইলার বিকল্পগুলি ঘোষণা করে। একটি নির্দিষ্ট লক্ষ্যের জন্য উপলব্ধ নির্দিষ্ট বৈশিষ্ট্যগুলি তার নিয়মের প্রকারের উপর নির্ভর করে।

.bazelrc

Bazel এর কনফিগারেশন ফাইলটি স্টার্টআপ ফ্ল্যাগ এবং কমান্ড ফ্ল্যাগগুলির জন্য ডিফল্ট মান পরিবর্তন করতে এবং বিকল্পগুলির সাধারণ গোষ্ঠীগুলিকে সংজ্ঞায়িত করতে ব্যবহৃত হয় যা একটি --config পতাকা ব্যবহার করে Bazel কমান্ড লাইনে একসাথে সেট করা যেতে পারে। Bazel একাধিক bazelrc ফাইল (সিস্টেমওয়াইড, প্রতি-ওয়ার্কস্পেস, প্রতি-ব্যবহারকারী, বা একটি কাস্টম অবস্থান থেকে) থেকে সেটিংস একত্রিত করতে পারে এবং একটি bazelrc ফাইল অন্যান্য bazelrc ফাইল থেকে সেটিংস আমদানি করতে পারে।

ব্লেজ

Bazel-এর Google-অভ্যন্তরীণ সংস্করণ। Google এর মনো-রিপোজিটরির জন্য প্রধান বিল্ড সিস্টেম।

ফাইল তৈরি করুন

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

BUILD.bazel ফাইল

BUILD ফাইল দেখুন। একই ডিরেক্টরিতে একটি BUILD ফাইলের উপর অগ্রাধিকার নেয়।

.bzl ফাইল

একটি ফাইল যা স্টারলার্ক এ লেখা নিয়ম, ম্যাক্রো এবং ধ্রুবক সংজ্ঞায়িত করে। এইগুলি তারপর load() ফাংশন ব্যবহার করে BUILD ফাইলগুলিতে আমদানি করা যেতে পারে।

গ্রাফ তৈরি করুন

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

বিল্ড সেটিং

একটি স্টারলার্ক-সংজ্ঞায়িত কনফিগারেশনের অংশ। ট্রানজিশন একটি সাবগ্রাফের কনফিগারেশন পরিবর্তন করতে বিল্ড সেটিংস সেট করতে পারে। কমান্ড-লাইন পতাকা হিসাবে ব্যবহারকারীর কাছে প্রকাশ করা হলে, এটি একটি বিল্ড পতাকা হিসাবেও পরিচিত।

পরিষ্কার বিল্ড

একটি বিল্ড যা আগের বিল্ডের ফলাফল ব্যবহার করে না। এটি সাধারণত একটি বর্ধিত বিল্ডের চেয়ে ধীর তবে সাধারণত এটিকে আরও সঠিক বলে মনে করা হয়। বেজেল গ্যারান্টি দেয় পরিষ্কার এবং ক্রমবর্ধমান উভয় বিল্ড সবসময় সঠিক।

ক্লায়েন্ট-সার্ভার মডেল

bazel কমান্ড-লাইন ক্লায়েন্ট স্বয়ংক্রিয়ভাবে Bazel কমান্ড চালানোর জন্য স্থানীয় মেশিনে একটি পটভূমি সার্ভার শুরু করে। সার্ভারটি কমান্ড জুড়ে থাকে কিন্তু একটি নিষ্ক্রিয়তার পর স্বয়ংক্রিয়ভাবে বন্ধ হয়ে যায় (বা স্পষ্টভাবে বেজেল শাটডাউনের মাধ্যমে)। ব্যাজেলকে একটি সার্ভার এবং ক্লায়েন্টে বিভক্ত করা JVM স্টার্টআপের সময়কে অমর্টাইজ করতে সাহায্য করে এবং দ্রুত ক্রমবর্ধমান বিল্ডকে সমর্থন করে কারণ অ্যাকশন গ্রাফটি কমান্ড জুড়ে মেমরিতে থাকে।

আদেশ

bazel build , bazel test , bazel run , এবং bazel query মতো বিভিন্ন ব্যাজেল ফাংশন চালু করতে কমান্ড লাইনে ব্যবহৃত হয়।

কমান্ড পতাকা

একটি কমান্ডের জন্য নির্দিষ্ট পতাকার একটি সেট। কমান্ড ফ্ল্যাগগুলি কমান্ডের পরে নির্দিষ্ট করা হয় ( bazel build <command flags> )। পতাকা এক বা একাধিক কমান্ডের জন্য প্রযোজ্য হতে পারে। উদাহরণস্বরূপ, --configure একটি পতাকা বিশেষভাবে bazel sync কমান্ডের জন্য, কিন্তু --keep_going sync , build , test এবং আরও অনেক কিছুর জন্য প্রযোজ্য। ফ্ল্যাগগুলি প্রায়শই কনফিগারেশনের উদ্দেশ্যে ব্যবহার করা হয়, তাই পতাকার মান পরিবর্তনের ফলে ব্যাজেল ইন-মেমরি গ্রাফগুলিকে বাতিল করতে পারে এবং বিশ্লেষণের পর্যায়টি পুনরায় চালু করতে পারে।

কনফিগারেশন

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

আরও দেখুন: কনফিগারেশন

কনফিগারেশন ছাঁটাই

একটি লক্ষ্য আসলে প্রয়োজন শুধুমাত্র কনফিগারেশন টুকরা অন্তর্ভুক্ত করার প্রক্রিয়া. উদাহরণস্বরূপ, আপনি যদি C++ নির্ভরতা //:c সহ জাভা বাইনারি //:j তৈরি করেন, তাহলে //: //:c কনফিগারেশনে --javacopt এর মান অন্তর্ভুক্ত করা অযথা কারণ --javacopt পরিবর্তন করা অপ্রয়োজনীয়ভাবে C++ বিল্ড ক্যাশেবিলিটি ভেঙে দেয়।

কনফিগার করা প্রশ্ন (cquery)

একটি ক্যোয়ারী টুল যা কনফিগার করা লক্ষ্যগুলির উপর প্রশ্ন করে ( বিশ্লেষণ পর্ব সম্পূর্ণ হওয়ার পরে)। এর মানে select() এবং বিল্ড পতাকা (যেমন --platforms ) সঠিকভাবে ফলাফলে প্রতিফলিত হয়।

আরও দেখুন: cquery ডকুমেন্টেশন

কনফিগার করা লক্ষ্য

একটি কনফিগারেশনের সাথে একটি লক্ষ্য মূল্যায়নের ফলাফল। বিশ্লেষণ পর্বটি বিল্ডের বিকল্পগুলিকে লক্ষ্যগুলির সাথে একত্রিত করে তৈরি করে যা নির্মাণ করা প্রয়োজন। উদাহরণস্বরূপ, যদি //:foo একই বিল্ডে দুটি ভিন্ন আর্কিটেকচারের জন্য তৈরি করে, তাহলে এর দুটি কনফিগার করা লক্ষ্য রয়েছে: <//:foo, x86> এবং <//:foo, arm>

যথার্থতা

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

নির্ভরতা

দুটি লক্ষ্যের মধ্যে একটি নির্দেশিত প্রান্ত। লক্ষ্য //:foo এর লক্ষ্য //:bar এর উপর লক্ষ্য নির্ভরতা থাকে যদি //:foo এর অ্যাট্রিবিউট মানগুলিতে //:bar এর রেফারেন্স থাকে। //:foo এর //:bar এর উপর একটি কর্ম নির্ভরতা থাকে যদি //:foo এ একটি অ্যাকশন //:bar এ একটি অ্যাকশন দ্বারা তৈরি একটি ইনপুট আর্টিফ্যাক্টের উপর নির্ভর করে।

ডিপসেট

ট্রানজিটিভ নির্ভরতার উপর ডেটা সংগ্রহের জন্য একটি ডেটা কাঠামো। অপ্টিমাইজ করা হয়েছে যাতে ডিপসেটগুলি একত্রিত করা সময় এবং স্থান দক্ষ হয়, কারণ এটি খুব বড় ডিপসেট (শত হাজার ফাইল) থাকা সাধারণ ব্যাপার। স্থান দক্ষতার কারণে অন্যান্য ডিপসেটগুলিকে পুনরাবৃত্তিমূলকভাবে উল্লেখ করার জন্য প্রয়োগ করা হয়েছে। নিয়ম বাস্তবায়নের ডিপসেটগুলিকে তালিকায় রূপান্তর করে "সমতল" করা উচিত নয় যদি না নিয়মটি বিল্ড গ্রাফের শীর্ষ স্তরে থাকে। বড় ডিপসেট সমতল করার ফলে প্রচুর মেমরি খরচ হয়। Bazel এর অভ্যন্তরীণ বাস্তবায়নে নেস্টেড সেট হিসাবেও পরিচিত।

আরও দেখুন: ডিপসেট ডকুমেন্টেশন

ডিস্ক ক্যাশে

দূরবর্তী ক্যাশিং বৈশিষ্ট্যের জন্য একটি স্থানীয় অন-ডিস্ক ব্লব স্টোর। একটি প্রকৃত দূরবর্তী ব্লব স্টোরের সাথে একত্রে ব্যবহার করা যেতে পারে।

ডিসডির

Bazel অন্যথায় ভান্ডারের নিয়ম ব্যবহার করে ইন্টারনেট থেকে আনতে পারে এমন ফাইল সমন্বিত একটি শুধুমাত্র পঠনযোগ্য ডিরেক্টরি৷ সম্পূর্ণ অফলাইনে চালানোর জন্য বিল্ডগুলিকে সক্ষম করে৷

গতিশীল মৃত্যুদন্ড

একটি মৃত্যুদন্ড কার্যকর করার কৌশল যা বিভিন্ন হিউরিস্টিকসের উপর ভিত্তি করে স্থানীয় এবং দূরবর্তী মৃত্যুদন্ডের মধ্যে নির্বাচন করে এবং দ্রুত সফল পদ্ধতির কার্যকরী ফলাফল ব্যবহার করে। কিছু ক্রিয়া স্থানীয়ভাবে দ্রুত কার্যকর করা হয় (উদাহরণস্বরূপ, লিঙ্ক করা) এবং অন্যগুলি দূরবর্তীভাবে দ্রুত হয় (উদাহরণস্বরূপ, অত্যন্ত সমান্তরাল সংকলন)। একটি গতিশীল কার্যকরী কৌশল সর্বোত্তম সম্ভাব্য ক্রমবর্ধমান এবং পরিষ্কার বিল্ড সময় প্রদান করতে পারে।

মৃত্যুদন্ডের পর্যায়

একটি নির্মাণের তৃতীয় পর্যায়। বিশ্লেষণ পর্বের সময় তৈরি করা অ্যাকশন গ্রাফে ক্রিয়া সম্পাদন করে। এই ক্রিয়াগুলি নিদর্শনগুলি পড়তে এবং লিখতে এক্সিকিউটেবলদের (কম্পাইলার, স্ক্রিপ্ট) আহ্বান করে। স্পন কৌশলগুলি নিয়ন্ত্রণ করে যে এই ক্রিয়াগুলি কীভাবে সম্পাদিত হয়: স্থানীয়ভাবে, দূরবর্তীভাবে, গতিশীলভাবে, স্যান্ডবক্সড, ডকার এবং আরও অনেক কিছু।

এক্সিকিউশন রুট

ওয়ার্কস্পেসের আউটপুট বেস ডিরেক্টরির একটি ডিরেক্টরি যেখানে নন- স্যান্ডবক্সযুক্ত বিল্ডগুলিতে স্থানীয় ক্রিয়াগুলি চালানো হয়। ডিরেক্টরির বিষয়বস্তুগুলি বেশিরভাগই ওয়ার্কস্পেস থেকে ইনপুট আর্টিফ্যাক্টের সিমলিঙ্ক। এক্সিকিউশন রুটে অন্যান্য ইনপুট হিসাবে বাহ্যিক সংগ্রহস্থলের সিমলিংক এবং আউটপুটগুলি সঞ্চয় করার জন্য bazel-out ডিরেক্টরি রয়েছে। একটি বিল্ড নির্ভর করে এমন প্যাকেজগুলির ট্রানজিটিভ ক্লোজার প্রতিনিধিত্ব করে এমন ডিরেক্টরিগুলির একটি সিমলিংক বন তৈরি করে লোডিং পর্বের সময় প্রস্তুত করা হয়। কমান্ড লাইনে bazel info execution_root দিয়ে অ্যাক্সেসযোগ্য।

ফাইল

আর্টিফ্যাক্ট দেখুন।

হারমেটিসিটি

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

ক্রমবর্ধমান বিল্ড

একটি বর্ধিত বিল্ড বিল্ড টাইম এবং রিসোর্স ব্যবহার কমাতে আগের বিল্ডগুলির ফলাফলগুলিকে পুনরায় ব্যবহার করে। নির্ভরতা চেকিং এবং ক্যাশিং এর লক্ষ্য এই ধরণের বিল্ডের জন্য সঠিক ফলাফল তৈরি করা। একটি বর্ধিত বিল্ড একটি পরিষ্কার বিল্ডের বিপরীত।

লেবেল

একটি লক্ষ্যের জন্য একটি শনাক্তকারী। একটি সম্পূর্ণ-যোগ্য লেবেল যেমন //path/to/package:target target-এর মধ্যে থাকে // ওয়ার্কস্পেস রুট ডিরেক্টরি চিহ্নিত করতে, path/to/package নির্দেশিকা হিসেবে যেখানে BUILD ফাইল টার্গেট ঘোষণা করা থাকে এবং :target নাম হিসেবে উল্লিখিত BUILD ফাইলে ঘোষিত লক্ষ্যের। এছাড়াও @my_repository//<..> সাথে উপসর্গ লাগানো হতে পারে যে my_repository নামে একটি ]বাহ্যিক সংগ্রহস্থলে] ঘোষণা করা হয়েছে।

লোডিং ফেজ

বিল্ডের প্রথম ধাপ যেখানে ব্যাজেল ওয়ার্কস্পেস, BUILD , এবং WORKSPACE .bzl প্যাকেজ তৈরি করতে পার্স করে। ম্যাক্রো এবং কিছু ফাংশন যেমন glob() এই পর্বে মূল্যায়ন করা হয়। বিল্ডের দ্বিতীয় পর্বের সাথে ইন্টারলিভড, বিশ্লেষণ পর্ব , একটি লক্ষ্য গ্রাফ তৈরি করতে।

ম্যাক্রো

একটি একক স্টারলার্ক ফাংশনের অধীনে একসাথে একাধিক নিয়ম লক্ষ্য ঘোষণা রচনা করার একটি প্রক্রিয়া। BUILD ফাইল জুড়ে সাধারণ নিয়ম ঘোষণার ধরণগুলি পুনরায় ব্যবহার করা সক্ষম করে৷ লোডিং পর্বের সময় অন্তর্নিহিত নিয়ম লক্ষ্য ঘোষণায় প্রসারিত।

আরও দেখুন: ম্যাক্রো ডকুমেন্টেশন

স্মৃতিসংক্রান্ত

একটি সংক্ষিপ্ত, মানব-পঠনযোগ্য স্ট্রিং একটি নিয়ম লেখক দ্বারা নির্বাচন করা হয়েছে যাতে নিয়মে একটি ক্রিয়া কী করছে তা দ্রুত বোঝা যায়। স্পন কৌশল নির্বাচনের জন্য স্মৃতিবিদ্যা শনাক্তকারী হিসাবে ব্যবহার করা যেতে পারে। অ্যাকশন Javac কিছু উদাহরণ হল জাভা নিয়ম থেকে CppCompile , C++ নিয়ম থেকে CppCompile এবং Android নিয়ম থেকে AndroidManifestMerger

দেশীয় নিয়ম

নিয়ম যা বেজেলে তৈরি এবং জাভাতে প্রয়োগ করা হয়। এই ধরনের নিয়মগুলি .bzl ফাইলগুলিতে নেটিভ মডিউলের ফাংশন হিসাবে উপস্থিত হয় (উদাহরণস্বরূপ, native.cc_library বা native.java_library )। ব্যবহারকারী-সংজ্ঞায়িত নিয়ম (অ-নেটিভ) Starlark ব্যবহার করে তৈরি করা হয়।

আউটপুট বেস

Bazel আউটপুট ফাইল সংরক্ষণ করার জন্য একটি ওয়ার্কস্পেস -নির্দিষ্ট ডিরেক্টরি। ওয়ার্কস্পেস এর সোর্স ট্রি থেকে আউটপুট আলাদা করতে ব্যবহৃত হয়। আউটপুট ইউজার রুটে অবস্থিত।

আউটপুট গ্রুপ

Bazel একটি লক্ষ্য নির্মাণের কাজ শেষ করার সময় ফাইলগুলির একটি গ্রুপ যা নির্মিত হবে বলে আশা করা হচ্ছে। নিয়মগুলি তাদের স্বাভাবিক আউটপুটগুলিকে "ডিফল্ট আউটপুট গ্রুপে" রাখে (যেমন cc_library এর .jar ফাইল, java_library এবং .so .a টার্গেটের জন্য)। ডিফল্ট আউটপুট গ্রুপ হল আউটপুট গ্রুপ যার আর্টিফ্যাক্ট তৈরি করা হয় যখন কমান্ড লাইনে একটি লক্ষ্য অনুরোধ করা হয়। নিয়মগুলি আরও নামযুক্ত আউটপুট গোষ্ঠীগুলিকে সংজ্ঞায়িত করতে পারে যা BUILD ফাইল ( filegroup নিয়ম) বা কমান্ড লাইনে ( --output_groups পতাকা) স্পষ্টভাবে নির্দিষ্ট করা যেতে পারে।

আউটপুট ব্যবহারকারী রুট

Bazel এর আউটপুট সংরক্ষণ করার জন্য একটি ব্যবহারকারী-নির্দিষ্ট ডিরেক্টরি। ডিরেক্টরির নামটি ব্যবহারকারীর সিস্টেম ব্যবহারকারীর নাম থেকে নেওয়া হয়েছে। একাধিক ব্যবহারকারী একই সময়ে সিস্টেমে একই প্রকল্প নির্মাণ করলে আউটপুট ফাইল সংঘর্ষ প্রতিরোধ করে। পৃথক ওয়ার্কস্পেসের আউটপুট তৈরির সাথে সম্পর্কিত সাবডিরেক্টরি রয়েছে, যা আউটপুট বেস নামেও পরিচিত।

প্যাকেজ

একটি BUILD ফাইল দ্বারা সংজ্ঞায়িত লক্ষ্যগুলির সেট৷ একটি প্যাকেজের নাম হল BUILD ফাইলের পাথ ওয়ার্কস্পেস রুটের সাপেক্ষে। একটি প্যাকেজে সাবপ্যাকেজ বা সাবডিরেক্টরি থাকতে পারে যার মধ্যে BUILD ফাইল রয়েছে, এইভাবে একটি প্যাকেজ শ্রেণিবিন্যাস গঠন করা হয়।

প্যাকেজ গ্রুপ

একটি লক্ষ্য প্যাকেজের একটি সেট প্রতিনিধিত্ব করে। প্রায়ই visibility বৈশিষ্ট্য মান ব্যবহার করা হয়.

প্ল্যাটফর্ম

একটি বিল্ডের সাথে জড়িত একটি "মেশিন টাইপ"। এর মধ্যে রয়েছে মেশিন ব্যাজেল ("হোস্ট" প্ল্যাটফর্মে চলে), মেশিন বিল্ড টুলস এক্সিকিউট অন ("exec" প্ল্যাটফর্ম) এবং মেশিনের লক্ষ্যগুলি ("টার্গেট প্ল্যাটফর্ম") এর জন্য তৈরি করা হয়।

প্রদানকারী

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

আরও দেখুন: প্রদানকারী ডকুমেন্টেশন

প্রশ্ন (ধারণা)

লক্ষ্য বৈশিষ্ট্য এবং নির্ভরতা কাঠামো বোঝার জন্য একটি বিল্ড গ্রাফ বিশ্লেষণ করার প্রক্রিয়া। Bazel তিনটি কোয়েরি ভেরিয়েন্ট সমর্থন করে: query , cquery এবং aquery

প্রশ্ন (আদেশ)

একটি ক্যোয়ারী টুল যা বিল্ডের পোস্ট- লোডিং ফেজ টার্গেট গ্রাফের উপর কাজ করে। এটি তুলনামূলকভাবে দ্রুত, কিন্তু select() , পতাকা তৈরি , শিল্পকর্ম বা বিল্ড অ্যাকশনের প্রভাব বিশ্লেষণ করতে পারে না।

আরও দেখুন: ক্যোয়ারী হাউ-টু , কোয়েরি রেফারেন্স

সংগ্রহস্থল ক্যাশে

বিল্ডের জন্য Bazel দ্বারা ডাউনলোড করা ফাইলগুলির একটি শেয়ার করা বিষয়বস্তু-ঠিকানাযোগ্য ক্যাশে, ওয়ার্কস্পেস জুড়ে শেয়ার করা যায়। প্রাথমিক ডাউনলোডের পরে অফলাইন বিল্ডগুলি সক্ষম করে৷ সাধারণত http_archive এবং repository_ctx.download এর মত repository_ctx.download নিয়ম API-এর মাধ্যমে ডাউনলোড করা ফাইলগুলিকে ক্যাশে করতে ব্যবহৃত হয়। ফাইলগুলি কেবল তখনই ক্যাশে করা হয় যদি তাদের SHA-256 চেকসামগুলি ডাউনলোডের জন্য নির্দিষ্ট করা থাকে৷

প্রজননযোগ্যতা

একটি বিল্ড বা পরীক্ষার সম্পত্তি যা বিল্ড বা পরীক্ষার জন্য ইনপুটগুলির একটি সেট সর্বদা সময়, পদ্ধতি বা পরিবেশ নির্বিশেষে প্রতিবার একই সেট আউটপুট তৈরি করবে। মনে রাখবেন যে এটি অগত্যা বোঝায় না যে আউটপুটগুলি সঠিক বা পছন্দসই আউটপুট।

নিয়ম

একটি BUILD ফাইলে নিয়ম লক্ষ্য নির্ধারণের জন্য একটি স্কিমা, যেমন cc_library । একটি BUILD ফাইল লেখকের দৃষ্টিকোণ থেকে, একটি নিয়মে বৈশিষ্ট্য এবং ব্ল্যাক বক্স যুক্তির একটি সেট থাকে। যুক্তিটি নিয়ম লক্ষ্যকে বলে যে কীভাবে আউটপুট আর্টিফ্যাক্ট তৈরি করা যায় এবং অন্যান্য নিয়ম লক্ষ্যে তথ্য প্রেরণ করা যায়। .bzl লেখকদের দৃষ্টিকোণ থেকে, নিয়ম হল নতুন প্রোগ্রামিং ভাষা এবং পরিবেশকে সমর্থন করার জন্য Bazel প্রসারিত করার প্রাথমিক উপায়।

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

আরও দেখুন: নিয়ম ডকুমেন্টেশন

নিয়ম টার্গেট

একটি লক্ষ্য যা একটি নিয়মের উদাহরণ। ফাইল টার্গেট এবং প্যাকেজ গ্রুপের সাথে বৈপরীত্য। নিয়মের সাথে বিভ্রান্ত হবেন না।

রানফাইলস

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

আরও দেখুন: রানফাইলস ডকুমেন্টেশন

স্যান্ডবক্সিং

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

স্কাইফ্রেম

Skyframe হল Bazel-এর মূল সমান্তরাল, কার্যকরী এবং ক্রমবর্ধমান মূল্যায়ন কাঠামো।

স্ট্যাম্পিং

Bazel-নির্মিত শিল্পকর্মগুলিতে অতিরিক্ত তথ্য এম্বেড করার একটি বৈশিষ্ট্য৷ উদাহরণস্বরূপ, এটি সোর্স কন্ট্রোল, বিল্ড টাইম এবং অন্যান্য ওয়ার্কস্পেস বা রিলিজ বিল্ডের জন্য পরিবেশ-সম্পর্কিত তথ্যের জন্য ব্যবহার করা যেতে পারে। --workspace_status_command পতাকা এবং স্ট্যাম্প বৈশিষ্ট্য সমর্থন করে এমন নিয়মগুলির মাধ্যমে সক্ষম করুন৷

স্টারলার্ক

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

আরও দেখুন: স্টারলার্ক ভাষার ডকুমেন্টেশন

স্টার্টআপ পতাকা

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

টার্গেট

একটি বস্তু যা একটি BUILD ফাইলে সংজ্ঞায়িত করা হয় এবং একটি লেবেল দ্বারা চিহ্নিত করা হয়। লক্ষ্যগুলি শেষ ব্যবহারকারীর দৃষ্টিকোণ থেকে একটি কর্মক্ষেত্রের নির্মাণযোগ্য ইউনিটগুলিকে উপস্থাপন করে।

একটি নিয়ম তাৎক্ষণিকভাবে ঘোষিত একটি লক্ষ্যকে নিয়ম লক্ষ্য বলে। নিয়মের উপর নির্ভর করে, এগুলি চালানোর যোগ্য (যেমন cc_binary ) বা পরীক্ষাযোগ্য (যেমন cc_test ) হতে পারে। নিয়ম লক্ষ্যগুলি সাধারণত তাদের বৈশিষ্ট্যগুলির মাধ্যমে অন্যান্য লক্ষ্যগুলির উপর নির্ভর করে (যেমন deps ); এই নির্ভরতাগুলি লক্ষ্য গ্রাফের ভিত্তি তৈরি করে।

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

লোডিং পর্বের সময় লক্ষ্যগুলি আবিষ্কৃত হয়। বিশ্লেষণ পর্বের সময়, লক্ষ্যগুলি কনফিগার করা লক্ষ্যগুলি গঠনের জন্য বিল্ড কনফিগারেশনের সাথে যুক্ত থাকে।

লক্ষ্য গ্রাফ

লক্ষ্য এবং তাদের নির্ভরতার একটি ইন-মেমরি গ্রাফ। লোডিং পর্যায়ে উত্পাদিত এবং বিশ্লেষণ পর্যায়ে একটি ইনপুট হিসাবে ব্যবহার করা হয়।

লক্ষ্য প্যাটার্ন

কমান্ড লাইনে লক্ষ্যগুলির একটি গ্রুপ নির্দিষ্ট করার একটি উপায়। সাধারণত ব্যবহৃত নিদর্শনগুলি হল :all (সমস্ত নিয়ম লক্ষ্য), :* (সমস্ত নিয়ম + ফাইল লক্ষ্য), ... (বর্তমান প্যাকেজ এবং সমস্ত সাবপ্যাকেজ পুনরাবৃত্তিমূলকভাবে)। সংমিশ্রণে ব্যবহার করা যেতে পারে, উদাহরণস্বরূপ, //...:* মানে সমস্ত প্যাকেজে সমস্ত নিয়ম এবং ফাইল লক্ষ্যগুলি কর্মক্ষেত্রের মূল থেকে পুনরাবৃত্তিমূলকভাবে।

টেস্ট

নিয়ম লক্ষ্যগুলি পরীক্ষার নিয়মগুলি থেকে তাত্ক্ষণিকভাবে তৈরি করা হয়েছে এবং সেইজন্য একটি পরীক্ষা সম্পাদনযোগ্য রয়েছে৷ এক্সিকিউটেবলের সমাপ্তি থেকে শূন্যের একটি রিটার্ন কোড পরীক্ষার সাফল্য নির্দেশ করে। বেজেল এবং পরীক্ষার মধ্যে সঠিক চুক্তি (যেমন পরীক্ষার পরিবেশের পরিবর্তনশীল, পরীক্ষার ফলাফল সংগ্রহের পদ্ধতি) টেস্ট এনসাইক্লোপিডিয়াতে উল্লেখ করা হয়েছে।

টুলচেইন

একটি ভাষার জন্য আউটপুট তৈরি করার জন্য সরঞ্জামগুলির একটি সেট। সাধারণত, একটি টুলচেইনে কম্পাইলার, লিঙ্কার, ইন্টারপ্রেটার বা/এবং লিন্টার থাকে। একটি টুলচেন প্ল্যাটফর্ম অনুসারে পরিবর্তিত হতে পারে, অর্থাৎ, একটি ইউনিক্স কম্পাইলার টুলচেনের উপাদানগুলি উইন্ডোজ ভেরিয়েন্টের জন্য আলাদা হতে পারে, যদিও টুলচেন একই ভাষার জন্য। প্ল্যাটফর্মের জন্য সঠিক টুলচেন নির্বাচন করা টুলচেইন রেজোলিউশন হিসাবে পরিচিত।

টপ লেভেল টার্গেট

একটি বিল্ড টার্গেট শীর্ষ-স্তরের হয় যদি এটি Bazel কমান্ড লাইনে অনুরোধ করা হয়। উদাহরণস্বরূপ, যদি //:foo নির্ভর করে //:bar , এবং bazel build //:foo বলা হয়, তাহলে এই বিল্ডের জন্য, //:foo হল টপ-লেভেল, এবং //:bar টপ-লেভেল নয় , যদিও উভয় লক্ষ্যমাত্রা নির্মাণ করা প্রয়োজন হবে। শীর্ষ-স্তরের এবং নন-টপ-লেভেল লক্ষ্যগুলির মধ্যে একটি গুরুত্বপূর্ণ পার্থক্য হল যে Bazel কমান্ড লাইনে (অথবা .bazelrc এর মাধ্যমে) সেট করা কমান্ড ফ্ল্যাগগুলি শীর্ষ-স্তরের লক্ষ্যগুলির জন্য কনফিগারেশন সেট করবে, কিন্তু অ-এর জন্য একটি ট্রানজিশন দ্বারা পরিবর্তন করা যেতে পারে। শীর্ষ-স্তরের লক্ষ্য।

উত্তরণ

একটি মান থেকে অন্য মান কনফিগারেশন অবস্থা একটি ম্যাপিং. বিল্ড গ্রাফে লক্ষ্যগুলিকে বিভিন্ন কনফিগারেশনের জন্য সক্ষম করে, এমনকি যদি সেগুলি একই নিয়ম থেকে ইনস্ট্যান্ট করা হয়। ট্রানজিশনের একটি সাধারণ ব্যবহার হল বিভক্ত ট্রানজিশনের সাথে, যেখানে লক্ষ্য গ্রাফের কিছু অংশ প্রতিটি কাঁটাচামচের জন্য স্বতন্ত্র কনফিগারেশনের সাথে কাঁটাযুক্ত করা হয়। উদাহরণস্বরূপ, একটি একক বিল্ডে বিভক্ত রূপান্তর ব্যবহার করে ARM এবং x86-এর জন্য সংকলিত নেটিভ বাইনারিগুলির সাথে কেউ একটি Android APK তৈরি করতে পারে।

আরও দেখুন: ব্যবহারকারী-সংজ্ঞায়িত রূপান্তর

গাছের নিদর্শন

একটি আর্টিফ্যাক্ট যা ফাইলের একটি সংগ্রহের প্রতিনিধিত্ব করে। যেহেতু এই ফাইলগুলি নিজেরাই আর্টিফ্যাক্ট নয়, সেহেতু তাদের উপর পরিচালিত একটি অ্যাকশন অবশ্যই ট্রি আর্টিফ্যাক্টটিকে তার ইনপুট বা আউটপুট হিসাবে নিবন্ধন করতে হবে।

দৃশ্যমানতা

বিল্ড সিস্টেমে অবাঞ্ছিত নির্ভরতা রোধ করার জন্য দুটি প্রক্রিয়ার মধ্যে একটি: একটি লক্ষ্য অন্য লক্ষ্যগুলির উপর নির্ভর করতে পারে কিনা তা নিয়ন্ত্রণের জন্য লক্ষ্য দৃশ্যমানতা ; এবং একটি BUILD বা .bzl ফাইল একটি প্রদত্ত .bzl ফাইল লোড করতে পারে কিনা তা নিয়ন্ত্রণের জন্য দৃশ্যমানতা লোড করুন। প্রসঙ্গ ছাড়া, সাধারণত "দৃশ্যমানতা" লক্ষ্য দৃশ্যমানতা বোঝায়।

আরও দেখুন: দৃশ্যমানতা ডকুমেন্টেশন

কর্মক্ষেত্র

আপনি যে সফ্টওয়্যারটি তৈরি করতে চান তার জন্য একটি WORKSPACE ফাইল এবং সোর্স কোড ধারণকারী একটি ডিরেক্টরি৷ // দিয়ে শুরু হওয়া লেবেলগুলি ওয়ার্কস্পেস ডিরেক্টরির সাথে সম্পর্কিত।

ওয়ার্কস্পেস ফাইল

একটি ওয়ার্কস্পেস হতে একটি ডিরেক্টরি সংজ্ঞায়িত করে। ফাইলটি খালি হতে পারে, যদিও এতে সাধারণত নেটওয়ার্ক বা স্থানীয় ফাইল সিস্টেম থেকে অতিরিক্ত নির্ভরতা আনতে বাহ্যিক সংগ্রহস্থলের ঘোষণা থাকে।