بازیابی منابع از اسمبلی
Cargo چیست و چه کاربردی دارد؟
Cargo همراه با زبان برنامه نویسی Rust گنجانده شده، همزمان نصب میشود و برای ایجاد، ساخت و مدیریت پروژههای Rust استفاده میگردد. این یک رابط سطح بالا برای کار با کدهای Rust را ارائه میدهد که شروع به کار با Rust و مدیریت پروژههای خود را برای توسعه دهندگان آسانتر میکند.
Cargo سیستم ساخت و package manager مخصوص زبان برنامه نویسی Rust است. ابزاری است که به توسعه دهندگان Rust کمک میکند تا پروژههای خود را با خودکارسازی کارهایی مانند کامپایل کد، مدیریت وابستگیها، اجرای آزمایشها و ایجاد بستههای قابل توزیع، مدیریت کنند.
Dependency management: برنامه Cargo میتواند بهطور خودکار وابستگیهای پروژههای Rust را دانلود کرده، بسازد و مدیریت کند. این باعث میشود توسعه دهندگان به راحتی کتابخانهها و ماژولهای جدیدی را به پروژههای خود اضافه کنند.
Building and testing: برنامه Cargo میتواند پروژههای Rust را بسازد و testها را به صورت خودکار اجرا کند. همچنین گزینههایی را برای ساختن ساختهای بهینه یا اشکال زدایی فراهم میکند.
Packaging: برنامه Cargo میتواند بستههای قابل توزیعی را مانند tarballs یا بستههای باینری را برای پروژههای Rust ایجاد کند.
Customization: برنامه Cargo به توسعه دهندگان اجازه میدهد تا فرآیند ساخت برنامهی خود را با تعیین گزینههای ساخت مختلف، در فایل پیکربندی Cargo.toml سفارشی کنند. بهطور کلی Cargo توسعه و مدیریت پروژههای Rust را با ارائه یک ابزار کارآمد برای خودکارسازی بسیاری از وظایف توسعه رایج، ساده میکند.
cargo new project_name
Cargo.toml : این فایل manifest پروژه است که در آن نام پروژه، نسخه، وابستگیها و سایر ابردادهها را مشخص میکنید. فایل Cargo.toml حاوی یک metadata درباره پروژه است؛ مانند نام، نسخه، نویسندگان و وابستگیهای آن. در اینجا مثالی از شکل ظاهری یک فایل Cargo.toml آورده شده است:
[package] name = "my-project" version = "0.1.0" authors = ["John Doe <johndoe@example.com>"] [dependencies] serde = "1.0" serde_json = "1.0"
بخش [dependencies] وابستگیهای پروژه را فهرست میکند. در این مثال، پروژه به پکیجهای serde و serde_json بستگی دارد که برای serialization و deserialization دادهها استفاده میشوند.
src directory: این دایرکتوری حاوی کد منبع پروژه شما است. به طور پیش فرض، شامل یک فایل main.rs است که نقطه ورود برنامه شما است.
target directory: این فهرست شامل فایلهای باینری کامپایل شده تولید شده توسط کامپایلر Rust میباشد.
هنگامی که cargo build یا cargo run را اجرا میکنید، Cargo به طور خودکار یک دایرکتوری target/debug را برای ذخیرهی فایلهای باینری کامپایل شده ایجاد میکند. اگر cargo build --release را اجرا کنید، Cargo بجای آن، یک دایرکتوری target/release را ایجاد میکند. بعلاوه، اگر هنگام ایجاد پروژهی خود از نسخهی خاصی از Rust (مانند نسخهی 2018) استفاده کنید، Cargo یک فیلد نسخه را در فایل Cargo.toml شما برای تعیین نسخه، اضافه میکند.
Borrowing در Rust
Borrowing عمل ایجاد ارجاع به یک ارزش، بدون در اختیار گرفتن مالکیت است. در Rust، ارجاعات، مشابه اشارهگرهای معمولی هستند؛ اما با قوانین و محدودیتهایی اضافه شدهاند. ویژگیهای اصلی Borrowing عبارتند از:
- References اشارهگرهایی با قوانین و محدودیتها هستند.
- References مالکیت ارزشها را نمیگیرند.
دلایل Borrowing در Rust
چندین دلیل وجود دارند که چرا Borrowing در Rust سودمند است:
Performance : به کمک Borrowing، با انتقال ارجاع به یک مقدار بجای clone، عملکرد بهبود بخشیده میشود. به عنوان مثال هنگامیکه یک تابع، دارای پارامتری مانند یک رشته است، انتقال مرجع، کارآمدتر از تکرار مقدار است.
Ownership Management : در مواردی که مالکیت، مورد نیاز یا مطلوب نیست، Borrowing یک راه حل ایدهآل است. با عدم مالکیت، یک تابع نباید مسئول تصمیمگیری در مورد زمان پاکسازی یک مقدار باشد.
قوانین Borrowing در Rust
Rust دو قانون اصلی Borrowing را اعمال میکند:
- در هر زمان معین، میتوانید یک مرجع قابل تغییر یا هر تعداد مرجع تغییرناپذیر داشته باشید.
- مراجع باید همیشه معتبر باشند.
این قوانین به حل دو مشکل عمده در برنامه نویسی کمک میکنند:
Data Races : مشکل Data Races زمانی رخ میدهد که دو رشته سعی میکنند مکان حافظهی یکسانی را به طور همزمان بخوانند و یا بنویسند که منجر به نتایج غیر قطعی میشود. قوانین Borrowing در Rust تضمین میکند که از چنین درگیریهایی جلوگیری میشود.
Dangling References : یک dangling reference به حافظهی نامعتبری اشاره میکند. با اطمینان از اینکه مراجع همیشه معتبر هستند، قوانین وام گیری Rust از وقوع ارجاعات آویزان جلوگیری میکند.
ویژگیهای قابل توجه Borrowing
Immutable References by Default : در Rust، یک reference به طور پیش فرض تغییر ناپذیر است. این انتخاب طراحی بر اهمیت Borrowing برای برنامه نویسی ایمن و کارآمد تاکید دارد.
Automatic Dereferencing: در Rust ویژگی عدم ارجاع خودکار وجود دارد؛ به این معنا که توسعه دهندگان مجبور نیستند به صراحت، ارجاع را پیاده سازی کنند. این روند، کار با ارزشهای borrowed را ساده میکند.
Rust یک زبان برنامه نویسی قدرتمند است که ایمنی و عملکرد را از طریق ویژگیهایی مانند Borrowing در اولویت قرار میدهد. با درک مفهوم Borrowing و رعایت قوانین آن، توسعه دهندگان میتوانند از پتانسیل کامل Rust برای ایجاد نرم افزاری کارآمد، قابل اعتماد و همزمان استفاده کنند.
Rust یک زبان برنامه نویسی سیستمی است که برای ارائهی عملکرد و کنترل یک زبان سطح پایین و در عین حال ارائه high-level abstractions و تضمین safety، طراحی شدهاست. این یک زبان منبع باز است که در ابتدا توسط موزیلا توسعه داده شد و اکنون توسط جامعهی بزرگی از توسعه دهندگان نگهداری میشود.
سینتکس Rust شبیه به ++C است. زبان برنامه نویسی Rust با ارائه memory safety, thread safety, and zero-cost abstractions باعث میشود کمتر مستعد خطاهای برنامه نویسی رایج باشد. فلسفهی این زبان، "Fearless Concurrency" است؛ به این معنا که طراحی شدهاست تا توسعه دهندگان را قادر به نوشتن کدهای همزمان، بدون ترس از ایجاد خطاهای مرتبط با حافظه کند.
چرا باید از Rust استفاده کنیم؟
دلیل اصلی محبوبیت Rust در بین توسعه دهندگان، ویژگیهای منحصر به فرد آن است؛ از جمله:
Memory Safety: ایمنی حافظه، ویژگی اصلی Rust است. Rust از سیستم ownership و borrowing برای اطمینان از تخصیص و آزادسازی صحیح حافظه استفاده میکند. سیستم ownership، مالکیت منابع را ردیابی میکند؛ در حالیکه سیستم borrowing دسترسی به منابع را برای جلوگیری از چندین مرجع تغییرپذیر، محدود میکند. این باعث میشود، کد Rust قابل اعتمادتر باشد و کمتر مستعد خطاهای مربوط به حافظه، مانند عدم ارجاع اشارهگر تهی و سرریز بافر باشد.
Thread Safety: مدیریت thread safety را از طریق ownership و borrowing انجام میدهد. سیستم ownership تضمین میکند که فقط یک رشته میتواند در یک زمان، مالک یک منبع باشد و از data races جلوگیری میکند. سیستم borrowing دسترسی به منابع را محدود میکند تا از چندین مرجع قابل تغییر جلوگیری کند که میتوانند باعث data races شوند.
Zero-Cost Abstractions: در بسیاری از زبانهای برنامهنویسی، استفاده از abstractions مانند higher-order functions ، closures یا generics میتواند هزینهی عملکردی داشته باشد. این مورد به این دلیل است که abstractions باید به کد ماشین ترجمه شود تا بتواند بر روی CPU اجرا شود. با این حال، سیستم abstractions بدون هزینهی Rust تضمین میکند که هیچ هزینهی عملکردی با استفاده از این انتزاعها وجود ندارد.
نتیجه گیری
Rust یک زبان برنامه نویسی برای سیستمهای مدرن است که memory safety, thread safety, and zero-cost abstractions را فراهم میکند. ویژگیها و مزایای منحصر به فرد Rust نسبت به سایر زبانهای برنامه نویسی، آن را به گزینهای عالی برای ساخت سیستمهای با کارآیی بالا، ایمن و همزمان تبدیل کردهاست. syntax، پشتیبانی از پلتفرمهای مختلف و جامعهی رو به رشد Rust، آن را به زبانی ایدهآل، برای توسعه دهندگانی که میخواهند نرم افزاری قوی و قابل اعتماد بسازند، تبدیل کردهاست.
چگونه یک سیستم عامل بنویسیم ؟
کتاب Bing Maps V8 Succinctly
At least 80% of all information being collected by enterprises includes geolocation data. The Bing Maps V8 library is a very large collection of JavaScript code that allows web developers to place a map on a webpage, query for data, and manipulate objects on a map, creating a geo-application. In Bing Maps V8 Succinctly, James McCaffrey takes readers through utilizing this library, from creating the simplest application that uses it, to mastering more advanced functions like creating color-gradient legends and custom-styled Infobox objects.
- Getting Started
- Fundamental Techniques
- Working with Data
- Advanced Techniques
آموزش ساخت یک بلاگ با Blazor .Net 8
In this video we will build a complete full stack Blog Web App using the new Blazor Web App with SSR with .Net 8 | Step by Step | From Scratch to End
You will learn: New Static Server Side Rendering with Blazor, QuickGrid, Enhanced Navigation, Enhanced Forms, Stream Rendering, Image Preview & Upload, Identity Authentication, Interactive Server Render Mode for Admin Panel, and much more