পাঠ ১৪.১

Release profile দিয়ে build customize করা

Customizing Builds with Release Profiles

Rust-এ release profile হলো predefined, customizable configuration — compilation-এর behaviour নিয়ন্ত্রণ করতে কাজে লাগে। প্রতিটা profile আলাদা ভাবে configure করা যায়, তাই development আর production-এর প্রয়োজন আলাদা ভাবে পূরণ করা সহজ।

দু'টা main profile

Cargo দু'টা profile default-এ দেয়:

  • devcargo build run করলে এটাই use হয়। Development-এর জন্য ভালো default।
  • releasecargo build --release run করলে use হয়। Production build-এর জন্য optimize।
terminalbash
$ cargo build
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.00s

$ cargo build --release
    Finished `release` profile [optimized] target(s) in 0.32s

Output-এ Cargo লেখে কোন profile ব্যবহৃত হলো — "unoptimized + debuginfo" মানে dev, "optimized" মানে release।

Default settings

Cargo-র প্রতিটা profile-এর জন্য default settings থাকে। তুমি Cargo.toml-এ [profile.*] section না দিলে এই default-গুলোই apply হবে। প্রয়োজনে যেকোনো subset override করা যায়।

Cargo.tomltoml
[profile.dev]
opt-level = 0

[profile.release]
opt-level = 3

opt-level

opt-level setting controls Rust কতটা optimization apply করবে। Range — 0 থেকে 3

  • opt-level = 0 (dev) — কম optimization। Compile fast, কিন্তু runtime ধীর।
  • opt-level = 3 (release) — maximum optimization। Compile সময় বেশি, কিন্তু runtime fast।

কেন এই difference? — Development-এ আমরা বার বার compile করি, তাই compile fast হওয়া দরকার। Release build একবার করেই অনেক বার run হয়, তাই compile-এ বেশি সময় ক্ষতি না।

Default override করা

Default-এর কোনো setting পছন্দ না হলে Cargo.toml-এ override করো। যেমন — dev-এ একটু বেশি optimization চাইলে:

Cargo.tomltoml
[profile.dev]
opt-level = 1

এতে cargo build run করলে Cargo dev-এর সব default নেবে, শুধু opt-level 1 হিসেবে use করবে। Default 0 থেকে বেশি optimization, কিন্তু release-এর 3-এর চেয়ে কম।

সব configuration option আর default-এর পুরো list — Cargo-র official documentation-এ (cargo reference profiles) দেখা যায়।

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

  • Cargo-র দু'টা main profile — dev (default) আর release (--release flag-এ)।
  • প্রতিটা profile-এর independent default — না দিলে Cargo সেগুলোই use করে।
  • opt-level 0–3 — dev-এ 0 (fast compile), release-এ 3 (fast runtime)।
  • [profile.dev] বা [profile.release] দিয়ে যেকোনো subset override করা যায়।