کتابخانههای Rust
کتابخانهها (Libraries) در زبانهای برنامهنویسی، مجموعهای از کدها هستند که از پیش نوشته شدهاند و نیازی خاص از برنامه را تأمین میکنند. این کدها میتوانند منتشر شوند تا سایرین نیز بتوانند در موارد مشابه، از آن کتابخانهها استفاده نمایند.در زبان Rust نیز چنین است و کتابخانههای پیشساختهٔ بسیاری وجود دارد. جامعهٔ توسعهدهندگان زبان Rust بسیار فعال است و در طی چند سال، تعداد بسیار زیادی از کتابخانهها که برای مصارف خرد تا مصارف کلان طراحی شدهاند را در دسترس قرار دادهاند. کتابخانههای Rust میتوانند بخش زیادی از نیازمندیهای یک برنامۀ کاربردی را در هر سطحی که باشد، تأمین نمایند.Rust منبع اختصاصی خود را برای انتشار کتابخانهها دارد؛ crates.io. این کتابخانهها بسیاری از نیازمندیهای برنامهنویسان را مرتفع میسازند و البته استفاده از کتابخانههای C++ نیز از طریق Rust ممکن است. در نتیجه، نیازی به نگرانی در این مورد نیست که «اگر نتوانم کتابخانهٔ مورد نظرم را بیابم، برنامهام عقب میافتد!» مضاف بر اینکه زبان Rust منحنی یادگیری نسبتاً سریعی دارد و چه بسا خودتان هم بتوانید کتابخانهای که احیانا در زبانی دیگر نمیتوانستید بنویسید را در Rust طراحی کنید! خدا را چه دیدید، شاید شما نیز آن را منتشر کردید و ما نیز از آن استفاده کردیم!
چند کتابخانهٔ مهم و کاربردی در Rust
- Tokio: یکی از بهترین گزینهها برای برنامهنویسی غیر همزمان (Asynchronous Programming) در Rust است. این کتابخانه به نوعی معادل کتابخانهٔ استاندارد java.NIO است که امکان توسعهٔ برنامههای غیر همزمان را فراهم میآورد و کمک میکند تا عملیاتهای کار با منابع IO همچون سوکتها و فایلها را با کارایی بسیار بالا در عین سادگی زیاد انجام دهیم. جالب است بدانید در Tokio اکثر ساختارها همنام با کتابخانهٔ استاندارد IO در Rust هستند و مهاجرت از یکی به دیگری، مثل آب خوردن است و چالش چندانی به همراه ندارد! کافی است یک بار با IO در Rust آشنا شوید، تا سپس به نسخهٔ Asynchronous آن در Tokio دسترسی داشته باشید! Tokio بخش جداییناپذیر از نرمافزارهای سمت سرور است که میخواهند بهصورت همزمان، تعداد زیادی از درخواستها را مورد پردازش قرار دهند.
- Diesel: این کتابخانه، یک ORM (Object-Relational Mapping) شناختهشده در زبان Rust است. اگر قبلاً تجربهٔ استفاده از Entity Framework یا Hibernate را داشتهاید، مفهوم ORM برایتان آشنا خواهد بود. Diesel همین مفهوم را برای شما در Rust پیادهسازی میکند تا بتوانید نرمافزاری با ساختاری مشخص جهت برقراری ارتباط با پایگاه داده تولید کنید.
- Actix Web: چه میشود اگر بر بستر Tokio، یک Web Framework پیادهسازی شود؟ این دقیقاً همان کاری است که Actix Web انجام میدهد تا از اکوسیستم بزرگ Tokio نیز بتوان استفاده کرد. Actix Web اجازه میدهد تا Web Service و Web Application با کارایی بالا تولید کنیم. البته این مهم توسط خود Tokio نیز قابل پیادهسازی است، اما Actix Web در کنار سایر رقبایش این کار را سادهتر کردهاند. این فریمورک بر پایهٔ مدل Actor ساخته شده تا بتواند زیر بار سنگین نیز دوام بیاورد! فریمورکی سریع و انعطافپذیر که انتخاب بسیاری از توسعهدهندگان شده است.
- Serde: این کتابخانه برای عملیاتهای مرتبط با خواندن و نوشتن فرمتهای استاندارد دادههای مورد انتقال استفاده میشود. یک Serializer و Deserializer برای فرمتهایی همچون JSON، YAML و تعداد بسیاری از فرمتهای دیگر که توانسته جایگاه خوبی در میان توسعهدهندگان Rust به دست بیاورد. این کتابخانه برای پروژههایی که API ارائه میکنند یا از APIها استفاده میکنند، بسیار مفید است. سرعت و کارایی بالا و امکان تعریف فرمت جدید و سفارشی داده نیز از دیگر قابلیتهای این کتابخانه است.
- Rand: Rust از تولید اعداد تصادفی پشتیبانی میکند، اما این پشتیبانی داخلی بسیار محدود است. کتابخانهٔ rand با استفاده از امکانات داخلی خود زبان Rust، مجموعهای بسیار عالی از ساختارها و توابع مرتبط با تولید چیزهای تصادفی را به ارمغان آورده است. البته rand یک کتابخانهٔ «امنیتی» نیست، اما راهکارهایی برای تولید اعداد تصادفی امن را ارائه میدهد.
- Rayon: بهطور معمول، iteratorها عملکرد بهتری نسبت به حلقههای سنتی دارند؛ اما باز هم فقط در یک رشتهٔ پردازشی اجرا میشوند. Rayon اجازه میدهد تا همان ساختار iterator را این بار بهصورت موازی اجرا کنیم تا از مزایای همزمانی و موازیسازی بهصورت توأمان برخوردار شویم. توجه کنید که این کتابخانه با Tokio تفاوتهای بسیاری دارد که همانا تفاوت میان Asynchronous Programming و Parallel Programming است. هر کسی را بهر کاری ساختند!