Rust for Python developers
1.85K subscribers
21 photos
1 video
2 files
70 links
Rust programming language for python developers

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

اگر به هوش مصنوعی و پایتون علاقه دارید به کانال :
@pytens
@pyhints
سر بزنید.
Download Telegram
Rust for Python developers
#5min_Rust قبل از اینکه دوپایی بپریم توی معرفی انواع Data type توی Rust یک تفاوت رو بین Rust, Python ببینیم. توی rust بر خلاف python برنامه‌نویس نمی‌تونه هر زمانی که دلش خواست توی متغییر مقداری با دیتا تابپ متفاوت بریزه؛ کد زیر توی پایتون درست هست: my_var…
#5min_Rust

از حالت‌های دیگه‌ای که می‌تونید نوع داده رو مشخص کنید استفاده از _ و البته as که ممکن توی کدهای دیگران ببیند.
در نهایت
std::<TYPE>::MIN
std::<TYPE>::MAX

رو هم برای دیدن کوچکترین و بزرگترین مقدار اون نوع داده می‌تونید print کنید.
👍131
توی گروه codecraft همینجوری که دارم تسک‌ها رو تمرین می‌کنم کدها رو با rust می‌نویسم و به اشتراک میذارم.

خیلی از مواردی که توی پست‌های ۵ دقیقه یادم میره مثال بزنم یا مثال به ذهنم نمیاد توی کدهای اونجا هست (الته کدها بصورت تصویر هست) تا حتی اگر کسی خواست از روی کدها هم تسک‌ها رو انجام بده حداقل مجبور بشه یکبار کد رو بخونه (موقع تایپ)

https://t.iss.one/codecrafter_fa/472
👍11
توزیع ubuntu اعلام کرده میره سراغ پروژه uutils؛ این پروژه یکی از بزرگترین بازنویسی‌ها توی Rust هست که تمام ابزارهای مهم پروژه GNU Linux رو با Rust بازنویسی می‌کنه.
ls, cd, cp, mv, mkfifo, ....

مشکل اصلی هم بخاطر، باگ‌های گزارش شده سر Memory Safety هست؛ اوبنتو هم این مورد و پرفورمنس رو دلیل این حرکت دونسته.

پرفورمنس از کجا میاد؛ قطعا Rust به خودی خود از C سریعتر نیست ولی سختی مالتی‌ترد و مالتی پراسس روی C باعث شده بسیاری از توسعه دهنده‌های core utils سراغ اینکار نروند و خب بارها صحبت این موضوع شده بود که این یک bottleneck برای خیلی از ابزارهای دیگه که بر اساس core utils توسعه داده می‌شوند هست، مشکلی که توی Rust وجود نداره و با یک جستجو حتی نتایج بنچمارک‌ها روی ابزارهایی که امکان Multi thread / Multi Process شدن براشون بوده رو می‌بینید که توی بعضی موارد حتی تا 10x سریعتر هستند.

توسط پروژه oxidizer می‌تونید همین الان اینکار رو بکنید و تست بگیرید ubuntu با نسخه rust ابزارها چیکار خواهد کرد.



اطلاع بیشتر :
Link


پ.ن : راستی اگر اینطوری بشه یعنی GNU از Ubuntu و بعد از Linux حذف بشه؛ دیگه اینایی که تازه مدرک کار با ترمینال لینوکس گرفتن
زخممون نمی‌کنند که Linux نگو، باید بگی Gnu Linux
اگر این مشکل رو حل می‌کنه من ۱۰۰٪ پایه‌ام 😂
👍29🤣17😁2
Forwarded from RandRng
زردی من از تو / سرخی تو از من

#ai_generated
13👍4🍌2🌭1
Forwarded from RandRng
Media is too big
VIEW IN TELEGRAM
نوروز مبارک 🌹🎊🎉🎉🎊🎉🌹

امیدوارم سال جدید از سالی که لحظات آخرش هست، بهتر باشه.
پر از خبرای شادی بخش برای ایران و ایرانیان.

سایه آخوند از وطن دور
❤‍🔥25🎉3
فرصت کردم، این کتاب رو شروع کنم و توی همین فصل‌های اول واقعاً لذت بردم.

بسیار روان نوشته شده؛ هرچند ترجیح میدادم مثال‌های بیشتری داشته باشه ولی خب به لطف LLM ها دیگه خیلی نیاز نیست همین‌ که خوب توضیح میده مفاهیم رو واقعاً فوق‌العاده هست.

امیدوارم تا آخرش همینطور باشه

Rust Atomics and Locks
👍244❤‍🔥3
شاید شما هم تعجب کردید؛ شایدم نه که موزیلا مدتی قبل یک سری اخراج توی تیم‌هاش انجام داد (که کم هم نبود) ولی اپلیکیشن‌هاش توی ios, android, desktop توی آپدیت‌های بعدی به مراتب بهتر و بهتر شد.

دلیلش خیلی تو مخ من بود (فکر میکردم از ابزاری مثل Dioxus استفاده می‌کنند؛ که درست در نمیومد چون هنوز تیم‌های native خودشون رو داشتند.

این قضیه تو مخی من بود تا اینکه متوجه توسعه UniFFI شدم؛ بر اساس خود داکیومنت :

UniFFI is currently used extensively by Mozilla in Firefox mobile and desktop browsers; written once in Rust, auto-generated bindings allow that functionality to be called from both Kotlin (for Android apps) and Swift (for iOS apps). It also has a growing community of users shipping various cool things to many users.


ابنطوری منطق رو ۱ بار می‌نویسه و بعد توی کدهای مختلف android, ios, desktop اون رو استفاده می‌کنند. دیگه مشکلی هم برای استفاده از جدیدترین فیچرهای هر پلتفرم نداره (وقتی ایده خوب و پیاده‌سازی خوب کنار هم میاد).


مثال جایی که کاربرد زیادی داره:
یک پروژه‌ای چندین سال قبل داشتم که شامل بیش از ۵۰ تا فرمول ریاضی و بیش از ۲۰ مورد الگوریتم بود تا خروجی درست رو تحویل بده؛ حتما پیش خودتون می‌گید ببرش ۱ بار روی سرور پیاده‌سازی کن یک endpoint بده به فرانت تموم بشه بره.
گزینه خوبی هست ولی نه وقتی مزیت رقابتی کار شما نسبت به باقی privacy دیتای کاربر هست و این محاسبات بطور کامل باید روی دستگاه کاربر باشه؛ غیر از اون حجم دیتاها توی بعضی شرایط بسیار بالا بود که خیلی عاقلانه نبود برای اون دیتاها هم از کاربر بخوایم آپلود انجام بده.

پس مجبور بودیم؛ ۴ بار پیاده‌سازی کنیم:
۱- تیم تحقیقاتی که دائمی روی پایتون کار می‌کرد.
۲- تیم C# که برای ویندوز نرم‌افزار رو تولید می‌کرد (دسترسی بالاتر)؛ کاربر ios, android می‌تونستند دیتاهاشون رو باهاش به اشتراک بذارند برای همین نیاز بود قابلیت پردازش قویتر هم داشته باشه اگر خواست گزارش جزئی تری بدست بیاره و ....
۳- تیم Swift که روی نسخه iOS, iPadOS کار می‌کرد.
۴- تیم Kotlin که روی نسخه Android کار می‌کرد.

خیلی وقتا پیش میومد یک اشتباه توی منطق کار با آرایه‌های چند بعدی (برای optimization باید اینطوری پیاده‌سازی می‌شد که بشه از GPU, CPU همزمان استفاده کرد) باعث می‌شد یا نتایج نهایی اشتباه بشه یا محاسبات خیلی کند بشه و البته گوشی بیش از حد داغ کنه.

هیچ وقت یادم نمیره اون روزا مجبور بودم کار با آرایه رو روی C#, Js, Kotlin, Swift یاد بگریم تا ایرادات بچه‌ها رو پیدا کنم؛ کاری که اگر به عقب برگردم حتما یکبارم که شده با این پکیج تستش می‌کنم.

اون زمان اینطوری بودیم که تا مجبور نشدیم؛ الگوریتم جدید رو برای پیاده‌سازی نفرستیم وقتی رقیبا الگوریتم‌هاشون به خوبی کار ما می‌شد اونوقت نسخه جدید میدادیم. اینطوری بود که تیم تحقیق v70 الگوریتم روی میداد برای پیاده‌سازی ولی روی اپلیکیشن می‌شد v5 الگوریتم. خیلی میفهمم چرا یک تیم باید از چنین ابزاری استفاده کنه.
👍204
کاش یک سالی هم بیاد که توش اصلاً لازم نشه بهم #تسلیت بگیم.

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

یعنی میشه؟ تا ما زنده‌ایم !
یک سال وقتی تموم میشه، بیام اینجا بزنم:

بچه‌ها دقت کردید، امسال لازم نشد بهم دیگه تسلیت بگیم !!

من واسه اون روز می‌جنگم.

#بندرعباس
30👍4🎉3
کتاب async rust منتشر شده.
اومدم بخونم که توش پیشنهاد داده بود قبلش
Rust web programming
رو بخونم که توسط همین نویسنده منتشر شده (توی لیست کتاب‌هایی که اکر وقت کنم می‌خونم، نگهش داشته بودم)

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

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

پ.ن:
برای آموزش‌های ۵ دقیقه‌ای، فراموش نکردم فقط این روزها بسیار بسیار زمانبندی فشرده‌ای دارم. سرور و داوپس و شبکه و برنامه‌نویسی و هوش مصنوعی و ... همرو دارم انجام میدم 🤦

قطعاً کمی شرایط بهتر بشه، ادامه خواهم داد.
🔥27👍9
Forwarded from RandRng
#تجربه

از تجربیات دوستان :

قبل من یکی تو بود
بعدش من رفتم و مکالمه اونارو هم قبلش شنیده بودم.
خیلی از رزومه خوشش اومده بود و شروع کرد از یکی از نیروهاش که تو تیمشه هی تعریف کردن ولی
گفت یه تسک میدیدم ما خیلی راحتم هست ببینیم چجوری انجام میدین ۱۶ ساعت زمان دارین، همونجا هم گفت و راحت بود.
نکته بعدی اینکه دورکاری هستن کل تیمش.
بعد گفت یه پروژه انجام می‌دید و بعد از اون قرارداد میبندیم.
در نهایت گفت از لحاظ مالی مساله ای نیست و اگر بخواید بیمه و ... هم رد میشه؛ ازین حرفا که ما دنبال آدم درست هستیم که هم فنی و هم اخلاقی بتونیم کار کنیم.
زمینه های کاری هم ویژن و هم ان ال پی بود.

اینکه ریموت هست هم منو خوشحال میکنه
ولی اینکه شفاف نیست این قسمتش و اینکه راجب حقوق هیچی نگفت عجیبه


من عیناً متن رو گذاشتم، ایشون از من راهنمایی خواسته؛ اما چندتا چیز دیگه که توی صحبت مشخص شد :

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


حالا تحلیل من :

قبلاً گفتم بازم می‌گم، تسک فرستادن هم حتی کار درستی نیست، مصاحبه کننده در ۲ حالت به شما تسک می‌ده :
۱- سواد نداره شمارو ارزیابی کنه؛ ۹۹٪ مواقع.
۲- شما شدیداً استرس و ... دارید و نمی‌تونید توانایی خودتون رو نشون بدید ولی مصاحبه کننده حس می‌کنه توانایی و سوادش رو دارید و بهتون یک شانس میده؛ ۱٪ مواقع.

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

حالا فرض کنیم که این مورد درست؛ چرا برای ارسال تسک ... از ایمیل رسمی شرکت استفاده نشده ؟ ایمیل رسمی با اسم و اطلاعات ارسال کننده با متن و موضوع دقیق که این تسک برای استخدام هست، حتی تیم‌های استارتاپی هم یک ایمیل (دامنه رسمی ندارند) ارسال می‌کنند و بعد با شماره‌‌ی شرکت پیامک می‌دند که تسک مصاحبه شرکت فلان برای شما ارسال گردید.

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

موضوع بعدی، چرا نباید بعد از انجام تسک؛ با نیرو قرارداد بسته بشه ؟ توی قانون ما حتی قرارداد موقت و برای ارزیابی هم داریم که نیازی به پرداخت بیمه و مالیات و ... هم نداره
قرارداد ۳ ماهه هم هست و حتی میشه ۱۵ روز بعد هم کنسل کرد قرارداد رو.

درنهایت من به ایشون گفتم :

نه تسک رو انجام بده، نه سراغ پروژه بره؛ این بسیار بسیار شبیه به اون شرکت‌ها و قرارداد‌هایی هست که افراد توی لینکدین میزنند پولشون رو پرداخت نکرده و ...

همیشه گفتم بازم می‌گم؛
مجانی واسه هیچکس کار نکنید.
قرارداد رسمی و دقیق ببندید و دقت هم بکنید، که واسه پولتون التماس نکنید.
👍14❤‍🔥42
#5min_Rust
توی این آموزش‌ها فرض بر این بوده که شما پایتون رو بلد هستید (یا با زبان دیگری کد زدید).
یادم نیست توی صحبت‌های قبلی راجب نوع داده char صحبت کردم یا نه؛ این نوع داده فقط ۱ عنصر داره (scalar type) و با ' هم نمایش داده میشه.
راجب boolean هم که صحبتی نیست؛ فقط چندتا نکته
and: &&, or: ||, not: !

تا اینجا همه نوع داده‌هایی که دیدیم scalar type بودن (شامل یک مقدار میشن) مثلا برای int32 شما فقط یک مقدار می‌تونی مشخص کنی (نمی‌تونی بیش از ۱ عدد به یک متغیر از نوع int32 بگی که برات نگهداری کنه در لحظه)

اما نوع دیگری هم داریم به اسم compound type توی پایتون list, tuple, array , ... رو یادتون بیاد که در لحظه می‌تونند چندین مقدار رو نگهداری کنند.
برای شروع بحث راجب این نوع بهترین گزینه بنظرم همون array هست (بله دوستان توی پایتون list همون array نیست؛ یک ماژول جدایی داریم برای این منظور و این اشتباه مدرسین و کتاب‌ها هست که لیست رو آرایه معرفی می‌کنند)
https://t.iss.one/pyHints/64

آرایه‌ها چندتا محدودیت دارند که مهم‌ترین اونها :
۱- تمام عناصر داخلشون باید از یک نوع باشه؛ مثلا همگی int32 (دیگه حق ندارید توش int8 بریزید)
۲- طول آرایه باید از قبل کاملا مشخص باشه.
همین دو مورد برای بهینه بودن آرایه‌ها کفایت می‌کنه. (بیشتر توضیح نمیدم اگر لازم بودیم می‌تونید بپرسید که دقیفتر توی پایتون توضیح بدم)

اما برگردیم به Rust و ببینیم چطوری باید با array کار کنیم.

fn main() {
let numbers: [i8; 5] = [0, 2, 25, 7, 9];
}

توی این مثال چون من درجا دارم مقدار هم به متغییر (لیبل) میدم نیازی نبود که نوع داده‌اش رو مشخص کنم؛ البته که یادمون هست بصورت دیفالت برای اعداد int کامپایلر نوع داده i32 رو بر میداره و من نوع داده رو خودم i8 گذاشتم اما مقدار دوم 5 مربوط میشه به تعداد عناصری که این آرایه می‌تونه داشته باشه.

برگردیم به صحبت راجب stack, heap؛ چون نوع داده و تعدادش رو می‌دونیم پس آرایه numbers من جاش توی stack هست.

در نهایت اگر قرار نیست آرایه رو در لحظه تعریف کردن مقدار دهی کنید حتما حتما باید نوع داده‌ای که قرار هست داخلش بریزید و تعداد اون رو براش مشخص کنید.

fn main() {
let mut tg_ids: [&str; 5] = [""; 5];
tg_ids[0] = "@pyrust";
println!("The first telegram channel is: {}", tg_ids[0]);
}

چندتا نکته :
اندیس‌ها توی rust هم از 0 شروع میشه
مقدار دیفالت دادن توی مثال رو می‌بینید:
[""; 5]

که به کاماپلر میگه یک آرایه از شامل ۵ تا "" بسازه
درنهایت اگر بخوایم یک عنصر از آرایه رو تغییر بدیم؛ حتما باید اون رو mut کنیم ولی تعداد عناصر رو نمی‌تونیم تغییر بدیم.
👍111
تقریباً roadmap یادگیری من روی Rust مشخص هست و اکثراً هم می‌دونید.

شب قبل داشتم با یکی از دوستان صحبت می‌کردم که بسیار درگیر یادگیری و درک مطالب شده؛ مطالبی مثل :
Error Handling, Traits, Async, ...

و دنبال best practices هرکدوم هست؛ لنظر خودش یادگیری انجام نشده مگر با درک همه این موارد پس پروژه‌ای رو شروع نمی‌کنه.

شرایط رو برای ایشون توضیح دادم؛ گفتم اینجا هم بگم:

دوستان وضعیت یادگیری من رو با خودتون مقایسه نکنید، چرا ؟
من بیشترین میزان کاری که انجام میدم code review هست؛ چیزی بالغ بر ۸۰٪ وقتم روی این قضیه میره
باقی موارد خرج این میشه که آیا منطق کد درست هست و ...

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

اما اگر شما از یک زبان سطح بالا؛ مثلاً پایتون، جاوااسکریپت یا .... اومدید و دارید Rust رو یاد می‌گیرید، اینکه همون اول می‌خواید همه چیز رو بفهمید و بعد پروژه زدن رو شروع کنید ممکن هست اوضاع رو براتون وخیم کنه.

پیشنهاد و راهکار:
مباحث مقدماتی رو یاد بگیرید؛ جوری که بتونید کدهای عادی رو بزنید.
بعد سعی کنید روی همون کدها best practice ها رو رعایت کنید و کدها رو تمیز کنید.

توی مسیر که دارید بیشتر و بیشتر پروژه میزنید جاهایی پیش میاد که مزیت نوشتن macro, async, .... رو درک می‌کنید اگر این اتفاق افتاد بعد شروع کنید به درک دقیق اون مبحث.

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

می‌خوام بگم؛ اونقدری یاد بگیرید که خطرناک باشید نه تو همه زمینه‌ها بلکه توی کار خودتون.

اجازه بدید زمان و تمرین، خیلی مباحث رو براتون آسونتر کنه.
👍249
Forwarded from Python Hints
تعجب کردید چطوری جنگنده‌های اسرائیلی به آسمان مشهد رسیدند ؟

من نکردم؛ چون آسمان بی‌صاحاب شد وقتی سپهبد #نادر_جهانبانی رو برای حفظ حریم هوایی به ناحق کشتید.

حتی موقعی که کشتیدش هم لباس خدمت به وطن رو از تنش در نیاورد ♥️💔
48❤‍🔥1👍1
Forwarded from Python Hints
#ایران

وقتی این روزها رو پشت سر گذاشتیم جون مادرتون چندتا کار رو انجام بدید :

۱- از روسیه فاصله بگیرید؛ به جرم جاسوسی بگیرید هرکی که اسم روسیه رو آورد.
نه سوخو داریم
نه s300-s400
نه حمایت
فقط پول رو خرجش کردیم؛ کشوری که پاره شدیم گفتیم تو تاریخ همیشه نامرد بوده برای ما.

۲- مهاجرین غیرقانونی رو اخراج کنید؛ جرم انگاری سنگین بذارید برای ورود‌های غیرقانونی.
با خانواده اخراجشون کنید؛ اینکه فقط مرداشون رو اخراج کنید دوای درد نیست.

۳- تریبون رو از رائفی‌پورها بگیرید؛ بوالله که اگر این‌ها جاسوس نباشند دوست نیستند.
خریت این‌ها مملکت رو به این روز انداخت؛ نذاشتند با دنیا تعامل کنیم.
نذاشتند بخش نظامی تقویت بشه؛ انقدر که با جفنگیات خواستند جلوی بمب و موشک و ... رو بگیرند.
من هنوز هم باور ندارم که این‌ها انقدر احمق باشند؛ تنها موردی که به ذهنم میرسه جاسوس بودن هست.

نمی‌دونم چی بگم دیگه ...
به امید روزای روشن برای ایران عزیزم ♥️
👍3518❤‍🔥2🔥2
Forwarded from Python Hints
و تمام!!!!

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

آپدیت :

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

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

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

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

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

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

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


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

واقعاً خاورمیانه از فیلم ترکی و فیلم هندی هم غیرقابل پیش‌بینی تر هست
👍8
#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
🔥16👍82