Últimas publicaciones de Rust for Python developers (@pyrust) en Telegram

Publicaciones de Telegram de Rust for Python developers

Rust for Python developers
Rust programming language for python developers

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

اگر به هوش مصنوعی و پایتون علاقه دارید به کانال :
@pytens
@pyhints
سر بزنید.
1,740 Suscriptores
13 Fotos
2 Videos
Última Actualización 06.03.2025 22:23

Canales Similares

DevOps
11,125 Suscriptores
Syntax | سینتکس
3,058 Suscriptores

El contenido más reciente compartido por Rust for Python developers en Telegram

Rust for Python developers

19 Dec, 13:09

1,475

هلوکاست ایرانی

یک زمانی شهردار تهران رو بخاطر ترافیک تهران اعدام کردند.

آخوند جز ویرانی، برای ایران دستاورد نداشت.
Rust for Python developers

18 Dec, 17:10

1,703

این پروژه limbo خیلی باحاله و دانشگاهیه برای آموزش crate های مختلف؛ سورس کدش رو بخونید
Limbo Github

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

من خود پروژه رو هنوز به کسی پیشنهاد نمیدم؛ ولی این خیلی خفنه مثلا برید توی سورس کد
cli/app.rs

اول اینکه هر پوشه ماژولار دیده شده و هر پوشه Cargo.toml خودش رو داره که باحال بود (دفعه اول بود می‌دیدم)

بعد توی این سورس کد مثال clap رو ببینید؛ من برای پروژه چند وقت پیشم بیچاره شدم تا همه اینارو کنار هم درک کنم و بیارم.
اینجا همش هست؛ تازه ماژولار و تر و تمیز با Best Practice ها و خوبیش اینه که هممون به اندازه کافی از SQLite می‌دونیم و دانش خوبی داریم ازش.
Rust for Python developers

17 Dec, 18:34

1,563

fs::read_to_string

باگ خفته، یک سرویس کوچیک داریم که دائم down می‌شه چک می‌کنیم می‌بینیم دقیقا قبلش دیوایس (Edge Device) اونم داره ریستارت میشه.
پس نیرو میره سراغ مشکلات دیوایس؛ این وسط منم رفتم سورس کد بخونم.

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

توی سورس کد دیدم طرف اینطوری داره فایل رو می‌خونه؛ یک نمونه فایل رو گرفتم (بعد از کرش کردن دستگاه)

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

برای همین توی اکثر آموزش‌های حرفه‌ای از این مورد استفاده نمی‌شه و راه سخت‌تره read, buffer, ... پیش گرفته می‌شه

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


گفتم اینجا هم بگم، شاید یک نفر دیگه رو هم از چندساعت دیباگ نجات داد.
Rust for Python developers

15 Dec, 13:07

1,759

جنگ کوانتوم.

دستاوردهای گوگل و چین رو دیدید ؟
Rust for Python developers

12 Dec, 08:14

2,927

بجای انتظار کشیدن؛ ویدئو ببینیم
Youtube Video

وسط build, compile, .... پروژه شرکت دیروز این رو شروع کردم و امروز دارم ویدئوهای بعدی رو ادامه میدم.
بسیار بسیار ویدئو خوبی هست.
Rust for Python developers

01 Dec, 22:18

2,318

یک مشکلی داشتم،
من توی خونه برای راحتی فیلم دیدن خانواده یک سیستم NAS ایجاد کرده بودم چندسال قبل
NextCloud, ...
روی رزبری که به هارد وصل بود.

حدوداً ۲ سال قبل رزبری به مشکل خورد و سیستم رفت و منم دیگه حوصله و وقت کانفیگ نداشتم (نیازی هم نبود، هرکسی هرچی می‌خواست دوباره دانلود می‌کرد)

تا اینکه چندشب پیش یک سری فایل خواستیم به اشتراک بذاریم که حجمش خیلی زیاد می‌شد و اختصاصی هم بود.
دنبال راهکار، رزبری رو راه انداختم و
Sync directory
زدم، بعد به ذهنم رسید بجای nextcloud, ... همین کارو بکنم ی کد بزنم دائم یک پوشه رو مانیتور کنه
و اگر چیزی به پوشه اضافه شد که روی سرور (رزبپری نیست) اتومات آپلود کنه.

ابزار‌ برای اینکار هست حتی کد پایتون برای ۱ کلاینت و چند سرور رو هم دارم خودم (فقط روی اسم و تایم کار می‌کنه البته)

اینو دارم با Rust می‌نویسم توی وقتای خالی (حتی ۱۰-۲۰ دقیقه) و خیلی پروژه جذاب و پر تمرینی شده
گفتم اگر کسی خواست تمرین کنه :

ویژگی‌ها : چندتا آرگومان میگیره

اطلاعات ssh و کلید و ...

پوشه لوکال

پوشه سرور

همزمان می‌تونه چندتا پوشه رو هم track کنه.

روی تغییر متادیتا پوشه مثل زمان دسترسی و ... پوشه رو اسکن می‌کنه فایل جدید اگر پیدا کنه که hash اش توی جدول نباشه ( تیبل لوکال) تیبل سرور رو نگاه می‌کنه (ممکن اون فایل از طریق یک کامپیوتر یا دستگاه دیگه آپلود شده باشه) و اگر بود نوتیف میده که فایل آپلود شده

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

فیچر sync delete داره، برای موارد غیر حساس و ... مثلاً ی دوره آموزشی رو روی سیستم داری می‌خوای روی گوشی و تبلت و .... باشه که موقع خواب هم یک نگاهی بکنی بهش.
این مورد روی هر کلاینتی فعال باشه، فایل های اون کلاینت به محض پاک شدن از سورس از سرور هم پاک خواهند شد.

چندتا فیچر دیگه هم درآورم براش که توی سیستم نوشتم الان یادم نمیاد، ولی خب همین هم حجم تمرین بسیار بالایی داره و خیلی از crate هایی که توی مصاحبه‌ها ازم پرسیده شد رو باید درست درک کنید برای پیاده‌سازی

امیدوارم تمرین خوب و جذابی باشه.
Rust for Python developers

28 Nov, 09:12

1,564

کلید RSA هم برای اولین بار شکسته شد.
نیاز فوری به الگوریتم Encryption جدید و قویتر

Blog Post
Rust for Python developers

14 Nov, 09:27

2,657

چندتا مقاله قدیمی دارم می‌خونم درمورد Rust خیلی جالب بود برام.

ًRust in production at figma (2018)

دیسکورد هم یک پست درمورد اینکه چرا از Go به Rust رفته منتشر کرده (همون سال ۲۰۲۰)

Why discord is switching from go to rust

نکته آخر اینکه؛
۱- توجه کنید به نیازمندی‌ها و ساختار سیستم‌هاشون
۲- درمود بدی‌هایی که با Rust گفته شده بسیاریش توی این چندسال رفع شده و توی پرفورمنس حتی Rust سریعتر هم شده.
Rust for Python developers

28 Oct, 21:51

2,789

یک چندتا ادیت روی این مورد بدم؛ همونطور که گفتم من تازه داشتم اینجا داکرفایل رو برای پروژه‌ام می‌نوشتم که توی گروه یکی از دوستان سوال پرسید و ترجیح دادم روی نمونه جواب بدم.
اینکه این dockerfile درست هست خوبه یا نه هدف نبود و هدف درک multi-stage بود.

اما چندتا نکته (بر خلاف دنیای پایتون) :

۱- استفاده از اسم src قطعا اینجا مناسب نیست؛ من حواسم نبود ولی cargo, rustc رو این اسم حساب می‌کنند پس app رو جایگزین کردم

۲- از cargo-chef استفاده کردم به ۲ دلیل :
۲-۱: توی کد بالا من compile انجام نمیدادم و فقط پکیج‌هارو دانلود میکردم؛ قصدم این بود توی استپ بعدی سراغش برم ولی خب توی بعضی شرایط خاص دردسرش زیاد میشه که الان فرصتش رو نداشتم.
۲-۲: توی همون شرایط و crate های خاص (که اتفاقا یکی از دوستان توی پروژه‌اش بهم نشون داد) باعث میشه قابلیت cache رو از دست بدید؛ دلیل اصلیش رو نمی‌دونم.

۳- بجای استفاده از اداکر ایمیج‌های معرفی شده توسط پروژه cargo-chef از همون rust:1.82.0 استفاده کردم و فقط یک استیج بیشتر ساختم که دستورات زیر رو داشته باشه :
RUN apt update && apt install lld clang -y && cargo install cargo-chef


۴- وقتی sqlx رو توی پروژه دارم؛ توی استیج runtime حتما باید sqlx migrate runtime رو اجرا کنم. (برایحجم کمتر این مورد رو با migrate macro اجرا کردم.

۵- خیلی بهتره موقع استفاده از cargo build —release توی استیج builder باید از فلگ:
—bin <appname>
استفاده کنم


نهایتا شد این :
FROM rust:1.82.0 AS chef
WORKDIR /app
RUN apt update && apt install lld clang -y && cargo install cargo-chef

FROM chef as planner
COPY . .
RUN cargo chef prepare --recipe-path recipe.json

FROM chef AS builder
COPY --from=planner /app/recipe.json recipe.json
RUN cargo chef cook --release --recipe-path recipe.json
COPY . .
ENV SQLX_OFFLINE true
RUN cargo build --release --bin XYZ

FROM debian:bookworm-slim AS runtime
WORKDIR /app
RUN apt update -y \
&& apt install -y --no-install-recommends openssl ca-certificates \
&& apt autoremove -y \
&& apt clean -y \
&& rm -rf /var/lib/apt/lists/*
COPY --from=builder /app/target/release/XYZ XYZ
COPY .env .env
ENTRYPOINT [ "./XYZ" ]
Rust for Python developers

28 Oct, 16:18

1,713

پاسخ من به یک سوال در مورد multi-stage dockerfile که توی گروه بحث آزادمون شده بود دیدم روی rust دارم مثال میزنم گفتم اینجا هم بذارم.

——————————————————————————————

توی این داکرفایل من اول اومدم از یک ایمیج کامل rust استفاده کردم برای بخش اول اسم این بخش رو گذاشتم builder؛ این ایمیج شامل همه چیزهایی که من لازم دارم هست مثل یک لینوکس دبیان کامل و اگر سایزش رو هم ببینید بصورت خام 1.47 GB هست.

یک توی خط ۴ دارم پکیج‌های دیگه‌ای که برای کامپایل سریعتر نیاز دارم رو نصب می‌‌کنم؛ نکته مهم هم همینجاس من این‌ها رو فقط برای کامپایل نیاز دارم و نه برای اجرای کد نهایی

توی خط ۵ Cargo.toml, Cargo.lock رو کپی می‌کنم که dependency هارو داشته باشم ولی Rust مثل python نیست؛ یعنی نمیشه بدون داشتن سورس کد dependency هارو دانلود کرد و cache کرد یا بگی روی این environment نصبش کن و ...
پس خط ۶ رو دارم که یک main.rs خالی میسازم برای اینکه بتونم dependency هارو بگیرم و cache کنم مراحل رو ایده هم اینه :
اگر سورس کد من ی خط تغییر کرد ولی dependency عوض نشد نباید مجبور بشم dependency هارو مجدد دانلود کنم و ...

همینجا اضافه کنم ی crate داریم به اسم cargo chef که برای همین کار هست؛ من تا جایی که مجبور نباشم ازش استفاده نمی‌کنم که یک dependency کمتر برای داکر داشته باشم.

خط ۸ و ۹ پروژه خودم رو کپی و کامپایل می‌کنم.


توی خط ۱۲ دارم از یک ایمیج دیگه استفاده می‌کنم که اصلا rust, rustc, cargo , ... رو هم نداره و image مرحله قبل بر پایه این هست حجم این ایمیج فقط و فقط 75MB هست.
خط ۱۴ تا ۱۸ پکیج‌هایی که این ایمیج نداره و نیاز دارم رو نصب می‌کنم مثل openssl, ca-certificates اینم برای دسترسی به سرویس دیتابیس هست چون روی یک سرور دیگه هست.

در نهایت از مرحله قبل نتیجه compile رو بر میدارم + .env پروژه و پروژه رو اجرا می‌کنم
حجم نهایی کانتینر پروژه روی 200MB هست درحالی که اگر از multi-stage استفاده نمی‌کردم و می‌خواستم روی ایمیج 1.47GB اجراش کنم حجمش به بیش از 3GB میرسید و با هر تغییر توی کدهام باید حتی منتظر دانلود شدم پکیج‌ها و .. هم می‌موندم.

اضافه کنم :
راجب cargo-chef هم مزیتش رو نمی‌فهمم (بنظرم یک bottleneck و یک نگرانی اضافه هست) قطعا یک discussion جدید می‌سازم روی rust community ببینم مزیتش چیه.


پ.ن :
سورس توی کامنت؛ اگر نمی‌تونید فونت رو بخونید.