۳۰ شهریور ۱۴۰۳

Techboy

اخبار و اطلاعات روز تکنولوژی

آموزش Rust: با زبان Rust شروع کنید

در اینجا نحوه خیس کردن پاهای خود با Rust، از استفاده از زنجیره ابزار Rust گرفته تا ایجاد پروژه، کار با کد شخص ثالث، مدیریت کتابخانه ها و موارد دیگر آورده شده است.

در اینجا نحوه خیس کردن پاهای خود با Rust، از استفاده از زنجیره ابزار Rust گرفته تا ایجاد پروژه، کار با کد شخص ثالث، مدیریت کتابخانه ها و موارد دیگر آورده شده است.

در چند سال گذشته، Rust از یک کنجکاوی ایجاد شده در آزمایشگاه کارمندان موزیلا به یک رقیب قوی برای نسل بعدی برنامه‌های کاربردی بومی و راه‌حل‌های فلزی لخت تبدیل شده است. این پیشرفت‌ها از Rust حاصل می‌شود که زنجیره ابزار و سیستم مدیریت اجزای خود را به همراه ویژگی‌ها و ویژگی‌های محبوب خاص ارائه می‌کند.

این مقاله برای توسعه دهندگانی است که به تازگی با Rust آشنا شده اند یا آن را برای پروژه های آینده در نظر می گیرند. راه‌اندازی یک محیط کاری در Rust، پیکربندی یک IDE، و بهترین استفاده از مجموعه ابزار توسعه برنامه‌های کاربردی عالی Rust را بررسی خواهیم کرد.

نرم افزار ایمن تر را با Rust توسعه دهید

با Rust و ویژگی‌های آن برای ایجاد نرم‌افزار سریع و در سطح سیستم، به سرعت به سرعت برسید. این توضیح‌دهنده متحرک دو دقیقه‌ای نشان می‌دهد که چگونه Rust مشکلات حافظه و مدیریت را در برنامه‌های مدرن دور می‌زند.

درک انتشار Rust

زنجیره ابزار Rust عمدتاً از کامپایلر Rust، rustc به همراه ابزارهایی برای مدیریت نصب Rust تشکیل شده است. از آنجایی که Rust در حال توسعه دائمی است، زنجیره ابزار آن طوری طراحی شده است که به‌روزرسانی آسان باشد.

پروژه‌های نرم‌افزاری اغلب از طریق چندین کانال به منظور جداسازی نسخه‌های پایدار و بتا کد ارائه می‌شوند. Rust به همین ترتیب عمل می کند و سه کانال را برای به روز رسانی زنجیره ابزار ارائه می دهد:

  • پایدار: نسخه‌های مهم، که هر شش هفته یا بیشتر ظاهر می‌شوند.
  • بتا: نامزدهای نسخه اصلی بعدی، که بیشتر ظاهر می‌شوند.
  • شب: فوری‌ترین ساخت، با دسترسی به ویژگی‌های پیشرفته، اما هیچ تضمینی برای پایداری آن‌ها وجود ندارد.

همانطور که توسعه دهنده کارول کوچمارسکی اشاره کرده است، بهترین کار به کانال شبانه Rust به عنوان زبان خود فکر کنید. برخی از ویژگی‌های Rust فقط در کانال شبانه در دسترس هستند و فقط با دستورالعمل‌های ویژه کامپایلر فعال می‌شوند. به عبارت دیگر، آنها حتی در کانال های بتا یا پایدار کامپایل نمی شوند.

این به دلیل طراحی است، زیرا هیچ تضمینی وجود ندارد که ویژگی‌های شبانه در جای دیگری پشتیبانی شوند. با این حال، بسیاری از این ویژگی‌ها در نهایت از کانال شبانه خارج می‌شوند و به نسخه‌های بتا و پایدار می‌رسند. (برای مثال، کامپایل کردن در WebAssembly در نسخه پایدار Rust 1.30 کار می کند.)

این برای شما به عنوان یک توسعه دهنده چه معنایی دارد؟ به طور خلاصه:

  1. از stable برای کار تولید واقعی استفاده کنید.
  2. از بتا برای آزمایش نرم افزار فعلی در برابر نسخه های آینده استفاده کنید تا ببینید آیا ممکن است چیزی در ارتقاء خراب شود.
  3. فقط از شب برای آزمایش‌های جعبه ایمنی با جدیدترین ویژگی‌های Rust استفاده کنید.

یک سیستم عامل برای توسعه Rust انتخاب کنید

Rust از هر سه پلتفرم اصلی پشتیبانی می‌کند—Windows، Linux و macOS—در هر دو نسخه ۳۲ و ۶۴ بیتی، با باینری های رسمی برای هر کدام. تعداد زیادی از پلتفرم های دیگر نیز دارای باینری های رسمی هستند، اما سطح پوشش تست خودکار را ندارند. این پلتفرم‌های درجه دوم عبارتند از ARMv6 و ARMv7 برای iOS، Android و Linux. MIPS Linux و MIPS64 Linux; نسخه های ۳۲ بیتی x86 iOS، Windows و Linux. و WebAssembly. پلتفرم‌های دیگر، مانند Windows XP یا HaikuOS آزمایشی، از طریق ساخت‌های غیررسمی پشتیبانی می‌شوند.

تیم توسعه Rust بیان کرده است که قابل حمل بودن به طور گسترده یکی از ماموریت های Rust نیست. برای مثال، اگرچه Rust در بسیاری از معماری های ARM در دسترس است، هیچ تضمینی وجود ندارد که Rust به طور رسمی در پلتفرم های سخت افزاری پایین رده پشتیبانی شود.

جایی که جاوا اسکریپت در سال 2022 هدایت می شود

گفته شد، باید یک ساخت Rust پشتیبانی شده برای اکثر موارد استفاده رایج و رایج – یعنی Windows، Linux، و macOS 32 و ۶۴ بیتی موجود باشد.

اگر قصد دارید در Rust در ویندوز توسعه دهید، زنجیره ابزار خود را در نظر داشته باشید. Rust از دو زنجیره ابزار ویندوز پشتیبانی می کند:

  • نسخه اصلی Microsoft Visual C (MSVC) ABI
  • Gnu ABI استفاده شده توسط پیوند دهنده GCC

از آنجایی که تقریباً تمام نرم افزارهای C/C++ ساخته شده در ویندوز از MSVC استفاده می کنند، بیشتر اوقات می خواهید از زنجیره ابزار MSVC استفاده کنید. اگر زمانی به GCC نیاز داشته باشید، به احتمال زیاد برای تعامل با کتابخانه های شخص ثالث ساخته شده در Windows با GCC خواهد بود.

خبر خوب این است که سیستم مدیریت زنجیره ابزار Rust به شما امکان می دهد هر دو زنجیره ابزار MSVC و GCC را نصب کنید و به شما امکان می دهد بین آنها بر اساس پروژه به پروژه جابجا شوید.

یکی از اهداف کامپایل Rust WebAssembly است، به این معنی که می توانید در Rust بنویسید و در یک مرورگر وب مستقر کنید. خود WebAssembly هنوز در اطراف لبه ها ناهموار است و Rust نیز از آن پشتیبانی می کند. اما اگر جاه‌طلب هستید و می‌خواهید دست‌هایتان به هم ریخته باشد، این کتاب را بخوانید، جزئیات فرآیند کامپایل WebAssembly به Rust. این کتاب که توسط مهندسان Rust و WebAssembly نوشته شده است، شامل آموزشی برای اجرای Conway’s Game of Life است که به زبان Rust نوشته شده و به عنوان WebAssembly به کار گرفته شده است.

راه اندازی Rust خود را با rustup شروع کنید

Rust یک نصب کننده همه کاره و سیستم نگهداری زنجیره ابزار به نام rustup را ارائه می دهد. rustup را دانلود و اجرا کنید. آخرین نسخه های Rust toolchain را دریافت کرده و برای شما نصب می کند.

مهمترین ابزارهای نگهداری شده توسط rustup عبارتند از:

    خود

  • rustup: هر زمان که نسخه‌های جدید rustup یا ابزارهای دیگر منتشر می‌شوند، فقط می‌توانید rustup update را اجرا کنید و همه چیز را به‌طور خودکار به‌روزرسانی کنید.
  • rustc: کامپایلر Rust.
  • Cargo: مدیر بسته و فضای کاری Rust.

به طور پیش‌فرض، rustup Rust را از کانال پایدار نصب می‌کند. اگر می‌خواهید از نسخه‌های بتا یا شبانه استفاده کنید، باید آن کانال‌ها را به صورت دستی نصب کنید (برای مثال، با اجرای rustup install nightly) و Rust را به‌طور پیش‌فرض تنظیم کنید تا از آنها استفاده کند ( rustup پیش‌فرض شبانه). همچنین می‌توانید به‌صورت دستی مشخص کنید از کدام کانال استفاده شود هنگام کامپایل برنامه Rust، بنابراین لازم نیست هر بار که بین پروژه ها حرکت می کنید، پیش فرض را تنظیم و بازنشانی کنید.

Rust tutorial: rustup همه قسمت‌های زنجیره ابزار Rust شما را به‌روز نگه می‌دارد.

شکل ۱. rustup تمام بخش‌های زنجیره ابزار Rust شما را به جدیدترین نسخه‌هایشان به‌روز نگه می‌دارد. در اینجا، زنجیره ابزار شبانه، با اجزای زبانی بی‌ثبات و بالقوه ناپایدار، جدا از نسخه پایدار به‌روزرسانی می‌شود.

همچنین می‌توانید از rustup برای نصب و نگهداری زنجیره‌های ابزار سفارشی استفاده کنید. اینها معمولاً توسط ساخت‌های غیررسمی و شخص ثالث Rust برای پلتفرم‌های پشتیبانی‌نشده استفاده می‌شوند، که معمولاً به لینک‌کننده‌های خود یا سایر ابزارهای خاص پلتفرم نیاز دارند.

توجه داشته باشید که فرض پیش‌فرض دیگری که Rust مطرح می‌کند این است که فایل‌های Cargo – بسته‌های دانلود شده و اطلاعات پیکربندی – را در یک فهرست فرعی از نمایه کاربر شما ذخیره می‌کند. این همیشه مطلوب نیست؛ گاهی اوقات افراد آن داده ها را در درایو دیگری می خواهند، جایی که فضای بیشتری وجود دارد، یا در مکانی که در دسترس تر است. اگر می‌خواهید Cargo در جای دیگری زندگی کند، می‌توانید پس از پایان راه‌اندازی، آن را به صورت دستی جابه‌جا کنید. این مراحل است:

  1. همه برنامه هایی را که ممکن است از Cargo استفاده می کنند ببندید.
  2. دایرکتوری .cargo را در نمایه کاربری خود در جایی که می خواهید زندگی کند کپی کنید.
  3. متغیرهای محیطی CARGO_HOME و RUSTUP_HOME را تنظیم کنید تا به دایرکتوری جدید اشاره کنند.
  4. PATH را طوری تنظیم کنید که به فهرست فرعی bin دایرکتوری جدید اشاره کند.
  5. محموله را تایپ کنید تا مطمئن شوید که محموله به درستی کار می کند.
Bootstrap 5.3.0 بر حالت تاریک، رنگ های سفارشی تأکید دارد

IDE خود را برای Rust پیکربندی کنید

با وجود اینکه Rust یک زبان نسبتاً جدید است، در حال حاضر از بسیاری از IDE های رایج پشتیبانی قوی کسب کرده است. مانوئل هافمن توسعه‌دهنده پروژه‌ای را برای ردیابی وضعیت چنین پشتیبانی در وب‌سایت areweideyet.com حفظ می‌کند.

کارکرد خوب Rust با IDEها از طریق قابلیتی به نام Rust Language Server (RLS) هدف صریح تیم توسعه آن است. RLS به‌جای تجزیه‌کننده شخص ثالث، بازخورد مستقیمی درباره کد مورد نظر از کامپایلر Rust ارائه می‌کند.

Rust tutorial: Rust's Language Server بازخورد کامپایلر را به یک IDE ارائه می دهد.

شکل ۲. پروژه Rust’s Language Server برای کدی که با آن کار می کنید، بازخورد مستقیمی را به یک IDE از کامپایلر Rust ارائه می دهد. کد ویژوال استودیو، که در اینجا نشان داده شده است، دارای برخی از کامل ترین پشتیبانی های موجود برای سرور زبان Rust است.

در اینجا IDE هایی هستند که از Rust پشتیبانی می کنند:

اولین پروژه Rust خود را ایجاد کنید

پروژه‌های Rust دارای ساختار دایرکتوری ثابتی هستند که کد و ابرداده پروژه به روش‌های خاصی در آنها ذخیره می‌شود. کد در یک زیر شاخه src ذخیره می شود و جزئیات پروژه در دو فایل در فهرست اصلی پروژه، Cargo.toml (اطلاعات اولیه پروژه) و Cargo.lock (لیست وابستگی ایجاد شده به طور خودکار). شما می توانید آن ساختار دایرکتوری و ابرداده را با دست ایجاد کنید، اما استفاده از ابزارهای Rust برای انجام کار آسان تر است.

نکته: Rust By Example راهنمای آنلاین یادگیری Rust نمونه‌های کد تعاملی را ارائه می‌کند که می‌توانند مستقیماً در مرورگر ویرایش و اجرا شوند. تقریباً تمام مفاهیم اصلی Rust را لمس می کند، اگرچه برخی از مفاهیم کلیدی تر، مانند قرض گرفتن و طول عمر، نسبتاً دیر در بحث معرفی شده اند.

Rust’s ابزار Cargo هم پروژه‌های Rust و هم کتابخانه‌ها یا «جعبه‌ها، ” آنها استفاده می کنند. برای چرخاندن یک پروژه Rust جدید به نام my_project در فهرست خود، cargo new my_project را تایپ کنید. (برای توسعه دهندگان سی شارپ که با .Net Core کار می کنند، به دستور dotnet new فکر کنید.) پروژه جدید در زیر شاخه ای با آن نام به همراه یک مانیفست پروژه اصلی ظاهر می شود. فایل Cargo.toml—و یک خرد برای کد منبع پروژه، در یک فهرست فرعی src.

هنگامی که یک پروژه جدید ایجاد می کنید، یک فایل main.rs به طور خودکار در فهرست راهنمای src پروژه ایجاد می شود. این فایل حاوی یک برنامه اصلی “Hello world” است، بنابراین می توانید با کامپایل و اجرای آن، فوراً زنجیره ابزار Rust خود را آزمایش کنید.

در اینجا کد منبع برنامه اصلی “سلام جهان” آمده است:


fn main() {
    println!(“Hello World!”);
}

برای ساخت و اجرای برنامه، به ریشه دایرکتوری پروژه بروید و cargo run را تایپ کنید. توجه داشته باشید که به طور پیش فرض، Cargo پروژه ها را در حالت debug می سازد. برای اجرا در حالت انتشار، از cargo run --release استفاده کنید. باینری ها در زیر شاخه target/debug یا target/release پروژه ساخته می شوند، بسته به اینکه از کدام نمایه تلفیقی استفاده می کنید.

rust compile 03

شکل ۳. هنگامی که یک پروژه Rust کامپایل می شود، تمام وابستگی های آن به طور خودکار به دست می آیند و کامپایل می شوند. بازخورد دقیق خط به خط برای هر چیزی که اخطار یا خطای کامل را ایجاد کند ظاهر می‌شود.

کار با جعبه های Rust

مدیریت بسته بخش کلیدی هر محیط برنامه نویسی مدرن است. برای این منظور، Rust «جعبه‌ها» را ارائه می‌کند، که کتابخانه‌های شخص ثالثی هستند که برای توزیع با ابزار Rust بسته‌بندی شده‌اند. می‌توانید جعبه‌ها را در رجیستری رسمی بسته Rust، Crates.io پیدا کنید.

اگر پروژه شما به یک جعبه خاص وابستگی دارد، باید آن جعبه را با ویرایش فایل Cargo.toml پروژه. روش استاندارد برای انجام این کار به صورت دستی است — یعنی به سادگی Cargo.toml را مستقیماً با یک ویرایشگر متن ویرایش کنید. دفعه بعد که پروژه بازسازی می شود، Rust به طور خودکار وابستگی های مورد نیاز را بدست می آورد.

نکته: دو ابزار، cargo-edit و cargo-edit-local، می‌تواند وابستگی‌ها را از خط فرمان به‌روزرسانی کند، اگرچه آنها شخص ثالث غیررسمی هستند. پروژه ها. (توجه داشته باشید که cargo-edit-locally از سال ۲۰۱۷ به روز نشده است.)

وقتی یک پروژه Rust که به جعبه‌های خارجی وابسته است می‌سازید، Cargo به‌طور پیش‌فرض به دنبال آن جعبه‌ها در Crates.io می‌گردد. ; شما نیازی به دریافت دستی آنها ندارید. همچنین می‌توانید به جعبه‌های پروژه‌تان با URL به جای نام جعبه مراجعه کنید، در صورتی که به جعبه‌ای نیاز دارید که در رجیستری میزبانی نشده باشد، مانند چیزی از یک مخزن خصوصی.

توجه داشته باشید که برخی از جعبه‌ها فقط روی کانال شبانه Rust نصب و ساخته می‌شوند، زیرا از ویژگی‌های آزمایشی استفاده می‌کنند که در کانال‌های دیگر موجود نیست. اگر در کانال انتشار هستید و سعی می کنید چنین جعبه ای را نصب کنید، هیچ هشداری دریافت نمی کنید تا زمانی که خود کامپایل با شکست مواجه شود. اسناد جعبه معمولاً به این موضوع اشاره می‌کنند که آیا به کانال شبانه نیاز دارد یا خیر، بنابراین قبل از اضافه کردن آن را بخوانید، چه رسد به کامپایل.

جعبه‌ها می‌توانند با باینری‌ها همراه باشند. برخی از آنها ابزارهای خط فرمان هستند که در توسعه Rust استفاده می شوند. بقیه ابزارهای همه منظوره هستند (مانند ripgrep). برای نصب یکی از این جعبه ها، کافی است cargo install را تایپ کنید. این تنها راه برای توزیع باینری ایجاد شده با Rust نیست، اما راهی مناسب برای توسعه دهندگان Rust است تا آنها را به عنوان بخشی از یک گردش کاری شامل ابزارهای Rust به دست آورند.

Cross-compile Rust در پلتفرم دیگری

از آنجایی که Rust از چندین زنجیره ابزار پشتیبانی می‌کند، حتی در یک نصب Rust، می‌توانید برنامه‌های Rust را در یک سیستم‌عامل هدف و محیطی که با محیطی که در حال کامپایل کردن هستید، کامپایل کنید.

چنین کامپایل متقابل به یک زنجیره ابزار در پلتفرمی که روی آن کار می کنید نیاز دارد که با پلتفرم هدف مطابقت داشته باشد. گاهی اوقات، مانند کامپایل متقابل به لینوکس در ویندوز، یا بالعکس، این کار چیزی بیشتر از داشتن رابط GCC را شامل می شود. اما مواقع دیگر، پیچیده تر است. به عنوان مثال، برای کامپایل متقابل در macOS، به کتابخانه‌های Xcode IDE نیاز دارید تا کار را تمام کنید—cctools (معادل binutils اپل) و macOS SDK.

ابزارهای شخص ثالث راه‌هایی برای رفع این مشکلات ارائه می‌دهند:

Rust Language

Rust king Iron Crown Royal Royal

Rust king Iron Crown Royal Royal

Rust language

حلقه زنگ زنجیری فلز آهن سنگین