معرفی زبان برنامهنویسی 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
نتایج 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