← Bütün məqalələr

Rust nədir və proqramçılar niyə ona keçir?

Burncode Team 3 dəq oxuma

Rust «ən sevilən dil» sorğularında daim ilk yerlərdə görünür və bu dəfə ajiotaj əsasən haqlıdır. Bu, ayın dəbdə olan freymvorku deyil — C və C++ dillərinin onilliklərdir əziyyət çəkdiyi problemi həll edən sistem proqramlaşdırma dilidir: yalnız canlı mühitdə, gecə saat 2-də, real yük altında üzə çıxan yaddaş xətaları.

Rust-ın həll etmək üçün yaradıldığı problem

C və C++ kimi dillərdə yaddaşı özünüz idarə edirsiniz. Bu, sürət və nəzarət verir, amma eyni zamanda bütöv bir xəta kateqoriyası da gətirir — azad edilmiş yaddaşdan istifadə (use-after-free), null göstəriciyə müraciət, verilənlər yarışı (data race). Bu xətaları kod icmalında tutmaq çox çətindir, istifadəyə verildikdən sonra isə sazlamaq daha da çətindir. İllər ərzində aşkarlanan ciddi təhlükəsizlik zəifliklərinin böyük hissəsi məhz yaddaşın bu cür səhv idarə olunmasından qaynaqlanır.

Rust-ın cavabı «borrow checker»dir — kompilyatorun yaddaş sahəsinə kimin və nə qədər müddətə sahib olduğuna dair ciddi qaydaları tətbiq edən hissəsi. Kodunuz yaddaş xətası yaradacaqsa, sadəcə kompilyasiya olunmayacaq. Bu, Rust ilə işlədiyiniz ilk həftə əsəbləşdirir, sonrakı hər həftə isə həqiqətən arxayınlıq verir.

Bunun praktikada əhəmiyyəti

  • Zibil yığıcısı olmadan performans: Rust təxminən C++ qədər sürətlə işləyir, amma Java və ya Go kimi yaddaşı təmizləmək üçün proqramınızı dayandırmır.
  • Canlı mühitdə daha az insident: qəzaların və təhlükəsizlik boşluqlarının bütöv sinifləri istifadəçi tərəfindən deyil, kompilyasiya mərhələsində aşkarlanır.
  • Həqiqətən faydalı paralellik: Rust-ın sahiblik qaydaları təsadüfən verilənlər yarışı yaratmağı xeyli çətinləşdirir — halbuki çoxaxınlı kodda bu, adətən aşkarlanması ən çətin xətalardan biridir.

Rust əslində harada istifadə olunur

Rust brauzer mühərrikləri kimi şeylər üçün sistem dili kimi başlayıb, lakin çoxdan bu çərçivədən kənara çıxıb. Hazırda o, həm sürətli, həm də etibarlı olmalı olan backend xidmətləri, komanda sətri alətləri (müasir proqramçı alətlərinin böyük hissəsi Rust-da yazılıb), resursların məhdud olduğu daxili sistemlər və IoT cihazları, eləcə də qəzanın həqiqətən baha başa gəldiyi infrastruktur — kritik backend məntiqini icra edən hər şey üçün ciddi seçimdir.

Dürüst desək, çatışmazlıqları

Rust-ı öyrənmək həqiqətən çətindir və o, bunu gizlətmir. «Açıq-aydın işləməli olan» kodu nə üçün işləmədiyini anlayana qədər «borrow checker» rədd edəcək və bu uyğunlaşma dövrü zibil yığıcılı dillərdən gələn bir çox təcrübəli proqramçını əsəbləşdirir. Üstəlik, o, hər iş üçün uyğun alət deyil — sadə tələbləri olan CRUD veb-tətbiqi qurursunuzsa, Rust-ın verdiyi təhlükəsizlik zəmanətləri Go və ya tipləşdirilmiş backend freymvorku ilə müqayisədə əlavə hazırlıq vaxtına dəyməyə bilər.

Öyrənməyə dəyərmi?

Performansın kritik olduğu, qəzanın baha başa gəldiyi və ya təhlükəsizlik baxımından həssas infrastrukturla bağlı layihələr üzərində işləyirsinizsə, bəli — Rust bu sərmayəyə dəyər. Millisaniyələrə qənaət etməkdən çox hazırlıq sürətinin vacib olduğu tipik veb-məhsullar yaradırsınızsa, o, zəruri deyil, sadəcə xoş bonusdur.

Ən dəbdə olanı deyil, sistemin real performans və etibarlılıq tələblərinə uyğun aləti seçmək — real trafikə davam gətirən infrastrukturu davam gətirməyəndən fərqləndirən əsas amillərdən biridir. Bulud və infrastruktur layihələrində biz daim belə qərarlar qəbul edirik — orada yanlış seçimin bədəli ilk gün deyil, aylar sonra üzə çıxır.