Rust for Python developers
2.3K subscribers
23 photos
1 video
2 files
85 links
Rust programming language for python developers

یک توسعه دهنده پایتون هستم که سعی میکنم rust یاد بگیرم.
تو این مسیر منابع و نظرات شخصی خودم رو با آیندگان هم به اشتراک میذارم

اگر به هوش مصنوعی و پایتون علاقه دارید به کانال :
@pytens
@pyhints
سر بزنید.
Download Telegram
بخش سایبری کاخ سفید یا همون :
Office of the National Cyber Director (ONCD)

توی یک مقاله که هفته قبل منتشر شده گفته که نرم‌افزارهای آینده باید به سمت memory safe بودن حرکت کنند (لینک مقاله رو میذارم) که همین نکته بازم به نفع جامعه توسعه دهنده Rust شده و خیلی از پوشش های خبری و تحلیلگرهای نرم‌افزاری فقط Rust رو مثال میزنند در این مورد.
توی خود این مقاله هم به Rust اشاره شده.


The white house oncd blog post

from the report :

At this time, the most widely used languages that meet all three properties are C and
C++, which are not memory safe programming languages. Rust, one example of a memory safe
programming language, has the three requisite properties above, but has not yet been proven in space systems


.
👍9😎31
یکی از اون منابع خوب تمرین و یادگیری Rust

Jeremy Chone Youtube
👍12💯1
یک بحث بسیار جالب و آموزنده راجب شرایط Rust و GPU (بطور خاص nvidia-cuda)

Rust on reddit
👍8
نشستم با Rust یک تابع محاسباتی رو که جزو فرمول‌های شرکت بود پیاده‌سازی کردم، و آوردمش توی پایتون؛

زمان بندی‌هاش بسیار جالب شد،
توی پایتون هموار ه حدود ۷ دقیقه زمان می‌بره
از numpy که استفاده می‌کنم، به ۱ دقیقه هم می‌رسید
و پیاده‌سازی توی Rust؛ کمتر از ۵ ثانیه شد.


حتی اگر تفاوت محاسبات بین Rust, Python رو درک کنم موضوع و اختلاف سرعت بالای بین Numpy, Rust هنوز برای خودم عجیب هست.

دلیلش رو نمی‌دونم ولی حتماً دنبالش می‌گردم.
27👍76😁4🤯3
خیلی از بچه‌های فرانت دولوپری که میشناسم (سنیورها البته) در حال یادگیری Rust هستند؛ دیشب فرصت کردم با یکی از این دوستان صحبت کنم که توی تیم توسعه ابزارهای open source زیادی هم بوده و دلیل اصلیش کند بودن هست.
کسی هست که ندونه Electron چقدر افتضاح هست (اما چیز بهتری هم براش نبوده؛ پس قدردان توسعه دهنده‌هاش هستیم).
ابزارهای جدیدی که به لطف Rust داره منتشر میشه؛ موردی که توی این پست داریم بررسی می‌کنیم Tauri هست چندتا مزیت داره :
۱) سبک هست
۲) کامپایل میشه و باینری خواهد بود (خیالتون بابت سورس‌کد راحت باشه)
۳) یکبار کد میزنید و همه‌جا استفاده می‌کنید (درحال حاضر Desktop, Web اما توی جستجو دیدم که iOS, Android هم pre-release هستند)
۴) می تونید اتنخاب کنید با Javascrip, TypeScript کد بزنید یا Rust
5) پشتیبانی از Vue.js, React.js هم داره.

شخصا باهاش کار نکردم و فقط چندتا لایو کد دیدم و البته رضایت کسانی که قبولشون دارم از مسیر پیشرفت پروژه‌ها با Rust.
برای آشنایی بیشتر :
https://tauri.app/

حتما نسخه Beta v2.0 رو هم ببینید.
👍135👎1
یکی از دوستان تو گروه اشاره کردند که کتاب
Rust for Rustaceans 

خیلی کتاب خوبی هست (شخصا نخوندم و درحال مطالعه و بررسی چند منبع دیگه هستم)
اما گفتم شاید دلتون بخواد ویدئویی ببینید؛ ویدئو‌ها مربوط به یک خوانش گروهی آنلاین هست.

Rust for Rustaceans Book Club

کتابخونی خودمون هم توی دور بعدی همین اتفاق براش خواهد افتاد همونطور که قبلتر گفتم (البته هدف پایتون هست اونجا)
👍115👏2🔥1
پروژه TurboRepo هم از Go-Lang به Rust درحال منتقل شدن هست؛ Rust Nation UK که حدودا ۳ روز قبل برگزار شد خیلی سخنرانی‌های خوبی داشت.
برای من TurboRepo اهمیت جذابی داشت؛ چون بسیار بسیار توی HackerRank راجبش صحبت شده بود همچنین توی Reddit خیلی بازخورد داشت این حرکتشون
اگر شما هم دوست داشتید ببینید :
Nicholas Yang - Porting Turborepo From Go To Rust

حتما باقی سخنرانی‌ها رو هم ببینید.
👍61
کسی module برای کار با cuda توی Rust دیده ؟

البته پروژه‌ای که فعال باشه همچنان 🤔
😁6
یکی از جذاب‌ترین کتاب‌هایی که توی این مدت برای Rust خوندم کتاب

Learn Rust in a month of lunches 


بود؛ البته پیشنهاد می‌کنم از تکنیکی که توی کانال بوتیوب و جلسه اول ویدئو‌ها برای پایتون گفتم استفاده کنید؛ تا با سرعت بیشتر و درک بهتر کتاب رو بخونید.
9👍3
توی یوتیوب یک ویدئویی دیدم از این مواردی که آنچه خواهید دید بود؛ و طورف میخواست آموزش Rust بذاره و البته با پروژه
چندسال بود توسعه دهنده Rust بود و همین کدهایی که توی پروداکشن زده بود رو بخش‌هاییش رو میخواست تبدیل به دوره کنه

Learn rust by doing یا Production ready Rust
چیزی هست که توی یادداشت‌هام نگه داشتم.
متاسفانه الان پیداش نمی‌کنم و امروز سررسید تقویم بود برای انتشار این دوره.

کسی این ویدئو رو دیده ؟ خبری از وضعیت این دوره دارید ؟
اگر میشناسید لطفا توی کامنت لینک بدید؛ سپاس
👍131👎1
یک پروژه بهم داده شده که بعد از سال‌های بسیار (شاید ۸ سال) برای اولین بار پروژه رو از روز اولش هستم.

کدها رو باید توی پایتون انجام بدم؛ معمار سیستم اینطوری فکر می‌کنه که پایتون توی اسکیل هم جواب میده برای این پروژه خاص. (قطعا جواب میده اما سخت هست یا سخت‌افزار بیشتری می‌خواد)

شخصا میخوام ۲-۳ ساعت در روزی که وقت دارم + جمعه عصر که زمان استراحتم هست پروژه رو ببرم روی Rust و یک نسخه برای خودم داشته باشم.

معمولا اینطوری هست که اگر شرکت به مشکلی بخوره و شما کد بهتر رو توی وقت خالی خودت زده باشی و شرکت هزینه دولوپ از صفر رو نده و مشکلش حل بشه بطور کامل کد رو ازت میخره (اگر به مشکل نخوره که تمرین شده واسه خودت)
البته شخصا قبلا ۱-۲ تا بکند فروختم.

بگذریم؛ این هفته تعطیلات خوبی داره؛ ۴شنبه + ۵شنبه رو بتونم مرخصی بگیرم (شرکت‌های مختلف) هدف گذاشتم یک مروری روی Rust بکنم برای آخرین بار و از شنبه بعدی فقط حق کد زدن و یادگیری با کد رو به خودم بدم.
این آخرین هفته دیدن آموزش و مرور و ... هست.

اگر دوست داشتید شما هم این رو تبدیل به چالش کنید و ببینیم ۱ هفته شدنی هست؛ لیست منابعی که دنبال می‌کنم به ترتیب :

1- Rust programming full course 2024
2- Rust Tutorial full course
3- Learn Rust Together! Going through the book (live)!
4- Rust book
5- Rust in a month of launch
این کتاب واجب نیست ولی چون قبلا خوندم؛ مرورش راحت میشه برام.
البته همینجا اضافه کنم اپل احمق؛ کتاب‌های highlight شدم رو چون ذخیره نکرده بودم توی آپدیت آخر پاک کرد (۱۵ مورد که باز بود توی پس زمینه) کل فایل رو پاک کرده.
6- Zero to production in Rust

من این موارد رو فقط لازم دارم برای پروژه؛ اگر پکیج یا ... نیاز شد موضوعی میشه و باید آموزش خودش رو ببینم
تا قبل از کتاب‌ها هم ویدئو‌هارو همونطور که توی ویدئو اول یوتبوب (کتابخوانی Fluent Python) گفتم پیش میبرم.


پ.ن :
روزانه گزارش میدم اینجا؛ شاید انگیزه شد چندنفر دیگه هم با من بحث آموزش رو تموم کردند و دست به کد شدند.
👍4014🔥5❤‍🔥1
قطعا شما هم همچین کدی رو دیدید :

use rand::Rng;

fn main() {
let rand_num = rand::thread_rng().gen_range(1..21)
}


برای من همش سوال بود؛ چرا از rand میریم Rng رو میاریم ولی موقع استفاده Rng رو بیخیال میشیم و از خود rand باید thread_rng رو بیاریم و بعد می‌توینم به متد دسترسی بگیریم ؟

چیزی پیدا نکردم (چون سوالم طولانی میشه و اومدم داکیومنت‌های Rust رو دادم به مدل هوش مصنوعی و این جوابی بود که بهم داد)

You're right to be curious! Let's break down why Rust code uses `Rng` and `rand::thread_rng()` for generating random numbers.

**1. Traits: The Power of Abstraction**

In Rust, traits define shared behavior. Think of them like blueprints or contracts that types can adhere to.

- The `Rng` trait represents anything capable of producing random numbers. It outlines methods like `gen()`, `gen_range()`, and others for generating different kinds of random values.
- By importing `Rng`, you gain access to this blueprint, allowing your code to work with any type that implements the `Rng` trait.

**2. Thread-Local Random Number Generators (RNGs): Ensuring Safety and Efficiency**

* `rand::thread_rng()` is a function that gives you a thread-local RNG. This means each thread in your program has its own independent random number generator, preventing conflicts and ensuring reproducibility within a thread's context.
* Using a thread-local RNG is generally preferred for performance and safety reasons:

* **Performance:** Accessing a global RNG can introduce contention (threads waiting for access) which slows things down. Thread-local RNGs avoid this bottleneck.
* **Safety:** Guarantees that random sequences generated within a thread are independent of other threads, important for scenarios requiring deterministic behavior.


**3. Chaining Methods: Building Randomness**

`rand::thread_rng().gen_range(1..101)` demonstrates method chaining.

* `rand::thread_rng()` returns an instance (a specific realization) of a type that implements the `Rng` trait.
* `.gen_range(1..101)` calls the `gen_range()` method on this RNG instance, specifying a range from 1 to 101 (inclusive). This generates a random integer within that range.

**Key Takeaways:**

- **Traits (`Rng`)**: Provide abstraction for random number generation capabilities.
- **Thread-Local RNGs (`rand::thread_rng()`)**: Ensure thread safety, performance, and independent randomness within threads.
- **Method Chaining**: Allows you to combine methods on the returned `Rng` instance to generate specific types of random values.



قبلتر هم گفتم این ابزارها وقتی بهشون داکیومنت یا اینترنت بدی؛ برای تمرین مصاحبه و یا یادگیری بسیار کاربردی هستند. اما باید با دقت بسیار ازشون استفاده کرد.
👍18😁3👌31
چون ما از پایتون به راست اومدیم من ترجیح میدم همه چیز رو با پایتون map کنم تا جایی که اجازه میده:

توی دوره‌های آموزشی که می‌بینم؛ تقریبا اکثرا
.iter(), .into_iter()

رو میگن iterator در حالی که بعدا میگن که رفتار متفاوتی داره؛ اما با توجه به رفتارهاشون
.iter() = iterable in python
.into_iter() = iterator in python

شما می‌تونی یک iterable رو چندین بار روش for بزنی و یک رفرنس بهش داری توی راست (دیتا رو نمی‌تونی تغییر بدی مستفیم)
ولی iterator رو می‌تونی تغییر بدی اما بعد از تبدیل شدن به iterator دیگه متغییر اولیه رو از دست دادی .into_iter() میره برای owner شدن.

مورد بعدی:
اکثرا closure رو anonymous function تعریف می‌کنند.
که با چیزی که توی پایتون داریم متفاوت هست (توی پایتون این دو مورد تعاریف مختلفی دارند و یکسان نیستند.)
جالب شد closure هم anonymous هست هم دسترسی به متغیر nonlocal رو داره (هر دو حالت جون یک سینتکس رو داره کلا بهش میگن closure)
👍111
Rust for Python developers
یک پروژه بهم داده شده که بعد از سال‌های بسیار (شاید ۸ سال) برای اولین بار پروژه رو از روز اولش هستم. کدها رو باید توی پایتون انجام بدم؛ معمار سیستم اینطوری فکر می‌کنه که پایتون توی اسکیل هم جواب میده برای این پروژه خاص. (قطعا جواب میده اما سخت هست یا سخت‌افزار…
ویدئو اول و دوم تموم شد.
پلی لیست (مورد سوم رو باید شروع کنم) که خب با کتاب همزمان پیش خواهم رفت.

روز خوبی بود ولی سرعتم خیلی کم بود؛ برنامه داشتم حداقل ۸ ساعت اول پلی لیست رو هم ببینم؛ ولی خب با توجه به اینکه چندتا حواس‌پرتی داشتم و البته کمی کسالت دامن گیرم شده بود.

فکر نمی‌کنم بد باشه؛ قطعا فردا با انرژی بیشتر شروع می‌کنم و سعی می‌کنم ۱۲ فصل اول کتاب و ویدئو‌ها رو همزمان پیش برم.


اما برای دوستانی که میخوان بعدا بخونند:
هر دو ویدئو اول و دوم رو به ترتیب پیشنهاد می‌کنم
ویدئو اول بعضی از موارد رو توضیح نمیده؛ ویدئو دوم شاید یک خطی ولی بهشون اشاره می‌کنه و میره جلو.
که اگر با دقت ولی حتی با سرعت 2x ببینید هم متوجه‌اش خواهید شد و می‌تونید راجبش جستجو کنید ( یا اینکه مثل من مواردی که سوال بیشتر دارید رو یادداشت کنید و موقع خوندن کتاب اصلی بهش توجه کنید)
8👏8👍3