Rust for Python developers
2.03K subscribers
22 photos
1 video
2 files
81 links
Rust programming language for python developers

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

اگر به هوش مصنوعی و پایتون علاقه دارید به کانال :
@pytens
@pyhints
سر بزنید.
Download Telegram
Forwarded from Python Hints
و تمام!!!!

اعلام آتش‌بس توسط هر دو طرف.

آپدیت :

عجب خر تو خری شد؛

عراقچی؛ از ۴ صبح آتش بس می‌تونه صورت بگیره.
اسرائیل میزنه تا آخرین ثانیه‌ها

سپاه؛ خب ماهم با چندتا موشک جواب میدیم چون ثانیه‌های آخر سنگین زده

اسرائیل؛ اینارو رهگیری می‌کنیم، میگیم به اهداف جنگ رسیدیم و تمام.

خبرگزاری‌های آمریکا؛ ونس، ویتکاف، روبیو با مقامات ایران مذاکره مستقیم و غیرمستقیم داشتند.
ترامپ؛ چندتا پست درمورد صلح:
بخصوص، صلح با زور

همه چیز بنظر صلح میاد؛

سپاه، دوباره شلیک ۱ موشک به سمت حیفا.
مثل اینکه آتش بس پذیرفته نشده.


بنظر میاد؛ ترامپ هم پست‌هاش راجب صلح رو پاک کرده (کندی اینترنت اجازه بررسی به بنده نداد)

واقعاً خاورمیانه از فیلم ترکی و فیلم هندی هم غیرقابل پیش‌بینی تر هست
👍9
#5min_Rust

توی مبحث compound type نوع بعدی که بهش میرسیم مربوط هست به tuple مثل پایتون اینجا هم tuple می‌تونه چندین نوع متفاوت داده رو داخل خودش نگهداری کنه (بر خلاف آرایه‌ها که همه‌ی داده ها باید از یک نوع باشند)

اما نوع tuple توی Rust واقعا توسط () مشخص و ایجاد میشه؛ یادآوری کنم اگر یک tuple خالی داشته باشیم مثل: () اصطلاحا توی Rust بهش می‌گیم unit type و بصورت دیفالت چیزی هست که function هایی که return ندارند بر‌می‌گردونه (مثل main)

توی مبحث مربوط به توابع راجبش دقیقتر صبحت می‌کنیم؛ نکته بعدی اینکه این مورد هم مثل array,vector چیزی به اسم display trait رو نداره و برای پرینت کردنش باید از debug trait استفاده کنید.( توی پست‌های بعدی به این مباحث اشاره می‌کنم؛ لطفا الان درگیرش نشید)

یکی از استفاده‌های خوبی که از tuple میشه برای نگهداری دیتاهای مربوط به دیتابیس هست؛ نوع داده هر ستون - تعداد ستون‌ها مشخص هست ولی لزوما نوع داده هر ستون یکسان نیست.
fn main() {
let dog = ("Rex", 2, "Alex", 100);
// this line will return error as the tuple doesn't implement display trait --> don't use: {}
// println!("{dog}");

// Printing Tuple
// // using the debug macro is easier (also it will send result to stderr)
// dbg!(dog);
// // this is how we use debug trait for print --> use :?
// println!("Dog tuple ==> {dog:?}");
// // this is how we can pretty print the debug trait result --> use :#?
// println!("Dog tuple (pretty printed) ==> {dog:#?}");

// Working with Tuple Data
println!("1) {} has a dog named {}, who is {} years old, and his health score is {}.",
dog.2, dog.0, dog.1, dog.3);

// Tuple Destructuring
let (name, age, owner, health) = dog;
// use number to reposition the data for printing.
println!("2) {2} has a dog named {0}, who is {1} years old, and his health score is {3}.",
name, age, owner, health);
}


چون توی این مثال از dbg! استفاده کردم خیلی سریع و ساده بگم؛ که به توابعی که انتهای اسم اون‌ها از ! استفاده می‌شه اصطلاحا توی Rust ماکرو گفته می‌شه؛ و نکته مهمش اینه که بدون در زمان کامپایل با کدهای دیگری جایگزین میشه. (فعلا همین تعریف کفایت می‌کنه تا وقتی که خودمون macro توسعه بدیم)
8👍2
این روزها شلوغ می‌گذره؛ بسیار شلوغ!

و چون غیر از ۱ پروژه که روتین شده؛ خیلی به کد زدن Rust نمی‌رسم دنبال یک کتابی بودم که مثل Référence و آموزش سریع باشه.

این کتاب رو برای کسایی که می‌خوان تازه Rust رو شروع کنند پیشنهاد نمی‌کنم، اما اگر دنبال یک Cookbook هستید که خیلی سریع مفاهیم مختلف رو دوباره مرور کنید.
کتاب خوبی هست.

Ultimate Rust for Systems Programming
🔥18👍92
به این trait توی actix-web علاقه مند شدم.

impl FromRequest for CommonHeaders

بعد از خوندن سورس کدش؛ واقعاً لذت بردم از نحوه پیاده‌سازیش.

FromRequest

خیلی جذاب پیاده‌سازی شده؛ باهاش می‌شه با یک syntax یکسان همه نوع extractor نوشت و مهمترین بخشش اینکه با همین syntax توسعه دهنده رو متوجه می‌کنه که باید future بنویسه که درجا poll انجام بده یعنی وضعیت این متد توی event-loop به محض run شدن فقط می‌تونه resolve بشه و block, pend, ... نداریم خلاصه به محض برخورد یا ready ok یا ready err خواهید داشت.
👍115
Forwarded from RandRng
اگر از Docker Desktop استفاده می‌کنید حتما باید آپدیتش کنید؛ یک vulnerability سطح بالا توی نحوه پیاده‌سازی داره (آپدیت آخر مشکل رو حل کرده)

https://nvd.nist.gov/vuln/detail/CVE-2025-9074

این مورد باعث میشه با ۲ خط کد بشه تمام موارد امنیتی رو دور زد و به سیستم عامل اصلی دسترسی گرفت.

توی گزارش اصلی فقط ویندوز گفته شده (نمی‌دونم مک هم داره یا نه)
🔥9👍1
ابن ابزار از تیم facebook یک چیزی شبیه htop, btop هست البته با دسته بندی بهتر بخصوص برای ادمین‌های سرور

اما مهمتر از اون سورس کدش هست که با Rust نوشته شده و نکات جالبی داره :

Below Github
👍113
دوتا ابزار خیلی خوب پیدا کردم که بخاطر این دوتا چند وقتی هست vscode نگهداشتم.

Flowistry

اول با این ابزار شروع شد؛ یک متغییر یا ... رو انتخاب می‌کنید و بعد این extension رو فعال می‌کنید که باعث میشه کل کدهای دیگه fade بشه و فقط بخش‌هایی از کد که این متغییر رو تغییر دادند هایلایت بمونه.

برای خوندن سورس کد پروژه‌های دیگه و دیباگ پروژه‌های خودم خیلی کمکی هست.

اما همین تیم یک ابزار دیگه هم داره که من ۲ روزه دارم باهاش کار می‌کنم ( خیلی کم استفاده کردم ولی قدرتش خیلی زیاده) اونم :
Argus

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

توی دو موردی که من بهش برخوردم به محض سوییچ روی vsode و فعال کردنش متوجه شدم کدوم Trait داره بهم ارور میده و توی ۲ دقیقه حل شد.

تنها مشکلم با این دو مورد :
کاش برای neovim هم پلاگین میدادند؛ چون هی مجبورم جابجا بشم بین این دو مورد.

پیشنهاد می‌کنم حتما استفاده کنید.
🔥116👍2
TikTok has implemented Rust into its systems by selectively rewriting specific, CPU-intensive Go services in Rust to achieve significant performance gains, leading to a 2x increase in traffic handling and an estimated annual saving of $300,000 in cloud costs


TikTok rewrite Go micro-services in Rust (Save $300k per year)


تیک‌تاک و جابجایی از Go به Rust ...
🔥18
اگر روی نسخه‌های اخیر Rust هستید (édition:2024) پیشنهاد می‌کنم به آخرین نسخه آپدیت کنید توی آپدیت 1.90 یک تغییر جذاب داریم:

LLD is now the default linker

همین مورد روی build هایی که دارم سرعت رو نسبت به قبل افزایش داده اما من یک مورد دیگه هم دیدم؛ حجم فایل نهایی ریلیز‌ها هم کم شده.

مثلاً توی یک کد بکند که شخصاً داشتم؛ حجم پروژه به ۱۳ مگ میرسید الان با 1.90 که بیلد انجام دادم روی ۱۲ مگ هست.
برای اطمینان بیشتر؛ یک پروژه‌ای رو تازه شروع کردم بکند نیست (crate های متفاوتی رو داره) روی سیستمی که هنوز آپدیت نکردم Rust رو با معماری و توزیع و ورژن یکسان لینوکس حجم فایل خروجی پروژه (تو همین وضعیت شروع) ۱.۵ مگ بود ولی روی سیستم دیگه با Rust 1.90 به ۱ مگ کاهش یافت؛ که خب خیلی عالیه این موضوع بنظرم 👌
👍23🔥43
مدتی هست دارم برای سخت‌افزار یک شرکتی، TUI می‌نویسم و خب Ratatui بهترین گزینه هست توی Rust اما مثال‌های داکیومنت خوبی نداره بنظرم!

دوتای اول خیلی ساده‌اس، مورد سوم هم SoC و ... رو رعایت نکرده

نمی‌دونم وقت بذارم مثال‌های خودشون رو داکیومنتش رو تغییر بدم و استاندارد کنم یا اینکه کلاً کنار پروژه این شرکت یک ابزار TUI دیگه هم بنویسم و منتشر کنم 🤔
16👍1
Rust for Python developers
مدتی هست دارم برای سخت‌افزار یک شرکتی، TUI می‌نویسم و خب Ratatui بهترین گزینه هست توی Rust اما مثال‌های داکیومنت خوبی نداره بنظرم! دوتای اول خیلی ساده‌اس، مورد سوم هم SoC و ... رو رعایت نکرده نمی‌دونم وقت بذارم مثال‌های خودشون رو داکیومنتش رو تغییر بدم…
پروژه شرکت رو تحویل دادم؛
اما بعدش یک ایده به توسعه دهنده شرکت دادم، چندتا چیز بنظرم توی پروژه کم بود که خب کارفرما نخواسته بود.
بعضی موارد رو البته شخصاً اضافه کردم (آدمای خوب رو باید هواشونو داشت.) بعضی موارد هم زمان بیشتری می‌خواست که سپردم به خودشون!

مثلاً:
اینکه کل کد رو async کنند، تکنیکی که ratatui توی کدهای مثالش کم استفاده کرده و بیشتر روش hybrid رو رفته (ما توی این مرحله اصلا به async نیاز نداشتیم) و اکثر موارد multi-thread بود.

دوم نوتیف اضافه کردن؛ اینکه همون داخل ترمینال (مثل nice توی nvim) بجای اینکه وضعیت کار‌ها رو برم بررسی کنم! بتونم alert بذارم (درحد ی فلگ) که خودش بهم نوتیف بده کار انجام شد یا به خطا خورد یا ....

چندتا مورد دیگه هم بود که چون اختصاصی پروژه بود، اینجا گفتنش لازم نیست!

بعد از این دوباره پروژه برگشت بغل خودم، برای توسعه ورژن جدید :)

گفتم اینارم کم کم، به اون مثالی که برای ratatui نوشتم اضافه کنم.
Async - Notification (multi-thread)

بعد که تکمیل شد، بفرستم بالا!
👍154
Rust for Python developers
مدتی هست دارم برای سخت‌افزار یک شرکتی، TUI می‌نویسم و خب Ratatui بهترین گزینه هست توی Rust اما مثال‌های داکیومنت خوبی نداره بنظرم! دوتای اول خیلی ساده‌اس، مورد سوم هم SoC و ... رو رعایت نکرده نمی‌دونم وقت بذارم مثال‌های خودشون رو داکیومنتش رو تغییر بدم…
This media is not supported in your browser
VIEW IN TELEGRAM
امروز فرصت کردم و وقت گذاشتم روی آپدیت آموزش Json Editor مربوط به Ratatui هم یک مقدار استاندارد سازیش کردم هم فیچرهایی که خیلی کاربردی هستند رو بهش اضافه کردم؛ چیزایی که وقتی TUI توسعه می‌دید بهش نیاز خواهید داشت.

قرار نبود و نیست یک چیز خفن درست کنیم؛ قراره فقط فیچرهای مهم رو یک رفرنس برای رجوع بهشون داشته باشیم.

خروجیش شد این ویدئو؛ که هم async هست هم notification رو داره هم ذخیره در فایل و paste کردن و ...

بعد از رکورد ویدئو متوجه شدم بهتر بود برای نمایش key, value ها برم سراغ قابلیت اسکرول کردن بخصوص اینکه روی پروژه خودم زمان گرفت ازم تا تونستم درست کانفیگش کنم.
توی اولین فرصت در روزهای آینده این مورد رو هم اضافه خواهم کرد و سورس کد رو باهاتون به اشتراک میذارم!
👍115
Forwarded from RandRng
پیام پاول دوروف به مناسبت تولد ۴۱ سالگی و البته قوانین کنترل شدید اینترنت اروپا؛

https://t.iss.one/durov/452
👍121
این متن

It took me nearly 1 year of full-time programming in Rust to become proficient and no longer
have to read the documentation every 5 lines of code


از کتاب
Black hat Rust

بنظرم خیلی درسته؛ حالا که درگیر کد زدن هستم واقعاً متوجه میشم خیلی پیش میاد یک مفهوم رو بفهمی و به راحتی کدهای دیگران رو بخونی و متوجه بشی!
اما اینکه خودت اون کد رو بنویسی و همه چیز درست و تا حد خوبی بهینه و idiomatic باشه خیلی چیز متفاوتی هست، اما

Favor getting things done rather than the perfect design that will never ship. It’s
far better to re-work an imperfect solution than to never ship a perfect system.


خیلی وقتا میزان خطاهایی که میگیرفتم، یا توضیحات clippy و ... باعث می‌شد پنیک کنم و هی تغییرات بیشتر بدم.

If you are fighting with the limits of the language, it may mean that you are doing something wrong. Stop what you are doing, take a break, and think about how you can do things differently.


بعضی وقتا دست کشیدن و فکر کردن مجدد باعث میشه کد بهتری بزنم، خیلی وقتا شده کد رو زدم و بعد از چندتا اجرا و ... برگشتم و refactor کردم و کد خیلی بهتر اجرا شده!
با اینکه کد اول خیلی خفن‌تر هم بوده شاید (چون از بچه‌ها شنیدم) اما ترجیح میدم کدم راحت‌تر خونده و درک بشه تا خفن‌تر بنظر بیاد.

و درنهایت، اگر Error handling رو درست انجام داده باشید unwrap, expect همه جا نداشته باشید توی پروداکشن هیچ موقع کد کرش نمی‌کنه و این خیلی چیز جذابی هست.

چندتا توضیح:
پروژه jsedit استثنا بود چون می‌خواستم بعنوان cookbook نگهش دارم؛ که چیزای پر تکرار توی سخت‌ترین حالتش همیشه دمه دستم باشه.

دلیل خوندن این کتاب هم این نیست که می‌خوام به دنیای امنیت برگردم (گذشته‌ها گذشته) فقط چون کتابی برای optimization پیدا نکردم دارم این کتاب رو می‌خونم.

توی همه‌ی زبان‌های برنامه‌نویسی کتاب‌های مربوط به امنیت و نفوذ و توسعه ابزارهای نفوذ معمولاً کدهای بهینه‌تری دارند.
اینم از من به شما

خلاصه‌ای از نکات مهم.
👍13🔥42
Rust for Python developers
این مصاحبه Jon Gjengset بنظرم جالب بود اگر دوست داشتید ببینید Youtube Video
یک نکته قابل توجهی که می‌گه و تو گروه هم ما راجبش بحث کردیم.
اینه که توی مارکت Rust برنامه‌نویس‌های Junior بیشتر وجود داره (که خب استخدام نشدن هم دلیلش همین هست) اکثر شرکت‌هایی که میرند سمت زبان Rust نیاز به کسی دارند که بیزینس رو خوب بلد باشه یا توی زبان برنامه‌نویسی و ... ایی که قبلا کار کرده Senior باشه و حالا Rust هم بتونه کد بزنه!

برای همین ۹۹٪ شما وقتی می‌گید من دارم Rust میخونم؛ می‌گم: اشتباه می‌کنی.

هیچ شکی نیست که قطعا همه جونیورها هم یک روزی سنیور خواهند شد! ولی اگر توی Python, Go, ... شروع کنید که مارکت همین الان کار برای جونیور داره؛ احتمالا خیلی سریعتر پیشرفت می‌کنید؛ تجربیات مهم رو بدست میارید و سنیور می‌شید!
👍504