Rust for Python developers

Channel
Logo of the Telegram channel Rust for Python developers
@PyRustPromote
1.14K
subscribers
5
photos
42
links
Rust programming language for python developers یک توسعه دهنده پایتون هستم که سعی میکنم rust یاد بگیرم. تو این مسیر منابع و نظرات شخصی خودم رو با آیندگان هم به اشتراک میذارم اگر به هوش مصنوعی و پایتون علاقه دارید به کانال : @pytens @pyhints سر بزنید.
من خیلی از این اطلاعات رو در مورد مموری توی Rust مجبور شدم دونه دونه بخونم مثلا اینکه
stack: 2MB-8MB

و ... شاید به کار خیلی‌ها نیاد ولی برای System developer جزو واجبات هست که حداقل یکبار این موارد رو برای زبان برنامه‌نویسی که کد میزنه ببینه و بررسی کنه.

خیلی اتفاقی توی یوتیوب این ویدئو رو شروع کردم و دیدم داره این اطلاعات رو همرو یکجا توضیح میده؛ الان روی دقیقه ۸ هستم و دارم ازین ویدئو لذت می‌برم امیدوارم بدرد شما هم بخوره

Youtube Link

بعدش میرم سراغ ۱۵ صفحه Rust خوندن امروز
با وجود کم خوابی ۲۴ ساعت گذشته؛ دارم از یادگیری Rust لذت میبرم و همین نمیذاره بخوابم.
قطعا اگر با multi-threading توی Rust کار کرده باشید؛ حتما این ارور رو دیدید.
همیشه هم راهکار ساده هست و با گوگل سرچ اول بدست میاد. شما move رو قبل از closure میذاری و مشکل حل میشه وقتی هم که سرچ میزنی چرا همه زدند که move بصورت زوری ownership رو میده به closure.

سوالی که امروز توی فروم دیدم؛ من که توی مثال بالا غیر از چاپ کردن counter کاری باهاش نمیکنم پس چرا با reference کار نمی کنه ؟ یا از کجا باید بدونم چه زمان هایی باید از move استفاده کنم ؟

بخش اول سوال جوابش بر میگرده به خود ownership و تفکیک بودن thread ها از هم؛ یادتون باشه توی Rust هر value باید فقط و فقط یک owner داشته باشه که توی threading ممکنه نقض بشه اگر راهکار فعلی براش نبود.

اما بخش دوم؛ سواد closure رو میخواد و ربطی به thread نداره؛ closure هارو به ۳ حالت توی annotation استفاده میکنند.
Fn : که بعنوان ورودی یک رفرنس میگیره
FnMut : که بعنوان ورودی یک رفرنس با قابلیت تغییر میگیره
FnOnce : خود value رو میگیره

دقیقا هم FnOnce توی ویژگی هایی هست که متد spawn بهش نیاز داره و بررسی می کنه و اسم FnOnce هم برای این Trait کاملا عالی هست؛ چون Ownership اون value رو میگیره و بعد دیگه غیر قابل استفاده میشه.

برای همین هست که باید توی مثال تصویر؛ closure رو مجبور کنیم که ownership متغییر counter رو بگیره چراکه خود کلوژر می دونه به reference فقط نیاز داره و Fn براش کفایت می کنه اما spawn نیاز به FnOnce داره برای امن بودن threading, ownership پس با استفاده از move کلوژر رو میبریم روی FnOnce.
Forwarded from Python Hints
چیزی که درد واقعه رو بیشتر می‌کنه

#معدن_طبس
وقتی توی گروها سوال می‌بینم، از داخلش می‌شه فهمید باقی افراد روی چه مباحثی مشکل دارند.

مثلاً توی موضوع lifetime متوجه شدم که خیلی از بچه‌ها فکر می‌کنند, وقتی
&’static str
میزنند، به اون string slice دارن lifetime جدیدی می‌دهند.

درصورتی که این برداشت اشتباه هست

موضوع lifetime annotation هم مثل موضوع generic هست، شما وقتی می‌زنی T: Display داری میگی که من دیتایی رو میدم که حتماً Display trait براش پیاده‌سازی شده.

توی مثال:
&’static str
شما میگی این دیتا می‌تونه lifetime به اندازه طول برنامه داشته باشه، اگر دیتایی بدید که این مقدار lifetime رو نداره کامپایل نمی‌شه و بهت ارور میده

موضوع بعدی قوانین lifetime مشخص کردن توی توابع هست (تحت چه شرایطی حتماً lifetime نیازه) که خب بنظرم باشه برای یک پست دیگری.
توی گروهی بحث دیدم راجب تفاوت های :
.iter(), .iter_mut(), .into_iter().
و دیدم انگار خیلی از اعضا تفاوت هاش رو درک نکردن برای همین closure های داخل متدهایی که با iterator میاد رو متوجه نمیشدند.

گفتم بزنم به ریشه و چون کانال خودمم مقدمات هست اینجا هم مطلب رو بذارم.
تفاوت اصلی توی این هست که چی برمیگردوند یادتون باشه وقتی توی Rust چیزای مشابه میبینید که متوجه نمیشید چرا نسخه های مختلف داره حتما ۲ تا مورد توی ذهنتون باید بیاد :

1- Borrowing and Ownership
2- Memory (stack, heap, binary)


توی iterator ها هم تفاوت روی borrowing and ownership هست؛ وقتی از iter استفاده می کنید چیزی که برای هر آیتم تحویل میگیرید یک immutable reference خواهد بود & خالی وقتی از iter_mut استفاده کنید حتما mutable reference خواهید داشت &mut اما موضوع برای into_iter کمی متفاوت هست.

اگر مستقیم روی value استفاده بشه؛ ownership رو به دست خواهد گرفت.
اگر روی reference ایی از اون value استفاده بشه عملکرد iter رو خواهد داشت.
و در نهایت اگر روی mutable reference ایی از اون value استفاده بشه عملکردش مثل iter_mut خواهد شد.

برای همین توی closure متدهایی که روی اینها میاد مثل map, … حالات مختلفی رو میبینید.


امیوارم منظورم رو رسونده باشم؛ اگر نه حتما توی کامنت بپرسید.
اگر شما هم به Axum علاقمند شدید (هرچند من بعد از این مورد احتمالا سراغ Actix هم خواهم رفت) این دوره هم خوبه بنظرم :

Youtube Video

البته مدرس هندی هست (ولی لهجه‌اش قابل تحمل؛ بخصوص تو سرعت بالا ولی انگار AI داره صحبت می‌کنه)

خوبیش اینه که axum 0.7.5 رو کار می‌کنه؛ بیشتر بدرد کسایی می‌خوره که بکند رو بلدند و روی Rust, Axum و کتابخونه‌های اینور می‌خوان سینتکس رو یاد بگیرند.
آپدیت وضعیت:

این مدت کارهای شرکت‌هایی که استعفا دادم رو پیش بردم و نیروهای جایگزین رو onboard کردم.
هرچند هنوز خودم درگیر هستم (ولی خیلی سعی می‌کنم دور بمونم و ساعت کاری پر نکنم)
پیشنهاد دستمزد بالاتر هم بهم دادند ولی دیگه نمی‌خوام کار کنم (پروژه‌ها خسته کننده شده)

توی این مدت بهم اجازه داد روزی ۳-۴ ساعت Rust کد بزنم.
الان از توانایی کد زدنم مطمئن شدم، اما با مدل پروژه‌هام حال نمی‌کنم بنظرم می‌شه بهتر ازین باشه واقعاً.

برای همین تصمیم گرفتم، از امروز دوباره برگردم روی آموزش خوندن، خوبی این مدت کد زدن این بود که فهمیدم یک سری مفاهیم رو جزئیاتش رو ندیدم توی آموزش‌های قبلی و این جزئیات برای کد بهتر و تمیزتر زدن مهم هست.

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

الان میدونم دقیقاً کجاها ضعف دارم و چه چیزهایی رو به جزئیاتش نیاز، البته که با منابع جدید ادامه خواهم داد.


این وسط یک اتفاق دیگه هم افتاد، چندروز قبل مدیرم با مدیرعامل headquarter اصلی برای دفاع از آنچه که به ناحق علیه تیم‌های فنی بود دعوا کرد.
امروز هم استعفا داد، با اینکه این شرکت تنها جایی بود که کار میکرد.
برای من بعنوان مدیر میانی (تیم‌لید بودم بیشتر) این موضوع خیلی درگیری ذهنی ایجاد کرد تا اینکه امروز به این تصمیم رسیدم با وجود اینکه این شرکت درآمد ساده و خوبی رو بهم می‌داد استعفا بدم در حمایت از مدیر خودم که به حق دعوا کرد، حدود ظهر اینکار رو کردم و متوجه شدم باقی مدیرهای فنی همراه ایشون هم استعفا دادند.

و بعد از اون یکسری از نیروهای زیر دست، متأسفانه با من هماهنگ نشده بود ولی همگی متنی یکسان برای استعفا داده بودند با این خلاصه که :

با توجه به اتفاقات افتاده، به این نتیجه رسیدیم مدیرعامل جدید درک درستی از کارهای فنی نداره و شرکت موقعیتش توی بازار جهانی رو از دست خواهد داد.
نمی‌خواهیم شاهد نابودی آنچه که ساختیم باشیم.

حدود ۷۰ نفر استعفا دادند در کل، اینجوری شد ۳ تا استعفای شغلی برای من
ولی بابت این آخری خیلی خوشحالم، بعد از این استعفا واقعاً حالم خوب شد چون طرف درستی وایسادم.

در نهایت اینکه؛ یک جورایی داره بهم الهام میشه که شاید وقتش هست برم سمت Rust برای موقعیت شغلی بعدی.

برای همین ۵-۶ مورد دعوت به همکاری که این چندروز بعد از تعطیلات دریافت کردم رو فعلا رد کردم؛ شاید با همین ۲ تا شغل که دارم بمونم و به وقت گذاشتن روی Rust ادامه بدم

شایدم ۱ مورد دیگر رو هم اضافه کنم، چون از اول تصمیم روی استعفا از ۲ تا شغل بود نه ۳ مورد.

ولی بطور خلاصه، برگشتم روی یادگیری باز و اینبار عمیق‌تر قرار هست Rust بخونم.
خب خب خب؛

جذاب شد، از امروز روزی ۲-۳ ساعت روی بکند و Rust خواهم بود با Axum البته.

دلایل انتخاب Axum رو توی گروه گفتم، موردی که باید اضافه کنم؛
من خیلی از این سال‌ها روی Django, FastApi کد میزنم (با وجود اینکه با node, Express بکند رو یاد گرفتم)
برای همین Axum رو انتخاب کردم، چون شباهت زیادی به syntax پایتون داره تا Actix و شاید همین رو بتونم پیشنهاد بدم به بچه‌هایی که از سمت node دارن میان Actix برای اون‌ها ممکنه راحت تر و آشناتر باشه.
Rust for Python developers
کسی دوره ویدئو Axum چیز خوبی می‌شناسه ؟ قبلاً هم گفتم، تکنیک کتاب خوندن من برای مباحث جدید اینطوری هست: ۱- اول بشینم یک ویدئو با آرامش ببینم (بصورت فیلم وار) ۲-در مرحله بعد شروع به خوندن کتاب کنم ۳- کد زدن و تمرین با پروژه تو این مدت روی Axum یک مقدار…
دوره ای که توی پست بالا گذاشتم از چیزی که فکر می‌کردم بهتر بود.
مخصوصا اگر مفاهیم وب رو بلد هستید.

یک مقدار سرچ و حوصله برای خوندن داکیومنت و البته اسناندارد سازی آنچه که در این دوره گفته می‌شه بکند رو براتون در میاره.
تعدادی از ویدئوهارو دیدم و قبل از اینگه بیشتر پیشرفته بشه (دیتابیس و ... چون اون موارد فارغ از Axum هست) دارم روی استاندارد سازی کدها کار می‌کنم و تمرین آنچه یادگرفتم.


اضافه کنم؛ من آدم با تمرکز یادگرفتن هستم؛ یعنی الان که هدف Axum هست؛ ترجیح میدم تمام آنچه بعنوان استاندارد بکند باهاش آشنا هستم و الان به ذهنم میرسه رو با این کتاب خونه یاد بگیرم.

برای همین روی دیتابیس و ... کار نکردم هنوز و دارم دیتای hard code جابجا می‌کنم و ...
کسی دوره ویدئو Axum چیز خوبی می‌شناسه ؟

قبلاً هم گفتم، تکنیک کتاب خوندن من برای مباحث جدید اینطوری هست:
۱- اول بشینم یک ویدئو با آرامش ببینم (بصورت فیلم وار)
۲-در مرحله بعد شروع به خوندن کتاب کنم
۳- کد زدن و تمرین با پروژه

تو این مدت روی Axum یک مقدار این تکنیک رو دور زدم، که الان به این نتیجه رسیدم از اینجا به بعد اشتباه هست.
باید جزئیات بیشتری رو کار کنم.


البته وقت رو تلف نمی‌کنم؛ منتظر دوره خوبی که شاید هیچوقت وجود نداشته باشه و با :

Axum Introduction Youtube

دوره برای ۱ سال قبل هست، عالی نیست ازین منظر که ورژن 0.7.5 تغییرات زیادی داشته ولی خب بهتر از هیچی هست.
Rust for Python developers
بوقت استعفا باید از بعضی کارهام استعفا بدم، که قویتر Rust رو دنبال کنم بخصوص کارهایی که دیگه چیزی برای یادگیری نداره و فقط دارم به شرکت سود می‌رسونم بدون اینکه خودمم سودی ببرم. من خیلی از پیشرفت‌هام رو مدیون وقت‌هایی هستم که به درستی تصمیم به استعفا گرفتم‌.
امروز ۲ تا استعفا رو تقدیم مدیریت
۲ تا شرکت کردم.

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

علاوه بر این حداقل ۸ موقعیت شغلی جدید هم باز می‌شه؛ چون فکر نمی‌کنم کسی مثل من توی یک شرکت همزمان :

ML engineer
Backend Developer
Linux Server Admin
DevOps

کار باشه اونم وقتی قراردادش فقط AI بوده‌.

خلاصه که خوش بینم به پیشرفت بیشتر.
واقعاً بعد از حداقل ۳-۴ سال Rust اولین زبانی هست که دارم میگم :

۱- خب الان باید این کد رو بزنم؛
۲- کد رو زدم
۳- اوکی چندتا باگ با کامپایلر
۴- درست شد
۵- کار می‌کنه
۶- اوکی حالا چرا کار می‌کنه ؟
۷- چرا اینجوری کد زدم ؟
۸- اصن چیکار می‌خواستم بکنم ؟
۹- هیچی از Rust نمی‌فهمم

عصبی کننده‌ شاید باشه ولی، واقعاً عاشقشم
با قدرت و سرعتی که دنیای Rust داره پیشرفت می‌کنه
بنظرم خیلی اتفاقات عجیب و غریب و شاید غیر قابل باوری رخ خواهد داد.

اینو با توجه به تعداد افرادی که دارند می‌کوبندش میگم؛ البته شخصا فکر می‌کنند درکش نکردند.
مثل پایتون که وقتی من شروع کردم خیلی‌ها می‌گفتن تهش می‌تونی باهاش todo لیست‌های خودت رو بنویسی و نگهداری البته که الان Rust خیلی بهتر از اون زمان Python هست.

https://github.com/tracel-ai/cubecl
More