Rust veri yapıları ve algoritmalar için iyi mi?
Kullanmak için çok iyi: standart koleksiyonlar hızlı ve iyi belgelenmiştir, sort kararlıdır ve güvenli Rust, çöp toplayıcı olmadan sarkan pointer'ları ve veri yarışlarını derleme zamanında engeller. Pointer tabanlı yapıları yazmak içinse C'den ya da Java'dan daha zordur, çünkü Rc ve RefCell kullanmayı bilerek seçmedikçe ownership kuralları paylaşılan, değiştirilebilir bağlantılara izin vermez; çift yönlü bir bağlı liste ya da ebeveyn pointer'ları olan bir ağaç da tam olarak bunlardan oluşur. Bu zorluk aynı zamanda dersin kendisidir: onları Rust ile yazabildiğinde neyin kime ait olduğunu tam olarak bilirsin.
Hangi Rust koleksiyonu hangi veri yapısına karşılık gelir?
Vec<T> dinamik bir dizi ve senin stack'in, VecDeque<T> dairesel bir tampon ve senin kuyruğun, HashMap ve HashSet hash tablolarıdır (varsayılan olarak SipHash; kasıtlı çakışmalara karşı dayanıklıdır, bedeli biraz hız), BTreeMap ve BTreeSet sıralı B-ağaçlarıdır, BinaryHeap<T> bir max-heap'tir, LinkedList<T> ise bir Vec ya da VecDeque yerine nadiren tercih edeceğin çift yönlü bir bağlı listedir. Trie ya da graf tipi yok; onları sen kurarsın.
Rust'ta bağlı liste yazmak neden bu kadar zor?
Çünkü her değerin tam olarak bir sahibi vardır. Tek yönlü bir bağlı liste bu kurala uyar: her düğüm bir sonrakine Option<Box<Node>> üzerinden sahip olur. Çift yönlü bir bağlı liste ya da ebeveyn bağlantıları olan bir ağaç uymaz, çünkü her düğüme iki pointer ulaşır; bu yüzden geri bağlantılar için Weak ile birlikte Rc<RefCell<Node>> kullanırsın ya da düğümleri bir Vec içinde tutup onları indeksle bağlarsın. Learning Rust With Entirely Too Many Linked Lists, pek çok kişi tam da burada takıldığı için var.
Rust'ta nasıl min-heap elde ederim?
BinaryHeap<T> bir max-heap'tir, bu yüzden her öğeyi std::cmp::Reverse içine sar: Reverse(x) ekle, en küçük x ilk çıkar. Dijkstra için Reverse((distance, node)) ekle; tuple önce mesafeye göre karşılaştırılır. İkinci adımda bir heap'i kendin yazdıktan sonra sırasını tersine çevirmek apaçık olur.
Bu yoldaki hangi kurslar Rust ile anlatılmıyor?
Üç kurs: Python ile anlatılan dinamik programlama ve Python mülakat serisi, C++ ile anlatılan bit işlemleri. Adımlardan sonra listelenirler ve her birinin bağlantısı onu kendi dilinde açar. Rust'ta bir memo tablosu bir Vec ya da bir HashMap olur; tam sayı taşması ise debug derlemesinde panic'e yol açar, bu yüzden taşınca başa dönmeye dayanan bir bit hilesi bunu wrapping_add ya da wrapping_mul ile açıkça yazar.
Bu yola başlamadan önce Rust bilmem gerekiyor mu?
En azından ownership, borrowing, struct'lar, enum'lar ve Option; Box ve trait'ler de işe yarar. Bunlar sana yeniyse, Coddy'nin Rust kursu seni önce oraya ücretsiz olarak getirir ve bu yol onun bittiği yerden devam eder.