পাঠ ৭.১

Package এবং Crate

Packages and Crates

Rust-এর module system-এর প্রথম দু'টা শব্দ — crate এবং package। এই পাঠে এদের পার্থক্য এবং cargo new এই দু'টোকে কীভাবে set up করে, সেটা দেখব।

Crate কী?

Crate হলো Rust compiler একসাথে যেটুকু code consider করে — সবচেয়ে ছোট compile unit। rustc-কে একটামাত্র file দিলেও সেটা একটা crate হিসেবেই বিবেচনা করে। Crate-এ module থাকতে পারে, এবং সেই module-গুলো একাধিক file-এ ছড়ানো থাকতে পারে।

Binary crate বনাম library crate

  • Binary crate — যা compile করে executable হয়। CLI tool, server, ইত্যাদি। প্রতিটাতে main function থাকতে হবে — execute করলে সেটাই entry point। আমরা এতদূর যা বানিয়েছি, সব binary crate।
  • Library crate — কোনো main নেই, executable হয় না। এটা শুধু functionality define করে যা অন্য project use করতে পারে। যেমন rand crate। বেশিরভাগ সময় Rustacean যখন "crate" বলে, তখন library-ই বোঝায়।

Crate root

Compiler যেই source file থেকে শুরু করে, সেটা crate root। এটাই তোমার crate-এর root module। Convention অনুযায়ী —

  • src/main.rs — binary crate-এর root।
  • src/lib.rs — library crate-এর root।

Package কী?

Package এক বা একাধিক crate-এর bundle, যা একটা Cargo.toml-এ described। Cargo নিজেই একটা package — যার একটা binary crate (যেটা তুমি cargo command হিসেবে চালাও) এবং একটা library crate (binary-টা যার উপর depend করে) দু'টোই আছে।

Package-এর rule:

  • Library crate সর্বোচ্চ একটি
  • Binary crate যত খুশি।
  • Crate অন্তত একটা থাকতেই হবে।

cargo new দিয়ে package

terminalbash
$ cargo new my-project
     Created binary (application) `my-project` package
$ ls my-project
Cargo.toml
src
$ ls my-project/src
main.rs

Cargo তৈরি করছে — Cargo.toml (package define হলো) এবং src/main.rs (binary crate-এর root)।

লক্ষ্য করো — Cargo.toml-এ src/main.rs-এর কোনো mention নেই। Cargo convention follow করে — ঐ file থাকলেই বুঝে নেয় binary crate-এর root।

Different package configuration

  • শুধু src/main.rs — package-এ একটা binary crate (নাম package-এর সাথে মিল)।
  • src/main.rs + src/lib.rs — package-এ দু'টা crate, একটা binary, একটা library, দু'টোরই নাম package-এর মতো।
  • একাধিক binary crate চাইলে — src/bin/ folder-এ আলাদা file। প্রতিটা file আলাদা binary crate।

এই পাঠ থেকে যা শিখলে

  • Crate = compiler-এর একটা compile unit; binary (executable) বা library।
  • Crate root = compile-এর entry source file — src/main.rs বা src/lib.rs
  • Package = Cargo.toml-যুক্ত এক বা একাধিক crate-এর bundle। Library একটাই, binary যতগুলো খুশি।
  • একাধিক binary src/bin/-এ; convention follow করে Cargo automatic detect করে।