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

حسن کریمی

بهار 1403

لیست مباحث
- [داستان]() - [معرفی پایه]() - [مباحث اساسی]() - [شی‌گرایی]() - [توسعه وب]() - [مقایسه]() - [حواشی]()

داستان ترمز قطار

## جورج وستینگ‌هاوس ### 1846 - 1914 ### مخترع و کارآفرین
## ترمز بادی قطار ### 1869 ### کنترل توسط هوای کمپرس شده از داخل لوکوموتیو ### شبکه بهم پیوسته از لوله‌های هوا ### ترمز همزمان همه واگن‌ها ### طراحی Safe Failure

«می‌گی که با باد می‌تونی قطار رو نگه داری؟»

کرنلیوس وندربیلت، مالک خط آهن سنترال نیویورک

### عملکرد سریع این قطار توسط ترمز‌های بادی وستینگ‌هاوس محافظت می‌شود

«آنها [کمسیون راه‌آهن] فکر می کردند که این به نوعی یک امر ضروریه، که به طور طبیعی اتفاق می‌افتد و برخی از مردان کشته می‌شوند.»

لورنزو استفن کافین، کمیسر راه آهن آیووا

1893

قانون تعبیه اسباب ایمنی راه آهن

1900

اجرای کامل قانون

Rust Basic

# Fundamental Types - i8, i16, i32, i64, i128, u8, u16, u32, u64, u128 - isize, usize, f32, f64 - bool, char (Unicode character, 32 bits wide), &str, String - struct, enum, Tuple
Ownership
References
Borrowing
Lifetime
Expression Language

Rust Advanced

Error Handling
Crates and Modules
Traits
Generics
Closures
Concurrency
Async
Macros
Unsafe Code
OOP
Object
Encapsulation
# وراثت را پشتیبانی نمی‌کند ### دلایل استفاده از وراثت - استفاده مجدد از کد - پولیمورفیسم (چندریختی)
# استفاده مجدد از کد - قابلیت پیاده‌سازی با استفاده از `default trait method` (بصورت محدود)
# پولیمورفیسم (چندریختی): جایگذینی آبجکت‌ها به‌جای یکدیگر در زمان اجرا چنانچه مشترکا ویژگی خاصی دارند. کدی که می‌تواند با داده‌های تایپ‌های مختلف (در وراثت، زیرکلاس‌ها) کار کند. - استفاده از جنریک‌ها برای انتزاع تایپ‌های مختلف و اعمال محدودیت با استفاده از traitها (bounded parametric polymorphism)
Rust Web Development
Actix

Rust vs Java

Rust vs Go

https://discord.com/blog/why-discord-is-switching-from-go-to-rust

نتایج Go

  • ساخت یک endpoint برای تنظیم GCPercent در حین اجرا
    • بدون اثر
  • پایین آوردن سایز cache
  • تغییر ساختار cache
    • پایین آمدن تایم اسکن
    • بالا رفتن تایم latency روی 99th

انتقال از Go به Rust

  • حذف برخی از کدها بدلیل فقدان جنریک (در نسخه‌های پایین‌تر از 1.18 - اوایل بهار 2020)
  • حذف کدهای دستی محافظت از حافظه در cross-goroutine
  • حذف لایبرری initial metric بخاطر استفاده از همزمانی Rust
  • کم کردن تعداد کپی از حافظه
  • افزایش ظرفیت کش LRU تا 8 * 1e6
  • بهینه کردن ساختار ReadState برای استفاده کمتر از حافظه
  • استفاده از ورژن 0.2 لایبرری tokio (رانتایم Async - ورژن فعلی 1.4)

Rust vs C and C++

C/C++ can give the developer fine-grained control over the computer with fast code execution and minimal resource consumption. However, this is not free. Manual memory management can introduce bugs and security vulnerabilities.
حواشی
لینوکس
توصیه NSA
منحنی یادگیری

پیچیدگی syntax