প্রকল্প সম্পর্কে
এই রিপোজিটরিটি রাস্ট বাইনারির আকার কমানোর জন্য একটি বিস্তৃত, হাতে-কলমে নির্দেশিকা। এটি স্বীকার করে যে রাস্টের ডিফল্ট অপ্টিমাইজেশন এক্সিকিউশন গতি এবং ডিবাগিং সুবিধাকে লক্ষ্য করে, তবে ছোট এক্সিকিউটেবল প্রয়োজন এমন ডেভেলপারদের জন্য এটি একটি স্পষ্ট, ধাপে ধাপে পথ প্রদান করে।
গাইডটি মৌলিক কৌশল দিয়ে শুরু হয় যা প্রোগ্রামের আচরণে কোনো প্রভাব ফেলে না:
- রিলিজ মোডে বিল্ড করা, যা ডিবাগ বিল্ডের তুলনায় বাইনারির আকার ৩০% বা তার বেশি কমাতে পারে।
- কার্গোর `strip = true` সেটিং ব্যবহার করে বাইনারি থেকে স্বয়ংক্রিয়ভাবে সিম্বল অপসারণ (রাস্ট ১.৫৯ থেকে উপলব্ধ), অথবা পুরোনো সংস্করণের জন্য ELF ফাইলে ম্যানুয়ালি `strip` চালানো।
- `Cargo.toml`-এ `opt-level = "z"` সেট করা যাতে গতির পরিবর্তে আকারের জন্য অপ্টিমাইজ করা যায়, সাথে উল্লেখ করা হয়েছে যে `"s"` কখনও কখনও ছোট ফল দিতে পারে এবং পরীক্ষা-নিরীক্ষা করার পরামর্শ দেওয়া হয়।
- লিংক টাইম অপ্টিমাইজেশন (LTO) সক্রিয় করা যাতে লিংকার মৃত কোড সরাতে এবং কম্পাইলেশন ইউনিট জুড়ে অপ্টিমাইজ করতে পারে।
- কম্পাইল সময়ের বিনিময়ে আরও আক্রমণাত্মক অপ্টিমাইজেশন সক্ষম করতে `codegen-units` ১-এ কমিয়ে আনা।
এরপর গাইডটি আরও উন্নত কৌশলে চলে যায় যা প্রোগ্রামের আচরণ পরিবর্তন করতে পারে বা নাইটলি রাস্ট প্রয়োজন হতে পারে:
- আনওয়াইন্ডিং কোড সরাতে `panic = "abort"` ব্যবহার করা, এবং অবস্থান ও ফরম্যাটিং বিবরণ অপসারণ করতে অস্থির `-Zlocation-detail=none` এবং `-Zfmt-debug=none` ফ্ল্যাগ ব্যবহার করা।
- `build-std` দিয়ে সোর্স থেকে স্ট্যান্ডার্ড লাইব্রেরি তৈরি করা, যা `libstd`-কে আকারের জন্য অপ্টিমাইজ করতে এবং অব্যবহৃত অংশ অপসারণ করতে দেয়। এতে `optimize_for_size` ফিচার এবং প্যানিক স্ট্রিং দূর করতে অস্থির `panic=immediate-abort` বিকল্প অন্তর্ভুক্ত।
- `#![no_std]` এবং `#![no_main]` দিয়ে `libstd` সম্পূর্ণভাবে অপসারণ, একটি C এন্ট্রি পয়েন্ট এবং ম্যানুয়াল stdio ব্যবস্থাপনা ব্যবহার করে। এটি হ্যাকি এবং অ-পোর্টেবল হিসেবে বর্ণনা করা হয়েছে, নির্ভরতা বিশ্লেষণের প্রয়োজন, তবে C প্রোগ্রামের মতো ছোট বাইনারি তৈরি করতে পারে।
গাইডটি আরও কভার করে:
- চূড়ান্ত বাইনারি কম্প্রেস করতে UPX ব্যবহার, সম্ভাব্য অ্যান্টিভাইরাস মিথ্যা পজিটিভ সম্পর্কে সতর্কতা সহ।
- বাইনারির আকার বিশ্লেষণ ও কমানোর টুল, যেমন `cargo-bloat`, `momo`, এবং ওয়েবঅ্যাসেমব্লির জন্য Twiggy।
- কন্টেইনার ইমেজের আকার কমানোর কৌশল, যার মধ্যে `rust:alpine` ইমেজ, ইমেজ অন্বেষণের জন্য `dive`, এবং ন্যূনতম বেস ইমেজের জন্য `distroless`।
- বাহ্যিক সম্পদের লিংক, যার মধ্যে ছোট রাস্ট বাইনারি, WASM আকার হ্রাস, এবং রাস্ট বাইনারি সাইজ ওয়ার্কিং গ্রুপ সম্পর্কে ব্লগ পোস্ট অন্তর্ভুক্ত।
- রাস্ট ১.৩২-এ jemalloc অপসারণ এবং পুরোনো সংস্করণগুলির সাথে কীভাবে মোকাবিলা করতে হয় তার ঐতিহাসিক নোট।
`build_std` এবং `no_std` ফোল্ডারে উদাহরণ প্রকল্প সরবরাহ করা হয়েছে, এবং গাইডটি একটি ছোট Rocket ওয়েব সার্ভার এবং একটি GStreamer প্লাগইনের মতো বাস্তব-বিশ্বের কেস স্টাডি উল্লেখ করে। এটি জোর দেয় যে কৌশলগুলি ক্রমবর্ধমান, প্রতিটি ধাপ জটিলতা বা পোর্টেবিলিটির খরচে অতিরিক্ত আকার হ্রাস প্রদান করে।
Comments
0 Rating appears after 10 ratings
Sign in to join the discussion.